aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--wqflask/wqflask/static/packages/jqplot/MIT-LICENSE.txt21
-rw-r--r--wqflask/wqflask/static/packages/jqplot/README.txt77
-rw-r--r--wqflask/wqflask/static/packages/jqplot/additional-methods.js437
-rw-r--r--wqflask/wqflask/static/packages/jqplot/additional-methods.min.js4
-rw-r--r--wqflask/wqflask/static/packages/jqplot/changes.txt395
-rw-r--r--wqflask/wqflask/static/packages/jqplot/copyright.txt56
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/MIT-LICENSE-txt.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/changes-txt.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/gpl-2-0-txt.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/background.jpgbin0 -> 1101 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/basicline.pngbin0 -> 17024 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogaxis.pngbin0 -> 19902 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogoptions.pngbin0 -> 17207 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/basicoptions.pngbin0 -> 19864 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/dualaxis.pngbin0 -> 29672 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/logo.jpgbin0 -> 14632 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocs.pngbin0 -> 996 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocsover.pngbin0 -> 1006 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownload.pngbin0 -> 1236 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownloadover.pngbin0 -> 1265 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamples.pngbin0 -> 1308 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamplesover.pngbin0 -> 1332 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/navhome.pngbin0 -> 858 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/navhomeover.pngbin0 -> 886 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/new.pngbin0 -> 13750 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/sample3.pngbin0 -> 44781 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/samplesm.pngbin0 -> 20874 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotCssStyling-txt.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotOptions-txt.html292
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisLabelRenderer-js.html47
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisTickRenderer-js.html73
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-canvasGridRenderer-js.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-core-js.html389
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-divTitleRenderer-js.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-lineRenderer-js.html69
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-linearAxisRenderer-js.html61
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-markerRenderer-js.html65
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shadowRenderer-js.html61
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shapeRenderer-js.html65
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-themeEngine-js.html191
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-toImage-js.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/optionsTutorial-txt.html120
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html45
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-barRenderer-js.html69
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html53
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html71
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html63
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html79
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasOverlay-js.html113
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html46
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ciParser-js.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-cursor-js.html93
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html101
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html98
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dragable-js.html45
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html51
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html87
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-highlighter-js.html80
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html47
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html49
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html62
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html103
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html65
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html93
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pointLabels-js.html72
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidAxisRenderer-js.html49
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidGridRenderer-js.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidRenderer-js.html55
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-trendline-js.html67
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/usage-txt.html58
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index.html1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Classes.html70
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Files.html34
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Functions.html70
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/General.html42
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/General2.html42
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/General3.html42
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/General4.html46
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/General5.html50
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/General6.html34
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/General7.html58
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Hooks.html46
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Properties.html42
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Properties2.html42
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Properties3.html46
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Properties4.html50
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Properties5.html34
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Properties6.html58
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/javascript/main.js836
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/javascript/searchdata.js182
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesA.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesD.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesG.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesH.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesJ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesL.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesS.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesSymbols.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesT.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesV.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FilesJ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsC.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsD.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsG.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsI.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsM.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsN.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsQ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsR.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsS.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsZ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralA.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralB.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralC.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralD.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralE.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralF.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralG.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralH.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralI.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralJ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralL.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralM.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralN.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralO.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralP.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralQ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralR.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralS.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralSymbols.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralT.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralU.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralV.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralW.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralX.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralY.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralZ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/HooksA.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/HooksE.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/HooksJ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/HooksP.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/NoResults.html15
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesA.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesB.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesC.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesD.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesE.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesF.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesG.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesH.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesI.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesL.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesM.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesN.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesO.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesP.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesR.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesS.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesT.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesU.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesV.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesW.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesX.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesY.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesZ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/styles/1.css767
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/styles/2.css174
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/styles/main.css2
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/KCPsample4.csv25
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/ages.json5
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/ajax-loader.gifbin0 -> 3208 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/area.html229
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/axisLabelTests.html157
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/axisLabelsRotatedText.html229
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/axisScalingForceTickAt.html242
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/bandedLine.html310
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/bar-charts.html219
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/barLineAnimated.html165
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/barTest.html299
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/bezierCurve.html125
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/blockPlot.html199
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/bubble-plots.html213
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/bubbleChart.html264
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/candlestick-charts.html209
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/candlestick.html322
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/canvas-overlay.html231
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/colorpicker/README140
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/colorpicker/TODO14
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/bar-alpha.pngbin0 -> 2195 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/bar-opacity.pngbin0 -> 134 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/bar-pointer.pngbin0 -> 198 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/bar.pngbin0 -> 382 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/map-opacity.pngbin0 -> 139 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/map-pointer.pngbin0 -> 344 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/map.pngbin0 -> 78245 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/preview-opacity.pngbin0 -> 135 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/ui-colorpicker.pngbin0 -> 494 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/colorpicker/index.html85
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/colorpicker/jquery.colorpicker.css129
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/colorpicker/jquery.colorpicker.js1654
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/cursor-highlighter.html137
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/customHighlighterCursorTrendline.html104
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/dashboardWidget.html212
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/dashedLines.html227
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/data-renderers.html144
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/date-axes.html107
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/dateAxisLogAxisZooming.html101
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/dateAxisRenderer.html292
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/example.js114
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/example.min.js1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/examples.css140
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/examples.min.css1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/fillBetweenLines.html134
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/hiddenPlotsInTabs.html225
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/images/logo.jpgbin0 -> 14632 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/images/ui-colorpicker.pngbin0 -> 494 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/index.html108
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.pngbin0 -> 180 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.pngbin0 -> 178 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.pngbin0 -> 120 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.pngbin0 -> 105 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.pngbin0 -> 111 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.pngbin0 -> 110 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.pngbin0 -> 119 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.pngbin0 -> 101 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.pngbin0 -> 4369 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.pngbin0 -> 4369 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.pngbin0 -> 4369 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.pngbin0 -> 4369 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.pngbin0 -> 4369 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/jquery-ui.css568
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/jquery-ui.min.css1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.pngbin0 -> 260 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.pngbin0 -> 251 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.pngbin0 -> 178 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.pngbin0 -> 104 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.pngbin0 -> 125 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.pngbin0 -> 105 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.pngbin0 -> 3762 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.pngbin0 -> 90 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.pngbin0 -> 129 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_228ef1_256x240.pngbin0 -> 4369 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ef8c08_256x240.pngbin0 -> 4369 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ffd27a_256x240.pngbin0 -> 4369 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ffffff_256x240.pngbin0 -> 4369 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.9pre.css612
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.9pre.min.css10
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui.css568
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui.min.css1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery-ui-1.9pre.min.js473
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery-ui.js11767
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery-ui.min.js791
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery.effects.blind.js80
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery.effects.blind.min.js14
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery.effects.core.js890
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery.effects.core.min.js32
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery.print.js103
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jquery.printElement.min.js28
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/jsondata.txt1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/kcp.print.js136
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/kcp_area.html284
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/kcp_area2.html217
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/kcp_area2.json2
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/kcp_cdf.html351
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/kcp_engel.html256
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/kcp_lorenz.html528
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/kcp_pdf.html387
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/kcp_pyramid.html590
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/kcp_pyramid2.html578
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/kcp_pyramid_by_age.html859
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/kcp_pyramid_by_age.php862
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/kcp_quintiles.html663
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/line-charts.html193
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/mekkoCharts.html269
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/meritOrder.html103
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/meterGauge.html179
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/multipleBarColors.html131
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/nav.inc40
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/pie-donut-charts.html160
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/pieTest.html187
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/pieTest2.js80
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/pieTest4.html258
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/point-labels.html193
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/quintiles.json348
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/resizablePlot.html196
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/rotated-tick-labels.html216
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/rotatedTickLabelsZoom.html118
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/selectorSyntax.html157
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/smoothedLine.html137
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/LGPL-LICENSE165
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/MIT-LICENSE20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shAutoloader.js17
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shAutoloader.min.js1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shBrushJScript.js52
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shBrushJScript.min.js1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shBrushXml.js69
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shBrushXml.min.js1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shCore.js17
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shCore.min.js1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shCore.css226
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shCore.min.css1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shCoreDefault.css328
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shCoreDefault.min.css1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shThemeDefault.css117
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shThemeDefault.min.css1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shThemejqPlot.css138
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shThemejqPlot.min.css1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/theming.html519
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/topbanner.inc9
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/waterfall.html162
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/waterfall2.html231
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/yahooData.js1807
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/yahooData.min.js1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/zoom1.html149
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/zoomOptions.html176
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/zoomProxy.html161
-rw-r--r--wqflask/wqflask/static/packages/jqplot/examples/zooming.html209
-rw-r--r--wqflask/wqflask/static/packages/jqplot/excanvas.js1438
-rw-r--r--wqflask/wqflask/static/packages/jqplot/excanvas.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/gpl-2.0.txt280
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jqPlotCssStyling.txt53
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jqPlotOptions.txt276
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jquery.jqplot.css259
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jquery.jqplot.js11381
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.css1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jquery.js9046
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jquery.min.js4
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jquery.validate.js1248
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jquery.validate.min.js4
-rw-r--r--wqflask/wqflask/static/packages/jqplot/optionsTutorial.txt240
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.js313
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.js797
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.js235
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.js759
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js203
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.js243
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.js865
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.js449
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.js673
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.js116
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.js1108
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.js737
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.js805
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.js225
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.js305
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.js943
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.js465
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.js475
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.js529
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.js611
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.js437
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.js1030
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.js45
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.js373
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.js904
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.js379
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.js728
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.js429
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.js514
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.js223
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/usage.txt126
392 files changed, 87659 insertions, 0 deletions
diff --git a/wqflask/wqflask/static/packages/jqplot/MIT-LICENSE.txt b/wqflask/wqflask/static/packages/jqplot/MIT-LICENSE.txt
new file mode 100644
index 00000000..647db23f
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/MIT-LICENSE.txt
@@ -0,0 +1,21 @@
+Title: MIT License
+
+Copyright (c) 2009-2012 Chris Leonello
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE. \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/README.txt b/wqflask/wqflask/static/packages/jqplot/README.txt
new file mode 100644
index 00000000..4932a00c
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/README.txt
@@ -0,0 +1,77 @@
+Title: jqPlot Readme
+
+Pure JavaScript plotting plugin for jQuery.
+
+To learn how to use jqPlot, start with the Basic Usage Instructions below. Then read the
+usage.txt and jqPlotOptions.txt files included with the distribution.
+
+The jqPlot home page is at <http://www.jqplot.com/>.
+
+Downloads can be found at <http://bitbucket.org/cleonello/jqplot/downloads/>.
+
+The mailing list is at <http://groups.google.com/group/jqplot-users>.
+
+Examples and unit tests are at <http://www.jqplot.com/tests/>.
+
+Documentation is at <http://www.jqplot.com/docs/>.
+
+The project page and source code are at <http://www.bitbucket.org/cleonello/jqplot/>.
+
+Bugs, issues, feature requests: <http://www.bitbucket.org/cleonello/jqplot/issues/>.
+
+Basic Usage Instructions:
+
+jqPlot requires jQuery (1.4+ required for certain features). jQuery 1.4.4 is included in
+the distribution. To use jqPlot include jQuery, the jqPlot jQuery plugin, the jqPlot css file and
+optionally the excanvas script to support IE version prior to IE 9 in your web page:
+
+> <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
+> <script language="javascript" type="text/javascript" src="jquery-1.4.4.min.js"></script>
+> <script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script>
+> <link rel="stylesheet" type="text/css" href="jquery.jqplot.css" />
+
+For usage instructions, see <jqPlot Usage> in usage.txt. For available options, see
+<jqPlot Options> in jqPlotOptions.txt.
+
+Building from source:
+
+If you've cloned the repository, you can build a distribution from source.
+You need to have ant <http://ant.apache.org> installed. You can simply
+type "ant" from the jqplot directory to build the default "all" target.
+There are 6 pertinent targets: clean, dist, min, docs, compress and all. Use:
+
+> ant -p
+
+to get a description of the various build targets.
+
+Legal Notices:
+
+Copyright (c) 2009-2010 Chris Leonello
+jqPlot is currently available for use in all personal or commercial projects
+under both the MIT and GPL version 2.0 licenses. This means that you can
+choose the license that best suits your project and use it accordingly.
+
+Although not required, the author would appreciate an email letting him
+know of any substantial use of jqPlot. You can reach the author at:
+chris at jqplot or see http://www.jqplot.com/info.php .
+
+If you are feeling kind and generous, consider supporting the project by
+making a donation at: http://www.jqplot.com/donate.php .
+
+jqPlot includes date instance methods and printf/sprintf functions by other authors:
+
+Date instance methods:
+
+ author Ken Snyder (ken d snyder at gmail dot com)
+ date 2008-09-10
+ version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+
+JavaScript printf/sprintf functions.
+
+ version 2007.04.27
+ author Ash Searle
+ http://hexmen.com/blog/2007/03/printf-sprintf/
+ http://hexmen.com/js/sprintf.js
+ The author (Ash Searle) has placed this code in the public domain:
+ "This code is unrestricted: you are free to use it however you like."
diff --git a/wqflask/wqflask/static/packages/jqplot/additional-methods.js b/wqflask/wqflask/static/packages/jqplot/additional-methods.js
new file mode 100644
index 00000000..801d0b7f
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/additional-methods.js
@@ -0,0 +1,437 @@
+/*! jQuery Validation Plugin - v1.10.0 - 9/7/2012
+* https://github.com/jzaefferer/jquery-validation
+* Copyright (c) 2012 Jörn Zaefferer; Licensed MIT, GPL */
+
+/*!
+ * jQuery Validation Plugin 1.10.0
+ *
+ * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
+ * http://docs.jquery.com/Plugins/Validation
+ *
+ * Copyright (c) 2006 - 2011 Jörn Zaefferer
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+
+(function() {
+
+ function stripHtml(value) {
+ // remove html tags and space chars
+ return value.replace(/<.[^<>]*?>/g, ' ').replace(/&nbsp;|&#160;/gi, ' ')
+ // remove punctuation
+ .replace(/[.(),;:!?%#$'"_+=\/-]*/g,'');
+ }
+ jQuery.validator.addMethod("maxWords", function(value, element, params) {
+ return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length <= params;
+ }, jQuery.validator.format("Please enter {0} words or less."));
+
+ jQuery.validator.addMethod("minWords", function(value, element, params) {
+ return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length >= params;
+ }, jQuery.validator.format("Please enter at least {0} words."));
+
+ jQuery.validator.addMethod("rangeWords", function(value, element, params) {
+ var valueStripped = stripHtml(value);
+ var regex = /\b\w+\b/g;
+ return this.optional(element) || valueStripped.match(regex).length >= params[0] && valueStripped.match(regex).length <= params[1];
+ }, jQuery.validator.format("Please enter between {0} and {1} words."));
+
+})();
+
+jQuery.validator.addMethod("letterswithbasicpunc", function(value, element) {
+ return this.optional(element) || /^[a-z\-.,()'\"\s]+$/i.test(value);
+}, "Letters or punctuation only please");
+
+jQuery.validator.addMethod("alphanumeric", function(value, element) {
+ return this.optional(element) || /^\w+$/i.test(value);
+}, "Letters, numbers, and underscores only please");
+
+jQuery.validator.addMethod("lettersonly", function(value, element) {
+ return this.optional(element) || /^[a-z]+$/i.test(value);
+}, "Letters only please");
+
+jQuery.validator.addMethod("nowhitespace", function(value, element) {
+ return this.optional(element) || /^\S+$/i.test(value);
+}, "No white space please");
+
+jQuery.validator.addMethod("ziprange", function(value, element) {
+ return this.optional(element) || /^90[2-5]\d\{2\}-\d{4}$/.test(value);
+}, "Your ZIP-code must be in the range 902xx-xxxx to 905-xx-xxxx");
+
+jQuery.validator.addMethod("zipcodeUS", function(value, element) {
+ return this.optional(element) || /\d{5}-\d{4}$|^\d{5}$/.test(value)
+}, "The specified US ZIP Code is invalid");
+
+jQuery.validator.addMethod("integer", function(value, element) {
+ return this.optional(element) || /^-?\d+$/.test(value);
+}, "A positive or negative non-decimal number please");
+
+/**
+ * Return true, if the value is a valid vehicle identification number (VIN).
+ *
+ * Works with all kind of text inputs.
+ *
+ * @example <input type="text" size="20" name="VehicleID" class="{required:true,vinUS:true}" />
+ * @desc Declares a required input element whose value must be a valid vehicle identification number.
+ *
+ * @name jQuery.validator.methods.vinUS
+ * @type Boolean
+ * @cat Plugins/Validate/Methods
+ */
+jQuery.validator.addMethod("vinUS", function(v) {
+ if (v.length != 17) {
+ return false;
+ }
+ var i, n, d, f, cd, cdv;
+ var LL = ["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"];
+ var VL = [1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9];
+ var FL = [8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2];
+ var rs = 0;
+ for(i = 0; i < 17; i++){
+ f = FL[i];
+ d = v.slice(i,i+1);
+ if (i == 8) {
+ cdv = d;
+ }
+ if (!isNaN(d)) {
+ d *= f;
+ } else {
+ for (n = 0; n < LL.length; n++) {
+ if (d.toUpperCase() === LL[n]) {
+ d = VL[n];
+ d *= f;
+ if (isNaN(cdv) && n == 8) {
+ cdv = LL[n];
+ }
+ break;
+ }
+ }
+ }
+ rs += d;
+ }
+ cd = rs % 11;
+ if (cd == 10) {
+ cd = "X";
+ }
+ if (cd == cdv) {
+ return true;
+ }
+ return false;
+}, "The specified vehicle identification number (VIN) is invalid.");
+
+/**
+ * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.
+ *
+ * @example jQuery.validator.methods.date("01/01/1900")
+ * @result true
+ *
+ * @example jQuery.validator.methods.date("01/13/1990")
+ * @result false
+ *
+ * @example jQuery.validator.methods.date("01.01.1900")
+ * @result false
+ *
+ * @example <input name="pippo" class="{dateITA:true}" />
+ * @desc Declares an optional input element whose value must be a valid date.
+ *
+ * @name jQuery.validator.methods.dateITA
+ * @type Boolean
+ * @cat Plugins/Validate/Methods
+ */
+jQuery.validator.addMethod("dateITA", function(value, element) {
+ var check = false;
+ var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
+ if( re.test(value)){
+ var adata = value.split('/');
+ var gg = parseInt(adata[0],10);
+ var mm = parseInt(adata[1],10);
+ var aaaa = parseInt(adata[2],10);
+ var xdata = new Date(aaaa,mm-1,gg);
+ if ( ( xdata.getFullYear() == aaaa ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == gg ) )
+ check = true;
+ else
+ check = false;
+ } else
+ check = false;
+ return this.optional(element) || check;
+}, "Please enter a correct date");
+
+jQuery.validator.addMethod("dateNL", function(value, element) {
+ return this.optional(element) || /^\d\d?[\.\/-]\d\d?[\.\/-]\d\d\d?\d?$/.test(value);
+}, "Vul hier een geldige datum in.");
+
+jQuery.validator.addMethod("time", function(value, element) {
+ return this.optional(element) || /^([0-1]\d|2[0-3]):([0-5]\d)$/.test(value);
+}, "Please enter a valid time, between 00:00 and 23:59");
+jQuery.validator.addMethod("time12h", function(value, element) {
+ return this.optional(element) || /^((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))$/i.test(value);
+}, "Please enter a valid time, between 00:00 am and 12:00 pm");
+
+/**
+ * matches US phone number format
+ *
+ * where the area code may not start with 1 and the prefix may not start with 1
+ * allows '-' or ' ' as a separator and allows parens around area code
+ * some people may want to put a '1' in front of their number
+ *
+ * 1(212)-999-2345 or
+ * 212 999 2344 or
+ * 212-999-0983
+ *
+ * but not
+ * 111-123-5434
+ * and not
+ * 212 123 4567
+ */
+jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
+ phone_number = phone_number.replace(/\s+/g, "");
+ return this.optional(element) || phone_number.length > 9 &&
+ phone_number.match(/^(\+?1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
+}, "Please specify a valid phone number");
+
+jQuery.validator.addMethod('phoneUK', function(phone_number, element) {
+ phone_number = phone_number.replace(/\(|\)|\s+|-/g,'');
+ return this.optional(element) || phone_number.length > 9 &&
+ phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:(?:\d{5}\)?\s?\d{4,5})|(?:\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3}))|(?:\d{3}\)?\s?\d{3}\s?\d{3,4})|(?:\d{2}\)?\s?\d{4}\s?\d{4}))$/);
+}, 'Please specify a valid phone number');
+
+jQuery.validator.addMethod('mobileUK', function(phone_number, element) {
+ phone_number = phone_number.replace(/\s+|-/g,'');
+ return this.optional(element) || phone_number.length > 9 &&
+ phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[45789]\d{2}|624)\s?\d{3}\s?\d{3})$/);
+}, 'Please specify a valid mobile number');
+
+//Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers
+jQuery.validator.addMethod('phonesUK', function(phone_number, element) {
+ phone_number = phone_number.replace(/\s+|-/g,'');
+ return this.optional(element) || phone_number.length > 9 &&
+ phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[45789]\d{8}|624\d{6})))$/);
+}, 'Please specify a valid uk phone number');
+// On the above three UK functions, do the following server side processing:
+// Compare with ^((?:00\s?|\+)(44)\s?)?\(?0?(?:\)\s?)?([1-9]\d{1,4}\)?[\d\s]+)
+// Extract $2 and set $prefix to '+44<space>' if $2 is '44' otherwise set $prefix to '0'
+// Extract $3 and remove spaces and parentheses. Phone number is combined $2 and $3.
+// A number of very detailed GB telephone number RegEx patterns can also be found at:
+// http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_UK_Telephone_Numbers
+
+//Matches UK postcode. based on http://snipplr.com/view/3152/postcode-validation/
+jQuery.validator.addMethod('postcodeUK', function(postcode, element) {
+ postcode = (postcode.toUpperCase()).replace(/\s+/g,'');
+ return this.optional(element) || postcode.match(/^([^QZ][^IJZ]{0,1}\d{1,2})(\d[^CIKMOV]{2})$/) || postcode.match(/^([^QV]\d[ABCDEFGHJKSTUW])(\d[^CIKMOV]{2})$/) || postcode.match(/^([^QV][^IJZ]\d[ABEHMNPRVWXY])(\d[^CIKMOV]{2})$/) || postcode.match(/^(GIR)(0AA)$/) || postcode.match(/^(BFPO)(\d{1,4})$/) || postcode.match(/^(BFPO)(C\/O\d{1,3})$/);
+}, 'Please specify a valid postcode');
+
+// TODO check if value starts with <, otherwise don't try stripping anything
+jQuery.validator.addMethod("strippedminlength", function(value, element, param) {
+ return jQuery(value).text().length >= param;
+}, jQuery.validator.format("Please enter at least {0} characters"));
+
+// same as email, but TLD is optional
+jQuery.validator.addMethod("email2", function(value, element, param) {
+ return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
+}, jQuery.validator.messages.email);
+
+// same as url, but TLD is optional
+jQuery.validator.addMethod("url2", function(value, element, param) {
+ return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
+}, jQuery.validator.messages.url);
+
+// NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator
+// Redistributed under the the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0
+// Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings)
+jQuery.validator.addMethod("creditcardtypes", function(value, element, param) {
+ if (/[^0-9-]+/.test(value)) {
+ return false;
+ }
+
+ value = value.replace(/\D/g, "");
+
+ var validTypes = 0x0000;
+
+ if (param.mastercard)
+ validTypes |= 0x0001;
+ if (param.visa)
+ validTypes |= 0x0002;
+ if (param.amex)
+ validTypes |= 0x0004;
+ if (param.dinersclub)
+ validTypes |= 0x0008;
+ if (param.enroute)
+ validTypes |= 0x0010;
+ if (param.discover)
+ validTypes |= 0x0020;
+ if (param.jcb)
+ validTypes |= 0x0040;
+ if (param.unknown)
+ validTypes |= 0x0080;
+ if (param.all)
+ validTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080;
+
+ if (validTypes & 0x0001 && /^(5[12345])/.test(value)) { //mastercard
+ return value.length == 16;
+ }
+ if (validTypes & 0x0002 && /^(4)/.test(value)) { //visa
+ return value.length == 16;
+ }
+ if (validTypes & 0x0004 && /^(3[47])/.test(value)) { //amex
+ return value.length == 15;
+ }
+ if (validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test(value)) { //dinersclub
+ return value.length == 14;
+ }
+ if (validTypes & 0x0010 && /^(2(014|149))/.test(value)) { //enroute
+ return value.length == 15;
+ }
+ if (validTypes & 0x0020 && /^(6011)/.test(value)) { //discover
+ return value.length == 16;
+ }
+ if (validTypes & 0x0040 && /^(3)/.test(value)) { //jcb
+ return value.length == 16;
+ }
+ if (validTypes & 0x0040 && /^(2131|1800)/.test(value)) { //jcb
+ return value.length == 15;
+ }
+ if (validTypes & 0x0080) { //unknown
+ return true;
+ }
+ return false;
+}, "Please enter a valid credit card number.");
+
+jQuery.validator.addMethod("ipv4", function(value, element, param) {
+ return this.optional(element) || /^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(value);
+}, "Please enter a valid IP v4 address.");
+
+jQuery.validator.addMethod("ipv6", function(value, element, param) {
+ return this.optional(element) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(value);
+}, "Please enter a valid IP v6 address.");
+
+/**
+* Return true if the field value matches the given format RegExp
+*
+* @example jQuery.validator.methods.pattern("AR1004",element,/^AR\d{4}$/)
+* @result true
+*
+* @example jQuery.validator.methods.pattern("BR1004",element,/^AR\d{4}$/)
+* @result false
+*
+* @name jQuery.validator.methods.pattern
+* @type Boolean
+* @cat Plugins/Validate/Methods
+*/
+jQuery.validator.addMethod("pattern", function(value, element, param) {
+ if (this.optional(element)) {
+ return true;
+ }
+ if (typeof param === 'string') {
+ param = new RegExp('^(?:' + param + ')$');
+ }
+ return param.test(value);
+}, "Invalid format.");
+
+
+/*
+ * Lets you say "at least X inputs that match selector Y must be filled."
+ *
+ * The end result is that neither of these inputs:
+ *
+ * <input class="productinfo" name="partnumber">
+ * <input class="productinfo" name="description">
+ *
+ * ...will validate unless at least one of them is filled.
+ *
+ * partnumber: {require_from_group: [1,".productinfo"]},
+ * description: {require_from_group: [1,".productinfo"]}
+ *
+ */
+jQuery.validator.addMethod("require_from_group", function(value, element, options) {
+ var validator = this;
+ var selector = options[1];
+ var validOrNot = $(selector, element.form).filter(function() {
+ return validator.elementValue(this);
+ }).length >= options[0];
+
+ if(!$(element).data('being_validated')) {
+ var fields = $(selector, element.form);
+ fields.data('being_validated', true);
+ fields.valid();
+ fields.data('being_validated', false);
+ }
+ return validOrNot;
+}, jQuery.format("Please fill at least {0} of these fields."));
+
+/*
+ * Lets you say "either at least X inputs that match selector Y must be filled,
+ * OR they must all be skipped (left blank)."
+ *
+ * The end result, is that none of these inputs:
+ *
+ * <input class="productinfo" name="partnumber">
+ * <input class="productinfo" name="description">
+ * <input class="productinfo" name="color">
+ *
+ * ...will validate unless either at least two of them are filled,
+ * OR none of them are.
+ *
+ * partnumber: {skip_or_fill_minimum: [2,".productinfo"]},
+ * description: {skip_or_fill_minimum: [2,".productinfo"]},
+ * color: {skip_or_fill_minimum: [2,".productinfo"]}
+ *
+ */
+jQuery.validator.addMethod("skip_or_fill_minimum", function(value, element, options) {
+ var validator = this;
+
+ numberRequired = options[0];
+ selector = options[1];
+ var numberFilled = $(selector, element.form).filter(function() {
+ return validator.elementValue(this);
+ }).length;
+ var valid = numberFilled >= numberRequired || numberFilled === 0;
+
+ if(!$(element).data('being_validated')) {
+ var fields = $(selector, element.form);
+ fields.data('being_validated', true);
+ fields.valid();
+ fields.data('being_validated', false);
+ }
+ return valid;
+}, jQuery.format("Please either skip these fields or fill at least {0} of them."));
+
+// Accept a value from a file input based on a required mimetype
+jQuery.validator.addMethod("accept", function(value, element, param) {
+ // Split mime on commas incase we have multiple types we can accept
+ var typeParam = typeof param === "string" ? param.replace(/,/g, '|') : "image/*",
+ optionalValue = this.optional(element),
+ i, file;
+
+ // Element is optional
+ if(optionalValue) {
+ return optionalValue;
+ }
+
+ if($(element).attr("type") === "file") {
+ // If we are using a wildcard, make it regex friendly
+ typeParam = typeParam.replace("*", ".*");
+
+ // Check if the element has a FileList before checking each file
+ if(element.files && element.files.length) {
+ for(i = 0; i < element.files.length; i++) {
+ file = element.files[i];
+
+ // Grab the mimtype from the loaded file, verify it matches
+ if(!file.type.match(new RegExp( ".?(" + typeParam + ")$", "i"))) {
+ return false;
+ }
+ }
+ }
+ }
+
+ // Either return true because we've validated each file, or because the
+ // browser does not support element.files and the FileList feature
+ return true;
+}, jQuery.format("Please enter a value with a valid mimetype."));
+
+// Older "accept" file extension method. Old docs: http://docs.jquery.com/Plugins/Validation/Methods/accept
+jQuery.validator.addMethod("extension", function(value, element, param) {
+ param = typeof param === "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";
+ return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i"));
+}, jQuery.format("Please enter a value with a valid extension."));
diff --git a/wqflask/wqflask/static/packages/jqplot/additional-methods.min.js b/wqflask/wqflask/static/packages/jqplot/additional-methods.min.js
new file mode 100644
index 00000000..60533e43
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/additional-methods.min.js
@@ -0,0 +1,4 @@
+/*! jQuery Validation Plugin - v1.10.0 - 9/7/2012
+* https://github.com/jzaefferer/jquery-validation
+* Copyright (c) 2012 Jörn Zaefferer; Licensed MIT, GPL */
+(function(){function a(a){return a.replace(/<.[^<>]*?>/g," ").replace(/&nbsp;|&#160;/gi," ").replace(/[.(),;:!?%#$'"_+=\/-]*/g,"")}jQuery.validator.addMethod("maxWords",function(b,c,d){return this.optional(c)||a(b).match(/\b\w+\b/g).length<=d},jQuery.validator.format("Please enter {0} words or less.")),jQuery.validator.addMethod("minWords",function(b,c,d){return this.optional(c)||a(b).match(/\b\w+\b/g).length>=d},jQuery.validator.format("Please enter at least {0} words.")),jQuery.validator.addMethod("rangeWords",function(b,c,d){var e=a(b),f=/\b\w+\b/g;return this.optional(c)||e.match(f).length>=d[0]&&e.match(f).length<=d[1]},jQuery.validator.format("Please enter between {0} and {1} words."))})(),jQuery.validator.addMethod("letterswithbasicpunc",function(a,b){return this.optional(b)||/^[a-z\-.,()'\"\s]+$/i.test(a)},"Letters or punctuation only please"),jQuery.validator.addMethod("alphanumeric",function(a,b){return this.optional(b)||/^\w+$/i.test(a)},"Letters, numbers, and underscores only please"),jQuery.validator.addMethod("lettersonly",function(a,b){return this.optional(b)||/^[a-z]+$/i.test(a)},"Letters only please"),jQuery.validator.addMethod("nowhitespace",function(a,b){return this.optional(b)||/^\S+$/i.test(a)},"No white space please"),jQuery.validator.addMethod("ziprange",function(a,b){return this.optional(b)||/^90[2-5]\d\{2\}-\d{4}$/.test(a)},"Your ZIP-code must be in the range 902xx-xxxx to 905-xx-xxxx"),jQuery.validator.addMethod("zipcodeUS",function(a,b){return this.optional(b)||/\d{5}-\d{4}$|^\d{5}$/.test(a)},"The specified US ZIP Code is invalid"),jQuery.validator.addMethod("integer",function(a,b){return this.optional(b)||/^-?\d+$/.test(a)},"A positive or negative non-decimal number please"),jQuery.validator.addMethod("vinUS",function(a){if(a.length!=17)return!1;var b,c,d,e,f,g,h=["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"],i=[1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9],j=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2],k=0;for(b=0;b<17;b++){e=j[b],d=a.slice(b,b+1),b==8&&(g=d);if(!isNaN(d))d*=e;else for(c=0;c<h.length;c++)if(d.toUpperCase()===h[c]){d=i[c],d*=e,isNaN(g)&&c==8&&(g=h[c]);break}k+=d}return f=k%11,f==10&&(f="X"),f==g?!0:!1},"The specified vehicle identification number (VIN) is invalid."),jQuery.validator.addMethod("dateITA",function(a,b){var c=!1,d=/^\d{1,2}\/\d{1,2}\/\d{4}$/;if(d.test(a)){var e=a.split("/"),f=parseInt(e[0],10),g=parseInt(e[1],10),h=parseInt(e[2],10),i=new Date(h,g-1,f);i.getFullYear()==h&&i.getMonth()==g-1&&i.getDate()==f?c=!0:c=!1}else c=!1;return this.optional(b)||c},"Please enter a correct date"),jQuery.validator.addMethod("dateNL",function(a,b){return this.optional(b)||/^\d\d?[\.\/-]\d\d?[\.\/-]\d\d\d?\d?$/.test(a)},"Vul hier een geldige datum in."),jQuery.validator.addMethod("time",function(a,b){return this.optional(b)||/^([0-1]\d|2[0-3]):([0-5]\d)$/.test(a)},"Please enter a valid time, between 00:00 and 23:59"),jQuery.validator.addMethod("time12h",function(a,b){return this.optional(b)||/^((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))$/i.test(a)},"Please enter a valid time, between 00:00 am and 12:00 pm"),jQuery.validator.addMethod("phoneUS",function(a,b){return a=a.replace(/\s+/g,""),this.optional(b)||a.length>9&&a.match(/^(\+?1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/)},"Please specify a valid phone number"),jQuery.validator.addMethod("phoneUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:(?:\d{5}\)?\s?\d{4,5})|(?:\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3}))|(?:\d{3}\)?\s?\d{3}\s?\d{3,4})|(?:\d{2}\)?\s?\d{4}\s?\d{4}))$/)},"Please specify a valid phone number"),jQuery.validator.addMethod("mobileUK",function(a,b){return a=a.replace(/\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[45789]\d{2}|624)\s?\d{3}\s?\d{3})$/)},"Please specify a valid mobile number"),jQuery.validator.addMethod("phonesUK",function(a,b){return a=a.replace(/\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[45789]\d{8}|624\d{6})))$/)},"Please specify a valid uk phone number"),jQuery.validator.addMethod("postcodeUK",function(a,b){return a=a.toUpperCase().replace(/\s+/g,""),this.optional(b)||a.match(/^([^QZ][^IJZ]{0,1}\d{1,2})(\d[^CIKMOV]{2})$/)||a.match(/^([^QV]\d[ABCDEFGHJKSTUW])(\d[^CIKMOV]{2})$/)||a.match(/^([^QV][^IJZ]\d[ABEHMNPRVWXY])(\d[^CIKMOV]{2})$/)||a.match(/^(GIR)(0AA)$/)||a.match(/^(BFPO)(\d{1,4})$/)||a.match(/^(BFPO)(C\/O\d{1,3})$/)},"Please specify a valid postcode"),jQuery.validator.addMethod("strippedminlength",function(a,b,c){return jQuery(a).text().length>=c},jQuery.validator.format("Please enter at least {0} characters")),jQuery.validator.addMethod("email2",function(a,b,c){return this.optional(b)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(a)},jQuery.validator.messages.email),jQuery.validator.addMethod("url2",function(a,b,c){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},jQuery.validator.messages.url),jQuery.validator.addMethod("creditcardtypes",function(a,b,c){if(/[^0-9-]+/.test(a))return!1;a=a.replace(/\D/g,"");var d=0;return c.mastercard&&(d|=1),c.visa&&(d|=2),c.amex&&(d|=4),c.dinersclub&&(d|=8),c.enroute&&(d|=16),c.discover&&(d|=32),c.jcb&&(d|=64),c.unknown&&(d|=128),c.all&&(d=255),d&1&&/^(5[12345])/.test(a)?a.length==16:d&2&&/^(4)/.test(a)?a.length==16:d&4&&/^(3[47])/.test(a)?a.length==15:d&8&&/^(3(0[012345]|[68]))/.test(a)?a.length==14:d&16&&/^(2(014|149))/.test(a)?a.length==15:d&32&&/^(6011)/.test(a)?a.length==16:d&64&&/^(3)/.test(a)?a.length==16:d&64&&/^(2131|1800)/.test(a)?a.length==15:d&128?!0:!1},"Please enter a valid credit card number."),jQuery.validator.addMethod("ipv4",function(a,b,c){return this.optional(b)||/^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(a)},"Please enter a valid IP v4 address."),jQuery.validator.addMethod("ipv6",function(a,b,c){return this.optional(b)||/^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(a)},"Please enter a valid IP v6 address."),jQuery.validator.addMethod("pattern",function(a,b,c){return this.optional(b)?!0:(typeof c=="string"&&(c=new RegExp("^(?:"+c+")$")),c.test(a))},"Invalid format."),jQuery.validator.addMethod("require_from_group",function(a,b,c){var d=this,e=c[1],f=$(e,b.form).filter(function(){return d.elementValue(this)}).length>=c[0];if(!$(b).data("being_validated")){var g=$(e,b.form);g.data("being_validated",!0),g.valid(),g.data("being_validated",!1)}return f},jQuery.format("Please fill at least {0} of these fields.")),jQuery.validator.addMethod("skip_or_fill_minimum",function(a,b,c){var d=this;numberRequired=c[0],selector=c[1];var e=$(selector,b.form).filter(function(){return d.elementValue(this)}).length,f=e>=numberRequired||e===0;if(!$(b).data("being_validated")){var g=$(selector,b.form);g.data("being_validated",!0),g.valid(),g.data("being_validated",!1)}return f},jQuery.format("Please either skip these fields or fill at least {0} of them.")),jQuery.validator.addMethod("accept",function(a,b,c){var d=typeof c=="string"?c.replace(/,/g,"|"):"image/*",e=this.optional(b),f,g;if(e)return e;if($(b).attr("type")==="file"){d=d.replace("*",".*");if(b.files&&b.files.length)for(f=0;f<b.files.length;f++){g=b.files[f];if(!g.type.match(new RegExp(".?("+d+")$","i")))return!1}}return!0},jQuery.format("Please enter a value with a valid mimetype.")),jQuery.validator.addMethod("extension",function(a,b,c){return c=typeof c=="string"?c.replace(/,/g,"|"):"png|jpe?g|gif",this.optional(b)||a.match(new RegExp(".("+c+")$","i"))},jQuery.format("Please enter a value with a valid extension.")) \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/changes.txt b/wqflask/wqflask/static/packages/jqplot/changes.txt
new file mode 100644
index 00000000..79c15677
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/changes.txt
@@ -0,0 +1,395 @@
+Title: Change Log
+
+1.0.0b2:
+* Major improvements in memory usage:
+** Merged in changes from Timo Besenruether to reuse canvas elements and improve
+ memory performance.
+** Fixed all identifiable DOM leaks.
+** Mergged in changes from cguillot for memory improvements in IE < 9.
+* Added vertical and dashed vertical line support for canvas overlay.
+* Fixed bug where initially hidden plots would not display.
+* Fixed bug with point labels and null data points.
+* Updated to jQuery 1.6.1.
+* Improved pie slice margin calculation and fixed slice margin and pie positioning
+ with small slices.
+* Improved bar renderer so bars always start at 0 if:
+** The axis is a linear axis (not log/date).
+** There are no other line types besides bars attached to the axis.
+** The data on the axis is all >= 0.
+** The user has not specified a pad, padMin or forceTickAt0 = true option.
+* Modified tick prefix behavious so prefix no added to all ticks, even if format
+ string is specified.
+* Fix to ensure original tick formats are applied when zooming and resetting
+ zoom.
+* Updated auto tick format string so format adjusted when zooming.
+* Modified auto tick computation to put less ticks on small plots and more
+ ticks on large plots.
+* Update bubble render to support gradients in IE 9.
+
+1.0.0b1:
+* Much improved tick generation algorithm to get precise rounded
+ tick values (Thanks Scott Prahl!).
+* Auto compute tick format string if none is provided.
+* Much better "slicing" of pie charts when using "sliceMargin" option to set
+ a gap between the slices.
+* Expanded canvasOverlay plugin to create arbitrary dashed and solid
+ horizontal and vertical lines on top of plot.
+* Added defaultColors and defaultNegativeColors options to $.jqplot.config.
+* Fixed issue #318, highlighter & bar renderer incompatability.
+* Improve highlighter tooltip positioning with negative bars.
+* Fixed #305, mispelling of jqlotDragStart and jqlotDragStop. MUST NOW BIND
+ TO jqplotDragStart and jqplotDragStop.
+* Fixed #290, some variables left in global scope.
+* Fixed #289, OHLC line widths hard coded at 1.5. Now set by lineWidth option.
+* Fixed #296 for determining databounds on log axes.
+* Updated to jQuery 1.5.1
+* Fixed waterfall plot to ensure first and last bars always fill to zero.
+* Added lineJoin and lineCap option to series lines.
+* Bar widths now based on width of grid, not plot target for better scaling.
+* Added looseZoom option to cursor so zooming can produce well rounded ticks.
+* Added forceTickAt0 and forceTickAt100 options to ensure there will always
+ be a tick at 0 or 100 in the plot.
+* Fixed bug where cursor legend didn't honor series showLabel option.
+
+
+1.0.0a:
+
+* Series can now be moved forward or backward in stack to e.g. bring a line
+ forward when mousing over a point.
+* Can now move outside of grid area while zooming. Can have zoom
+ constrained to grid area or allow zooming outside.
+* Fixed issue #142 with tooltip drawn on top of event canvas, hiding
+ mouse events.
+* Fixed #147 where pie slices with 0 value not rendering properly in IE.
+* Fixed #130 where stack data not sorted properly.
+* Fixed bug with null values not handled properly in category axes.
+* Fixed #156 where pie charts not rendering on QTWebKit.
+* Now using feature detection for canvas and canvas text capability
+ rather than browser version.
+* Added enahncedLegendRenderer plugin to allow multi row/column legends
+ and clickable labels to show/hide series.
+* Added fillToValue option to allow filled line plot to fill to an
+ arbitrary value.
+* Added block plot plugin.
+* Added funnel type charts.
+* Added meter gauge type charts.
+* Added plot theming support.
+* $.jqplot.config.enablePlugins now false by default.
+* Implemented highlighting on bar, pie, donut, funnel, etc. charts.
+* Fix to pointlabels plugin to align labels properly on multi series plots.
+* Added custom error handling to display error message in plot area.
+* Fixed issue where would call to draw grid border of 0 width would
+ result in a default border being drawn.
+* Added options to place legend outside of grid and shrink grid so everything
+ stays within plot div.
+* Fixed bug in color generator so now calls to get() continually cycle
+ through colors just like next().
+* Added defaultAxisStart option.
+* Added gradient fills to bubbles.
+* Added bubble charts.
+* Added showLabels option to bubble charts.
+* Pass bubble radius to event callback in bubble charts.
+* Fixed #207, typo in docs.
+* Fixed #206 where "value" pie slice data labels were displaying wrong
+ value.
+* Fixed #147 with 0 value slices in IE6.
+* Fixed issue #241, disabled varyBarColor option in stacked charts.
+* Added dataRenderer option to allow custom processors for JSON, AJAX
+ and anywhere else you might want to get data.
+* Fixed null value handling so plot now properly skip or join over nulls.
+* Fixed showTicks and showTickMarks option conflicts.
+* Fixed issue #185 where pointLabels plugin incompatibility could crash
+ pie, donut and other plots.
+* Fixed #23 and #143 to obey gridPadding option.
+* Fixed #233 with highlighter tooltip separator.
+* Fixed #224 where type checking failing on GWT.
+* Fixed #272 with pie highlighting not working on replot.
+* Memory performance improvements.
+* Changes to build script so everything should build when pulled from repo.
+* Fixed issue #275, IE 6/7 don't support array indexing of strings.
+* Added event listener hooks for mouseUp, mouseDown, etc. to all line plots.
+* Fixed bug with highlighter not working when null in data.
+* Updated to jQuery 1.4.4
+* Fixed bug where donut plots showed value of radians of slice instead
+ of actual data.
+* Reverted to excanvas r3 so IE8 no longer has to emulate IE7.
+* Added tooltipContentEditor option to highlighter, allowing callback
+ to manipulate tooltip content at run time (thanks Tim Bunce!).
+* Fixed bug where axes scale not resetting.
+* Fixed bug with date axes where data bounds not properly set.
+* Fixed issue where tick marks disappear if grid lines turned off.
+* Updated replot method to allow passing in axes options for more control.
+* Added experimental support for "broken" axes.
+* Fixed bug with pies where pies with 0 valued slices did not draw correctly.
+* Added canvasOverlay plugin to allow drawing of arbitrary shapes on a canvas
+ over the plot.
+* Added option to display arbitrary text/html (message, animated gif, etc.) if
+ plot is constructed without data. Allow a "data loading" indicator to be shown.
+* Added resetAxisValues method to manually update axis ticks without
+ redrawing the plot.
+* Fix to labels on negative bars so label postiion of 'n' will be below a negative bar,
+ just as it is above a positive bar (thanks guigod!).
+* Added thousands separator character (') to sprintf formatting (thanks yuichi1004!).
+* Re-factored date parsing/formatting to use new jsDate module which does not
+ extend the Date prototype.
+
+
+0.9.7:
+
+* Added Mekko chart plot type with enhanced legend and axes support.
+* Implemented vertical waterfall charts. Can create waterfall plot as
+ option to bar chart. See examples folder of distribution.
+* Enhanced plot labels for waterfall style.
+* Enhanced bar plots so you can now color each bar of a series
+ independently with the "varyBarColor" option.
+* Re-factored series drawing so that each series and series shadow drawn
+ on it's own canvas. Allows series to be redrawn independently of each other.
+* Added additional default series colors.
+* Added useNegativeColors option to turn off negative color array and use
+ only seriesColors array to define all bar/filled line colors.
+* Fix css for cursor legend.
+* Modified shape renderer so rectangles can be stroked and filled.
+* Re-factored date methods out of dateAxisRenderer so that date formatter
+ and methods can be accesses outside of dateAxisRenderer plugin.
+* Fixed #132, now trigger series change event on plot target instead of drag canvas.
+* Fixes issue #116 where some source files had mix of tabs and spaces
+ for indentation. Should have been all spaces.
+* Fixed issue #126, some links broken in docs section of web site.
+* Fixed issue #90, trendline plugin incompatibility with pie renderer.
+* Updated samples in examples folder of distribution to include navigation
+ links if web server is set up to process .html files with php.
+
+
+0.9.6:
+
+* New, easier to use, replot() method for placing plots in tabs, accordions,
+ resizable containers or for changing plot parameters programmatically.
+* Updated legend renderer for pie charts to draw swatches which will
+ print correctly.
+* Fixed issue #118 with patch from taum so autoscale option will
+ honor tickInterval and numberTicks options
+* Fix to plot diameter calculation for initially hidden plots.
+* Added examples for making plots in jQuery UI tabs and accordions.
+* Fixed issue #120 where pie chart with single slice not displaying
+ correctly in IE and Chrome
+
+
+0.9.5.2:
+
+* Fixed #102 where double clicking on plot that has zoom enabled, but
+ has not been zoomed resulted in error.
+* Fixed bug where candlestick coloring options not working.
+* Added option to turn individual series labels off in the legend.
+
+
+0.9.5.1:
+
+* Fixed bug where tooltip not working with OHLC and candlestick charts.
+* Added additional marker styles: plus, X and dash.
+
+
+0.9.5:
+
+* Implemented "zoomProxy". zoomProxy allows zooming one plot from another
+ such as an overview plot.
+* Zooming can now be constrained to just x or y axis.
+* Enhanced cursor plugin with vertical "dataTracking" line. This is a line
+ at the cursor location with a readout of data points at the line location
+ which are displayed in the chart legend.
+* Changed cursor tooltip format string. Now one format string is used for
+ entire tooltip.
+* Added mechanisms to specify plot size when plot target is hidden or plot
+ height/width otherwise cannot be determined from markup.
+* Added $.jqplot.config object to specify jqplot wide configuration options.
+ These include enablePlugins to globally set the default plugin state on/off
+ and defaultHeight/defaultWidth to specify default plot height/width.
+* Added fillToZero option which forces filled charts to fill to zero as opposed
+ to axis minimum. Thus negative filled bar/line values will fill upwards to
+ zero axis value.
+* Added option to disable stacking on individual lines.
+* Changed targetId property of the plot object so it now includes a "#" before
+ the id string.
+* Improved tick and body sizing of Open Hi Low Close and candlestick charts.
+* Removed lots of web site related files from the repository. This means that,
+ if working from the sources, user's won't be able to build the jqplot web
+ site and the docs/tests that are hosted on that site. The minified and
+ compressed distribution packages will build fine.
+* Lots of examples were added to a separate examples directory to better show
+ functionality of jqPlot for local testing with the distribution.
+* Many various bug fixes and other minor enhancements.
+
+
+0.9.4:
+
+* Implemented axis labels. Labels can be rendered in div tags or as canvas
+ elements supporting rotated text.
+* Improved rotated axis label positioning so labels will start or end at a
+ tick position.
+* Fixed bug where an empty data series would hang plot rendering.
+* completed issue #66 for misc. improvements to documentation.
+* Fixed issue #64 where the same ID's were assigned to cursor and highlighter
+ elements.
+* Added option to legend to encode special HTML characters.
+* Fixed undesirable behavior where point labels for points off the plot
+ were being rendered.
+* Added edgeTolerance option to point label renderer to control rendering of
+ labels near plot edges.
+
+
+0.9.3:
+
+* Preliminary support for axis labels. Currently rendered into DIV tags,
+ so no rotated label support. This feature is currently experimental.
+* Fixed bug #52, needed space in tick div tag between style and class declarations
+ or plot failed in certain application doctypes.
+* Fixed issue #54, miter style line join for chart lines causing spikes at steep
+ changes in slope. Changed miter style to round.
+* Added examples for new autoscaling algorithm.
+* Fixed bug #57, category axis labels disappear on redraw()
+* Improved algorithm which controlled maximum number of labels that would display
+ on a category axis.
+* Fixed bug #45 where null values causing errors in plotData and gridData.
+* Fixed issue #60 where seriesColors option was not working.
+
+
+0.9.2:
+
+* Fixed bug #45 where a plot could crash if series had different numbers of points.
+* Fixed issue #50, added option to turn off sorting of series data.
+* Fixed issue #31, implemented a better axis autoscaling algorithm and added an autoscale option.
+
+0.9.1:
+
+* Fixed bug #40, when axis pad, padMax, padMin set to 0, graph would fail to render.
+* Fixed bug #41 where pie and bar charts not rendered correctly on redraw().
+* Fixed bug #11, filled stacked line plots not rendering correctly in IE.
+* Fixed bug #42 where stacked charts not rendering with string date axis ticks.
+* Fixed bug in redraw() method where axes ticks were not reset.
+* Fixed "jqplotPreRedrawEvent" that should have been named "jqplotPostRedraw" event.
+
+0.9.0:
+
+* Added Open Hi Low Close charts, Candlestick charts and Hi Low Close charts.
+* Added support for arbitrary labels on the data points.
+* Enhanced highlighter plugin to allow custom formatting control of entire tooltip.
+* Enhanced highlighter to support multiple y values in a data point.
+* Fixed bug #38 where series with a single point with a negative value would fail.
+* Improvements to examples to show what plugins to include.
+* Expanded documentation for some of the plugins.
+
+0.8.5:
+
+* Added zooming ability with double click or single click options to reset zoom.
+* Modified default tick spacing algorithm for date axes to give more space to ticks.
+* Fixed bug #2 where tickInterval wasn't working properly.
+* Added neighborThreshold option to control how close mouse must be to
+ point to trigger neighbor detection.
+* Added double click event handler on plot.
+
+0.8.0:
+
+* Support for up to 9 y axes.
+* Added option to control padding at max/min bounds of axes separately.
+* Closed issue #21, added options to control grid line color and width.
+* Closed issue #20, added options to filled line charts to stoke above
+ fill and customize fill color and transparency.
+* Improved structure of on line documentation to make usage and options
+ docs default.
+* Added much documentation on options and css styling.
+
+0.7.1:
+
+* Bug fix release
+* Fixed bug #6, missing semi-colons messing up some javascript compressors.
+* Fixed bug #13 where 2D ticks array of [values, labels] would fail to
+ renderer with DateAxisRenderer.
+* Fixes bug #16 where pie renderer overwriting options for all plot types
+ and crashing non pie plots.
+* Fixes bug #17 constrainTo dragable option mispelled as "contstrainTo".
+ Fixed dragable color issue when used with trend lines.
+
+0.7.0:
+
+* Pie chart support
+* Enabled tooltipLocation option in highlighter.
+* Highlighter Tooltip will account for mark size and highlight size when
+ positioning itself.
+* Added ability to show just x, y or both axes in highlighter tooltip.
+* Added customization of separator between axes values in highlighter tooltip.
+* Modified how shadows are drawn for lines, bars and markers. Now drawn first,
+ so they are always behind the object.
+* Adjustments to shadow parameters on lines to account for new shadow positioning.
+* Added a ColorGenerator class to robustly return next available color
+ for a plot with wrap around to first color at end.
+* Udates to docs about css file.
+* Fixed bug with String x values in series and IE error on sorting (Category Axis).
+* Added cursor changes in dragable plugin when cursor near dragable point.
+
+0.6.6b:
+
+* Added excanvas.js and excanvas.min.js to compressed distributions.
+* Added example/test html pages I had locally into repository and to
+ compressed distributions.
+
+0.6.6a:
+
+* Removed absolute positioning from dom element and put back into css file.
+* Duplicate of 0.6.6 with a suffix to unambiguously differentiate between
+ previously posted 0.6.6 release.
+
+0.6.6:
+
+* Fixed bug #5, trend line plugin failing when no trend line options specified.
+* Added absolute position css spec to axis tick dom element.
+* Enhancement to category axes, more intuitive handling of series with
+ missing data values.
+
+0.6.5:
+
+* Fixed bug #4, series of unequal data length not rendering correctly.
+ This is a bugfix release only.
+
+0.6.4:
+
+* Fixed bug (issue #1 in tracker) where flat line data series (all x and/or y
+ values are euqal) or single value data series would crash.
+
+0.6.3:
+
+* Support for stacked line (a.k.a. area) and stacked bar (horizontal and
+ vertical) charts.
+* Refactored barRenderer to use default shape and shadow renderers.
+* Added info (contacts & support information) page to web site.
+
+0.6.2:
+
+* This is a minor upgrade to docs and build only. No functionality has changed.
+* Ant build script generates entire site, examples, tests and distribution.
+* Improvements to documentation.
+
+0.6.1:
+
+* New sprintf implementation from Ash Searle that implements %g.
+* Fix to sprintf e/f formats.
+* Created new format specifier, %p and %P to preserve significance.
+* Modified p/P format to better display larger numbers.
+* Fixed and simplified significant digits calculation for sprintf.
+* Added option to have cursor tooltip follow the mouse or not.
+* Added options to change size of highlight.
+* Updates to handle dates like '6-May-09'.
+* Mods to improve look of web site.
+* Updates to documentation.
+* Added license and copyright statement to source files.
+
+0.6.0:
+
+* Added rotated text support. Uses native canvas text functionality in
+ browsers that support it or draws text on canvas with Hershey font
+* metrics for non-supporting browsers.
+* Removed lots of lint in js code.
+* Moved tick css from js code into css file.
+* Fix to tick positioning css. y axis ticks were positioned to wrong side of axis div.
+* Re-factored axis tick renderer instantiation into the axes renderers themselves.
+
+
+For changes prior to 0.6.0 release, please see change log at http://bitbucket.org/cleonello/jqplot/changesets/ \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/copyright.txt b/wqflask/wqflask/static/packages/jqplot/copyright.txt
new file mode 100644
index 00000000..3730cff0
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/copyright.txt
@@ -0,0 +1,56 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: @VERSION
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/MIT-LICENSE-txt.html b/wqflask/wqflask/static/packages/jqplot/docs/files/MIT-LICENSE-txt.html
new file mode 100644
index 00000000..25aef1a6
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/MIT-LICENSE-txt.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>MIT License</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="MIT_License"></a>MIT License</div><div class=CBody><p>Copyright &copy; 2009-2012 Chris Leonello</p><p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &ldquo;Software&rdquo;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</p><p>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</p><p>THE SOFTWARE IS PROVIDED &ldquo;AS IS&rdquo;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.&nbsp; IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile id=MSelected>MIT License</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/changes-txt.html b/wqflask/wqflask/static/packages/jqplot/docs/files/changes-txt.html
new file mode 100644
index 00000000..2c6f6e56
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/changes-txt.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Change Log</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="Change_Log"></a>Change Log</div><div class=CBody><h4 class=CHeading>1.0.0b2</h4><ul><li>Major improvements in memory usage: ** Merged in changes from Timo Besenruether to reuse canvas elements and improve memory performance.&nbsp; ** Fixed all identifiable DOM leaks.&nbsp; ** Mergged in changes from cguillot for memory improvements in IE &lt; 9.</li><li>Added vertical and dashed vertical line support for canvas overlay.</li><li>Fixed bug where initially hidden plots would not display.</li><li>Fixed bug with point labels and null data points.</li><li>Updated to jQuery 1.6.1.</li><li>Improved pie slice margin calculation and fixed slice margin and pie positioning with small slices.</li><li>Improved bar renderer so bars always start at 0 if: ** The axis is a linear axis (not log/date).&nbsp; ** There are no other line types besides bars attached to the axis.&nbsp; ** The data on the axis is all &gt;= 0.&nbsp; ** The user has not specified a pad, padMin or forceTickAt0 = true option.</li><li>Modified tick prefix behavious so prefix no added to all ticks, even if format string is specified.</li><li>Fix to ensure original tick formats are applied when zooming and resetting zoom.</li><li>Updated auto tick format string so format adjusted when zooming.</li><li>Modified auto tick computation to put less ticks on small plots and more ticks on large plots.</li><li>Update bubble render to support gradients in IE 9.</li></ul><h4 class=CHeading>1.0.0b1</h4><ul><li>Much improved tick generation algorithm to get precise rounded tick values (Thanks Scott Prahl!).</li><li>Auto compute tick format string if none is provided.</li><li>Much better &ldquo;slicing&rdquo; of pie charts when using &ldquo;sliceMargin&rdquo; option to set a gap between the slices.</li><li>Expanded canvasOverlay plugin to create arbitrary dashed and solid horizontal and vertical lines on top of plot.</li><li>Added defaultColors and defaultNegativeColors options to $.jqplot.config.</li><li>Fixed issue #318, highlighter &amp; bar renderer incompatability.</li><li>Improve highlighter tooltip positioning with negative bars.</li><li>Fixed #305, mispelling of jqlotDragStart and jqlotDragStop.&nbsp; MUST NOW BIND TO jqplotDragStart and jqplotDragStop.</li><li>Fixed #290, some variables left in global scope.</li><li>Fixed #289, OHLC line widths hard coded at 1.5.&nbsp; Now set by lineWidth option.</li><li>Fixed #296 for determining databounds on log axes.</li><li>Updated to jQuery 1.5.1</li><li>Fixed waterfall plot to ensure first and last bars always fill to zero.</li><li>Added lineJoin and lineCap option to series lines.</li><li>Bar widths now based on width of grid, not plot target for better scaling.</li><li>Added looseZoom option to cursor so zooming can produce well rounded ticks.</li><li>Added forceTickAt0 and forceTickAt100 options to ensure there will always be a tick at 0 or 100 in the plot.</li><li>Fixed bug where cursor legend didn&rsquo;t honor series showLabel option.</li></ul><h4 class=CHeading>1.0.0a</h4><ul><li>Series can now be moved forward or backward in stack to e.g. bring a line forward when mousing over a point.</li><li>Can now move outside of grid area while zooming.&nbsp; Can have zoom constrained to grid area or allow zooming outside.</li><li>Fixed issue #142 with tooltip drawn on top of event canvas, hiding mouse events.</li><li>Fixed #147 where pie slices with 0 value not rendering properly in IE.</li><li>Fixed #130 where stack data not sorted properly.</li><li>Fixed bug with null values not handled properly in category axes.</li><li>Fixed #156 where pie charts not rendering on QTWebKit.</li><li>Now using feature detection for canvas and canvas text capability rather than browser version.</li><li>Added enahncedLegendRenderer plugin to allow multi row/column legends and clickable labels to show/hide series.</li><li>Added fillToValue option to allow filled line plot to fill to an arbitrary value.</li><li>Added block plot plugin.</li><li>Added funnel type charts.</li><li>Added meter gauge type charts.</li><li>Added plot theming support.</li><li>$.jqplot.config.enablePlugins now false by default.</li><li>Implemented highlighting on bar, pie, donut, funnel, etc. charts.</li><li>Fix to pointlabels plugin to align labels properly on multi series plots.</li><li>Added custom error handling to display error message in plot area.</li><li>Fixed issue where would call to draw grid border of 0 width would result in a default border being drawn.</li><li>Added options to place legend outside of grid and shrink grid so everything stays within plot div.</li><li>Fixed bug in color generator so now calls to get() continually cycle through colors just like next().</li><li>Added defaultAxisStart option.</li><li>Added gradient fills to bubbles.</li><li>Added bubble charts.</li><li>Added showLabels option to bubble charts.</li><li>Pass bubble radius to event callback in bubble charts.</li><li>Fixed #207, typo in docs.</li><li>Fixed #206 where &ldquo;value&rdquo; pie slice data labels were displaying wrong value.</li><li>Fixed #147 with 0 value slices in IE6.</li><li>Fixed issue #241, disabled varyBarColor option in stacked charts.</li><li>Added dataRenderer option to allow custom processors for JSON, AJAX and anywhere else you might want to get data.</li><li>Fixed null value handling so plot now properly skip or join over nulls.</li><li>Fixed showTicks and showTickMarks option conflicts.</li><li>Fixed issue #185 where pointLabels plugin incompatibility could crash pie, donut and other plots.</li><li>Fixed #23 and #143 to obey gridPadding option.</li><li>Fixed #233 with highlighter tooltip separator.</li><li>Fixed #224 where type checking failing on GWT.</li><li>Fixed #272 with pie highlighting not working on replot.</li><li>Memory performance improvements.</li><li>Changes to build script so everything should build when pulled from repo.</li><li>Fixed issue #275, IE 6/7 don&rsquo;t support array indexing of strings.</li><li>Added event listener hooks for mouseUp, mouseDown, etc. to all line plots.</li><li>Fixed bug with highlighter not working when null in data.</li><li>Updated to jQuery 1.4.4</li><li>Fixed bug where donut plots showed value of radians of slice instead of actual data.</li><li>Reverted to excanvas r3 so IE8 no longer has to emulate IE7.</li><li>Added tooltipContentEditor option to highlighter, allowing callback to manipulate tooltip content at run time (thanks Tim Bunce!).</li><li>Fixed bug where axes scale not resetting.</li><li>Fixed bug with date axes where data bounds not properly set.</li><li>Fixed issue where tick marks disappear if grid lines turned off.</li><li>Updated replot method to allow passing in axes options for more control.</li><li>Added experimental support for &ldquo;broken&rdquo; axes.</li><li>Fixed bug with pies where pies with 0 valued slices did not draw correctly.</li><li>Added canvasOverlay plugin to allow drawing of arbitrary shapes on a canvas over the plot.</li><li>Added option to display arbitrary text/html (message, animated gif, etc.) if plot is constructed without data.&nbsp; Allow a &ldquo;data loading&rdquo; indicator to be shown.</li><li>Added resetAxisValues method to manually update axis ticks without redrawing the plot.</li><li>Fix to labels on negative bars so label postiion of &lsquo;n&rsquo; will be below a negative bar, just as it is above a positive bar (thanks guigod!).</li><li>Added thousands separator character (&lsquo;) to sprintf formatting (thanks yuichi1004!).</li><li>Re-factored date parsing/formatting to use new jsDate module which does not extend the Date prototype.</li></ul><h4 class=CHeading>0.9.7</h4><ul><li>Added Mekko chart plot type with enhanced legend and axes support.</li><li>Implemented vertical waterfall charts.&nbsp; Can create waterfall plot as option to bar chart.&nbsp; See examples folder of distribution.</li><li>Enhanced plot labels for waterfall style.</li><li>Enhanced bar plots so you can now color each bar of a series independently with the &ldquo;varyBarColor&rdquo; option.</li><li>Re-factored series drawing so that each series and series shadow drawn on it&rsquo;s own canvas.&nbsp; Allows series to be redrawn independently of each other.</li><li>Added additional default series colors.</li><li>Added useNegativeColors option to turn off negative color array and use only seriesColors array to define all bar/filled line colors.</li><li>Fix css for cursor legend.</li><li>Modified shape renderer so rectangles can be stroked and filled.</li><li>Re-factored date methods out of dateAxisRenderer so that date formatter and methods can be accesses outside of dateAxisRenderer plugin.</li><li>Fixed #132, now trigger series change event on plot target instead of drag canvas.</li><li>Fixes issue #116 where some source files had mix of tabs and spaces for indentation.&nbsp; Should have been all spaces.</li><li>Fixed issue #126, some links broken in docs section of web site.</li><li>Fixed issue #90, trendline plugin incompatibility with pie renderer.</li><li>Updated samples in examples folder of distribution to include navigation links if web server is set up to process .html files with php.</li></ul><h4 class=CHeading>0.9.6</h4><ul><li>New, easier to use, replot() method for placing plots in tabs, accordions, resizable containers or for changing plot parameters programmatically.</li><li>Updated legend renderer for pie charts to draw swatches which will print correctly.</li><li>Fixed issue #118 with patch from taum so autoscale option will honor tickInterval and numberTicks options</li><li>Fix to plot diameter calculation for initially hidden plots.</li><li>Added examples for making plots in jQuery UI tabs and accordions.</li><li>Fixed issue #120 where pie chart with single slice not displaying correctly in IE and Chrome</li></ul><h4 class=CHeading>0.9.5.2</h4><ul><li>Fixed #102 where double clicking on plot that has zoom enabled, but has not been zoomed resulted in error.</li><li>Fixed bug where candlestick coloring options not working.</li><li>Added option to turn individual series labels off in the legend.</li></ul><h4 class=CHeading>0.9.5.1</h4><ul><li>Fixed bug where tooltip not working with OHLC and candlestick charts.</li><li>Added additional marker styles: plus, X and dash.</li></ul><h4 class=CHeading>0.9.5</h4><ul><li>Implemented &ldquo;zoomProxy&rdquo;.&nbsp; zoomProxy allows zooming one plot from another such as an overview plot.</li><li>Zooming can now be constrained to just x or y axis.</li><li>Enhanced cursor plugin with vertical &ldquo;dataTracking&rdquo; line.&nbsp; This is a line at the cursor location with a readout of data points at the line location which are displayed in the chart legend.</li><li>Changed cursor tooltip format string.&nbsp; Now one format string is used for entire tooltip.</li><li>Added mechanisms to specify plot size when plot target is hidden or plot height/width otherwise cannot be determined from markup.</li><li>Added $.jqplot.config object to specify jqplot wide configuration options.&nbsp; These include enablePlugins to globally set the default plugin state on/off and defaultHeight/defaultWidth to specify default plot height/width.</li><li>Added fillToZero option which forces filled charts to fill to zero as opposed to axis minimum.&nbsp; Thus negative filled bar/line values will fill upwards to zero axis value.</li><li>Added option to disable stacking on individual lines.</li><li>Changed targetId property of the plot object so it now includes a &ldquo;#&rdquo; before the id string.</li><li>Improved tick and body sizing of Open Hi Low Close and candlestick charts.</li><li>Removed lots of web site related files from the repository.&nbsp; This means that, if working from the sources, user&rsquo;s won&rsquo;t be able to build the jqplot web site and the docs/tests that are hosted on that site.&nbsp; The minified and compressed distribution packages will build fine.</li><li>Lots of examples were added to a separate examples directory to better show functionality of jqPlot for local testing with the distribution.</li><li>Many various bug fixes and other minor enhancements.</li></ul><h4 class=CHeading>0.9.4</h4><ul><li>Implemented axis labels.&nbsp; Labels can be rendered in div tags or as canvas elements supporting rotated text.</li><li>Improved rotated axis label positioning so labels will start or end at a tick position.</li><li>Fixed bug where an empty data series would hang plot rendering.</li><li>completed issue #66 for misc. improvements to documentation.</li><li>Fixed issue #64 where the same ID&rsquo;s were assigned to cursor and highlighter elements.</li><li>Added option to legend to encode special HTML characters.</li><li>Fixed undesirable behavior where point labels for points off the plot were being rendered.</li><li>Added edgeTolerance option to point label renderer to control rendering of labels near plot edges.</li></ul><h4 class=CHeading>0.9.3</h4><ul><li>Preliminary support for axis labels.&nbsp; Currently rendered into DIV tags, so no rotated label support.&nbsp; This feature is currently experimental.</li><li>Fixed bug #52, needed space in tick div tag between style and class declarations or plot failed in certain application doctypes.</li><li>Fixed issue #54, miter style line join for chart lines causing spikes at steep changes in slope.&nbsp; Changed miter style to round.</li><li>Added examples for new autoscaling algorithm.</li><li>Fixed bug #57, category axis labels disappear on redraw()</li><li>Improved algorithm which controlled maximum number of labels that would display on a category axis.</li><li>Fixed bug #45 where null values causing errors in plotData and gridData.</li><li>Fixed issue #60 where seriesColors option was not working.</li></ul><h4 class=CHeading>0.9.2</h4><ul><li>Fixed bug #45 where a plot could crash if series had different numbers of points.</li><li>Fixed issue #50, added option to turn off sorting of series data.</li><li>Fixed issue #31, implemented a better axis autoscaling algorithm and added an autoscale option.</li></ul><h4 class=CHeading>0.9.1</h4><ul><li>Fixed bug #40, when axis pad, padMax, padMin set to 0, graph would fail to render.</li><li>Fixed bug #41 where pie and bar charts not rendered correctly on redraw().</li><li>Fixed bug #11, filled stacked line plots not rendering correctly in IE.</li><li>Fixed bug #42 where stacked charts not rendering with string date axis ticks.</li><li>Fixed bug in redraw() method where axes ticks were not reset.</li><li>Fixed &ldquo;jqplotPreRedrawEvent&rdquo; that should have been named &ldquo;jqplotPostRedraw&rdquo; event.</li></ul><h4 class=CHeading>0.9.0</h4><ul><li>Added Open Hi Low Close charts, Candlestick charts and Hi Low Close charts.</li><li>Added support for arbitrary labels on the data points.</li><li>Enhanced highlighter plugin to allow custom formatting control of entire tooltip.</li><li>Enhanced highlighter to support multiple y values in a data point.</li><li>Fixed bug #38 where series with a single point with a negative value would fail.</li><li>Improvements to examples to show what plugins to include.</li><li>Expanded documentation for some of the plugins.</li></ul><h4 class=CHeading>0.8.5</h4><ul><li>Added zooming ability with double click or single click options to reset zoom.</li><li>Modified default tick spacing algorithm for date axes to give more space to ticks.</li><li>Fixed bug #2 where tickInterval wasn&rsquo;t working properly.</li><li>Added neighborThreshold option to control how close mouse must be to point to trigger neighbor detection.</li><li>Added double click event handler on plot.</li></ul><h4 class=CHeading>0.8.0</h4><ul><li>Support for up to 9 y axes.</li><li>Added option to control padding at max/min bounds of axes separately.</li><li>Closed issue #21, added options to control grid line color and width.</li><li>Closed issue #20, added options to filled line charts to stoke above fill and customize fill color and transparency.</li><li>Improved structure of on line documentation to make usage and options docs default.</li><li>Added much documentation on options and css styling.</li></ul><h4 class=CHeading>0.7.1</h4><ul><li>Bug fix release</li><li>Fixed bug #6, missing semi-colons messing up some javascript compressors.</li><li>Fixed bug #13 where 2D ticks array of [values, labels] would fail to renderer with DateAxisRenderer.</li><li>Fixes bug #16 where pie renderer overwriting options for all plot types and crashing non pie plots.</li><li>Fixes bug #17 constrainTo dragable option mispelled as &ldquo;contstrainTo&rdquo;.&nbsp; Fixed dragable color issue when used with trend lines.</li></ul><h4 class=CHeading>0.7.0</h4><ul><li>Pie chart support</li><li>Enabled tooltipLocation option in highlighter.</li><li>Highlighter Tooltip will account for mark size and highlight size when positioning itself.</li><li>Added ability to show just x, y or both axes in highlighter tooltip.</li><li>Added customization of separator between axes values in highlighter tooltip.</li><li>Modified how shadows are drawn for lines, bars and markers.&nbsp; Now drawn first, so they are always behind the object.</li><li>Adjustments to shadow parameters on lines to account for new shadow positioning.</li><li>Added a ColorGenerator class to robustly return next available color for a plot with wrap around to first color at end.</li><li>Udates to docs about css file.</li><li>Fixed bug with String x values in series and IE error on sorting (Category Axis).</li><li>Added cursor changes in dragable plugin when cursor near dragable point.</li></ul><h4 class=CHeading>0.6.6b</h4><ul><li>Added excanvas.js and excanvas.min.js to compressed distributions.</li><li>Added example/test html pages I had locally into repository and to compressed distributions.</li></ul><h4 class=CHeading>0.6.6a</h4><ul><li>Removed absolute positioning from dom element and put back into css file.</li><li>Duplicate of 0.6.6 with a suffix to unambiguously differentiate between previously posted 0.6.6 release.</li></ul><h4 class=CHeading>0.6.6</h4><ul><li>Fixed bug #5, trend line plugin failing when no trend line options specified.</li><li>Added absolute position css spec to axis tick dom element.</li><li>Enhancement to category axes, more intuitive handling of series with missing data values.</li></ul><h4 class=CHeading>0.6.5</h4><ul><li>Fixed bug #4, series of unequal data length not rendering correctly.&nbsp; This is a bugfix release only.</li></ul><h4 class=CHeading>0.6.4</h4><ul><li>Fixed bug (issue #1 in tracker) where flat line data series (all x and/or y values are euqal) or single value data series would crash.</li></ul><h4 class=CHeading>0.6.3</h4><ul><li>Support for stacked line (a.k.a. area) and stacked bar (horizontal and vertical) charts.</li><li>Refactored barRenderer to use default shape and shadow renderers.</li><li>Added info (contacts &amp; support information) page to web site.</li></ul><h4 class=CHeading>0.6.2</h4><ul><li>This is a minor upgrade to docs and build only.&nbsp; No functionality has changed.</li><li>Ant build script generates entire site, examples, tests and distribution.</li><li>Improvements to documentation.</li></ul><h4 class=CHeading>0.6.1</h4><ul><li>New sprintf implementation from Ash Searle that implements %g.</li><li>Fix to sprintf e/f formats.</li><li>Created new format specifier, %p and %P to preserve significance.</li><li>Modified p/P format to better display larger numbers.</li><li>Fixed and simplified significant digits calculation for sprintf.</li><li>Added option to have cursor tooltip follow the mouse or not.</li><li>Added options to change size of highlight.</li><li>Updates to handle dates like &lsquo;6-May-09&rsquo;.</li><li>Mods to improve look of web site.</li><li>Updates to documentation.</li><li>Added license and copyright statement to source files.</li></ul><h4 class=CHeading>0.6.0</h4><ul><li>Added rotated text support.&nbsp; Uses native canvas text functionality in browsers that support it or draws text on canvas with Hershey font</li><li>metrics for non-supporting browsers.</li><li>Removed lots of lint in js code.</li><li>Moved tick css from js code into css file.</li><li>Fix to tick positioning css.&nbsp; y axis ticks were positioned to wrong side of axis div.</li><li>Re-factored axis tick renderer instantiation into the axes renderers themselves.</li></ul><p>For changes prior to 0.6.0 release, please see change log at <a href="http://bitbucket.org/cleonello/jqplot/changesets/" class=LURL target=_top>http://bitbucket.org/cleonello/jqplot/changesets/</a></p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile id=MSelected>Change Log</div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/gpl-2-0-txt.html b/wqflask/wqflask/static/packages/jqplot/docs/files/gpl-2-0-txt.html
new file mode 100644
index 00000000..84ac3ed1
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/gpl-2-0-txt.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>GPL Version 2</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="GPL_Version_2"></a>GPL Version 2</div><div class=CBody><p>GNU GENERAL PUBLIC LICENSE Version 2, June 1991</p><p>Copyright &copy; 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.</p><p>Preamble</p><p>The licenses for most software are designed to take away your freedom to share and change it.&nbsp; By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.&nbsp; This General Public License applies to most of the Free Software Foundation&rsquo;s software and to any other program whose authors commit to using it.&nbsp; (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.)&nbsp; You can apply it to your programs, too.</p><p>When we speak of free software, we are referring to freedom, not price.&nbsp; Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.</p><p>To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights.&nbsp; These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.</p><p>For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have.&nbsp; You must make sure that they, too, receive or can get the source code.&nbsp; And you must show them these terms so they know their rights.</p><p>We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.</p><p>Also, for each author&rsquo;s protection and ours, we want to make certain that everyone understands that there is no warranty for this free software.&nbsp; If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors&rsquo; reputations.</p><p>Finally, any free program is threatened constantly by software patents.&nbsp; We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary.&nbsp; To prevent this, we have made it clear that any patent must be licensed for everyone&rsquo;s free use or not licensed at all.</p><p>The precise terms and conditions for copying, distribution and modification follow.</p><p>GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</p><p>0.&nbsp; This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License.&nbsp; The &ldquo;Program&rdquo;, below, refers to any such program or work, and a &ldquo;work based on the Program&rdquo; means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language.&nbsp; (Hereinafter, translation is included without limitation in the term &ldquo;modification&rdquo;.)&nbsp; Each licensee is addressed as &ldquo;you&rdquo;.</p><p>Activities other than copying, distribution and modification are not covered by this License; they are outside its scope.&nbsp; The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program).&nbsp; Whether that is true depends on what the Program does.</p><p>1.&nbsp; You may copy and distribute verbatim copies of the Program&rsquo;s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.</p><p>You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.</p><p>2.&nbsp; You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:</p><p>a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.</p><p>b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.</p><p>c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License.&nbsp; (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)</p><p>These requirements apply to the modified work as a whole.&nbsp; If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works.&nbsp; But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.</p><p>Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.</p><p>In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.</p><p>3.&nbsp; You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:</p><p>a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,</p><p>b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,</p><p>c) Accompany it with the information you received as to the offer to distribute corresponding source code.&nbsp; (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)</p><p>The source code for a work means the preferred form of the work for making modifications to it.&nbsp; For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable.&nbsp; However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.</p><p>If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.</p><p>4.&nbsp; You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License.&nbsp; Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License.&nbsp; However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.</p><p>5.&nbsp; You are not required to accept this License, since you have not signed it.&nbsp; However, nothing else grants you permission to modify or distribute the Program or its derivative works.&nbsp; These actions are prohibited by law if you do not accept this License.&nbsp; Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.</p><p>6.&nbsp; Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions.&nbsp; You may not impose any further restrictions on the recipients&rsquo; exercise of the rights granted herein.&nbsp; You are not responsible for enforcing compliance by third parties to this License.</p><p>7.&nbsp; If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License.&nbsp; If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all.&nbsp; For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.</p><p>If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.</p><p>It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices.&nbsp; Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.</p><p>This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.</p><p>8.&nbsp; If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded.&nbsp; In such case, this License incorporates the limitation as if written in the body of this License.</p><p>9.&nbsp; The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time.&nbsp; Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.</p><p>Each version is given a distinguishing version number.&nbsp; If the Program specifies a version number of this License which applies to it and &ldquo;any later version&rdquo;, you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation.&nbsp; If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.</p><p>10.&nbsp; If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission.&nbsp; For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this.&nbsp; Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.</p><p>NO WARRANTY</p><p>11.&nbsp; BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.&nbsp; EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM &ldquo;AS IS&rdquo; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.&nbsp; THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.&nbsp; SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</p><p>12.&nbsp; IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile id=MSelected>GPL License</div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/background.jpg b/wqflask/wqflask/static/packages/jqplot/docs/files/images/background.jpg
new file mode 100644
index 00000000..c1550529
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/background.jpg
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/basicline.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/basicline.png
new file mode 100644
index 00000000..1cc6bc69
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/basicline.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogaxis.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogaxis.png
new file mode 100644
index 00000000..7c169633
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogaxis.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogoptions.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogoptions.png
new file mode 100644
index 00000000..d91bf5f6
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogoptions.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/basicoptions.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/basicoptions.png
new file mode 100644
index 00000000..4ea441c8
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/basicoptions.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/dualaxis.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/dualaxis.png
new file mode 100644
index 00000000..36012b23
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/dualaxis.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/logo.jpg b/wqflask/wqflask/static/packages/jqplot/docs/files/images/logo.jpg
new file mode 100644
index 00000000..a12fffcd
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/logo.jpg
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocs.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocs.png
new file mode 100644
index 00000000..318ab04e
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocs.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocsover.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocsover.png
new file mode 100644
index 00000000..4a5b8ec7
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocsover.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownload.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownload.png
new file mode 100644
index 00000000..41723e77
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownload.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownloadover.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownloadover.png
new file mode 100644
index 00000000..881bdbf8
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownloadover.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamples.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamples.png
new file mode 100644
index 00000000..89d1fb4e
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamples.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamplesover.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamplesover.png
new file mode 100644
index 00000000..0ea75255
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamplesover.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navhome.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navhome.png
new file mode 100644
index 00000000..fd55aa5d
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navhome.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navhomeover.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navhomeover.png
new file mode 100644
index 00000000..63bbf7a3
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navhomeover.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/new.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/new.png
new file mode 100644
index 00000000..3eaba9c8
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/new.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/sample3.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/sample3.png
new file mode 100644
index 00000000..31e644de
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/sample3.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/samplesm.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/samplesm.png
new file mode 100644
index 00000000..1b7b3ef4
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/images/samplesm.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotCssStyling-txt.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotCssStyling-txt.html
new file mode 100644
index 00000000..e8c5bd2a
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotCssStyling-txt.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>jqPlot CSS Customization</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqPlot_CSS_Customization"></a>jqPlot CSS Customization</div><div class=CBody><p>Much of the styling of jqPlot is done by css.&nbsp; The jqPlot css file is, unremarkably, jquery.jqplot.css and resides in the same directory as jqPlot itself.</p><p>There exist some styling related javascript properties on the plot objects themselves (like fontStyle, fontSize, etc.).&nbsp; These can be set with the options object at plot creation.&nbsp; Generally, setting these options is <b>NOT</b> the preferred way to customize the look of the plot.&nbsp; Use the css file instead.&nbsp; <b>These options are deprecated and may disappear</b>.&nbsp; The exceptions are certain background and color options which control attributes of something renderered on a canvas.&nbsp; This would be line color, grid background, etc.&nbsp; These must be set by the options object.&nbsp; For a list of available options, see <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">jqPlot Options</a>.</p><p>Objects in the plot that can be customized by css are given a css class like &ldquo;.jqplot-*&rdquo;.&nbsp; For example, the plot title will have a &ldquo;.jqplot-title&rdquo; class, the axes &ldquo;.jqplot-axis&rdquo;, etc.</p><p>Currently assigned classes in jqPlot are as follows:</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>.jqplot-target</td><td class=CDLDescription>Styles for the plot target div.&nbsp; These will be cascaded down to all plot elements according to css rules.</td></tr><tr><td class=CDLEntry>.jqplot-axis</td><td class=CDLDescription>Styles for all axes</td></tr><tr><td class=CDLEntry>.jqplot-xaxis</td><td class=CDLDescription>Styles applied to the primary x axis only.</td></tr><tr><td class=CDLEntry>.jqplot-yaxis</td><td class=CDLDescription>Styles applied to the primary y axis only.</td></tr><tr><td class=CDLEntry>.jqplot-x2axis, .jqplot-x3axis, ...</td><td class=CDLDescription>Styles applied to the 2nd, 3rd, etc. x axis only.</td></tr><tr><td class=CDLEntry>.jqplot-y2axis, .jqplot-y3axis, ...</td><td class=CDLDescription>Styles applied to the 2nd, 3rd, etc.y axis only.</td></tr><tr><td class=CDLEntry>.jqplot-axis-tick</td><td class=CDLDescription>Styles applied to all axis ticks</td></tr><tr><td class=CDLEntry>.jqplot-xaxis-tick</td><td class=CDLDescription>Styles applied to primary x axis ticks only.</td></tr><tr><td class=CDLEntry>.jqplot-x2axis-tick</td><td class=CDLDescription>Styles applied to secondary x axis ticks only.</td></tr><tr><td class=CDLEntry>.jqplot-yaxis-tick</td><td class=CDLDescription>Styles applied to primary y axis ticks only.</td></tr><tr><td class=CDLEntry>.jqplot-y2axis-tick</td><td class=CDLDescription>Styles applied to secondary y axis ticks only.</td></tr><tr><td class=CDLEntry>table.jqplot-table-legend</td><td class=CDLDescription>Styles applied to the legend box table.</td></tr><tr><td class=CDLEntry>.jqplot-title</td><td class=CDLDescription>Styles applied to the title.</td></tr><tr><td class=CDLEntry>.jqplot-cursor-tooltip</td><td class=CDLDescription>Styles applied to the cursor tooltip</td></tr><tr><td class=CDLEntry>.jqplot-highlighter-tooltip</td><td class=CDLDescription>Styles applied to the highlighter tooltip.</td></tr><tr><td class=CDLEntry>div.jqplot-table-legend-swatch</td><td class=CDLDescription>the div element used for the colored swatch on the legend.</td></tr></table><p>Note that axes will be assigned 2 classes like: class=&rdquo;.jqplot-axis .jqplot-xaxis&rdquo;.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqPlot CSS Customization</div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CSection><b>This document is out of date. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotOptions-txt.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotOptions-txt.html
new file mode 100644
index 00000000..5abc8339
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotOptions-txt.html
@@ -0,0 +1,292 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>jqPlot Options</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqPlot_Options"></a>jqPlot Options</div><div class=CBody><p><b>This document is out of date.&nbsp; While the options described here should still be relavent and valid, it has not been updated for many new options.&nbsp; Sorry for this inconvenience.</b></p><p>This document describes the options available to jqPlot.&nbsp; These are set with the third argument to the $.jqplot(&lsquo;target&rsquo;, data, options) function.&nbsp; Options are using the following convention:</p><blockquote><pre>property: default, // notes</pre></blockquote><p>This document is not complete!&nbsp; Not all options are shown!&nbsp; Also, Options marked with * in the notes are post 0.7.1 additions.&nbsp; They will be available in the next release.&nbsp; Further information about the options can be found in the online API documentation.&nbsp; For details on how the options relate to the API documentation, see the <a href="optionsTutorial-txt.html#Options_Tutorial" class=LSection id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">Options Tutorial</a> in the optionsTutorial.txt file.</p><blockquote><pre>options =
+{
+ seriesColors: [ &quot;#4bb2c5&quot;, &quot;#c5b47f&quot;, &quot;#EAA228&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;,
+ &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;], // colors that will
+ // be assigned to the series. If there are more series than colors, colors
+ // will wrap around and start at the beginning again.
+
+ stackSeries: false, // if true, will create a stack plot.
+ // Currently supported by line and bar graphs.
+
+ title: '', // Title for the plot. Can also be specified as an object like:
+
+ title: {
+ text: '', // title for the plot,
+ show: true,
+ },
+
+ axesDefaults: {
+ show: false, // wether or not to renderer the axis. Determined automatically.
+ min: null, // minimum numerical value of the axis. Determined automatically.
+ max: null, // maximum numverical value of the axis. Determined automatically.
+ pad: 1.2, // a factor multiplied by the data range on the axis to give the
+ // axis range so that data points don't fall on the edges of the axis.
+ ticks: [], // a 1D [val1, val2, ...], or 2D [[val, label], [val, label], ...]
+ // array of ticks to use. Computed automatically.
+ numberTicks: undefined,
+ renderer: $.jqplot.LinearAxisRenderer, // renderer to use to draw the axis,
+ rendererOptions: {}, // options to pass to the renderer. LinearAxisRenderer
+ // has no options,
+ tickOptions: {
+ mark: 'outside', // Where to put the tick mark on the axis
+ // 'outside', 'inside' or 'cross',
+ showMark: true,
+ showGridline: true, // wether to draw a gridline (across the whole grid) at this tick,
+ markSize: 4, // length the tick will extend beyond the grid in pixels. For
+ // 'cross', length will be added above and below the grid boundary,
+ show: true, // wether to show the tick (mark and label),
+ showLabel: true, // wether to show the text label at the tick,
+ formatString: '', // format string to use with the axis tick formatter
+ }
+ showTicks: true, // wether or not to show the tick labels,
+ showTickMarks: true, // wether or not to show the tick marks
+ },
+
+ axes: {
+ xaxis: {
+ // same options as axesDefaults
+ },
+ yaxis: {
+ // same options as axesDefaults
+ },
+ x2axis: {
+ // same options as axesDefaults
+ },
+ y2axis: {
+ // same options as axesDefaults
+ }
+ },
+
+ seriesDefaults: {
+ show: true, // wether to render the series.
+ xaxis: 'xaxis', // either 'xaxis' or 'x2axis'.
+ yaxis: 'yaxis', // either 'yaxis' or 'y2axis'.
+ label: '', // label to use in the legend for this line.
+ color: '', // CSS color spec to use for the line. Determined automatically.
+ lineWidth: 2.5, // Width of the line in pixels.
+ shadow: true, // show shadow or not.
+ shadowAngle: 45, // angle (degrees) of the shadow, clockwise from x axis.
+ shadowOffset: 1.25, // offset from the line of the shadow.
+ shadowDepth: 3, // Number of strokes to make when drawing shadow. Each
+ // stroke offset by shadowOffset from the last.
+ shadowAlpha: 0.1, // Opacity of the shadow.
+ showLine: true, // whether to render the line segments or not.
+ showMarker: true, // render the data point markers or not.
+ fill: false, // fill under the line,
+ fillAndStroke: false, // *stroke a line at top of fill area.
+ fillColor: undefined, // *custom fill color for filled lines (default is line color).
+ fillAlpha: undefined, // *custom alpha to apply to fillColor.
+ renderer: $.jqplot.LineRenderer], // renderer used to draw the series.
+ rendererOptions: {}, // options passed to the renderer. LineRenderer has no options.
+ markerRenderer: $.jqplot.MarkerRenderer, // renderer to use to draw the data
+ // point markers.
+ markerOptions: {
+ show: true, // wether to show data point markers.
+ style: 'filledCircle', // circle, diamond, square, filledCircle.
+ // filledDiamond or filledSquare.
+ lineWidth: 2, // width of the stroke drawing the marker.
+ size: 9, // size (diameter, edge length, etc.) of the marker.
+ color: '#666666' // color of marker, set to color of line by default.
+ shadow: true, // wether to draw shadow on marker or not.
+ shadowAngle: 45, // angle of the shadow. Clockwise from x axis.
+ shadowOffset: 1, // offset from the line of the shadow,
+ shadowDepth: 3, // Number of strokes to make when drawing shadow. Each stroke
+ // offset by shadowOffset from the last.
+ shadowAlpha: 0.07 // Opacity of the shadow
+ }
+ },
+
+ series:[
+ {Each series has same options as seriesDefaults},
+ {You can override each series individually here}
+ ],
+
+ legend: {
+ show: false,
+ location: 'ne', // compass direction, nw, n, ne, e, se, s, sw, w.
+ xoffset: 12, // pixel offset of the legend box from the x (or x2) axis.
+ yoffset: 12, // pixel offset of the legend box from the y (or y2) axis.
+ },
+
+ grid: {
+ drawGridLines: true, // wether to draw lines across the grid or not.
+ gridLineColor: '#cccccc' // *Color of the grid lines.
+ background: '#fffdf6', // CSS color spec for background color of grid.
+ borderColor: '#999999', // CSS color spec for border around grid.
+ borderWidth: 2.0, // pixel width of border around grid.
+ shadow: true, // draw a shadow for grid.
+ shadowAngle: 45, // angle of the shadow. Clockwise from x axis.
+ shadowOffset: 1.5, // offset from the line of the shadow.
+ shadowWidth: 3, // width of the stroke for the shadow.
+ shadowDepth: 3, // Number of strokes to make when drawing shadow.
+ // Each stroke offset by shadowOffset from the last.
+ shadowAlpha: 0.07 // Opacity of the shadow
+ renderer: $.jqplot.CanvasGridRenderer, // renderer to use to draw the grid.
+ rendererOptions: {} // options to pass to the renderer. Note, the default
+ // CanvasGridRenderer takes no additional options.
+ },
+
+ // Plugin and renderer options.
+
+ // BarRenderer.
+ // With BarRenderer, you can specify additional options in the rendererOptions object
+ // on the series or on the seriesDefaults object. Note, some options are respecified
+ // (like shadowDepth) to override lineRenderer defaults from which BarRenderer inherits.
+
+ seriesDefaults: {
+ rendererOptions: {
+ barPadding: 8, // number of pixels between adjacent bars in the same
+ // group (same category or bin).
+ barMargin: 10, // number of pixels between adjacent groups of bars.
+ barDirection: 'vertical', // vertical or horizontal.
+ barWidth: null, // width of the bars. null to calculate automatically.
+ shadowOffset: 2, // offset from the bar edge to stroke the shadow.
+ shadowDepth: 5, // nuber of strokes to make for the shadow.
+ shadowAlpha: 0.8, // transparency of the shadow.
+ }
+ },
+
+ // Cursor
+ // Options are passed to the cursor plugin through the &quot;cursor&quot; object at the top
+ // level of the options object.
+
+ cursor: {
+ style: 'crosshair', // A CSS spec for the cursor type to change the
+ // cursor to when over plot.
+ show: true,
+ showTooltip: true, // show a tooltip showing cursor position.
+ followMouse: false, // wether tooltip should follow the mouse or be stationary.
+ tooltipLocation: 'se', // location of the tooltip either relative to the mouse
+ // (followMouse=true) or relative to the plot. One of
+ // the compass directions, n, ne, e, se, etc.
+ tooltipOffset: 6, // pixel offset of the tooltip from the mouse or the axes.
+ showTooltipGridPosition: false, // show the grid pixel coordinates of the mouse
+ // in the tooltip.
+ showTooltipUnitPosition: true, // show the coordinates in data units of the mouse
+ // in the tooltip.
+ tooltipFormatString: '%.4P', // sprintf style format string for tooltip values.
+ useAxesFormatters: true, // wether to use the same formatter and formatStrings
+ // as used by the axes, or to use the formatString
+ // specified on the cursor with sprintf.
+ tooltipAxesGroups: [], // show only specified axes groups in tooltip. Would specify like:
+ // [['xaxis', 'yaxis'], ['xaxis', 'y2axis']]. By default, all axes
+ // combinations with for the series in the plot are shown.
+
+ },
+
+ // Dragable
+ // Dragable options are specified with the &quot;dragable&quot; object at the top level
+ // of the options object.
+
+ dragable: {
+ color: undefined, // custom color to use for the dragged point and dragged line
+ // section. default will use a transparent variant of the line color.
+ constrainTo: 'none', // Constrain dragging motion to an axis: 'x', 'y', or 'none'.
+ },
+
+ // Highlighter
+ // Highlighter options are specified with the &quot;highlighter&quot; object at the top level
+ // of the options object.
+
+ highlighter: {
+ lineWidthAdjust: 2.5, // pixels to add to the size line stroking the data point marker
+ // when showing highlight. Only affects non filled data point markers.
+ sizeAdjust: 5, // pixels to add to the size of filled markers when drawing highlight.
+ showTooltip: true, // show a tooltip with data point values.
+ tooltipLocation: 'nw', // location of tooltip: n, ne, e, se, s, sw, w, nw.
+ fadeTooltip: true, // use fade effect to show/hide tooltip.
+ tooltipFadeSpeed: &quot;fast&quot;// slow, def, fast, or a number of milliseconds.
+ tooltipOffset: 2, // pixel offset of tooltip from the highlight.
+ tooltipAxes: 'both', // which axis values to display in the tooltip, x, y or both.
+ tooltipSeparator: ', ' // separator between values in the tooltip.
+ useAxesFormatters: true // use the same format string and formatters as used in the axes to
+ // display values in the tooltip.
+ tooltipFormatString: '%.5P' // sprintf format string for the tooltip. only used if
+ // useAxesFormatters is false. Will use sprintf formatter with
+ // this string, not the axes formatters.
+ },
+
+ // LogAxisRenderer
+ // LogAxisRenderer add 2 options to the axes object. These options are specified directly on
+ // the axes or axesDefaults object.
+
+ axesDefaults: {
+ base: 10, // the logarithmic base.
+ tickDistribution: 'even', // 'even' or 'power'. 'even' will produce with even visiual (pixel)
+ // spacing on the axis. 'power' will produce ticks spaced by
+ // increasing powers of the log base.
+ },
+
+ // PieRenderer
+ // PieRenderer accepts options from the rendererOptions object of the series or seriesDefaults object.
+
+ seriesDefaults: {
+ rendererOptions: {
+ diameter: undefined, // diameter of pie, auto computed by default.
+ padding: 20, // padding between pie and neighboring legend or plot margin.
+ sliceMargin: 0, // gap between slices.
+ fill: true, // render solid (filled) slices.
+ shadowOffset: 2, // offset of the shadow from the chart.
+ shadowDepth: 5, // Number of strokes to make when drawing shadow. Each stroke
+ // offset by shadowOffset from the last.
+ shadowAlpha: 0.07 // Opacity of the shadow
+ }
+ },
+
+ // Trendline
+ // Trendline takes options on the trendline object of the series or seriesDefaults object.
+
+ seriesDefaults: {
+ trendline: {
+ show: true, // show the trend line
+ color: '#666666', // CSS color spec for the trend line.
+ label: '', // label for the trend line.
+ type: 'linear', // 'linear', 'exponential' or 'exp'
+ shadow: true, // show the trend line shadow.
+ lineWidth: 1.5, // width of the trend line.
+ shadowAngle: 45, // angle of the shadow. Clockwise from x axis.
+ shadowOffset: 1.5, // offset from the line of the shadow.
+ shadowDepth: 3, // Number of strokes to make when drawing shadow.
+ // Each stroke offset by shadowOffset from the last.
+ shadowAlpha: 0.07 // Opacity of the shadow
+ }
+ }
+}</pre></blockquote></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqPlot Options</div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CSection>This document will help you understand how jqPlot&rsquo;s options relate to the API documentation and the jqPlot object itself. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisLabelRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisLabelRenderer-js.html
new file mode 100644
index 00000000..a268b1af
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisLabelRenderer-js.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.AxisLabelRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.AxisLabelRenderer"></a>$.jqplot.<wbr>AxisLabelRenderer</div><div class=CBody><p>Renderer to place labels on the axes.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.AxisLabelRenderer" >$.jqplot.<wbr>AxisLabelRenderer</a></td><td class=SDescription>Renderer to place labels on the axes.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.AxisLabelRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisLabelRenderer.show" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">show</a></td><td class=SDescription>wether or not to show the tick (mark and label).</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisLabelRenderer.label" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">label</a></td><td class=SDescription>The text or html for the label.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisLabelRenderer.escapeHTML" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">escapeHTML</a></td><td class=SDescription>true to escape HTML entities in the label.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisLabelRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisLabelRenderer.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to show the tick (mark and label).</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisLabelRenderer.label"></a>label</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote><p>The text or html for the label.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisLabelRenderer.escapeHTML"></a>escapeHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote><p>true to escape HTML entities in the label.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Axis Label Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>The text or html for the label.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote>true to escape HTML entities in the label.</div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisTickRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisTickRenderer-js.html
new file mode 100644
index 00000000..13ea1899
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisTickRenderer-js.html
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.AxisTickRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.AxisTickRenderer"></a>$.jqplot.<wbr>AxisTickRenderer</div><div class=CBody><p>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer" >$.jqplot.<wbr>AxisTickRenderer</a></td><td class=SDescription>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.mark" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">mark</a></td><td class=SDescription>tick mark on the axis. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.showMark" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">showMark</a></td><td class=SDescription>wether or not to show the mark on the axis.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.showGridline" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">showGridline</a></td><td class=SDescription>wether or not to draw the gridline on the grid at this tick.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.isMinorTick" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">isMinorTick</a></td><td class=SDescription>if this is a minor tick.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.size" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">size</a></td><td class=SDescription>Length of the tick beyond the grid in pixels. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.markSize" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">markSize</a></td><td class=SDescription>Length of the tick marks in pixels. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.show" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">show</a></td><td class=SDescription>wether or not to show the tick (mark and label). </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.showLabel" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">showLabel</a></td><td class=SDescription>wether or not to show the label.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.formatter" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">formatter</a></td><td class=SDescription>A class of a formatter for the tick text. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.prefix" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">prefix</a></td><td class=SDescription>String to prepend to the tick label. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.suffix" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">suffix</a></td><td class=SDescription>String to append to the tick label. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.formatString" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">formatString</a></td><td class=SDescription>string passed to the formatter.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.fontFamily" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">fontFamily</a></td><td class=SDescription>css spec for the font-family css attribute.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.fontSize" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">fontSize</a></td><td class=SDescription>css spec for the font-size css attribute.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.textColor" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">textColor</a></td><td class=SDescription>css spec for the color attribute.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.escapeHTML" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">escapeHTML</a></td><td class=SDescription>true to escape HTML entities in the label.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.mark"></a>mark</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote><p>tick mark on the axis.&nbsp; One of &lsquo;inside&rsquo;, &lsquo;outside&rsquo;, &lsquo;cross&rsquo;, &lsquo;&rsquo; or null.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.showMark"></a>showMark</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote><p>wether or not to show the mark on the axis.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.showGridline"></a>showGridline</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote><p>wether or not to draw the gridline on the grid at this tick.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.isMinorTick"></a>isMinorTick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote><p>if this is a minor tick.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.size"></a>size</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 4</td></tr></table></blockquote><p>Length of the tick beyond the grid in pixels.&nbsp; DEPRECATED: This has been superceeded by markSize</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.markSize"></a>markSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 6</td></tr></table></blockquote><p>Length of the tick marks in pixels.&nbsp; For &lsquo;cross&rsquo; style, length will be stoked above and below axis, so total length will be twice this.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to show the tick (mark and label).&nbsp; Setting this to false requires more testing.&nbsp; It is recommended to set showLabel and showMark to false instead.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.showLabel"></a>showLabel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote><p>wether or not to show the label.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.formatter"></a>formatter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote><p>A class of a formatter for the tick text.&nbsp; sprintf by default.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.prefix"></a>prefix</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote><p>String to prepend to the tick label.&nbsp; Prefix is prepended to the formatted tick label.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.suffix"></a>suffix</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.suffix = ''</td></tr></table></blockquote><p>String to append to the tick label.&nbsp; Suffix is appended to the formatted tick label.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.formatString"></a>formatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote><p>string passed to the formatter.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.fontFamily"></a>fontFamily</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote><p>css spec for the font-family css attribute.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.fontSize"></a>fontSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote><p>css spec for the font-size css attribute.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.textColor"></a>textColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote><p>css spec for the color attribute.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.escapeHTML"></a>escapeHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote><p>true to escape HTML entities in the label.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile id=MSelected>Axis Tick Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote>tick mark on the axis. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 4</td></tr></table></blockquote>Length of the tick beyond the grid in pixels. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 6</td></tr></table></blockquote>Length of the tick marks in pixels. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label). </div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote>String to prepend to the tick label. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.suffix = ''</td></tr></table></blockquote>String to append to the tick label. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css spec for the font-size css attribute.</div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote>true to escape HTML entities in the label.</div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-canvasGridRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-canvasGridRenderer-js.html
new file mode 100644
index 00000000..f069f6b6
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-canvasGridRenderer-js.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.CanvasGridRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.CanvasGridRenderer"></a>$.jqplot.<wbr>CanvasGridRenderer</div><div class=CBody><p>The default jqPlot grid renderer, creating a grid on a canvas element.&nbsp; The renderer has no additional options beyond the <a href="jqplot-core-js.html#Grid" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">Grid</a> class.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Canvas Grid Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Object representing the grid on which the plot is drawn. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-core-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-core-js.html
new file mode 100644
index 00000000..9fa9cf9d
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-core-js.html
@@ -0,0 +1,389 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>jqPlot Charts</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqPlot_Charts"></a>jqPlot Charts</div><div class=CBody><p>Pure JavaScript plotting plugin for jQuery.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#jqPlot_Charts" >jqPlot Charts</a></td><td class=SDescription>Pure JavaScript plotting plugin for jQuery.</td></tr><tr class="SGeneric SIndent1 SMarked"><td class=SEntry><a href="#Version" >Version</a></td><td class=SDescription>version: 1.0.4 revision: 1121</td></tr><tr class="SGeneric SIndent1"><td class=SEntry><a href="#CopyrightLicense" >Copyright &amp; License</a></td><td class=SDescription>Copyright &copy; 2009-2012 Chris Leonello jqPlot is currently available for use in all personal or commercial projects under both the MIT and GPL version 2.0 licenses. </td></tr><tr class="SGeneric SIndent1 SMarked"><td class=SEntry><a href="#Introduction" >Introduction</a></td><td class=SDescription>jqPlot requires jQuery (1.4+ required for certain features). </td></tr><tr class="SGeneric SIndent1"><td class=SEntry><a href="#Usage" >Usage</a></td><td class=SDescription>See <a href="usage-txt.html#jqPlot_Usage" class=LSection >jqPlot Usage</a></td></tr><tr class="SGeneric SIndent1 SMarked"><td class=SEntry><a href="#Available_Options" >Available Options</a></td><td class=SDescription>See <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">jqPlot Options</a> for a list of options available thorugh the options object (not complete yet!)</td></tr><tr class="SGeneric SIndent1"><td class=SEntry><a href="#Options_Usage" >Options Usage</a></td><td class=SDescription>See <a href="optionsTutorial-txt.html#Options_Tutorial" class=LSection id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">Options Tutorial</a></td></tr><tr class="SGeneric SIndent1 SMarked"><td class=SEntry><a href="#Changes" >Changes</a></td><td class=SDescription>See <a href="changes-txt.html#Change_Log" class=LSection >Change Log</a></td></tr><tr class="SClass"><td class=SEntry><a href="#$.jqplot" >$.jqplot</a></td><td class=SDescription>jQuery function called by the user to create a plot.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.Hooks" >Hooks</a></td><td class=SDescription></td></tr><tr class="SHook SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.jqPlot_Pugin_Hooks" >jqPlot Pugin Hooks</a></td><td class=SDescription></td></tr><tr class="SClass"><td class=SEntry><a href="#Axis" >Axis</a></td><td class=SDescription>An individual axis object. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Axis.Properties" >Properties</a></td><td class=SDescription>Axes options are specified within an axes object at the top level of the plot options like so:</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.show" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">show</a></td><td class=SDescription>Wether to display the axis on the graph.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.tickRenderer" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">tickRenderer</a></td><td class=SDescription>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">$.jqplot.AxisTickRenderer</a>.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.tickOptions" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">tickOptions</a></td><td class=SDescription>Options that will be passed to the tickRenderer, see <a href="jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt5', 'link7')" onMouseOut="HideTip('tt5')">$.jqplot.AxisTickRenderer</a> options.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.labelRenderer" id=link8 onMouseOver="ShowTip(event, 'tt7', 'link8')" onMouseOut="HideTip('tt7')">labelRenderer</a></td><td class=SDescription>A class of a rendering engine for creating an axis label.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.labelOptions" id=link9 onMouseOver="ShowTip(event, 'tt8', 'link9')" onMouseOut="HideTip('tt8')">labelOptions</a></td><td class=SDescription>Options passed to the label renderer.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.label" id=link10 onMouseOver="ShowTip(event, 'tt9', 'link10')" onMouseOut="HideTip('tt9')">label</a></td><td class=SDescription>Label for the axis</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.showLabel" id=link11 onMouseOver="ShowTip(event, 'tt10', 'link11')" onMouseOut="HideTip('tt10')">showLabel</a></td><td class=SDescription>true to show the axis label.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.min" id=link12 onMouseOver="ShowTip(event, 'tt11', 'link12')" onMouseOut="HideTip('tt11')">min</a></td><td class=SDescription>minimum value of the axis (in data units, not pixels).</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.max" id=link13 onMouseOver="ShowTip(event, 'tt12', 'link13')" onMouseOut="HideTip('tt12')">max</a></td><td class=SDescription>maximum value of the axis (in data units, not pixels).</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.autoscale" id=link14 onMouseOver="ShowTip(event, 'tt13', 'link14')" onMouseOut="HideTip('tt13')">autoscale</a></td><td class=SDescription>DEPRECATED the default scaling algorithm produces superior results.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.pad" id=link15 onMouseOver="ShowTip(event, 'tt14', 'link15')" onMouseOut="HideTip('tt14')">pad</a></td><td class=SDescription>Padding to extend the range above and below the data bounds. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.padMax" id=link16 onMouseOver="ShowTip(event, 'tt15', 'link16')" onMouseOut="HideTip('tt15')">padMax</a></td><td class=SDescription>Padding to extend the range above data bounds. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.padMin" id=link17 onMouseOver="ShowTip(event, 'tt16', 'link17')" onMouseOut="HideTip('tt16')">padMin</a></td><td class=SDescription>Padding to extend the range below data bounds. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.ticks" id=link18 onMouseOver="ShowTip(event, 'tt17', 'link18')" onMouseOut="HideTip('tt17')">ticks</a></td><td class=SDescription>1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.numberTicks" id=link19 onMouseOver="ShowTip(event, 'tt18', 'link19')" onMouseOut="HideTip('tt18')">numberTicks</a></td><td class=SDescription>Desired number of ticks. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.tickInterval" id=link20 onMouseOver="ShowTip(event, 'tt19', 'link20')" onMouseOut="HideTip('tt19')">tickInterval</a></td><td class=SDescription>number of units between ticks. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.renderer" id=link21 onMouseOver="ShowTip(event, 'tt20', 'link21')" onMouseOut="HideTip('tt20')">renderer</a></td><td class=SDescription>A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.rendererOptions" id=link22 onMouseOver="ShowTip(event, 'tt21', 'link22')" onMouseOut="HideTip('tt21')">rendererOptions</a></td><td class=SDescription>renderer specific options. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.showTicks" id=link23 onMouseOver="ShowTip(event, 'tt22', 'link23')" onMouseOut="HideTip('tt22')">showTicks</a></td><td class=SDescription>Wether to show the ticks (both marks and labels) or not. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.showTickMarks" id=link24 onMouseOver="ShowTip(event, 'tt23', 'link24')" onMouseOut="HideTip('tt23')">showTickMarks</a></td><td class=SDescription>Wether to show the tick marks (line crossing grid) or not. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.showMinorTicks" id=link25 onMouseOver="ShowTip(event, 'tt24', 'link25')" onMouseOut="HideTip('tt24')">showMinorTicks</a></td><td class=SDescription>Wether or not to show minor ticks. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.drawMajorGridlines" id=link26 onMouseOver="ShowTip(event, 'tt25', 'link26')" onMouseOut="HideTip('tt25')">drawMajorGridlines</a></td><td class=SDescription>True to draw gridlines for major axis ticks.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.drawMinorGridlines" id=link27 onMouseOver="ShowTip(event, 'tt26', 'link27')" onMouseOut="HideTip('tt26')">drawMinorGridlines</a></td><td class=SDescription>True to draw gridlines for minor ticks.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.drawMajorTickMarks" id=link28 onMouseOver="ShowTip(event, 'tt27', 'link28')" onMouseOut="HideTip('tt27')">drawMajorTickMarks</a></td><td class=SDescription>True to draw tick marks for major axis ticks.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.drawMinorTickMarks" id=link29 onMouseOver="ShowTip(event, 'tt28', 'link29')" onMouseOut="HideTip('tt28')">drawMinorTickMarks</a></td><td class=SDescription>True to draw tick marks for minor ticks. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.useSeriesColor" id=link30 onMouseOver="ShowTip(event, 'tt29', 'link30')" onMouseOut="HideTip('tt29')">useSeriesColor</a></td><td class=SDescription>Use the color of the first series associated with this axis for the tick marks and line bordering this axis.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.borderWidth" id=link31 onMouseOver="ShowTip(event, 'tt30', 'link31')" onMouseOut="HideTip('tt30')">borderWidth</a></td><td class=SDescription>width of line stroked at the border of the axis. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.borderColor" id=link32 onMouseOver="ShowTip(event, 'tt31', 'link32')" onMouseOut="HideTip('tt31')">borderColor</a></td><td class=SDescription>color of the border adjacent to the axis. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.scaleToHiddenSeries" id=link33 onMouseOver="ShowTip(event, 'tt32', 'link33')" onMouseOut="HideTip('tt32')">scaleToHiddenSeries</a></td><td class=SDescription>True to include hidden series when computing axes bounds and scaling.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.syncTicks" id=link34 onMouseOver="ShowTip(event, 'tt33', 'link34')" onMouseOut="HideTip('tt33')">syncTicks</a></td><td class=SDescription>true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.tickSpacing" id=link35 onMouseOver="ShowTip(event, 'tt34', 'link35')" onMouseOut="HideTip('tt34')">tickSpacing</a></td><td class=SDescription>Approximate pixel spacing between ticks on graph. </td></tr><tr class="SClass"><td class=SEntry><a href="#Legend" >Legend</a></td><td class=SDescription>Legend object. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Legend.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.show" id=link36 onMouseOver="ShowTip(event, 'tt35', 'link36')" onMouseOut="HideTip('tt35')">show</a></td><td class=SDescription>Wether to display the legend on the graph.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.location" id=link37 onMouseOver="ShowTip(event, 'tt36', 'link37')" onMouseOut="HideTip('tt36')">location</a></td><td class=SDescription>Placement of the legend. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.labels" id=link38 onMouseOver="ShowTip(event, 'tt37', 'link38')" onMouseOut="HideTip('tt37')">labels</a></td><td class=SDescription>Array of labels to use. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.showLabels" id=link39 onMouseOver="ShowTip(event, 'tt38', 'link39')" onMouseOut="HideTip('tt38')">showLabels</a></td><td class=SDescription>true to show the label text on the legend.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.showSwatch" id=link40 onMouseOver="ShowTip(event, 'tt39', 'link40')" onMouseOut="HideTip('tt39')">showSwatch</a></td><td class=SDescription>true to show the color swatches on the legend.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.placement" id=link41 onMouseOver="ShowTip(event, 'tt40', 'link41')" onMouseOut="HideTip('tt40')">placement</a></td><td class=SDescription>&ldquo;insideGrid&rdquo; places legend inside the grid area of the plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.xoffset" id=link42 onMouseOver="ShowTip(event, 'tt41', 'link42')" onMouseOut="HideTip('tt41')">xoffset</a></td><td class=SDescription>DEPRECATED. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.yoffset" id=link43 onMouseOver="ShowTip(event, 'tt42', 'link43')" onMouseOut="HideTip('tt42')">yoffset</a></td><td class=SDescription>DEPRECATED. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.border" id=link44 onMouseOver="ShowTip(event, 'tt43', 'link44')" onMouseOut="HideTip('tt43')">border</a></td><td class=SDescription>css spec for the border around the legend box.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.background" id=link45 onMouseOver="ShowTip(event, 'tt44', 'link45')" onMouseOut="HideTip('tt44')">background</a></td><td class=SDescription>css spec for the background of the legend box.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.textColor" id=link46 onMouseOver="ShowTip(event, 'tt45', 'link46')" onMouseOut="HideTip('tt45')">textColor</a></td><td class=SDescription>css color spec for the legend text.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.fontFamily" id=link47 onMouseOver="ShowTip(event, 'tt46', 'link47')" onMouseOut="HideTip('tt46')">fontFamily</a></td><td class=SDescription>css font-family spec for the legend text.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.fontSize" id=link48 onMouseOver="ShowTip(event, 'tt47', 'link48')" onMouseOut="HideTip('tt47')">fontSize</a></td><td class=SDescription>css font-size spec for the legend text.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.rowSpacing" id=link49 onMouseOver="ShowTip(event, 'tt48', 'link49')" onMouseOut="HideTip('tt48')">rowSpacing</a></td><td class=SDescription>css padding-top spec for the rows in the legend.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.rendererOptions" id=link50 onMouseOver="ShowTip(event, 'tt49', 'link50')" onMouseOut="HideTip('tt49')">rendererOptions</a></td><td class=SDescription>renderer specific options passed to the renderer.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.predraw" >predraw</a></td><td class=SDescription>Wether to draw the legend before the series or not. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.marginTop" id=link51 onMouseOver="ShowTip(event, 'tt50', 'link51')" onMouseOut="HideTip('tt50')">marginTop</a></td><td class=SDescription>CSS margin for the legend DOM element. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.marginRight" id=link52 onMouseOver="ShowTip(event, 'tt51', 'link52')" onMouseOut="HideTip('tt51')">marginRight</a></td><td class=SDescription>CSS margin for the legend DOM element. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.marginBottom" id=link53 onMouseOver="ShowTip(event, 'tt52', 'link53')" onMouseOut="HideTip('tt52')">marginBottom</a></td><td class=SDescription>CSS margin for the legend DOM element. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.marginLeft" id=link54 onMouseOver="ShowTip(event, 'tt53', 'link54')" onMouseOut="HideTip('tt53')">marginLeft</a></td><td class=SDescription>CSS margin for the legend DOM element. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.escapeHtml" id=link55 onMouseOver="ShowTip(event, 'tt54', 'link55')" onMouseOut="HideTip('tt54')">escapeHtml</a></td><td class=SDescription>True to escape special characters with their html entity equivalents in legend text. </td></tr><tr class="SClass"><td class=SEntry><a href="#Title" >Title</a></td><td class=SDescription>Plot Title object. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Title.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Title.text" id=link56 onMouseOver="ShowTip(event, 'tt55', 'link56')" onMouseOut="HideTip('tt55')">text</a></td><td class=SDescription>text of the title;</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Title.show" id=link57 onMouseOver="ShowTip(event, 'tt56', 'link57')" onMouseOut="HideTip('tt56')">show</a></td><td class=SDescription>wether or not to show the title</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Title.fontFamily" id=link58 onMouseOver="ShowTip(event, 'tt57', 'link58')" onMouseOut="HideTip('tt57')">fontFamily</a></td><td class=SDescription>css font-family spec for the text.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Title.fontSize" id=link59 onMouseOver="ShowTip(event, 'tt58', 'link59')" onMouseOut="HideTip('tt58')">fontSize</a></td><td class=SDescription>css font-size spec for the text.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Title.textAlign" id=link60 onMouseOver="ShowTip(event, 'tt59', 'link60')" onMouseOut="HideTip('tt59')">textAlign</a></td><td class=SDescription>css text-align spec for the text.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Title.textColor" id=link61 onMouseOver="ShowTip(event, 'tt60', 'link61')" onMouseOut="HideTip('tt60')">textColor</a></td><td class=SDescription>css color spec for the text.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Title.renderer" id=link62 onMouseOver="ShowTip(event, 'tt61', 'link62')" onMouseOut="HideTip('tt61')">renderer</a></td><td class=SDescription>A class for creating a DOM element for the title, see <a href="jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" class=LClass id=link63 onMouseOver="ShowTip(event, 'tt62', 'link63')" onMouseOut="HideTip('tt62')">$.jqplot.DivTitleRenderer</a>.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Title.rendererOptions" id=link64 onMouseOver="ShowTip(event, 'tt63', 'link64')" onMouseOut="HideTip('tt63')">rendererOptions</a></td><td class=SDescription>renderer specific options passed to the renderer.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Title.escapeHtml" id=link65 onMouseOver="ShowTip(event, 'tt64', 'link65')" onMouseOut="HideTip('tt64')">escapeHtml</a></td><td class=SDescription>True to escape special characters with their html entity equivalents in title text. </td></tr><tr class="SClass"><td class=SEntry><a href="#Series" >Series</a></td><td class=SDescription>An individual data series object. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Series.Properties" >Properties</a></td><td class=SDescription>Properties will be assigned from a series array at the top level of the options. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.show" id=link66 onMouseOver="ShowTip(event, 'tt65', 'link66')" onMouseOut="HideTip('tt65')">show</a></td><td class=SDescription>wether or not to draw the series.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.xaxis" id=link67 onMouseOver="ShowTip(event, 'tt66', 'link67')" onMouseOut="HideTip('tt66')">xaxis</a></td><td class=SDescription>which x axis to use with this series, either &lsquo;xaxis&rsquo; or &lsquo;x2axis&rsquo;.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.yaxis" id=link68 onMouseOver="ShowTip(event, 'tt67', 'link68')" onMouseOut="HideTip('tt67')">yaxis</a></td><td class=SDescription>which y axis to use with this series, either &lsquo;yaxis&rsquo; or &lsquo;y2axis&rsquo;.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.renderer" id=link69 onMouseOver="ShowTip(event, 'tt68', 'link69')" onMouseOut="HideTip('tt68')">renderer</a></td><td class=SDescription>A class of a renderer which will draw the series, see <a href="jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" class=LClass id=link70 onMouseOver="ShowTip(event, 'tt69', 'link70')" onMouseOut="HideTip('tt69')">$.jqplot.LineRenderer</a>.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.rendererOptions" id=link71 onMouseOver="ShowTip(event, 'tt70', 'link71')" onMouseOut="HideTip('tt70')">rendererOptions</a></td><td class=SDescription>Options to pass on to the renderer.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.label" id=link72 onMouseOver="ShowTip(event, 'tt71', 'link72')" onMouseOut="HideTip('tt71')">label</a></td><td class=SDescription>Line label to use in the legend.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.showLabel" id=link73 onMouseOver="ShowTip(event, 'tt72', 'link73')" onMouseOut="HideTip('tt72')">showLabel</a></td><td class=SDescription>true to show label for this series in the legend.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.color" id=link74 onMouseOver="ShowTip(event, 'tt73', 'link74')" onMouseOut="HideTip('tt73')">color</a></td><td class=SDescription>css color spec for the series</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.negativeColor" id=link75 onMouseOver="ShowTip(event, 'tt74', 'link75')" onMouseOut="HideTip('tt74')">negativeColor</a></td><td class=SDescription>css color spec used for filled (area) plots that are filled to zero and the &ldquo;useNegativeColors&rdquo; option is true.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.lineWidth" id=link76 onMouseOver="ShowTip(event, 'tt75', 'link76')" onMouseOut="HideTip('tt75')">lineWidth</a></td><td class=SDescription>width of the line in pixels. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.lineJoin" id=link77 onMouseOver="ShowTip(event, 'tt76', 'link77')" onMouseOut="HideTip('tt76')">lineJoin</a></td><td class=SDescription>Canvas lineJoin style between segments of series.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.lineCap" id=link78 onMouseOver="ShowTip(event, 'tt77', 'link78')" onMouseOut="HideTip('tt77')">lineCap</a></td><td class=SDescription>Canvas lineCap style at ends of line.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.linePattern" id=link79 onMouseOver="ShowTip(event, 'tt78', 'link79')" onMouseOut="HideTip('tt78')">linePattern</a></td><td class=SDescription>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.shadowAngle" id=link80 onMouseOver="ShowTip(event, 'tt79', 'link80')" onMouseOut="HideTip('tt79')">shadowAngle</a></td><td class=SDescription>Shadow angle in degrees</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.shadowOffset" id=link81 onMouseOver="ShowTip(event, 'tt80', 'link81')" onMouseOut="HideTip('tt80')">shadowOffset</a></td><td class=SDescription>Shadow offset from line in pixels</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.shadowDepth" id=link82 onMouseOver="ShowTip(event, 'tt81', 'link82')" onMouseOut="HideTip('tt81')">shadowDepth</a></td><td class=SDescription>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.shadowAlpha" id=link83 onMouseOver="ShowTip(event, 'tt82', 'link83')" onMouseOut="HideTip('tt82')">shadowAlpha</a></td><td class=SDescription>Alpha channel transparency of shadow. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.breakOnNull" id=link84 onMouseOver="ShowTip(event, 'tt83', 'link84')" onMouseOut="HideTip('tt83')">breakOnNull</a></td><td class=SDescription>Wether line segments should be be broken at null value. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.markerRenderer" id=link85 onMouseOver="ShowTip(event, 'tt84', 'link85')" onMouseOut="HideTip('tt84')">markerRenderer</a></td><td class=SDescription>A class of a renderer which will draw marker (e.g. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.markerOptions" id=link86 onMouseOver="ShowTip(event, 'tt85', 'link86')" onMouseOut="HideTip('tt85')">markerOptions</a></td><td class=SDescription>renderer specific options to pass to the markerRenderer, see <a href="jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" class=LClass id=link87 onMouseOver="ShowTip(event, 'tt86', 'link87')" onMouseOut="HideTip('tt86')">$.jqplot.MarkerRenderer</a>.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.showLine" id=link88 onMouseOver="ShowTip(event, 'tt87', 'link88')" onMouseOut="HideTip('tt87')">showLine</a></td><td class=SDescription>wether to actually draw the line or not. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.showMarker" id=link89 onMouseOver="ShowTip(event, 'tt88', 'link89')" onMouseOut="HideTip('tt88')">showMarker</a></td><td class=SDescription>wether or not to show the markers at the data points.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.index" id=link90 onMouseOver="ShowTip(event, 'tt89', 'link90')" onMouseOut="HideTip('tt89')">index</a></td><td class=SDescription>0 based index of this series in the plot series array.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.fill" id=link91 onMouseOver="ShowTip(event, 'tt90', 'link91')" onMouseOut="HideTip('tt90')">fill</a></td><td class=SDescription>true or false, wether to fill under lines or in bars. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.fillColor" id=link92 onMouseOver="ShowTip(event, 'tt91', 'link92')" onMouseOut="HideTip('tt91')">fillColor</a></td><td class=SDescription>CSS color spec to use for fill under line. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.fillAlpha" id=link93 onMouseOver="ShowTip(event, 'tt92', 'link93')" onMouseOut="HideTip('tt92')">fillAlpha</a></td><td class=SDescription>Alpha transparency to apply to the fill under the line. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.fillAndStroke" id=link94 onMouseOver="ShowTip(event, 'tt93', 'link94')" onMouseOut="HideTip('tt93')">fillAndStroke</a></td><td class=SDescription>If true will stroke the line (with color this.color) as well as fill under it. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.disableStack" id=link95 onMouseOver="ShowTip(event, 'tt94', 'link95')" onMouseOut="HideTip('tt94')">disableStack</a></td><td class=SDescription>true to not stack this series with other series in the plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.neighborThreshold" id=link96 onMouseOver="ShowTip(event, 'tt95', 'link96')" onMouseOut="HideTip('tt95')">neighborThreshold</a></td><td class=SDescription>how close or far (in pixels) the cursor must be from a point marker to detect the point.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.fillToZero" id=link97 onMouseOver="ShowTip(event, 'tt96', 'link97')" onMouseOut="HideTip('tt96')">fillToZero</a></td><td class=SDescription>true will force bar and filled series to fill toward zero on the fill Axis.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.fillToValue" id=link98 onMouseOver="ShowTip(event, 'tt97', 'link98')" onMouseOut="HideTip('tt97')">fillToValue</a></td><td class=SDescription>fill a filled series to this value on the fill axis. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.fillAxis" id=link99 onMouseOver="ShowTip(event, 'tt98', 'link99')" onMouseOut="HideTip('tt98')">fillAxis</a></td><td class=SDescription>Either &lsquo;x&rsquo; or &lsquo;y&rsquo;. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.useNegativeColors" id=link100 onMouseOver="ShowTip(event, 'tt99', 'link100')" onMouseOut="HideTip('tt99')">useNegativeColors</a></td><td class=SDescription>true to color negative values differently in filled and bar charts.</td></tr><tr class="SClass"><td class=SEntry><a href="#Grid" >Grid</a></td><td class=SDescription>Object representing the grid on which the plot is drawn. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Grid.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Grid.drawGridlines" id=link101 onMouseOver="ShowTip(event, 'tt100', 'link101')" onMouseOut="HideTip('tt100')">drawGridlines</a></td><td class=SDescription>wether to draw the gridlines on the plot.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Grid.gridLineColor" id=link102 onMouseOver="ShowTip(event, 'tt101', 'link102')" onMouseOut="HideTip('tt101')">gridLineColor</a></td><td class=SDescription>color of the grid lines.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Grid.gridLineWidth" id=link103 onMouseOver="ShowTip(event, 'tt102', 'link103')" onMouseOut="HideTip('tt102')">gridLineWidth</a></td><td class=SDescription>width of the grid lines.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Grid.background" id=link104 onMouseOver="ShowTip(event, 'tt103', 'link104')" onMouseOut="HideTip('tt103')">background</a></td><td class=SDescription>css spec for the background color.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Grid.borderColor" id=link105 onMouseOver="ShowTip(event, 'tt104', 'link105')" onMouseOut="HideTip('tt104')">borderColor</a></td><td class=SDescription>css spec for the color of the grid border.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Grid.borderWidth" id=link106 onMouseOver="ShowTip(event, 'tt105', 'link106')" onMouseOut="HideTip('tt105')">borderWidth</a></td><td class=SDescription>width of the border in pixels.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Grid.drawBorder" id=link107 onMouseOver="ShowTip(event, 'tt106', 'link107')" onMouseOut="HideTip('tt106')">drawBorder</a></td><td class=SDescription>True to draw border around grid.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Grid.shadow" id=link108 onMouseOver="ShowTip(event, 'tt107', 'link108')" onMouseOut="HideTip('tt107')">shadow</a></td><td class=SDescription>wether to show a shadow behind the grid.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Grid.shadowAngle" id=link109 onMouseOver="ShowTip(event, 'tt108', 'link109')" onMouseOut="HideTip('tt108')">shadowAngle</a></td><td class=SDescription>shadow angle in degrees</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Grid.shadowOffset" id=link110 onMouseOver="ShowTip(event, 'tt109', 'link110')" onMouseOut="HideTip('tt109')">shadowOffset</a></td><td class=SDescription>Offset of each shadow stroke from the border in pixels</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Grid.shadowWidth" id=link111 onMouseOver="ShowTip(event, 'tt110', 'link111')" onMouseOut="HideTip('tt110')">shadowWidth</a></td><td class=SDescription>width of the stoke for the shadow</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Grid.shadowDepth" id=link112 onMouseOver="ShowTip(event, 'tt111', 'link112')" onMouseOut="HideTip('tt111')">shadowDepth</a></td><td class=SDescription>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Grid.shadowColor" id=link113 onMouseOver="ShowTip(event, 'tt112', 'link113')" onMouseOut="HideTip('tt112')">shadowColor</a></td><td class=SDescription>an optional css color spec for the shadow in &lsquo;rgba(n, n, n, n)&rsquo; form</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Grid.shadowAlpha" id=link114 onMouseOver="ShowTip(event, 'tt113', 'link114')" onMouseOut="HideTip('tt113')">shadowAlpha</a></td><td class=SDescription>Alpha channel transparency of shadow. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Grid.renderer" id=link115 onMouseOver="ShowTip(event, 'tt114', 'link115')" onMouseOut="HideTip('tt114')">renderer</a></td><td class=SDescription>Instance of a renderer which will actually render the grid, see <a href="jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" class=LClass id=link116 onMouseOver="ShowTip(event, 'tt115', 'link116')" onMouseOut="HideTip('tt115')">$.jqplot.CanvasGridRenderer</a>.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Grid.rendererOptions" id=link117 onMouseOver="ShowTip(event, 'tt116', 'link117')" onMouseOut="HideTip('tt116')">rendererOptions</a></td><td class=SDescription>Options to pass on to the renderer, see <a href="jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" class=LClass id=link118 onMouseOver="ShowTip(event, 'tt115', 'link118')" onMouseOut="HideTip('tt115')">$.jqplot.CanvasGridRenderer</a>.</td></tr><tr class="SClass"><td class=SEntry><a href="#jqPlot" >jqPlot</a></td><td class=SDescription>Plot object returned by call to $.jqplot. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#jqPlot.Properties" >Properties</a></td><td class=SDescription>These properties are specified at the top of the options object like so:</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.animate" id=link119 onMouseOver="ShowTip(event, 'tt117', 'link119')" onMouseOut="HideTip('tt117')">animate</a></td><td class=SDescription>True to animate the series on initial plot draw (renderer dependent). </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.animateReplot" id=link120 onMouseOver="ShowTip(event, 'tt118', 'link120')" onMouseOut="HideTip('tt118')">animateReplot</a></td><td class=SDescription>True to animate series after a call to the replot() method. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.axes" id=link121 onMouseOver="ShowTip(event, 'tt119', 'link121')" onMouseOut="HideTip('tt119')">axes</a></td><td class=SDescription>up to 4 axes are supported, each with it&rsquo;s own options, See <a href="#Axis" class=LClass id=link122 onMouseOver="ShowTip(event, 'tt120', 'link122')" onMouseOut="HideTip('tt120')">Axis</a> for axis specific options.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.data" id=link123 onMouseOver="ShowTip(event, 'tt121', 'link123')" onMouseOut="HideTip('tt121')">data</a></td><td class=SDescription>user&rsquo;s data. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.dataRenderer" id=link124 onMouseOver="ShowTip(event, 'tt122', 'link124')" onMouseOut="HideTip('tt122')">dataRenderer</a></td><td class=SDescription>A callable which can be used to preprocess data passed into the plot. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.dataRendererOptions" id=link125 onMouseOver="ShowTip(event, 'tt123', 'link125')" onMouseOut="HideTip('tt123')">dataRendererOptions</a></td><td class=SDescription>Options that will be passed to the dataRenderer. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.axesDefaults" >axesDefaults</a></td><td class=SDescription>default options that will be applied to all axes. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.seriesDefaults" id=link126 onMouseOver="ShowTip(event, 'tt124', 'link126')" onMouseOut="HideTip('tt124')">seriesDefaults</a></td><td class=SDescription>default options that will be applied to all series. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.defaultAxisStart" id=link127 onMouseOver="ShowTip(event, 'tt125', 'link127')" onMouseOut="HideTip('tt125')">defaultAxisStart</a></td><td class=SDescription>1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.fillBetween" id=link128 onMouseOver="ShowTip(event, 'tt126', 'link128')" onMouseOut="HideTip('tt126')">fillBetween</a></td><td class=SDescription>Fill between 2 line series in a plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.fontSize" id=link129 onMouseOver="ShowTip(event, 'tt127', 'link129')" onMouseOut="HideTip('tt127')">fontSize</a></td><td class=SDescription>css spec for the font-size attribute. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.grid" id=link130 onMouseOver="ShowTip(event, 'tt128', 'link130')" onMouseOut="HideTip('tt128')">grid</a></td><td class=SDescription>See <a href="#Grid" class=LClass id=link131 onMouseOver="ShowTip(event, 'tt129', 'link131')" onMouseOut="HideTip('tt129')">Grid</a> for grid specific options.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.legend" id=link132 onMouseOver="ShowTip(event, 'tt130', 'link132')" onMouseOut="HideTip('tt130')">legend</a></td><td class=SDescription>see &lt;$.jqplot.TableLegendRenderer&gt;</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.noDataIndicator" >noDataIndicator</a></td><td class=SDescription>Options to set up a mock plot with a data loading indicator if no data is specified.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.series" id=link133 onMouseOver="ShowTip(event, 'tt131', 'link133')" onMouseOut="HideTip('tt131')">series</a></td><td class=SDescription>Array of series object options. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.seriesColors" id=link134 onMouseOver="ShowTip(event, 'tt132', 'link134')" onMouseOut="HideTip('tt132')">seriesColors</a></td><td class=SDescription>Ann array of CSS color specifications that will be applied, in order, to the series in the plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.sortData" id=link135 onMouseOver="ShowTip(event, 'tt133', 'link135')" onMouseOut="HideTip('tt133')">sortData</a></td><td class=SDescription>false to not sort the data passed in by the user. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.stackSeries" id=link136 onMouseOver="ShowTip(event, 'tt134', 'link136')" onMouseOut="HideTip('tt134')">stackSeries</a></td><td class=SDescription>true or false, creates a stack or &ldquo;mountain&rdquo; plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.title" id=link137 onMouseOver="ShowTip(event, 'tt135', 'link137')" onMouseOut="HideTip('tt135')">title</a></td><td class=SDescription>Title object. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#jqPlot.methods" >methods</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.init" id=link138 onMouseOver="ShowTip(event, 'tt136', 'link138')" onMouseOut="HideTip('tt136')">init</a></td><td class=SDescription>sets the plot target, checks data and applies user options to plot.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jqPlot.resetAxesScale" id=link139 onMouseOver="ShowTip(event, 'tt137', 'link139')" onMouseOut="HideTip('tt137')">resetAxesScale</a></td><td class=SDescription>Reset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.reInitialize" id=link140 onMouseOver="ShowTip(event, 'tt138', 'link140')" onMouseOut="HideTip('tt138')">reInitialize</a></td><td class=SDescription>reinitialize plot for replotting. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jqPlot.quickInit" id=link141 onMouseOver="ShowTip(event, 'tt139', 'link141')" onMouseOut="HideTip('tt139')">quickInit</a></td><td class=SDescription>Quick reinitialization plot for replotting. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.destroy" id=link142 onMouseOver="ShowTip(event, 'tt140', 'link142')" onMouseOut="HideTip('tt140')">destroy</a></td><td class=SDescription>Releases all resources occupied by the plot</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jqPlot.replot" id=link143 onMouseOver="ShowTip(event, 'tt141', 'link143')" onMouseOut="HideTip('tt141')">replot</a></td><td class=SDescription>Does a reinitialization of the plot followed by a redraw. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.redraw" id=link144 onMouseOver="ShowTip(event, 'tt142', 'link144')" onMouseOut="HideTip('tt142')">redraw</a></td><td class=SDescription>Empties the plot target div and redraws the plot. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jqPlot.draw" id=link145 onMouseOver="ShowTip(event, 'tt143', 'link145')" onMouseOut="HideTip('tt143')">draw</a></td><td class=SDescription>Draws all elements of the plot into the container. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.drawSeries" id=link146 onMouseOver="ShowTip(event, 'tt144', 'link146')" onMouseOut="HideTip('tt144')">drawSeries</a></td><td class=SDescription>Redraws all or just one series on the plot. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jqPlot.moveSeriesToFront" id=link147 onMouseOver="ShowTip(event, 'tt145', 'link147')" onMouseOut="HideTip('tt145')">moveSeriesToFront</a></td><td class=SDescription>This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.moveSeriesToBack" id=link148 onMouseOver="ShowTip(event, 'tt146', 'link148')" onMouseOut="HideTip('tt146')">moveSeriesToBack</a></td><td class=SDescription>This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jqPlot.restorePreviousSeriesOrder" id=link149 onMouseOver="ShowTip(event, 'tt147', 'link149')" onMouseOut="HideTip('tt147')">restorePreviousSeriesOrder</a></td><td class=SDescription>This method requires jQuery 1.4+ Restore the series canvas order to its previous state. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.restoreOriginalSeriesOrder" id=link150 onMouseOver="ShowTip(event, 'tt148', 'link150')" onMouseOut="HideTip('tt148')">restoreOriginalSeriesOrder</a></td><td class=SDescription>This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Version"></a>Version</h3><div class=CBody><p>version: 1.0.4 revision: 1121</p></div></div></div>
+
+<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="CopyrightLicense"></a>Copyright &amp; License</h3><div class=CBody><p>Copyright &copy; 2009-2012 Chris Leonello jqPlot is currently available for use in all personal or commercial projects under both the MIT and GPL version 2.0 licenses.&nbsp; This means that you can choose the license that best suits your project and use it accordingly.</p><p>See <a href="gpl-2-0-txt.html#GPL_Version_2" class=LSection id=link151 onMouseOver="ShowTip(event, 'tt149', 'link151')" onMouseOut="HideTip('tt149')">GPL Version 2</a> and <a href="MIT-LICENSE-txt.html#MIT_License" class=LSection id=link152 onMouseOver="ShowTip(event, 'tt150', 'link152')" onMouseOut="HideTip('tt150')">MIT License</a> contained within this distribution for further information.</p><p>The author would appreciate an email letting him know of any substantial use of jqPlot.&nbsp; You can reach the author at: chris at jqplot dot com or see <a href="http://www.jqplot.com/info.php" class=LURL target=_top>http://www.jqplot.com/info.php</a>.&nbsp; This is, of course, not required.</p><p>If you are feeling kind and generous, consider supporting the project by making a donation at: <a href="http://www.jqplot.com/donate.php" class=LURL target=_top>http://www.jqplot.com/donate.php</a>.</p><h4 class=CHeading>sprintf functions contained in jqplot.sprintf.js by Ash Searle</h4><p>version 2007.04.27 author Ash Searle <a href="http://hexmen.com/blog/2007/03/printf-sprintf/" class=LURL target=_top>http://hexmen.com/blog/2007/03/printf-sprintf/</a> <a href="http://hexmen.com/js/sprintf.js" class=LURL target=_top>http://hexmen.com/js/sprintf.js</a> The author (Ash Searle) has placed this code in the public domain: &ldquo;This code is unrestricted: you are free to use it however you like.&rdquo;</p></div></div></div>
+
+<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Introduction"></a>Introduction</h3><div class=CBody><p>jqPlot requires jQuery (1.4+ required for certain features). jQuery 1.4.2 is included in the distribution.&nbsp; To use jqPlot include jQuery, the jqPlot jQuery plugin, the jqPlot css file and optionally the excanvas script for IE support in your web page:</p><blockquote><pre>&lt;!--[if lt IE 9]&gt;&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;excanvas.js&quot;&gt;&lt;/script&gt;&lt;![endif]--&gt;
+&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jquery-1.4.4.min.js&quot;&gt;&lt;/script&gt;
+&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jquery.jqplot.min.js&quot;&gt;&lt;/script&gt;
+&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;jquery.jqplot.css&quot; /&gt;</pre></blockquote><p>jqPlot can be customized by overriding the defaults of any of the objects which make up the plot.&nbsp; The general usage of jqplot is:</p><blockquote><pre>chart = $.jqplot('targetElemId', [dataArray,...], {optionsObject});</pre></blockquote><p>The options available to jqplot are detailed in <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link153 onMouseOver="ShowTip(event, 'tt1', 'link153')" onMouseOut="HideTip('tt1')">jqPlot Options</a> in the jqPlotOptions.txt file.</p><p>An actual call to $.jqplot() may look like the examples below:</p><blockquote><pre>chart = $.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);</pre></blockquote><p>or</p><blockquote><pre>dataArray = [34,12,43,55,77];
+chart = $.jqplot('targetElemId', [dataArray, ...], {title:'My Plot', axes:{yaxis:{min:20, max:100}}});</pre></blockquote><p>For more inforrmation, see <a href="usage-txt.html#jqPlot_Usage" class=LSection >jqPlot Usage</a>.</p></div></div></div>
+
+<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Usage"></a>Usage</h3><div class=CBody><p>See <a href="usage-txt.html#jqPlot_Usage" class=LSection >jqPlot Usage</a></p></div></div></div>
+
+<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Available_Options"></a>Available Options</h3><div class=CBody><p>See <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link154 onMouseOver="ShowTip(event, 'tt1', 'link154')" onMouseOut="HideTip('tt1')">jqPlot Options</a> for a list of options available thorugh the options object (not complete yet!)</p></div></div></div>
+
+<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Options_Usage"></a>Options Usage</h3><div class=CBody><p>See <a href="optionsTutorial-txt.html#Options_Tutorial" class=LSection id=link155 onMouseOver="ShowTip(event, 'tt2', 'link155')" onMouseOut="HideTip('tt2')">Options Tutorial</a></p></div></div></div>
+
+<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Changes"></a>Changes</h3><div class=CBody><p>See <a href="changes-txt.html#Change_Log" class=LSection >Change Log</a></p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="$.jqplot"></a>$.jqplot</h2><div class=CBody><p>jQuery function called by the user to create a plot.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>target</td><td class=CDLDescription>ID of target element to render the plot into.</td></tr><tr><td class=CDLEntry>data</td><td class=CDLDescription>an array of data series.</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>user defined options object.&nbsp; See the individual classes for available options.</td></tr></table><h4 class=CHeading>Properties</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>object to hold configuration information for jqPlot plot object.</td></tr></table><h4 class=CHeading>attributes</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>enablePlugins</td><td class=CDLDescription>False to disable plugins by default.&nbsp; Plugins must then be explicitly enabled in the individual plot options.&nbsp; Default: false.&nbsp; This property sets the &ldquo;show&rdquo; property of certain plugins to true or false.&nbsp; Only plugins that can be immediately active upon loading are affected.&nbsp; This includes non-renderer plugins like cursor, dragable, highlighter, and trendline.</td></tr><tr><td class=CDLEntry>defaultHeight</td><td class=CDLDescription>Default height for plots where no css height specification exists.&nbsp; This is a jqplot wide default.</td></tr><tr><td class=CDLEntry>defaultWidth</td><td class=CDLDescription>Default height for plots where no css height specification exists.&nbsp; This is a jqplot wide default.</td></tr></table><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#$.jqplot.Hooks" >Hooks</a></td><td class=SDescription></td></tr><tr class="SHook SIndent1 SMarked"><td class=SEntry><a href="#$.jqplot.jqPlot_Pugin_Hooks" >jqPlot Pugin Hooks</a></td><td class=SDescription></td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Hooks"></a>Hooks</h3></div></div>
+
+<div class="CHook"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.jqPlot_Pugin_Hooks"></a>jqPlot Pugin Hooks</h3><div class=CBody><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.preInitHooks"></a>$.jqplot.preInitHooks</td><td class=CDLDescription>called before initialization.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.postInitHooks"></a>$.jqplot.postInitHooks</td><td class=CDLDescription>called after initialization.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.preParseOptionsHooks"></a>$.jqplot.preParseOptionsHooks</td><td class=CDLDescription>called before user options are parsed.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.postParseOptionsHooks"></a>$.jqplot.postParseOptionsHooks</td><td class=CDLDescription>called after user options are parsed.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.preDrawHooks"></a>$.jqplot.preDrawHooks</td><td class=CDLDescription>called before plot draw.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.postDrawHooks"></a>$.jqplot.postDrawHooks</td><td class=CDLDescription>called after plot draw.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.preDrawSeriesHooks"></a>$.jqplot.preDrawSeriesHooks</td><td class=CDLDescription>called before each series is drawn.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.postDrawSeriesHooks"></a>$.jqplot.postDrawSeriesHooks</td><td class=CDLDescription>called after each series is drawn.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.preDrawLegendHooks"></a>$.jqplot.preDrawLegendHooks</td><td class=CDLDescription>called before the legend is drawn.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.addLegendRowHooks"></a>$.jqplot.addLegendRowHooks</td><td class=CDLDescription>called at the end of legend draw, so plugins can add rows to the legend table.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.preSeriesInitHooks"></a>$.jqplot.preSeriesInitHooks</td><td class=CDLDescription>called before series is initialized.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.postSeriesInitHooks"></a>$.jqplot.postSeriesInitHooks</td><td class=CDLDescription>called after series is initialized.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.preParseSeriesOptionsHooks"></a>$.jqplot.preParseSeriesOptionsHooks</td><td class=CDLDescription>called before series related options are parsed.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.postParseSeriesOptionsHooks"></a>$.jqplot.postParseSeriesOptionsHooks</td><td class=CDLDescription>called after series related options are parsed.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.eventListenerHooks"></a>$.jqplot.eventListenerHooks</td><td class=CDLDescription>called at the end of plot drawing, binds listeners to the event canvas which lays on top of the grid area.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.preDrawSeriesShadowHooks"></a>$.jqplot.preDrawSeriesShadowHooks</td><td class=CDLDescription>called before series shadows are drawn.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.postDrawSeriesShadowHooks"></a>$.jqplot.postDrawSeriesShadowHooks</td><td class=CDLDescription>called after series shadows are drawn.</td></tr></table></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="Axis"></a>Axis</h2><div class=CBody><p>An individual axis object.&nbsp; Cannot be instantiated directly, but created by the Plot oject.&nbsp; Axis properties can be set or overriden by the options passed in from the user.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#Axis.Properties" >Properties</a></td><td class=SDescription>Axes options are specified within an axes object at the top level of the plot options like so:</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.show" id=link156 onMouseOver="ShowTip(event, 'tt3', 'link156')" onMouseOut="HideTip('tt3')">show</a></td><td class=SDescription>Wether to display the axis on the graph.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.tickRenderer" id=link157 onMouseOver="ShowTip(event, 'tt4', 'link157')" onMouseOut="HideTip('tt4')">tickRenderer</a></td><td class=SDescription>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link158 onMouseOver="ShowTip(event, 'tt5', 'link158')" onMouseOut="HideTip('tt5')">$.jqplot.AxisTickRenderer</a>.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.tickOptions" id=link159 onMouseOver="ShowTip(event, 'tt6', 'link159')" onMouseOut="HideTip('tt6')">tickOptions</a></td><td class=SDescription>Options that will be passed to the tickRenderer, see <a href="jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link160 onMouseOver="ShowTip(event, 'tt5', 'link160')" onMouseOut="HideTip('tt5')">$.jqplot.AxisTickRenderer</a> options.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.labelRenderer" id=link161 onMouseOver="ShowTip(event, 'tt7', 'link161')" onMouseOut="HideTip('tt7')">labelRenderer</a></td><td class=SDescription>A class of a rendering engine for creating an axis label.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.labelOptions" id=link162 onMouseOver="ShowTip(event, 'tt8', 'link162')" onMouseOut="HideTip('tt8')">labelOptions</a></td><td class=SDescription>Options passed to the label renderer.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.label" id=link163 onMouseOver="ShowTip(event, 'tt9', 'link163')" onMouseOut="HideTip('tt9')">label</a></td><td class=SDescription>Label for the axis</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.showLabel" id=link164 onMouseOver="ShowTip(event, 'tt10', 'link164')" onMouseOut="HideTip('tt10')">showLabel</a></td><td class=SDescription>true to show the axis label.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.min" id=link165 onMouseOver="ShowTip(event, 'tt11', 'link165')" onMouseOut="HideTip('tt11')">min</a></td><td class=SDescription>minimum value of the axis (in data units, not pixels).</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.max" id=link166 onMouseOver="ShowTip(event, 'tt12', 'link166')" onMouseOut="HideTip('tt12')">max</a></td><td class=SDescription>maximum value of the axis (in data units, not pixels).</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.autoscale" id=link167 onMouseOver="ShowTip(event, 'tt13', 'link167')" onMouseOut="HideTip('tt13')">autoscale</a></td><td class=SDescription>DEPRECATED the default scaling algorithm produces superior results.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.pad" id=link168 onMouseOver="ShowTip(event, 'tt14', 'link168')" onMouseOut="HideTip('tt14')">pad</a></td><td class=SDescription>Padding to extend the range above and below the data bounds. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.padMax" id=link169 onMouseOver="ShowTip(event, 'tt15', 'link169')" onMouseOut="HideTip('tt15')">padMax</a></td><td class=SDescription>Padding to extend the range above data bounds. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.padMin" id=link170 onMouseOver="ShowTip(event, 'tt16', 'link170')" onMouseOut="HideTip('tt16')">padMin</a></td><td class=SDescription>Padding to extend the range below data bounds. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.ticks" id=link171 onMouseOver="ShowTip(event, 'tt17', 'link171')" onMouseOut="HideTip('tt17')">ticks</a></td><td class=SDescription>1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.numberTicks" id=link172 onMouseOver="ShowTip(event, 'tt18', 'link172')" onMouseOut="HideTip('tt18')">numberTicks</a></td><td class=SDescription>Desired number of ticks. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.tickInterval" id=link173 onMouseOver="ShowTip(event, 'tt19', 'link173')" onMouseOut="HideTip('tt19')">tickInterval</a></td><td class=SDescription>number of units between ticks. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.renderer" id=link174 onMouseOver="ShowTip(event, 'tt20', 'link174')" onMouseOut="HideTip('tt20')">renderer</a></td><td class=SDescription>A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.rendererOptions" id=link175 onMouseOver="ShowTip(event, 'tt21', 'link175')" onMouseOut="HideTip('tt21')">rendererOptions</a></td><td class=SDescription>renderer specific options. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.showTicks" id=link176 onMouseOver="ShowTip(event, 'tt22', 'link176')" onMouseOut="HideTip('tt22')">showTicks</a></td><td class=SDescription>Wether to show the ticks (both marks and labels) or not. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.showTickMarks" id=link177 onMouseOver="ShowTip(event, 'tt23', 'link177')" onMouseOut="HideTip('tt23')">showTickMarks</a></td><td class=SDescription>Wether to show the tick marks (line crossing grid) or not. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.showMinorTicks" id=link178 onMouseOver="ShowTip(event, 'tt24', 'link178')" onMouseOut="HideTip('tt24')">showMinorTicks</a></td><td class=SDescription>Wether or not to show minor ticks. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.drawMajorGridlines" id=link179 onMouseOver="ShowTip(event, 'tt25', 'link179')" onMouseOut="HideTip('tt25')">drawMajorGridlines</a></td><td class=SDescription>True to draw gridlines for major axis ticks.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.drawMinorGridlines" id=link180 onMouseOver="ShowTip(event, 'tt26', 'link180')" onMouseOut="HideTip('tt26')">drawMinorGridlines</a></td><td class=SDescription>True to draw gridlines for minor ticks.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.drawMajorTickMarks" id=link181 onMouseOver="ShowTip(event, 'tt27', 'link181')" onMouseOut="HideTip('tt27')">drawMajorTickMarks</a></td><td class=SDescription>True to draw tick marks for major axis ticks.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.drawMinorTickMarks" id=link182 onMouseOver="ShowTip(event, 'tt28', 'link182')" onMouseOut="HideTip('tt28')">drawMinorTickMarks</a></td><td class=SDescription>True to draw tick marks for minor ticks. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.useSeriesColor" id=link183 onMouseOver="ShowTip(event, 'tt29', 'link183')" onMouseOut="HideTip('tt29')">useSeriesColor</a></td><td class=SDescription>Use the color of the first series associated with this axis for the tick marks and line bordering this axis.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.borderWidth" id=link184 onMouseOver="ShowTip(event, 'tt30', 'link184')" onMouseOut="HideTip('tt30')">borderWidth</a></td><td class=SDescription>width of line stroked at the border of the axis. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.borderColor" id=link185 onMouseOver="ShowTip(event, 'tt31', 'link185')" onMouseOut="HideTip('tt31')">borderColor</a></td><td class=SDescription>color of the border adjacent to the axis. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.scaleToHiddenSeries" id=link186 onMouseOver="ShowTip(event, 'tt32', 'link186')" onMouseOut="HideTip('tt32')">scaleToHiddenSeries</a></td><td class=SDescription>True to include hidden series when computing axes bounds and scaling.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.syncTicks" id=link187 onMouseOver="ShowTip(event, 'tt33', 'link187')" onMouseOut="HideTip('tt33')">syncTicks</a></td><td class=SDescription>true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.tickSpacing" id=link188 onMouseOver="ShowTip(event, 'tt34', 'link188')" onMouseOut="HideTip('tt34')">tickSpacing</a></td><td class=SDescription>Approximate pixel spacing between ticks on graph. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Axis.Properties"></a>Properties</h3><div class=CBody><p>Axes options are specified within an axes object at the top level of the plot options like so:</p><blockquote><pre>{
+ axes: {
+ xaxis: {min: 5},
+ yaxis: {min: 2, max: 8, numberTicks:4},
+ x2axis: {pad: 1.5},
+ y2axis: {ticks:[22, 44, 66, 88]}
+ }
+}</pre></blockquote><p>There are 2 x axes, &lsquo;xaxis&rsquo; and &lsquo;x2axis&rsquo;, and 9 yaxes, &lsquo;yaxis&rsquo;, &lsquo;y2axis&rsquo;.&nbsp; &lsquo;y3axis&rsquo;, ...&nbsp; Any or all of which may be specified.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote><p>Wether to display the axis on the graph.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.tickRenderer"></a>tickRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickRenderer = $.jqplot.AxisTickRenderer</td></tr></table></blockquote><p>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link189 onMouseOver="ShowTip(event, 'tt5', 'link189')" onMouseOut="HideTip('tt5')">$.jqplot.AxisTickRenderer</a>.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.tickOptions"></a>tickOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickOptions = {}</td></tr></table></blockquote><p>Options that will be passed to the tickRenderer, see <a href="jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link190 onMouseOver="ShowTip(event, 'tt5', 'link190')" onMouseOut="HideTip('tt5')">$.jqplot.AxisTickRenderer</a> options.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.labelRenderer"></a>labelRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote><p>A class of a rendering engine for creating an axis label.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.labelOptions"></a>labelOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelOptions = {}</td></tr></table></blockquote><p>Options passed to the label renderer.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.label"></a>label</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote><p>Label for the axis</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.showLabel"></a>showLabel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote><p>true to show the axis label.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.min"></a>min</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min = null</td></tr></table></blockquote><p>minimum value of the axis (in data units, not pixels).</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.max"></a>max</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max = null</td></tr></table></blockquote><p>maximum value of the axis (in data units, not pixels).</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.autoscale"></a>autoscale</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscale = false</td></tr></table></blockquote><p>DEPRECATED the default scaling algorithm produces superior results.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.pad"></a>pad</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pad = 1.2</td></tr></table></blockquote><p>Padding to extend the range above and below the data bounds.&nbsp; The data range is multiplied by this factor to determine minimum and maximum axis bounds.&nbsp; A value of 0 will be interpreted to mean no padding, and pad will be set to 1.0.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.padMax"></a>padMax</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMax = null</td></tr></table></blockquote><p>Padding to extend the range above data bounds.&nbsp; The top of the data range is multiplied by this factor to determine maximum axis bounds.&nbsp; A value of 0 will be interpreted to mean no padding, and padMax will be set to 1.0.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.padMin"></a>padMin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMin = null</td></tr></table></blockquote><p>Padding to extend the range below data bounds.&nbsp; The bottom of the data range is multiplied by this factor to determine minimum axis bounds.&nbsp; A value of 0 will be interpreted to mean no padding, and padMin will be set to 1.0.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.ticks"></a>ticks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote><p>1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis.&nbsp; If no label is specified, the value is formatted into an appropriate label.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.numberTicks"></a>numberTicks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberTicks</td></tr></table></blockquote><p>Desired number of ticks.&nbsp; Default is to compute automatically.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.tickInterval"></a>tickInterval</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInterval</td></tr></table></blockquote><p>number of units between ticks.&nbsp; Mutually exclusive with numberTicks.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.renderer"></a>renderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LinearAxisRenderer</td></tr></table></blockquote><p>A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.rendererOptions"></a>rendererOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote><p>renderer specific options.&nbsp; See <a href="jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer" class=LClass id=link191 onMouseOver="ShowTip(event, 'tt151', 'link191')" onMouseOut="HideTip('tt151')">$.jqplot.LinearAxisRenderer</a> for options.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.showTicks"></a>showTicks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote><p>Wether to show the ticks (both marks and labels) or not.&nbsp; Will not override showMark and showLabel options if specified on the ticks themselves.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.showTickMarks"></a>showTickMarks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickMarks = true</td></tr></table></blockquote><p>Wether to show the tick marks (line crossing grid) or not.&nbsp; Overridden by showTicks and showMark option of tick itself.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.showMinorTicks"></a>showMinorTicks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMinorTicks = true</td></tr></table></blockquote><p>Wether or not to show minor ticks.&nbsp; This is renderer dependent.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.drawMajorGridlines"></a>drawMajorGridlines</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMajorGridlines = true</td></tr></table></blockquote><p>True to draw gridlines for major axis ticks.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.drawMinorGridlines"></a>drawMinorGridlines</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMinorGridlines = false</td></tr></table></blockquote><p>True to draw gridlines for minor ticks.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.drawMajorTickMarks"></a>drawMajorTickMarks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMajorTickMarks = true</td></tr></table></blockquote><p>True to draw tick marks for major axis ticks.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.drawMinorTickMarks"></a>drawMinorTickMarks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMinorTickMarks = true</td></tr></table></blockquote><p>True to draw tick marks for minor ticks.&nbsp; This is renderer dependent.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.useSeriesColor"></a>useSeriesColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useSeriesColor = false</td></tr></table></blockquote><p>Use the color of the first series associated with this axis for the tick marks and line bordering this axis.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.borderWidth"></a>borderWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = null</td></tr></table></blockquote><p>width of line stroked at the border of the axis.&nbsp; Defaults to the width of the grid boarder.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.borderColor"></a>borderColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote><p>color of the border adjacent to the axis.&nbsp; Defaults to grid border color.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.scaleToHiddenSeries"></a>scaleToHiddenSeries</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.scaleToHiddenSeries = false</td></tr></table></blockquote><p>True to include hidden series when computing axes bounds and scaling.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.syncTicks"></a>syncTicks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.syncTicks = null</td></tr></table></blockquote><p>true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up.&nbsp; This has an impact on autoscaling algorithm, however.&nbsp; In general, autoscaling an individual axis will work better if it does not have to sync ticks.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.tickSpacing"></a>tickSpacing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 75</td></tr></table></blockquote><p>Approximate pixel spacing between ticks on graph.&nbsp; Used during autoscaling.&nbsp; This number will be an upper bound, actual spacing will be less.</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="Legend"></a>Legend</h2><div class=CBody><p>Legend object.&nbsp; Cannot be instantiated directly, but created by the Plot oject.&nbsp; Legend properties can be set or overriden by the options passed in from the user.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#Legend.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.show" id=link192 onMouseOver="ShowTip(event, 'tt35', 'link192')" onMouseOut="HideTip('tt35')">show</a></td><td class=SDescription>Wether to display the legend on the graph.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.location" id=link193 onMouseOver="ShowTip(event, 'tt36', 'link193')" onMouseOut="HideTip('tt36')">location</a></td><td class=SDescription>Placement of the legend. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.labels" id=link194 onMouseOver="ShowTip(event, 'tt37', 'link194')" onMouseOut="HideTip('tt37')">labels</a></td><td class=SDescription>Array of labels to use. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.showLabels" id=link195 onMouseOver="ShowTip(event, 'tt38', 'link195')" onMouseOut="HideTip('tt38')">showLabels</a></td><td class=SDescription>true to show the label text on the legend.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.showSwatch" id=link196 onMouseOver="ShowTip(event, 'tt39', 'link196')" onMouseOut="HideTip('tt39')">showSwatch</a></td><td class=SDescription>true to show the color swatches on the legend.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.placement" id=link197 onMouseOver="ShowTip(event, 'tt40', 'link197')" onMouseOut="HideTip('tt40')">placement</a></td><td class=SDescription>&ldquo;insideGrid&rdquo; places legend inside the grid area of the plot. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.xoffset" id=link198 onMouseOver="ShowTip(event, 'tt41', 'link198')" onMouseOut="HideTip('tt41')">xoffset</a></td><td class=SDescription>DEPRECATED. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.yoffset" id=link199 onMouseOver="ShowTip(event, 'tt42', 'link199')" onMouseOut="HideTip('tt42')">yoffset</a></td><td class=SDescription>DEPRECATED. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.border" id=link200 onMouseOver="ShowTip(event, 'tt43', 'link200')" onMouseOut="HideTip('tt43')">border</a></td><td class=SDescription>css spec for the border around the legend box.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.background" id=link201 onMouseOver="ShowTip(event, 'tt44', 'link201')" onMouseOut="HideTip('tt44')">background</a></td><td class=SDescription>css spec for the background of the legend box.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.textColor" id=link202 onMouseOver="ShowTip(event, 'tt45', 'link202')" onMouseOut="HideTip('tt45')">textColor</a></td><td class=SDescription>css color spec for the legend text.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.fontFamily" id=link203 onMouseOver="ShowTip(event, 'tt46', 'link203')" onMouseOut="HideTip('tt46')">fontFamily</a></td><td class=SDescription>css font-family spec for the legend text.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.fontSize" id=link204 onMouseOver="ShowTip(event, 'tt47', 'link204')" onMouseOut="HideTip('tt47')">fontSize</a></td><td class=SDescription>css font-size spec for the legend text.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.rowSpacing" id=link205 onMouseOver="ShowTip(event, 'tt48', 'link205')" onMouseOut="HideTip('tt48')">rowSpacing</a></td><td class=SDescription>css padding-top spec for the rows in the legend.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.rendererOptions" id=link206 onMouseOver="ShowTip(event, 'tt49', 'link206')" onMouseOut="HideTip('tt49')">rendererOptions</a></td><td class=SDescription>renderer specific options passed to the renderer.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.predraw" >predraw</a></td><td class=SDescription>Wether to draw the legend before the series or not. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.marginTop" id=link207 onMouseOver="ShowTip(event, 'tt50', 'link207')" onMouseOut="HideTip('tt50')">marginTop</a></td><td class=SDescription>CSS margin for the legend DOM element. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.marginRight" id=link208 onMouseOver="ShowTip(event, 'tt51', 'link208')" onMouseOut="HideTip('tt51')">marginRight</a></td><td class=SDescription>CSS margin for the legend DOM element. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.marginBottom" id=link209 onMouseOver="ShowTip(event, 'tt52', 'link209')" onMouseOut="HideTip('tt52')">marginBottom</a></td><td class=SDescription>CSS margin for the legend DOM element. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.marginLeft" id=link210 onMouseOver="ShowTip(event, 'tt53', 'link210')" onMouseOut="HideTip('tt53')">marginLeft</a></td><td class=SDescription>CSS margin for the legend DOM element. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.escapeHtml" id=link211 onMouseOver="ShowTip(event, 'tt54', 'link211')" onMouseOut="HideTip('tt54')">escapeHtml</a></td><td class=SDescription>True to escape special characters with their html entity equivalents in legend text. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Legend.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote><p>Wether to display the legend on the graph.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.location"></a>location</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'ne'</td></tr></table></blockquote><p>Placement of the legend.&nbsp; one of the compass directions: nw, n, ne, e, se, s, sw, w</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.labels"></a>labels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote><p>Array of labels to use.&nbsp; By default the renderer will look for labels on the series.&nbsp; Labels specified in this array will override labels specified on the series.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.showLabels"></a>showLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote><p>true to show the label text on the legend.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.showSwatch"></a>showSwatch</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showSwatches = true</td></tr></table></blockquote><p>true to show the color swatches on the legend.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.placement"></a>placement</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.placement = &quot;insideGrid&quot;</td></tr></table></blockquote><p>&rdquo;insideGrid&rdquo; places legend inside the grid area of the plot.&nbsp; &ldquo;outsideGrid&rdquo; places the legend outside the grid but inside the plot container, shrinking the grid to accomodate the legend.&nbsp; &ldquo;inside&rdquo; synonym for &ldquo;insideGrid&rdquo;, &ldquo;outside&rdquo; places the legend ouside the grid area, but does not shrink the grid which can cause the legend to overflow the plot container.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.xoffset"></a>xoffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xoffset = 0</td></tr></table></blockquote><p>DEPRECATED.&nbsp; Set the margins on the legend using the marginTop, marginLeft, etc. properties or via CSS margin styling of the .jqplot-table-legend class.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.yoffset"></a>yoffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yoffset = 0</td></tr></table></blockquote><p>DEPRECATED.&nbsp; Set the margins on the legend using the marginTop, marginLeft, etc. properties or via CSS margin styling of the .jqplot-table-legend class.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.border"></a>border</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.border</td></tr></table></blockquote><p>css spec for the border around the legend box.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.background"></a>background</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background</td></tr></table></blockquote><p>css spec for the background of the legend box.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.textColor"></a>textColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote><p>css color spec for the legend text.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.fontFamily"></a>fontFamily</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote><p>css font-family spec for the legend text.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.fontSize"></a>fontSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote><p>css font-size spec for the legend text.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.rowSpacing"></a>rowSpacing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rowSpacing = '0.5em'</td></tr></table></blockquote><p>css padding-top spec for the rows in the legend.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.rendererOptions"></a>rendererOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote><p>renderer specific options passed to the renderer.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.predraw"></a>predraw</h3><div class=CBody><p>Wether to draw the legend before the series or not.&nbsp; Used with series specific legend renderers for pie, donut, mekko charts, etc.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.marginTop"></a>marginTop</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginTop = null</td></tr></table></blockquote><p>CSS margin for the legend DOM element.&nbsp; This will set an element CSS style for the margin which will override any style sheet setting.&nbsp; The default will be taken from the stylesheet.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.marginRight"></a>marginRight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginRight = null</td></tr></table></blockquote><p>CSS margin for the legend DOM element.&nbsp; This will set an element CSS style for the margin which will override any style sheet setting.&nbsp; The default will be taken from the stylesheet.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.marginBottom"></a>marginBottom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginBottom = null</td></tr></table></blockquote><p>CSS margin for the legend DOM element.&nbsp; This will set an element CSS style for the margin which will override any style sheet setting.&nbsp; The default will be taken from the stylesheet.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.marginLeft"></a>marginLeft</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginLeft = null</td></tr></table></blockquote><p>CSS margin for the legend DOM element.&nbsp; This will set an element CSS style for the margin which will override any style sheet setting.&nbsp; The default will be taken from the stylesheet.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.escapeHtml"></a>escapeHtml</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote><p>True to escape special characters with their html entity equivalents in legend text.&nbsp; &ldquo;&lt;&rdquo; becomes &amp;lt; and so on, so html tags are not rendered.</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="Title"></a>Title</h2><div class=CBody><p>Plot Title object.&nbsp; Cannot be instantiated directly, but created by the Plot oject.&nbsp; Title properties can be set or overriden by the options passed in from the user.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>text</td><td class=CDLDescription>text of the title.</td></tr></table><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#Title.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Title.text" id=link212 onMouseOver="ShowTip(event, 'tt55', 'link212')" onMouseOut="HideTip('tt55')">text</a></td><td class=SDescription>text of the title;</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Title.show" id=link213 onMouseOver="ShowTip(event, 'tt56', 'link213')" onMouseOut="HideTip('tt56')">show</a></td><td class=SDescription>wether or not to show the title</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Title.fontFamily" id=link214 onMouseOver="ShowTip(event, 'tt57', 'link214')" onMouseOut="HideTip('tt57')">fontFamily</a></td><td class=SDescription>css font-family spec for the text.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Title.fontSize" id=link215 onMouseOver="ShowTip(event, 'tt58', 'link215')" onMouseOut="HideTip('tt58')">fontSize</a></td><td class=SDescription>css font-size spec for the text.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Title.textAlign" id=link216 onMouseOver="ShowTip(event, 'tt59', 'link216')" onMouseOut="HideTip('tt59')">textAlign</a></td><td class=SDescription>css text-align spec for the text.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Title.textColor" id=link217 onMouseOver="ShowTip(event, 'tt60', 'link217')" onMouseOut="HideTip('tt60')">textColor</a></td><td class=SDescription>css color spec for the text.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Title.renderer" id=link218 onMouseOver="ShowTip(event, 'tt61', 'link218')" onMouseOut="HideTip('tt61')">renderer</a></td><td class=SDescription>A class for creating a DOM element for the title, see <a href="jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" class=LClass id=link219 onMouseOver="ShowTip(event, 'tt62', 'link219')" onMouseOut="HideTip('tt62')">$.jqplot.DivTitleRenderer</a>.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Title.rendererOptions" id=link220 onMouseOver="ShowTip(event, 'tt63', 'link220')" onMouseOut="HideTip('tt63')">rendererOptions</a></td><td class=SDescription>renderer specific options passed to the renderer.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Title.escapeHtml" id=link221 onMouseOver="ShowTip(event, 'tt64', 'link221')" onMouseOut="HideTip('tt64')">escapeHtml</a></td><td class=SDescription>True to escape special characters with their html entity equivalents in title text. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Title.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.text"></a>text</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.text = text</td></tr></table></blockquote><p>text of the title;</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to show the title</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.fontFamily"></a>fontFamily</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote><p>css font-family spec for the text.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.fontSize"></a>fontSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote><p>css font-size spec for the text.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.textAlign"></a>textAlign</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textAlign</td></tr></table></blockquote><p>css text-align spec for the text.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.textColor"></a>textColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote><p>css color spec for the text.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.renderer"></a>renderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.DivTitleRenderer</td></tr></table></blockquote><p>A class for creating a DOM element for the title, see <a href="jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" class=LClass id=link222 onMouseOver="ShowTip(event, 'tt62', 'link222')" onMouseOut="HideTip('tt62')">$.jqplot.DivTitleRenderer</a>.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.rendererOptions"></a>rendererOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote><p>renderer specific options passed to the renderer.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.escapeHtml"></a>escapeHtml</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote><p>True to escape special characters with their html entity equivalents in title text.&nbsp; &ldquo;&lt;&rdquo; becomes &amp;lt; and so on, so html tags are not rendered.</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="Series"></a>Series</h2><div class=CBody><p>An individual data series object.&nbsp; Cannot be instantiated directly, but created by the Plot oject.&nbsp; Series properties can be set or overriden by the options passed in from the user.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#Series.Properties" >Properties</a></td><td class=SDescription>Properties will be assigned from a series array at the top level of the options. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.show" id=link223 onMouseOver="ShowTip(event, 'tt65', 'link223')" onMouseOut="HideTip('tt65')">show</a></td><td class=SDescription>wether or not to draw the series.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.xaxis" id=link224 onMouseOver="ShowTip(event, 'tt66', 'link224')" onMouseOut="HideTip('tt66')">xaxis</a></td><td class=SDescription>which x axis to use with this series, either &lsquo;xaxis&rsquo; or &lsquo;x2axis&rsquo;.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.yaxis" id=link225 onMouseOver="ShowTip(event, 'tt67', 'link225')" onMouseOut="HideTip('tt67')">yaxis</a></td><td class=SDescription>which y axis to use with this series, either &lsquo;yaxis&rsquo; or &lsquo;y2axis&rsquo;.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.renderer" id=link226 onMouseOver="ShowTip(event, 'tt68', 'link226')" onMouseOut="HideTip('tt68')">renderer</a></td><td class=SDescription>A class of a renderer which will draw the series, see <a href="jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" class=LClass id=link227 onMouseOver="ShowTip(event, 'tt69', 'link227')" onMouseOut="HideTip('tt69')">$.jqplot.LineRenderer</a>.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.rendererOptions" id=link228 onMouseOver="ShowTip(event, 'tt70', 'link228')" onMouseOut="HideTip('tt70')">rendererOptions</a></td><td class=SDescription>Options to pass on to the renderer.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.label" id=link229 onMouseOver="ShowTip(event, 'tt71', 'link229')" onMouseOut="HideTip('tt71')">label</a></td><td class=SDescription>Line label to use in the legend.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.showLabel" id=link230 onMouseOver="ShowTip(event, 'tt72', 'link230')" onMouseOut="HideTip('tt72')">showLabel</a></td><td class=SDescription>true to show label for this series in the legend.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.color" id=link231 onMouseOver="ShowTip(event, 'tt73', 'link231')" onMouseOut="HideTip('tt73')">color</a></td><td class=SDescription>css color spec for the series</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.negativeColor" id=link232 onMouseOver="ShowTip(event, 'tt74', 'link232')" onMouseOut="HideTip('tt74')">negativeColor</a></td><td class=SDescription>css color spec used for filled (area) plots that are filled to zero and the &ldquo;useNegativeColors&rdquo; option is true.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.lineWidth" id=link233 onMouseOver="ShowTip(event, 'tt75', 'link233')" onMouseOut="HideTip('tt75')">lineWidth</a></td><td class=SDescription>width of the line in pixels. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.lineJoin" id=link234 onMouseOver="ShowTip(event, 'tt76', 'link234')" onMouseOut="HideTip('tt76')">lineJoin</a></td><td class=SDescription>Canvas lineJoin style between segments of series.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.lineCap" id=link235 onMouseOver="ShowTip(event, 'tt77', 'link235')" onMouseOut="HideTip('tt77')">lineCap</a></td><td class=SDescription>Canvas lineCap style at ends of line.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.linePattern" id=link236 onMouseOver="ShowTip(event, 'tt78', 'link236')" onMouseOut="HideTip('tt78')">linePattern</a></td><td class=SDescription>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.shadowAngle" id=link237 onMouseOver="ShowTip(event, 'tt79', 'link237')" onMouseOut="HideTip('tt79')">shadowAngle</a></td><td class=SDescription>Shadow angle in degrees</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.shadowOffset" id=link238 onMouseOver="ShowTip(event, 'tt80', 'link238')" onMouseOut="HideTip('tt80')">shadowOffset</a></td><td class=SDescription>Shadow offset from line in pixels</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.shadowDepth" id=link239 onMouseOver="ShowTip(event, 'tt81', 'link239')" onMouseOut="HideTip('tt81')">shadowDepth</a></td><td class=SDescription>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.shadowAlpha" id=link240 onMouseOver="ShowTip(event, 'tt82', 'link240')" onMouseOut="HideTip('tt82')">shadowAlpha</a></td><td class=SDescription>Alpha channel transparency of shadow. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.breakOnNull" id=link241 onMouseOver="ShowTip(event, 'tt83', 'link241')" onMouseOut="HideTip('tt83')">breakOnNull</a></td><td class=SDescription>Wether line segments should be be broken at null value. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.markerRenderer" id=link242 onMouseOver="ShowTip(event, 'tt84', 'link242')" onMouseOut="HideTip('tt84')">markerRenderer</a></td><td class=SDescription>A class of a renderer which will draw marker (e.g. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.markerOptions" id=link243 onMouseOver="ShowTip(event, 'tt85', 'link243')" onMouseOut="HideTip('tt85')">markerOptions</a></td><td class=SDescription>renderer specific options to pass to the markerRenderer, see <a href="jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" class=LClass id=link244 onMouseOver="ShowTip(event, 'tt86', 'link244')" onMouseOut="HideTip('tt86')">$.jqplot.MarkerRenderer</a>.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.showLine" id=link245 onMouseOver="ShowTip(event, 'tt87', 'link245')" onMouseOut="HideTip('tt87')">showLine</a></td><td class=SDescription>wether to actually draw the line or not. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.showMarker" id=link246 onMouseOver="ShowTip(event, 'tt88', 'link246')" onMouseOut="HideTip('tt88')">showMarker</a></td><td class=SDescription>wether or not to show the markers at the data points.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.index" id=link247 onMouseOver="ShowTip(event, 'tt89', 'link247')" onMouseOut="HideTip('tt89')">index</a></td><td class=SDescription>0 based index of this series in the plot series array.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.fill" id=link248 onMouseOver="ShowTip(event, 'tt90', 'link248')" onMouseOut="HideTip('tt90')">fill</a></td><td class=SDescription>true or false, wether to fill under lines or in bars. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.fillColor" id=link249 onMouseOver="ShowTip(event, 'tt91', 'link249')" onMouseOut="HideTip('tt91')">fillColor</a></td><td class=SDescription>CSS color spec to use for fill under line. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.fillAlpha" id=link250 onMouseOver="ShowTip(event, 'tt92', 'link250')" onMouseOut="HideTip('tt92')">fillAlpha</a></td><td class=SDescription>Alpha transparency to apply to the fill under the line. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.fillAndStroke" id=link251 onMouseOver="ShowTip(event, 'tt93', 'link251')" onMouseOut="HideTip('tt93')">fillAndStroke</a></td><td class=SDescription>If true will stroke the line (with color this.color) as well as fill under it. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.disableStack" id=link252 onMouseOver="ShowTip(event, 'tt94', 'link252')" onMouseOut="HideTip('tt94')">disableStack</a></td><td class=SDescription>true to not stack this series with other series in the plot. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.neighborThreshold" id=link253 onMouseOver="ShowTip(event, 'tt95', 'link253')" onMouseOut="HideTip('tt95')">neighborThreshold</a></td><td class=SDescription>how close or far (in pixels) the cursor must be from a point marker to detect the point.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.fillToZero" id=link254 onMouseOver="ShowTip(event, 'tt96', 'link254')" onMouseOut="HideTip('tt96')">fillToZero</a></td><td class=SDescription>true will force bar and filled series to fill toward zero on the fill Axis.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.fillToValue" id=link255 onMouseOver="ShowTip(event, 'tt97', 'link255')" onMouseOut="HideTip('tt97')">fillToValue</a></td><td class=SDescription>fill a filled series to this value on the fill axis. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.fillAxis" id=link256 onMouseOver="ShowTip(event, 'tt98', 'link256')" onMouseOut="HideTip('tt98')">fillAxis</a></td><td class=SDescription>Either &lsquo;x&rsquo; or &lsquo;y&rsquo;. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.useNegativeColors" id=link257 onMouseOver="ShowTip(event, 'tt99', 'link257')" onMouseOut="HideTip('tt99')">useNegativeColors</a></td><td class=SDescription>true to color negative values differently in filled and bar charts.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Series.Properties"></a>Properties</h3><div class=CBody><p>Properties will be assigned from a series array at the top level of the options.&nbsp; If you had two series and wanted to change the color and line width of the first and set the second to use the secondary y axis with no shadow and supply custom labels for each:</p><blockquote><pre>{
+ series:[
+ {color: '#ff4466', lineWidth: 5, label:'good line'},
+ {yaxis: 'y2axis', shadow: false, label:'bad line'}
+ ]
+}</pre></blockquote></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to draw the series.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.xaxis"></a>xaxis</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xaxis = 'xaxis'</td></tr></table></blockquote><p>which x axis to use with this series, either &lsquo;xaxis&rsquo; or &lsquo;x2axis&rsquo;.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.yaxis"></a>yaxis</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yaxis = 'yaxis'</td></tr></table></blockquote><p>which y axis to use with this series, either &lsquo;yaxis&rsquo; or &lsquo;y2axis&rsquo;.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.renderer"></a>renderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LineRenderer</td></tr></table></blockquote><p>A class of a renderer which will draw the series, see <a href="jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" class=LClass id=link258 onMouseOver="ShowTip(event, 'tt69', 'link258')" onMouseOut="HideTip('tt69')">$.jqplot.LineRenderer</a>.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.rendererOptions"></a>rendererOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote><p>Options to pass on to the renderer.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.label"></a>label</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote><p>Line label to use in the legend.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.showLabel"></a>showLabel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote><p>true to show label for this series in the legend.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.color"></a>color</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote><p>css color spec for the series</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.negativeColor"></a>negativeColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.negativeColor</td></tr></table></blockquote><p>css color spec used for filled (area) plots that are filled to zero and the &ldquo;useNegativeColors&rdquo; option is true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.lineWidth"></a>lineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2.5</td></tr></table></blockquote><p>width of the line in pixels.&nbsp; May have different meanings depending on renderer.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.lineJoin"></a>lineJoin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'round'</td></tr></table></blockquote><p>Canvas lineJoin style between segments of series.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.lineCap"></a>lineCap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote><p>Canvas lineCap style at ends of line.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.linePattern"></a>linePattern</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.linePattern = 'solid'</td></tr></table></blockquote><p>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo; characters such as &lsquo;.-.&rsquo; or a numerical array like [draw, skip, draw, skip, ...] such as [1, 10] to draw a dotted line, [1, 10, 20, 10] to draw a dot-dash line, and so on.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.shadowAngle"></a>shadowAngle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote><p>Shadow angle in degrees</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.25</td></tr></table></blockquote><p>Shadow offset from line in pixels</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote><p>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.1'</td></tr></table></blockquote><p>Alpha channel transparency of shadow.&nbsp; 0 = transparent.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.breakOnNull"></a>breakOnNull</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakOnNull = false</td></tr></table></blockquote><p>Wether line segments should be be broken at null value.&nbsp; False will join point on either side of line.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.markerRenderer"></a>markerRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = $.jqplot.MarkerRenderer</td></tr></table></blockquote><p>A class of a renderer which will draw marker (e.g. circle, square, ...) at the data points, see <a href="jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" class=LClass id=link259 onMouseOver="ShowTip(event, 'tt86', 'link259')" onMouseOut="HideTip('tt86')">$.jqplot.MarkerRenderer</a>.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.markerOptions"></a>markerOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerOptions = {}</td></tr></table></blockquote><p>renderer specific options to pass to the markerRenderer, see <a href="jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" class=LClass id=link260 onMouseOver="ShowTip(event, 'tt86', 'link260')" onMouseOut="HideTip('tt86')">$.jqplot.MarkerRenderer</a>.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.showLine"></a>showLine</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLine = true</td></tr></table></blockquote><p>wether to actually draw the line or not.&nbsp; Series will still be renderered, even if no line is drawn.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.showMarker"></a>showMarker</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote><p>wether or not to show the markers at the data points.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.index"></a>index</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.index</td></tr></table></blockquote><p>0 based index of this series in the plot series array.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote><p>true or false, wether to fill under lines or in bars.&nbsp; May not be implemented in all renderers.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.fillColor"></a>fillColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillColor</td></tr></table></blockquote><p>CSS color spec to use for fill under line.&nbsp; Defaults to line color.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.fillAlpha"></a>fillAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAlpha</td></tr></table></blockquote><p>Alpha transparency to apply to the fill under the line.&nbsp; Use this to adjust alpha separate from fill color.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.fillAndStroke"></a>fillAndStroke</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAndStroke = false</td></tr></table></blockquote><p>If true will stroke the line (with color this.color) as well as fill under it.&nbsp; Applies only when fill is true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.disableStack"></a>disableStack</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableStack = false</td></tr></table></blockquote><p>true to not stack this series with other series in the plot.&nbsp; To render properly, non-stacked series must come after any stacked series in the plot&rsquo;s data series array.&nbsp; So, the plot&rsquo;s data series array would look like:</p><blockquote><pre>[stackedSeries1, stackedSeries2, ..., nonStackedSeries1, nonStackedSeries2, ...]</pre></blockquote><p>disableStack will put a gap in the stacking order of series, and subsequent stacked series will not fill down through the non-stacked series and will most likely not stack properly on top of the non-stacked series.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.neighborThreshold"></a>neighborThreshold</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.neighborThreshold = 4</td></tr></table></blockquote><p>how close or far (in pixels) the cursor must be from a point marker to detect the point.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.fillToZero"></a>fillToZero</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToZero = false</td></tr></table></blockquote><p>true will force bar and filled series to fill toward zero on the fill Axis.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.fillToValue"></a>fillToValue</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToValue = 0</td></tr></table></blockquote><p>fill a filled series to this value on the fill axis.&nbsp; Works in conjunction with fillToZero, so that must be true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.fillAxis"></a>fillAxis</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAxis = 'y'</td></tr></table></blockquote><p>Either &lsquo;x&rsquo; or &lsquo;y&rsquo;.&nbsp; Which axis to fill the line toward if fillToZero is true.&nbsp; &lsquo;y&rsquo; means fill up/down to 0 on the y axis for this series.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.useNegativeColors"></a>useNegativeColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useNegativeColors = true</td></tr></table></blockquote><p>true to color negative values differently in filled and bar charts.</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="Grid"></a>Grid</h2><div class=CBody><p>Object representing the grid on which the plot is drawn.&nbsp; The grid in this context is the area bounded by the axes, the area which will contain the series.&nbsp; Note, the series are drawn on their own canvas.&nbsp; The Grid object cannot be instantiated directly, but is created by the Plot oject.&nbsp; Grid properties can be set or overriden by the options passed in from the user.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#Grid.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Grid.drawGridlines" id=link261 onMouseOver="ShowTip(event, 'tt100', 'link261')" onMouseOut="HideTip('tt100')">drawGridlines</a></td><td class=SDescription>wether to draw the gridlines on the plot.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Grid.gridLineColor" id=link262 onMouseOver="ShowTip(event, 'tt101', 'link262')" onMouseOut="HideTip('tt101')">gridLineColor</a></td><td class=SDescription>color of the grid lines.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Grid.gridLineWidth" id=link263 onMouseOver="ShowTip(event, 'tt102', 'link263')" onMouseOut="HideTip('tt102')">gridLineWidth</a></td><td class=SDescription>width of the grid lines.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Grid.background" id=link264 onMouseOver="ShowTip(event, 'tt103', 'link264')" onMouseOut="HideTip('tt103')">background</a></td><td class=SDescription>css spec for the background color.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Grid.borderColor" id=link265 onMouseOver="ShowTip(event, 'tt104', 'link265')" onMouseOut="HideTip('tt104')">borderColor</a></td><td class=SDescription>css spec for the color of the grid border.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Grid.borderWidth" id=link266 onMouseOver="ShowTip(event, 'tt105', 'link266')" onMouseOut="HideTip('tt105')">borderWidth</a></td><td class=SDescription>width of the border in pixels.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Grid.drawBorder" id=link267 onMouseOver="ShowTip(event, 'tt106', 'link267')" onMouseOut="HideTip('tt106')">drawBorder</a></td><td class=SDescription>True to draw border around grid.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Grid.shadow" id=link268 onMouseOver="ShowTip(event, 'tt107', 'link268')" onMouseOut="HideTip('tt107')">shadow</a></td><td class=SDescription>wether to show a shadow behind the grid.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Grid.shadowAngle" id=link269 onMouseOver="ShowTip(event, 'tt108', 'link269')" onMouseOut="HideTip('tt108')">shadowAngle</a></td><td class=SDescription>shadow angle in degrees</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Grid.shadowOffset" id=link270 onMouseOver="ShowTip(event, 'tt109', 'link270')" onMouseOut="HideTip('tt109')">shadowOffset</a></td><td class=SDescription>Offset of each shadow stroke from the border in pixels</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Grid.shadowWidth" id=link271 onMouseOver="ShowTip(event, 'tt110', 'link271')" onMouseOut="HideTip('tt110')">shadowWidth</a></td><td class=SDescription>width of the stoke for the shadow</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Grid.shadowDepth" id=link272 onMouseOver="ShowTip(event, 'tt111', 'link272')" onMouseOut="HideTip('tt111')">shadowDepth</a></td><td class=SDescription>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Grid.shadowColor" id=link273 onMouseOver="ShowTip(event, 'tt112', 'link273')" onMouseOut="HideTip('tt112')">shadowColor</a></td><td class=SDescription>an optional css color spec for the shadow in &lsquo;rgba(n, n, n, n)&rsquo; form</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Grid.shadowAlpha" id=link274 onMouseOver="ShowTip(event, 'tt113', 'link274')" onMouseOut="HideTip('tt113')">shadowAlpha</a></td><td class=SDescription>Alpha channel transparency of shadow. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Grid.renderer" id=link275 onMouseOver="ShowTip(event, 'tt114', 'link275')" onMouseOut="HideTip('tt114')">renderer</a></td><td class=SDescription>Instance of a renderer which will actually render the grid, see <a href="jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" class=LClass id=link276 onMouseOver="ShowTip(event, 'tt115', 'link276')" onMouseOut="HideTip('tt115')">$.jqplot.CanvasGridRenderer</a>.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Grid.rendererOptions" id=link277 onMouseOver="ShowTip(event, 'tt116', 'link277')" onMouseOut="HideTip('tt116')">rendererOptions</a></td><td class=SDescription>Options to pass on to the renderer, see <a href="jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" class=LClass id=link278 onMouseOver="ShowTip(event, 'tt115', 'link278')" onMouseOut="HideTip('tt115')">$.jqplot.CanvasGridRenderer</a>.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Grid.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.drawGridlines"></a>drawGridlines</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawGridlines = true</td></tr></table></blockquote><p>wether to draw the gridlines on the plot.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.gridLineColor"></a>gridLineColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineColor = '#cccccc'</td></tr></table></blockquote><p>color of the grid lines.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.gridLineWidth"></a>gridLineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineWidth = 1.0</td></tr></table></blockquote><p>width of the grid lines.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.background"></a>background</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = '#fffdf6'</td></tr></table></blockquote><p>css spec for the background color.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.borderColor"></a>borderColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = '#999999'</td></tr></table></blockquote><p>css spec for the color of the grid border.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.borderWidth"></a>borderWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = 2.0</td></tr></table></blockquote><p>width of the border in pixels.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.drawBorder"></a>drawBorder</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBorder = true</td></tr></table></blockquote><p>True to draw border around grid.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.shadow"></a>shadow</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote><p>wether to show a shadow behind the grid.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.shadowAngle"></a>shadowAngle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote><p>shadow angle in degrees</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.5</td></tr></table></blockquote><p>Offset of each shadow stroke from the border in pixels</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.shadowWidth"></a>shadowWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowWidth = 3</td></tr></table></blockquote><p>width of the stoke for the shadow</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote><p>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.shadowColor"></a>shadowColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowColor = null</td></tr></table></blockquote><p>an optional css color spec for the shadow in &lsquo;rgba(n, n, n, n)&rsquo; form</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote><p>Alpha channel transparency of shadow.&nbsp; 0 = transparent.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.renderer"></a>renderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.CanvasGridRenderer</td></tr></table></blockquote><p>Instance of a renderer which will actually render the grid, see <a href="jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" class=LClass id=link279 onMouseOver="ShowTip(event, 'tt115', 'link279')" onMouseOut="HideTip('tt115')">$.jqplot.CanvasGridRenderer</a>.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.rendererOptions"></a>rendererOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote><p>Options to pass on to the renderer, see <a href="jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" class=LClass id=link280 onMouseOver="ShowTip(event, 'tt115', 'link280')" onMouseOut="HideTip('tt115')">$.jqplot.CanvasGridRenderer</a>.</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="jqPlot"></a>jqPlot</h2><div class=CBody><p>Plot object returned by call to $.jqplot.&nbsp; Handles parsing user options, creating sub objects (Axes, legend, title, series) and rendering the plot.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#jqPlot.Properties" >Properties</a></td><td class=SDescription>These properties are specified at the top of the options object like so:</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.animate" id=link281 onMouseOver="ShowTip(event, 'tt117', 'link281')" onMouseOut="HideTip('tt117')">animate</a></td><td class=SDescription>True to animate the series on initial plot draw (renderer dependent). </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.animateReplot" id=link282 onMouseOver="ShowTip(event, 'tt118', 'link282')" onMouseOut="HideTip('tt118')">animateReplot</a></td><td class=SDescription>True to animate series after a call to the replot() method. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.axes" id=link283 onMouseOver="ShowTip(event, 'tt119', 'link283')" onMouseOut="HideTip('tt119')">axes</a></td><td class=SDescription>up to 4 axes are supported, each with it&rsquo;s own options, See <a href="#Axis" class=LClass id=link284 onMouseOver="ShowTip(event, 'tt120', 'link284')" onMouseOut="HideTip('tt120')">Axis</a> for axis specific options.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.data" id=link285 onMouseOver="ShowTip(event, 'tt121', 'link285')" onMouseOut="HideTip('tt121')">data</a></td><td class=SDescription>user&rsquo;s data. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.dataRenderer" id=link286 onMouseOver="ShowTip(event, 'tt122', 'link286')" onMouseOut="HideTip('tt122')">dataRenderer</a></td><td class=SDescription>A callable which can be used to preprocess data passed into the plot. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.dataRendererOptions" id=link287 onMouseOver="ShowTip(event, 'tt123', 'link287')" onMouseOut="HideTip('tt123')">dataRendererOptions</a></td><td class=SDescription>Options that will be passed to the dataRenderer. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.axesDefaults" >axesDefaults</a></td><td class=SDescription>default options that will be applied to all axes. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.seriesDefaults" id=link288 onMouseOver="ShowTip(event, 'tt124', 'link288')" onMouseOut="HideTip('tt124')">seriesDefaults</a></td><td class=SDescription>default options that will be applied to all series. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.defaultAxisStart" id=link289 onMouseOver="ShowTip(event, 'tt125', 'link289')" onMouseOut="HideTip('tt125')">defaultAxisStart</a></td><td class=SDescription>1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.fillBetween" id=link290 onMouseOver="ShowTip(event, 'tt126', 'link290')" onMouseOut="HideTip('tt126')">fillBetween</a></td><td class=SDescription>Fill between 2 line series in a plot. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.fontSize" id=link291 onMouseOver="ShowTip(event, 'tt127', 'link291')" onMouseOut="HideTip('tt127')">fontSize</a></td><td class=SDescription>css spec for the font-size attribute. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.grid" id=link292 onMouseOver="ShowTip(event, 'tt128', 'link292')" onMouseOut="HideTip('tt128')">grid</a></td><td class=SDescription>See <a href="#Grid" class=LClass id=link293 onMouseOver="ShowTip(event, 'tt129', 'link293')" onMouseOut="HideTip('tt129')">Grid</a> for grid specific options.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.legend" id=link294 onMouseOver="ShowTip(event, 'tt130', 'link294')" onMouseOut="HideTip('tt130')">legend</a></td><td class=SDescription>see &lt;$.jqplot.TableLegendRenderer&gt;</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.noDataIndicator" >noDataIndicator</a></td><td class=SDescription>Options to set up a mock plot with a data loading indicator if no data is specified.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.series" id=link295 onMouseOver="ShowTip(event, 'tt131', 'link295')" onMouseOut="HideTip('tt131')">series</a></td><td class=SDescription>Array of series object options. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.seriesColors" id=link296 onMouseOver="ShowTip(event, 'tt132', 'link296')" onMouseOut="HideTip('tt132')">seriesColors</a></td><td class=SDescription>Ann array of CSS color specifications that will be applied, in order, to the series in the plot. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.sortData" id=link297 onMouseOver="ShowTip(event, 'tt133', 'link297')" onMouseOut="HideTip('tt133')">sortData</a></td><td class=SDescription>false to not sort the data passed in by the user. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.stackSeries" id=link298 onMouseOver="ShowTip(event, 'tt134', 'link298')" onMouseOut="HideTip('tt134')">stackSeries</a></td><td class=SDescription>true or false, creates a stack or &ldquo;mountain&rdquo; plot. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.title" id=link299 onMouseOver="ShowTip(event, 'tt135', 'link299')" onMouseOut="HideTip('tt135')">title</a></td><td class=SDescription>Title object. </td></tr><tr class="SGroup"><td class=SEntry><a href="#jqPlot.methods" >methods</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.init" id=link300 onMouseOver="ShowTip(event, 'tt136', 'link300')" onMouseOut="HideTip('tt136')">init</a></td><td class=SDescription>sets the plot target, checks data and applies user options to plot.</td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#jqPlot.resetAxesScale" id=link301 onMouseOver="ShowTip(event, 'tt137', 'link301')" onMouseOut="HideTip('tt137')">resetAxesScale</a></td><td class=SDescription>Reset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.</td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.reInitialize" id=link302 onMouseOver="ShowTip(event, 'tt138', 'link302')" onMouseOut="HideTip('tt138')">reInitialize</a></td><td class=SDescription>reinitialize plot for replotting. </td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#jqPlot.quickInit" id=link303 onMouseOver="ShowTip(event, 'tt139', 'link303')" onMouseOut="HideTip('tt139')">quickInit</a></td><td class=SDescription>Quick reinitialization plot for replotting. </td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.destroy" id=link304 onMouseOver="ShowTip(event, 'tt140', 'link304')" onMouseOut="HideTip('tt140')">destroy</a></td><td class=SDescription>Releases all resources occupied by the plot</td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#jqPlot.replot" id=link305 onMouseOver="ShowTip(event, 'tt141', 'link305')" onMouseOut="HideTip('tt141')">replot</a></td><td class=SDescription>Does a reinitialization of the plot followed by a redraw. </td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.redraw" id=link306 onMouseOver="ShowTip(event, 'tt142', 'link306')" onMouseOut="HideTip('tt142')">redraw</a></td><td class=SDescription>Empties the plot target div and redraws the plot. </td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#jqPlot.draw" id=link307 onMouseOver="ShowTip(event, 'tt143', 'link307')" onMouseOut="HideTip('tt143')">draw</a></td><td class=SDescription>Draws all elements of the plot into the container. </td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.drawSeries" id=link308 onMouseOver="ShowTip(event, 'tt144', 'link308')" onMouseOut="HideTip('tt144')">drawSeries</a></td><td class=SDescription>Redraws all or just one series on the plot. </td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#jqPlot.moveSeriesToFront" id=link309 onMouseOver="ShowTip(event, 'tt145', 'link309')" onMouseOut="HideTip('tt145')">moveSeriesToFront</a></td><td class=SDescription>This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases. </td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.moveSeriesToBack" id=link310 onMouseOver="ShowTip(event, 'tt146', 'link310')" onMouseOut="HideTip('tt146')">moveSeriesToBack</a></td><td class=SDescription>This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.</td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#jqPlot.restorePreviousSeriesOrder" id=link311 onMouseOver="ShowTip(event, 'tt147', 'link311')" onMouseOut="HideTip('tt147')">restorePreviousSeriesOrder</a></td><td class=SDescription>This method requires jQuery 1.4+ Restore the series canvas order to its previous state. </td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.restoreOriginalSeriesOrder" id=link312 onMouseOver="ShowTip(event, 'tt148', 'link312')" onMouseOut="HideTip('tt148')">restoreOriginalSeriesOrder</a></td><td class=SDescription>This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="jqPlot.Properties"></a>Properties</h3><div class=CBody><p>These properties are specified at the top of the options object like so:</p><blockquote><pre>{
+ axesDefaults:{min:0},
+ series:[{color:'#6633dd'}],
+ title: 'A Plot'
+}</pre></blockquote></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.animate"></a>animate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.animate = false</td></tr></table></blockquote><p>True to animate the series on initial plot draw (renderer dependent).&nbsp; Actual animation functionality must be supported in the renderer.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.animateReplot"></a>animateReplot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.animateReplot = false</td></tr></table></blockquote><p>True to animate series after a call to the replot() method.&nbsp; Use with caution!&nbsp; Replots can happen very frequently under certain circumstances (e.g. resizing, dragging points) and animation in these situations can cause problems.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.axes"></a>axes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis'), yMidAxis: new Axis('yMidAxis')}</td></tr></table></blockquote><p>up to 4 axes are supported, each with it&rsquo;s own options, See <a href="#Axis" class=LClass id=link313 onMouseOver="ShowTip(event, 'tt120', 'link313')" onMouseOut="HideTip('tt120')">Axis</a> for axis specific options.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.data"></a>data</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.data = []</td></tr></table></blockquote><p>user&rsquo;s data.&nbsp; Data should <b>NOT</b> be specified in the options object, but be passed in as the second argument to the $.jqplot() function.&nbsp; The data property is described here soley for reference.&nbsp; The data should be in the form of an array of 2D or 1D arrays like</p><blockquote><pre>[ [[x1, y1], [x2, y2],...], [y1, y2, ...] ].</pre></blockquote></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.dataRenderer"></a>dataRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataRenderer</td></tr></table></blockquote><p>A callable which can be used to preprocess data passed into the plot.&nbsp; Will be called with 2 arguments, the plot data and a reference to the plot.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.dataRendererOptions"></a>dataRendererOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataRendererOptions</td></tr></table></blockquote><p>Options that will be passed to the dataRenderer.&nbsp; Can be of any type.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.axesDefaults"></a>axesDefaults</h3><div class=CBody><p>default options that will be applied to all axes. see <a href="#Axis" class=LClass id=link314 onMouseOver="ShowTip(event, 'tt120', 'link314')" onMouseOut="HideTip('tt120')">Axis</a> for axes options.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.seriesDefaults"></a>seriesDefaults</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>seriesDefaults: {}, series:[] }</td></tr></table></blockquote><p>default options that will be applied to all series. see <a href="#Series" class=LClass id=link315 onMouseOver="ShowTip(event, 'tt152', 'link315')" onMouseOut="HideTip('tt152')">Series</a> for series options.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.defaultAxisStart"></a>defaultAxisStart</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.defaultAxisStart = 1</td></tr></table></blockquote><p>1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot.&nbsp; This is the default starting value for the missing x or y value.&nbsp; The added data will be a monotonically increasing series (e.g.&nbsp; [1, 2, 3, ...]) starting at this value.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.fillBetween"></a>fillBetween</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }</td></tr></table></blockquote><p>Fill between 2 line series in a plot.&nbsp; Options object: { series1: first index (0 based) of series in fill series2: second index (0 based) of series in fill color: color of fill [default fillColor of series1] baseSeries: fill will be drawn below this series (0 based index) fill: false to turn off fill [default true].&nbsp; }</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.fontSize"></a>fontSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote><p>css spec for the font-size attribute.&nbsp; Default for the entire plot.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.grid"></a>grid</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.grid = new Grid()</td></tr></table></blockquote><p>See <a href="#Grid" class=LClass id=link316 onMouseOver="ShowTip(event, 'tt129', 'link316')" onMouseOut="HideTip('tt129')">Grid</a> for grid specific options.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.legend"></a>legend</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.legend = new Legend()</td></tr></table></blockquote><p>see &lt;$.jqplot.TableLegendRenderer&gt;</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.noDataIndicator"></a>noDataIndicator</h3><div class=CBody><p>Options to set up a mock plot with a data loading indicator if no data is specified.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.series"></a>series</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.series = []</td></tr></table></blockquote><p>Array of series object options. see <a href="#Series" class=LClass id=link317 onMouseOver="ShowTip(event, 'tt152', 'link317')" onMouseOut="HideTip('tt152')">Series</a> for series specific options.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.seriesColors"></a>seriesColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesColors = $.jqplot.config.defaultColors</td></tr></table></blockquote><p>Ann array of CSS color specifications that will be applied, in order, to the series in the plot.&nbsp; Colors will wrap around so, if their are more series than colors, colors will be reused starting at the beginning.&nbsp; For pie charts, this specifies the colors of the slices.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.sortData"></a>sortData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortData = true</td></tr></table></blockquote><p>false to not sort the data passed in by the user.&nbsp; Many bar, stakced and other graphs as well as many plugins depend on having sorted data.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.stackSeries"></a>stackSeries</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackSeries = false</td></tr></table></blockquote><p>true or false, creates a stack or &ldquo;mountain&rdquo; plot.&nbsp; Not all series renderers may implement this option.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.title"></a>title</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.title = new Title()</td></tr></table></blockquote><p>Title object.&nbsp; See <a href="#Title" class=LClass id=link318 onMouseOver="ShowTip(event, 'tt153', 'link318')" onMouseOut="HideTip('tt153')">Title</a> for specific options.&nbsp; As a shortcut, you can specify the title option as just a string like: title: &lsquo;My Plot&rsquo; and this will create a new title object with the specified text.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="jqPlot.methods"></a>methods</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.init"></a>init</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.init = function(</td><td class=PParameter nowrap>target,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>sets the plot target, checks data and applies user options to plot.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.resetAxesScale"></a>resetAxesScale</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.resetAxesScale = function(</td><td class=PParameter nowrap>axes,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Reset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>axes</td><td class=CDLDescription>Boolean to reset or not reset all axes or an array or object of axis names to reset.</td></tr></table></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.reInitialize"></a>reInitialize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.reInitialize = function (</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>opts</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>reinitialize plot for replotting. not called directly.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.quickInit"></a>quickInit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.quickInit = function ()</td></tr></table></blockquote><p>Quick reinitialization plot for replotting.&nbsp; Does not parse options ore recreate axes and series. not called directly.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.destroy = function()</td></tr></table></blockquote><p>Releases all resources occupied by the plot</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.replot"></a>replot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.replot = function(</td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Does a reinitialization of the plot followed by a redraw.&nbsp; Method could be used to interactively change plot characteristics and then replot.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>Options used for replotting.</td></tr></table><h4 class=CHeading>Properties</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>clear</td><td class=CDLDescription>false to not clear (empty) the plot container before replotting (default: true).</td></tr><tr><td class=CDLEntry>resetAxes</td><td class=CDLDescription>true to reset all axes min, max, numberTicks and tickInterval setting so axes will rescale themselves. optionally pass in list of axes to reset (e.g.&nbsp; [&lsquo;xaxis&rsquo;, &lsquo;y2axis&rsquo;]) (default: false).</td></tr></table></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.redraw"></a>redraw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.redraw = function(</td><td class=PParameter nowrap>clear</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Empties the plot target div and redraws the plot.&nbsp; This enables plot data and properties to be changed and then to comletely clear the plot and redraw. redraw <b>will not</b> reinitialize any plot elements.&nbsp; That is, axes will not be autoscaled and defaults will not be reapplied to any plot elements.&nbsp; redraw is used primarily with zooming.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>clear</td><td class=CDLDescription>false to not clear (empty) the plot container before redrawing (default: true).</td></tr></table></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.draw = function()</td></tr></table></blockquote><p>Draws all elements of the plot into the container.&nbsp; Does not clear the container before drawing.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.drawSeries"></a>drawSeries</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.drawSeries = function(</td><td class=PParameter nowrap>options,</td></tr><tr><td></td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Redraws all or just one series on the plot.&nbsp; No axis scaling is performed and no other elements on the plot are redrawn. options is an options object to pass on to the series renderers.&nbsp; It can be an empty object {}.&nbsp; idx is the series index to redraw if only one series is to be redrawn.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.moveSeriesToFront"></a>moveSeriesToFront</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToFront = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases.&nbsp; This effectively &ldquo;draws&rdquo; the specified series on top of all other series, although it is performed through DOM manipulation, no redrawing is performed.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>idx</td><td class=CDLDescription>0 based index of the series to move.&nbsp; This will be the index of the series as it was first passed into the jqplot function.</td></tr></table></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.moveSeriesToBack"></a>moveSeriesToBack</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToBack = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>idx</td><td class=CDLDescription>0 based index of the series to move.&nbsp; This will be the index of the series as it was first passed into the jqplot function.</td></tr></table></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.restorePreviousSeriesOrder"></a>restorePreviousSeriesOrder</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restorePreviousSeriesOrder = function ()</td></tr></table></blockquote><p>This method requires jQuery 1.4+ Restore the series canvas order to its previous state.&nbsp; Useful to put a series back where it belongs after moving it to the front.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.restoreOriginalSeriesOrder"></a>restoreOriginalSeriesOrder</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restoreOriginalSeriesOrder = function ()</td></tr></table></blockquote><p>This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile id=MSelected>jqPlot Charts</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([4, 2], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CSection><b>This document is out of date. </div></div><div class=CToolTip id="tt2"><div class=CSection>This document will help you understand how jqPlot&rsquo;s options relate to the API documentation and the jqPlot object itself. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote>Wether to display the axis on the graph.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickRenderer = $.jqplot.AxisTickRenderer</td></tr></table></blockquote>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.</div></div><div class=CToolTip id="tt5"><div class=CClass>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickOptions = {}</td></tr></table></blockquote>Options that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote>A class of a rendering engine for creating an axis label.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelOptions = {}</td></tr></table></blockquote>Options passed to the label renderer.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote>Label for the axis</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>true to show the axis label.</div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min = null</td></tr></table></blockquote>minimum value of the axis (in data units, not pixels).</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max = null</td></tr></table></blockquote>maximum value of the axis (in data units, not pixels).</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscale = false</td></tr></table></blockquote>DEPRECATED the default scaling algorithm produces superior results.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pad = 1.2</td></tr></table></blockquote>Padding to extend the range above and below the data bounds. </div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMax = null</td></tr></table></blockquote>Padding to extend the range above data bounds. </div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMin = null</td></tr></table></blockquote>Padding to extend the range below data bounds. </div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote>1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis. </div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberTicks</td></tr></table></blockquote>Desired number of ticks. </div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInterval</td></tr></table></blockquote>number of units between ticks. </div></div><div class=CToolTip id="tt20"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LinearAxisRenderer</td></tr></table></blockquote>A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.</div></div><div class=CToolTip id="tt21"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options. </div></div><div class=CToolTip id="tt22"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote>Wether to show the ticks (both marks and labels) or not. </div></div><div class=CToolTip id="tt23"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickMarks = true</td></tr></table></blockquote>Wether to show the tick marks (line crossing grid) or not. </div></div><div class=CToolTip id="tt24"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMinorTicks = true</td></tr></table></blockquote>Wether or not to show minor ticks. </div></div><div class=CToolTip id="tt25"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMajorGridlines = true</td></tr></table></blockquote>True to draw gridlines for major axis ticks.</div></div><div class=CToolTip id="tt26"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMinorGridlines = false</td></tr></table></blockquote>True to draw gridlines for minor ticks.</div></div><div class=CToolTip id="tt27"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMajorTickMarks = true</td></tr></table></blockquote>True to draw tick marks for major axis ticks.</div></div><div class=CToolTip id="tt28"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMinorTickMarks = true</td></tr></table></blockquote>True to draw tick marks for minor ticks. </div></div><div class=CToolTip id="tt29"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useSeriesColor = false</td></tr></table></blockquote>Use the color of the first series associated with this axis for the tick marks and line bordering this axis.</div></div><div class=CToolTip id="tt30"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = null</td></tr></table></blockquote>width of line stroked at the border of the axis. </div></div><div class=CToolTip id="tt31"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote>color of the border adjacent to the axis. </div></div><div class=CToolTip id="tt32"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.scaleToHiddenSeries = false</td></tr></table></blockquote>True to include hidden series when computing axes bounds and scaling.</div></div><div class=CToolTip id="tt33"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.syncTicks = null</td></tr></table></blockquote>true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up. </div></div><div class=CToolTip id="tt34"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 75</td></tr></table></blockquote>Approximate pixel spacing between ticks on graph. </div></div><div class=CToolTip id="tt35"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote>Wether to display the legend on the graph.</div></div><div class=CToolTip id="tt36"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'ne'</td></tr></table></blockquote>Placement of the legend. </div></div><div class=CToolTip id="tt37"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote>Array of labels to use. </div></div><div class=CToolTip id="tt38"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote>true to show the label text on the legend.</div></div><div class=CToolTip id="tt39"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showSwatches = true</td></tr></table></blockquote>true to show the color swatches on the legend.</div></div><div class=CToolTip id="tt40"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.placement = &quot;insideGrid&quot;</td></tr></table></blockquote>&ldquo;insideGrid&rdquo; places legend inside the grid area of the plot. </div></div><div class=CToolTip id="tt41"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xoffset = 0</td></tr></table></blockquote>DEPRECATED. </div></div><div class=CToolTip id="tt42"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yoffset = 0</td></tr></table></blockquote>DEPRECATED. </div></div><div class=CToolTip id="tt43"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.border</td></tr></table></blockquote>css spec for the border around the legend box.</div></div><div class=CToolTip id="tt44"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background</td></tr></table></blockquote>css spec for the background of the legend box.</div></div><div class=CToolTip id="tt45"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css color spec for the legend text.</div></div><div class=CToolTip id="tt46"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css font-family spec for the legend text.</div></div><div class=CToolTip id="tt47"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css font-size spec for the legend text.</div></div><div class=CToolTip id="tt48"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rowSpacing = '0.5em'</td></tr></table></blockquote>css padding-top spec for the rows in the legend.</div></div><div class=CToolTip id="tt49"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options passed to the renderer.</div></div><div class=CToolTip id="tt50"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginTop = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt51"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginRight = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt52"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginBottom = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt53"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginLeft = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt54"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>True to escape special characters with their html entity equivalents in legend text. </div></div><div class=CToolTip id="tt55"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.text = text</td></tr></table></blockquote>text of the title;</div></div><div class=CToolTip id="tt56"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the title</div></div><div class=CToolTip id="tt57"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css font-family spec for the text.</div></div><div class=CToolTip id="tt58"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css font-size spec for the text.</div></div><div class=CToolTip id="tt59"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textAlign</td></tr></table></blockquote>css text-align spec for the text.</div></div><div class=CToolTip id="tt60"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css color spec for the text.</div></div><div class=CToolTip id="tt61"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.DivTitleRenderer</td></tr></table></blockquote>A class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.</div></div><div class=CToolTip id="tt62"><div class=CClass>The default title renderer for jqPlot. </div></div><div class=CToolTip id="tt63"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options passed to the renderer.</div></div><div class=CToolTip id="tt64"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>True to escape special characters with their html entity equivalents in title text. </div></div><div class=CToolTip id="tt65"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to draw the series.</div></div><div class=CToolTip id="tt66"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xaxis = 'xaxis'</td></tr></table></blockquote>which x axis to use with this series, either &lsquo;xaxis&rsquo; or &lsquo;x2axis&rsquo;.</div></div><div class=CToolTip id="tt67"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yaxis = 'yaxis'</td></tr></table></blockquote>which y axis to use with this series, either &lsquo;yaxis&rsquo; or &lsquo;y2axis&rsquo;.</div></div><div class=CToolTip id="tt68"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LineRenderer</td></tr></table></blockquote>A class of a renderer which will draw the series, see $.jqplot.LineRenderer.</div></div><div class=CToolTip id="tt69"><div class=CClass>The default line renderer for jqPlot, this class has no options beyond the Series class. </div></div><div class=CToolTip id="tt70"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>Options to pass on to the renderer.</div></div><div class=CToolTip id="tt71"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>Line label to use in the legend.</div></div><div class=CToolTip id="tt72"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>true to show label for this series in the legend.</div></div><div class=CToolTip id="tt73"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote>css color spec for the series</div></div><div class=CToolTip id="tt74"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.negativeColor</td></tr></table></blockquote>css color spec used for filled (area) plots that are filled to zero and the &ldquo;useNegativeColors&rdquo; option is true.</div></div><div class=CToolTip id="tt75"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2.5</td></tr></table></blockquote>width of the line in pixels. </div></div><div class=CToolTip id="tt76"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'round'</td></tr></table></blockquote>Canvas lineJoin style between segments of series.</div></div><div class=CToolTip id="tt77"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>Canvas lineCap style at ends of line.</div></div><div class=CToolTip id="tt78"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.linePattern = 'solid'</td></tr></table></blockquote>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</div></div><div class=CToolTip id="tt79"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Shadow angle in degrees</div></div><div class=CToolTip id="tt80"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.25</td></tr></table></blockquote>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt81"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt82"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.1'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt83"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakOnNull = false</td></tr></table></blockquote>Wether line segments should be be broken at null value. </div></div><div class=CToolTip id="tt84"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = $.jqplot.MarkerRenderer</td></tr></table></blockquote>A class of a renderer which will draw marker (e.g. </div></div><div class=CToolTip id="tt85"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerOptions = {}</td></tr></table></blockquote>renderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.</div></div><div class=CToolTip id="tt86"><div class=CClass>The default jqPlot marker renderer, rendering the points on the line.</div></div><div class=CToolTip id="tt87"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLine = true</td></tr></table></blockquote>wether to actually draw the line or not. </div></div><div class=CToolTip id="tt88"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote>wether or not to show the markers at the data points.</div></div><div class=CToolTip id="tt89"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.index</td></tr></table></blockquote>0 based index of this series in the plot series array.</div></div><div class=CToolTip id="tt90"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>true or false, wether to fill under lines or in bars. </div></div><div class=CToolTip id="tt91"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillColor</td></tr></table></blockquote>CSS color spec to use for fill under line. </div></div><div class=CToolTip id="tt92"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAlpha</td></tr></table></blockquote>Alpha transparency to apply to the fill under the line. </div></div><div class=CToolTip id="tt93"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAndStroke = false</td></tr></table></blockquote>If true will stroke the line (with color this.color) as well as fill under it. </div></div><div class=CToolTip id="tt94"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableStack = false</td></tr></table></blockquote>true to not stack this series with other series in the plot. </div></div><div class=CToolTip id="tt95"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.neighborThreshold = 4</td></tr></table></blockquote>how close or far (in pixels) the cursor must be from a point marker to detect the point.</div></div><div class=CToolTip id="tt96"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToZero = false</td></tr></table></blockquote>true will force bar and filled series to fill toward zero on the fill Axis.</div></div><div class=CToolTip id="tt97"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToValue = 0</td></tr></table></blockquote>fill a filled series to this value on the fill axis. </div></div><div class=CToolTip id="tt98"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAxis = 'y'</td></tr></table></blockquote>Either &lsquo;x&rsquo; or &lsquo;y&rsquo;. </div></div><div class=CToolTip id="tt99"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useNegativeColors = true</td></tr></table></blockquote>true to color negative values differently in filled and bar charts.</div></div><div class=CToolTip id="tt100"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawGridlines = true</td></tr></table></blockquote>wether to draw the gridlines on the plot.</div></div><div class=CToolTip id="tt101"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineColor = '#cccccc'</td></tr></table></blockquote>color of the grid lines.</div></div><div class=CToolTip id="tt102"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineWidth = 1.0</td></tr></table></blockquote>width of the grid lines.</div></div><div class=CToolTip id="tt103"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = '#fffdf6'</td></tr></table></blockquote>css spec for the background color.</div></div><div class=CToolTip id="tt104"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = '#999999'</td></tr></table></blockquote>css spec for the color of the grid border.</div></div><div class=CToolTip id="tt105"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = 2.0</td></tr></table></blockquote>width of the border in pixels.</div></div><div class=CToolTip id="tt106"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBorder = true</td></tr></table></blockquote>True to draw border around grid.</div></div><div class=CToolTip id="tt107"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether to show a shadow behind the grid.</div></div><div class=CToolTip id="tt108"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>shadow angle in degrees</div></div><div class=CToolTip id="tt109"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.5</td></tr></table></blockquote>Offset of each shadow stroke from the border in pixels</div></div><div class=CToolTip id="tt110"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowWidth = 3</td></tr></table></blockquote>width of the stoke for the shadow</div></div><div class=CToolTip id="tt111"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt112"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowColor = null</td></tr></table></blockquote>an optional css color spec for the shadow in &lsquo;rgba(n, n, n, n)&rsquo; form</div></div><div class=CToolTip id="tt113"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt114"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.CanvasGridRenderer</td></tr></table></blockquote>Instance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.</div></div><div class=CToolTip id="tt115"><div class=CClass>The default jqPlot grid renderer, creating a grid on a canvas element. </div></div><div class=CToolTip id="tt116"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>Options to pass on to the renderer, see $.jqplot.CanvasGridRenderer.</div></div><div class=CToolTip id="tt117"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.animate = false</td></tr></table></blockquote>True to animate the series on initial plot draw (renderer dependent). </div></div><div class=CToolTip id="tt118"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.animateReplot = false</td></tr></table></blockquote>True to animate series after a call to the replot() method. </div></div><div class=CToolTip id="tt119"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis'), yMidAxis: new Axis('yMidAxis')}</td></tr></table></blockquote>up to 4 axes are supported, each with it&rsquo;s own options, See Axis for axis specific options.</div></div><div class=CToolTip id="tt120"><div class=CClass>An individual axis object. </div></div><div class=CToolTip id="tt121"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.data = []</td></tr></table></blockquote>user&rsquo;s data. </div></div><div class=CToolTip id="tt122"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataRenderer</td></tr></table></blockquote>A callable which can be used to preprocess data passed into the plot. </div></div><div class=CToolTip id="tt123"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataRendererOptions</td></tr></table></blockquote>Options that will be passed to the dataRenderer. </div></div><div class=CToolTip id="tt124"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>seriesDefaults: {}, series:[] }</td></tr></table></blockquote>default options that will be applied to all series. </div></div><div class=CToolTip id="tt125"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.defaultAxisStart = 1</td></tr></table></blockquote>1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot. </div></div><div class=CToolTip id="tt126"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }</td></tr></table></blockquote>Fill between 2 line series in a plot. </div></div><div class=CToolTip id="tt127"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css spec for the font-size attribute. </div></div><div class=CToolTip id="tt128"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.grid = new Grid()</td></tr></table></blockquote>See Grid for grid specific options.</div></div><div class=CToolTip id="tt129"><div class=CClass>Object representing the grid on which the plot is drawn. </div></div><div class=CToolTip id="tt130"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.legend = new Legend()</td></tr></table></blockquote>see $.jqplot.TableLegendRenderer</div></div><div class=CToolTip id="tt131"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.series = []</td></tr></table></blockquote>Array of series object options. </div></div><div class=CToolTip id="tt132"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesColors = $.jqplot.config.defaultColors</td></tr></table></blockquote>Ann array of CSS color specifications that will be applied, in order, to the series in the plot. </div></div><div class=CToolTip id="tt133"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortData = true</td></tr></table></blockquote>false to not sort the data passed in by the user. </div></div><div class=CToolTip id="tt134"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackSeries = false</td></tr></table></blockquote>true or false, creates a stack or &ldquo;mountain&rdquo; plot. </div></div><div class=CToolTip id="tt135"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.title = new Title()</td></tr></table></blockquote>Title object. </div></div><div class=CToolTip id="tt136"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.init = function(</td><td class=PParameter nowrap>target,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>sets the plot target, checks data and applies user options to plot.</div></div><div class=CToolTip id="tt137"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.resetAxesScale = function(</td><td class=PParameter nowrap>axes,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Reset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.</div></div><div class=CToolTip id="tt138"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.reInitialize = function (</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>opts</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>reinitialize plot for replotting. </div></div><div class=CToolTip id="tt139"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.quickInit = function ()</td></tr></table></blockquote>Quick reinitialization plot for replotting. </div></div><div class=CToolTip id="tt140"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.destroy = function()</td></tr></table></blockquote>Releases all resources occupied by the plot</div></div><div class=CToolTip id="tt141"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.replot = function(</td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Does a reinitialization of the plot followed by a redraw. </div></div><div class=CToolTip id="tt142"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.redraw = function(</td><td class=PParameter nowrap>clear</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Empties the plot target div and redraws the plot. </div></div><div class=CToolTip id="tt143"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.draw = function()</td></tr></table></blockquote>Draws all elements of the plot into the container. </div></div><div class=CToolTip id="tt144"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.drawSeries = function(</td><td class=PParameter nowrap>options,</td></tr><tr><td></td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Redraws all or just one series on the plot. </div></div><div class=CToolTip id="tt145"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToFront = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases. </div></div><div class=CToolTip id="tt146"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToBack = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.</div></div><div class=CToolTip id="tt147"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restorePreviousSeriesOrder = function ()</td></tr></table></blockquote>This method requires jQuery 1.4+ Restore the series canvas order to its previous state. </div></div><div class=CToolTip id="tt148"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restoreOriginalSeriesOrder = function ()</td></tr></table></blockquote>This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.</div></div><div class=CToolTip id="tt149"><div class=CSection>GNU GENERAL PUBLIC LICENSE Version 2, June 1991</div></div><div class=CToolTip id="tt150"><div class=CSection>Copyright &copy; 2009-2012 Chris Leonello</div></div><div class=CToolTip id="tt151"><div class=CClass>The default jqPlot axis renderer, creating a numeric axis.</div></div><div class=CToolTip id="tt152"><div class=CClass>An individual data series object. </div></div><div class=CToolTip id="tt153"><div class=CClass>Plot Title object. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-divTitleRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-divTitleRenderer-js.html
new file mode 100644
index 00000000..a3806b9a
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-divTitleRenderer-js.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.DivTitleRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.DivTitleRenderer"></a>$.jqplot.<wbr>DivTitleRenderer</div><div class=CBody><p>The default title renderer for jqPlot.&nbsp; This class has no options beyond the <a href="jqplot-core-js.html#Title" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">Title</a> class.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Div Title Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Plot Title object. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-lineRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-lineRenderer-js.html
new file mode 100644
index 00000000..09170eda
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-lineRenderer-js.html
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.LineRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.LineRenderer"></a>$.jqplot.<wbr>LineRenderer</div><div class=CBody><p>The default line renderer for jqPlot, this class has no options beyond the <a href="jqplot-core-js.html#Series" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt1', 'link9')" onMouseOut="HideTip('tt1')">Series</a> class.&nbsp; Draws series as a line.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.LineRenderer" >$.jqplot.<wbr>LineRenderer</a></td><td class=SDescription>The default line renderer for jqPlot, this class has no options beyond the <a href="jqplot-core-js.html#Series" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">Series</a> class. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.LineRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LineRenderer.smooth" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">smooth</a></td><td class=SDescription>True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LineRenderer.constrainSmoothing" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">constrainSmoothing</a></td><td class=SDescription>True to use a more accurate smoothing algorithm that will not overshoot any data points. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LineRenderer.bandData" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">bandData</a></td><td class=SDescription>Data used to draw error bands or confidence intervals above/below a line.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.LineRenderer.bands" >bands</a></td><td class=SDescription>Banding around line, e.g error bands or confidence intervals.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LineRenderer.show" >show</a></td><td class=SDescription>true to show the bands. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LineRenderer.color" >color</a></td><td class=SDescription>color of lines at top and bottom of bands [default: series color].</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LineRenderer.showLines" >showLines</a></td><td class=SDescription>True to show lines at top and bottom of bands [default: false].</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LineRenderer.fill" >fill</a></td><td class=SDescription>True to fill area between bands [default: true].</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LineRenderer.fillColor" >fillColor</a></td><td class=SDescription>css color spec for filled area. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LineRenderer.interval" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">interval</a></td><td class=SDescription>User specified interval above and below line for bands [default: &lsquo;3%&rsquo;&rsquo;]. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.LineRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LineRenderer.highlightMouseOver" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">highlightMouseOver</a></td><td class=SDescription>True to highlight area on a filled plot when moused over. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LineRenderer.highlightMouseDown" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over an area on a filled plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LineRenderer.highlightColor" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">highlightColor</a></td><td class=SDescription>color to use when highlighting an area on a filled plot.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.smooth"></a>smooth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.smooth = false</td></tr></table></blockquote><p>True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points.&nbsp; Set to an integer number &gt; 2 to specify number of smoothing points to use between each data point.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.constrainSmoothing"></a>constrainSmoothing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.constrainSmoothing = true</td></tr></table></blockquote><p>True to use a more accurate smoothing algorithm that will not overshoot any data points.&nbsp; False to allow overshoot but produce a smoother looking line.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.bandData"></a>bandData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.bandData = []</td></tr></table></blockquote><p>Data used to draw error bands or confidence intervals above/below a line.</p><p>bandData can be input in 3 forms.&nbsp; jqPlot will figure out which is the low band line and which is the high band line for all forms:</p><p>A 2 dimensional array like [[yl1, yl2, ...], [yu1, yu2, ...]] where [yl1, yl2, ...] are y values of the lower line and [yu1, yu2, ...] are y values of the upper line.&nbsp; In this case there must be the same number of y data points as data points in the series and the bands will inherit the x values of the series.</p><p>A 2 dimensional array like [[[xl1, yl1], [xl2, yl2], ...], [[xh1, yh1], [xh2, yh2], ...]] where [xl1, yl1] are x,y data points for the lower line and [xh1, yh1] are x,y data points for the high line. x values do not have to correspond to the x values of the series and can be of any arbitrary length.</p><p>Can be of form [[yl1, yu1], [yl2, yu2], [yl3, yu3], ...] where there must be 3 or more arrays and there must be the same number of arrays as there are data points in the series.&nbsp; In this case, [yl1, yu1] specifies the lower and upper y values for the 1st data point and so on.&nbsp; The bands will inherit the x values from the series.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.bands"></a>bands</h3><div class=CBody><p>Banding around line, e.g error bands or confidence intervals.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.show"></a>show</h3><div class=CBody><p>true to show the bands.&nbsp; If bandData or interval is supplied, show will be set to true by default.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.color"></a>color</h3><div class=CBody><p>color of lines at top and bottom of bands [default: series color].</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.showLines"></a>showLines</h3><div class=CBody><p>True to show lines at top and bottom of bands [default: false].</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.fill"></a>fill</h3><div class=CBody><p>True to fill area between bands [default: true].</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.fillColor"></a>fillColor</h3><div class=CBody><p>css color spec for filled area.&nbsp; [default: series color].</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.interval"></a>interval</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>interval: '3%' }</td></tr></table></blockquote><p>User specified interval above and below line for bands [default: &lsquo;3%&rsquo;&rsquo;].&nbsp; Can be a value like 3 or a string like &lsquo;3%&rsquo; or an upper/lower array like [1, -2] or [&lsquo;2%&rsquo;, &lsquo;-1.5%&rsquo;]</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight area on a filled plot when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on an area on a filled plot.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over an area on a filled plot.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.highlightColor"></a>highlightColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColor = null</td></tr></table></blockquote><p>color to use when highlighting an area on a filled plot.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Line Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>An individual data series object. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.smooth = false</td></tr></table></blockquote>True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.constrainSmoothing = true</td></tr></table></blockquote>True to use a more accurate smoothing algorithm that will not overshoot any data points. </div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.bandData = []</td></tr></table></blockquote>Data used to draw error bands or confidence intervals above/below a line.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>interval: '3%' }</td></tr></table></blockquote>User specified interval above and below line for bands [default: &lsquo;3%&rsquo;&rsquo;]. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area on a filled plot when moused over. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over an area on a filled plot. </div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColor = null</td></tr></table></blockquote>color to use when highlighting an area on a filled plot.</div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-linearAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-linearAxisRenderer-js.html
new file mode 100644
index 00000000..a3669ba1
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-linearAxisRenderer-js.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.LinearAxisRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.LinearAxisRenderer"></a>$.jqplot.<wbr>LinearAxisRenderer</div><div class=CBody><p>The default jqPlot axis renderer, creating a numeric axis.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer" >$.jqplot.<wbr>LinearAxisRenderer</a></td><td class=SDescription>The default jqPlot axis renderer, creating a numeric axis.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.breakPoints" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">breakPoints</a></td><td class=SDescription>EXPERIMENTAL!!&nbsp; </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.breakTickLabel" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">breakTickLabel</a></td><td class=SDescription>Label to use at the axis break if breakPoints are specified.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.drawBaseline" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">drawBaseline</a></td><td class=SDescription>True to draw the axis baseline.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.baselineWidth" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">baselineWidth</a></td><td class=SDescription>width of the baseline in pixels.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.baselineColor" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">baselineColor</a></td><td class=SDescription>CSS color spec for the baseline.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.forceTickAt0" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">forceTickAt0</a></td><td class=SDescription>This will ensure that there is always a tick mark at 0. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.forceTickAt100" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">forceTickAt100</a></td><td class=SDescription>This will ensure that there is always a tick mark at 100. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.tickInset" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">tickInset</a></td><td class=SDescription>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.minorTicks" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">minorTicks</a></td><td class=SDescription>Number of ticks to add between &ldquo;major&rdquo; ticks. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.alignTicks" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">alignTicks</a></td><td class=SDescription>true to align tick marks across opposed axes such as from the y2axis to yaxis.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.breakPoints"></a>breakPoints</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakPoints = null</td></tr></table></blockquote><p>EXPERIMENTAL!!&nbsp; Use at your own risk!&nbsp; Works only with linear axes and the default tick renderer.&nbsp; Array of [start, stop] points to create a broken axis.&nbsp; Broken axes have a &ldquo;jump&rdquo; in them, which is an immediate transition from a smaller value to a larger value.&nbsp; Currently, axis ticks MUST be manually assigned if using breakPoints by using the axis ticks array option.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.breakTickLabel"></a>breakTickLabel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakTickLabel = &quot;&amp;asymp</td></tr></table></blockquote><p>Label to use at the axis break if breakPoints are specified.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.drawBaseline"></a>drawBaseline</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote><p>True to draw the axis baseline.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.baselineWidth"></a>baselineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote><p>width of the baseline in pixels.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.baselineColor"></a>baselineColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote><p>CSS color spec for the baseline.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.forceTickAt0"></a>forceTickAt0</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.forceTickAt0 = false</td></tr></table></blockquote><p>This will ensure that there is always a tick mark at 0.&nbsp; If data range is strictly positive or negative, this will force 0 to be inside the axis bounds unless the appropriate axis pad (pad, padMin or padMax) is set to 0, then this will force an axis min or max value at 0.&nbsp; This has know effect when any of the following options are set: autoscale, min, max, numberTicks or tickInterval.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.forceTickAt100"></a>forceTickAt100</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.forceTickAt100 = false</td></tr></table></blockquote><p>This will ensure that there is always a tick mark at 100.&nbsp; If data range is strictly above or below 100, this will force 100 to be inside the axis bounds unless the appropriate axis pad (pad, padMin or padMax) is set to 0, then this will force an axis min or max value at 100.&nbsp; This has know effect when any of the following options are set: autoscale, min, max, numberTicks or tickInterval.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.tickInset"></a>tickInset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInset = 0</td></tr></table></blockquote><p>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.&nbsp; 0 is no inset, 0.5 is one half a tick interval, 1 is a full tick interval, etc.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.minorTicks"></a>minorTicks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.minorTicks = 0</td></tr></table></blockquote><p>Number of ticks to add between &ldquo;major&rdquo; ticks.&nbsp; Major ticks are ticks supplied by user or auto computed.&nbsp; Minor ticks cannot be created by user.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.alignTicks"></a>alignTicks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alignTicks = false</td></tr></table></blockquote><p>true to align tick marks across opposed axes such as from the y2axis to yaxis.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Linear Axis Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakPoints = null</td></tr></table></blockquote>EXPERIMENTAL!!&nbsp; </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakTickLabel = &quot;&amp;asymp</td></tr></table></blockquote>Label to use at the axis break if breakPoints are specified.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.forceTickAt0 = false</td></tr></table></blockquote>This will ensure that there is always a tick mark at 0. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.forceTickAt100 = false</td></tr></table></blockquote>This will ensure that there is always a tick mark at 100. </div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInset = 0</td></tr></table></blockquote>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.minorTicks = 0</td></tr></table></blockquote>Number of ticks to add between &ldquo;major&rdquo; ticks. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alignTicks = false</td></tr></table></blockquote>true to align tick marks across opposed axes such as from the y2axis to yaxis.</div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-markerRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-markerRenderer-js.html
new file mode 100644
index 00000000..304fc362
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-markerRenderer-js.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.MarkerRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.MarkerRenderer"></a>$.jqplot.<wbr>MarkerRenderer</div><div class=CBody><p>The default jqPlot marker renderer, rendering the points on the line.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.MarkerRenderer" >$.jqplot.<wbr>MarkerRenderer</a></td><td class=SDescription>The default jqPlot marker renderer, rendering the points on the line.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.show" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">show</a></td><td class=SDescription>wether or not to show the marker.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.style" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">style</a></td><td class=SDescription>One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.lineWidth" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">lineWidth</a></td><td class=SDescription>size of the line for non-filled markers.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.size" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">size</a></td><td class=SDescription>Size of the marker (diameter or circle, length of edge of square, etc.)</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.color" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">color</a></td><td class=SDescription>color of marker. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadow" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">shadow</a></td><td class=SDescription>wether or not to draw a shadow on the line</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadowAngle" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">shadowAngle</a></td><td class=SDescription>Shadow angle in degrees</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadowOffset" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">shadowOffset</a></td><td class=SDescription>Shadow offset from line in pixels</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadowDepth" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">shadowDepth</a></td><td class=SDescription>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadowAlpha" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">shadowAlpha</a></td><td class=SDescription>Alpha channel transparency of shadow. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadowRenderer" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">shadowRenderer</a></td><td class=SDescription>Renderer that will draws the shadows on the marker.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shapeRenderer" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">shapeRenderer</a></td><td class=SDescription>Renderer that will draw the marker.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to show the marker.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.style"></a>style</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'filledCircle'</td></tr></table></blockquote><p>One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.lineWidth"></a>lineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote><p>size of the line for non-filled markers.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.size"></a>size</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 9.0</td></tr></table></blockquote><p>Size of the marker (diameter or circle, length of edge of square, etc.)</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.color"></a>color</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote><p>color of marker.&nbsp; Will be set to color of series by default on init.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadow"></a>shadow</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote><p>wether or not to draw a shadow on the line</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadowAngle"></a>shadowAngle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote><p>Shadow angle in degrees</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1</td></tr></table></blockquote><p>Shadow offset from line in pixels</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote><p>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote><p>Alpha channel transparency of shadow.&nbsp; 0 = transparent.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadowRenderer"></a>shadowRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowRenderer = new $.jqplot.ShadowRenderer()</td></tr></table></blockquote><p>Renderer that will draws the shadows on the marker.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shapeRenderer"></a>shapeRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shapeRenderer = new $.jqplot.ShapeRenderer()</td></tr></table></blockquote><p>Renderer that will draw the marker.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Marker Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the marker.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'filledCircle'</td></tr></table></blockquote>One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>size of the line for non-filled markers.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 9.0</td></tr></table></blockquote>Size of the marker (diameter or circle, length of edge of square, etc.)</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>color of marker. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether or not to draw a shadow on the line</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Shadow angle in degrees</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1</td></tr></table></blockquote>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowRenderer = new $.jqplot.ShadowRenderer()</td></tr></table></blockquote>Renderer that will draws the shadows on the marker.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shapeRenderer = new $.jqplot.ShapeRenderer()</td></tr></table></blockquote>Renderer that will draw the marker.</div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shadowRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shadowRenderer-js.html
new file mode 100644
index 00000000..7d5fb69d
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shadowRenderer-js.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.shadowRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.shadowRenderer"></a>$.jqplot.<wbr>shadowRenderer</div><div class=CBody><p>The default jqPlot shadow renderer, rendering shadows behind shapes.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.shadowRenderer" >$.jqplot.<wbr>shadowRenderer</a></td><td class=SDescription>The default jqPlot shadow renderer, rendering shadows behind shapes.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.shadowRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shadowRenderer.angle" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">angle</a></td><td class=SDescription>Angle of the shadow in degrees. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shadowRenderer.offset" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">offset</a></td><td class=SDescription>Pixel offset at the given shadow angle of each shadow stroke from the last stroke.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shadowRenderer.alpha" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">alpha</a></td><td class=SDescription>alpha transparency of shadow stroke.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shadowRenderer.lineWidth" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">lineWidth</a></td><td class=SDescription>width of the shadow line stroke.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shadowRenderer.lineJoin" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">lineJoin</a></td><td class=SDescription>How line segments of the shadow are joined.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shadowRenderer.lineCap" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">lineCap</a></td><td class=SDescription>how ends of the shadow line are rendered.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shadowRenderer.fill" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">fill</a></td><td class=SDescription>whether to fill the shape.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shadowRenderer.depth" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">depth</a></td><td class=SDescription>how many times the shadow is stroked. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shadowRenderer.isarc" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">isarc</a></td><td class=SDescription>wether the shadow is an arc or not.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.shadowRenderer.draw" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">draw</a></td><td class=SDescription>draws an transparent black (i.e. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.angle"></a>angle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 45</td></tr></table></blockquote><p>Angle of the shadow in degrees.&nbsp; Measured counter-clockwise from the x axis.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.offset"></a>offset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offset = 1</td></tr></table></blockquote><p>Pixel offset at the given shadow angle of each shadow stroke from the last stroke.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.alpha"></a>alpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alpha = 0.07</td></tr></table></blockquote><p>alpha transparency of shadow stroke.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.lineWidth"></a>lineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote><p>width of the shadow line stroke.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.lineJoin"></a>lineJoin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote><p>How line segments of the shadow are joined.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.lineCap"></a>lineCap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote><p>how ends of the shadow line are rendered.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote><p>whether to fill the shape.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.depth"></a>depth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.depth = 3</td></tr></table></blockquote><p>how many times the shadow is stroked.&nbsp; Each stroke will be offset by offset at angle degrees.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.isarc"></a>isarc</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote><p>wether the shadow is an arc or not.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShadowRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>draws an transparent black (i.e. gray) shadow.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>ctx</td><td class=CDLDescription>canvas drawing context</td></tr><tr><td class=CDLEntry>points</td><td class=CDLDescription>array of points or [x, y, radius, start angle (rad), end angle (rad)]</td></tr></table></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Shadow Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 45</td></tr></table></blockquote>Angle of the shadow in degrees. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offset = 1</td></tr></table></blockquote>Pixel offset at the given shadow angle of each shadow stroke from the last stroke.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alpha = 0.07</td></tr></table></blockquote>alpha transparency of shadow stroke.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>width of the shadow line stroke.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.depth = 3</td></tr></table></blockquote>how many times the shadow is stroked. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt10"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShadowRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws an transparent black (i.e. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shapeRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shapeRenderer-js.html
new file mode 100644
index 00000000..a063dea9
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shapeRenderer-js.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.shapeRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.shapeRenderer"></a>$.jqplot.<wbr>shapeRenderer</div><div class=CBody><p>The default jqPlot shape renderer.&nbsp; Given a set of points will plot them and either stroke a line (fill = false) or fill them (fill = true).&nbsp; If a filled shape is desired, closePath = true must also be set to close the shape.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.shapeRenderer" >$.jqplot.<wbr>shapeRenderer</a></td><td class=SDescription>The default jqPlot shape renderer. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.shapeRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.linePattern" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">linePattern</a></td><td class=SDescription>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shapeRenderer.lineJoin" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">lineJoin</a></td><td class=SDescription>How line segments of the shadow are joined.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.lineCap" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">lineCap</a></td><td class=SDescription>how ends of the shadow line are rendered.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shapeRenderer.fill" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">fill</a></td><td class=SDescription>whether to fill the shape.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.isarc" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">isarc</a></td><td class=SDescription>wether the shadow is an arc or not.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shapeRenderer.fillRect" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">fillRect</a></td><td class=SDescription>true to draw shape as a filled rectangle.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.strokeRect" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">strokeRect</a></td><td class=SDescription>true to draw shape as a stroked rectangle.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shapeRenderer.clearRect" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">clearRect</a></td><td class=SDescription>true to cear a rectangle.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.strokeStyle" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">strokeStyle</a></td><td class=SDescription>css color spec for the stoke style</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shapeRenderer.fillStyle" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">fillStyle</a></td><td class=SDescription>css color spec for the fill style.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.shapeRenderer.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.draw" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">draw</a></td><td class=SDescription>draws the shape.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.linePattern"></a>linePattern</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.linePattern = 'solid'</td></tr></table></blockquote><p>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo; characters such as &lsquo;.-.&rsquo; or a numerical array like [draw, skip, draw, skip, ...] such as [1, 10] to draw a dotted line, [1, 10, 20, 10] to draw a dot-dash line, and so on.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.lineJoin"></a>lineJoin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote><p>How line segments of the shadow are joined.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.lineCap"></a>lineCap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote><p>how ends of the shadow line are rendered.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote><p>whether to fill the shape.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.isarc"></a>isarc</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote><p>wether the shadow is an arc or not.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.fillRect"></a>fillRect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillRect = false</td></tr></table></blockquote><p>true to draw shape as a filled rectangle.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.strokeRect"></a>strokeRect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeRect = false</td></tr></table></blockquote><p>true to draw shape as a stroked rectangle.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.clearRect"></a>clearRect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clearRect = false</td></tr></table></blockquote><p>true to cear a rectangle.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.strokeStyle"></a>strokeStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeStyle = '#999999'</td></tr></table></blockquote><p>css color spec for the stoke style</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.fillStyle"></a>fillStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillStyle = '#999999'</td></tr></table></blockquote><p>css color spec for the fill style.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShapeRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>draws the shape.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>ctx</td><td class=CDLDescription>canvas drawing context</td></tr><tr><td class=CDLEntry>points</td><td class=CDLDescription>array of points for shapes or [x, y, width, height] for rectangles or [x, y, radius, start angle (rad), end angle (rad)] for circles and arcs.</td></tr></table></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Shape Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.linePattern = 'solid'</td></tr></table></blockquote>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillRect = false</td></tr></table></blockquote>true to draw shape as a filled rectangle.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeRect = false</td></tr></table></blockquote>true to draw shape as a stroked rectangle.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clearRect = false</td></tr></table></blockquote>true to cear a rectangle.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeStyle = '#999999'</td></tr></table></blockquote>css color spec for the stoke style</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillStyle = '#999999'</td></tr></table></blockquote>css color spec for the fill style.</div></div><div class=CToolTip id="tt11"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShapeRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws the shape.</div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-themeEngine-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-themeEngine-js.html
new file mode 100644
index 00000000..54fb438f
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-themeEngine-js.html
@@ -0,0 +1,191 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.ThemeEngine</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.ThemeEngine"></a>$.jqplot.<wbr>ThemeEngine</div><div class=CBody><p>Theme Engine provides a programatic way to change some of the more common jqplot styling options such as fonts, colors and grid options.&nbsp; A theme engine instance is created with each plot.&nbsp; The theme engine manages a collection of themes which can be modified, added to, or applied to the plot.</p><p>The themeEngine class is not instantiated directly.&nbsp; When a plot is initialized, the current plot options are scanned an a default theme named &ldquo;Default&rdquo; is created.&nbsp; This theme is used as the basis for other themes added to the theme engine and is always available.</p><p>A theme is a simple javascript object with styling parameters for various entities of the plot.&nbsp; A theme has the form:</p><blockquote><pre>{
+ _name:f &quot;Default&quot;,
+ target: {
+ backgroundColor: &quot;transparent&quot;
+ },
+ legend: {
+ textColor: null,
+ fontFamily: null,
+ fontSize: null,
+ border: null,
+ background: null
+ },
+ title: {
+ textColor: &quot;rgb(102, 102, 102)&quot;,
+ fontFamily: &quot;'Trebuchet MS',Arial,Helvetica,sans-serif&quot;,
+ fontSize: &quot;19.2px&quot;,
+ textAlign: &quot;center&quot;
+ },
+ seriesStyles: {},
+ series: [{
+ color: &quot;#4bb2c5&quot;,
+ lineWidth: 2.5,
+ linePattern: &quot;solid&quot;,
+ shadow: true,
+ fillColor: &quot;#4bb2c5&quot;,
+ showMarker: true,
+ markerOptions: {
+ color: &quot;#4bb2c5&quot;,
+ show: true,
+ style: 'filledCircle',
+ lineWidth: 1.5,
+ size: 4,
+ shadow: true
+ }
+ }],
+ grid: {
+ drawGridlines: true,
+ gridLineColor: &quot;#cccccc&quot;,
+ gridLineWidth: 1,
+ backgroundColor: &quot;#fffdf6&quot;,
+ borderColor: &quot;#999999&quot;,
+ borderWidth: 2,
+ shadow: true
+ },
+ axesStyles: {
+ label: {},
+ ticks: {}
+ },
+ axes: {
+ xaxis: {
+ borderColor: &quot;#999999&quot;,
+ borderWidth: 2,
+ ticks: {
+ show: true,
+ showGridline: true,
+ showLabel: true,
+ showMark: true,
+ size: 4,
+ textColor: &quot;&quot;,
+ whiteSpace: &quot;nowrap&quot;,
+ fontSize: &quot;12px&quot;,
+ fontFamily: &quot;'Trebuchet MS',Arial,Helvetica,sans-serif&quot;
+ },
+ label: {
+ textColor: &quot;rgb(102, 102, 102)&quot;,
+ whiteSpace: &quot;normal&quot;,
+ fontSize: &quot;14.6667px&quot;,
+ fontFamily: &quot;'Trebuchet MS',Arial,Helvetica,sans-serif&quot;,
+ fontWeight: &quot;400&quot;
+ }
+ },
+ yaxis: {
+ borderColor: &quot;#999999&quot;,
+ borderWidth: 2,
+ ticks: {
+ show: true,
+ showGridline: true,
+ showLabel: true,
+ showMark: true,
+ size: 4,
+ textColor: &quot;&quot;,
+ whiteSpace: &quot;nowrap&quot;,
+ fontSize: &quot;12px&quot;,
+ fontFamily: &quot;'Trebuchet MS',Arial,Helvetica,sans-serif&quot;
+ },
+ label: {
+ textColor: null,
+ whiteSpace: null,
+ fontSize: null,
+ fontFamily: null,
+ fontWeight: null
+ }
+ },
+ x2axis: {...
+ },
+ ...
+ y9axis: {...
+ }
+ }
+}</pre></blockquote><p>&rdquo;seriesStyles&rdquo; is a style object that will be applied to all series in the plot.&nbsp; It will forcibly override any styles applied on the individual series.&nbsp; &ldquo;axesStyles&rdquo; is a style object that will be applied to all axes in the plot.&nbsp; It will also forcibly override any styles on the individual axes.</p><p>The example shown above has series options for a line series.&nbsp; Options for other series types are shown below:</p><h4 class=CHeading>Bar Series</h4><blockquote><pre>{
+ color: &quot;#4bb2c5&quot;,
+ seriesColors: [&quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;],
+ lineWidth: 2.5,
+ shadow: true,
+ barPadding: 2,
+ barMargin: 10,
+ barWidth: 15.09375,
+ highlightColors: [&quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;]
+}</pre></blockquote><h4 class=CHeading>Pie Series</h4><blockquote><pre>{
+ seriesColors: [&quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;],
+ padding: 20,
+ sliceMargin: 0,
+ fill: true,
+ shadow: true,
+ startAngle: 0,
+ lineWidth: 2.5,
+ highlightColors: [&quot;rgb(129,201,214)&quot;, &quot;rgb(240,189,104)&quot;, &quot;rgb(214,202,165)&quot;, &quot;rgb(137,180,158)&quot;, &quot;rgb(168,180,137)&quot;, &quot;rgb(180,174,89)&quot;, &quot;rgb(180,113,161)&quot;, &quot;rgb(129,141,236)&quot;, &quot;rgb(227,205,120)&quot;, &quot;rgb(255,138,76)&quot;, &quot;rgb(76,169,219)&quot;, &quot;rgb(215,126,190)&quot;, &quot;rgb(220,232,135)&quot;, &quot;rgb(200,167,96)&quot;, &quot;rgb(103,202,235)&quot;, &quot;rgb(208,154,215)&quot;]
+}</pre></blockquote><h4 class=CHeading>Funnel Series</h4><blockquote><pre>{
+ color: &quot;#4bb2c5&quot;,
+ lineWidth: 2,
+ shadow: true,
+ padding: {
+ top: 20,
+ right: 20,
+ bottom: 20,
+ left: 20
+ },
+ sectionMargin: 6,
+ seriesColors: [&quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;],
+ highlightColors: [&quot;rgb(147,208,220)&quot;, &quot;rgb(242,199,126)&quot;, &quot;rgb(220,210,178)&quot;, &quot;rgb(154,191,172)&quot;, &quot;rgb(180,191,154)&quot;, &quot;rgb(191,186,112)&quot;, &quot;rgb(191,133,174)&quot;, &quot;rgb(147,157,238)&quot;, &quot;rgb(231,212,139)&quot;, &quot;rgb(255,154,102)&quot;, &quot;rgb(102,181,224)&quot;, &quot;rgb(221,144,199)&quot;, &quot;rgb(225,235,152)&quot;, &quot;rgb(200,167,96)&quot;, &quot;rgb(124,210,238)&quot;, &quot;rgb(215,169,221)&quot;]
+}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.ThemeEngine" >$.jqplot.<wbr>ThemeEngine</a></td><td class=SDescription>Theme Engine provides a programatic way to change some of the more common jqplot styling options such as fonts, colors and grid options. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.ThemeEngine.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.ThemeEngine.themes" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">themes</a></td><td class=SDescription>hash of themes managed by the theme engine. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.ThemeEngine.activeTheme" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">activeTheme</a></td><td class=SDescription>Pointer to currently active theme</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.ThemeEngine.methods" >methods</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.ThemeEngine.get" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">get</a></td><td class=SDescription>Get and return the named theme or the active theme if no name given.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.ThemeEngine.getThemeNames" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">getThemeNames</a></td><td class=SDescription>Return the list of theme names in this manager in alpha-numerical order.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.ThemeEngine.getThemes" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">getThemes</a></td><td class=SDescription>Return a list of themes in alpha-numerical order by name.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.ThemeEngine.remove" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">remove</a></td><td class=SDescription>Remove the given theme from the themeEngine.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.ThemeEngine.newTheme" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">newTheme</a></td><td class=SDescription>Create a new theme based on the default theme, adding it the themeEngine.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.ThemeEngine.rename" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">rename</a></td><td class=SDescription>Rename a theme.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.ThemeEngine.copy" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">copy</a></td><td class=SDescription>Create a copy of an existing theme in the themeEngine, adding it the themeEngine.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.themes"></a>themes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.themes = {}</td></tr></table></blockquote><p>hash of themes managed by the theme engine.&nbsp; Indexed by theme name.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.activeTheme"></a>activeTheme</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.activeTheme=null</td></tr></table></blockquote><p>Pointer to currently active theme</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.methods"></a>methods</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.get"></a>get</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.get = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Get and return the named theme or the active theme if no name given.</p><h4 class=CHeading>parameter</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>name of theme to get.</td></tr></table><h4 class=CHeading>returns</h4><p>Theme instance of given name.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.getThemeNames"></a>getThemeNames</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemeNames = function()</td></tr></table></blockquote><p>Return the list of theme names in this manager in alpha-numerical order.</p><h4 class=CHeading>parameter</h4><p>None</p><h4 class=CHeading>returns</h4><p>A the list of theme names in this manager in alpha-numerical order.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.getThemes"></a>getThemes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemes = function()</td></tr></table></blockquote><p>Return a list of themes in alpha-numerical order by name.</p><h4 class=CHeading>parameter</h4><p>None</p><h4 class=CHeading>returns</h4><p>A list of themes in alpha-numerical order by name.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.remove"></a>remove</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.remove = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Remove the given theme from the themeEngine.</p><h4 class=CHeading>parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>name of the theme to remove.</td></tr></table><h4 class=CHeading>returns</h4><p>true on success, false on failure.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.newTheme"></a>newTheme</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.newTheme = function(</td><td class=PParameter nowrap>name,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create a new theme based on the default theme, adding it the themeEngine.</p><h4 class=CHeading>parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>name of the new theme.</td></tr><tr><td class=CDLEntry>obj</td><td class=CDLDescription>optional object of styles to be applied to this new theme.</td></tr></table><h4 class=CHeading>returns</h4><p>new Theme object.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.rename"></a>rename</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.rename = function (</td><td class=PParameter nowrap>oldName,</td></tr><tr><td></td><td class=PParameter nowrap>newName</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Rename a theme.</p><h4 class=CHeading>parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>oldName</td><td class=CDLDescription>current name of the theme.</td></tr><tr><td class=CDLEntry>newName</td><td class=CDLDescription>desired name of the theme.</td></tr></table><h4 class=CHeading>returns</h4><p>new Theme object.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.copy"></a>copy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.copy = function (</td><td class=PParameter nowrap>sourceName,</td></tr><tr><td></td><td class=PParameter nowrap>targetName,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create a copy of an existing theme in the themeEngine, adding it the themeEngine.</p><h4 class=CHeading>parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>sourceName</td><td class=CDLDescription>name of the existing theme.</td></tr><tr><td class=CDLEntry>targetName</td><td class=CDLDescription>name of the copy.</td></tr><tr><td class=CDLEntry>obj</td><td class=CDLDescription>optional object of style parameter to apply to the new theme.</td></tr></table><h4 class=CHeading>returns</h4><p>new Theme object.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Theme Engine</div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.themes = {}</td></tr></table></blockquote>hash of themes managed by the theme engine. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.activeTheme=null</td></tr></table></blockquote>Pointer to currently active theme</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.get = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Get and return the named theme or the active theme if no name given.</div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemeNames = function()</td></tr></table></blockquote>Return the list of theme names in this manager in alpha-numerical order.</div></div><div class=CToolTip id="tt5"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemes = function()</td></tr></table></blockquote>Return a list of themes in alpha-numerical order by name.</div></div><div class=CToolTip id="tt6"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.remove = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Remove the given theme from the themeEngine.</div></div><div class=CToolTip id="tt7"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.newTheme = function(</td><td class=PParameter nowrap>name,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Create a new theme based on the default theme, adding it the themeEngine.</div></div><div class=CToolTip id="tt8"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.rename = function (</td><td class=PParameter nowrap>oldName,</td></tr><tr><td></td><td class=PParameter nowrap>newName</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Rename a theme.</div></div><div class=CToolTip id="tt9"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.copy = function (</td><td class=PParameter nowrap>sourceName,</td></tr><tr><td></td><td class=PParameter nowrap>targetName,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Create a copy of an existing theme in the themeEngine, adding it the themeEngine.</div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-toImage-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-toImage-js.html
new file mode 100644
index 00000000..5a3896cd
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-toImage-js.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.fn</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.fn"></a>$.fn</div><div class=CBody><p>jQuery namespace to attach functions to jQuery elements.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile id=MSelected>fn</div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/optionsTutorial-txt.html b/wqflask/wqflask/static/packages/jqplot/docs/files/optionsTutorial-txt.html
new file mode 100644
index 00000000..d38cd3d9
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/optionsTutorial-txt.html
@@ -0,0 +1,120 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Options Tutorial</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="Options_Tutorial"></a>Options Tutorial</div><div class=CBody><p>This document will help you understand how jqPlot&rsquo;s options relate to the API documentation and the jqPlot object itself.&nbsp; For a listing of options available to jqPlot, see <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">jqPlot Options</a> in the jqPlotOptions.txt file.</p><p>The key to effectively using jqPlot is understanding jqPlot&rsquo;s options.&nbsp; The online documentation is API documentation.&nbsp; While it explains what attributes and methods various objects posses, it doesn&rsquo;t explain how to use or set those attributes through options.&nbsp; This tutorial will help explain that.</p><p>Lets assume you are creating a plot like this:</p><blockquote><pre>chart = $.jqplot('chart', dataSeries, optionsObj);</pre></blockquote><p>First, note that you shouldn&rsquo;t try to directly set attributes on the &ldquo;chart&rdquo; object (like chart.grid.shadow) after your call to $.jqplot().&nbsp; At best this won&rsquo;t do anything **(see below).&nbsp; You should pass options in via the &ldquo;optionsObj&rdquo;.</p><p>the optionsObj really represents the plot object (jqPlot object, not to be confused with the $.jqplot function which will create a jqPlot object).&nbsp; Attributes you specify on that object will be merged with attributes in the jqPlot object.&nbsp; The axes, legend, series, etc. are attributes on the jqPlot object.&nbsp; The jqPlot/optionsObj object looks something like (only some attributes shown):</p><blockquote><pre>jqPlot-|
+ |-seriesColors
+ |-textColor
+ |-fontFamily
+ |-fontSize
+ |-stackSeries
+ |-series(Array)-|
+ | |-Series1-|
+ | | |-lineWidth
+ | | |-linePattern
+ | | |-shadow
+ | | |-showLine
+ | | |-showMarker
+ | | |-color
+ | |-Series2...
+ | |-...
+ | |-SeriesN
+ |
+ |-grid(Object)-|
+ | |-drawGridLines
+ | |-background
+ | |-borderColor
+ | |-borderWidth
+ | |-shadow
+ |
+ |-title(Object)-|
+ | |-text
+ | |-show
+ | |-fontFamily
+ | |-fontSize
+ | |-textAlign
+ | |-textColor
+ |
+ |-axes(Object)-|
+ | |-xais-|
+ | | |-min
+ | | |-max
+ | | |-numberTicks
+ | | |-showTicks
+ | | |-showTickMarks
+ | | |-pad
+ |
+ | ... and so on</pre></blockquote><p>The optionsObj should follow the same construction as if it were a jqPlot object (with some exceptions/shortcuts I&rsquo;ll mention in a moment).&nbsp; So generally, when you see something like &ldquo;this.drawGridLines&rdquo; in the grid properties in the docs, just replace &ldquo;this&rdquo; with &ldquo;grid&rdquo; in your options object.&nbsp; So it becomes optionsObj.grid.drawGridLines.&nbsp; Do likewise with the other objects in the plot, replacing &ldquo;this&rdquo;, with the respective attribute on the plot like &ldquo;legend&rdquo; or &ldquo;title&rdquo;.&nbsp; Series and Axes are handled a little different, because series is an array and axes has 4 distinct children &ldquo;xaxis&rdquo;, &ldquo;yaxis&rdquo;, &ldquo;x2axis&rdquo; and &ldquo;y2axis&rdquo;.</p><p>So, to remove the shadow from the grid and change the grid border size you would do:</p><blockquote><pre>optionObj = {grid:{shadow:false, borderWidth:9.0}};</pre></blockquote><p>To do the same as above but also make all the text in the plot red you would do:</p><blockquote><pre>optionObj = {
+ textColor:&quot;#ff0000&quot;,
+ grid:{shadow:false, borderWidth:9.0}
+}</pre></blockquote><p>Here is a more deeply nested example.&nbsp; Say you want to specify a min and max on your y axis and use a specific color for your second series.&nbsp; That would look like:</p><blockquote><pre>optionsObj = {
+ axes:{yaxis:{min:5, max:230}},
+ series:[{},{color:&quot;#33ff66&quot;}]
+}</pre></blockquote><p>Note that series options are an array in order of the series data you sent in to your plot.&nbsp; To get to the second series, you have to put an object (even if empty) in place of the first series.</p><p>There is a handy shortcut to assign options to all axes or all series at one go.&nbsp; Use axesDefaults and seriesDefaults.&nbsp; So, if you wanted both x and y axes to start at 0 and you wanted all series to not show markers, you could do:</p><blockquote><pre>optionsObj = {axesDefaults:{min:0}, seriesDefaults:{showMarker:false}}</pre></blockquote><p>Another shortcut is for the plot title.&nbsp; Normally, you would assign options to the title as an object.&nbsp; If you specify a title option as a string, it will assign that to the title.text property automatically.&nbsp; So these two are equivalent:</p><blockquote><pre>optionsObj = {title:{text:&quot;My Plot&quot;}}</pre></blockquote><p>and</p><blockquote><pre>optionsObj = {title:&quot;My Plot&quot;}</pre></blockquote><p>Where things need more explaination is with renderers, plugins and their options.&nbsp; Briefly, what&rsquo;s renderer, what&rsquo;s a plugin.</p><p>A renderer is an object that is used to draw something and gets attached to an existing object in the plot in order to draw it.&nbsp; A plugin does more than just provide drawing functionality to an object.&nbsp; It will do more like calculate a trend line, change the cursor, provide event driven functionality, etc.&nbsp; I consider renderers plugins, but plugins don&rsquo;t have to be renderers.</p><p>So, how do you use renderers, plugins, and specify their options?&nbsp; Some common renderes are for bar charts and category axes.&nbsp; If you want to render your series as a bar chart with each set of bars showing up in a category on the x axis, you do:</p><blockquote><pre>optionsObj = {
+ seriesDefaults:{renderer:$.jqplot.BarRenderer},
+ axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}
+}</pre></blockquote><p>This replaces the default renderer used for all series in the plot with a bar renderer and the x axis default renderer (but not any other axis) with a category renderer.</p><p>Now, how would I assign options to those renderers?&nbsp; The renderer&rsquo;s attributes may not be present in the pre-existing jqPlot object, they may be specific to the renderer.&nbsp; This is done through the &ldquo;rendererOptions&rdquo; option on the appropriate object.&nbsp; So, if I wanted my bars to be 25 pixels wide, I would do:</p><blockquote><pre>optionsObj = {
+ seriesDefaults:{
+ renderer:$.jqplot.BarRenderer},
+ rendererOptions:{
+ barWidth:25
+ },
+ axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}
+}</pre></blockquote><p>Again, this is using the &ldquo;seriesDefaults&rdquo; option, which will apply options to all series in the plot.&nbsp; You could do the same on any particular series in the plot through the &ldquo;series&rdquo; options array.</p><p>Plugins are free to add their own options.&nbsp; For example, the highlighter plugin has it&rsquo;s own set of options that are unique to it.&nbsp; As a result, it responds to options placed in the &ldquo;highlighter&rdquo; attribute of your options object.&nbsp; So, if I wanted to change the highlighter tooltip to fade in and out slowly and be positioned directly above the point I&rsquo;m highlighting:</p><blockquote><pre>optionsObj = {
+ highlighter:{tooltipFadeSpeed:'slow', tooltipLocation:'n'}
+}</pre></blockquote><p>Other plugins, like dragable and trendlines, add their options in with the series.&nbsp; This is because both of those plugins can have different options for different series in the plot.&nbsp; So, if you wanted to specify the color of the dragable and constrain it to drag only on the x axis as well as specify the color of the trend line you could do:</p><blockquote><pre>series:[{
+ dragable: {
+ color: '#ff3366',
+ constrainTo: 'x'
+ },
+ trendline: {
+ color: '#cccccc'
+ }
+}]</pre></blockquote><p>This would apply those options to the first series only.&nbsp; If you had 2 series and wanted to turn off dragging and trend lines on the second series, you could do:</p><blockquote><pre>series:[{
+ dragable: {
+ color: '#ff3366',
+ constrainTo: 'x'
+ },
+ trendline: {
+ color: '#cccccc'
+ }
+}, {
+ isDragable: false,
+ trendline:{
+ show: false
+ }
+}]</pre></blockquote><p>Note, series dragability is turned off with the &ldquo;isDragable&rdquo; option directly on the series itself, not with a suboption of &ldquo;dragable&rdquo;.&nbsp; This may be improved in the future.</p><p>I hope this is helpful.&nbsp; A few key points to remember:</p><ul><li>When you see &ldquo;this&rdquo; in the api docs, you generally replace it with the name of the object (in lowercase) you are looking at in your options object.</li><li>seriesDefaults and axesDefaults are convenient shortcuts.</li><li>to assign options to a renderer, generally use the &ldquo;rendererOptions&rdquo;</li><li>plugins may add their own options attribute, like &ldquo;highlighter&rdquo; or &ldquo;cursor&rdquo;.</li></ul><p>** Note: you can set attributes after the plot is created (like plot.grid.shadow = false), but you&rsquo;ll have to issue the appropriate calls to possibly reinitialize and redraw the plot.&nbsp; jqPlot can definitely handle this to change the plot after creation (this is how the dragable plugin updates the plot data and the trend line plugin recomputes itself when data changes).&nbsp; This hasn&rsquo;t been documented yet, however.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile id=MSelected>Options Tutorial</div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CSection><b>This document is out of date. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html
new file mode 100644
index 00000000..312db432
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.BezierCurveRenderer.js</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.BezierCurveRenderer.js"></a>$.jqplot.<wbr>BezierCurveRenderer.js</div><div class=CBody><p>Renderer which draws lines as stacked bezier curves.&nbsp; Data for the line will not be specified as an array of [x, y] data point values, but as a an array of [start piont, bezier curve] So, the line is specified as: [[xstart, ystart], [cp1x, cp1y, cp2x, cp2y, xend, yend]].</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.BezierCurveRenderer.js" >$.jqplot.<wbr>BezierCurveRenderer.js</a></td><td class=SDescription>Renderer which draws lines as stacked bezier curves. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.BezierCurveRenderer.js.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BezierCurveRenderer.js.setGridData" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">setGridData</a></td><td class=SDescription>converts the user data values to grid coordinates and stores them in the gridData array. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.BezierCurveRenderer.js.makeGridData" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">makeGridData</a></td><td class=SDescription>converts any arbitrary data values to grid coordinates and returns them. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BezierCurveRenderer.js.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BezierCurveRenderer.js.setGridData"></a>setGridData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>converts the user data values to grid coordinates and stores them in the gridData array.&nbsp; Called with scope of a series.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BezierCurveRenderer.js.makeGridData"></a>makeGridData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>converts any arbitrary data values to grid coordinates and returns them.&nbsp; This method exists so that plugins can use a series&rsquo; linerenderer to generate grid data points without overwriting the grid data associated with that series.&nbsp; Called with scope of a series.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>BezierCurveRenderer.js</div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-barRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-barRenderer-js.html
new file mode 100644
index 00000000..21560d9c
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-barRenderer-js.html
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.BarRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.BarRenderer"></a>$.jqplot.<wbr>BarRenderer</div><div class=CBody><p>A plugin renderer for jqPlot to draw a bar plot.&nbsp; Draws series as a line.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.BarRenderer" >$.jqplot.<wbr>BarRenderer</a></td><td class=SDescription>A plugin renderer for jqPlot to draw a bar plot. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.BarRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.barPadding" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">barPadding</a></td><td class=SDescription>Number of pixels between adjacent bars at the same axis value.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.barMargin" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">barMargin</a></td><td class=SDescription>Number of pixels between groups of bars at adjacent axis values.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.barDirection" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">barDirection</a></td><td class=SDescription>&lsquo;vertical&rsquo; = up and down bars, &lsquo;horizontal&rsquo; = side to side bars</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.barWidth" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">barWidth</a></td><td class=SDescription>Width of the bar in pixels (auto by devaul). </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.shadowOffset" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">shadowOffset</a></td><td class=SDescription>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.shadowDepth" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">shadowDepth</a></td><td class=SDescription>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.shadowAlpha" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">shadowAlpha</a></td><td class=SDescription>transparency of the shadow (0 = transparent, 1 = opaque)</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.waterfall" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">waterfall</a></td><td class=SDescription>true to enable waterfall plot.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.groups" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">groups</a></td><td class=SDescription>group bars into this many groups</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.varyBarColor" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">varyBarColor</a></td><td class=SDescription>true to color each bar of a series separately rather than have every bar of a given series the same color. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.highlightMouseOver" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">highlightMouseOver</a></td><td class=SDescription>True to highlight slice when moused over. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.highlightMouseDown" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over a slice. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.highlightColors" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">highlightColors</a></td><td class=SDescription>an array of colors to use when highlighting a bar.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.transposedData" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">transposedData</a></td><td class=SDescription>NOT IMPLEMENTED YET. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.barPadding"></a>barPadding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 8</td></tr></table></blockquote><p>Number of pixels between adjacent bars at the same axis value.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.barMargin"></a>barMargin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barMargin = 10</td></tr></table></blockquote><p>Number of pixels between groups of bars at adjacent axis values.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.barDirection"></a>barDirection</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barDirection = 'vertical'</td></tr></table></blockquote><p>&rsquo;vertical&rsquo; = up and down bars, &lsquo;horizontal&rsquo; = side to side bars</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.barWidth"></a>barWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barWidth = null</td></tr></table></blockquote><p>Width of the bar in pixels (auto by devaul).&nbsp; null = calculated automatically.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote><p>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote><p>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.08</td></tr></table></blockquote><p>transparency of the shadow (0 = transparent, 1 = opaque)</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.waterfall"></a>waterfall</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.waterfall = false</td></tr></table></blockquote><p>true to enable waterfall plot.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.groups"></a>groups</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.groups = 1</td></tr></table></blockquote><p>group bars into this many groups</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.varyBarColor"></a>varyBarColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBarColor = false</td></tr></table></blockquote><p>true to color each bar of a series separately rather than have every bar of a given series the same color.&nbsp; If used for non-stacked multiple series bar plots, user should specify a separate &lsquo;seriesColors&rsquo; array for each series.&nbsp; Otherwise, each series will set their bars to the same color array.&nbsp; This option has no Effect for stacked bar charts and is disabled.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight slice when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on a slice.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over a slice.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.highlightColors"></a>highlightColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote><p>an array of colors to use when highlighting a bar.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.transposedData"></a>transposedData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.transposedData = true</td></tr></table></blockquote><p>NOT IMPLEMENTED YET.&nbsp; True if this is a horizontal bar plot and x and y values are &ldquo;transposed&rdquo;.&nbsp; Tranposed, or &ldquo;swapped&rdquo;, data is required prior to rev.&nbsp; 894 builds of jqPlot with horizontal bars.&nbsp; Allows backward compatability of bar renderer horizontal bars with old style data sets.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>BarRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 8</td></tr></table></blockquote>Number of pixels between adjacent bars at the same axis value.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barMargin = 10</td></tr></table></blockquote>Number of pixels between groups of bars at adjacent axis values.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barDirection = 'vertical'</td></tr></table></blockquote>&lsquo;vertical&rsquo; = up and down bars, &lsquo;horizontal&rsquo; = side to side bars</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barWidth = null</td></tr></table></blockquote>Width of the bar in pixels (auto by devaul). </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.08</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.waterfall = false</td></tr></table></blockquote>true to enable waterfall plot.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.groups = 1</td></tr></table></blockquote>group bars into this many groups</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBarColor = false</td></tr></table></blockquote>true to color each bar of a series separately rather than have every bar of a given series the same color. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a bar.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.transposedData = true</td></tr></table></blockquote>NOT IMPLEMENTED YET. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html
new file mode 100644
index 00000000..df38cb41
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html
@@ -0,0 +1,53 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.BlockRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.BlockRenderer"></a>$.jqplot.<wbr>BlockRenderer</div><div class=CBody><p>Plugin renderer to draw a x-y block chart.&nbsp; A Block chart has data points displayed as colored squares with a text label inside.&nbsp; Data must be supplied in the form:</p><blockquote><pre>[[x1, y1, &quot;label 1&quot;, {css}], [x2, y2, &quot;label 2&quot;, {css}], ...]</pre></blockquote><p>The label and css object are optional.&nbsp; If the label is ommitted, the box will collapse unless a css height and/or width is specified.</p><p>The css object is an object specifying css properties such as:</p><blockquote><pre>{background:'#4f98a5', border:'3px solid gray', padding:'1px'}</pre></blockquote><p>Note that css properties specified with the data point override defaults specified with the series.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.BlockRenderer" >$.jqplot.<wbr>BlockRenderer</a></td><td class=SDescription>Plugin renderer to draw a x-y block chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.BlockRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BlockRenderer.css" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">css</a></td><td class=SDescription>default css styles that will be applied to all data blocks. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BlockRenderer.escapeHtml" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">escapeHtml</a></td><td class=SDescription>true to escape html in the box label.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BlockRenderer.insertBreaks" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">insertBreaks</a></td><td class=SDescription>true to turn spaces in data block label into html breaks &lt;br /&gt;.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BlockRenderer.varyBlockColors" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">varyBlockColors</a></td><td class=SDescription>true to vary the color of each block in this series according to the seriesColors array. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.BlockRenderer.Methods" >Methods</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BlockRenderer.moveBlock" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">moveBlock</a></td><td class=SDescription>Moves an individual block. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.css"></a>css</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}</td></tr></table></blockquote><p>default css styles that will be applied to all data blocks. these values will be overridden by css styles supplied with the individulal data points.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.escapeHtml"></a>escapeHtml</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote><p>true to escape html in the box label.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.insertBreaks"></a>insertBreaks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.insertBreaks = true</td></tr></table></blockquote><p>true to turn spaces in data block label into html breaks &lt;br /&gt;.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.varyBlockColors"></a>varyBlockColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBlockColors = false</td></tr></table></blockquote><p>true to vary the color of each block in this series according to the seriesColors array.&nbsp; False to set each block to the color specified on this series.&nbsp; This has no effect if a css background color option is specified in the renderer css options.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.Methods"></a>Methods</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.moveBlock"></a>moveBlock</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveBlock = function (</td><td class=PParameter nowrap>idx,</td></tr><tr><td></td><td class=PParameter nowrap>x,</td></tr><tr><td></td><td class=PParameter nowrap>y,</td></tr><tr><td></td><td class=PParameter nowrap>duration</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Moves an individual block.&nbsp; More efficient than redrawing the whole series by calling plot.drawSeries().&nbsp; Properties: idx - the 0 based index of the block or point in this series. x - the x coordinate in data units (value on x axis) to move the block to. y - the y coordinate in data units (value on the y axis) to move the block to. duration - optional parameter to create an animated movement.&nbsp; Can be a number (higher is slower animation) or &lsquo;fast&rsquo;, &lsquo;normal&rsquo; or &lsquo;slow&rsquo;.&nbsp; If not provided, the element is moved without any animation.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>BlockRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}</td></tr></table></blockquote>default css styles that will be applied to all data blocks. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>true to escape html in the box label.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.insertBreaks = true</td></tr></table></blockquote>true to turn spaces in data block label into html breaks br /.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBlockColors = false</td></tr></table></blockquote>true to vary the color of each block in this series according to the seriesColors array. </div></div><div class=CToolTip id="tt5"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveBlock = function (</td><td class=PParameter nowrap>idx,</td></tr><tr><td></td><td class=PParameter nowrap>x,</td></tr><tr><td></td><td class=PParameter nowrap>y,</td></tr><tr><td></td><td class=PParameter nowrap>duration</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Moves an individual block. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html
new file mode 100644
index 00000000..519071ab
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.BubbleRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.BubbleRenderer"></a>$.jqplot.<wbr>BubbleRenderer</div><div class=CBody><p>Plugin renderer to draw a bubble chart.&nbsp; A Bubble chart has data points displayed as colored circles with an optional text label inside.&nbsp; To use the bubble renderer, you must include the bubble renderer like:</p><blockquote><pre>&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;../src/plugins/jqplot.bubbleRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Data must be supplied in the form:</p><blockquote><pre>[[x1, y1, r1, &lt;label or {label:'text', color:color}&gt;], ...]</pre></blockquote><p>where the label or options object is optional.</p><p>Note that all bubble colors will be the same unless the &ldquo;varyBubbleColors&rdquo; option is set to true.&nbsp; Colors can be specified in the data array or in the seriesColors array option on the series.&nbsp; If no colors are defined, the default jqPlot series of 16 colors are used.&nbsp; Colors are automatically cycled around again if there are more bubbles than colors.</p><p>Bubbles are autoscaled by default to fit within the chart area while maintaining relative sizes.&nbsp; If the &ldquo;autoscaleBubbles&rdquo; option is set to false, the r(adius) values in the data array a treated as literal pixel values for the radii of the bubbles.</p><p>Properties are passed into the bubble renderer in the rendererOptions object of the series options like:</p><blockquote><pre>seriesDefaults: {
+ renderer: $.jqplot.BubbleRenderer,
+ rendererOptions: {
+ bubbleAlpha: 0.7,
+ varyBubbleColors: false
+ }
+}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.BubbleRenderer" >$.jqplot.<wbr>BubbleRenderer</a></td><td class=SDescription>Plugin renderer to draw a bubble chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.varyBubbleColors" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">varyBubbleColors</a></td><td class=SDescription>True to vary the color of each bubble in this series according to the seriesColors array. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.autoscaleBubbles" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">autoscaleBubbles</a></td><td class=SDescription>True to scale the bubble radius based on plot size. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.autoscaleMultiplier" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">autoscaleMultiplier</a></td><td class=SDescription>Multiplier the bubble size if autoscaleBubbles is true.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.autoscalePointsFactor" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">autoscalePointsFactor</a></td><td class=SDescription>Factor which decreases bubble size based on how many bubbles on on the chart. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.escapeHtml" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">escapeHtml</a></td><td class=SDescription>True to escape html in bubble label text.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.highlightMouseOver" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">highlightMouseOver</a></td><td class=SDescription>True to highlight bubbles when moused over. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.highlightMouseDown" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over a bubble. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.highlightColors" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">highlightColors</a></td><td class=SDescription>An array of colors to use when highlighting a slice. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.bubbleAlpha" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">bubbleAlpha</a></td><td class=SDescription>Alpha transparency to apply to all bubbles in this series.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.highlightAlpha" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">highlightAlpha</a></td><td class=SDescription>Alpha transparency to apply when highlighting bubble. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.bubbleGradients" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">bubbleGradients</a></td><td class=SDescription>True to color the bubbles with gradient fills instead of flat colors. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.showLabels" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">showLabels</a></td><td class=SDescription>True to show labels on bubbles (if any), false to not show.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.varyBubbleColors"></a>varyBubbleColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBubbleColors = true</td></tr></table></blockquote><p>True to vary the color of each bubble in this series according to the seriesColors array.&nbsp; False to set each bubble to the color specified on this series.&nbsp; This has no effect if a css background color option is specified in the renderer css options.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.autoscaleBubbles"></a>autoscaleBubbles</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleBubbles = true</td></tr></table></blockquote><p>True to scale the bubble radius based on plot size.&nbsp; False will use the radius value as provided as a raw pixel value for bubble radius.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.autoscaleMultiplier"></a>autoscaleMultiplier</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleMultiplier = 1.0</td></tr></table></blockquote><p>Multiplier the bubble size if autoscaleBubbles is true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.autoscalePointsFactor"></a>autoscalePointsFactor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscalePointsFactor = -0.07</td></tr></table></blockquote><p>Factor which decreases bubble size based on how many bubbles on on the chart.&nbsp; 0 means no adjustment for number of bubbles.&nbsp; Negative values will decrease size of bubbles as more bubbles are added.&nbsp; Values between 0 and -0.2 should work well.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.escapeHtml"></a>escapeHtml</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = true</td></tr></table></blockquote><p>True to escape html in bubble label text.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight bubbles when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on a slice.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over a bubble.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.highlightColors"></a>highlightColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote><p>An array of colors to use when highlighting a slice.&nbsp; Calculated automatically if not supplied.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.bubbleAlpha"></a>bubbleAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleAlpha = 1.0</td></tr></table></blockquote><p>Alpha transparency to apply to all bubbles in this series.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.highlightAlpha"></a>highlightAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightAlpha = null</td></tr></table></blockquote><p>Alpha transparency to apply when highlighting bubble.&nbsp; Set to value of bubbleAlpha by default.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.bubbleGradients"></a>bubbleGradients</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleGradients = false</td></tr></table></blockquote><p>True to color the bubbles with gradient fills instead of flat colors.&nbsp; NOT AVAILABLE IN IE due to lack of excanvas support for radial gradient fills. will be ignored in IE.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.showLabels"></a>showLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote><p>True to show labels on bubbles (if any), false to not show.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>BubbleRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBubbleColors = true</td></tr></table></blockquote>True to vary the color of each bubble in this series according to the seriesColors array. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleBubbles = true</td></tr></table></blockquote>True to scale the bubble radius based on plot size. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleMultiplier = 1.0</td></tr></table></blockquote>Multiplier the bubble size if autoscaleBubbles is true.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscalePointsFactor = -0.07</td></tr></table></blockquote>Factor which decreases bubble size based on how many bubbles on on the chart. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = true</td></tr></table></blockquote>True to escape html in bubble label text.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight bubbles when moused over. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a bubble. </div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>An array of colors to use when highlighting a slice. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleAlpha = 1.0</td></tr></table></blockquote>Alpha transparency to apply to all bubbles in this series.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightAlpha = null</td></tr></table></blockquote>Alpha transparency to apply when highlighting bubble. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleGradients = false</td></tr></table></blockquote>True to color the bubbles with gradient fills instead of flat colors. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote>True to show labels on bubbles (if any), false to not show.</div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html
new file mode 100644
index 00000000..3c8da0cc
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.CanvasAxisLabelRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.CanvasAxisLabelRenderer"></a>$.jqplot.<wbr>CanvasAxisLabelRenderer</div><div class=CBody><p>Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text.&nbsp; This renderer uses a separate rendering engine to draw the text on the canvas.&nbsp; Two modes of rendering the text are available.&nbsp; If the browser has native font support for canvas fonts (currently Mozila 3.5 and Safari 4), you can enable text rendering with the canvas fillText method.&nbsp; You do so by setting the &ldquo;enableFontSupport&rdquo; option to true.</p><p>Browsers lacking native font support will have the text drawn on the canvas using the Hershey font metrics.&nbsp; Even if the &ldquo;enableFontSupport&rdquo; option is true non-supporting browsers will still render with the Hershey font.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer" >$.jqplot.<wbr>CanvasAxisLabelRenderer</a></td><td class=SDescription>Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.angle" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">angle</a></td><td class=SDescription>angle of text, measured clockwise from x axis.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.show" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">show</a></td><td class=SDescription>wether or not to show the tick (mark and label).</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.showLabel" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">showLabel</a></td><td class=SDescription>wether or not to show the label.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.label" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">label</a></td><td class=SDescription>label for the axis.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.fontFamily" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">fontFamily</a></td><td class=SDescription>CSS spec for the font-family css attribute. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.fontSize" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">fontSize</a></td><td class=SDescription>CSS spec for font size.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.fontWeight" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">fontWeight</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.fontStretch" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">fontStretch</a></td><td class=SDescription>Multiplier to condense or expand font width. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.textColor" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">textColor</a></td><td class=SDescription>css spec for the color attribute.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.enableFontSupport" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">enableFontSupport</a></td><td class=SDescription>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.pt2px" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">pt2px</a></td><td class=SDescription>Point to pixel scaling factor, used for computing height of bounding box around a label. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.angle"></a>angle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote><p>angle of text, measured clockwise from x axis.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to show the tick (mark and label).</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.showLabel"></a>showLabel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote><p>wether or not to show the label.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.label"></a>label</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote><p>label for the axis.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.fontFamily"></a>fontFamily</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote><p>CSS spec for the font-family css attribute.&nbsp; Applies only to browsers supporting native font rendering in the canvas tag.&nbsp; Currently Mozilla 3.5 and Safari 4.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.fontSize"></a>fontSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '11pt'</td></tr></table></blockquote><p>CSS spec for font size.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.fontWeight"></a>fontWeight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>CSS spec for fontWeight: normal, bold, bolder, lighter or a number 100</td><td class=CDLDescription>900</td></tr></table></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.fontStretch"></a>fontStretch</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote><p>Multiplier to condense or expand font width.&nbsp; Applies only to browsers which don&rsquo;t support canvas native font rendering.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.textColor"></a>textColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote><p>css spec for the color attribute.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.enableFontSupport"></a>enableFontSupport</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote><p>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.&nbsp; If true, label will be drawn with canvas tag native support for fonts.&nbsp; If false, label will be drawn with Hershey font metrics.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.pt2px"></a>pt2px</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote><p>Point to pixel scaling factor, used for computing height of bounding box around a label.&nbsp; The labels text renderer has a default setting of 1.4, which should be suitable for most fonts.&nbsp; Leave as null to use default.&nbsp; If tops of letters appear clipped, increase this.&nbsp; If bounding box seems too big, decrease.&nbsp; This is an issue only with the native font renderering capabilities of Mozilla 3.5 and Safari 4 since they do not provide a method to determine the font height.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>CanvasAxisLabelRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>label for the axis.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>CSS spec for the font-family css attribute. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '11pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote></div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote>Point to pixel scaling factor, used for computing height of bounding box around a label. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html
new file mode 100644
index 00000000..bb303eea
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.CanvasAxisTickRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.CanvasAxisTickRenderer"></a>$.jqplot.<wbr>CanvasAxisTickRenderer</div><div class=CBody><p>Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text.&nbsp; This renderer uses a separate rendering engine to draw the text on the canvas.&nbsp; Two modes of rendering the text are available.&nbsp; If the browser has native font support for canvas fonts (currently Mozila 3.5 and Safari 4), you can enable text rendering with the canvas fillText method.&nbsp; You do so by setting the &ldquo;enableFontSupport&rdquo; option to true.</p><p>Browsers lacking native font support will have the text drawn on the canvas using the Hershey font metrics.&nbsp; Even if the &ldquo;enableFontSupport&rdquo; option is true non-supporting browsers will still render with the Hershey font.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer" >$.jqplot.<wbr>CanvasAxisTickRenderer</a></td><td class=SDescription>Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.mark" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">mark</a></td><td class=SDescription>tick mark on the axis. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.showMark" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">showMark</a></td><td class=SDescription>wether or not to show the mark on the axis.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.showGridline" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">showGridline</a></td><td class=SDescription>wether or not to draw the gridline on the grid at this tick.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.isMinorTick" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">isMinorTick</a></td><td class=SDescription>if this is a minor tick.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.angle" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">angle</a></td><td class=SDescription>angle of text, measured clockwise from x axis.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.markSize" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">markSize</a></td><td class=SDescription>Length of the tick marks in pixels. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.show" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">show</a></td><td class=SDescription>wether or not to show the tick (mark and label).</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.showLabel" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">showLabel</a></td><td class=SDescription>wether or not to show the label.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.labelPosition" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">labelPosition</a></td><td class=SDescription>&lsquo;auto&rsquo;, &lsquo;start&rsquo;, &lsquo;middle&rsquo; or &lsquo;end&rsquo;. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.formatter" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">formatter</a></td><td class=SDescription>A class of a formatter for the tick text. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.formatString" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">formatString</a></td><td class=SDescription>string passed to the formatter.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.prefix" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">prefix</a></td><td class=SDescription>String to prepend to the tick label. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.fontFamily" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">fontFamily</a></td><td class=SDescription>css spec for the font-family css attribute.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.fontSize" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">fontSize</a></td><td class=SDescription>CSS spec for font size.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.fontWeight" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">fontWeight</a></td><td class=SDescription>CSS spec for fontWeight</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.fontStretch" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">fontStretch</a></td><td class=SDescription>Multiplier to condense or expand font width. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.textColor" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">textColor</a></td><td class=SDescription>css spec for the color attribute.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.enableFontSupport" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">enableFontSupport</a></td><td class=SDescription>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.pt2px" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')">pt2px</a></td><td class=SDescription>Point to pixel scaling factor, used for computing height of bounding box around a label. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.mark"></a>mark</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote><p>tick mark on the axis.&nbsp; One of &lsquo;inside&rsquo;, &lsquo;outside&rsquo;, &lsquo;cross&rsquo;, &lsquo;&rsquo; or null.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.showMark"></a>showMark</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote><p>wether or not to show the mark on the axis.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.showGridline"></a>showGridline</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote><p>wether or not to draw the gridline on the grid at this tick.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.isMinorTick"></a>isMinorTick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote><p>if this is a minor tick.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.angle"></a>angle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote><p>angle of text, measured clockwise from x axis.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.markSize"></a>markSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 4</td></tr></table></blockquote><p>Length of the tick marks in pixels.&nbsp; For &lsquo;cross&rsquo; style, length will be stoked above and below axis, so total length will be twice this.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to show the tick (mark and label).</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.showLabel"></a>showLabel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote><p>wether or not to show the label.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.labelPosition"></a>labelPosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'auto'</td></tr></table></blockquote><p>&rsquo;auto&rsquo;, &lsquo;start&rsquo;, &lsquo;middle&rsquo; or &lsquo;end&rsquo;.&nbsp; Whether tick label should be positioned so the start, middle, or end of the tick mark.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.formatter"></a>formatter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote><p>A class of a formatter for the tick text.&nbsp; The default $.jqplot.DefaultTickFormatter uses sprintf.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.formatString"></a>formatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote><p>string passed to the formatter.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.prefix"></a>prefix</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote><p>String to prepend to the tick label.&nbsp; Prefix is prepended to the formatted tick label.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.fontFamily"></a>fontFamily</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote><p>css spec for the font-family css attribute.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.fontSize"></a>fontSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '10pt'</td></tr></table></blockquote><p>CSS spec for font size.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.fontWeight"></a>fontWeight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote><p>CSS spec for fontWeight</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.fontStretch"></a>fontStretch</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote><p>Multiplier to condense or expand font width.&nbsp; Applies only to browsers which don&rsquo;t support canvas native font rendering.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.textColor"></a>textColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote><p>css spec for the color attribute.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.enableFontSupport"></a>enableFontSupport</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote><p>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.&nbsp; If true, tick label will be drawn with canvas tag native support for fonts.&nbsp; If false, tick label will be drawn with Hershey font metrics.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.pt2px"></a>pt2px</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote><p>Point to pixel scaling factor, used for computing height of bounding box around a label.&nbsp; The labels text renderer has a default setting of 1.4, which should be suitable for most fonts.&nbsp; Leave as null to use default.&nbsp; If tops of letters appear clipped, increase this.&nbsp; If bounding box seems too big, decrease.&nbsp; This is an issue only with the native font renderering capabilities of Mozilla 3.5 and Safari 4 since they do not provide a method to determine the font height.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>CanvasAxisTickRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote>tick mark on the axis. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 4</td></tr></table></blockquote>Length of the tick marks in pixels. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'auto'</td></tr></table></blockquote>&lsquo;auto&rsquo;, &lsquo;start&rsquo;, &lsquo;middle&rsquo; or &lsquo;end&rsquo;. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote>String to prepend to the tick label. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '10pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote>CSS spec for fontWeight</div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote>Point to pixel scaling factor, used for computing height of bounding box around a label. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasOverlay-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasOverlay-js.html
new file mode 100644
index 00000000..d5998a1c
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasOverlay-js.html
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.CanvasOverlay</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.CanvasOverlay"></a>$.jqplot.<wbr>CanvasOverlay</div><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.CanvasOverlay" >$.jqplot.<wbr>CanvasOverlay</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.objects" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">objects</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.name" >name</a></td><td class=SDescription>Optional name for the overlay object. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.show" >show</a></td><td class=SDescription>true to show (draw), false to not draw.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.lineWidth" >lineWidth</a></td><td class=SDescription>Width of the line.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.lineCap" >lineCap</a></td><td class=SDescription>Type of ending placed on the line [&lsquo;round&rsquo;, &lsquo;butt&rsquo;, &lsquo;square&rsquo;]</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.color" >color</a></td><td class=SDescription>color of the line</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.shadow" >shadow</a></td><td class=SDescription>wether or not to draw a shadow on the line</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.shadowAngle" >shadowAngle</a></td><td class=SDescription>Shadow angle in degrees</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.shadowOffset" >shadowOffset</a></td><td class=SDescription>Shadow offset from line in pixels</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.shadowDepth" >shadowDepth</a></td><td class=SDescription>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.shadowAlpha" >shadowAlpha</a></td><td class=SDescription>Alpha channel transparency of shadow. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.xaxis" >xaxis</a></td><td class=SDescription>X axis to use for positioning/scaling the line.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.yaxis" >yaxis</a></td><td class=SDescription>Y axis to use for positioning/scaling the line.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.showTooltip" >showTooltip</a></td><td class=SDescription>Show a tooltip with data point values.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.showTooltipPrecision" >showTooltipPrecision</a></td><td class=SDescription>Controls how close to line cursor must be to show tooltip. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.tooltipLocation" >tooltipLocation</a></td><td class=SDescription>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.fadeTooltip" >fadeTooltip</a></td><td class=SDescription>true = fade in/out tooltip, flase = show/hide tooltip</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.tooltipFadeSpeed" >tooltipFadeSpeed</a></td><td class=SDescription>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.tooltipOffset" >tooltipOffset</a></td><td class=SDescription>Pixel offset of tooltip from the highlight.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.tooltipFormatString" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">tooltipFormatString</a></td><td class=SDescription>Format string passed the x and y values of the cursor on the line. </td></tr><tr class="SClass"><td class=SEntry><a href="#Line" >Line</a></td><td class=SDescription>A straight line.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Line.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Line.start" >start</a></td><td class=SDescription>[x, y] coordinates for the start of the line.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Line.stop" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">stop</a></td><td class=SDescription>[x, y] coordinates for the end of the line.</td></tr><tr class="SClass"><td class=SEntry><a href="#HorizontalLine" >HorizontalLine</a></td><td class=SDescription>A straight horizontal line.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#HorizontalLine.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#HorizontalLine.y" >y</a></td><td class=SDescription>y value to position the line</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#HorizontalLine.xmin" >xmin</a></td><td class=SDescription>x value for the start of the line, null to scale to axis min.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#HorizontalLine.xmax" >xmax</a></td><td class=SDescription>x value for the end of the line, null to scale to axis max.</td></tr><tr class="SClass"><td class=SEntry><a href="#DashedHorizontalLine" >DashedHorizontalLine</a></td><td class=SDescription>A straight dashed horizontal line.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#DashedHorizontalLine.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#DashedHorizontalLine.dashPattern" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">dashPattern</a></td><td class=SDescription>Array of line, space settings in pixels. </td></tr><tr class="SClass"><td class=SEntry><a href="#VerticalLine" >VerticalLine</a></td><td class=SDescription>A straight vertical line.</td></tr><tr class="SClass"><td class=SEntry><a href="#DashedVerticalLine" >DashedVerticalLine</a></td><td class=SDescription>A straight dashed vertical line.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#DashedVerticalLine.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#DashedVerticalLine.dashPattern" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">dashPattern</a></td><td class=SDescription>Array of line, space settings in pixels. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.objects"></a>objects</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.objects = []</td></tr></table></blockquote></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.name"></a>name</h3><div class=CBody><p>Optional name for the overlay object.&nbsp; Can be later used to retrieve the object by name.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.show"></a>show</h3><div class=CBody><p>true to show (draw), false to not draw.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.lineWidth"></a>lineWidth</h3><div class=CBody><p>Width of the line.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.lineCap"></a>lineCap</h3><div class=CBody><p>Type of ending placed on the line [&lsquo;round&rsquo;, &lsquo;butt&rsquo;, &lsquo;square&rsquo;]</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.color"></a>color</h3><div class=CBody><p>color of the line</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.shadow"></a>shadow</h3><div class=CBody><p>wether or not to draw a shadow on the line</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.shadowAngle"></a>shadowAngle</h3><div class=CBody><p>Shadow angle in degrees</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.shadowOffset"></a>shadowOffset</h3><div class=CBody><p>Shadow offset from line in pixels</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.shadowDepth"></a>shadowDepth</h3><div class=CBody><p>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><p>Alpha channel transparency of shadow.&nbsp; 0 = transparent.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.xaxis"></a>xaxis</h3><div class=CBody><p>X axis to use for positioning/scaling the line.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.yaxis"></a>yaxis</h3><div class=CBody><p>Y axis to use for positioning/scaling the line.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.showTooltip"></a>showTooltip</h3><div class=CBody><p>Show a tooltip with data point values.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.showTooltipPrecision"></a>showTooltipPrecision</h3><div class=CBody><p>Controls how close to line cursor must be to show tooltip.&nbsp; Higher number = closer to line, lower number = farther from line.&nbsp; 1.0 = cursor must be over line.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.tooltipLocation"></a>tooltipLocation</h3><div class=CBody><p>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.fadeTooltip"></a>fadeTooltip</h3><div class=CBody><p>true = fade in/out tooltip, flase = show/hide tooltip</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.tooltipFadeSpeed"></a>tooltipFadeSpeed</h3><div class=CBody><p>&rsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.tooltipOffset"></a>tooltipOffset</h3><div class=CBody><p>Pixel offset of tooltip from the highlight.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.tooltipFormatString"></a>tooltipFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>tooltipFormatString: '%d, %d' }</td></tr></table></blockquote><p>Format string passed the x and y values of the cursor on the line. e.g., &lsquo;Dogs: %.2f, Cats: %d&rsquo;.</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="Line"></a>Line</h2><div class=CBody><p>A straight line.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#Line.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Line.start" >start</a></td><td class=SDescription>[x, y] coordinates for the start of the line.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Line.stop" id=link6 onMouseOver="ShowTip(event, 'tt3', 'link6')" onMouseOut="HideTip('tt3')">stop</a></td><td class=SDescription>[x, y] coordinates for the end of the line.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Line.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Line.start"></a>start</h3><div class=CBody><p>[x, y] coordinates for the start of the line.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Line.stop"></a>stop</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>stop: [] }</td></tr></table></blockquote><p>[x, y] coordinates for the end of the line.</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="HorizontalLine"></a>HorizontalLine</h2><div class=CBody><p>A straight horizontal line.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#HorizontalLine.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#HorizontalLine.y" >y</a></td><td class=SDescription>y value to position the line</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#HorizontalLine.xmin" >xmin</a></td><td class=SDescription>x value for the start of the line, null to scale to axis min.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#HorizontalLine.xmax" >xmax</a></td><td class=SDescription>x value for the end of the line, null to scale to axis max.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="HorizontalLine.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="HorizontalLine.y"></a>y</h3><div class=CBody><p>y value to position the line</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="HorizontalLine.xmin"></a>xmin</h3><div class=CBody><p>x value for the start of the line, null to scale to axis min.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="HorizontalLine.xmax"></a>xmax</h3><div class=CBody><p>x value for the end of the line, null to scale to axis max.</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="DashedHorizontalLine"></a>DashedHorizontalLine</h2><div class=CBody><p>A straight dashed horizontal line.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#DashedHorizontalLine.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#DashedHorizontalLine.dashPattern" id=link7 onMouseOver="ShowTip(event, 'tt4', 'link7')" onMouseOut="HideTip('tt4')">dashPattern</a></td><td class=SDescription>Array of line, space settings in pixels. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="DashedHorizontalLine.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="DashedHorizontalLine.dashPattern"></a>dashPattern</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>dashPattern: [8,8] }</td></tr></table></blockquote><p>Array of line, space settings in pixels.&nbsp; Default is 8 pixel of line, 8 pixel of space.&nbsp; Note, limit to a 2 element array b/c of bug with higher order arrays.</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="VerticalLine"></a>VerticalLine</h2><div class=CBody><p>A straight vertical line.</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="DashedVerticalLine"></a>DashedVerticalLine</h2><div class=CBody><p>A straight dashed vertical line.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#DashedVerticalLine.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#DashedVerticalLine.dashPattern" id=link8 onMouseOver="ShowTip(event, 'tt5', 'link8')" onMouseOut="HideTip('tt5')">dashPattern</a></td><td class=SDescription>Array of line, space settings in pixels. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="DashedVerticalLine.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="DashedVerticalLine.dashPattern"></a>dashPattern</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>dashPattern: [8,8] }</td></tr></table></blockquote><p>Array of line, space settings in pixels.&nbsp; Default is 8 pixel of line, 8 pixel of space.&nbsp; Note, limit to a 2 element array b/c of bug with higher order arrays.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>CanvasOverlay</div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.objects = []</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>tooltipFormatString: '%d, %d' }</td></tr></table></blockquote>Format string passed the x and y values of the cursor on the line. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>stop: [] }</td></tr></table></blockquote>[x, y] coordinates for the end of the line.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>dashPattern: [8,8] }</td></tr></table></blockquote>Array of line, space settings in pixels. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>dashPattern: [8,8] }</td></tr></table></blockquote>Array of line, space settings in pixels. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html
new file mode 100644
index 00000000..993845a7
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.CategoryAxisRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.CategoryAxisRenderer"></a>$.jqplot.<wbr>CategoryAxisRenderer</div><div class=CBody><p>A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.</p><p>To use this renderer, include the plugin in your source</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot; src=&quot;plugins/jqplot.categoryAxisRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>and supply the appropriate options to your plot</p><blockquote><pre>{axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.CategoryAxisRenderer" >$.jqplot.<wbr>CategoryAxisRenderer</a></td><td class=SDescription>A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.CategoryAxisRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CategoryAxisRenderer.sortMergedLabels" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">sortMergedLabels</a></td><td class=SDescription>True to sort tick labels when labels are created by merging x axis values from multiple series. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CategoryAxisRenderer.tickRenderer" >tickRenderer</a></td><td class=SDescription>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="../jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">$.jqplot.AxisTickRenderer</a>. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CategoryAxisRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CategoryAxisRenderer.sortMergedLabels"></a>sortMergedLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortMergedLabels = false</td></tr></table></blockquote><p>True to sort tick labels when labels are created by merging x axis values from multiple series.&nbsp; That is, say you have two series like:</p><blockquote><pre>line1 = [[2006, 4], [2008, 9], [2009, 16]];
+line2 = [[2006, 3], [2007, 7], [2008, 6]];</pre></blockquote><p>If no label array is specified, tick labels will be collected from the x values of the series.&nbsp; With sortMergedLabels set to true, tick labels will be:</p><blockquote><pre>[2006, 2007, 2008, 2009]</pre></blockquote><p>With sortMergedLabels set to false, tick labels will be:</p><blockquote><pre>[2006, 2008, 2009, 2007]</pre></blockquote><p>Note, this property is specified on the renderOptions for the axes when creating a plot:</p><blockquote><pre>axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer, rendererOptions:{sortMergedLabels:true}}}</pre></blockquote></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CategoryAxisRenderer.tickRenderer"></a>tickRenderer</h3><div class=CBody><p>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="../jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt2', 'link3')" onMouseOut="HideTip('tt2')">$.jqplot.AxisTickRenderer</a>. this.tickRenderer = $.jqplot.AxisTickRenderer; this.labelRenderer = $.jqplot.AxisLabelRenderer;</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>CategoryAxisRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortMergedLabels = false</td></tr></table></blockquote>True to sort tick labels when labels are created by merging x axis values from multiple series. </div></div><div class=CToolTip id="tt2"><div class=CClass>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ciParser-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ciParser-js.html
new file mode 100644
index 00000000..de2638ae
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ciParser-js.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.ciParser</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.ciParser"></a>$.jqplot.<wbr>ciParser</div><div class=CBody><p>Data Renderer function which converts a custom JSON data object into jqPlot data format.&nbsp; Set this as a callable on the jqplot dataRenderer plot option:</p><blockquote><pre>plot = $.jqplot('mychart', [data], { dataRenderer: $.jqplot.ciParser, ... });</pre></blockquote><p>Where data is an object in JSON format or a JSON encoded string conforming to the City Index API spec.</p><p>Note that calling the renderer function is handled internally by jqPlot.&nbsp; The user does not have to call the function.&nbsp; The parameters described below will automatically be passed to the ciParser function.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>data</td><td class=CDLDescription>JSON encoded string or object.</td></tr><tr><td class=CDLEntry>plot</td><td class=CDLDescription>reference to jqPlot Plot object.</td></tr></table><h4 class=CHeading>Returns</h4><p>data array in jqPlot format.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>ciParser</div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-cursor-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-cursor-js.html
new file mode 100644
index 00000000..1bfe3285
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-cursor-js.html
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.Cursor</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.Cursor"></a>$.jqplot.<wbr>Cursor</div><div class=CBody><p>Plugin class representing the cursor as displayed on the plot.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.Cursor" >$.jqplot.<wbr>Cursor</a></td><td class=SDescription>Plugin class representing the cursor as displayed on the plot.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.Cursor.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.style" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">style</a></td><td class=SDescription>CSS spec for cursor style</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.show" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">show</a></td><td class=SDescription>wether to show the cursor or not.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.showTooltip" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">showTooltip</a></td><td class=SDescription>show a cursor position tooltip. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.followMouse" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">followMouse</a></td><td class=SDescription>Tooltip follows the mouse, it is not at a fixed location. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.tooltipLocation" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">tooltipLocation</a></td><td class=SDescription>Where to position tooltip. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.tooltipOffset" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">tooltipOffset</a></td><td class=SDescription>Pixel offset of tooltip from the grid boudaries or cursor center.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.showTooltipGridPosition" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">showTooltipGridPosition</a></td><td class=SDescription>show the grid pixel coordinates of the mouse.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.showTooltipUnitPosition" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">showTooltipUnitPosition</a></td><td class=SDescription>show the unit (data) coordinates of the mouse.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.showTooltipDataPosition" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">showTooltipDataPosition</a></td><td class=SDescription>Used with showVerticalLine to show intersecting data points in the tooltip.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.tooltipFormatString" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">tooltipFormatString</a></td><td class=SDescription>sprintf format string for the tooltip. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.useAxesFormatters" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">useAxesFormatters</a></td><td class=SDescription>Use the x and y axes formatters to format the text in the tooltip.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.tooltipAxisGroups" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">tooltipAxisGroups</a></td><td class=SDescription>Show position for the specified axes. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.zoom" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">zoom</a></td><td class=SDescription>Enable plot zooming.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.looseZoom" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">looseZoom</a></td><td class=SDescription>Will expand zoom range to provide more rounded tick values. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.clickReset" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">clickReset</a></td><td class=SDescription>Will reset plot zoom if single click on plot without drag.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.dblClickReset" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">dblClickReset</a></td><td class=SDescription>Will reset plot zoom if double click on plot without drag.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.showVerticalLine" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">showVerticalLine</a></td><td class=SDescription>draw a vertical line across the plot which follows the cursor. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.showHorizontalLine" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">showHorizontalLine</a></td><td class=SDescription>draw a horizontal line across the plot which follows the cursor.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.constrainZoomTo" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')">constrainZoomTo</a></td><td class=SDescription>&lsquo;none&rsquo;, &lsquo;x&rsquo; or &lsquo;y&rsquo;</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.intersectionThreshold" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')">intersectionThreshold</a></td><td class=SDescription>pixel distance from data point or marker to consider cursor lines intersecting with point. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.showCursorLegend" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')">showCursorLegend</a></td><td class=SDescription>Replace the plot legend with an enhanced legend displaying intersection information.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.cursorLegendFormatString" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')">cursorLegendFormatString</a></td><td class=SDescription>Format string used in the cursor legend. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.constrainOutsideZoom" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')">constrainOutsideZoom</a></td><td class=SDescription>True to limit actual zoom area to edges of grid, even when zooming outside of plot area. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.showTooltipOutsideZoom" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')">showTooltipOutsideZoom</a></td><td class=SDescription>True will keep updating the tooltip when zooming of the grid.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.Cursor.methods" >methods</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy" id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')">$.jqplot.<wbr>Cursor.<wbr>zoomProxy</a></td><td class=SDescription>links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.style"></a>style</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'crosshair'</td></tr></table></blockquote><p>CSS spec for cursor style</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote><p>wether to show the cursor or not.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showTooltip"></a>showTooltip</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote><p>show a cursor position tooltip.&nbsp; Location of the tooltip will be controlled by followMouse and tooltipLocation.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.followMouse"></a>followMouse</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.followMouse = false</td></tr></table></blockquote><p>Tooltip follows the mouse, it is not at a fixed location.&nbsp; Tooltip will show on the grid at the location given by tooltipLocation, offset from the grid edge by tooltipOffset.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.tooltipLocation"></a>tooltipLocation</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'se'</td></tr></table></blockquote><p>Where to position tooltip.&nbsp; If followMouse is true, this is relative to the cursor, otherwise, it is relative to the grid.&nbsp; One of &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.tooltipOffset"></a>tooltipOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 6</td></tr></table></blockquote><p>Pixel offset of tooltip from the grid boudaries or cursor center.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showTooltipGridPosition"></a>showTooltipGridPosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipGridPosition = false</td></tr></table></blockquote><p>show the grid pixel coordinates of the mouse.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showTooltipUnitPosition"></a>showTooltipUnitPosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipUnitPosition = true</td></tr></table></blockquote><p>show the unit (data) coordinates of the mouse.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showTooltipDataPosition"></a>showTooltipDataPosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipDataPosition = false</td></tr></table></blockquote><p>Used with showVerticalLine to show intersecting data points in the tooltip.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.tooltipFormatString"></a>tooltipFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.4P, %.4P'</td></tr></table></blockquote><p>sprintf format string for the tooltip.&nbsp; Uses Ash Searle&rsquo;s javascript sprintf implementation found here: <a href="http://hexmen.com/blog/2007/03/printf-sprintf/" class=LURL target=_top>http://hexmen.com/blog/2007/03/printf-sprintf/</a> See <a href="http://perldoc.perl.org/functions/sprintf.html" class=LURL target=_top>http://perldoc.perl.org/functions/sprintf.html</a> for reference Note, if showTooltipDataPosition is true, the default tooltipFormatString will be set to the cursorLegendFormatString, not the default given here.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.useAxesFormatters"></a>useAxesFormatters</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote><p>Use the x and y axes formatters to format the text in the tooltip.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.tooltipAxisGroups"></a>tooltipAxisGroups</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxisGroups = []</td></tr></table></blockquote><p>Show position for the specified axes.&nbsp; This is an array like [[&lsquo;xaxis&rsquo;, &lsquo;yaxis&rsquo;], [&lsquo;xaxis&rsquo;, &lsquo;y2axis&rsquo;]] Default is to compute automatically for all visible axes.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.zoom"></a>zoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.zoom = false</td></tr></table></blockquote><p>Enable plot zooming.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.looseZoom"></a>looseZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.looseZoom = true</td></tr></table></blockquote><p>Will expand zoom range to provide more rounded tick values.&nbsp; Works only with linear, log and date axes.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.clickReset"></a>clickReset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clickReset = false</td></tr></table></blockquote><p>Will reset plot zoom if single click on plot without drag.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.dblClickReset"></a>dblClickReset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dblClickReset = true</td></tr></table></blockquote><p>Will reset plot zoom if double click on plot without drag.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showVerticalLine"></a>showVerticalLine</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showVerticalLine = false</td></tr></table></blockquote><p>draw a vertical line across the plot which follows the cursor.&nbsp; When the line is near a data point, a special legend and/or tooltip can be updated with the data values.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showHorizontalLine"></a>showHorizontalLine</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showHorizontalLine = false</td></tr></table></blockquote><p>draw a horizontal line across the plot which follows the cursor.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.constrainZoomTo"></a>constrainZoomTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainZoomTo = 'none'</td></tr></table></blockquote><p>&rsquo;none&rsquo;, &lsquo;x&rsquo; or &lsquo;y&rsquo;</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.intersectionThreshold"></a>intersectionThreshold</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intersectionThreshold = 2</td></tr></table></blockquote><p>pixel distance from data point or marker to consider cursor lines intersecting with point.&nbsp; If data point markers are not shown, this should be &gt;= 1 or will often miss point intersections.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showCursorLegend"></a>showCursorLegend</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showCursorLegend = false</td></tr></table></blockquote><p>Replace the plot legend with an enhanced legend displaying intersection information.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.cursorLegendFormatString"></a>cursorLegendFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString</td></tr></table></blockquote><p>Format string used in the cursor legend.&nbsp; If showTooltipDataPosition is true, this will also be the default format string used by tooltipFormatString.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.constrainOutsideZoom"></a>constrainOutsideZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainOutsideZoom = true</td></tr></table></blockquote><p>True to limit actual zoom area to edges of grid, even when zooming outside of plot area.&nbsp; That is, can&rsquo;t zoom out by mousing outside plot.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showTooltipOutsideZoom"></a>showTooltipOutsideZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipOutsideZoom = false</td></tr></table></blockquote><p>True will keep updating the tooltip when zooming of the grid.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.methods"></a>methods</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy"></a>$.jqplot.<wbr>Cursor.<wbr>zoomProxy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.Cursor.zoomProxy = function(</td><td class=PParameter nowrap>targetPlot,</td></tr><tr><td></td><td class=PParameter nowrap>controllerPlot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot. controllerPlot will not actually zoom, but acts as an overview plot.&nbsp; Note, the zoom options must be set to true for zoomProxy to work.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>Cursor</div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'crosshair'</td></tr></table></blockquote>CSS spec for cursor style</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>wether to show the cursor or not.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>show a cursor position tooltip. </div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.followMouse = false</td></tr></table></blockquote>Tooltip follows the mouse, it is not at a fixed location. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'se'</td></tr></table></blockquote>Where to position tooltip. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 6</td></tr></table></blockquote>Pixel offset of tooltip from the grid boudaries or cursor center.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipGridPosition = false</td></tr></table></blockquote>show the grid pixel coordinates of the mouse.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipUnitPosition = true</td></tr></table></blockquote>show the unit (data) coordinates of the mouse.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipDataPosition = false</td></tr></table></blockquote>Used with showVerticalLine to show intersecting data points in the tooltip.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.4P, %.4P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxisGroups = []</td></tr></table></blockquote>Show position for the specified axes. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.zoom = false</td></tr></table></blockquote>Enable plot zooming.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.looseZoom = true</td></tr></table></blockquote>Will expand zoom range to provide more rounded tick values. </div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clickReset = false</td></tr></table></blockquote>Will reset plot zoom if single click on plot without drag.</div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dblClickReset = true</td></tr></table></blockquote>Will reset plot zoom if double click on plot without drag.</div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showVerticalLine = false</td></tr></table></blockquote>draw a vertical line across the plot which follows the cursor. </div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showHorizontalLine = false</td></tr></table></blockquote>draw a horizontal line across the plot which follows the cursor.</div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainZoomTo = 'none'</td></tr></table></blockquote>&lsquo;none&rsquo;, &lsquo;x&rsquo; or &lsquo;y&rsquo;</div></div><div class=CToolTip id="tt20"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intersectionThreshold = 2</td></tr></table></blockquote>pixel distance from data point or marker to consider cursor lines intersecting with point. </div></div><div class=CToolTip id="tt21"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showCursorLegend = false</td></tr></table></blockquote>Replace the plot legend with an enhanced legend displaying intersection information.</div></div><div class=CToolTip id="tt22"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString</td></tr></table></blockquote>Format string used in the cursor legend. </div></div><div class=CToolTip id="tt23"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainOutsideZoom = true</td></tr></table></blockquote>True to limit actual zoom area to edges of grid, even when zooming outside of plot area. </div></div><div class=CToolTip id="tt24"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipOutsideZoom = false</td></tr></table></blockquote>True will keep updating the tooltip when zooming of the grid.</div></div><div class=CToolTip id="tt25"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.Cursor.zoomProxy = function(</td><td class=PParameter nowrap>targetPlot,</td></tr><tr><td></td><td class=PParameter nowrap>controllerPlot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html
new file mode 100644
index 00000000..f87d8274
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html
@@ -0,0 +1,101 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.DateAxisRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.DateAxisRenderer"></a>$.jqplot.<wbr>DateAxisRenderer</div><div class=CBody><p>A plugin for a jqPlot to render an axis as a series of date values.&nbsp; This renderer has no options beyond those supplied by the <a href="../jqplot-core-js.html#Axis" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">Axis</a> class.&nbsp; It supplies it&rsquo;s own tick formatter, so the tickOptions.formatter option should not be overridden.</p><p>Thanks to Ken Synder for his enhanced Date instance methods which are included with this code <a href="http://kendsnyder.com/sandbox/date/" class=LURL target=_top>http://kendsnyder.com/sandbox/date/</a>.</p><p>To use this renderer, include the plugin in your source</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot; src=&quot;plugins/jqplot.dateAxisRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>and supply the appropriate options to your plot</p><blockquote><pre>{axes:{xaxis:{renderer:$.jqplot.DateAxisRenderer}}}</pre></blockquote><p>Dates can be passed into the axis in almost any recognizable value and will be parsed.&nbsp; They will be rendered on the axis in the format specified by tickOptions.formatString.&nbsp; e.g. tickOptions.formatString = &lsquo;%Y-%m-%d&rsquo;.</p><p>Accecptable format codes are:</p><blockquote><pre>Code Result Description
+ == Years ==
+%Y 2008 Four-digit year
+%y 08 Two-digit year
+ == Months ==
+%m 09 Two-digit month
+%#m 9 One or two-digit month
+%B September Full month name
+%b Sep Abbreviated month name
+ == Days ==
+%d 05 Two-digit day of month
+%#d 5 One or two-digit day of month
+%e 5 One or two-digit day of month
+%A Sunday Full name of the day of the week
+%a Sun Abbreviated name of the day of the week
+%w 0 Number of the day of the week (0 = Sunday, 6 = Saturday)
+%o th The ordinal suffix string following the day of the month
+ == Hours ==
+%H 23 Hours in 24-hour format (two digits)
+%#H 3 Hours in 24-hour integer format (one or two digits)
+%I 11 Hours in 12-hour format (two digits)
+%#I 3 Hours in 12-hour integer format (one or two digits)
+%p PM AM or PM
+ == Minutes ==
+%M 09 Minutes (two digits)
+%#M 9 Minutes (one or two digits)
+ == Seconds ==
+%S 02 Seconds (two digits)
+%#S 2 Seconds (one or two digits)
+%s 1206567625723 Unix timestamp (Seconds past 1970-01-01 00:00:00)
+ == Milliseconds ==
+%N 008 Milliseconds (three digits)
+%#N 8 Milliseconds (one to three digits)
+ == Timezone ==
+%O 360 difference in minutes between local time and GMT
+%Z Mountain Standard Time Name of timezone as reported by browser
+%G -06:00 Hours and minutes between GMT
+ == Shortcuts ==
+%F 2008-03-26 %Y-%m-%d
+%T 05:06:30 %H:%M:%S
+%X 05:06:30 %H:%M:%S
+%x 03/26/08 %m/%d/%y
+%D 03/26/08 %m/%d/%y
+%#c Wed Mar 26 15:31:00 2008 %a %b %e %H:%M:%S %Y
+%v 3-Sep-2008 %e-%b-%Y
+%R 15:31 %H:%M
+%r 3:31:00 PM %I:%M:%S %p
+ == Characters ==
+%n \n Newline
+%t \t Tab
+%% % Percent Symbol</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.DateAxisRenderer" >$.jqplot.<wbr>DateAxisRenderer</a></td><td class=SDescription>A plugin for a jqPlot to render an axis as a series of date values. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.DateAxisRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DateAxisRenderer.tickRenderer" >tickRenderer</a></td><td class=SDescription>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="../jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">$.jqplot.AxisTickRenderer</a>. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DateAxisRenderer.tickInset" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">tickInset</a></td><td class=SDescription>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DateAxisRenderer.drawBaseline" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">drawBaseline</a></td><td class=SDescription>True to draw the axis baseline.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DateAxisRenderer.baselineWidth" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">baselineWidth</a></td><td class=SDescription>width of the baseline in pixels.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DateAxisRenderer.baselineColor" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">baselineColor</a></td><td class=SDescription>CSS color spec for the baseline.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DateAxisRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DateAxisRenderer.tickRenderer"></a>tickRenderer</h3><div class=CBody><p>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="../jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt1', 'link7')" onMouseOut="HideTip('tt1')">$.jqplot.AxisTickRenderer</a>. this.tickRenderer = $.jqplot.AxisTickRenderer; this.labelRenderer = $.jqplot.AxisLabelRenderer;</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DateAxisRenderer.tickInset"></a>tickInset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInset = 0</td></tr></table></blockquote><p>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.&nbsp; 0 is no inset, 0.5 is one half a tick interval, 1 is a full tick interval, etc.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DateAxisRenderer.drawBaseline"></a>drawBaseline</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote><p>True to draw the axis baseline.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DateAxisRenderer.baselineWidth"></a>baselineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote><p>width of the baseline in pixels.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DateAxisRenderer.baselineColor"></a>baselineColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote><p>CSS color spec for the baseline.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>DateAxisRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInset = 0</td></tr></table></blockquote>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><div class=CToolTip id="tt6"><div class=CClass>An individual axis object. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html
new file mode 100644
index 00000000..a45f0227
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.DonutRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.DonutRenderer"></a>$.jqplot.<wbr>DonutRenderer</div><div class=CBody><p>Plugin renderer to draw a donut chart. x values, if present, will be used as slice labels. y values give slice size.</p><p>To use this renderer, you need to include the donut renderer plugin, for example:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.donutRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Properties described here are passed into the $.jqplot function as options on the series renderer.&nbsp; For example:</p><blockquote><pre>plot2 = $.jqplot('chart2', [s1, s2], {
+ seriesDefaults: {
+ renderer:$.jqplot.DonutRenderer,
+ rendererOptions:{
+ sliceMargin: 2,
+ innerDiameter: 110,
+ startAngle: -90
+ }
+ }
+});</pre></blockquote><p>A donut plot will trigger events on the plot target according to user interaction.&nbsp; All events return the event object, the series index, the point (slice) index, and the point data for the appropriate slice.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>&rsquo;jqplotDataMouseOver&rsquo;</td><td class=CDLDescription>triggered when user mouseing over a slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataHighlight&rsquo;</td><td class=CDLDescription>triggered the first time user mouses over a slice, if highlighting is enabled.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataUnhighlight&rsquo;</td><td class=CDLDescription>triggered when a user moves the mouse out of a highlighted slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataClick&rsquo;</td><td class=CDLDescription>triggered when the user clicks on a slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataRightClick&rsquo;</td><td class=CDLDescription>tiggered when the user right clicks on a slice if the &ldquo;captureRightClick&rdquo; option is set to true on the plot.</td></tr></table><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.DonutRenderer" >$.jqplot.<wbr>DonutRenderer</a></td><td class=SDescription>Plugin renderer to draw a donut chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.DonutRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.diameter" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">diameter</a></td><td class=SDescription>Outer diameter of the donut, auto computed by default</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.innerDiameter" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">innerDiameter</a></td><td class=SDescription>Inner diameter of the donut, auto calculated by default. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.thickness" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">thickness</a></td><td class=SDescription>thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.padding" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">padding</a></td><td class=SDescription>padding between the donut and plot edges, legend, etc.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.sliceMargin" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">sliceMargin</a></td><td class=SDescription>angular spacing between donut slices in degrees.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.ringMargin" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">ringMargin</a></td><td class=SDescription>pixel distance between rings, or multiple series in a donut plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.fill" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">fill</a></td><td class=SDescription>true or false, wether to fil the slices.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.shadowOffset" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">shadowOffset</a></td><td class=SDescription>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.shadowAlpha" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">shadowAlpha</a></td><td class=SDescription>transparency of the shadow (0 = transparent, 1 = opaque)</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.shadowDepth" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">shadowDepth</a></td><td class=SDescription>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.highlightMouseOver" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">highlightMouseOver</a></td><td class=SDescription>True to highlight slice when moused over. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.highlightMouseDown" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over a slice. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.highlightColors" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">highlightColors</a></td><td class=SDescription>an array of colors to use when highlighting a slice.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.dataLabels" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">dataLabels</a></td><td class=SDescription>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.showDataLabels" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">showDataLabels</a></td><td class=SDescription>true to show data labels on slices.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.dataLabelFormatString" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">dataLabelFormatString</a></td><td class=SDescription>Format string for data labels. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.dataLabelThreshold" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">dataLabelThreshold</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.dataLabelPositionFactor" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">dataLabelPositionFactor</a></td><td class=SDescription>A Multiplier (0-1) of the pie radius which controls position of label on slice. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.dataLabelNudge" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')">dataLabelNudge</a></td><td class=SDescription>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.startAngle" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')">startAngle</a></td><td class=SDescription>Angle to start drawing donut in degrees. </td></tr><tr class="SClass"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer" >$.jqplot.<wbr>DonutLegendRenderer</a></td><td class=SDescription>Legend Renderer specific to donut plots. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.numberRows" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.numberColumns" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.diameter"></a>diameter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote><p>Outer diameter of the donut, auto computed by default</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.innerDiameter"></a>innerDiameter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.innerDiameter = null</td></tr></table></blockquote><p>Inner diameter of the donut, auto calculated by default.&nbsp; If specified will override thickness value.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.thickness"></a>thickness</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.thickness = null</td></tr></table></blockquote><p>thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.padding"></a>padding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote><p>padding between the donut and plot edges, legend, etc.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.sliceMargin"></a>sliceMargin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote><p>angular spacing between donut slices in degrees.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.ringMargin"></a>ringMargin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringMargin = null</td></tr></table></blockquote><p>pixel distance between rings, or multiple series in a donut plot. null will compute ringMargin based on sliceMargin.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote><p>true or false, wether to fil the slices.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote><p>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote><p>transparency of the shadow (0 = transparent, 1 = opaque)</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote><p>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight slice when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on a slice.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over a slice.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.highlightColors"></a>highlightColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote><p>an array of colors to use when highlighting a slice.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.dataLabels"></a>dataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote><p>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices.&nbsp; Defaults to percentage of each pie slice.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.showDataLabels"></a>showDataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote><p>true to show data labels on slices.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.dataLabelFormatString"></a>dataLabelFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote><p>Format string for data labels.&nbsp; If none, &lsquo;%s&rsquo; is used for &ldquo;label&rdquo; and for arrays, &lsquo;%d&rsquo; for value and &lsquo;%d%%&rsquo; for percentage.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.dataLabelThreshold"></a>dataLabelThreshold</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>Threshhold in percentage (0</td><td class=CDLDescription>100) of pie area, below which no label will be displayed.&nbsp; This applies to all label types, not just to percentage labels.</td></tr></table></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.dataLabelPositionFactor"></a>dataLabelPositionFactor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.4</td></tr></table></blockquote><p>A Multiplier (0-1) of the pie radius which controls position of label on slice.&nbsp; Increasing will slide label toward edge of pie, decreasing will slide label toward center of pie.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.dataLabelNudge"></a>dataLabelNudge</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 0</td></tr></table></blockquote><p>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.startAngle"></a>startAngle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote><p>Angle to start drawing donut in degrees.&nbsp; According to orientation of canvas coordinate system: 0 = on the positive x axis -90 = on the positive y axis.&nbsp; 90 = on the negaive y axis.&nbsp; 180 or - 180 = on the negative x axis.</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="$.jqplot.DonutLegendRenderer"></a>$.jqplot.<wbr>DonutLegendRenderer</h2><div class=CBody><p>Legend Renderer specific to donut plots.&nbsp; Set by default when user creates a donut plot.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.numberRows" id=link23 onMouseOver="ShowTip(event, 'tt21', 'link23')" onMouseOut="HideTip('tt21')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.numberColumns" id=link24 onMouseOver="ShowTip(event, 'tt22', 'link24')" onMouseOut="HideTip('tt22')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutLegendRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutLegendRenderer.numberRows"></a>numberRows</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote><p>Maximum number of rows in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutLegendRenderer.numberColumns"></a>numberColumns</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote><p>Maximum number of columns in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>DonutRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the donut, auto computed by default</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.innerDiameter = null</td></tr></table></blockquote>Inner diameter of the donut, auto calculated by default. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.thickness = null</td></tr></table></blockquote>thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote>padding between the donut and plot edges, legend, etc.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between donut slices in degrees.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringMargin = null</td></tr></table></blockquote>pixel distance between rings, or multiple series in a donut plot. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.4</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 0</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt20"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing donut in degrees. </div></div><div class=CToolTip id="tt21"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt22"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dragable-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dragable-js.html
new file mode 100644
index 00000000..3479e655
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dragable-js.html
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.Dragable</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.Dragable"></a>$.jqplot.<wbr>Dragable</div><div class=CBody><p>Plugin to make plotted points dragable by the user.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.Dragable" >$.jqplot.<wbr>Dragable</a></td><td class=SDescription>Plugin to make plotted points dragable by the user.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.Dragable.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Dragable.color" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">color</a></td><td class=SDescription>CSS color spec for the dragged point (and adjacent line segment or bar).</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Dragable.constrainTo" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">constrainTo</a></td><td class=SDescription>Constrain dragging motion to an axis or to none. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Dragable.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Dragable.color"></a>color</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote><p>CSS color spec for the dragged point (and adjacent line segment or bar).</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Dragable.constrainTo"></a>constrainTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainTo = 'none'</td></tr></table></blockquote><p>Constrain dragging motion to an axis or to none.&nbsp; Allowable values are &lsquo;none&rsquo;, &lsquo;x&rsquo;, &lsquo;y&rsquo;</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>Dragable</div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote>CSS color spec for the dragged point (and adjacent line segment or bar).</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainTo = 'none'</td></tr></table></blockquote>Constrain dragging motion to an axis or to none. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html
new file mode 100644
index 00000000..b5f5d109
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>/Users/chris/Sites/lib/jqplot/build/plugins/jqplot.enhancedLegendRenderer.js</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqplot.enhancedLegendRenderer.js"></a>jqplot.<wbr>enhancedLegendRenderer.js</div><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#jqplot.enhancedLegendRenderer.js" >jqplot.<wbr>enhancedLegendRenderer.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#numberRows" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#numberColumns" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#seriesToggle" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">seriesToggle</a></td><td class=SDescription>false to not enable series on/off toggling on the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#seriesToggleReplot" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">seriesToggleReplot</a></td><td class=SDescription>True to replot the chart after toggling series on/off. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#disableIEFading" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">disableIEFading</a></td><td class=SDescription>true to toggle series with a show/hide method only and not allow fading in/out. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="numberRows"></a>numberRows</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote><p>Maximum number of rows in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="numberColumns"></a>numberColumns</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote><p>Maximum number of columns in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="seriesToggle"></a>seriesToggle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggle = 'normal'</td></tr></table></blockquote><p>false to not enable series on/off toggling on the legend. true or a fadein/fadeout speed (number of milliseconds or &lsquo;fast&rsquo;, &lsquo;normal&rsquo;, &lsquo;slow&rsquo;) to enable show/hide of series on click of legend item.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="seriesToggleReplot"></a>seriesToggleReplot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggleReplot = false</td></tr></table></blockquote><p>True to replot the chart after toggling series on/off.&nbsp; This will set the series show property to false.&nbsp; This allows for rescaling or other maniplation of chart.&nbsp; Set to an options object (e.g.&nbsp; {resetAxes: true}) for replot options.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="disableIEFading"></a>disableIEFading</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableIEFading = true</td></tr></table></blockquote><p>true to toggle series with a show/hide method only and not allow fading in/out.&nbsp; This is to overcome poor performance of fade in some versions of IE.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>enhancedLegendRenderer.js</div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggle = 'normal'</td></tr></table></blockquote>false to not enable series on/off toggling on the legend. </div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggleReplot = false</td></tr></table></blockquote>True to replot the chart after toggling series on/off. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableIEFading = true</td></tr></table></blockquote>true to toggle series with a show/hide method only and not allow fading in/out. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html
new file mode 100644
index 00000000..17d2cf54
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html
@@ -0,0 +1,87 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.FunnelRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.FunnelRenderer"></a>$.jqplot.<wbr>FunnelRenderer</div><div class=CBody><p>Plugin renderer to draw a funnel chart. x values, if present, will be used as labels. y values give area size.</p><p>Funnel charts will draw a single series only.</p><p>To use this renderer, you need to include the funnel renderer plugin, for example:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.funnelRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Properties described here are passed into the $.jqplot function as options on the series renderer.&nbsp; For example:</p><blockquote><pre>plot2 = $.jqplot('chart2', [s1, s2], {
+ seriesDefaults: {
+ renderer:$.jqplot.FunnelRenderer,
+ rendererOptions:{
+ sectionMargin: 12,
+ widthRatio: 0.3
+ }
+ }
+});</pre></blockquote><p>IMPORTANT</p><p><b>The funnel renderer will reorder data in descending order</b> so the largest value in the data set is first and displayed on top of the funnel.&nbsp; Data will then be displayed in descending order down the funnel.&nbsp; The area of each funnel section will correspond to the value of each data point relative to the sum of all values.&nbsp; That is section area is proportional to section value divided by sum of all section values.</p><p>If your data is not in descending order when passed into the plot, <b>it will be reordered</b> when stored in the series.data property.&nbsp; A copy of the unordered data is kept in the series._unorderedData property.</p><p>A funnel plot will trigger events on the plot target according to user interaction.&nbsp; All events return the event object, the series index, the point (section) index, and the point data for the appropriate section.&nbsp; <b>Note</b> the point index will referr to the ordered data, not the original unordered data.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>&rsquo;jqplotDataMouseOver&rsquo;</td><td class=CDLDescription>triggered when mousing over a section.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataHighlight&rsquo;</td><td class=CDLDescription>triggered the first time user mouses over a section, if highlighting is enabled.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataUnhighlight&rsquo;</td><td class=CDLDescription>triggered when a user moves the mouse out of a highlighted section.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataClick&rsquo;</td><td class=CDLDescription>triggered when the user clicks on a section.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataRightClick&rsquo;</td><td class=CDLDescription>tiggered when the user right clicks on a section if the &ldquo;captureRightClick&rdquo; option is set to true on the plot.</td></tr></table><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.FunnelRenderer" >$.jqplot.<wbr>FunnelRenderer</a></td><td class=SDescription>Plugin renderer to draw a funnel chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.padding" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">padding</a></td><td class=SDescription>padding between the funnel and plot edges, legend, etc.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.sectionMargin" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">sectionMargin</a></td><td class=SDescription>spacing between funnel sections in pixels.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.fill" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">fill</a></td><td class=SDescription>true or false, wether to fill the areas.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.shadowOffset" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">shadowOffset</a></td><td class=SDescription>offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.shadowAlpha" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">shadowAlpha</a></td><td class=SDescription>transparency of the shadow (0 = transparent, 1 = opaque)</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.shadowDepth" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">shadowDepth</a></td><td class=SDescription>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.highlightMouseOver" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">highlightMouseOver</a></td><td class=SDescription>True to highlight area when moused over. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.highlightMouseDown" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over a area. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.highlightColors" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">highlightColors</a></td><td class=SDescription>array of colors to use when highlighting an area.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.widthRatio" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">widthRatio</a></td><td class=SDescription>The ratio of the width of the top of the funnel to the bottom. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.lineWidth" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">lineWidth</a></td><td class=SDescription>width of line if areas are stroked and not filled.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.dataLabels" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">dataLabels</a></td><td class=SDescription>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.showDataLabels" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">showDataLabels</a></td><td class=SDescription>true to show data labels on slices.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.dataLabelFormatString" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">dataLabelFormatString</a></td><td class=SDescription>Format string for data labels. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.dataLabelThreshold" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">dataLabelThreshold</a></td><td class=SDescription></td></tr><tr class="SClass"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer" >$.jqplot.<wbr>FunnelLegendRenderer</a></td><td class=SDescription>Legend Renderer specific to funnel plots. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.numberRows" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.numberColumns" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.padding"></a>padding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = {top: 20, right: 20, bottom: 20, left: 20}</td></tr></table></blockquote><p>padding between the funnel and plot edges, legend, etc.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.sectionMargin"></a>sectionMargin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sectionMargin = 6</td></tr></table></blockquote><p>spacing between funnel sections in pixels.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote><p>true or false, wether to fill the areas.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote><p>offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote><p>transparency of the shadow (0 = transparent, 1 = opaque)</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote><p>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight area when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on a area.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over a area.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.highlightColors"></a>highlightColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote><p>array of colors to use when highlighting an area.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.widthRatio"></a>widthRatio</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.widthRatio = 0.2</td></tr></table></blockquote><p>The ratio of the width of the top of the funnel to the bottom. a ratio of 0 will make an upside down pyramid.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.lineWidth"></a>lineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote><p>width of line if areas are stroked and not filled.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.dataLabels"></a>dataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote><p>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices.&nbsp; Defaults to percentage of each pie slice.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.showDataLabels"></a>showDataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote><p>true to show data labels on slices.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.dataLabelFormatString"></a>dataLabelFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote><p>Format string for data labels.&nbsp; If none, &lsquo;%s&rsquo; is used for &ldquo;label&rdquo; and for arrays, &lsquo;%d&rsquo; for value and &lsquo;%d%%&rsquo; for percentage.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.dataLabelThreshold"></a>dataLabelThreshold</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>Threshhold in percentage (0</td><td class=CDLDescription>100) of pie area, below which no label will be displayed.&nbsp; This applies to all label types, not just to percentage labels.</td></tr></table></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="$.jqplot.FunnelLegendRenderer"></a>$.jqplot.<wbr>FunnelLegendRenderer</h2><div class=CBody><p>Legend Renderer specific to funnel plots.&nbsp; Set by default when the user creates a funnel plot.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.numberRows" id=link18 onMouseOver="ShowTip(event, 'tt16', 'link18')" onMouseOut="HideTip('tt16')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.numberColumns" id=link19 onMouseOver="ShowTip(event, 'tt17', 'link19')" onMouseOut="HideTip('tt17')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelLegendRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelLegendRenderer.numberRows"></a>numberRows</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote><p>Maximum number of rows in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelLegendRenderer.numberColumns"></a>numberColumns</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote><p>Maximum number of columns in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>FunnelRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = {top: 20, right: 20, bottom: 20, left: 20}</td></tr></table></blockquote>padding between the funnel and plot edges, legend, etc.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sectionMargin = 6</td></tr></table></blockquote>spacing between funnel sections in pixels.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fill the areas.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area when moused over. </div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a area. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>array of colors to use when highlighting an area.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.widthRatio = 0.2</td></tr></table></blockquote>The ratio of the width of the top of the funnel to the bottom. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>width of line if areas are stroked and not filled.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-highlighter-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-highlighter-js.html
new file mode 100644
index 00000000..daa8806b
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-highlighter-js.html
@@ -0,0 +1,80 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.Highlighter</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.Highlighter"></a>$.jqplot.<wbr>Highlighter</div><div class=CBody><p>Plugin which will highlight data points when they are moused over.</p><p>To use this plugin, include the js file in your source:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.highlighter.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>A tooltip providing information about the data point is enabled by default.&nbsp; To disable the tooltip, set &ldquo;showTooltip&rdquo; to false.</p><p>You can control what data is displayed in the tooltip with various options.&nbsp; The &ldquo;tooltipAxes&rdquo; option controls wether the x, y or both data values are displayed.</p><p>Some chart types (e.g. hi-low-close) have more than one y value per data point.&nbsp; To display the additional values in the tooltip, set the &ldquo;yvalues&rdquo; option to the desired number of y values present (3 for a hlc chart).</p><p>By default, data values will be formatted with the same formatting specifiers as used to format the axis ticks.&nbsp; A custom format code can be supplied with the tooltipFormatString option.&nbsp; This will apply to all values in the tooltip.</p><p>For more complete control, the &ldquo;formatString&rdquo; option can be set.&nbsp; This Allows conplete control over tooltip formatting.&nbsp; Values are passed to the format string in an order determined by the &ldquo;tooltipAxes&rdquo; and &ldquo;yvalues&rdquo; options.&nbsp; So, if you have a hi-low-close chart and you just want to display the hi-low-close values in the tooltip, you could set a formatString like:</p><blockquote><pre>highlighter: {
+ tooltipAxes: 'y',
+ yvalues: 3,
+ formatString:'&lt;table class=&quot;jqplot-highlighter&quot;&gt;
+ &lt;tr&gt;&lt;td&gt;hi:&lt;/td&gt;&lt;td&gt;%s&lt;/td&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;low:&lt;/td&gt;&lt;td&gt;%s&lt;/td&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;close:&lt;/td&gt;&lt;td&gt;%s&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;'
+}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.Highlighter" >$.jqplot.<wbr>Highlighter</a></td><td class=SDescription>Plugin which will highlight data points when they are moused over.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.Highlighter.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.show" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">show</a></td><td class=SDescription>true to show the highlight.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.markerRenderer" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">markerRenderer</a></td><td class=SDescription>Renderer used to draw the marker of the highlighted point. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.showMarker" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">showMarker</a></td><td class=SDescription>true to show the marker</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.lineWidthAdjust" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">lineWidthAdjust</a></td><td class=SDescription>Pixels to add to the lineWidth of the highlight.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.sizeAdjust" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">sizeAdjust</a></td><td class=SDescription>Pixels to add to the overall size of the highlight.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.showTooltip" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">showTooltip</a></td><td class=SDescription>Show a tooltip with data point values.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.tooltipLocation" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">tooltipLocation</a></td><td class=SDescription>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.fadeTooltip" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">fadeTooltip</a></td><td class=SDescription>true = fade in/out tooltip, flase = show/hide tooltip</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.tooltipFadeSpeed" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">tooltipFadeSpeed</a></td><td class=SDescription>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.tooltipOffset" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">tooltipOffset</a></td><td class=SDescription>Pixel offset of tooltip from the highlight.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.tooltipAxes" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">tooltipAxes</a></td><td class=SDescription>Which axes to display in tooltip, &lsquo;x&rsquo;, &lsquo;y&rsquo; or &lsquo;both&rsquo;, &lsquo;xy&rsquo; or &lsquo;yx&rsquo; &lsquo;both&rsquo; and &lsquo;xy&rsquo; are equivalent, &lsquo;yx&rsquo; reverses order of labels.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.useAxesFormatters" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">useAxesFormatters</a></td><td class=SDescription>Use the x and y axes formatters to format the text in the tooltip.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.tooltipFormatString" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">tooltipFormatString</a></td><td class=SDescription>sprintf format string for the tooltip. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.formatString" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">formatString</a></td><td class=SDescription>alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.yvalues" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">yvalues</a></td><td class=SDescription>Number of y values to expect in the data point array. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.bringSeriesToFront" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">bringSeriesToFront</a></td><td class=SDescription>This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote><p>true to show the highlight.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.markerRenderer"></a>markerRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.markerRenderer = new $.jqplot.MarkerRenderer(</td><td class=PParameter nowrap>{shadow:false}</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Renderer used to draw the marker of the highlighted point.&nbsp; Renderer will assimilate attributes from the data point being highlighted, so no attributes need set on the renderer directly.&nbsp; Default is to turn off shadow drawing on the highlighted point.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.showMarker"></a>showMarker</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote><p>true to show the marker</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.lineWidthAdjust"></a>lineWidthAdjust</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidthAdjust = 2.5</td></tr></table></blockquote><p>Pixels to add to the lineWidth of the highlight.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.sizeAdjust"></a>sizeAdjust</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sizeAdjust = 5</td></tr></table></blockquote><p>Pixels to add to the overall size of the highlight.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.showTooltip"></a>showTooltip</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote><p>Show a tooltip with data point values.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.tooltipLocation"></a>tooltipLocation</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'nw'</td></tr></table></blockquote><p>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.fadeTooltip"></a>fadeTooltip</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fadeTooltip = true</td></tr></table></blockquote><p>true = fade in/out tooltip, flase = show/hide tooltip</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.tooltipFadeSpeed"></a>tooltipFadeSpeed</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFadeSpeed = &quot;fast&quot;</td></tr></table></blockquote><p>&rsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.tooltipOffset"></a>tooltipOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 2</td></tr></table></blockquote><p>Pixel offset of tooltip from the highlight.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.tooltipAxes"></a>tooltipAxes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxes = 'both'</td></tr></table></blockquote><p>Which axes to display in tooltip, &lsquo;x&rsquo;, &lsquo;y&rsquo; or &lsquo;both&rsquo;, &lsquo;xy&rsquo; or &lsquo;yx&rsquo; &lsquo;both&rsquo; and &lsquo;xy&rsquo; are equivalent, &lsquo;yx&rsquo; reverses order of labels.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.useAxesFormatters"></a>useAxesFormatters</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote><p>Use the x and y axes formatters to format the text in the tooltip.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.tooltipFormatString"></a>tooltipFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.5P'</td></tr></table></blockquote><p>sprintf format string for the tooltip.&nbsp; Uses Ash Searle&rsquo;s javascript sprintf implementation found here: <a href="http://hexmen.com/blog/2007/03/printf-sprintf/" class=LURL target=_top>http://hexmen.com/blog/2007/03/printf-sprintf/</a> See <a href="http://perldoc.perl.org/functions/sprintf.html" class=LURL target=_top>http://perldoc.perl.org/functions/sprintf.html</a> for reference.&nbsp; Additional &ldquo;p&rdquo; and &ldquo;P&rdquo; format specifiers added by Chris Leonello.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.formatString"></a>formatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = null</td></tr></table></blockquote><p>alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option.&nbsp; So, you could have a tooltip like: &lsquo;Date: %s, number of cats: %d&rsquo; to format the whole tooltip at one go.&nbsp; If useAxesFormatters is true, values will be formatted according to Axes formatters and you can populate your tooltip string with %s placeholders.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.yvalues"></a>yvalues</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yvalues = 1</td></tr></table></blockquote><p>Number of y values to expect in the data point array.&nbsp; Typically this is 1.&nbsp; Certain plots, like OHLC, will have more y values in each data point array.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.bringSeriesToFront"></a>bringSeriesToFront</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bringSeriesToFront = false</td></tr></table></blockquote><p>This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>Highlighter</div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>true to show the highlight.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.markerRenderer = new $.jqplot.MarkerRenderer(</td><td class=PParameter nowrap>{shadow:false}</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Renderer used to draw the marker of the highlighted point. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote>true to show the marker</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidthAdjust = 2.5</td></tr></table></blockquote>Pixels to add to the lineWidth of the highlight.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sizeAdjust = 5</td></tr></table></blockquote>Pixels to add to the overall size of the highlight.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>Show a tooltip with data point values.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'nw'</td></tr></table></blockquote>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fadeTooltip = true</td></tr></table></blockquote>true = fade in/out tooltip, flase = show/hide tooltip</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFadeSpeed = &quot;fast&quot;</td></tr></table></blockquote>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 2</td></tr></table></blockquote>Pixel offset of tooltip from the highlight.</div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxes = 'both'</td></tr></table></blockquote>Which axes to display in tooltip, &lsquo;x&rsquo;, &lsquo;y&rsquo; or &lsquo;both&rsquo;, &lsquo;xy&rsquo; or &lsquo;yx&rsquo; &lsquo;both&rsquo; and &lsquo;xy&rsquo; are equivalent, &lsquo;yx&rsquo; reverses order of labels.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.5P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = null</td></tr></table></blockquote>alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option. </div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yvalues = 1</td></tr></table></blockquote>Number of y values to expect in the data point array. </div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bringSeriesToFront = false</td></tr></table></blockquote>This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.</div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html
new file mode 100644
index 00000000..4e7317e7
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.LogAxisRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.LogAxisRenderer"></a>$.jqplot.<wbr>LogAxisRenderer</div><div class=CBody><p>A plugin for a jqPlot to render a logarithmic axis.</p><p>To use this renderer, include the plugin in your source</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot; src=&quot;plugins/jqplot.logAxisRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>and supply the appropriate options to your plot</p><blockquote><pre>{axes:{xaxis:{renderer:$.jqplot.LogAxisRenderer}}}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.LogAxisRenderer" >$.jqplot.<wbr>LogAxisRenderer</a></td><td class=SDescription>A plugin for a jqPlot to render a logarithmic axis.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#$.jqplot.LogAxisRenderer.axisDefaults" >axisDefaults</a></td><td class=SDescription>Default properties which will be applied directly to the series.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.LogAxisRenderer.Properties" >Properties</a></td><td class=SDescription>Properties</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LogAxisRenderer.drawBaseline" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">drawBaseline</a></td><td class=SDescription>True to draw the axis baseline.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LogAxisRenderer.minorTicks" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">minorTicks</a></td><td class=SDescription>Number of ticks to add between &ldquo;major&rdquo; ticks. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LogAxisRenderer.axisDefaults"></a>axisDefaults</h3><div class=CBody><p>Default properties which will be applied directly to the series.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LogAxisRenderer.Properties"></a>Properties</h3><div class=CBody><p>Properties</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>base</td><td class=CDLDescription>the logarithmic base, commonly 2, 10 or Math.E</td></tr><tr><td class=CDLEntry>tickDistribution</td><td class=CDLDescription>Deprecated.&nbsp; &ldquo;power&rdquo; distribution of ticks always used.&nbsp; Option has no effect.</td></tr></table></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LogAxisRenderer.drawBaseline"></a>drawBaseline</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote><p>True to draw the axis baseline.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LogAxisRenderer.minorTicks"></a>minorTicks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.minorTicks = 'auto'</td></tr></table></blockquote><p>Number of ticks to add between &ldquo;major&rdquo; ticks.&nbsp; Major ticks are ticks supplied by user or auto computed.&nbsp; Minor ticks cannot be created by user.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>LogAxisRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.minorTicks = 'auto'</td></tr></table></blockquote>Number of ticks to add between &ldquo;major&rdquo; ticks. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html
new file mode 100644
index 00000000..4dfef14c
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.MekkoAxisRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.MekkoAxisRenderer"></a>$.jqplot.<wbr>MekkoAxisRenderer</div><div class=CBody><p>An axis renderer for a Mekko chart.&nbsp; Should be used with a Mekko chart where the mekkoRenderer is used on the series.&nbsp; Displays the Y axis as a range from 0 to 1 (0 to 100%) and the x axis with a tick for each series scaled to the sum of all the y values.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer" >$.jqplot.<wbr>MekkoAxisRenderer</a></td><td class=SDescription>An axis renderer for a Mekko chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer.tickMode" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">tickMode</a></td><td class=SDescription>How to space the ticks on the axis. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer.barLabelRenderer" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">barLabelRenderer</a></td><td class=SDescription>renderer to use to draw labels under each bar.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer.barLabels" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">barLabels</a></td><td class=SDescription>array of labels to put under each bar.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer.barLabelOptions" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">barLabelOptions</a></td><td class=SDescription>options object to pass to the bar label renderer.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoAxisRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoAxisRenderer.tickMode"></a>tickMode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickMode</td></tr></table></blockquote><p>How to space the ticks on the axis.&nbsp; &lsquo;bar&rsquo; will place a tick at the width of each bar.&nbsp; This is the default for the x axis.&nbsp; &lsquo;even&rsquo; will place ticks at even intervals.&nbsp; This is the default for x2 axis and y axis.&nbsp; y axis cannot be changed.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoAxisRenderer.barLabelRenderer"></a>barLabelRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote><p>renderer to use to draw labels under each bar.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoAxisRenderer.barLabels"></a>barLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabels = this.barLabels || []</td></tr></table></blockquote><p>array of labels to put under each bar.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoAxisRenderer.barLabelOptions"></a>barLabelOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelOptions = {}</td></tr></table></blockquote><p>options object to pass to the bar label renderer.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>MekkoAxisRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickMode</td></tr></table></blockquote>How to space the ticks on the axis. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote>renderer to use to draw labels under each bar.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabels = this.barLabels || []</td></tr></table></blockquote>array of labels to put under each bar.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelOptions = {}</td></tr></table></blockquote>options object to pass to the bar label renderer.</div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html
new file mode 100644
index 00000000..dbe71812
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html
@@ -0,0 +1,62 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.MekkoRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.MekkoRenderer"></a>$.jqplot.<wbr>MekkoRenderer</div><div class=CBody><p>Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph. the <a href="jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">$.jqplot.MekkoAxisRenderer</a> should be used with mekko charts.&nbsp; The mekko renderer overrides the default legend renderer with it&rsquo;s own $.jqplot.MekkoLegendRenderer which allows more flexibility to specify number of rows and columns in the legend.</p><p>Data is specified per bar in the chart.&nbsp; You can specify data as an array of y values, or as an array of [label, value] pairs.&nbsp; Note that labels are used only on the first series.&nbsp; Labels on subsequent series are ignored:</p><blockquote><pre>bar1 = [['shirts', 8],['hats', 14],['shoes', 6],['gloves', 16],['dolls', 12]];
+bar2 = [15,6,9,13,6];
+bar3 = [['grumpy',4],['sneezy',2],['happy',7],['sleepy',9],['doc',7]];</pre></blockquote><p>If you want to place labels for each bar under the axis, you use the barLabels option on the axes.&nbsp; The bar labels can be styled with the &ldquo;.jqplot-mekko-barLabel&rdquo; css class.</p><blockquote><pre>barLabels = ['Mickey Mouse', 'Donald Duck', 'Goofy'];
+axes:{xaxis:{barLabels:barLabels}}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.MekkoRenderer" >$.jqplot.<wbr>MekkoRenderer</a></td><td class=SDescription>Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.borderColor" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">borderColor</a></td><td class=SDescription>color of the borders between areas on the chart</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.showBorders" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">showBorders</a></td><td class=SDescription>True to draw borders lines between areas on the chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.setGridData" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">setGridData</a></td><td class=SDescription>converts the user data values to grid coordinates and stores them in the gridData array. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.makeGridData" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">makeGridData</a></td><td class=SDescription>converts any arbitrary data values to grid coordinates and returns them. </td></tr><tr class="SClass"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer" >$.jqplot.<wbr>MekkoLegendRenderer</a></td><td class=SDescription>Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.numberRows" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.numberColumns" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.borderColor"></a>borderColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote><p>color of the borders between areas on the chart</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.showBorders"></a>showBorders</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showBorders = true</td></tr></table></blockquote><p>True to draw borders lines between areas on the chart.&nbsp; False will draw borders lines with the same color as the area.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.Functions"></a>Functions</h3></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.setGridData"></a>setGridData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>converts the user data values to grid coordinates and stores them in the gridData array.&nbsp; Will convert user data into appropriate rectangles.&nbsp; Called with scope of a series.</p></div></div></div>
+
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.makeGridData"></a>makeGridData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>converts any arbitrary data values to grid coordinates and returns them.&nbsp; This method exists so that plugins can use a series&rsquo; linerenderer to generate grid data points without overwriting the grid data associated with that series.&nbsp; Called with scope of a series.</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="$.jqplot.MekkoLegendRenderer"></a>$.jqplot.<wbr>MekkoLegendRenderer</h2><div class=CBody><p>Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.numberRows" id=link8 onMouseOver="ShowTip(event, 'tt5', 'link8')" onMouseOut="HideTip('tt5')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.numberColumns" id=link9 onMouseOver="ShowTip(event, 'tt6', 'link9')" onMouseOut="HideTip('tt6')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoLegendRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoLegendRenderer.numberRows"></a>numberRows</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote><p>Maximum number of rows in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoLegendRenderer.numberColumns"></a>numberColumns</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote><p>Maximum number of columns in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>MekkoRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote>color of the borders between areas on the chart</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showBorders = true</td></tr></table></blockquote>True to draw borders lines between areas on the chart. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt7"><div class=CClass>An axis renderer for a Mekko chart. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html
new file mode 100644
index 00000000..cce6835f
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.MeterGaugeRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.MeterGaugeRenderer"></a>$.jqplot.<wbr>MeterGaugeRenderer</div><div class=CBody><p>Plugin renderer to draw a meter gauge chart.</p><p>Data consists of a single series with 1 data point to position the gauge needle.</p><p>To use this renderer, you need to include the meter gauge renderer plugin, for example:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.meterGaugeRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Properties described here are passed into the $.jqplot function as options on the series renderer.&nbsp; For example:</p><blockquote><pre>plot0 = $.jqplot('chart0',[[18]],{
+ title: 'Network Speed',
+ seriesDefaults: {
+ renderer: $.jqplot.MeterGaugeRenderer,
+ rendererOptions: {
+ label: 'MB/s'
+ }
+ }
+});</pre></blockquote><p>A meterGauge plot does not support events.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer" >$.jqplot.<wbr>MeterGaugeRenderer</a></td><td class=SDescription>Plugin renderer to draw a meter gauge chart.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.diameter" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">diameter</a></td><td class=SDescription>Outer diameter of the meterGauge, auto computed by default</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.padding" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">padding</a></td><td class=SDescription>padding between the meterGauge and plot edges, auto calculated by default.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.shadowOffset" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">shadowOffset</a></td><td class=SDescription>offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.shadowAlpha" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">shadowAlpha</a></td><td class=SDescription>transparency of the shadow (0 = transparent, 1 = opaque)</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.shadowDepth" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">shadowDepth</a></td><td class=SDescription>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.background" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">background</a></td><td class=SDescription>background color of the inside of the gauge.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.ringColor" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">ringColor</a></td><td class=SDescription>color of the outer ring, hub, and needle of the gauge.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.tickColor" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">tickColor</a></td><td class=SDescription>color of the tick marks around the gauge.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.ringWidth" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">ringWidth</a></td><td class=SDescription>width of the ring around the gauge. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.min" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">min</a></td><td class=SDescription>Minimum value on the gauge. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.max" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">max</a></td><td class=SDescription>Maximum value on the gauge. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.ticks" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">ticks</a></td><td class=SDescription>Array of tick values. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.showTicks" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">showTicks</a></td><td class=SDescription>true to show ticks around gauge.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.showTickLabels" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">showTickLabels</a></td><td class=SDescription>true to show tick labels next to ticks.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.label" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">label</a></td><td class=SDescription>A gauge label like &lsquo;kph&rsquo; or &lsquo;Volts&rsquo;</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.labelHeightAdjust" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">labelHeightAdjust</a></td><td class=SDescription>Number of Pixels to offset the label up (-) or down (+) from its default position.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.labelPosition" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">labelPosition</a></td><td class=SDescription>Where to position the label, either &lsquo;inside&rsquo; or &lsquo;bottom&rsquo;.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.intervals" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">intervals</a></td><td class=SDescription>Array of ranges to be drawn around the gauge. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.intervalColors" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')">intervalColors</a></td><td class=SDescription>Array of colors to use for the intervals.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.intervalInnerRadius" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')">intervalInnerRadius</a></td><td class=SDescription>Radius of the inner circle of the interval ring.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.intervalOuterRadius" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')">intervalOuterRadius</a></td><td class=SDescription>Radius of the outer circle of the interval ring.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.tickSpacing" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')">tickSpacing</a></td><td class=SDescription>Degrees between ticks. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.hubRadius" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')">hubRadius</a></td><td class=SDescription>Radius of the hub at the bottom center of gauge which the needle attaches to. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.tickPadding" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')">tickPadding</a></td><td class=SDescription>padding of the tick marks to the outer ring and the tick labels to marks. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.needleThickness" id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')">needleThickness</a></td><td class=SDescription>Maximum thickness the needle. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.needlePad" id=link26 onMouseOver="ShowTip(event, 'tt26', 'link26')" onMouseOut="HideTip('tt26')">needlePad</a></td><td class=SDescription>Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.pegNeedle" id=link27 onMouseOver="ShowTip(event, 'tt27', 'link27')" onMouseOut="HideTip('tt27')">pegNeedle</a></td><td class=SDescription>True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is &ldquo;pegged&rdquo;.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.diameter"></a>diameter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote><p>Outer diameter of the meterGauge, auto computed by default</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.padding"></a>padding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = null</td></tr></table></blockquote><p>padding between the meterGauge and plot edges, auto calculated by default.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote><p>offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote><p>transparency of the shadow (0 = transparent, 1 = opaque)</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 4</td></tr></table></blockquote><p>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.background"></a>background</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = &quot;#efefef&quot;</td></tr></table></blockquote><p>background color of the inside of the gauge.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.ringColor"></a>ringColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringColor = &quot;#BBC6D0&quot;</td></tr></table></blockquote><p>color of the outer ring, hub, and needle of the gauge.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.tickColor"></a>tickColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickColor = &quot;989898&quot;</td></tr></table></blockquote><p>color of the tick marks around the gauge.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.ringWidth"></a>ringWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringWidth = null</td></tr></table></blockquote><p>width of the ring around the gauge.&nbsp; Auto computed by default.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.min"></a>min</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min</td></tr></table></blockquote><p>Minimum value on the gauge.&nbsp; Auto computed by default</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.max"></a>max</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max</td></tr></table></blockquote><p>Maximum value on the gauge.&nbsp; Auto computed by default</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.ticks"></a>ticks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote><p>Array of tick values.&nbsp; Auto computed by default.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.showTicks"></a>showTicks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote><p>true to show ticks around gauge.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.showTickLabels"></a>showTickLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickLabels = true</td></tr></table></blockquote><p>true to show tick labels next to ticks.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.label"></a>label</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote><p>A gauge label like &lsquo;kph&rsquo; or &lsquo;Volts&rsquo;</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.labelHeightAdjust"></a>labelHeightAdjust</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelHeightAdjust = 0</td></tr></table></blockquote><p>Number of Pixels to offset the label up (-) or down (+) from its default position.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.labelPosition"></a>labelPosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'inside'</td></tr></table></blockquote><p>Where to position the label, either &lsquo;inside&rsquo; or &lsquo;bottom&rsquo;.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.intervals"></a>intervals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervals = []</td></tr></table></blockquote><p>Array of ranges to be drawn around the gauge.&nbsp; Array of form:</p><blockquote><pre>[value1, value2, ...]</pre></blockquote><p>indicating the values for the first, second, ... intervals.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.intervalColors"></a>intervalColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalColors = [ &quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;]</td></tr></table></blockquote><p>Array of colors to use for the intervals.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.intervalInnerRadius"></a>intervalInnerRadius</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalInnerRadius = null</td></tr></table></blockquote><p>Radius of the inner circle of the interval ring.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.intervalOuterRadius"></a>intervalOuterRadius</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalOuterRadius = null</td></tr></table></blockquote><p>Radius of the outer circle of the interval ring.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.tickSpacing"></a>tickSpacing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 30</td></tr></table></blockquote><p>Degrees between ticks.&nbsp; This is a target number, if incompatible span and ticks are supplied, a suitable spacing close to this value will be computed.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.hubRadius"></a>hubRadius</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hubRadius = null</td></tr></table></blockquote><p>Radius of the hub at the bottom center of gauge which the needle attaches to.&nbsp; Auto computed by default</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.tickPadding"></a>tickPadding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickPadding = null</td></tr></table></blockquote><p>padding of the tick marks to the outer ring and the tick labels to marks.&nbsp; Auto computed by default.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.needleThickness"></a>needleThickness</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needleThickness = null</td></tr></table></blockquote><p>Maximum thickness the needle.&nbsp; Auto computed by default.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.needlePad"></a>needlePad</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needlePad = 6</td></tr></table></blockquote><p>Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.pegNeedle"></a>pegNeedle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pegNeedle = true</td></tr></table></blockquote><p>True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is &ldquo;pegged&rdquo;.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>MeterGaugeRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the meterGauge, auto computed by default</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = null</td></tr></table></blockquote>padding between the meterGauge and plot edges, auto calculated by default.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 4</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = &quot;#efefef&quot;</td></tr></table></blockquote>background color of the inside of the gauge.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringColor = &quot;#BBC6D0&quot;</td></tr></table></blockquote>color of the outer ring, hub, and needle of the gauge.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickColor = &quot;989898&quot;</td></tr></table></blockquote>color of the tick marks around the gauge.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringWidth = null</td></tr></table></blockquote>width of the ring around the gauge. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min</td></tr></table></blockquote>Minimum value on the gauge. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max</td></tr></table></blockquote>Maximum value on the gauge. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote>Array of tick values. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote>true to show ticks around gauge.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickLabels = true</td></tr></table></blockquote>true to show tick labels next to ticks.</div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote>A gauge label like &lsquo;kph&rsquo; or &lsquo;Volts&rsquo;</div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelHeightAdjust = 0</td></tr></table></blockquote>Number of Pixels to offset the label up (-) or down (+) from its default position.</div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'inside'</td></tr></table></blockquote>Where to position the label, either &lsquo;inside&rsquo; or &lsquo;bottom&rsquo;.</div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervals = []</td></tr></table></blockquote>Array of ranges to be drawn around the gauge. </div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalColors = [ &quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;]</td></tr></table></blockquote>Array of colors to use for the intervals.</div></div><div class=CToolTip id="tt20"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalInnerRadius = null</td></tr></table></blockquote>Radius of the inner circle of the interval ring.</div></div><div class=CToolTip id="tt21"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalOuterRadius = null</td></tr></table></blockquote>Radius of the outer circle of the interval ring.</div></div><div class=CToolTip id="tt22"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 30</td></tr></table></blockquote>Degrees between ticks. </div></div><div class=CToolTip id="tt23"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hubRadius = null</td></tr></table></blockquote>Radius of the hub at the bottom center of gauge which the needle attaches to. </div></div><div class=CToolTip id="tt24"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickPadding = null</td></tr></table></blockquote>padding of the tick marks to the outer ring and the tick labels to marks. </div></div><div class=CToolTip id="tt25"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needleThickness = null</td></tr></table></blockquote>Maximum thickness the needle. </div></div><div class=CToolTip id="tt26"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needlePad = 6</td></tr></table></blockquote>Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.</div></div><div class=CToolTip id="tt27"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pegNeedle = true</td></tr></table></blockquote>True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is &ldquo;pegged&rdquo;.</div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html
new file mode 100644
index 00000000..2a200898
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.OHLCRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.OHLCRenderer"></a>$.jqplot.<wbr>OHLCRenderer</div><div class=CBody><p>jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.</p><p>To use this plugin, include the renderer js file in your source:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.ohlcRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>You will most likely want to use a date axis renderer for the x axis also, so include the date axis render js file also:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.dateAxisRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><h4 class=CHeading>Then you set the renderer in the series options on your plot</h4><blockquote><pre>series: [{renderer:$.jqplot.OHLCRenderer}]</pre></blockquote><p>For OHLC and candlestick charts, data should be specified like so:</p><blockquote><pre>dat = [['07/06/2009',138.7,139.68,135.18,135.4], ['06/29/2009',143.46,144.66,139.79,140.02], ...]</pre></blockquote><p>If the data array has only 4 values per point instead of 5, the renderer will create a Hi Low Close chart instead.&nbsp; In that case, data should be supplied like:</p><blockquote><pre>dat = [['07/06/2009',139.68,135.18,135.4], ['06/29/2009',144.66,139.79,140.02], ...]</pre></blockquote><p>To generate a candlestick chart instead of an OHLC chart, set the &ldquo;candlestick&rdquo; option to true:</p><blockquote><pre>series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}],</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.OHLCRenderer" >$.jqplot.<wbr>OHLCRenderer</a></td><td class=SDescription>jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.candleStick" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">candleStick</a></td><td class=SDescription>true to render chart as candleStick. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.tickLength" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">tickLength</a></td><td class=SDescription>length of the line in pixels indicating open and close price. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.bodyWidth" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">bodyWidth</a></td><td class=SDescription>width of the candlestick body in pixels. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.openColor" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">openColor</a></td><td class=SDescription>color of the open price tick mark. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.closeColor" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">closeColor</a></td><td class=SDescription>color of the close price tick mark. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.wickColor" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">wickColor</a></td><td class=SDescription>color of the hi-lo line thorugh the candlestick body. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.fillUpBody" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">fillUpBody</a></td><td class=SDescription>true to render an &ldquo;up&rdquo; day (close price greater than open price) with a filled candlestick body.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.fillDownBody" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">fillDownBody</a></td><td class=SDescription>true to render a &ldquo;down&rdquo; day (close price lower than open price) with a filled candlestick body.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.upBodyColor" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">upBodyColor</a></td><td class=SDescription>Color of candlestick body of an &ldquo;up&rdquo; day. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.downBodyColor" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">downBodyColor</a></td><td class=SDescription>Color of candlestick body on a &ldquo;down&rdquo; day. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.hlc" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">hlc</a></td><td class=SDescription>true if is a hi-low-close chart (no open price). </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.lineWidth" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">lineWidth</a></td><td class=SDescription>Width of the hi-low line and open/close ticks. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.candleStick"></a>candleStick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.candleStick = false</td></tr></table></blockquote><p>true to render chart as candleStick.&nbsp; Must have an open price, cannot be a hlc chart.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.tickLength"></a>tickLength</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickLength = 'auto'</td></tr></table></blockquote><p>length of the line in pixels indicating open and close price.&nbsp; Default will auto calculate based on plot width and number of points displayed.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.bodyWidth"></a>bodyWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bodyWidth = 'auto'</td></tr></table></blockquote><p>width of the candlestick body in pixels.&nbsp; Default will auto calculate based on plot width and number of candlesticks displayed.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.openColor"></a>openColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.openColor = null</td></tr></table></blockquote><p>color of the open price tick mark.&nbsp; Default is series color.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.closeColor"></a>closeColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.closeColor = null</td></tr></table></blockquote><p>color of the close price tick mark.&nbsp; Default is series color.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.wickColor"></a>wickColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.wickColor = null</td></tr></table></blockquote><p>color of the hi-lo line thorugh the candlestick body.&nbsp; Default is the series color.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.fillUpBody"></a>fillUpBody</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillUpBody = false</td></tr></table></blockquote><p>true to render an &ldquo;up&rdquo; day (close price greater than open price) with a filled candlestick body.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.fillDownBody"></a>fillDownBody</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillDownBody = true</td></tr></table></blockquote><p>true to render a &ldquo;down&rdquo; day (close price lower than open price) with a filled candlestick body.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.upBodyColor"></a>upBodyColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.upBodyColor = null</td></tr></table></blockquote><p>Color of candlestick body of an &ldquo;up&rdquo; day.&nbsp; Default is series color.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.downBodyColor"></a>downBodyColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.downBodyColor = null</td></tr></table></blockquote><p>Color of candlestick body on a &ldquo;down&rdquo; day.&nbsp; Default is series color.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.hlc"></a>hlc</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hlc = false</td></tr></table></blockquote><p>true if is a hi-low-close chart (no open price).&nbsp; This is determined automatically from the series data.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.lineWidth"></a>lineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote><p>Width of the hi-low line and open/close ticks.&nbsp; Must be set in the rendererOptions for the series.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>OHLCRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.candleStick = false</td></tr></table></blockquote>true to render chart as candleStick. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickLength = 'auto'</td></tr></table></blockquote>length of the line in pixels indicating open and close price. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bodyWidth = 'auto'</td></tr></table></blockquote>width of the candlestick body in pixels. </div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.openColor = null</td></tr></table></blockquote>color of the open price tick mark. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.closeColor = null</td></tr></table></blockquote>color of the close price tick mark. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.wickColor = null</td></tr></table></blockquote>color of the hi-lo line thorugh the candlestick body. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillUpBody = false</td></tr></table></blockquote>true to render an &ldquo;up&rdquo; day (close price greater than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillDownBody = true</td></tr></table></blockquote>true to render a &ldquo;down&rdquo; day (close price lower than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.upBodyColor = null</td></tr></table></blockquote>Color of candlestick body of an &ldquo;up&rdquo; day. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.downBodyColor = null</td></tr></table></blockquote>Color of candlestick body on a &ldquo;down&rdquo; day. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hlc = false</td></tr></table></blockquote>true if is a hi-low-close chart (no open price). </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the hi-low line and open/close ticks. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html
new file mode 100644
index 00000000..5e254102
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.PieRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.PieRenderer"></a>$.jqplot.<wbr>PieRenderer</div><div class=CBody><p>Plugin renderer to draw a pie chart. x values, if present, will be used as slice labels. y values give slice size.</p><p>To use this renderer, you need to include the pie renderer plugin, for example:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.pieRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Properties described here are passed into the $.jqplot function as options on the series renderer.&nbsp; For example:</p><blockquote><pre>plot2 = $.jqplot('chart2', [s1, s2], {
+ seriesDefaults: {
+ renderer:$.jqplot.PieRenderer,
+ rendererOptions:{
+ sliceMargin: 2,
+ startAngle: -90
+ }
+ }
+});</pre></blockquote><p>A pie plot will trigger events on the plot target according to user interaction.&nbsp; All events return the event object, the series index, the point (slice) index, and the point data for the appropriate slice.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>&rsquo;jqplotDataMouseOver&rsquo;</td><td class=CDLDescription>triggered when user mouseing over a slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataHighlight&rsquo;</td><td class=CDLDescription>triggered the first time user mouses over a slice, if highlighting is enabled.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataUnhighlight&rsquo;</td><td class=CDLDescription>triggered when a user moves the mouse out of a highlighted slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataClick&rsquo;</td><td class=CDLDescription>triggered when the user clicks on a slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataRightClick&rsquo;</td><td class=CDLDescription>tiggered when the user right clicks on a slice if the &ldquo;captureRightClick&rdquo; option is set to true on the plot.</td></tr></table><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.PieRenderer" >$.jqplot.<wbr>PieRenderer</a></td><td class=SDescription>Plugin renderer to draw a pie chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.PieRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.diameter" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">diameter</a></td><td class=SDescription>Outer diameter of the pie, auto computed by default</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.padding" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">padding</a></td><td class=SDescription>padding between the pie and plot edges, legend, etc.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.sliceMargin" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">sliceMargin</a></td><td class=SDescription>angular spacing between pie slices in degrees.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.fill" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">fill</a></td><td class=SDescription>true or false, wether to fil the slices.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.shadowOffset" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">shadowOffset</a></td><td class=SDescription>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.shadowAlpha" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">shadowAlpha</a></td><td class=SDescription>transparency of the shadow (0 = transparent, 1 = opaque)</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.shadowDepth" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">shadowDepth</a></td><td class=SDescription>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.highlightMouseOver" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">highlightMouseOver</a></td><td class=SDescription>True to highlight slice when moused over. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.highlightMouseDown" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over a slice. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.highlightColors" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">highlightColors</a></td><td class=SDescription>an array of colors to use when highlighting a slice.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabels" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">dataLabels</a></td><td class=SDescription>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.showDataLabels" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">showDataLabels</a></td><td class=SDescription>true to show data labels on slices.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabelFormatString" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">dataLabelFormatString</a></td><td class=SDescription>Format string for data labels. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabelThreshold" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">dataLabelThreshold</a></td><td class=SDescription>Threshhold in percentage (0-100) of pie area, below which no label will be displayed. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabelPositionFactor" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">dataLabelPositionFactor</a></td><td class=SDescription>A Multiplier (0-1) of the pie radius which controls position of label on slice. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabelNudge" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">dataLabelNudge</a></td><td class=SDescription>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabelCenterOn" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">dataLabelCenterOn</a></td><td class=SDescription>True to center the data label at its position. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.startAngle" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">startAngle</a></td><td class=SDescription>Angle to start drawing pie in degrees. </td></tr><tr class="SClass"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer" >$.jqplot.<wbr>PieLegendRenderer</a></td><td class=SDescription>Legend Renderer specific to pie plots. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.numberRows" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.numberColumns" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.diameter"></a>diameter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote><p>Outer diameter of the pie, auto computed by default</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.padding"></a>padding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote><p>padding between the pie and plot edges, legend, etc.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.sliceMargin"></a>sliceMargin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote><p>angular spacing between pie slices in degrees.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote><p>true or false, wether to fil the slices.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote><p>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote><p>transparency of the shadow (0 = transparent, 1 = opaque)</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote><p>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight slice when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on a slice.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over a slice.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.highlightColors"></a>highlightColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote><p>an array of colors to use when highlighting a slice.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabels"></a>dataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote><p>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices.&nbsp; Defaults to percentage of each pie slice.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.showDataLabels"></a>showDataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote><p>true to show data labels on slices.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabelFormatString"></a>dataLabelFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote><p>Format string for data labels.&nbsp; If none, &lsquo;%s&rsquo; is used for &ldquo;label&rdquo; and for arrays, &lsquo;%d&rsquo; for value and &lsquo;%d%%&rsquo; for percentage.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabelThreshold"></a>dataLabelThreshold</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote><p>Threshhold in percentage (0-100) of pie area, below which no label will be displayed.&nbsp; This applies to all label types, not just to percentage labels.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabelPositionFactor"></a>dataLabelPositionFactor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.52</td></tr></table></blockquote><p>A Multiplier (0-1) of the pie radius which controls position of label on slice.&nbsp; Increasing will slide label toward edge of pie, decreasing will slide label toward center of pie.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabelNudge"></a>dataLabelNudge</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 2</td></tr></table></blockquote><p>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabelCenterOn"></a>dataLabelCenterOn</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelCenterOn = true</td></tr></table></blockquote><p>True to center the data label at its position.&nbsp; False to set the inside facing edge of the label at its position.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.startAngle"></a>startAngle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote><p>Angle to start drawing pie in degrees.&nbsp; According to orientation of canvas coordinate system: 0 = on the positive x axis -90 = on the positive y axis.&nbsp; 90 = on the negaive y axis.&nbsp; 180 or - 180 = on the negative x axis.</p></div></div></div>
+
+<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="$.jqplot.PieLegendRenderer"></a>$.jqplot.<wbr>PieLegendRenderer</h2><div class=CBody><p>Legend Renderer specific to pie plots.&nbsp; Set by default when user creates a pie plot.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.numberRows" id=link21 onMouseOver="ShowTip(event, 'tt19', 'link21')" onMouseOut="HideTip('tt19')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.numberColumns" id=link22 onMouseOver="ShowTip(event, 'tt20', 'link22')" onMouseOut="HideTip('tt20')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieLegendRenderer.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieLegendRenderer.numberRows"></a>numberRows</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote><p>Maximum number of rows in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieLegendRenderer.numberColumns"></a>numberColumns</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote><p>Maximum number of columns in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>PieRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the pie, auto computed by default</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote>padding between the pie and plot edges, legend, etc.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between pie slices in degrees.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote>Threshhold in percentage (0-100) of pie area, below which no label will be displayed. </div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.52</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 2</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelCenterOn = true</td></tr></table></blockquote>True to center the data label at its position. </div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing pie in degrees. </div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt20"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pointLabels-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pointLabels-js.html
new file mode 100644
index 00000000..36d309c8
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pointLabels-js.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.PointLabels</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.PointLabels"></a>$.jqplot.<wbr>PointLabels</div><div class=CBody><p>Plugin for putting labels at the data points.</p><p>To use this plugin, include the js file in your source:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.pointLabels.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>By default, the last value in the data ponit array in the data series is used for the label.&nbsp; For most series renderers, extra data can be added to the data point arrays and the last value will be used as the label.</p><p>For instance, this series:</p><blockquote><pre>[[1,4], [3,5], [7,2]]</pre></blockquote><p>Would, by default, use the y values in the labels.&nbsp; Extra data can be added to the series like so:</p><blockquote><pre>[[1,4,'mid'], [3 5,'hi'], [7,2,'low']]</pre></blockquote><p>And now the point labels would be &lsquo;mid&rsquo;, &lsquo;low&rsquo;, and &lsquo;hi&rsquo;.</p><p>Options to the point labels and a custom labels array can be passed into the &ldquo;pointLabels&rdquo; option on the series option like so:</p><blockquote><pre>series:[{pointLabels:{
+ labels:['mid', 'hi', 'low'],
+ location:'se',
+ ypadding: 12
+ }
+}]</pre></blockquote><p>A custom labels array in the options takes precendence over any labels in the series data.&nbsp; If you have a custom labels array in the options, but still want to use values from the series array as labels, set the &ldquo;labelsFromSeries&rdquo; option to true.</p><p>By default, html entities (&lt;, &gt;, etc.) are escaped in point labels.&nbsp; If you want to include actual html markup in the labels, set the &ldquo;escapeHTML&rdquo; option to false.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.PointLabels" >$.jqplot.<wbr>PointLabels</a></td><td class=SDescription>Plugin for putting labels at the data points.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.PointLabels.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.show" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">show</a></td><td class=SDescription>show the labels or not.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.location" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">location</a></td><td class=SDescription>compass location where to position the label around the point. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.labelsFromSeries" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">labelsFromSeries</a></td><td class=SDescription>true to use labels within data point arrays.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.seriesLabelIndex" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">seriesLabelIndex</a></td><td class=SDescription>array index for location of labels within data point arrays. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.labels" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">labels</a></td><td class=SDescription>array of arrays of labels, one array for each series.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.stackedValue" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">stackedValue</a></td><td class=SDescription>true to display value as stacked in a stacked plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.ypadding" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">ypadding</a></td><td class=SDescription>vertical padding in pixels between point and label</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.xpadding" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">xpadding</a></td><td class=SDescription>horizontal padding in pixels between point and label</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.escapeHTML" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">escapeHTML</a></td><td class=SDescription>true to escape html entities in the labels. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.edgeTolerance" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">edgeTolerance</a></td><td class=SDescription>Number of pixels that the label must be away from an axis boundary in order to be drawn. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.formatter" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">formatter</a></td><td class=SDescription>A class of a formatter for the tick text. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.formatString" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">formatString</a></td><td class=SDescription>string passed to the formatter.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.hideZeros" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">hideZeros</a></td><td class=SDescription>true to not show a label for a value which is 0.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote><p>show the labels or not.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.location"></a>location</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'n'</td></tr></table></blockquote><p>compass location where to position the label around the point.&nbsp; &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.labelsFromSeries"></a>labelsFromSeries</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelsFromSeries = false</td></tr></table></blockquote><p>true to use labels within data point arrays.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.seriesLabelIndex"></a>seriesLabelIndex</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesLabelIndex = null</td></tr></table></blockquote><p>array index for location of labels within data point arrays. if null, will use the last element of the data point array.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.labels"></a>labels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote><p>array of arrays of labels, one array for each series.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.stackedValue"></a>stackedValue</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackedValue = false</td></tr></table></blockquote><p>true to display value as stacked in a stacked plot. no effect if labels is specified.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.ypadding"></a>ypadding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ypadding = 6</td></tr></table></blockquote><p>vertical padding in pixels between point and label</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.xpadding"></a>xpadding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xpadding = 6</td></tr></table></blockquote><p>horizontal padding in pixels between point and label</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.escapeHTML"></a>escapeHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = true</td></tr></table></blockquote><p>true to escape html entities in the labels.&nbsp; If you want to include markup in the labels, set to false.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.edgeTolerance"></a>edgeTolerance</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.edgeTolerance = -5</td></tr></table></blockquote><p>Number of pixels that the label must be away from an axis boundary in order to be drawn.&nbsp; Negative values will allow overlap with the grid boundaries.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.formatter"></a>formatter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote><p>A class of a formatter for the tick text.&nbsp; sprintf by default.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.formatString"></a>formatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote><p>string passed to the formatter.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.hideZeros"></a>hideZeros</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hideZeros = false</td></tr></table></blockquote><p>true to not show a label for a value which is 0.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>PointLabels</div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>show the labels or not.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'n'</td></tr></table></blockquote>compass location where to position the label around the point. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelsFromSeries = false</td></tr></table></blockquote>true to use labels within data point arrays.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesLabelIndex = null</td></tr></table></blockquote>array index for location of labels within data point arrays. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote>array of arrays of labels, one array for each series.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackedValue = false</td></tr></table></blockquote>true to display value as stacked in a stacked plot. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ypadding = 6</td></tr></table></blockquote>vertical padding in pixels between point and label</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xpadding = 6</td></tr></table></blockquote>horizontal padding in pixels between point and label</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = true</td></tr></table></blockquote>true to escape html entities in the labels. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.edgeTolerance = -5</td></tr></table></blockquote>Number of pixels that the label must be away from an axis boundary in order to be drawn. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hideZeros = false</td></tr></table></blockquote>true to not show a label for a value which is 0.</div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidAxisRenderer-js.html
new file mode 100644
index 00000000..4cf690b7
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidAxisRenderer-js.html
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>/Users/chris/Sites/lib/jqplot/build/plugins/jqplot.pyramidAxisRenderer.js</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqplot.pyramidAxisRenderer.js"></a>jqplot.<wbr>pyramidAxisRenderer.js</div><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#jqplot.pyramidAxisRenderer.js" >jqplot.<wbr>pyramidAxisRenderer.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#position" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">position</a></td><td class=SDescription>Position of axis. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#drawBaseline" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">drawBaseline</a></td><td class=SDescription>True to draw the axis baseline.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#baselineWidth" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">baselineWidth</a></td><td class=SDescription>width of the baseline in pixels.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#baselineColor" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">baselineColor</a></td><td class=SDescription>CSS color spec for the baseline.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="position"></a>position</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.position = null</td></tr></table></blockquote><p>Position of axis.&nbsp; Values are: top, bottom , left, center, right.&nbsp; By default, x and x2 axes are bottom, y axis is center.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="drawBaseline"></a>drawBaseline</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote><p>True to draw the axis baseline.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="baselineWidth"></a>baselineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote><p>width of the baseline in pixels.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="baselineColor"></a>baselineColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote><p>CSS color spec for the baseline.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>pyramidAxisRenderer.js</div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.position = null</td></tr></table></blockquote>Position of axis. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidGridRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidGridRenderer-js.html
new file mode 100644
index 00000000..2755c0ec
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidGridRenderer-js.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.CanvasGridRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.CanvasGridRenderer"></a>$.jqplot.<wbr>CanvasGridRenderer</div><div class=CBody><p>The default jqPlot grid renderer, creating a grid on a canvas element.&nbsp; The renderer has no additional options beyond the <a href="../jqplot-core-js.html#Grid" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">Grid</a> class.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>CanvasGridRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>Object representing the grid on which the plot is drawn. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidRenderer-js.html
new file mode 100644
index 00000000..3ff6678d
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidRenderer-js.html
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>/Users/chris/Sites/lib/jqplot/build/plugins/jqplot.pyramidRenderer.js</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqplot.pyramidRenderer.js"></a>jqplot.<wbr>pyramidRenderer.js</div><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#jqplot.pyramidRenderer.js" >jqplot.<wbr>pyramidRenderer.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#barPadding" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">barPadding</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#fill" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">fill</a></td><td class=SDescription>True to fill the bars.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#highlightMouseOver" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">highlightMouseOver</a></td><td class=SDescription>True to highlight slice when moused over. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#highlightMouseDown" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over a slice. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#highlightColors" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">highlightColors</a></td><td class=SDescription>an array of colors to use when highlighting a slice.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#synchronizeHighlight" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">synchronizeHighlight</a></td><td class=SDescription>Index of another series to highlight when this series is highlighted. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#offsetBars" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">offsetBars</a></td><td class=SDescription>False will center bars on their y value. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="barPadding"></a>barPadding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 10</td></tr></table></blockquote></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote><p>True to fill the bars.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight slice when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on a slice.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over a slice.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="highlightColors"></a>highlightColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote><p>an array of colors to use when highlighting a slice.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="synchronizeHighlight"></a>synchronizeHighlight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.synchronizeHighlight = false</td></tr></table></blockquote><p>Index of another series to highlight when this series is highlighted. null or false to not synchronize.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="offsetBars"></a>offsetBars</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offsetBars = false</td></tr></table></blockquote><p>False will center bars on their y value.&nbsp; True will push bars up by 1/2 bar width to fill between their y values.&nbsp; If true, there needs to be 1 more tick than there are bars.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>pyramidRenderer.js</div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 10</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>True to fill the bars.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.synchronizeHighlight = false</td></tr></table></blockquote>Index of another series to highlight when this series is highlighted. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offsetBars = false</td></tr></table></blockquote>False will center bars on their y value. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-trendline-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-trendline-js.html
new file mode 100644
index 00000000..e773b711
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-trendline-js.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>$.jqplot.Trendline</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.Trendline"></a>$.jqplot.<wbr>Trendline</div><div class=CBody><p>Plugin which will automatically compute and draw trendlines for plotted data.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.Trendline" >$.jqplot.<wbr>Trendline</a></td><td class=SDescription>Plugin which will automatically compute and draw trendlines for plotted data.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.Trendline.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.show" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">show</a></td><td class=SDescription>Wether or not to show the trend line.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.color" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">color</a></td><td class=SDescription>CSS color spec for the trend line. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.renderer" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">renderer</a></td><td class=SDescription>Renderer to use to draw the trend line. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.rendererOptions" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">rendererOptions</a></td><td class=SDescription>Options to pass to the line renderer. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.label" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">label</a></td><td class=SDescription>Label for the trend line to use in the legend.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.type" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">type</a></td><td class=SDescription>Either &lsquo;exponential&rsquo;, &lsquo;exp&rsquo;, or &lsquo;linear&rsquo;.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.shadow" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">shadow</a></td><td class=SDescription>true or false, wether or not to show the shadow.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.markerRenderer" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">markerRenderer</a></td><td class=SDescription>Renderer to use to draw markers on the line. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.lineWidth" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">lineWidth</a></td><td class=SDescription>Width of the trend line.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.shadowAngle" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">shadowAngle</a></td><td class=SDescription>Angle of the shadow on the trend line.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.shadowOffset" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">shadowOffset</a></td><td class=SDescription>pixel offset for each stroke of the shadow.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.shadowAlpha" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">shadowAlpha</a></td><td class=SDescription>Alpha transparency of the shadow.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.shadowDepth" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">shadowDepth</a></td><td class=SDescription>number of strokes to make of the shadow.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote><p>Wether or not to show the trend line.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.color"></a>color</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote><p>CSS color spec for the trend line.&nbsp; By default this wil be the same color as the primary line.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.renderer"></a>renderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = new $.jqplot.LineRenderer()</td></tr></table></blockquote><p>Renderer to use to draw the trend line.&nbsp; The data series that is plotted may not be rendered as a line.&nbsp; Therefore, we use our own line renderer here to draw a trend line.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.rendererOptions"></a>rendererOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {marker:{show:false}}</td></tr></table></blockquote><p>Options to pass to the line renderer.&nbsp; By default, markers are not shown on trend lines.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.label"></a>label</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote><p>Label for the trend line to use in the legend.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.type"></a>type</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.type = 'linear'</td></tr></table></blockquote><p>Either &lsquo;exponential&rsquo;, &lsquo;exp&rsquo;, or &lsquo;linear&rsquo;.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.shadow"></a>shadow</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote><p>true or false, wether or not to show the shadow.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.markerRenderer"></a>markerRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = {show:false}</td></tr></table></blockquote><p>Renderer to use to draw markers on the line.&nbsp; I think this is wrong.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.lineWidth"></a>lineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote><p>Width of the trend line.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.shadowAngle"></a>shadowAngle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote><p>Angle of the shadow on the trend line.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.0</td></tr></table></blockquote><p>pixel offset for each stroke of the shadow.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote><p>Alpha transparency of the shadow.</p></div></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote><p>number of strokes to make of the shadow.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>Trendline</div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>Wether or not to show the trend line.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>CSS color spec for the trend line. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = new $.jqplot.LineRenderer()</td></tr></table></blockquote>Renderer to use to draw the trend line. </div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {marker:{show:false}}</td></tr></table></blockquote>Options to pass to the line renderer. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>Label for the trend line to use in the legend.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.type = 'linear'</td></tr></table></blockquote>Either &lsquo;exponential&rsquo;, &lsquo;exp&rsquo;, or &lsquo;linear&rsquo;.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>true or false, wether or not to show the shadow.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = {show:false}</td></tr></table></blockquote>Renderer to use to draw markers on the line. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the trend line.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Angle of the shadow on the trend line.</div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.0</td></tr></table></blockquote>pixel offset for each stroke of the shadow.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>Alpha transparency of the shadow.</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>number of strokes to make of the shadow.</div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/usage-txt.html b/wqflask/wqflask/static/packages/jqplot/docs/files/usage-txt.html
new file mode 100644
index 00000000..d4d40098
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/files/usage-txt.html
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>jqPlot Usage</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqPlot_Usage"></a>jqPlot Usage</div><div class=CBody><h4 class=CHeading>Usage Documentation</h4><h4 class=CHeading>Introduction</h4><p>jqPlot is a jQuery plugin to generate pure client-side javascript charts in your web pages.</p><p>The jqPlot home page is at <a href="http://www.jqplot.com/" class=LURL target=_top>http://www.jqplot.com/</a>.</p><p>The project page and downloads are at <a href="http://www.bitbucket.org/cleonello/jqplot/" class=LURL target=_top>http://www.bitbucket.org/cleonello/jqplot/</a>.</p><p>Below are a few examples to demonstrate jqPlot usage.&nbsp; These plots are shown as static images.&nbsp; Many more examples of dynamically rendered plots can be seen on the test and examples pages here: <a href="../../tests/" class=LURL target=_top>../../tests/</a>.</p><h4 class=CHeading>Include the Files</h4><p>jqPlot requires jQuery (1.4+ required for certain features). jQuery is included in the distribution.&nbsp; To use jqPlot include jquery, the jqPlot jQuery plugin, jqPlot css file and optionally the excanvas script for IE support in your web page.&nbsp; Note, excanvas is required only for IE versions below 9.&nbsp; IE 9 includes native support for the canvas element and does not require excanvas:</p><blockquote><pre>&lt;!--[if lt IE 9]&gt;&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;excanvas.js&quot;&gt;&lt;/script&gt;&lt;![endif]--&gt;
+&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jquery.min.js&quot;&gt;&lt;/script&gt;
+&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jquery.jqplot.min.js&quot;&gt;&lt;/script&gt;
+&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;jquery.jqplot.css&quot; /&gt;</pre></blockquote><h4 class=CHeading>Add a plot container</h4><p>Add a container (target) to your web page where you want your plot to show up.&nbsp; Be sure to give your target a width and a height:</p><blockquote><pre>&lt;div id=&quot;chartdiv&quot; style=&quot;height:400px;width:300px; &quot;&gt;&lt;/div&gt;</pre></blockquote><h4 class=CHeading>Create a plot</h4><p>Then, create the actual plot by calling the $.jqplot plugin with the id of your target and some data:</p><blockquote><pre>$.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);</pre></blockquote><p>Which will produce a chart like:</p><img src="images/basicline.png" width="416" height="317"><h4 class=CHeading>Plot Options</h4><p>You can customize the plot by passing options to the $.jqplot function.&nbsp; Options are described in <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">jqPlot Options</a> in the jqPlotOptions.txt file.&nbsp; An example of options usage:</p><blockquote><pre>$.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]],
+{ title:'Exponential Line',
+ axes:{yaxis:{min:-10, max:240}},
+ series:[{color:'#5FAB78'}]
+});</pre></blockquote><p>Which will produce a plot like:</p><img src="images/basicoptions.png" width="417" height="315"><h4 class=CHeading>Using Plugins</h4><p>You can use jqPlot plugins (that is, plugins to the jqPlot plugin) by including them in your html after you include the jqPlot plugin.&nbsp; Here is how to include the log axis plugin:</p><blockquote><pre>&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;jquery.jqplot.css&quot; /&gt;
+&lt;!--[if IE]&gt;&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;excanvas.js&quot;&gt;&lt;/script&gt;&lt;![endif]--&gt;
+&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jquery.min.js&quot;&gt;&lt;/script&gt;
+&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jquery.jqplot.min.js&quot;&gt;&lt;/script&gt;
+&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jqplot.logAxisRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Important note: For jqplot builds r529 and above (0.9.7r529 and higher), you must explicitly enable plugins via either the { show: true } plugin option to the plot or by using the $.jqplot.config.enablePlugins = true; config options set on the page before plot creation.&nbsp; Only plugins that can be immediately active upon loading are affected.&nbsp; This includes non-renderer plugins like cursor, dragable, highlighter, and trendline.</p><p>Here is a the same $.jqplot call but with a log y axis:</p><blockquote><pre>$.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]],
+{ title:'Exponential Line',
+ axes:{yaxis:{renderer: $.jqplot.LogAxisRenderer}},
+ series:[{color:'#5FAB78'}]
+});</pre></blockquote><p>Which produces a plot like:</p><img src="images/basiclogaxis.png" width="416" height="312"><p>You can further customize with options specific to the log axis plugin:</p><blockquote><pre>$.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]],
+{ title:'Exponential Line',
+ axes:{yaxis:{renderer: $.jqplot.LogAxisRenderer, tickDistribution:'power'}},
+ series:[{color:'#5FAB78'}]
+});</pre></blockquote><p>Which makes a plot like:</p><img src="images/basiclogoptions.png" width="416" height="310"><p>For a full list of options, see <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link2 onMouseOver="ShowTip(event, 'tt1', 'link2')" onMouseOut="HideTip('tt1')">jqPlot Options</a> in the jqPlotOptions.txt file.</p><p>You can add as many plugins as you wish.&nbsp; Order is generally not important.&nbsp; Some plugins, like the highlighter plugin which highlights data points near the mouse, don&rsquo;t need any extra options or setup to function.&nbsp; Highlighter does have additional options which the user can set.</p><p>Other plugins, the barRenderer for example, provide functionality the must be specified in the chart options object.&nbsp; To render a series as a bar graph with the bar renderer, you would first include the plugin after jqPlot:</p><blockquote><pre>&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.barRenderer.min.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Then you would create a chart like:</p><blockquote><pre>$.jqplot('chartdiv', [[34.53, 56.32, 25.1, 18.6]], {series:[{renderer:$.jqplot.BarRenderer}]});</pre></blockquote><p>Here the default LineRenderer is replaced by a BarRenderer to generate a bar graph for the first (an only) series.</p></div></div></div>
+
+</div><!--Content-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile id=MSelected>Usage</div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->
+
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CSection><b>This document is out of date. </div></div><!--END_ND_TOOLTIPS-->
+
+
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index.html b/wqflask/wqflask/static/packages/jqplot/docs/index.html
new file mode 100644
index 00000000..295fd4a6
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index.html
@@ -0,0 +1 @@
+<html><head><meta http-equiv="Refresh" CONTENT="0; URL=files/usage-txt.html"></head></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Classes.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Classes.html
new file mode 100644
index 00000000..f34f9a3e
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index/Classes.html
@@ -0,0 +1,70 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Class Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Class Index</div><div class=INavigationBar><a href="#Symbols">$#!</a> &middot; 0-9 &middot; <a href="#A">A</a> &middot; B &middot; C &middot; <a href="#D">D</a> &middot; E &middot; F &middot; <a href="#G">G</a> &middot; <a href="#H">H</a> &middot; I &middot; <a href="#J">J</a> &middot; K &middot; <a href="#L">L</a> &middot; M &middot; N &middot; O &middot; P &middot; Q &middot; R &middot; <a href="#S">S</a> &middot; <a href="#T">T</a> &middot; U &middot; <a href="#V">V</a> &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="Symbols"></a>$#!</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-toImage-js.html#$.fn" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>$.fn</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>$.jqplot</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>$.jqplot.<wbr>AxisLabelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=ISymbol>$.jqplot.<wbr>AxisTickRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=ISymbol>$.jqplot.<wbr>BarRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>$.jqplot.<wbr>BezierCurveRenderer.js</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>$.jqplot.<wbr>BlockRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>$.jqplot.<wbr>BubbleRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>$.jqplot.<wbr>CanvasAxisLabelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>$.jqplot.<wbr>CanvasAxisTickRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>$.jqplot.<wbr>CanvasGridRenderer</span><div class=ISubIndex><a href="../files/jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=IFile>jqplot.<wbr>canvasGridRenderer.js</a><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html#$.jqplot.CanvasGridRenderer" id=link12 onMouseOver="ShowTip(event, 'tt11', 'link12')" onMouseOut="HideTip('tt11')" class=IFile>plugins/<wbr>jqplot.<wbr>pyramidGridRenderer.js</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay" class=ISymbol>$.jqplot.<wbr>CanvasOverlay</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer" id=link13 onMouseOver="ShowTip(event, 'tt12', 'link13')" onMouseOut="HideTip('tt12')" class=ISymbol>$.jqplot.<wbr>CategoryAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ciParser-js.html#$.jqplot.ciParser" id=link14 onMouseOver="ShowTip(event, 'tt13', 'link14')" onMouseOut="HideTip('tt13')" class=ISymbol>$.jqplot.<wbr>ciParser</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor" id=link15 onMouseOver="ShowTip(event, 'tt14', 'link15')" onMouseOut="HideTip('tt14')" class=ISymbol>$.jqplot.<wbr>Cursor</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer" id=link16 onMouseOver="ShowTip(event, 'tt15', 'link16')" onMouseOut="HideTip('tt15')" class=ISymbol>$.jqplot.<wbr>DateAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" id=link17 onMouseOver="ShowTip(event, 'tt16', 'link17')" onMouseOut="HideTip('tt16')" class=ISymbol>$.jqplot.<wbr>DivTitleRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer" id=link18 onMouseOver="ShowTip(event, 'tt17', 'link18')" onMouseOut="HideTip('tt17')" class=ISymbol>$.jqplot.<wbr>DonutLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer" id=link19 onMouseOver="ShowTip(event, 'tt18', 'link19')" onMouseOut="HideTip('tt18')" class=ISymbol>$.jqplot.<wbr>DonutRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable" id=link20 onMouseOver="ShowTip(event, 'tt19', 'link20')" onMouseOut="HideTip('tt19')" class=ISymbol>$.jqplot.<wbr>Dragable</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer" id=link21 onMouseOver="ShowTip(event, 'tt20', 'link21')" onMouseOut="HideTip('tt20')" class=ISymbol>$.jqplot.<wbr>FunnelLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer" id=link22 onMouseOver="ShowTip(event, 'tt21', 'link22')" onMouseOut="HideTip('tt21')" class=ISymbol>$.jqplot.<wbr>FunnelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter" id=link23 onMouseOver="ShowTip(event, 'tt22', 'link23')" onMouseOut="HideTip('tt22')" class=ISymbol>$.jqplot.<wbr>Highlighter</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer" id=link24 onMouseOver="ShowTip(event, 'tt23', 'link24')" onMouseOut="HideTip('tt23')" class=ISymbol>$.jqplot.<wbr>LinearAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" id=link25 onMouseOver="ShowTip(event, 'tt24', 'link25')" onMouseOut="HideTip('tt24')" class=ISymbol>$.jqplot.<wbr>LineRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer" id=link26 onMouseOver="ShowTip(event, 'tt25', 'link26')" onMouseOut="HideTip('tt25')" class=ISymbol>$.jqplot.<wbr>LogAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" id=link27 onMouseOver="ShowTip(event, 'tt26', 'link27')" onMouseOut="HideTip('tt26')" class=ISymbol>$.jqplot.<wbr>MarkerRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer" id=link28 onMouseOver="ShowTip(event, 'tt27', 'link28')" onMouseOut="HideTip('tt27')" class=ISymbol>$.jqplot.<wbr>MekkoAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer" id=link29 onMouseOver="ShowTip(event, 'tt28', 'link29')" onMouseOut="HideTip('tt28')" class=ISymbol>$.jqplot.<wbr>MekkoLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer" id=link30 onMouseOver="ShowTip(event, 'tt29', 'link30')" onMouseOut="HideTip('tt29')" class=ISymbol>$.jqplot.<wbr>MekkoRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer" id=link31 onMouseOver="ShowTip(event, 'tt30', 'link31')" onMouseOut="HideTip('tt30')" class=ISymbol>$.jqplot.<wbr>MeterGaugeRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer" id=link32 onMouseOver="ShowTip(event, 'tt31', 'link32')" onMouseOut="HideTip('tt31')" class=ISymbol>$.jqplot.<wbr>OHLCRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer" id=link33 onMouseOver="ShowTip(event, 'tt32', 'link33')" onMouseOut="HideTip('tt32')" class=ISymbol>$.jqplot.<wbr>PieLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer" id=link34 onMouseOver="ShowTip(event, 'tt33', 'link34')" onMouseOut="HideTip('tt33')" class=ISymbol>$.jqplot.<wbr>PieRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels" id=link35 onMouseOver="ShowTip(event, 'tt34', 'link35')" onMouseOut="HideTip('tt34')" class=ISymbol>$.jqplot.<wbr>PointLabels</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer" id=link36 onMouseOver="ShowTip(event, 'tt35', 'link36')" onMouseOut="HideTip('tt35')" class=ISymbol>$.jqplot.<wbr>shadowRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer" id=link37 onMouseOver="ShowTip(event, 'tt36', 'link37')" onMouseOut="HideTip('tt36')" class=ISymbol>$.jqplot.<wbr>shapeRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine" id=link38 onMouseOver="ShowTip(event, 'tt37', 'link38')" onMouseOut="HideTip('tt37')" class=ISymbol>$.jqplot.<wbr>ThemeEngine</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline" id=link39 onMouseOver="ShowTip(event, 'tt38', 'link39')" onMouseOut="HideTip('tt38')" class=ISymbol>$.jqplot.<wbr>Trendline</a></td></tr><tr><td class=IHeading><a name="A"></a>A</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis" id=link40 onMouseOver="ShowTip(event, 'tt39', 'link40')" onMouseOut="HideTip('tt39')" class=ISymbol>Axis</a></td></tr><tr><td class=IHeading><a name="D"></a>D</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine" id=link41 onMouseOver="ShowTip(event, 'tt40', 'link41')" onMouseOut="HideTip('tt40')" class=ISymbol>DashedHorizontalLine</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine" id=link42 onMouseOver="ShowTip(event, 'tt41', 'link42')" onMouseOut="HideTip('tt41')" class=ISymbol>DashedVerticalLine</a></td></tr><tr><td class=IHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid" id=link43 onMouseOver="ShowTip(event, 'tt42', 'link43')" onMouseOut="HideTip('tt42')" class=ISymbol>Grid</a></td></tr><tr><td class=IHeading><a name="H"></a>H</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine" id=link44 onMouseOver="ShowTip(event, 'tt43', 'link44')" onMouseOut="HideTip('tt43')" class=ISymbol>HorizontalLine</a></td></tr><tr><td class=IHeading><a name="J"></a>J</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot" id=link45 onMouseOver="ShowTip(event, 'tt44', 'link45')" onMouseOut="HideTip('tt44')" class=ISymbol>jqPlot</a></td></tr><tr><td class=IHeading><a name="L"></a>L</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend" id=link46 onMouseOver="ShowTip(event, 'tt45', 'link46')" onMouseOut="HideTip('tt45')" class=ISymbol>Legend</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line" id=link47 onMouseOver="ShowTip(event, 'tt46', 'link47')" onMouseOut="HideTip('tt46')" class=ISymbol>Line</a></td></tr><tr><td class=IHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series" id=link48 onMouseOver="ShowTip(event, 'tt47', 'link48')" onMouseOut="HideTip('tt47')" class=ISymbol>Series</a></td></tr><tr><td class=IHeading><a name="T"></a>T</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title" id=link49 onMouseOver="ShowTip(event, 'tt48', 'link49')" onMouseOut="HideTip('tt48')" class=ISymbol>Title</a></td></tr><tr><td class=IHeading><a name="V"></a>V</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#VerticalLine" id=link50 onMouseOver="ShowTip(event, 'tt49', 'link50')" onMouseOut="HideTip('tt49')" class=ISymbol>VerticalLine</a></td></tr></table>
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>jQuery namespace to attach functions to jQuery elements.</div></div><div class=CToolTip id="tt2"><div class=CClass>jQuery function called by the user to create a plot.</div></div><div class=CToolTip id="tt3"><div class=CClass>Renderer to place labels on the axes.</div></div><div class=CToolTip id="tt4"><div class=CClass>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</div></div><div class=CToolTip id="tt5"><div class=CClass>A plugin renderer for jqPlot to draw a bar plot. </div></div><div class=CToolTip id="tt6"><div class=CClass>Renderer which draws lines as stacked bezier curves. </div></div><div class=CToolTip id="tt7"><div class=CClass>Plugin renderer to draw a x-y block chart. </div></div><div class=CToolTip id="tt8"><div class=CClass>Plugin renderer to draw a bubble chart. </div></div><div class=CToolTip id="tt9"><div class=CClass>Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text. </div></div><div class=CToolTip id="tt10"><div class=CClass>Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text. </div></div><div class=CToolTip id="tt11"><div class=CClass>The default jqPlot grid renderer, creating a grid on a canvas element. </div></div><div class=CToolTip id="tt12"><div class=CClass>A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.</div></div><div class=CToolTip id="tt13"><div class=CClass>Data Renderer function which converts a custom JSON data object into jqPlot data format. </div></div><div class=CToolTip id="tt14"><div class=CClass>Plugin class representing the cursor as displayed on the plot.</div></div><div class=CToolTip id="tt15"><div class=CClass>A plugin for a jqPlot to render an axis as a series of date values. </div></div><div class=CToolTip id="tt16"><div class=CClass>The default title renderer for jqPlot. </div></div><div class=CToolTip id="tt17"><div class=CClass>Legend Renderer specific to donut plots. </div></div><div class=CToolTip id="tt18"><div class=CClass>Plugin renderer to draw a donut chart. </div></div><div class=CToolTip id="tt19"><div class=CClass>Plugin to make plotted points dragable by the user.</div></div><div class=CToolTip id="tt20"><div class=CClass>Legend Renderer specific to funnel plots. </div></div><div class=CToolTip id="tt21"><div class=CClass>Plugin renderer to draw a funnel chart. </div></div><div class=CToolTip id="tt22"><div class=CClass>Plugin which will highlight data points when they are moused over.</div></div><div class=CToolTip id="tt23"><div class=CClass>The default jqPlot axis renderer, creating a numeric axis.</div></div><div class=CToolTip id="tt24"><div class=CClass>The default line renderer for jqPlot, this class has no options beyond the Series class. </div></div><div class=CToolTip id="tt25"><div class=CClass>A plugin for a jqPlot to render a logarithmic axis.</div></div><div class=CToolTip id="tt26"><div class=CClass>The default jqPlot marker renderer, rendering the points on the line.</div></div><div class=CToolTip id="tt27"><div class=CClass>An axis renderer for a Mekko chart. </div></div><div class=CToolTip id="tt28"><div class=CClass>Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.</div></div><div class=CToolTip id="tt29"><div class=CClass>Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph. </div></div><div class=CToolTip id="tt30"><div class=CClass>Plugin renderer to draw a meter gauge chart.</div></div><div class=CToolTip id="tt31"><div class=CClass>jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.</div></div><div class=CToolTip id="tt32"><div class=CClass>Legend Renderer specific to pie plots. </div></div><div class=CToolTip id="tt33"><div class=CClass>Plugin renderer to draw a pie chart. </div></div><div class=CToolTip id="tt34"><div class=CClass>Plugin for putting labels at the data points.</div></div><div class=CToolTip id="tt35"><div class=CClass>The default jqPlot shadow renderer, rendering shadows behind shapes.</div></div><div class=CToolTip id="tt36"><div class=CClass>The default jqPlot shape renderer. </div></div><div class=CToolTip id="tt37"><div class=CClass>Theme Engine provides a programatic way to change some of the more common jqplot styling options such as fonts, colors and grid options. </div></div><div class=CToolTip id="tt38"><div class=CClass>Plugin which will automatically compute and draw trendlines for plotted data.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt39"><div class=CClass>An individual axis object. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt40"><div class=CClass>A straight dashed horizontal line.</div></div><div class=CToolTip id="tt41"><div class=CClass>A straight dashed vertical line.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt42"><div class=CClass>Object representing the grid on which the plot is drawn. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt43"><div class=CClass>A straight horizontal line.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt44"><div class=CClass>Plot object returned by call to $.jqplot. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt45"><div class=CClass>Legend object. </div></div><div class=CToolTip id="tt46"><div class=CClass>A straight line.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt47"><div class=CClass>An individual data series object. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt48"><div class=CClass>Plot Title object. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt49"><div class=CClass>A straight vertical line.</div></div><!--END_ND_TOOLTIPS-->
+
+</div><!--Index-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Classes</div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Files.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Files.html
new file mode 100644
index 00000000..9198c422
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index/Files.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>File Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>File Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; A &middot; B &middot; C &middot; D &middot; E &middot; F &middot; G &middot; H &middot; I &middot; <a href="#J">J</a> &middot; K &middot; L &middot; M &middot; N &middot; O &middot; P &middot; Q &middot; R &middot; S &middot; T &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="J"></a>J</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#jqplot.enhancedLegendRenderer.js" class=ISymbol>jqplot.<wbr>enhancedLegendRenderer.js</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#jqplot.pyramidAxisRenderer.js" class=ISymbol>jqplot.<wbr>pyramidAxisRenderer.js</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#jqplot.pyramidRenderer.js" class=ISymbol>jqplot.<wbr>pyramidRenderer.js</a></td></tr></table>
+<!--START_ND_TOOLTIPS-->
+<!--END_ND_TOOLTIPS-->
+
+</div><!--Index-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Files</div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Functions.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Functions.html
new file mode 100644
index 00000000..dbc1d7cf
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index/Functions.html
@@ -0,0 +1,70 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Function Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; A &middot; B &middot; <a href="#C">C</a> &middot; <a href="#D">D</a> &middot; E &middot; F &middot; <a href="#G">G</a> &middot; H &middot; <a href="#I">I</a> &middot; J &middot; K &middot; L &middot; <a href="#M">M</a> &middot; <a href="#N">N</a> &middot; O &middot; P &middot; <a href="#Q">Q</a> &middot; <a href="#R">R</a> &middot; <a href="#S">S</a> &middot; T &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; <a href="#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="C"></a>C</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.copy" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>copy</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=IHeading><a name="D"></a>D</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.destroy" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>destroy</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>draw</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.draw" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.draw" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.draw" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=IParent>jqPlot</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.drawSeries" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>drawSeries</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.get" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>get</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemeNames" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>getThemeNames</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemes" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>getThemes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=IHeading><a name="I"></a>I</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.init" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>init</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="M"></a>M</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>makeGridData</span><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.makeGridData" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.makeGridData" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.moveBlock" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=ISymbol>moveBlock</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToBack" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=ISymbol>moveSeriesToBack</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToFront" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=ISymbol>moveSeriesToFront</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="N"></a>N</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.newTheme" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=ISymbol>newTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=IHeading><a name="Q"></a>Q</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.quickInit" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" class=ISymbol>quickInit</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="R"></a>R</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.redraw" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')" class=ISymbol>redraw</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.reInitialize" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')" class=ISymbol>reInitialize</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.remove" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')" class=ISymbol>remove</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.rename" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')" class=ISymbol>rename</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.replot" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')" class=ISymbol>replot</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.resetAxesScale" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')" class=ISymbol>resetAxesScale</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restoreOriginalSeriesOrder" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')" class=ISymbol>restoreOriginalSeriesOrder</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restorePreviousSeriesOrder" id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')" class=ISymbol>restorePreviousSeriesOrder</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>setGridData</span><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.setGridData" id=link26 onMouseOver="ShowTip(event, 'tt26', 'link26')" onMouseOut="HideTip('tt26')" class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.setGridData" id=link27 onMouseOver="ShowTip(event, 'tt27', 'link27')" onMouseOut="HideTip('tt27')" class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></td></tr><tr><td class=IHeading><a name="Z"></a>Z</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy" id=link28 onMouseOver="ShowTip(event, 'tt28', 'link28')" onMouseOut="HideTip('tt28')" class=ISymbol>zoomProxy</a>, <span class=IParent>$.jqplot.<wbr>Cursor.$.jqplot.<wbr>Cursor</span></td></tr></table>
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.copy = function (</td><td class=PParameter nowrap>sourceName,</td></tr><tr><td></td><td class=PParameter nowrap>targetName,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Create a copy of an existing theme in the themeEngine, adding it the themeEngine.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.destroy = function()</td></tr></table></blockquote>Releases all resources occupied by the plot</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShadowRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws an transparent black (i.e. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShapeRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws the shape.</div></div><div class=CToolTip id="tt5"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.draw = function()</td></tr></table></blockquote>Draws all elements of the plot into the container. </div></div><div class=CToolTip id="tt6"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.drawSeries = function(</td><td class=PParameter nowrap>options,</td></tr><tr><td></td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Redraws all or just one series on the plot. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt7"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.get = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Get and return the named theme or the active theme if no name given.</div></div><div class=CToolTip id="tt8"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemeNames = function()</td></tr></table></blockquote>Return the list of theme names in this manager in alpha-numerical order.</div></div><div class=CToolTip id="tt9"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemes = function()</td></tr></table></blockquote>Return a list of themes in alpha-numerical order by name.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt10"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.init = function(</td><td class=PParameter nowrap>target,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>sets the plot target, checks data and applies user options to plot.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt11"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><div class=CToolTip id="tt12"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><div class=CToolTip id="tt13"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveBlock = function (</td><td class=PParameter nowrap>idx,</td></tr><tr><td></td><td class=PParameter nowrap>x,</td></tr><tr><td></td><td class=PParameter nowrap>y,</td></tr><tr><td></td><td class=PParameter nowrap>duration</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Moves an individual block. </div></div><div class=CToolTip id="tt14"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToBack = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.</div></div><div class=CToolTip id="tt15"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToFront = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt16"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.newTheme = function(</td><td class=PParameter nowrap>name,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Create a new theme based on the default theme, adding it the themeEngine.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt17"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.quickInit = function ()</td></tr></table></blockquote>Quick reinitialization plot for replotting. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt18"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.redraw = function(</td><td class=PParameter nowrap>clear</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Empties the plot target div and redraws the plot. </div></div><div class=CToolTip id="tt19"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.reInitialize = function (</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>opts</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>reinitialize plot for replotting. </div></div><div class=CToolTip id="tt20"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.remove = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Remove the given theme from the themeEngine.</div></div><div class=CToolTip id="tt21"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.rename = function (</td><td class=PParameter nowrap>oldName,</td></tr><tr><td></td><td class=PParameter nowrap>newName</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Rename a theme.</div></div><div class=CToolTip id="tt22"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.replot = function(</td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Does a reinitialization of the plot followed by a redraw. </div></div><div class=CToolTip id="tt23"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.resetAxesScale = function(</td><td class=PParameter nowrap>axes,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Reset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.</div></div><div class=CToolTip id="tt24"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restoreOriginalSeriesOrder = function ()</td></tr></table></blockquote>This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.</div></div><div class=CToolTip id="tt25"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restorePreviousSeriesOrder = function ()</td></tr></table></blockquote>This method requires jQuery 1.4+ Restore the series canvas order to its previous state. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt26"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt27"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt28"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.Cursor.zoomProxy = function(</td><td class=PParameter nowrap>targetPlot,</td></tr><tr><td></td><td class=PParameter nowrap>controllerPlot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot. </div></div><!--END_ND_TOOLTIPS-->
+
+</div><!--Index-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Functions</div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General.html
new file mode 100644
index 00000000..d9450d7a
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index/General.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="#Symbols">$#!</a> &middot; 0-9 &middot; <a href="#A">A</a> &middot; <a href="#B">B</a> &middot; <a href="General2.html#C">C</a> &middot; <a href="General2.html#D">D</a> &middot; <a href="General2.html#E">E</a> &middot; <a href="General3.html#F">F</a> &middot; <a href="General3.html#G">G</a> &middot; <a href="General3.html#H">H</a> &middot; <a href="General4.html#I">I</a> &middot; <a href="General4.html#J">J</a> &middot; K &middot; <a href="General4.html#L">L</a> &middot; <a href="General4.html#M">M</a> &middot; <a href="General5.html#N">N</a> &middot; <a href="General5.html#O">O</a> &middot; <a href="General5.html#P">P</a> &middot; <a href="General5.html#Q">Q</a> &middot; <a href="General5.html#R">R</a> &middot; <a href="General6.html#S">S</a> &middot; <a href="General7.html#T">T</a> &middot; <a href="General7.html#U">U</a> &middot; <a href="General7.html#V">V</a> &middot; <a href="General7.html#W">W</a> &middot; <a href="General7.html#X">X</a> &middot; <a href="General7.html#Y">Y</a> &middot; <a href="General7.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="Symbols"></a>$#!</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-toImage-js.html#$.fn" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>$.fn</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>$.jqplot</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>$.jqplot.<wbr>AxisLabelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=ISymbol>$.jqplot.<wbr>AxisTickRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=ISymbol>$.jqplot.<wbr>BarRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>$.jqplot.<wbr>BezierCurveRenderer.js</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>$.jqplot.<wbr>BlockRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>$.jqplot.<wbr>BubbleRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>$.jqplot.<wbr>CanvasAxisLabelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>$.jqplot.<wbr>CanvasAxisTickRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>$.jqplot.<wbr>CanvasGridRenderer</span><div class=ISubIndex><a href="../files/jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=IFile>jqplot.<wbr>canvasGridRenderer.js</a><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html#$.jqplot.CanvasGridRenderer" id=link12 onMouseOver="ShowTip(event, 'tt11', 'link12')" onMouseOut="HideTip('tt11')" class=IFile>plugins/<wbr>jqplot.<wbr>pyramidGridRenderer.js</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay" class=ISymbol>$.jqplot.<wbr>CanvasOverlay</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer" id=link13 onMouseOver="ShowTip(event, 'tt12', 'link13')" onMouseOut="HideTip('tt12')" class=ISymbol>$.jqplot.<wbr>CategoryAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ciParser-js.html#$.jqplot.ciParser" id=link14 onMouseOver="ShowTip(event, 'tt13', 'link14')" onMouseOut="HideTip('tt13')" class=ISymbol>$.jqplot.<wbr>ciParser</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor" id=link15 onMouseOver="ShowTip(event, 'tt14', 'link15')" onMouseOut="HideTip('tt14')" class=ISymbol>$.jqplot.<wbr>Cursor</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer" id=link16 onMouseOver="ShowTip(event, 'tt15', 'link16')" onMouseOut="HideTip('tt15')" class=ISymbol>$.jqplot.<wbr>DateAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" id=link17 onMouseOver="ShowTip(event, 'tt16', 'link17')" onMouseOut="HideTip('tt16')" class=ISymbol>$.jqplot.<wbr>DivTitleRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer" id=link18 onMouseOver="ShowTip(event, 'tt17', 'link18')" onMouseOut="HideTip('tt17')" class=ISymbol>$.jqplot.<wbr>DonutLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer" id=link19 onMouseOver="ShowTip(event, 'tt18', 'link19')" onMouseOut="HideTip('tt18')" class=ISymbol>$.jqplot.<wbr>DonutRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable" id=link20 onMouseOver="ShowTip(event, 'tt19', 'link20')" onMouseOut="HideTip('tt19')" class=ISymbol>$.jqplot.<wbr>Dragable</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer" id=link21 onMouseOver="ShowTip(event, 'tt20', 'link21')" onMouseOut="HideTip('tt20')" class=ISymbol>$.jqplot.<wbr>FunnelLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer" id=link22 onMouseOver="ShowTip(event, 'tt21', 'link22')" onMouseOut="HideTip('tt21')" class=ISymbol>$.jqplot.<wbr>FunnelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter" id=link23 onMouseOver="ShowTip(event, 'tt22', 'link23')" onMouseOut="HideTip('tt22')" class=ISymbol>$.jqplot.<wbr>Highlighter</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer" id=link24 onMouseOver="ShowTip(event, 'tt23', 'link24')" onMouseOut="HideTip('tt23')" class=ISymbol>$.jqplot.<wbr>LinearAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" id=link25 onMouseOver="ShowTip(event, 'tt24', 'link25')" onMouseOut="HideTip('tt24')" class=ISymbol>$.jqplot.<wbr>LineRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer" id=link26 onMouseOver="ShowTip(event, 'tt25', 'link26')" onMouseOut="HideTip('tt25')" class=ISymbol>$.jqplot.<wbr>LogAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" id=link27 onMouseOver="ShowTip(event, 'tt26', 'link27')" onMouseOut="HideTip('tt26')" class=ISymbol>$.jqplot.<wbr>MarkerRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer" id=link28 onMouseOver="ShowTip(event, 'tt27', 'link28')" onMouseOut="HideTip('tt27')" class=ISymbol>$.jqplot.<wbr>MekkoAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer" id=link29 onMouseOver="ShowTip(event, 'tt28', 'link29')" onMouseOut="HideTip('tt28')" class=ISymbol>$.jqplot.<wbr>MekkoLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer" id=link30 onMouseOver="ShowTip(event, 'tt29', 'link30')" onMouseOut="HideTip('tt29')" class=ISymbol>$.jqplot.<wbr>MekkoRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer" id=link31 onMouseOver="ShowTip(event, 'tt30', 'link31')" onMouseOut="HideTip('tt30')" class=ISymbol>$.jqplot.<wbr>MeterGaugeRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer" id=link32 onMouseOver="ShowTip(event, 'tt31', 'link32')" onMouseOut="HideTip('tt31')" class=ISymbol>$.jqplot.<wbr>OHLCRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer" id=link33 onMouseOver="ShowTip(event, 'tt32', 'link33')" onMouseOut="HideTip('tt32')" class=ISymbol>$.jqplot.<wbr>PieLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer" id=link34 onMouseOver="ShowTip(event, 'tt33', 'link34')" onMouseOut="HideTip('tt33')" class=ISymbol>$.jqplot.<wbr>PieRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels" id=link35 onMouseOver="ShowTip(event, 'tt34', 'link35')" onMouseOut="HideTip('tt34')" class=ISymbol>$.jqplot.<wbr>PointLabels</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer" id=link36 onMouseOver="ShowTip(event, 'tt35', 'link36')" onMouseOut="HideTip('tt35')" class=ISymbol>$.jqplot.<wbr>shadowRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer" id=link37 onMouseOver="ShowTip(event, 'tt36', 'link37')" onMouseOut="HideTip('tt36')" class=ISymbol>$.jqplot.<wbr>shapeRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine" id=link38 onMouseOver="ShowTip(event, 'tt37', 'link38')" onMouseOut="HideTip('tt37')" class=ISymbol>$.jqplot.<wbr>ThemeEngine</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline" id=link39 onMouseOver="ShowTip(event, 'tt38', 'link39')" onMouseOut="HideTip('tt38')" class=ISymbol>$.jqplot.<wbr>Trendline</a></td></tr><tr><td class=IHeading><a name="A"></a>A</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.activeTheme" id=link40 onMouseOver="ShowTip(event, 'tt39', 'link40')" onMouseOut="HideTip('tt39')" class=ISymbol>activeTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.addLegendRowHooks" id=link41 onMouseOver="ShowTip(event, 'tt40', 'link41')" onMouseOut="HideTip('tt40')" class=ISymbol>addLegendRowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.alignTicks" id=link42 onMouseOver="ShowTip(event, 'tt41', 'link42')" onMouseOut="HideTip('tt41')" class=ISymbol>alignTicks</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.alpha" id=link43 onMouseOver="ShowTip(event, 'tt42', 'link43')" onMouseOut="HideTip('tt42')" class=ISymbol>alpha</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>angle</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.angle" id=link44 onMouseOver="ShowTip(event, 'tt43', 'link44')" onMouseOut="HideTip('tt43')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.angle" id=link45 onMouseOver="ShowTip(event, 'tt44', 'link45')" onMouseOut="HideTip('tt44')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.angle" id=link46 onMouseOver="ShowTip(event, 'tt45', 'link46')" onMouseOut="HideTip('tt45')" class=IParent>$.jqplot.<wbr>shadowRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.animate" id=link47 onMouseOver="ShowTip(event, 'tt46', 'link47')" onMouseOut="HideTip('tt46')" class=ISymbol>animate</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.animateReplot" id=link48 onMouseOver="ShowTip(event, 'tt47', 'link48')" onMouseOut="HideTip('tt47')" class=ISymbol>animateReplot</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.autoscale" id=link49 onMouseOver="ShowTip(event, 'tt48', 'link49')" onMouseOut="HideTip('tt48')" class=ISymbol>autoscale</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleBubbles" id=link50 onMouseOver="ShowTip(event, 'tt49', 'link50')" onMouseOut="HideTip('tt49')" class=ISymbol>autoscaleBubbles</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleMultiplier" id=link51 onMouseOver="ShowTip(event, 'tt50', 'link51')" onMouseOut="HideTip('tt50')" class=ISymbol>autoscaleMultiplier</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscalePointsFactor" id=link52 onMouseOver="ShowTip(event, 'tt51', 'link52')" onMouseOut="HideTip('tt51')" class=ISymbol>autoscalePointsFactor</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Available_Options" id=link53 onMouseOver="ShowTip(event, 'tt52', 'link53')" onMouseOut="HideTip('tt52')" class=ISymbol>Available Options</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axes" id=link54 onMouseOver="ShowTip(event, 'tt53', 'link54')" onMouseOut="HideTip('tt53')" class=ISymbol>axes</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axesDefaults" id=link55 onMouseOver="ShowTip(event, 'tt54', 'link55')" onMouseOut="HideTip('tt54')" class=ISymbol>axesDefaults</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis" id=link56 onMouseOver="ShowTip(event, 'tt55', 'link56')" onMouseOut="HideTip('tt55')" class=ISymbol>Axis</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.axisDefaults" id=link57 onMouseOver="ShowTip(event, 'tt56', 'link57')" onMouseOut="HideTip('tt56')" class=ISymbol>axisDefaults</a>, <span class=IParent>$.jqplot.<wbr>LogAxisRenderer</span></td></tr><tr><td class=IHeading><a name="B"></a>B</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>background</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.background" id=link58 onMouseOver="ShowTip(event, 'tt57', 'link58')" onMouseOut="HideTip('tt57')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Grid.background" id=link59 onMouseOver="ShowTip(event, 'tt58', 'link59')" onMouseOut="HideTip('tt58')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.background" id=link60 onMouseOver="ShowTip(event, 'tt59', 'link60')" onMouseOut="HideTip('tt59')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.bandData" id=link61 onMouseOver="ShowTip(event, 'tt60', 'link61')" onMouseOut="HideTip('tt60')" class=ISymbol>bandData</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.bands" id=link62 onMouseOver="ShowTip(event, 'tt61', 'link62')" onMouseOut="HideTip('tt61')" class=ISymbol>bands</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barDirection" id=link63 onMouseOver="ShowTip(event, 'tt62', 'link63')" onMouseOut="HideTip('tt62')" class=ISymbol>barDirection</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelOptions" id=link64 onMouseOver="ShowTip(event, 'tt63', 'link64')" onMouseOut="HideTip('tt63')" class=ISymbol>barLabelOptions</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelRenderer" id=link65 onMouseOver="ShowTip(event, 'tt64', 'link65')" onMouseOut="HideTip('tt64')" class=ISymbol>barLabelRenderer</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabels" id=link66 onMouseOver="ShowTip(event, 'tt65', 'link66')" onMouseOut="HideTip('tt65')" class=ISymbol>barLabels</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barMargin" id=link67 onMouseOver="ShowTip(event, 'tt66', 'link67')" onMouseOut="HideTip('tt66')" class=ISymbol>barMargin</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>barPadding</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#barPadding" id=link68 onMouseOver="ShowTip(event, 'tt67', 'link68')" onMouseOut="HideTip('tt67')" class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barPadding" id=link69 onMouseOver="ShowTip(event, 'tt68', 'link69')" onMouseOut="HideTip('tt68')" class=IParent>$.jqplot.<wbr>BarRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barWidth" id=link70 onMouseOver="ShowTip(event, 'tt69', 'link70')" onMouseOut="HideTip('tt69')" class=ISymbol>barWidth</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>baselineColor</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#baselineColor" id=link71 onMouseOver="ShowTip(event, 'tt70', 'link71')" onMouseOut="HideTip('tt70')" class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.baselineColor" id=link72 onMouseOver="ShowTip(event, 'tt71', 'link72')" onMouseOut="HideTip('tt71')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.baselineColor" id=link73 onMouseOver="ShowTip(event, 'tt72', 'link73')" onMouseOut="HideTip('tt72')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>baselineWidth</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#baselineWidth" id=link74 onMouseOver="ShowTip(event, 'tt73', 'link74')" onMouseOut="HideTip('tt73')" class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.baselineWidth" id=link75 onMouseOver="ShowTip(event, 'tt74', 'link75')" onMouseOut="HideTip('tt74')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.baselineWidth" id=link76 onMouseOver="ShowTip(event, 'tt75', 'link76')" onMouseOut="HideTip('tt75')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.bodyWidth" id=link77 onMouseOver="ShowTip(event, 'tt76', 'link77')" onMouseOut="HideTip('tt76')" class=ISymbol>bodyWidth</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.border" id=link78 onMouseOver="ShowTip(event, 'tt77', 'link78')" onMouseOut="HideTip('tt77')" class=ISymbol>border</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>borderColor</span><div class=ISubIndex><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.borderColor" id=link79 onMouseOver="ShowTip(event, 'tt78', 'link79')" onMouseOut="HideTip('tt78')" class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-core-js.html#Axis.borderColor" id=link80 onMouseOver="ShowTip(event, 'tt79', 'link80')" onMouseOut="HideTip('tt79')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderColor" id=link81 onMouseOver="ShowTip(event, 'tt80', 'link81')" onMouseOut="HideTip('tt80')" class=IParent>Grid</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>borderWidth</span><div class=ISubIndex><a href="../files/jqplot-core-js.html#Axis.borderWidth" id=link82 onMouseOver="ShowTip(event, 'tt81', 'link82')" onMouseOut="HideTip('tt81')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderWidth" id=link83 onMouseOver="ShowTip(event, 'tt82', 'link83')" onMouseOut="HideTip('tt82')" class=IParent>Grid</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.breakOnNull" id=link84 onMouseOver="ShowTip(event, 'tt83', 'link84')" onMouseOut="HideTip('tt83')" class=ISymbol>breakOnNull</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.breakPoints" id=link85 onMouseOver="ShowTip(event, 'tt84', 'link85')" onMouseOut="HideTip('tt84')" class=ISymbol>breakPoints</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.breakTickLabel" id=link86 onMouseOver="ShowTip(event, 'tt85', 'link86')" onMouseOut="HideTip('tt85')" class=ISymbol>breakTickLabel</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.bringSeriesToFront" id=link87 onMouseOver="ShowTip(event, 'tt86', 'link87')" onMouseOut="HideTip('tt86')" class=ISymbol>bringSeriesToFront</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleAlpha" id=link88 onMouseOver="ShowTip(event, 'tt87', 'link88')" onMouseOut="HideTip('tt87')" class=ISymbol>bubbleAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleGradients" id=link89 onMouseOver="ShowTip(event, 'tt88', 'link89')" onMouseOut="HideTip('tt88')" class=ISymbol>bubbleGradients</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr></table>
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CClass>jQuery namespace to attach functions to jQuery elements.</div></div><div class=CToolTip id="tt2"><div class=CClass>jQuery function called by the user to create a plot.</div></div><div class=CToolTip id="tt3"><div class=CClass>Renderer to place labels on the axes.</div></div><div class=CToolTip id="tt4"><div class=CClass>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</div></div><div class=CToolTip id="tt5"><div class=CClass>A plugin renderer for jqPlot to draw a bar plot. </div></div><div class=CToolTip id="tt6"><div class=CClass>Renderer which draws lines as stacked bezier curves. </div></div><div class=CToolTip id="tt7"><div class=CClass>Plugin renderer to draw a x-y block chart. </div></div><div class=CToolTip id="tt8"><div class=CClass>Plugin renderer to draw a bubble chart. </div></div><div class=CToolTip id="tt9"><div class=CClass>Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text. </div></div><div class=CToolTip id="tt10"><div class=CClass>Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text. </div></div><div class=CToolTip id="tt11"><div class=CClass>The default jqPlot grid renderer, creating a grid on a canvas element. </div></div><div class=CToolTip id="tt12"><div class=CClass>A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.</div></div><div class=CToolTip id="tt13"><div class=CClass>Data Renderer function which converts a custom JSON data object into jqPlot data format. </div></div><div class=CToolTip id="tt14"><div class=CClass>Plugin class representing the cursor as displayed on the plot.</div></div><div class=CToolTip id="tt15"><div class=CClass>A plugin for a jqPlot to render an axis as a series of date values. </div></div><div class=CToolTip id="tt16"><div class=CClass>The default title renderer for jqPlot. </div></div><div class=CToolTip id="tt17"><div class=CClass>Legend Renderer specific to donut plots. </div></div><div class=CToolTip id="tt18"><div class=CClass>Plugin renderer to draw a donut chart. </div></div><div class=CToolTip id="tt19"><div class=CClass>Plugin to make plotted points dragable by the user.</div></div><div class=CToolTip id="tt20"><div class=CClass>Legend Renderer specific to funnel plots. </div></div><div class=CToolTip id="tt21"><div class=CClass>Plugin renderer to draw a funnel chart. </div></div><div class=CToolTip id="tt22"><div class=CClass>Plugin which will highlight data points when they are moused over.</div></div><div class=CToolTip id="tt23"><div class=CClass>The default jqPlot axis renderer, creating a numeric axis.</div></div><div class=CToolTip id="tt24"><div class=CClass>The default line renderer for jqPlot, this class has no options beyond the Series class. </div></div><div class=CToolTip id="tt25"><div class=CClass>A plugin for a jqPlot to render a logarithmic axis.</div></div><div class=CToolTip id="tt26"><div class=CClass>The default jqPlot marker renderer, rendering the points on the line.</div></div><div class=CToolTip id="tt27"><div class=CClass>An axis renderer for a Mekko chart. </div></div><div class=CToolTip id="tt28"><div class=CClass>Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.</div></div><div class=CToolTip id="tt29"><div class=CClass>Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph. </div></div><div class=CToolTip id="tt30"><div class=CClass>Plugin renderer to draw a meter gauge chart.</div></div><div class=CToolTip id="tt31"><div class=CClass>jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.</div></div><div class=CToolTip id="tt32"><div class=CClass>Legend Renderer specific to pie plots. </div></div><div class=CToolTip id="tt33"><div class=CClass>Plugin renderer to draw a pie chart. </div></div><div class=CToolTip id="tt34"><div class=CClass>Plugin for putting labels at the data points.</div></div><div class=CToolTip id="tt35"><div class=CClass>The default jqPlot shadow renderer, rendering shadows behind shapes.</div></div><div class=CToolTip id="tt36"><div class=CClass>The default jqPlot shape renderer. </div></div><div class=CToolTip id="tt37"><div class=CClass>Theme Engine provides a programatic way to change some of the more common jqplot styling options such as fonts, colors and grid options. </div></div><div class=CToolTip id="tt38"><div class=CClass>Plugin which will automatically compute and draw trendlines for plotted data.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt39"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.activeTheme=null</td></tr></table></blockquote>Pointer to currently active theme</div></div><div class=CToolTip id="tt40"><div class=CHook>called at the end of legend draw, so plugins can add rows to the legend table.</div></div><div class=CToolTip id="tt41"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alignTicks = false</td></tr></table></blockquote>true to align tick marks across opposed axes such as from the y2axis to yaxis.</div></div><div class=CToolTip id="tt42"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alpha = 0.07</td></tr></table></blockquote>alpha transparency of shadow stroke.</div></div><div class=CToolTip id="tt43"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt44"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt45"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 45</td></tr></table></blockquote>Angle of the shadow in degrees. </div></div><div class=CToolTip id="tt46"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.animate = false</td></tr></table></blockquote>True to animate the series on initial plot draw (renderer dependent). </div></div><div class=CToolTip id="tt47"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.animateReplot = false</td></tr></table></blockquote>True to animate series after a call to the replot() method. </div></div><div class=CToolTip id="tt48"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscale = false</td></tr></table></blockquote>DEPRECATED the default scaling algorithm produces superior results.</div></div><div class=CToolTip id="tt49"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleBubbles = true</td></tr></table></blockquote>True to scale the bubble radius based on plot size. </div></div><div class=CToolTip id="tt50"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleMultiplier = 1.0</td></tr></table></blockquote>Multiplier the bubble size if autoscaleBubbles is true.</div></div><div class=CToolTip id="tt51"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscalePointsFactor = -0.07</td></tr></table></blockquote>Factor which decreases bubble size based on how many bubbles on on the chart. </div></div><div class=CToolTip id="tt52"><div class=CGeneric>See jqPlot Options for a list of options available thorugh the options object (not complete yet!)</div></div><div class=CToolTip id="tt53"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis'), yMidAxis: new Axis('yMidAxis')}</td></tr></table></blockquote>up to 4 axes are supported, each with it&rsquo;s own options, See Axis for axis specific options.</div></div><div class=CToolTip id="tt54"><div class=CProperty>default options that will be applied to all axes. </div></div><div class=CToolTip id="tt55"><div class=CClass>An individual axis object. </div></div><div class=CToolTip id="tt56"><div class=CProperty>Default properties which will be applied directly to the series.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt57"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = &quot;#efefef&quot;</td></tr></table></blockquote>background color of the inside of the gauge.</div></div><div class=CToolTip id="tt58"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = '#fffdf6'</td></tr></table></blockquote>css spec for the background color.</div></div><div class=CToolTip id="tt59"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background</td></tr></table></blockquote>css spec for the background of the legend box.</div></div><div class=CToolTip id="tt60"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.bandData = []</td></tr></table></blockquote>Data used to draw error bands or confidence intervals above/below a line.</div></div><div class=CToolTip id="tt61"><div class=CGroup>Banding around line, e.g error bands or confidence intervals.</div></div><div class=CToolTip id="tt62"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barDirection = 'vertical'</td></tr></table></blockquote>&lsquo;vertical&rsquo; = up and down bars, &lsquo;horizontal&rsquo; = side to side bars</div></div><div class=CToolTip id="tt63"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelOptions = {}</td></tr></table></blockquote>options object to pass to the bar label renderer.</div></div><div class=CToolTip id="tt64"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote>renderer to use to draw labels under each bar.</div></div><div class=CToolTip id="tt65"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabels = this.barLabels || []</td></tr></table></blockquote>array of labels to put under each bar.</div></div><div class=CToolTip id="tt66"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barMargin = 10</td></tr></table></blockquote>Number of pixels between groups of bars at adjacent axis values.</div></div><div class=CToolTip id="tt67"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 10</td></tr></table></blockquote></div></div><div class=CToolTip id="tt68"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 8</td></tr></table></blockquote>Number of pixels between adjacent bars at the same axis value.</div></div><div class=CToolTip id="tt69"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barWidth = null</td></tr></table></blockquote>Width of the bar in pixels (auto by devaul). </div></div><div class=CToolTip id="tt70"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><div class=CToolTip id="tt71"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><div class=CToolTip id="tt72"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><div class=CToolTip id="tt73"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt74"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt75"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt76"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bodyWidth = 'auto'</td></tr></table></blockquote>width of the candlestick body in pixels. </div></div><div class=CToolTip id="tt77"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.border</td></tr></table></blockquote>css spec for the border around the legend box.</div></div><div class=CToolTip id="tt78"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote>color of the borders between areas on the chart</div></div><div class=CToolTip id="tt79"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote>color of the border adjacent to the axis. </div></div><div class=CToolTip id="tt80"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = '#999999'</td></tr></table></blockquote>css spec for the color of the grid border.</div></div><div class=CToolTip id="tt81"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = null</td></tr></table></blockquote>width of line stroked at the border of the axis. </div></div><div class=CToolTip id="tt82"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = 2.0</td></tr></table></blockquote>width of the border in pixels.</div></div><div class=CToolTip id="tt83"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakOnNull = false</td></tr></table></blockquote>Wether line segments should be be broken at null value. </div></div><div class=CToolTip id="tt84"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakPoints = null</td></tr></table></blockquote>EXPERIMENTAL!!&nbsp; </div></div><div class=CToolTip id="tt85"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakTickLabel = &quot;&amp;asymp</td></tr></table></blockquote>Label to use at the axis break if breakPoints are specified.</div></div><div class=CToolTip id="tt86"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bringSeriesToFront = false</td></tr></table></blockquote>This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.</div></div><div class=CToolTip id="tt87"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleAlpha = 1.0</td></tr></table></blockquote>Alpha transparency to apply to all bubbles in this series.</div></div><div class=CToolTip id="tt88"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleGradients = false</td></tr></table></blockquote>True to color the bubbles with gradient fills instead of flat colors. </div></div><!--END_ND_TOOLTIPS-->
+
+</div><!--Index-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General2.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General2.html
new file mode 100644
index 00000000..3332307e
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index/General2.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> &middot; 0-9 &middot; <a href="General.html#A">A</a> &middot; <a href="General.html#B">B</a> &middot; <a href="#C">C</a> &middot; <a href="#D">D</a> &middot; <a href="#E">E</a> &middot; <a href="General3.html#F">F</a> &middot; <a href="General3.html#G">G</a> &middot; <a href="General3.html#H">H</a> &middot; <a href="General4.html#I">I</a> &middot; <a href="General4.html#J">J</a> &middot; K &middot; <a href="General4.html#L">L</a> &middot; <a href="General4.html#M">M</a> &middot; <a href="General5.html#N">N</a> &middot; <a href="General5.html#O">O</a> &middot; <a href="General5.html#P">P</a> &middot; <a href="General5.html#Q">Q</a> &middot; <a href="General5.html#R">R</a> &middot; <a href="General6.html#S">S</a> &middot; <a href="General7.html#T">T</a> &middot; <a href="General7.html#U">U</a> &middot; <a href="General7.html#V">V</a> &middot; <a href="General7.html#W">W</a> &middot; <a href="General7.html#X">X</a> &middot; <a href="General7.html#Y">Y</a> &middot; <a href="General7.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="C"></a>C</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.candleStick" id=link90 onMouseOver="ShowTip(event, 'tt89', 'link90')" onMouseOut="HideTip('tt89')" class=ISymbol>candleStick</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/changes-txt.html#Change_Log" class=ISymbol>Change Log</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Changes" id=link91 onMouseOver="ShowTip(event, 'tt90', 'link91')" onMouseOut="HideTip('tt90')" class=ISymbol>Changes</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.clearRect" id=link92 onMouseOver="ShowTip(event, 'tt91', 'link92')" onMouseOut="HideTip('tt91')" class=ISymbol>clearRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.clickReset" id=link93 onMouseOver="ShowTip(event, 'tt92', 'link93')" onMouseOut="HideTip('tt92')" class=ISymbol>clickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.closeColor" id=link94 onMouseOver="ShowTip(event, 'tt93', 'link94')" onMouseOut="HideTip('tt93')" class=ISymbol>closeColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>color</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.color" id=link95 onMouseOver="ShowTip(event, 'tt94', 'link95')" onMouseOut="HideTip('tt94')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.color" id=link96 onMouseOver="ShowTip(event, 'tt95', 'link96')" onMouseOut="HideTip('tt95')" class=IParent>$.jqplot.<wbr>Dragable</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.color" id=link97 onMouseOver="ShowTip(event, 'tt96', 'link97')" onMouseOut="HideTip('tt96')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.color" id=link98 onMouseOver="ShowTip(event, 'tt97', 'link98')" onMouseOut="HideTip('tt97')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.color" id=link99 onMouseOver="ShowTip(event, 'tt98', 'link99')" onMouseOut="HideTip('tt98')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.color" id=link100 onMouseOver="ShowTip(event, 'tt99', 'link100')" onMouseOut="HideTip('tt99')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainOutsideZoom" id=link101 onMouseOver="ShowTip(event, 'tt100', 'link101')" onMouseOut="HideTip('tt100')" class=ISymbol>constrainOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.constrainSmoothing" id=link102 onMouseOver="ShowTip(event, 'tt101', 'link102')" onMouseOut="HideTip('tt101')" class=ISymbol>constrainSmoothing</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.constrainTo" id=link103 onMouseOver="ShowTip(event, 'tt102', 'link103')" onMouseOut="HideTip('tt102')" class=ISymbol>constrainTo</a>, <span class=IParent>$.jqplot.<wbr>Dragable</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainZoomTo" id=link104 onMouseOver="ShowTip(event, 'tt103', 'link104')" onMouseOut="HideTip('tt103')" class=ISymbol>constrainZoomTo</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.copy" id=link105 onMouseOver="ShowTip(event, 'tt104', 'link105')" onMouseOut="HideTip('tt104')" class=ISymbol>copy</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#CopyrightLicense" id=link106 onMouseOver="ShowTip(event, 'tt105', 'link106')" onMouseOut="HideTip('tt105')" class=ISymbol>Copyright&amp;License</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.css" id=link107 onMouseOver="ShowTip(event, 'tt106', 'link107')" onMouseOut="HideTip('tt106')" class=ISymbol>css</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.cursorLegendFormatString" id=link108 onMouseOver="ShowTip(event, 'tt107', 'link108')" onMouseOut="HideTip('tt107')" class=ISymbol>cursorLegendFormatString</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=IHeading><a name="D"></a>D</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine" id=link109 onMouseOver="ShowTip(event, 'tt108', 'link109')" onMouseOut="HideTip('tt108')" class=ISymbol>DashedHorizontalLine</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine" id=link110 onMouseOver="ShowTip(event, 'tt109', 'link110')" onMouseOut="HideTip('tt109')" class=ISymbol>DashedVerticalLine</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dashPattern</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine.dashPattern" id=link111 onMouseOver="ShowTip(event, 'tt110', 'link111')" onMouseOut="HideTip('tt110')" class=IParent>DashedHorizontalLine</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine.dashPattern" id=link112 onMouseOver="ShowTip(event, 'tt111', 'link112')" onMouseOut="HideTip('tt111')" class=IParent>DashedVerticalLine</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.data" id=link113 onMouseOver="ShowTip(event, 'tt112', 'link113')" onMouseOut="HideTip('tt112')" class=ISymbol>data</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelCenterOn" id=link114 onMouseOver="ShowTip(event, 'tt113', 'link114')" onMouseOut="HideTip('tt113')" class=ISymbol>dataLabelCenterOn</a>, <span class=IParent>$.jqplot.<wbr>PieRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelFormatString</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelFormatString" id=link115 onMouseOver="ShowTip(event, 'tt114', 'link115')" onMouseOut="HideTip('tt114')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelFormatString" id=link116 onMouseOver="ShowTip(event, 'tt115', 'link116')" onMouseOut="HideTip('tt115')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelFormatString" id=link117 onMouseOver="ShowTip(event, 'tt116', 'link117')" onMouseOut="HideTip('tt116')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelNudge</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelNudge" id=link118 onMouseOver="ShowTip(event, 'tt117', 'link118')" onMouseOut="HideTip('tt117')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelNudge" id=link119 onMouseOver="ShowTip(event, 'tt118', 'link119')" onMouseOut="HideTip('tt118')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelPositionFactor</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelPositionFactor" id=link120 onMouseOver="ShowTip(event, 'tt119', 'link120')" onMouseOut="HideTip('tt119')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelPositionFactor" id=link121 onMouseOver="ShowTip(event, 'tt120', 'link121')" onMouseOut="HideTip('tt120')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabels" id=link122 onMouseOver="ShowTip(event, 'tt121', 'link122')" onMouseOut="HideTip('tt121')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabels" id=link123 onMouseOver="ShowTip(event, 'tt122', 'link123')" onMouseOut="HideTip('tt122')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabels" id=link124 onMouseOver="ShowTip(event, 'tt123', 'link124')" onMouseOut="HideTip('tt123')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelThreshold</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelThreshold" id=link125 onMouseOver="ShowTip(event, 'tt124', 'link125')" onMouseOut="HideTip('tt124')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelThreshold" id=link126 onMouseOver="ShowTip(event, 'tt125', 'link126')" onMouseOut="HideTip('tt125')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelThreshold" id=link127 onMouseOver="ShowTip(event, 'tt126', 'link127')" onMouseOut="HideTip('tt126')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.dataRenderer" id=link128 onMouseOver="ShowTip(event, 'tt127', 'link128')" onMouseOut="HideTip('tt127')" class=ISymbol>dataRenderer</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.dataRendererOptions" id=link129 onMouseOver="ShowTip(event, 'tt128', 'link129')" onMouseOut="HideTip('tt128')" class=ISymbol>dataRendererOptions</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.dblClickReset" id=link130 onMouseOver="ShowTip(event, 'tt129', 'link130')" onMouseOut="HideTip('tt129')" class=ISymbol>dblClickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.defaultAxisStart" id=link131 onMouseOver="ShowTip(event, 'tt130', 'link131')" onMouseOut="HideTip('tt130')" class=ISymbol>defaultAxisStart</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.depth" id=link132 onMouseOver="ShowTip(event, 'tt131', 'link132')" onMouseOut="HideTip('tt131')" class=ISymbol>depth</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.destroy" id=link133 onMouseOver="ShowTip(event, 'tt132', 'link133')" onMouseOut="HideTip('tt132')" class=ISymbol>destroy</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>diameter</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.diameter" id=link134 onMouseOver="ShowTip(event, 'tt133', 'link134')" onMouseOut="HideTip('tt133')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.diameter" id=link135 onMouseOver="ShowTip(event, 'tt134', 'link135')" onMouseOut="HideTip('tt134')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.diameter" id=link136 onMouseOver="ShowTip(event, 'tt135', 'link136')" onMouseOut="HideTip('tt135')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#disableIEFading" id=link137 onMouseOver="ShowTip(event, 'tt136', 'link137')" onMouseOut="HideTip('tt136')" class=ISymbol>disableIEFading</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.disableStack" id=link138 onMouseOver="ShowTip(event, 'tt137', 'link138')" onMouseOut="HideTip('tt137')" class=ISymbol>disableStack</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.downBodyColor" id=link139 onMouseOver="ShowTip(event, 'tt138', 'link139')" onMouseOut="HideTip('tt138')" class=ISymbol>downBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>draw</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.draw" id=link140 onMouseOver="ShowTip(event, 'tt139', 'link140')" onMouseOut="HideTip('tt139')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.draw" id=link141 onMouseOver="ShowTip(event, 'tt140', 'link141')" onMouseOut="HideTip('tt140')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.draw" id=link142 onMouseOver="ShowTip(event, 'tt141', 'link142')" onMouseOut="HideTip('tt141')" class=IParent>jqPlot</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>drawBaseline</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#drawBaseline" id=link143 onMouseOver="ShowTip(event, 'tt142', 'link143')" onMouseOut="HideTip('tt142')" class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.drawBaseline" id=link144 onMouseOver="ShowTip(event, 'tt143', 'link144')" onMouseOut="HideTip('tt143')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.drawBaseline" id=link145 onMouseOver="ShowTip(event, 'tt144', 'link145')" onMouseOut="HideTip('tt144')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.drawBaseline" id=link146 onMouseOver="ShowTip(event, 'tt145', 'link146')" onMouseOut="HideTip('tt145')" class=IParent>$.jqplot.<wbr>LogAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawBorder" id=link147 onMouseOver="ShowTip(event, 'tt146', 'link147')" onMouseOut="HideTip('tt146')" class=ISymbol>drawBorder</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawGridlines" id=link148 onMouseOver="ShowTip(event, 'tt147', 'link148')" onMouseOut="HideTip('tt147')" class=ISymbol>drawGridlines</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMajorGridlines" id=link149 onMouseOver="ShowTip(event, 'tt148', 'link149')" onMouseOut="HideTip('tt148')" class=ISymbol>drawMajorGridlines</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMajorTickMarks" id=link150 onMouseOver="ShowTip(event, 'tt149', 'link150')" onMouseOut="HideTip('tt149')" class=ISymbol>drawMajorTickMarks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMinorGridlines" id=link151 onMouseOver="ShowTip(event, 'tt150', 'link151')" onMouseOut="HideTip('tt150')" class=ISymbol>drawMinorGridlines</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMinorTickMarks" id=link152 onMouseOver="ShowTip(event, 'tt151', 'link152')" onMouseOut="HideTip('tt151')" class=ISymbol>drawMinorTickMarks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.drawSeries" id=link153 onMouseOver="ShowTip(event, 'tt152', 'link153')" onMouseOut="HideTip('tt152')" class=ISymbol>drawSeries</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="E"></a>E</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.edgeTolerance" id=link154 onMouseOver="ShowTip(event, 'tt153', 'link154')" onMouseOut="HideTip('tt153')" class=ISymbol>edgeTolerance</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>enableFontSupport</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.enableFontSupport" id=link155 onMouseOver="ShowTip(event, 'tt154', 'link155')" onMouseOut="HideTip('tt154')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.enableFontSupport" id=link156 onMouseOver="ShowTip(event, 'tt155', 'link156')" onMouseOut="HideTip('tt155')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>escapeHtml</span><div class=ISubIndex><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.escapeHtml" id=link157 onMouseOver="ShowTip(event, 'tt156', 'link157')" onMouseOut="HideTip('tt156')" class=IParent>$.jqplot.<wbr>BlockRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.escapeHtml" id=link158 onMouseOver="ShowTip(event, 'tt157', 'link158')" onMouseOut="HideTip('tt157')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.escapeHtml" id=link159 onMouseOver="ShowTip(event, 'tt158', 'link159')" onMouseOut="HideTip('tt158')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.escapeHtml" id=link160 onMouseOver="ShowTip(event, 'tt159', 'link160')" onMouseOut="HideTip('tt159')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>escapeHTML</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.escapeHTML" id=link161 onMouseOver="ShowTip(event, 'tt160', 'link161')" onMouseOut="HideTip('tt160')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.escapeHTML" id=link162 onMouseOver="ShowTip(event, 'tt161', 'link162')" onMouseOut="HideTip('tt161')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.escapeHTML" id=link163 onMouseOver="ShowTip(event, 'tt162', 'link163')" onMouseOut="HideTip('tt162')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.eventListenerHooks" id=link164 onMouseOver="ShowTip(event, 'tt163', 'link164')" onMouseOut="HideTip('tt163')" class=ISymbol>eventListenerHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr></table>
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt89"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.candleStick = false</td></tr></table></blockquote>true to render chart as candleStick. </div></div><div class=CToolTip id="tt90"><div class=CGeneric>See Change Log</div></div><div class=CToolTip id="tt91"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clearRect = false</td></tr></table></blockquote>true to cear a rectangle.</div></div><div class=CToolTip id="tt92"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clickReset = false</td></tr></table></blockquote>Will reset plot zoom if single click on plot without drag.</div></div><div class=CToolTip id="tt93"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.closeColor = null</td></tr></table></blockquote>color of the close price tick mark. </div></div><div class=CToolTip id="tt94"><div class=CProperty>color of the line</div></div><div class=CToolTip id="tt95"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote>CSS color spec for the dragged point (and adjacent line segment or bar).</div></div><div class=CToolTip id="tt96"><div class=CProperty>color of lines at top and bottom of bands [default: series color].</div></div><div class=CToolTip id="tt97"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>color of marker. </div></div><div class=CToolTip id="tt98"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>CSS color spec for the trend line. </div></div><div class=CToolTip id="tt99"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote>css color spec for the series</div></div><div class=CToolTip id="tt100"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainOutsideZoom = true</td></tr></table></blockquote>True to limit actual zoom area to edges of grid, even when zooming outside of plot area. </div></div><div class=CToolTip id="tt101"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.constrainSmoothing = true</td></tr></table></blockquote>True to use a more accurate smoothing algorithm that will not overshoot any data points. </div></div><div class=CToolTip id="tt102"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainTo = 'none'</td></tr></table></blockquote>Constrain dragging motion to an axis or to none. </div></div><div class=CToolTip id="tt103"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainZoomTo = 'none'</td></tr></table></blockquote>&lsquo;none&rsquo;, &lsquo;x&rsquo; or &lsquo;y&rsquo;</div></div><div class=CToolTip id="tt104"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.copy = function (</td><td class=PParameter nowrap>sourceName,</td></tr><tr><td></td><td class=PParameter nowrap>targetName,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Create a copy of an existing theme in the themeEngine, adding it the themeEngine.</div></div><div class=CToolTip id="tt105"><div class=CGeneric>Copyright &copy; 2009-2012 Chris Leonello jqPlot is currently available for use in all personal or commercial projects under both the MIT and GPL version 2.0 licenses. </div></div><div class=CToolTip id="tt106"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}</td></tr></table></blockquote>default css styles that will be applied to all data blocks. </div></div><div class=CToolTip id="tt107"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString</td></tr></table></blockquote>Format string used in the cursor legend. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt108"><div class=CClass>A straight dashed horizontal line.</div></div><div class=CToolTip id="tt109"><div class=CClass>A straight dashed vertical line.</div></div><div class=CToolTip id="tt110"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>dashPattern: [8,8] }</td></tr></table></blockquote>Array of line, space settings in pixels. </div></div><div class=CToolTip id="tt111"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>dashPattern: [8,8] }</td></tr></table></blockquote>Array of line, space settings in pixels. </div></div><div class=CToolTip id="tt112"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.data = []</td></tr></table></blockquote>user&rsquo;s data. </div></div><div class=CToolTip id="tt113"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelCenterOn = true</td></tr></table></blockquote>True to center the data label at its position. </div></div><div class=CToolTip id="tt114"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt115"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt116"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt117"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 0</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt118"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 2</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt119"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.4</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt120"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.52</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt121"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt122"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt123"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt124"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt125"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt126"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote>Threshhold in percentage (0-100) of pie area, below which no label will be displayed. </div></div><div class=CToolTip id="tt127"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataRenderer</td></tr></table></blockquote>A callable which can be used to preprocess data passed into the plot. </div></div><div class=CToolTip id="tt128"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataRendererOptions</td></tr></table></blockquote>Options that will be passed to the dataRenderer. </div></div><div class=CToolTip id="tt129"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dblClickReset = true</td></tr></table></blockquote>Will reset plot zoom if double click on plot without drag.</div></div><div class=CToolTip id="tt130"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.defaultAxisStart = 1</td></tr></table></blockquote>1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot. </div></div><div class=CToolTip id="tt131"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.depth = 3</td></tr></table></blockquote>how many times the shadow is stroked. </div></div><div class=CToolTip id="tt132"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.destroy = function()</td></tr></table></blockquote>Releases all resources occupied by the plot</div></div><div class=CToolTip id="tt133"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the donut, auto computed by default</div></div><div class=CToolTip id="tt134"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the meterGauge, auto computed by default</div></div><div class=CToolTip id="tt135"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the pie, auto computed by default</div></div><div class=CToolTip id="tt136"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableIEFading = true</td></tr></table></blockquote>true to toggle series with a show/hide method only and not allow fading in/out. </div></div><div class=CToolTip id="tt137"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableStack = false</td></tr></table></blockquote>true to not stack this series with other series in the plot. </div></div><div class=CToolTip id="tt138"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.downBodyColor = null</td></tr></table></blockquote>Color of candlestick body on a &ldquo;down&rdquo; day. </div></div><div class=CToolTip id="tt139"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShadowRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws an transparent black (i.e. </div></div><div class=CToolTip id="tt140"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShapeRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws the shape.</div></div><div class=CToolTip id="tt141"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.draw = function()</td></tr></table></blockquote>Draws all elements of the plot into the container. </div></div><div class=CToolTip id="tt142"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt143"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt144"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt145"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt146"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBorder = true</td></tr></table></blockquote>True to draw border around grid.</div></div><div class=CToolTip id="tt147"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawGridlines = true</td></tr></table></blockquote>wether to draw the gridlines on the plot.</div></div><div class=CToolTip id="tt148"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMajorGridlines = true</td></tr></table></blockquote>True to draw gridlines for major axis ticks.</div></div><div class=CToolTip id="tt149"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMajorTickMarks = true</td></tr></table></blockquote>True to draw tick marks for major axis ticks.</div></div><div class=CToolTip id="tt150"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMinorGridlines = false</td></tr></table></blockquote>True to draw gridlines for minor ticks.</div></div><div class=CToolTip id="tt151"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMinorTickMarks = true</td></tr></table></blockquote>True to draw tick marks for minor ticks. </div></div><div class=CToolTip id="tt152"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.drawSeries = function(</td><td class=PParameter nowrap>options,</td></tr><tr><td></td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Redraws all or just one series on the plot. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt153"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.edgeTolerance = -5</td></tr></table></blockquote>Number of pixels that the label must be away from an axis boundary in order to be drawn. </div></div><div class=CToolTip id="tt154"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt155"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt156"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>true to escape html in the box label.</div></div><div class=CToolTip id="tt157"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = true</td></tr></table></blockquote>True to escape html in bubble label text.</div></div><div class=CToolTip id="tt158"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>True to escape special characters with their html entity equivalents in legend text. </div></div><div class=CToolTip id="tt159"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>True to escape special characters with their html entity equivalents in title text. </div></div><div class=CToolTip id="tt160"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote>true to escape HTML entities in the label.</div></div><div class=CToolTip id="tt161"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote>true to escape HTML entities in the label.</div></div><div class=CToolTip id="tt162"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = true</td></tr></table></blockquote>true to escape html entities in the labels. </div></div><div class=CToolTip id="tt163"><div class=CHook>called at the end of plot drawing, binds listeners to the event canvas which lays on top of the grid area.</div></div><!--END_ND_TOOLTIPS-->
+
+</div><!--Index-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General3.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General3.html
new file mode 100644
index 00000000..031f05c2
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index/General3.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> &middot; 0-9 &middot; <a href="General.html#A">A</a> &middot; <a href="General.html#B">B</a> &middot; <a href="General2.html#C">C</a> &middot; <a href="General2.html#D">D</a> &middot; <a href="General2.html#E">E</a> &middot; <a href="#F">F</a> &middot; <a href="#G">G</a> &middot; <a href="#H">H</a> &middot; <a href="General4.html#I">I</a> &middot; <a href="General4.html#J">J</a> &middot; K &middot; <a href="General4.html#L">L</a> &middot; <a href="General4.html#M">M</a> &middot; <a href="General5.html#N">N</a> &middot; <a href="General5.html#O">O</a> &middot; <a href="General5.html#P">P</a> &middot; <a href="General5.html#Q">Q</a> &middot; <a href="General5.html#R">R</a> &middot; <a href="General6.html#S">S</a> &middot; <a href="General7.html#T">T</a> &middot; <a href="General7.html#U">U</a> &middot; <a href="General7.html#V">V</a> &middot; <a href="General7.html#W">W</a> &middot; <a href="General7.html#X">X</a> &middot; <a href="General7.html#Y">Y</a> &middot; <a href="General7.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="F"></a>F</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fadeTooltip</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.fadeTooltip" id=link165 onMouseOver="ShowTip(event, 'tt164', 'link165')" onMouseOut="HideTip('tt164')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.fadeTooltip" id=link166 onMouseOver="ShowTip(event, 'tt165', 'link166')" onMouseOut="HideTip('tt165')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fill</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#fill" id=link167 onMouseOver="ShowTip(event, 'tt166', 'link167')" onMouseOut="HideTip('tt166')" class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.fill" id=link168 onMouseOver="ShowTip(event, 'tt167', 'link168')" onMouseOut="HideTip('tt167')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.fill" id=link169 onMouseOver="ShowTip(event, 'tt168', 'link169')" onMouseOut="HideTip('tt168')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.fill" id=link170 onMouseOver="ShowTip(event, 'tt169', 'link170')" onMouseOut="HideTip('tt169')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.fill" id=link171 onMouseOver="ShowTip(event, 'tt170', 'link171')" onMouseOut="HideTip('tt170')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.fill" id=link172 onMouseOver="ShowTip(event, 'tt171', 'link172')" onMouseOut="HideTip('tt171')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fill" id=link173 onMouseOver="ShowTip(event, 'tt172', 'link173')" onMouseOut="HideTip('tt172')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.fill" id=link174 onMouseOver="ShowTip(event, 'tt173', 'link174')" onMouseOut="HideTip('tt173')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAlpha" id=link175 onMouseOver="ShowTip(event, 'tt174', 'link175')" onMouseOut="HideTip('tt174')" class=ISymbol>fillAlpha</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAndStroke" id=link176 onMouseOver="ShowTip(event, 'tt175', 'link176')" onMouseOut="HideTip('tt175')" class=ISymbol>fillAndStroke</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAxis" id=link177 onMouseOver="ShowTip(event, 'tt176', 'link177')" onMouseOut="HideTip('tt176')" class=ISymbol>fillAxis</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.fillBetween" id=link178 onMouseOver="ShowTip(event, 'tt177', 'link178')" onMouseOut="HideTip('tt177')" class=ISymbol>fillBetween</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fillColor</span><div class=ISubIndex><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.fillColor" id=link179 onMouseOver="ShowTip(event, 'tt178', 'link179')" onMouseOut="HideTip('tt178')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-core-js.html#Series.fillColor" id=link180 onMouseOver="ShowTip(event, 'tt179', 'link180')" onMouseOut="HideTip('tt179')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillDownBody" id=link181 onMouseOver="ShowTip(event, 'tt180', 'link181')" onMouseOut="HideTip('tt180')" class=ISymbol>fillDownBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillRect" id=link182 onMouseOver="ShowTip(event, 'tt181', 'link182')" onMouseOut="HideTip('tt181')" class=ISymbol>fillRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillStyle" id=link183 onMouseOver="ShowTip(event, 'tt182', 'link183')" onMouseOut="HideTip('tt182')" class=ISymbol>fillStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToValue" id=link184 onMouseOver="ShowTip(event, 'tt183', 'link184')" onMouseOut="HideTip('tt183')" class=ISymbol>fillToValue</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToZero" id=link185 onMouseOver="ShowTip(event, 'tt184', 'link185')" onMouseOut="HideTip('tt184')" class=ISymbol>fillToZero</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillUpBody" id=link186 onMouseOver="ShowTip(event, 'tt185', 'link186')" onMouseOut="HideTip('tt185')" class=ISymbol>fillUpBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.followMouse" id=link187 onMouseOver="ShowTip(event, 'tt186', 'link187')" onMouseOut="HideTip('tt186')" class=ISymbol>followMouse</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontFamily</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontFamily" id=link188 onMouseOver="ShowTip(event, 'tt187', 'link188')" onMouseOut="HideTip('tt187')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontFamily" id=link189 onMouseOver="ShowTip(event, 'tt188', 'link189')" onMouseOut="HideTip('tt188')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontFamily" id=link190 onMouseOver="ShowTip(event, 'tt189', 'link190')" onMouseOut="HideTip('tt189')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.fontFamily" id=link191 onMouseOver="ShowTip(event, 'tt190', 'link191')" onMouseOut="HideTip('tt190')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontFamily" id=link192 onMouseOver="ShowTip(event, 'tt191', 'link192')" onMouseOut="HideTip('tt191')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontSize</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontSize" id=link193 onMouseOver="ShowTip(event, 'tt192', 'link193')" onMouseOut="HideTip('tt192')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontSize" id=link194 onMouseOver="ShowTip(event, 'tt193', 'link194')" onMouseOut="HideTip('tt193')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontSize" id=link195 onMouseOver="ShowTip(event, 'tt194', 'link195')" onMouseOut="HideTip('tt194')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.fontSize" id=link196 onMouseOver="ShowTip(event, 'tt195', 'link196')" onMouseOut="HideTip('tt195')" class=IParent>jqPlot</a><a href="../files/jqplot-core-js.html#Legend.fontSize" id=link197 onMouseOver="ShowTip(event, 'tt196', 'link197')" onMouseOut="HideTip('tt196')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontSize" id=link198 onMouseOver="ShowTip(event, 'tt197', 'link198')" onMouseOut="HideTip('tt197')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontStretch</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontStretch" id=link199 onMouseOver="ShowTip(event, 'tt198', 'link199')" onMouseOut="HideTip('tt198')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontStretch" id=link200 onMouseOver="ShowTip(event, 'tt199', 'link200')" onMouseOut="HideTip('tt199')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontWeight</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontWeight" id=link201 onMouseOver="ShowTip(event, 'tt200', 'link201')" onMouseOut="HideTip('tt200')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontWeight" id=link202 onMouseOver="ShowTip(event, 'tt201', 'link202')" onMouseOut="HideTip('tt201')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.forceTickAt0" id=link203 onMouseOver="ShowTip(event, 'tt202', 'link203')" onMouseOut="HideTip('tt202')" class=ISymbol>forceTickAt0</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.forceTickAt100" id=link204 onMouseOver="ShowTip(event, 'tt203', 'link204')" onMouseOut="HideTip('tt203')" class=ISymbol>forceTickAt100</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>formatString</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatString" id=link205 onMouseOver="ShowTip(event, 'tt204', 'link205')" onMouseOut="HideTip('tt204')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatString" id=link206 onMouseOver="ShowTip(event, 'tt205', 'link206')" onMouseOut="HideTip('tt205')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.formatString" id=link207 onMouseOver="ShowTip(event, 'tt206', 'link207')" onMouseOut="HideTip('tt206')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatString" id=link208 onMouseOver="ShowTip(event, 'tt207', 'link208')" onMouseOut="HideTip('tt207')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>formatter</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatter" id=link209 onMouseOver="ShowTip(event, 'tt208', 'link209')" onMouseOut="HideTip('tt208')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatter" id=link210 onMouseOver="ShowTip(event, 'tt209', 'link210')" onMouseOut="HideTip('tt209')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatter" id=link211 onMouseOver="ShowTip(event, 'tt210', 'link211')" onMouseOut="HideTip('tt210')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>Functions</span><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.Functions" class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.Functions" class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.Functions" class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></td></tr><tr><td class=IHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.get" id=link212 onMouseOver="ShowTip(event, 'tt211', 'link212')" onMouseOut="HideTip('tt211')" class=ISymbol>get</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemeNames" id=link213 onMouseOver="ShowTip(event, 'tt212', 'link213')" onMouseOut="HideTip('tt212')" class=ISymbol>getThemeNames</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemes" id=link214 onMouseOver="ShowTip(event, 'tt213', 'link214')" onMouseOut="HideTip('tt213')" class=ISymbol>getThemes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/gpl-2-0-txt.html#GPL_Version_2" id=link215 onMouseOver="ShowTip(event, 'tt214', 'link215')" onMouseOut="HideTip('tt214')" class=ISymbol>GPL Version 2</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.grid" id=link216 onMouseOver="ShowTip(event, 'tt215', 'link216')" onMouseOut="HideTip('tt215')" class=ISymbol>grid</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid" id=link217 onMouseOver="ShowTip(event, 'tt216', 'link217')" onMouseOut="HideTip('tt216')" class=ISymbol>Grid</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineColor" id=link218 onMouseOver="ShowTip(event, 'tt217', 'link218')" onMouseOut="HideTip('tt217')" class=ISymbol>gridLineColor</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineWidth" id=link219 onMouseOver="ShowTip(event, 'tt218', 'link219')" onMouseOut="HideTip('tt218')" class=ISymbol>gridLineWidth</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.groups" id=link220 onMouseOver="ShowTip(event, 'tt219', 'link220')" onMouseOut="HideTip('tt219')" class=ISymbol>groups</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=IHeading><a name="H"></a>H</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.hideZeros" id=link221 onMouseOver="ShowTip(event, 'tt220', 'link221')" onMouseOut="HideTip('tt220')" class=ISymbol>hideZeros</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightAlpha" id=link222 onMouseOver="ShowTip(event, 'tt221', 'link222')" onMouseOut="HideTip('tt221')" class=ISymbol>highlightAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightColor" id=link223 onMouseOver="ShowTip(event, 'tt222', 'link223')" onMouseOut="HideTip('tt222')" class=ISymbol>highlightColor</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightColors</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightColors" id=link224 onMouseOver="ShowTip(event, 'tt223', 'link224')" onMouseOut="HideTip('tt223')" class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightColors" id=link225 onMouseOver="ShowTip(event, 'tt224', 'link225')" onMouseOut="HideTip('tt224')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightColors" id=link226 onMouseOver="ShowTip(event, 'tt225', 'link226')" onMouseOut="HideTip('tt225')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightColors" id=link227 onMouseOver="ShowTip(event, 'tt226', 'link227')" onMouseOut="HideTip('tt226')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightColors" id=link228 onMouseOver="ShowTip(event, 'tt227', 'link228')" onMouseOut="HideTip('tt227')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightColors" id=link229 onMouseOver="ShowTip(event, 'tt228', 'link229')" onMouseOut="HideTip('tt228')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightMouseDown</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightMouseDown" id=link230 onMouseOver="ShowTip(event, 'tt229', 'link230')" onMouseOut="HideTip('tt229')" class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseDown" id=link231 onMouseOver="ShowTip(event, 'tt230', 'link231')" onMouseOut="HideTip('tt230')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseDown" id=link232 onMouseOver="ShowTip(event, 'tt231', 'link232')" onMouseOut="HideTip('tt231')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseDown" id=link233 onMouseOver="ShowTip(event, 'tt232', 'link233')" onMouseOut="HideTip('tt232')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseDown" id=link234 onMouseOver="ShowTip(event, 'tt233', 'link234')" onMouseOut="HideTip('tt233')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseDown" id=link235 onMouseOver="ShowTip(event, 'tt234', 'link235')" onMouseOut="HideTip('tt234')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseDown" id=link236 onMouseOver="ShowTip(event, 'tt235', 'link236')" onMouseOut="HideTip('tt235')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightMouseOver</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightMouseOver" id=link237 onMouseOver="ShowTip(event, 'tt236', 'link237')" onMouseOut="HideTip('tt236')" class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseOver" id=link238 onMouseOver="ShowTip(event, 'tt237', 'link238')" onMouseOut="HideTip('tt237')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseOver" id=link239 onMouseOver="ShowTip(event, 'tt238', 'link239')" onMouseOut="HideTip('tt238')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseOver" id=link240 onMouseOver="ShowTip(event, 'tt239', 'link240')" onMouseOut="HideTip('tt239')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseOver" id=link241 onMouseOver="ShowTip(event, 'tt240', 'link241')" onMouseOut="HideTip('tt240')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseOver" id=link242 onMouseOver="ShowTip(event, 'tt241', 'link242')" onMouseOut="HideTip('tt241')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseOver" id=link243 onMouseOver="ShowTip(event, 'tt242', 'link243')" onMouseOut="HideTip('tt242')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.hlc" id=link244 onMouseOver="ShowTip(event, 'tt243', 'link244')" onMouseOut="HideTip('tt243')" class=ISymbol>hlc</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.Hooks" class=ISymbol>Hooks</a>, <span class=IParent>$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine" id=link245 onMouseOver="ShowTip(event, 'tt244', 'link245')" onMouseOut="HideTip('tt244')" class=ISymbol>HorizontalLine</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.hubRadius" id=link246 onMouseOver="ShowTip(event, 'tt245', 'link246')" onMouseOut="HideTip('tt245')" class=ISymbol>hubRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr></table>
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt164"><div class=CProperty>true = fade in/out tooltip, flase = show/hide tooltip</div></div><div class=CToolTip id="tt165"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fadeTooltip = true</td></tr></table></blockquote>true = fade in/out tooltip, flase = show/hide tooltip</div></div><div class=CToolTip id="tt166"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>True to fill the bars.</div></div><div class=CToolTip id="tt167"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt168"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fill the areas.</div></div><div class=CToolTip id="tt169"><div class=CProperty>True to fill area between bands [default: true].</div></div><div class=CToolTip id="tt170"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt171"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt172"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt173"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>true or false, wether to fill under lines or in bars. </div></div><div class=CToolTip id="tt174"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAlpha</td></tr></table></blockquote>Alpha transparency to apply to the fill under the line. </div></div><div class=CToolTip id="tt175"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAndStroke = false</td></tr></table></blockquote>If true will stroke the line (with color this.color) as well as fill under it. </div></div><div class=CToolTip id="tt176"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAxis = 'y'</td></tr></table></blockquote>Either &lsquo;x&rsquo; or &lsquo;y&rsquo;. </div></div><div class=CToolTip id="tt177"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }</td></tr></table></blockquote>Fill between 2 line series in a plot. </div></div><div class=CToolTip id="tt178"><div class=CProperty>css color spec for filled area. </div></div><div class=CToolTip id="tt179"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillColor</td></tr></table></blockquote>CSS color spec to use for fill under line. </div></div><div class=CToolTip id="tt180"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillDownBody = true</td></tr></table></blockquote>true to render a &ldquo;down&rdquo; day (close price lower than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt181"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillRect = false</td></tr></table></blockquote>true to draw shape as a filled rectangle.</div></div><div class=CToolTip id="tt182"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillStyle = '#999999'</td></tr></table></blockquote>css color spec for the fill style.</div></div><div class=CToolTip id="tt183"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToValue = 0</td></tr></table></blockquote>fill a filled series to this value on the fill axis. </div></div><div class=CToolTip id="tt184"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToZero = false</td></tr></table></blockquote>true will force bar and filled series to fill toward zero on the fill Axis.</div></div><div class=CToolTip id="tt185"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillUpBody = false</td></tr></table></blockquote>true to render an &ldquo;up&rdquo; day (close price greater than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt186"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.followMouse = false</td></tr></table></blockquote>Tooltip follows the mouse, it is not at a fixed location. </div></div><div class=CToolTip id="tt187"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt188"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>CSS spec for the font-family css attribute. </div></div><div class=CToolTip id="tt189"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt190"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css font-family spec for the legend text.</div></div><div class=CToolTip id="tt191"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css font-family spec for the text.</div></div><div class=CToolTip id="tt192"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css spec for the font-size css attribute.</div></div><div class=CToolTip id="tt193"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '11pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt194"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '10pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt195"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css spec for the font-size attribute. </div></div><div class=CToolTip id="tt196"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css font-size spec for the legend text.</div></div><div class=CToolTip id="tt197"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css font-size spec for the text.</div></div><div class=CToolTip id="tt198"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt199"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt200"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote></div></div><div class=CToolTip id="tt201"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote>CSS spec for fontWeight</div></div><div class=CToolTip id="tt202"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.forceTickAt0 = false</td></tr></table></blockquote>This will ensure that there is always a tick mark at 0. </div></div><div class=CToolTip id="tt203"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.forceTickAt100 = false</td></tr></table></blockquote>This will ensure that there is always a tick mark at 100. </div></div><div class=CToolTip id="tt204"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt205"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt206"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = null</td></tr></table></blockquote>alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option. </div></div><div class=CToolTip id="tt207"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt208"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt209"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt210"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt211"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.get = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Get and return the named theme or the active theme if no name given.</div></div><div class=CToolTip id="tt212"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemeNames = function()</td></tr></table></blockquote>Return the list of theme names in this manager in alpha-numerical order.</div></div><div class=CToolTip id="tt213"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemes = function()</td></tr></table></blockquote>Return a list of themes in alpha-numerical order by name.</div></div><div class=CToolTip id="tt214"><div class=CSection>GNU GENERAL PUBLIC LICENSE Version 2, June 1991</div></div><div class=CToolTip id="tt215"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.grid = new Grid()</td></tr></table></blockquote>See Grid for grid specific options.</div></div><div class=CToolTip id="tt216"><div class=CClass>Object representing the grid on which the plot is drawn. </div></div><div class=CToolTip id="tt217"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineColor = '#cccccc'</td></tr></table></blockquote>color of the grid lines.</div></div><div class=CToolTip id="tt218"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineWidth = 1.0</td></tr></table></blockquote>width of the grid lines.</div></div><div class=CToolTip id="tt219"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.groups = 1</td></tr></table></blockquote>group bars into this many groups</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt220"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hideZeros = false</td></tr></table></blockquote>true to not show a label for a value which is 0.</div></div><div class=CToolTip id="tt221"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightAlpha = null</td></tr></table></blockquote>Alpha transparency to apply when highlighting bubble. </div></div><div class=CToolTip id="tt222"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColor = null</td></tr></table></blockquote>color to use when highlighting an area on a filled plot.</div></div><div class=CToolTip id="tt223"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt224"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a bar.</div></div><div class=CToolTip id="tt225"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>An array of colors to use when highlighting a slice. </div></div><div class=CToolTip id="tt226"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt227"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>array of colors to use when highlighting an area.</div></div><div class=CToolTip id="tt228"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt229"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt230"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt231"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a bubble. </div></div><div class=CToolTip id="tt232"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt233"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a area. </div></div><div class=CToolTip id="tt234"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over an area on a filled plot. </div></div><div class=CToolTip id="tt235"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt236"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt237"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt238"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight bubbles when moused over. </div></div><div class=CToolTip id="tt239"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt240"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area when moused over. </div></div><div class=CToolTip id="tt241"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area on a filled plot when moused over. </div></div><div class=CToolTip id="tt242"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt243"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hlc = false</td></tr></table></blockquote>true if is a hi-low-close chart (no open price). </div></div><div class=CToolTip id="tt244"><div class=CClass>A straight horizontal line.</div></div><div class=CToolTip id="tt245"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hubRadius = null</td></tr></table></blockquote>Radius of the hub at the bottom center of gauge which the needle attaches to. </div></div><!--END_ND_TOOLTIPS-->
+
+</div><!--Index-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General4.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General4.html
new file mode 100644
index 00000000..4798c87d
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index/General4.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> &middot; 0-9 &middot; <a href="General.html#A">A</a> &middot; <a href="General.html#B">B</a> &middot; <a href="General2.html#C">C</a> &middot; <a href="General2.html#D">D</a> &middot; <a href="General2.html#E">E</a> &middot; <a href="General3.html#F">F</a> &middot; <a href="General3.html#G">G</a> &middot; <a href="General3.html#H">H</a> &middot; <a href="#I">I</a> &middot; <a href="#J">J</a> &middot; K &middot; <a href="#L">L</a> &middot; <a href="#M">M</a> &middot; <a href="General5.html#N">N</a> &middot; <a href="General5.html#O">O</a> &middot; <a href="General5.html#P">P</a> &middot; <a href="General5.html#Q">Q</a> &middot; <a href="General5.html#R">R</a> &middot; <a href="General6.html#S">S</a> &middot; <a href="General7.html#T">T</a> &middot; <a href="General7.html#U">U</a> &middot; <a href="General7.html#V">V</a> &middot; <a href="General7.html#W">W</a> &middot; <a href="General7.html#X">X</a> &middot; <a href="General7.html#Y">Y</a> &middot; <a href="General7.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="I"></a>I</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.index" id=link247 onMouseOver="ShowTip(event, 'tt246', 'link247')" onMouseOut="HideTip('tt246')" class=ISymbol>index</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.init" id=link248 onMouseOver="ShowTip(event, 'tt247', 'link248')" onMouseOut="HideTip('tt247')" class=ISymbol>init</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.innerDiameter" id=link249 onMouseOver="ShowTip(event, 'tt248', 'link249')" onMouseOut="HideTip('tt248')" class=ISymbol>innerDiameter</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.insertBreaks" id=link250 onMouseOver="ShowTip(event, 'tt249', 'link250')" onMouseOut="HideTip('tt249')" class=ISymbol>insertBreaks</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.intersectionThreshold" id=link251 onMouseOver="ShowTip(event, 'tt250', 'link251')" onMouseOut="HideTip('tt250')" class=ISymbol>intersectionThreshold</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.interval" id=link252 onMouseOver="ShowTip(event, 'tt251', 'link252')" onMouseOut="HideTip('tt251')" class=ISymbol>interval</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalColors" id=link253 onMouseOver="ShowTip(event, 'tt252', 'link253')" onMouseOut="HideTip('tt252')" class=ISymbol>intervalColors</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalInnerRadius" id=link254 onMouseOver="ShowTip(event, 'tt253', 'link254')" onMouseOut="HideTip('tt253')" class=ISymbol>intervalInnerRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalOuterRadius" id=link255 onMouseOver="ShowTip(event, 'tt254', 'link255')" onMouseOut="HideTip('tt254')" class=ISymbol>intervalOuterRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervals" id=link256 onMouseOver="ShowTip(event, 'tt255', 'link256')" onMouseOut="HideTip('tt255')" class=ISymbol>intervals</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Introduction" id=link257 onMouseOver="ShowTip(event, 'tt256', 'link257')" onMouseOut="HideTip('tt256')" class=ISymbol>Introduction</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>isarc</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.isarc" id=link258 onMouseOver="ShowTip(event, 'tt257', 'link258')" onMouseOut="HideTip('tt257')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.isarc" id=link259 onMouseOver="ShowTip(event, 'tt258', 'link259')" onMouseOut="HideTip('tt258')" class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>isMinorTick</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.isMinorTick" id=link260 onMouseOver="ShowTip(event, 'tt259', 'link260')" onMouseOut="HideTip('tt259')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.isMinorTick" id=link261 onMouseOver="ShowTip(event, 'tt260', 'link261')" onMouseOut="HideTip('tt260')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=IHeading><a name="J"></a>J</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot" id=link262 onMouseOver="ShowTip(event, 'tt261', 'link262')" onMouseOut="HideTip('tt261')" class=ISymbol>jqPlot</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot_Charts" id=link263 onMouseOver="ShowTip(event, 'tt262', 'link263')" onMouseOut="HideTip('tt262')" class=ISymbol>jqPlot Charts</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqPlotCssStyling-txt.html#jqPlot_CSS_Customization" id=link264 onMouseOver="ShowTip(event, 'tt263', 'link264')" onMouseOut="HideTip('tt263')" class=ISymbol>jqPlot CSS Customization</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqPlotOptions-txt.html#jqPlot_Options" id=link265 onMouseOver="ShowTip(event, 'tt264', 'link265')" onMouseOut="HideTip('tt264')" class=ISymbol>jqPlot Options</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.jqPlot_Pugin_Hooks" class=ISymbol>jqPlot Pugin Hooks</a>, <span class=IParent>$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/usage-txt.html#jqPlot_Usage" class=ISymbol>jqPlot Usage</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#jqplot.enhancedLegendRenderer.js" class=ISymbol>jqplot.<wbr>enhancedLegendRenderer.js</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#jqplot.pyramidAxisRenderer.js" class=ISymbol>jqplot.<wbr>pyramidAxisRenderer.js</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#jqplot.pyramidRenderer.js" class=ISymbol>jqplot.<wbr>pyramidRenderer.js</a></td></tr><tr><td class=IHeading><a name="L"></a>L</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>label</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.label" id=link266 onMouseOver="ShowTip(event, 'tt265', 'link266')" onMouseOut="HideTip('tt265')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.label" id=link267 onMouseOver="ShowTip(event, 'tt266', 'link267')" onMouseOut="HideTip('tt266')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.label" id=link268 onMouseOver="ShowTip(event, 'tt267', 'link268')" onMouseOut="HideTip('tt267')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.label" id=link269 onMouseOver="ShowTip(event, 'tt268', 'link269')" onMouseOut="HideTip('tt268')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.label" id=link270 onMouseOver="ShowTip(event, 'tt269', 'link270')" onMouseOut="HideTip('tt269')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.label" id=link271 onMouseOver="ShowTip(event, 'tt270', 'link271')" onMouseOut="HideTip('tt270')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelHeightAdjust" id=link272 onMouseOver="ShowTip(event, 'tt271', 'link272')" onMouseOut="HideTip('tt271')" class=ISymbol>labelHeightAdjust</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelOptions" id=link273 onMouseOver="ShowTip(event, 'tt272', 'link273')" onMouseOut="HideTip('tt272')" class=ISymbol>labelOptions</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>labelPosition</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.labelPosition" id=link274 onMouseOver="ShowTip(event, 'tt273', 'link274')" onMouseOut="HideTip('tt273')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelPosition" id=link275 onMouseOver="ShowTip(event, 'tt274', 'link275')" onMouseOut="HideTip('tt274')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelRenderer" id=link276 onMouseOver="ShowTip(event, 'tt275', 'link276')" onMouseOut="HideTip('tt275')" class=ISymbol>labelRenderer</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>labels</span><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labels" id=link277 onMouseOver="ShowTip(event, 'tt276', 'link277')" onMouseOut="HideTip('tt276')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.labels" id=link278 onMouseOver="ShowTip(event, 'tt277', 'link278')" onMouseOut="HideTip('tt277')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labelsFromSeries" id=link279 onMouseOver="ShowTip(event, 'tt278', 'link279')" onMouseOut="HideTip('tt278')" class=ISymbol>labelsFromSeries</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.legend" id=link280 onMouseOver="ShowTip(event, 'tt279', 'link280')" onMouseOut="HideTip('tt279')" class=ISymbol>legend</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend" id=link281 onMouseOver="ShowTip(event, 'tt280', 'link281')" onMouseOut="HideTip('tt280')" class=ISymbol>Legend</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line" id=link282 onMouseOver="ShowTip(event, 'tt281', 'link282')" onMouseOut="HideTip('tt281')" class=ISymbol>Line</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineCap</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.lineCap" id=link283 onMouseOver="ShowTip(event, 'tt282', 'link283')" onMouseOut="HideTip('tt282')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineCap" id=link284 onMouseOver="ShowTip(event, 'tt283', 'link284')" onMouseOut="HideTip('tt283')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineCap" id=link285 onMouseOver="ShowTip(event, 'tt284', 'link285')" onMouseOut="HideTip('tt284')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.lineCap" id=link286 onMouseOver="ShowTip(event, 'tt285', 'link286')" onMouseOut="HideTip('tt285')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineJoin</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineJoin" id=link287 onMouseOver="ShowTip(event, 'tt286', 'link287')" onMouseOut="HideTip('tt286')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineJoin" id=link288 onMouseOver="ShowTip(event, 'tt287', 'link288')" onMouseOut="HideTip('tt287')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.lineJoin" id=link289 onMouseOver="ShowTip(event, 'tt288', 'link289')" onMouseOut="HideTip('tt288')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>linePattern</span><div class=ISubIndex><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.linePattern" id=link290 onMouseOver="ShowTip(event, 'tt289', 'link290')" onMouseOut="HideTip('tt289')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.linePattern" id=link291 onMouseOver="ShowTip(event, 'tt290', 'link291')" onMouseOut="HideTip('tt290')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineWidth</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.lineWidth" id=link292 onMouseOver="ShowTip(event, 'tt291', 'link292')" onMouseOut="HideTip('tt291')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.lineWidth" id=link293 onMouseOver="ShowTip(event, 'tt292', 'link293')" onMouseOut="HideTip('tt292')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.lineWidth" id=link294 onMouseOver="ShowTip(event, 'tt293', 'link294')" onMouseOut="HideTip('tt293')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.lineWidth" id=link295 onMouseOver="ShowTip(event, 'tt294', 'link295')" onMouseOut="HideTip('tt294')" class=IParent>$.jqplot.<wbr>OHLCRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineWidth" id=link296 onMouseOver="ShowTip(event, 'tt295', 'link296')" onMouseOut="HideTip('tt295')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.lineWidth" id=link297 onMouseOver="ShowTip(event, 'tt296', 'link297')" onMouseOut="HideTip('tt296')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.lineWidth" id=link298 onMouseOver="ShowTip(event, 'tt297', 'link298')" onMouseOut="HideTip('tt297')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.lineWidthAdjust" id=link299 onMouseOver="ShowTip(event, 'tt298', 'link299')" onMouseOut="HideTip('tt298')" class=ISymbol>lineWidthAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>location</span><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.location" id=link300 onMouseOver="ShowTip(event, 'tt299', 'link300')" onMouseOut="HideTip('tt299')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.location" id=link301 onMouseOver="ShowTip(event, 'tt300', 'link301')" onMouseOut="HideTip('tt300')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.looseZoom" id=link302 onMouseOver="ShowTip(event, 'tt301', 'link302')" onMouseOut="HideTip('tt301')" class=ISymbol>looseZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=IHeading><a name="M"></a>M</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>makeGridData</span><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.makeGridData" id=link303 onMouseOver="ShowTip(event, 'tt302', 'link303')" onMouseOut="HideTip('tt302')" class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.makeGridData" id=link304 onMouseOver="ShowTip(event, 'tt303', 'link304')" onMouseOut="HideTip('tt303')" class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginBottom" id=link305 onMouseOver="ShowTip(event, 'tt304', 'link305')" onMouseOut="HideTip('tt304')" class=ISymbol>marginBottom</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginLeft" id=link306 onMouseOver="ShowTip(event, 'tt305', 'link306')" onMouseOut="HideTip('tt305')" class=ISymbol>marginLeft</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginRight" id=link307 onMouseOver="ShowTip(event, 'tt306', 'link307')" onMouseOut="HideTip('tt306')" class=ISymbol>marginRight</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginTop" id=link308 onMouseOver="ShowTip(event, 'tt307', 'link308')" onMouseOut="HideTip('tt307')" class=ISymbol>marginTop</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>mark</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.mark" id=link309 onMouseOver="ShowTip(event, 'tt308', 'link309')" onMouseOut="HideTip('tt308')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.mark" id=link310 onMouseOver="ShowTip(event, 'tt309', 'link310')" onMouseOut="HideTip('tt309')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.markerOptions" id=link311 onMouseOver="ShowTip(event, 'tt310', 'link311')" onMouseOut="HideTip('tt310')" class=ISymbol>markerOptions</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>markerRenderer</span><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.markerRenderer" id=link312 onMouseOver="ShowTip(event, 'tt311', 'link312')" onMouseOut="HideTip('tt311')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.markerRenderer" id=link313 onMouseOver="ShowTip(event, 'tt312', 'link313')" onMouseOut="HideTip('tt312')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.markerRenderer" id=link314 onMouseOver="ShowTip(event, 'tt313', 'link314')" onMouseOut="HideTip('tt313')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>markSize</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.markSize" id=link315 onMouseOver="ShowTip(event, 'tt314', 'link315')" onMouseOut="HideTip('tt314')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.markSize" id=link316 onMouseOver="ShowTip(event, 'tt315', 'link316')" onMouseOut="HideTip('tt315')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>max</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.max" id=link317 onMouseOver="ShowTip(event, 'tt316', 'link317')" onMouseOut="HideTip('tt316')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.max" id=link318 onMouseOver="ShowTip(event, 'tt317', 'link318')" onMouseOut="HideTip('tt317')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>methods</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.methods" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.methods" class=IParent>$.jqplot.<wbr>ThemeEngine</a><a href="../files/jqplot-core-js.html#jqPlot.methods" class=IParent>jqPlot</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.Methods" class=ISymbol>Methods</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>min</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.min" id=link319 onMouseOver="ShowTip(event, 'tt318', 'link319')" onMouseOut="HideTip('tt318')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.min" id=link320 onMouseOver="ShowTip(event, 'tt319', 'link320')" onMouseOut="HideTip('tt319')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>minorTicks</span><div class=ISubIndex><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.minorTicks" id=link321 onMouseOver="ShowTip(event, 'tt320', 'link321')" onMouseOut="HideTip('tt320')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.minorTicks" id=link322 onMouseOver="ShowTip(event, 'tt321', 'link322')" onMouseOut="HideTip('tt321')" class=IParent>$.jqplot.<wbr>LogAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/MIT-LICENSE-txt.html#MIT_License" id=link323 onMouseOver="ShowTip(event, 'tt322', 'link323')" onMouseOut="HideTip('tt322')" class=ISymbol>MIT License</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.moveBlock" id=link324 onMouseOver="ShowTip(event, 'tt323', 'link324')" onMouseOut="HideTip('tt323')" class=ISymbol>moveBlock</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToBack" id=link325 onMouseOver="ShowTip(event, 'tt324', 'link325')" onMouseOut="HideTip('tt324')" class=ISymbol>moveSeriesToBack</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToFront" id=link326 onMouseOver="ShowTip(event, 'tt325', 'link326')" onMouseOut="HideTip('tt325')" class=ISymbol>moveSeriesToFront</a>, <span class=IParent>jqPlot</span></td></tr></table>
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt246"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.index</td></tr></table></blockquote>0 based index of this series in the plot series array.</div></div><div class=CToolTip id="tt247"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.init = function(</td><td class=PParameter nowrap>target,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>sets the plot target, checks data and applies user options to plot.</div></div><div class=CToolTip id="tt248"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.innerDiameter = null</td></tr></table></blockquote>Inner diameter of the donut, auto calculated by default. </div></div><div class=CToolTip id="tt249"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.insertBreaks = true</td></tr></table></blockquote>true to turn spaces in data block label into html breaks br /.</div></div><div class=CToolTip id="tt250"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intersectionThreshold = 2</td></tr></table></blockquote>pixel distance from data point or marker to consider cursor lines intersecting with point. </div></div><div class=CToolTip id="tt251"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>interval: '3%' }</td></tr></table></blockquote>User specified interval above and below line for bands [default: &lsquo;3%&rsquo;&rsquo;]. </div></div><div class=CToolTip id="tt252"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalColors = [ &quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;]</td></tr></table></blockquote>Array of colors to use for the intervals.</div></div><div class=CToolTip id="tt253"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalInnerRadius = null</td></tr></table></blockquote>Radius of the inner circle of the interval ring.</div></div><div class=CToolTip id="tt254"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalOuterRadius = null</td></tr></table></blockquote>Radius of the outer circle of the interval ring.</div></div><div class=CToolTip id="tt255"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervals = []</td></tr></table></blockquote>Array of ranges to be drawn around the gauge. </div></div><div class=CToolTip id="tt256"><div class=CGeneric>jqPlot requires jQuery (1.4+ required for certain features). </div></div><div class=CToolTip id="tt257"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt258"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt259"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><div class=CToolTip id="tt260"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt261"><div class=CClass>Plot object returned by call to $.jqplot. </div></div><div class=CToolTip id="tt262"><div class=CSection>Pure JavaScript plotting plugin for jQuery.</div></div><div class=CToolTip id="tt263"><div class=CSection>Much of the styling of jqPlot is done by css. </div></div><div class=CToolTip id="tt264"><div class=CSection><b>This document is out of date. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt265"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>The text or html for the label.</div></div><div class=CToolTip id="tt266"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>label for the axis.</div></div><div class=CToolTip id="tt267"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote>A gauge label like &lsquo;kph&rsquo; or &lsquo;Volts&rsquo;</div></div><div class=CToolTip id="tt268"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>Label for the trend line to use in the legend.</div></div><div class=CToolTip id="tt269"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote>Label for the axis</div></div><div class=CToolTip id="tt270"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>Line label to use in the legend.</div></div><div class=CToolTip id="tt271"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelHeightAdjust = 0</td></tr></table></blockquote>Number of Pixels to offset the label up (-) or down (+) from its default position.</div></div><div class=CToolTip id="tt272"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelOptions = {}</td></tr></table></blockquote>Options passed to the label renderer.</div></div><div class=CToolTip id="tt273"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'auto'</td></tr></table></blockquote>&lsquo;auto&rsquo;, &lsquo;start&rsquo;, &lsquo;middle&rsquo; or &lsquo;end&rsquo;. </div></div><div class=CToolTip id="tt274"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'inside'</td></tr></table></blockquote>Where to position the label, either &lsquo;inside&rsquo; or &lsquo;bottom&rsquo;.</div></div><div class=CToolTip id="tt275"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote>A class of a rendering engine for creating an axis label.</div></div><div class=CToolTip id="tt276"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote>array of arrays of labels, one array for each series.</div></div><div class=CToolTip id="tt277"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote>Array of labels to use. </div></div><div class=CToolTip id="tt278"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelsFromSeries = false</td></tr></table></blockquote>true to use labels within data point arrays.</div></div><div class=CToolTip id="tt279"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.legend = new Legend()</td></tr></table></blockquote>see $.jqplot.TableLegendRenderer</div></div><div class=CToolTip id="tt280"><div class=CClass>Legend object. </div></div><div class=CToolTip id="tt281"><div class=CClass>A straight line.</div></div><div class=CToolTip id="tt282"><div class=CProperty>Type of ending placed on the line [&lsquo;round&rsquo;, &lsquo;butt&rsquo;, &lsquo;square&rsquo;]</div></div><div class=CToolTip id="tt283"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt284"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt285"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>Canvas lineCap style at ends of line.</div></div><div class=CToolTip id="tt286"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt287"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt288"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'round'</td></tr></table></blockquote>Canvas lineJoin style between segments of series.</div></div><div class=CToolTip id="tt289"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.linePattern = 'solid'</td></tr></table></blockquote>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</div></div><div class=CToolTip id="tt290"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.linePattern = 'solid'</td></tr></table></blockquote>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</div></div><div class=CToolTip id="tt291"><div class=CProperty>Width of the line.</div></div><div class=CToolTip id="tt292"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>width of line if areas are stroked and not filled.</div></div><div class=CToolTip id="tt293"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>size of the line for non-filled markers.</div></div><div class=CToolTip id="tt294"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the hi-low line and open/close ticks. </div></div><div class=CToolTip id="tt295"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>width of the shadow line stroke.</div></div><div class=CToolTip id="tt296"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the trend line.</div></div><div class=CToolTip id="tt297"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2.5</td></tr></table></blockquote>width of the line in pixels. </div></div><div class=CToolTip id="tt298"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidthAdjust = 2.5</td></tr></table></blockquote>Pixels to add to the lineWidth of the highlight.</div></div><div class=CToolTip id="tt299"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'n'</td></tr></table></blockquote>compass location where to position the label around the point. </div></div><div class=CToolTip id="tt300"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'ne'</td></tr></table></blockquote>Placement of the legend. </div></div><div class=CToolTip id="tt301"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.looseZoom = true</td></tr></table></blockquote>Will expand zoom range to provide more rounded tick values. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt302"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><div class=CToolTip id="tt303"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><div class=CToolTip id="tt304"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginBottom = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt305"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginLeft = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt306"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginRight = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt307"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginTop = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt308"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote>tick mark on the axis. </div></div><div class=CToolTip id="tt309"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote>tick mark on the axis. </div></div><div class=CToolTip id="tt310"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerOptions = {}</td></tr></table></blockquote>renderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.</div></div><div class=CToolTip id="tt311"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.markerRenderer = new $.jqplot.MarkerRenderer(</td><td class=PParameter nowrap>{shadow:false}</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Renderer used to draw the marker of the highlighted point. </div></div><div class=CToolTip id="tt312"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = {show:false}</td></tr></table></blockquote>Renderer to use to draw markers on the line. </div></div><div class=CToolTip id="tt313"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = $.jqplot.MarkerRenderer</td></tr></table></blockquote>A class of a renderer which will draw marker (e.g. </div></div><div class=CToolTip id="tt314"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 6</td></tr></table></blockquote>Length of the tick marks in pixels. </div></div><div class=CToolTip id="tt315"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 4</td></tr></table></blockquote>Length of the tick marks in pixels. </div></div><div class=CToolTip id="tt316"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max</td></tr></table></blockquote>Maximum value on the gauge. </div></div><div class=CToolTip id="tt317"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max = null</td></tr></table></blockquote>maximum value of the axis (in data units, not pixels).</div></div><div class=CToolTip id="tt318"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min</td></tr></table></blockquote>Minimum value on the gauge. </div></div><div class=CToolTip id="tt319"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min = null</td></tr></table></blockquote>minimum value of the axis (in data units, not pixels).</div></div><div class=CToolTip id="tt320"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.minorTicks = 0</td></tr></table></blockquote>Number of ticks to add between &ldquo;major&rdquo; ticks. </div></div><div class=CToolTip id="tt321"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.minorTicks = 'auto'</td></tr></table></blockquote>Number of ticks to add between &ldquo;major&rdquo; ticks. </div></div><div class=CToolTip id="tt322"><div class=CSection>Copyright &copy; 2009-2012 Chris Leonello</div></div><div class=CToolTip id="tt323"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveBlock = function (</td><td class=PParameter nowrap>idx,</td></tr><tr><td></td><td class=PParameter nowrap>x,</td></tr><tr><td></td><td class=PParameter nowrap>y,</td></tr><tr><td></td><td class=PParameter nowrap>duration</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Moves an individual block. </div></div><div class=CToolTip id="tt324"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToBack = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.</div></div><div class=CToolTip id="tt325"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToFront = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases. </div></div><!--END_ND_TOOLTIPS-->
+
+</div><!--Index-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General5.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General5.html
new file mode 100644
index 00000000..05064f8b
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index/General5.html
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> &middot; 0-9 &middot; <a href="General.html#A">A</a> &middot; <a href="General.html#B">B</a> &middot; <a href="General2.html#C">C</a> &middot; <a href="General2.html#D">D</a> &middot; <a href="General2.html#E">E</a> &middot; <a href="General3.html#F">F</a> &middot; <a href="General3.html#G">G</a> &middot; <a href="General3.html#H">H</a> &middot; <a href="General4.html#I">I</a> &middot; <a href="General4.html#J">J</a> &middot; K &middot; <a href="General4.html#L">L</a> &middot; <a href="General4.html#M">M</a> &middot; <a href="#N">N</a> &middot; <a href="#O">O</a> &middot; <a href="#P">P</a> &middot; <a href="#Q">Q</a> &middot; <a href="#R">R</a> &middot; <a href="General6.html#S">S</a> &middot; <a href="General7.html#T">T</a> &middot; <a href="General7.html#U">U</a> &middot; <a href="General7.html#V">V</a> &middot; <a href="General7.html#W">W</a> &middot; <a href="General7.html#X">X</a> &middot; <a href="General7.html#Y">Y</a> &middot; <a href="General7.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="N"></a>N</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.name" id=link327 onMouseOver="ShowTip(event, 'tt326', 'link327')" onMouseOut="HideTip('tt326')" class=ISymbol>name</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needlePad" id=link328 onMouseOver="ShowTip(event, 'tt327', 'link328')" onMouseOut="HideTip('tt327')" class=ISymbol>needlePad</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needleThickness" id=link329 onMouseOver="ShowTip(event, 'tt328', 'link329')" onMouseOut="HideTip('tt328')" class=ISymbol>needleThickness</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.negativeColor" id=link330 onMouseOver="ShowTip(event, 'tt329', 'link330')" onMouseOut="HideTip('tt329')" class=ISymbol>negativeColor</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.neighborThreshold" id=link331 onMouseOver="ShowTip(event, 'tt330', 'link331')" onMouseOut="HideTip('tt330')" class=ISymbol>neighborThreshold</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.newTheme" id=link332 onMouseOver="ShowTip(event, 'tt331', 'link332')" onMouseOut="HideTip('tt331')" class=ISymbol>newTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.noDataIndicator" id=link333 onMouseOver="ShowTip(event, 'tt332', 'link333')" onMouseOut="HideTip('tt332')" class=ISymbol>noDataIndicator</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>numberColumns</span><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberColumns" id=link334 onMouseOver="ShowTip(event, 'tt333', 'link334')" onMouseOut="HideTip('tt333')" class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberColumns" id=link335 onMouseOver="ShowTip(event, 'tt334', 'link335')" onMouseOut="HideTip('tt334')" class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberColumns" id=link336 onMouseOver="ShowTip(event, 'tt335', 'link336')" onMouseOut="HideTip('tt335')" class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberColumns" id=link337 onMouseOver="ShowTip(event, 'tt336', 'link337')" onMouseOut="HideTip('tt336')" class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberColumns" id=link338 onMouseOver="ShowTip(event, 'tt337', 'link338')" onMouseOut="HideTip('tt337')" class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>numberRows</span><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberRows" id=link339 onMouseOver="ShowTip(event, 'tt338', 'link339')" onMouseOut="HideTip('tt338')" class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberRows" id=link340 onMouseOver="ShowTip(event, 'tt339', 'link340')" onMouseOut="HideTip('tt339')" class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberRows" id=link341 onMouseOver="ShowTip(event, 'tt340', 'link341')" onMouseOut="HideTip('tt340')" class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberRows" id=link342 onMouseOver="ShowTip(event, 'tt341', 'link342')" onMouseOut="HideTip('tt341')" class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberRows" id=link343 onMouseOver="ShowTip(event, 'tt342', 'link343')" onMouseOut="HideTip('tt342')" class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.numberTicks" id=link344 onMouseOver="ShowTip(event, 'tt343', 'link344')" onMouseOut="HideTip('tt343')" class=ISymbol>numberTicks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=IHeading><a name="O"></a>O</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.objects" id=link345 onMouseOver="ShowTip(event, 'tt344', 'link345')" onMouseOut="HideTip('tt344')" class=ISymbol>objects</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.offset" id=link346 onMouseOver="ShowTip(event, 'tt345', 'link346')" onMouseOut="HideTip('tt345')" class=ISymbol>offset</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#offsetBars" id=link347 onMouseOver="ShowTip(event, 'tt346', 'link347')" onMouseOut="HideTip('tt346')" class=ISymbol>offsetBars</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.openColor" id=link348 onMouseOver="ShowTip(event, 'tt347', 'link348')" onMouseOut="HideTip('tt347')" class=ISymbol>openColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/optionsTutorial-txt.html#Options_Tutorial" id=link349 onMouseOver="ShowTip(event, 'tt348', 'link349')" onMouseOut="HideTip('tt348')" class=ISymbol>Options Tutorial</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Options_Usage" id=link350 onMouseOver="ShowTip(event, 'tt349', 'link350')" onMouseOut="HideTip('tt349')" class=ISymbol>Options Usage</a></td></tr><tr><td class=IHeading><a name="P"></a>P</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.pad" id=link351 onMouseOver="ShowTip(event, 'tt350', 'link351')" onMouseOut="HideTip('tt350')" class=ISymbol>pad</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>padding</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.padding" id=link352 onMouseOver="ShowTip(event, 'tt351', 'link352')" onMouseOut="HideTip('tt351')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.padding" id=link353 onMouseOver="ShowTip(event, 'tt352', 'link353')" onMouseOut="HideTip('tt352')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.padding" id=link354 onMouseOver="ShowTip(event, 'tt353', 'link354')" onMouseOut="HideTip('tt353')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.padding" id=link355 onMouseOver="ShowTip(event, 'tt354', 'link355')" onMouseOut="HideTip('tt354')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMax" id=link356 onMouseOver="ShowTip(event, 'tt355', 'link356')" onMouseOut="HideTip('tt355')" class=ISymbol>padMax</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMin" id=link357 onMouseOver="ShowTip(event, 'tt356', 'link357')" onMouseOut="HideTip('tt356')" class=ISymbol>padMin</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.pegNeedle" id=link358 onMouseOver="ShowTip(event, 'tt357', 'link358')" onMouseOut="HideTip('tt357')" class=ISymbol>pegNeedle</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.placement" id=link359 onMouseOver="ShowTip(event, 'tt358', 'link359')" onMouseOut="HideTip('tt358')" class=ISymbol>placement</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#position" id=link360 onMouseOver="ShowTip(event, 'tt359', 'link360')" onMouseOut="HideTip('tt359')" class=ISymbol>position</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawHooks" id=link361 onMouseOver="ShowTip(event, 'tt360', 'link361')" onMouseOut="HideTip('tt360')" class=ISymbol>postDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesHooks" id=link362 onMouseOver="ShowTip(event, 'tt361', 'link362')" onMouseOut="HideTip('tt361')" class=ISymbol>postDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesShadowHooks" id=link363 onMouseOver="ShowTip(event, 'tt362', 'link363')" onMouseOut="HideTip('tt362')" class=ISymbol>postDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postInitHooks" id=link364 onMouseOver="ShowTip(event, 'tt363', 'link364')" onMouseOut="HideTip('tt363')" class=ISymbol>postInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseOptionsHooks" id=link365 onMouseOver="ShowTip(event, 'tt364', 'link365')" onMouseOut="HideTip('tt364')" class=ISymbol>postParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseSeriesOptionsHooks" id=link366 onMouseOver="ShowTip(event, 'tt365', 'link366')" onMouseOut="HideTip('tt365')" class=ISymbol>postParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postSeriesInitHooks" id=link367 onMouseOver="ShowTip(event, 'tt366', 'link367')" onMouseOut="HideTip('tt366')" class=ISymbol>postSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.predraw" id=link368 onMouseOver="ShowTip(event, 'tt367', 'link368')" onMouseOut="HideTip('tt367')" class=ISymbol>predraw</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawHooks" id=link369 onMouseOver="ShowTip(event, 'tt368', 'link369')" onMouseOut="HideTip('tt368')" class=ISymbol>preDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawLegendHooks" id=link370 onMouseOver="ShowTip(event, 'tt369', 'link370')" onMouseOut="HideTip('tt369')" class=ISymbol>preDrawLegendHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesHooks" id=link371 onMouseOver="ShowTip(event, 'tt370', 'link371')" onMouseOut="HideTip('tt370')" class=ISymbol>preDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesShadowHooks" id=link372 onMouseOver="ShowTip(event, 'tt371', 'link372')" onMouseOut="HideTip('tt371')" class=ISymbol>preDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>prefix</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.prefix" id=link373 onMouseOver="ShowTip(event, 'tt372', 'link373')" onMouseOut="HideTip('tt372')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.prefix" id=link374 onMouseOver="ShowTip(event, 'tt373', 'link374')" onMouseOut="HideTip('tt373')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preInitHooks" id=link375 onMouseOver="ShowTip(event, 'tt374', 'link375')" onMouseOut="HideTip('tt374')" class=ISymbol>preInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseOptionsHooks" id=link376 onMouseOver="ShowTip(event, 'tt375', 'link376')" onMouseOut="HideTip('tt375')" class=ISymbol>preParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseSeriesOptionsHooks" id=link377 onMouseOver="ShowTip(event, 'tt376', 'link377')" onMouseOut="HideTip('tt376')" class=ISymbol>preParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preSeriesInitHooks" id=link378 onMouseOver="ShowTip(event, 'tt377', 'link378')" onMouseOut="HideTip('tt377')" class=ISymbol>preSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>Properties</span><div class=ISubIndex><span class=IParent>Global</span><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#Properties" class=IFile>plugins/<wbr>jqplot.<wbr>enhancedLegendRenderer.js</a><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#Properties" class=IFile>plugins/<wbr>jqplot.<wbr>pyramidAxisRenderer.js</a><a href="../files/plugins/jqplot-pyramidRenderer-js.html#Properties" class=IFile>plugins/<wbr>jqplot.<wbr>pyramidRenderer.js</a></div><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.Properties" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.Properties" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.Properties" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.Properties" class=IParent>$.jqplot.<wbr>BlockRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.Properties" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.Properties" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.Properties" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.Properties" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.Properties" class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.Properties" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.Properties" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.Properties" class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.Properties" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.Properties" class=IParent>$.jqplot.<wbr>Dragable</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.Properties" class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.Properties" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.Properties" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.Properties" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.Properties" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.Properties" id=link379 onMouseOver="ShowTip(event, 'tt378', 'link379')" onMouseOut="HideTip('tt378')" class=IParent>$.jqplot.<wbr>LogAxisRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.Properties" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.Properties" class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.Properties" class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.Properties" class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.Properties" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.Properties" class=IParent>$.jqplot.<wbr>OHLCRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.Properties" class=IParent>$.jqplot.<wbr>PieLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.Properties" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.Properties" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.Properties" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.Properties" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.Properties" class=IParent>$.jqplot.<wbr>ThemeEngine</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.Properties" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.Properties" id=link380 onMouseOver="ShowTip(event, 'tt379', 'link380')" onMouseOut="HideTip('tt379')" class=IParent>Axis</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine.Properties" class=IParent>DashedHorizontalLine</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine.Properties" class=IParent>DashedVerticalLine</a><a href="../files/jqplot-core-js.html#Grid.Properties" class=IParent>Grid</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.Properties" class=IParent>HorizontalLine</a><a href="../files/jqplot-core-js.html#jqPlot.Properties" id=link381 onMouseOver="ShowTip(event, 'tt380', 'link381')" onMouseOut="HideTip('tt380')" class=IParent>jqPlot</a><a href="../files/jqplot-core-js.html#Legend.Properties" class=IParent>Legend</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.Properties" class=IParent>Line</a><a href="../files/jqplot-core-js.html#Series.Properties" id=link382 onMouseOver="ShowTip(event, 'tt381', 'link382')" onMouseOut="HideTip('tt381')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.Properties" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>pt2px</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.pt2px" id=link383 onMouseOver="ShowTip(event, 'tt382', 'link383')" onMouseOut="HideTip('tt382')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.pt2px" id=link384 onMouseOver="ShowTip(event, 'tt383', 'link384')" onMouseOut="HideTip('tt383')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=IHeading><a name="Q"></a>Q</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.quickInit" id=link385 onMouseOver="ShowTip(event, 'tt384', 'link385')" onMouseOut="HideTip('tt384')" class=ISymbol>quickInit</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="R"></a>R</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.redraw" id=link386 onMouseOver="ShowTip(event, 'tt385', 'link386')" onMouseOut="HideTip('tt385')" class=ISymbol>redraw</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.reInitialize" id=link387 onMouseOver="ShowTip(event, 'tt386', 'link387')" onMouseOut="HideTip('tt386')" class=ISymbol>reInitialize</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.remove" id=link388 onMouseOver="ShowTip(event, 'tt387', 'link388')" onMouseOut="HideTip('tt387')" class=ISymbol>remove</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.rename" id=link389 onMouseOver="ShowTip(event, 'tt388', 'link389')" onMouseOut="HideTip('tt388')" class=ISymbol>rename</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>renderer</span><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.renderer" id=link390 onMouseOver="ShowTip(event, 'tt389', 'link390')" onMouseOut="HideTip('tt389')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.renderer" id=link391 onMouseOver="ShowTip(event, 'tt390', 'link391')" onMouseOut="HideTip('tt390')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.renderer" id=link392 onMouseOver="ShowTip(event, 'tt391', 'link392')" onMouseOut="HideTip('tt391')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.renderer" id=link393 onMouseOver="ShowTip(event, 'tt392', 'link393')" onMouseOut="HideTip('tt392')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.renderer" id=link394 onMouseOver="ShowTip(event, 'tt393', 'link394')" onMouseOut="HideTip('tt393')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>rendererOptions</span><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.rendererOptions" id=link395 onMouseOver="ShowTip(event, 'tt394', 'link395')" onMouseOut="HideTip('tt394')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.rendererOptions" id=link396 onMouseOver="ShowTip(event, 'tt395', 'link396')" onMouseOut="HideTip('tt395')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.rendererOptions" id=link397 onMouseOver="ShowTip(event, 'tt396', 'link397')" onMouseOut="HideTip('tt396')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.rendererOptions" id=link398 onMouseOver="ShowTip(event, 'tt397', 'link398')" onMouseOut="HideTip('tt397')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.rendererOptions" id=link399 onMouseOver="ShowTip(event, 'tt398', 'link399')" onMouseOut="HideTip('tt398')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.rendererOptions" id=link400 onMouseOver="ShowTip(event, 'tt399', 'link400')" onMouseOut="HideTip('tt399')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.replot" id=link401 onMouseOver="ShowTip(event, 'tt400', 'link401')" onMouseOut="HideTip('tt400')" class=ISymbol>replot</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.resetAxesScale" id=link402 onMouseOver="ShowTip(event, 'tt401', 'link402')" onMouseOut="HideTip('tt401')" class=ISymbol>resetAxesScale</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restoreOriginalSeriesOrder" id=link403 onMouseOver="ShowTip(event, 'tt402', 'link403')" onMouseOut="HideTip('tt402')" class=ISymbol>restoreOriginalSeriesOrder</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restorePreviousSeriesOrder" id=link404 onMouseOver="ShowTip(event, 'tt403', 'link404')" onMouseOut="HideTip('tt403')" class=ISymbol>restorePreviousSeriesOrder</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringColor" id=link405 onMouseOver="ShowTip(event, 'tt404', 'link405')" onMouseOut="HideTip('tt404')" class=ISymbol>ringColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.ringMargin" id=link406 onMouseOver="ShowTip(event, 'tt405', 'link406')" onMouseOut="HideTip('tt405')" class=ISymbol>ringMargin</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringWidth" id=link407 onMouseOver="ShowTip(event, 'tt406', 'link407')" onMouseOut="HideTip('tt406')" class=ISymbol>ringWidth</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.rowSpacing" id=link408 onMouseOver="ShowTip(event, 'tt407', 'link408')" onMouseOut="HideTip('tt407')" class=ISymbol>rowSpacing</a>, <span class=IParent>Legend</span></td></tr></table>
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt326"><div class=CProperty>Optional name for the overlay object. </div></div><div class=CToolTip id="tt327"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needlePad = 6</td></tr></table></blockquote>Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.</div></div><div class=CToolTip id="tt328"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needleThickness = null</td></tr></table></blockquote>Maximum thickness the needle. </div></div><div class=CToolTip id="tt329"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.negativeColor</td></tr></table></blockquote>css color spec used for filled (area) plots that are filled to zero and the &ldquo;useNegativeColors&rdquo; option is true.</div></div><div class=CToolTip id="tt330"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.neighborThreshold = 4</td></tr></table></blockquote>how close or far (in pixels) the cursor must be from a point marker to detect the point.</div></div><div class=CToolTip id="tt331"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.newTheme = function(</td><td class=PParameter nowrap>name,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Create a new theme based on the default theme, adding it the themeEngine.</div></div><div class=CToolTip id="tt332"><div class=CProperty>Options to set up a mock plot with a data loading indicator if no data is specified.</div></div><div class=CToolTip id="tt333"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt334"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt335"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt336"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt337"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt338"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt339"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt340"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt341"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt342"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt343"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberTicks</td></tr></table></blockquote>Desired number of ticks. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt344"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.objects = []</td></tr></table></blockquote></div></div><div class=CToolTip id="tt345"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offset = 1</td></tr></table></blockquote>Pixel offset at the given shadow angle of each shadow stroke from the last stroke.</div></div><div class=CToolTip id="tt346"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offsetBars = false</td></tr></table></blockquote>False will center bars on their y value. </div></div><div class=CToolTip id="tt347"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.openColor = null</td></tr></table></blockquote>color of the open price tick mark. </div></div><div class=CToolTip id="tt348"><div class=CSection>This document will help you understand how jqPlot&rsquo;s options relate to the API documentation and the jqPlot object itself. </div></div><div class=CToolTip id="tt349"><div class=CGeneric>See Options Tutorial</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt350"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pad = 1.2</td></tr></table></blockquote>Padding to extend the range above and below the data bounds. </div></div><div class=CToolTip id="tt351"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote>padding between the donut and plot edges, legend, etc.</div></div><div class=CToolTip id="tt352"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = {top: 20, right: 20, bottom: 20, left: 20}</td></tr></table></blockquote>padding between the funnel and plot edges, legend, etc.</div></div><div class=CToolTip id="tt353"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = null</td></tr></table></blockquote>padding between the meterGauge and plot edges, auto calculated by default.</div></div><div class=CToolTip id="tt354"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote>padding between the pie and plot edges, legend, etc.</div></div><div class=CToolTip id="tt355"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMax = null</td></tr></table></blockquote>Padding to extend the range above data bounds. </div></div><div class=CToolTip id="tt356"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMin = null</td></tr></table></blockquote>Padding to extend the range below data bounds. </div></div><div class=CToolTip id="tt357"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pegNeedle = true</td></tr></table></blockquote>True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is &ldquo;pegged&rdquo;.</div></div><div class=CToolTip id="tt358"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.placement = &quot;insideGrid&quot;</td></tr></table></blockquote>&ldquo;insideGrid&rdquo; places legend inside the grid area of the plot. </div></div><div class=CToolTip id="tt359"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.position = null</td></tr></table></blockquote>Position of axis. </div></div><div class=CToolTip id="tt360"><div class=CHook>called after plot draw.</div></div><div class=CToolTip id="tt361"><div class=CHook>called after each series is drawn.</div></div><div class=CToolTip id="tt362"><div class=CHook>called after series shadows are drawn.</div></div><div class=CToolTip id="tt363"><div class=CHook>called after initialization.</div></div><div class=CToolTip id="tt364"><div class=CHook>called after user options are parsed.</div></div><div class=CToolTip id="tt365"><div class=CHook>called after series related options are parsed.</div></div><div class=CToolTip id="tt366"><div class=CHook>called after series is initialized.</div></div><div class=CToolTip id="tt367"><div class=CProperty>Wether to draw the legend before the series or not. </div></div><div class=CToolTip id="tt368"><div class=CHook>called before plot draw.</div></div><div class=CToolTip id="tt369"><div class=CHook>called before the legend is drawn.</div></div><div class=CToolTip id="tt370"><div class=CHook>called before each series is drawn.</div></div><div class=CToolTip id="tt371"><div class=CHook>called before series shadows are drawn.</div></div><div class=CToolTip id="tt372"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote>String to prepend to the tick label. </div></div><div class=CToolTip id="tt373"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote>String to prepend to the tick label. </div></div><div class=CToolTip id="tt374"><div class=CHook>called before initialization.</div></div><div class=CToolTip id="tt375"><div class=CHook>called before user options are parsed.</div></div><div class=CToolTip id="tt376"><div class=CHook>called before series related options are parsed.</div></div><div class=CToolTip id="tt377"><div class=CHook>called before series is initialized.</div></div><div class=CToolTip id="tt378"><div class=CGroup>Properties</div></div><div class=CToolTip id="tt379"><div class=CGroup>Axes options are specified within an axes object at the top level of the plot options like so:</div></div><div class=CToolTip id="tt380"><div class=CGroup>These properties are specified at the top of the options object like so:</div></div><div class=CToolTip id="tt381"><div class=CGroup>Properties will be assigned from a series array at the top level of the options. </div></div><div class=CToolTip id="tt382"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote>Point to pixel scaling factor, used for computing height of bounding box around a label. </div></div><div class=CToolTip id="tt383"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote>Point to pixel scaling factor, used for computing height of bounding box around a label. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt384"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.quickInit = function ()</td></tr></table></blockquote>Quick reinitialization plot for replotting. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt385"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.redraw = function(</td><td class=PParameter nowrap>clear</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Empties the plot target div and redraws the plot. </div></div><div class=CToolTip id="tt386"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.reInitialize = function (</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>opts</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>reinitialize plot for replotting. </div></div><div class=CToolTip id="tt387"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.remove = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Remove the given theme from the themeEngine.</div></div><div class=CToolTip id="tt388"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.rename = function (</td><td class=PParameter nowrap>oldName,</td></tr><tr><td></td><td class=PParameter nowrap>newName</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Rename a theme.</div></div><div class=CToolTip id="tt389"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = new $.jqplot.LineRenderer()</td></tr></table></blockquote>Renderer to use to draw the trend line. </div></div><div class=CToolTip id="tt390"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LinearAxisRenderer</td></tr></table></blockquote>A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.</div></div><div class=CToolTip id="tt391"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.CanvasGridRenderer</td></tr></table></blockquote>Instance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.</div></div><div class=CToolTip id="tt392"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LineRenderer</td></tr></table></blockquote>A class of a renderer which will draw the series, see $.jqplot.LineRenderer.</div></div><div class=CToolTip id="tt393"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.DivTitleRenderer</td></tr></table></blockquote>A class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.</div></div><div class=CToolTip id="tt394"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {marker:{show:false}}</td></tr></table></blockquote>Options to pass to the line renderer. </div></div><div class=CToolTip id="tt395"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options. </div></div><div class=CToolTip id="tt396"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>Options to pass on to the renderer, see $.jqplot.CanvasGridRenderer.</div></div><div class=CToolTip id="tt397"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options passed to the renderer.</div></div><div class=CToolTip id="tt398"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>Options to pass on to the renderer.</div></div><div class=CToolTip id="tt399"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options passed to the renderer.</div></div><div class=CToolTip id="tt400"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.replot = function(</td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Does a reinitialization of the plot followed by a redraw. </div></div><div class=CToolTip id="tt401"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.resetAxesScale = function(</td><td class=PParameter nowrap>axes,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Reset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.</div></div><div class=CToolTip id="tt402"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restoreOriginalSeriesOrder = function ()</td></tr></table></blockquote>This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.</div></div><div class=CToolTip id="tt403"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restorePreviousSeriesOrder = function ()</td></tr></table></blockquote>This method requires jQuery 1.4+ Restore the series canvas order to its previous state. </div></div><div class=CToolTip id="tt404"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringColor = &quot;#BBC6D0&quot;</td></tr></table></blockquote>color of the outer ring, hub, and needle of the gauge.</div></div><div class=CToolTip id="tt405"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringMargin = null</td></tr></table></blockquote>pixel distance between rings, or multiple series in a donut plot. </div></div><div class=CToolTip id="tt406"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringWidth = null</td></tr></table></blockquote>width of the ring around the gauge. </div></div><div class=CToolTip id="tt407"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rowSpacing = '0.5em'</td></tr></table></blockquote>css padding-top spec for the rows in the legend.</div></div><!--END_ND_TOOLTIPS-->
+
+</div><!--Index-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General6.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General6.html
new file mode 100644
index 00000000..9070e89c
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index/General6.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> &middot; 0-9 &middot; <a href="General.html#A">A</a> &middot; <a href="General.html#B">B</a> &middot; <a href="General2.html#C">C</a> &middot; <a href="General2.html#D">D</a> &middot; <a href="General2.html#E">E</a> &middot; <a href="General3.html#F">F</a> &middot; <a href="General3.html#G">G</a> &middot; <a href="General3.html#H">H</a> &middot; <a href="General4.html#I">I</a> &middot; <a href="General4.html#J">J</a> &middot; K &middot; <a href="General4.html#L">L</a> &middot; <a href="General4.html#M">M</a> &middot; <a href="General5.html#N">N</a> &middot; <a href="General5.html#O">O</a> &middot; <a href="General5.html#P">P</a> &middot; <a href="General5.html#Q">Q</a> &middot; <a href="General5.html#R">R</a> &middot; <a href="#S">S</a> &middot; <a href="General7.html#T">T</a> &middot; <a href="General7.html#U">U</a> &middot; <a href="General7.html#V">V</a> &middot; <a href="General7.html#W">W</a> &middot; <a href="General7.html#X">X</a> &middot; <a href="General7.html#Y">Y</a> &middot; <a href="General7.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.scaleToHiddenSeries" id=link409 onMouseOver="ShowTip(event, 'tt408', 'link409')" onMouseOut="HideTip('tt408')" class=ISymbol>scaleToHiddenSeries</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.sectionMargin" id=link410 onMouseOver="ShowTip(event, 'tt409', 'link410')" onMouseOut="HideTip('tt409')" class=ISymbol>sectionMargin</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.series" id=link411 onMouseOver="ShowTip(event, 'tt410', 'link411')" onMouseOut="HideTip('tt410')" class=ISymbol>series</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series" id=link412 onMouseOver="ShowTip(event, 'tt411', 'link412')" onMouseOut="HideTip('tt411')" class=ISymbol>Series</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesColors" id=link413 onMouseOver="ShowTip(event, 'tt412', 'link413')" onMouseOut="HideTip('tt412')" class=ISymbol>seriesColors</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesDefaults" id=link414 onMouseOver="ShowTip(event, 'tt413', 'link414')" onMouseOut="HideTip('tt413')" class=ISymbol>seriesDefaults</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.seriesLabelIndex" id=link415 onMouseOver="ShowTip(event, 'tt414', 'link415')" onMouseOut="HideTip('tt414')" class=ISymbol>seriesLabelIndex</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggle" id=link416 onMouseOver="ShowTip(event, 'tt415', 'link416')" onMouseOut="HideTip('tt415')" class=ISymbol>seriesToggle</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggleReplot" id=link417 onMouseOver="ShowTip(event, 'tt416', 'link417')" onMouseOut="HideTip('tt416')" class=ISymbol>seriesToggleReplot</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>setGridData</span><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.setGridData" id=link418 onMouseOver="ShowTip(event, 'tt417', 'link418')" onMouseOut="HideTip('tt417')" class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.setGridData" id=link419 onMouseOver="ShowTip(event, 'tt418', 'link419')" onMouseOut="HideTip('tt418')" class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadow</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadow" id=link420 onMouseOver="ShowTip(event, 'tt419', 'link420')" onMouseOut="HideTip('tt419')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadow" id=link421 onMouseOver="ShowTip(event, 'tt420', 'link421')" onMouseOut="HideTip('tt420')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadow" id=link422 onMouseOver="ShowTip(event, 'tt421', 'link422')" onMouseOut="HideTip('tt421')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadow" id=link423 onMouseOver="ShowTip(event, 'tt422', 'link423')" onMouseOut="HideTip('tt422')" class=IParent>Grid</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowAlpha</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowAlpha" id=link424 onMouseOver="ShowTip(event, 'tt423', 'link424')" onMouseOut="HideTip('tt423')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowAlpha" id=link425 onMouseOver="ShowTip(event, 'tt424', 'link425')" onMouseOut="HideTip('tt424')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowAlpha" id=link426 onMouseOver="ShowTip(event, 'tt425', 'link426')" onMouseOut="HideTip('tt425')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowAlpha" id=link427 onMouseOver="ShowTip(event, 'tt426', 'link427')" onMouseOut="HideTip('tt426')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAlpha" id=link428 onMouseOver="ShowTip(event, 'tt427', 'link428')" onMouseOut="HideTip('tt427')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowAlpha" id=link429 onMouseOver="ShowTip(event, 'tt428', 'link429')" onMouseOut="HideTip('tt428')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowAlpha" id=link430 onMouseOver="ShowTip(event, 'tt429', 'link430')" onMouseOut="HideTip('tt429')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAlpha" id=link431 onMouseOver="ShowTip(event, 'tt430', 'link431')" onMouseOut="HideTip('tt430')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAlpha" id=link432 onMouseOver="ShowTip(event, 'tt431', 'link432')" onMouseOut="HideTip('tt431')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAlpha" id=link433 onMouseOver="ShowTip(event, 'tt432', 'link433')" onMouseOut="HideTip('tt432')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowAngle</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowAngle" id=link434 onMouseOver="ShowTip(event, 'tt433', 'link434')" onMouseOut="HideTip('tt433')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAngle" id=link435 onMouseOver="ShowTip(event, 'tt434', 'link435')" onMouseOut="HideTip('tt434')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAngle" id=link436 onMouseOver="ShowTip(event, 'tt435', 'link436')" onMouseOut="HideTip('tt435')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAngle" id=link437 onMouseOver="ShowTip(event, 'tt436', 'link437')" onMouseOut="HideTip('tt436')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAngle" id=link438 onMouseOver="ShowTip(event, 'tt437', 'link438')" onMouseOut="HideTip('tt437')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowColor" id=link439 onMouseOver="ShowTip(event, 'tt438', 'link439')" onMouseOut="HideTip('tt438')" class=ISymbol>shadowColor</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowDepth</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowDepth" id=link440 onMouseOver="ShowTip(event, 'tt439', 'link440')" onMouseOut="HideTip('tt439')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowDepth" id=link441 onMouseOver="ShowTip(event, 'tt440', 'link441')" onMouseOut="HideTip('tt440')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowDepth" id=link442 onMouseOver="ShowTip(event, 'tt441', 'link442')" onMouseOut="HideTip('tt441')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowDepth" id=link443 onMouseOver="ShowTip(event, 'tt442', 'link443')" onMouseOut="HideTip('tt442')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowDepth" id=link444 onMouseOver="ShowTip(event, 'tt443', 'link444')" onMouseOut="HideTip('tt443')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowDepth" id=link445 onMouseOver="ShowTip(event, 'tt444', 'link445')" onMouseOut="HideTip('tt444')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowDepth" id=link446 onMouseOver="ShowTip(event, 'tt445', 'link446')" onMouseOut="HideTip('tt445')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowDepth" id=link447 onMouseOver="ShowTip(event, 'tt446', 'link447')" onMouseOut="HideTip('tt446')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowDepth" id=link448 onMouseOver="ShowTip(event, 'tt447', 'link448')" onMouseOut="HideTip('tt447')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowDepth" id=link449 onMouseOver="ShowTip(event, 'tt448', 'link449')" onMouseOut="HideTip('tt448')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowOffset</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowOffset" id=link450 onMouseOver="ShowTip(event, 'tt449', 'link450')" onMouseOut="HideTip('tt449')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowOffset" id=link451 onMouseOver="ShowTip(event, 'tt450', 'link451')" onMouseOut="HideTip('tt450')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowOffset" id=link452 onMouseOver="ShowTip(event, 'tt451', 'link452')" onMouseOut="HideTip('tt451')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowOffset" id=link453 onMouseOver="ShowTip(event, 'tt452', 'link453')" onMouseOut="HideTip('tt452')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowOffset" id=link454 onMouseOver="ShowTip(event, 'tt453', 'link454')" onMouseOut="HideTip('tt453')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowOffset" id=link455 onMouseOver="ShowTip(event, 'tt454', 'link455')" onMouseOut="HideTip('tt454')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowOffset" id=link456 onMouseOver="ShowTip(event, 'tt455', 'link456')" onMouseOut="HideTip('tt455')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowOffset" id=link457 onMouseOver="ShowTip(event, 'tt456', 'link457')" onMouseOut="HideTip('tt456')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowOffset" id=link458 onMouseOver="ShowTip(event, 'tt457', 'link458')" onMouseOut="HideTip('tt457')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowOffset" id=link459 onMouseOver="ShowTip(event, 'tt458', 'link459')" onMouseOut="HideTip('tt458')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowRenderer" id=link460 onMouseOver="ShowTip(event, 'tt459', 'link460')" onMouseOut="HideTip('tt459')" class=ISymbol>shadowRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowWidth" id=link461 onMouseOver="ShowTip(event, 'tt460', 'link461')" onMouseOut="HideTip('tt460')" class=ISymbol>shadowWidth</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shapeRenderer" id=link462 onMouseOver="ShowTip(event, 'tt461', 'link462')" onMouseOut="HideTip('tt461')" class=ISymbol>shapeRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>show</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.show" id=link463 onMouseOver="ShowTip(event, 'tt462', 'link463')" onMouseOut="HideTip('tt462')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.show" id=link464 onMouseOver="ShowTip(event, 'tt463', 'link464')" onMouseOut="HideTip('tt463')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.show" id=link465 onMouseOver="ShowTip(event, 'tt464', 'link465')" onMouseOut="HideTip('tt464')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.show" id=link466 onMouseOver="ShowTip(event, 'tt465', 'link466')" onMouseOut="HideTip('tt465')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.show" id=link467 onMouseOver="ShowTip(event, 'tt466', 'link467')" onMouseOut="HideTip('tt466')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.show" id=link468 onMouseOver="ShowTip(event, 'tt467', 'link468')" onMouseOut="HideTip('tt467')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.show" id=link469 onMouseOver="ShowTip(event, 'tt468', 'link469')" onMouseOut="HideTip('tt468')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.show" id=link470 onMouseOver="ShowTip(event, 'tt469', 'link470')" onMouseOut="HideTip('tt469')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.show" id=link471 onMouseOver="ShowTip(event, 'tt470', 'link471')" onMouseOut="HideTip('tt470')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.show" id=link472 onMouseOver="ShowTip(event, 'tt471', 'link472')" onMouseOut="HideTip('tt471')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.show" id=link473 onMouseOver="ShowTip(event, 'tt472', 'link473')" onMouseOut="HideTip('tt472')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.show" id=link474 onMouseOver="ShowTip(event, 'tt473', 'link474')" onMouseOut="HideTip('tt473')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Legend.show" id=link475 onMouseOver="ShowTip(event, 'tt474', 'link475')" onMouseOut="HideTip('tt474')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.show" id=link476 onMouseOver="ShowTip(event, 'tt475', 'link476')" onMouseOut="HideTip('tt475')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.show" id=link477 onMouseOver="ShowTip(event, 'tt476', 'link477')" onMouseOut="HideTip('tt476')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.showBorders" id=link478 onMouseOver="ShowTip(event, 'tt477', 'link478')" onMouseOut="HideTip('tt477')" class=ISymbol>showBorders</a>, <span class=IParent>$.jqplot.<wbr>MekkoRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showCursorLegend" id=link479 onMouseOver="ShowTip(event, 'tt478', 'link479')" onMouseOut="HideTip('tt478')" class=ISymbol>showCursorLegend</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showDataLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.showDataLabels" id=link480 onMouseOver="ShowTip(event, 'tt479', 'link480')" onMouseOut="HideTip('tt479')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.showDataLabels" id=link481 onMouseOver="ShowTip(event, 'tt480', 'link481')" onMouseOut="HideTip('tt480')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.showDataLabels" id=link482 onMouseOver="ShowTip(event, 'tt481', 'link482')" onMouseOut="HideTip('tt481')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showGridline</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showGridline" id=link483 onMouseOver="ShowTip(event, 'tt482', 'link483')" onMouseOut="HideTip('tt482')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showGridline" id=link484 onMouseOver="ShowTip(event, 'tt483', 'link484')" onMouseOut="HideTip('tt483')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showHorizontalLine" id=link485 onMouseOver="ShowTip(event, 'tt484', 'link485')" onMouseOut="HideTip('tt484')" class=ISymbol>showHorizontalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showLabel</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showLabel" id=link486 onMouseOver="ShowTip(event, 'tt485', 'link486')" onMouseOut="HideTip('tt485')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.showLabel" id=link487 onMouseOver="ShowTip(event, 'tt486', 'link487')" onMouseOut="HideTip('tt486')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showLabel" id=link488 onMouseOver="ShowTip(event, 'tt487', 'link488')" onMouseOut="HideTip('tt487')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Axis.showLabel" id=link489 onMouseOver="ShowTip(event, 'tt488', 'link489')" onMouseOut="HideTip('tt488')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.showLabel" id=link490 onMouseOver="ShowTip(event, 'tt489', 'link490')" onMouseOut="HideTip('tt489')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.showLabels" id=link491 onMouseOver="ShowTip(event, 'tt490', 'link491')" onMouseOut="HideTip('tt490')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.showLabels" id=link492 onMouseOver="ShowTip(event, 'tt491', 'link492')" onMouseOut="HideTip('tt491')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.showLine" id=link493 onMouseOver="ShowTip(event, 'tt492', 'link493')" onMouseOut="HideTip('tt492')" class=ISymbol>showLine</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.showLines" id=link494 onMouseOver="ShowTip(event, 'tt493', 'link494')" onMouseOut="HideTip('tt493')" class=ISymbol>showLines</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showMark</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showMark" id=link495 onMouseOver="ShowTip(event, 'tt494', 'link495')" onMouseOut="HideTip('tt494')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showMark" id=link496 onMouseOver="ShowTip(event, 'tt495', 'link496')" onMouseOut="HideTip('tt495')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showMarker</span><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showMarker" id=link497 onMouseOver="ShowTip(event, 'tt496', 'link497')" onMouseOut="HideTip('tt496')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-core-js.html#Series.showMarker" id=link498 onMouseOver="ShowTip(event, 'tt497', 'link498')" onMouseOut="HideTip('tt497')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.showMinorTicks" id=link499 onMouseOver="ShowTip(event, 'tt498', 'link499')" onMouseOut="HideTip('tt498')" class=ISymbol>showMinorTicks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.showSwatch" id=link500 onMouseOver="ShowTip(event, 'tt499', 'link500')" onMouseOut="HideTip('tt499')" class=ISymbol>showSwatch</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTickLabels" id=link501 onMouseOver="ShowTip(event, 'tt500', 'link501')" onMouseOut="HideTip('tt500')" class=ISymbol>showTickLabels</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.showTickMarks" id=link502 onMouseOver="ShowTip(event, 'tt501', 'link502')" onMouseOut="HideTip('tt501')" class=ISymbol>showTickMarks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showTicks</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTicks" id=link503 onMouseOver="ShowTip(event, 'tt502', 'link503')" onMouseOut="HideTip('tt502')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.showTicks" id=link504 onMouseOver="ShowTip(event, 'tt503', 'link504')" onMouseOut="HideTip('tt503')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showTooltip</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.showTooltip" id=link505 onMouseOver="ShowTip(event, 'tt504', 'link505')" onMouseOut="HideTip('tt504')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltip" id=link506 onMouseOver="ShowTip(event, 'tt505', 'link506')" onMouseOut="HideTip('tt505')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showTooltip" id=link507 onMouseOver="ShowTip(event, 'tt506', 'link507')" onMouseOut="HideTip('tt506')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipDataPosition" id=link508 onMouseOver="ShowTip(event, 'tt507', 'link508')" onMouseOut="HideTip('tt507')" class=ISymbol>showTooltipDataPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipGridPosition" id=link509 onMouseOver="ShowTip(event, 'tt508', 'link509')" onMouseOut="HideTip('tt508')" class=ISymbol>showTooltipGridPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipOutsideZoom" id=link510 onMouseOver="ShowTip(event, 'tt509', 'link510')" onMouseOut="HideTip('tt509')" class=ISymbol>showTooltipOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.showTooltipPrecision" id=link511 onMouseOver="ShowTip(event, 'tt510', 'link511')" onMouseOut="HideTip('tt510')" class=ISymbol>showTooltipPrecision</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipUnitPosition" id=link512 onMouseOver="ShowTip(event, 'tt511', 'link512')" onMouseOut="HideTip('tt511')" class=ISymbol>showTooltipUnitPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showVerticalLine" id=link513 onMouseOver="ShowTip(event, 'tt512', 'link513')" onMouseOut="HideTip('tt512')" class=ISymbol>showVerticalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>size</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.size" id=link514 onMouseOver="ShowTip(event, 'tt513', 'link514')" onMouseOut="HideTip('tt513')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.size" id=link515 onMouseOver="ShowTip(event, 'tt514', 'link515')" onMouseOut="HideTip('tt514')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.sizeAdjust" id=link516 onMouseOver="ShowTip(event, 'tt515', 'link516')" onMouseOut="HideTip('tt515')" class=ISymbol>sizeAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>sliceMargin</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.sliceMargin" id=link517 onMouseOver="ShowTip(event, 'tt516', 'link517')" onMouseOut="HideTip('tt516')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.sliceMargin" id=link518 onMouseOver="ShowTip(event, 'tt517', 'link518')" onMouseOut="HideTip('tt517')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.smooth" id=link519 onMouseOver="ShowTip(event, 'tt518', 'link519')" onMouseOut="HideTip('tt518')" class=ISymbol>smooth</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.sortData" id=link520 onMouseOver="ShowTip(event, 'tt519', 'link520')" onMouseOut="HideTip('tt519')" class=ISymbol>sortData</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.sortMergedLabels" id=link521 onMouseOver="ShowTip(event, 'tt520', 'link521')" onMouseOut="HideTip('tt520')" class=ISymbol>sortMergedLabels</a>, <span class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.stackedValue" id=link522 onMouseOver="ShowTip(event, 'tt521', 'link522')" onMouseOut="HideTip('tt521')" class=ISymbol>stackedValue</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.stackSeries" id=link523 onMouseOver="ShowTip(event, 'tt522', 'link523')" onMouseOut="HideTip('tt522')" class=ISymbol>stackSeries</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.start" id=link524 onMouseOver="ShowTip(event, 'tt523', 'link524')" onMouseOut="HideTip('tt523')" class=ISymbol>start</a>, <span class=IParent>Line</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>startAngle</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.startAngle" id=link525 onMouseOver="ShowTip(event, 'tt524', 'link525')" onMouseOut="HideTip('tt524')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.startAngle" id=link526 onMouseOver="ShowTip(event, 'tt525', 'link526')" onMouseOut="HideTip('tt525')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.stop" id=link527 onMouseOver="ShowTip(event, 'tt526', 'link527')" onMouseOut="HideTip('tt526')" class=ISymbol>stop</a>, <span class=IParent>Line</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeRect" id=link528 onMouseOver="ShowTip(event, 'tt527', 'link528')" onMouseOut="HideTip('tt527')" class=ISymbol>strokeRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeStyle" id=link529 onMouseOver="ShowTip(event, 'tt528', 'link529')" onMouseOut="HideTip('tt528')" class=ISymbol>strokeStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>style</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.style" id=link530 onMouseOver="ShowTip(event, 'tt529', 'link530')" onMouseOut="HideTip('tt529')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.style" id=link531 onMouseOver="ShowTip(event, 'tt530', 'link531')" onMouseOut="HideTip('tt530')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.suffix" id=link532 onMouseOver="ShowTip(event, 'tt531', 'link532')" onMouseOut="HideTip('tt531')" class=ISymbol>suffix</a>, <span class=IParent>$.jqplot.<wbr>AxisTickRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#synchronizeHighlight" id=link533 onMouseOver="ShowTip(event, 'tt532', 'link533')" onMouseOut="HideTip('tt532')" class=ISymbol>synchronizeHighlight</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.syncTicks" id=link534 onMouseOver="ShowTip(event, 'tt533', 'link534')" onMouseOut="HideTip('tt533')" class=ISymbol>syncTicks</a>, <span class=IParent>Axis</span></td></tr></table>
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt408"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.scaleToHiddenSeries = false</td></tr></table></blockquote>True to include hidden series when computing axes bounds and scaling.</div></div><div class=CToolTip id="tt409"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sectionMargin = 6</td></tr></table></blockquote>spacing between funnel sections in pixels.</div></div><div class=CToolTip id="tt410"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.series = []</td></tr></table></blockquote>Array of series object options. </div></div><div class=CToolTip id="tt411"><div class=CClass>An individual data series object. </div></div><div class=CToolTip id="tt412"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesColors = $.jqplot.config.defaultColors</td></tr></table></blockquote>Ann array of CSS color specifications that will be applied, in order, to the series in the plot. </div></div><div class=CToolTip id="tt413"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>seriesDefaults: {}, series:[] }</td></tr></table></blockquote>default options that will be applied to all series. </div></div><div class=CToolTip id="tt414"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesLabelIndex = null</td></tr></table></blockquote>array index for location of labels within data point arrays. </div></div><div class=CToolTip id="tt415"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggle = 'normal'</td></tr></table></blockquote>false to not enable series on/off toggling on the legend. </div></div><div class=CToolTip id="tt416"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggleReplot = false</td></tr></table></blockquote>True to replot the chart after toggling series on/off. </div></div><div class=CToolTip id="tt417"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt418"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt419"><div class=CProperty>wether or not to draw a shadow on the line</div></div><div class=CToolTip id="tt420"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether or not to draw a shadow on the line</div></div><div class=CToolTip id="tt421"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>true or false, wether or not to show the shadow.</div></div><div class=CToolTip id="tt422"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether to show a shadow behind the grid.</div></div><div class=CToolTip id="tt423"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.08</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt424"><div class=CProperty>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt425"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt426"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt427"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt428"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt429"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt430"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>Alpha transparency of the shadow.</div></div><div class=CToolTip id="tt431"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt432"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.1'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt433"><div class=CProperty>Shadow angle in degrees</div></div><div class=CToolTip id="tt434"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Shadow angle in degrees</div></div><div class=CToolTip id="tt435"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Angle of the shadow on the trend line.</div></div><div class=CToolTip id="tt436"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>shadow angle in degrees</div></div><div class=CToolTip id="tt437"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Shadow angle in degrees</div></div><div class=CToolTip id="tt438"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowColor = null</td></tr></table></blockquote>an optional css color spec for the shadow in &lsquo;rgba(n, n, n, n)&rsquo; form</div></div><div class=CToolTip id="tt439"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt440"><div class=CProperty>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt441"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt442"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt443"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt444"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 4</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt445"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt446"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>number of strokes to make of the shadow.</div></div><div class=CToolTip id="tt447"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt448"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt449"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt450"><div class=CProperty>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt451"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt452"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt453"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1</td></tr></table></blockquote>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt454"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt455"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt456"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.0</td></tr></table></blockquote>pixel offset for each stroke of the shadow.</div></div><div class=CToolTip id="tt457"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.5</td></tr></table></blockquote>Offset of each shadow stroke from the border in pixels</div></div><div class=CToolTip id="tt458"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.25</td></tr></table></blockquote>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt459"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowRenderer = new $.jqplot.ShadowRenderer()</td></tr></table></blockquote>Renderer that will draws the shadows on the marker.</div></div><div class=CToolTip id="tt460"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowWidth = 3</td></tr></table></blockquote>width of the stoke for the shadow</div></div><div class=CToolTip id="tt461"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shapeRenderer = new $.jqplot.ShapeRenderer()</td></tr></table></blockquote>Renderer that will draw the marker.</div></div><div class=CToolTip id="tt462"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt463"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label). </div></div><div class=CToolTip id="tt464"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt465"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt466"><div class=CProperty>true to show (draw), false to not draw.</div></div><div class=CToolTip id="tt467"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>wether to show the cursor or not.</div></div><div class=CToolTip id="tt468"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>true to show the highlight.</div></div><div class=CToolTip id="tt469"><div class=CProperty>true to show the bands. </div></div><div class=CToolTip id="tt470"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the marker.</div></div><div class=CToolTip id="tt471"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>show the labels or not.</div></div><div class=CToolTip id="tt472"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>Wether or not to show the trend line.</div></div><div class=CToolTip id="tt473"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote>Wether to display the axis on the graph.</div></div><div class=CToolTip id="tt474"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote>Wether to display the legend on the graph.</div></div><div class=CToolTip id="tt475"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to draw the series.</div></div><div class=CToolTip id="tt476"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the title</div></div><div class=CToolTip id="tt477"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showBorders = true</td></tr></table></blockquote>True to draw borders lines between areas on the chart. </div></div><div class=CToolTip id="tt478"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showCursorLegend = false</td></tr></table></blockquote>Replace the plot legend with an enhanced legend displaying intersection information.</div></div><div class=CToolTip id="tt479"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt480"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt481"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt482"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt483"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt484"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showHorizontalLine = false</td></tr></table></blockquote>draw a horizontal line across the plot which follows the cursor.</div></div><div class=CToolTip id="tt485"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt486"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt487"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt488"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>true to show the axis label.</div></div><div class=CToolTip id="tt489"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>true to show label for this series in the legend.</div></div><div class=CToolTip id="tt490"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote>True to show labels on bubbles (if any), false to not show.</div></div><div class=CToolTip id="tt491"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote>true to show the label text on the legend.</div></div><div class=CToolTip id="tt492"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLine = true</td></tr></table></blockquote>wether to actually draw the line or not. </div></div><div class=CToolTip id="tt493"><div class=CProperty>True to show lines at top and bottom of bands [default: false].</div></div><div class=CToolTip id="tt494"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt495"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt496"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote>true to show the marker</div></div><div class=CToolTip id="tt497"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote>wether or not to show the markers at the data points.</div></div><div class=CToolTip id="tt498"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMinorTicks = true</td></tr></table></blockquote>Wether or not to show minor ticks. </div></div><div class=CToolTip id="tt499"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showSwatches = true</td></tr></table></blockquote>true to show the color swatches on the legend.</div></div><div class=CToolTip id="tt500"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickLabels = true</td></tr></table></blockquote>true to show tick labels next to ticks.</div></div><div class=CToolTip id="tt501"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickMarks = true</td></tr></table></blockquote>Wether to show the tick marks (line crossing grid) or not. </div></div><div class=CToolTip id="tt502"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote>true to show ticks around gauge.</div></div><div class=CToolTip id="tt503"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote>Wether to show the ticks (both marks and labels) or not. </div></div><div class=CToolTip id="tt504"><div class=CProperty>Show a tooltip with data point values.</div></div><div class=CToolTip id="tt505"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>show a cursor position tooltip. </div></div><div class=CToolTip id="tt506"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>Show a tooltip with data point values.</div></div><div class=CToolTip id="tt507"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipDataPosition = false</td></tr></table></blockquote>Used with showVerticalLine to show intersecting data points in the tooltip.</div></div><div class=CToolTip id="tt508"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipGridPosition = false</td></tr></table></blockquote>show the grid pixel coordinates of the mouse.</div></div><div class=CToolTip id="tt509"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipOutsideZoom = false</td></tr></table></blockquote>True will keep updating the tooltip when zooming of the grid.</div></div><div class=CToolTip id="tt510"><div class=CProperty>Controls how close to line cursor must be to show tooltip. </div></div><div class=CToolTip id="tt511"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipUnitPosition = true</td></tr></table></blockquote>show the unit (data) coordinates of the mouse.</div></div><div class=CToolTip id="tt512"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showVerticalLine = false</td></tr></table></blockquote>draw a vertical line across the plot which follows the cursor. </div></div><div class=CToolTip id="tt513"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 4</td></tr></table></blockquote>Length of the tick beyond the grid in pixels. </div></div><div class=CToolTip id="tt514"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 9.0</td></tr></table></blockquote>Size of the marker (diameter or circle, length of edge of square, etc.)</div></div><div class=CToolTip id="tt515"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sizeAdjust = 5</td></tr></table></blockquote>Pixels to add to the overall size of the highlight.</div></div><div class=CToolTip id="tt516"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between donut slices in degrees.</div></div><div class=CToolTip id="tt517"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between pie slices in degrees.</div></div><div class=CToolTip id="tt518"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.smooth = false</td></tr></table></blockquote>True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points. </div></div><div class=CToolTip id="tt519"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortData = true</td></tr></table></blockquote>false to not sort the data passed in by the user. </div></div><div class=CToolTip id="tt520"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortMergedLabels = false</td></tr></table></blockquote>True to sort tick labels when labels are created by merging x axis values from multiple series. </div></div><div class=CToolTip id="tt521"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackedValue = false</td></tr></table></blockquote>true to display value as stacked in a stacked plot. </div></div><div class=CToolTip id="tt522"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackSeries = false</td></tr></table></blockquote>true or false, creates a stack or &ldquo;mountain&rdquo; plot. </div></div><div class=CToolTip id="tt523"><div class=CProperty>[x, y] coordinates for the start of the line.</div></div><div class=CToolTip id="tt524"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing donut in degrees. </div></div><div class=CToolTip id="tt525"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing pie in degrees. </div></div><div class=CToolTip id="tt526"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>stop: [] }</td></tr></table></blockquote>[x, y] coordinates for the end of the line.</div></div><div class=CToolTip id="tt527"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeRect = false</td></tr></table></blockquote>true to draw shape as a stroked rectangle.</div></div><div class=CToolTip id="tt528"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeStyle = '#999999'</td></tr></table></blockquote>css color spec for the stoke style</div></div><div class=CToolTip id="tt529"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'crosshair'</td></tr></table></blockquote>CSS spec for cursor style</div></div><div class=CToolTip id="tt530"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'filledCircle'</td></tr></table></blockquote>One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare</div></div><div class=CToolTip id="tt531"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.suffix = ''</td></tr></table></blockquote>String to append to the tick label. </div></div><div class=CToolTip id="tt532"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.synchronizeHighlight = false</td></tr></table></blockquote>Index of another series to highlight when this series is highlighted. </div></div><div class=CToolTip id="tt533"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.syncTicks = null</td></tr></table></blockquote>true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up. </div></div><!--END_ND_TOOLTIPS-->
+
+</div><!--Index-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General7.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General7.html
new file mode 100644
index 00000000..3eeb2422
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index/General7.html
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> &middot; 0-9 &middot; <a href="General.html#A">A</a> &middot; <a href="General.html#B">B</a> &middot; <a href="General2.html#C">C</a> &middot; <a href="General2.html#D">D</a> &middot; <a href="General2.html#E">E</a> &middot; <a href="General3.html#F">F</a> &middot; <a href="General3.html#G">G</a> &middot; <a href="General3.html#H">H</a> &middot; <a href="General4.html#I">I</a> &middot; <a href="General4.html#J">J</a> &middot; K &middot; <a href="General4.html#L">L</a> &middot; <a href="General4.html#M">M</a> &middot; <a href="General5.html#N">N</a> &middot; <a href="General5.html#O">O</a> &middot; <a href="General5.html#P">P</a> &middot; <a href="General5.html#Q">Q</a> &middot; <a href="General5.html#R">R</a> &middot; <a href="General6.html#S">S</a> &middot; <a href="#T">T</a> &middot; <a href="#U">U</a> &middot; <a href="#V">V</a> &middot; <a href="#W">W</a> &middot; <a href="#X">X</a> &middot; <a href="#Y">Y</a> &middot; <a href="#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="T"></a>T</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title.text" id=link535 onMouseOver="ShowTip(event, 'tt534', 'link535')" onMouseOut="HideTip('tt534')" class=ISymbol>text</a>, <span class=IParent>Title</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title.textAlign" id=link536 onMouseOver="ShowTip(event, 'tt535', 'link536')" onMouseOut="HideTip('tt535')" class=ISymbol>textAlign</a>, <span class=IParent>Title</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>textColor</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.textColor" id=link537 onMouseOver="ShowTip(event, 'tt536', 'link537')" onMouseOut="HideTip('tt536')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.textColor" id=link538 onMouseOver="ShowTip(event, 'tt537', 'link538')" onMouseOut="HideTip('tt537')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.textColor" id=link539 onMouseOver="ShowTip(event, 'tt538', 'link539')" onMouseOut="HideTip('tt538')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.textColor" id=link540 onMouseOver="ShowTip(event, 'tt539', 'link540')" onMouseOut="HideTip('tt539')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.textColor" id=link541 onMouseOver="ShowTip(event, 'tt540', 'link541')" onMouseOut="HideTip('tt540')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.themes" id=link542 onMouseOver="ShowTip(event, 'tt541', 'link542')" onMouseOut="HideTip('tt541')" class=ISymbol>themes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.thickness" id=link543 onMouseOver="ShowTip(event, 'tt542', 'link543')" onMouseOut="HideTip('tt542')" class=ISymbol>thickness</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickColor" id=link544 onMouseOver="ShowTip(event, 'tt543', 'link544')" onMouseOut="HideTip('tt543')" class=ISymbol>tickColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tickInset</span><div class=ISubIndex><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickInset" id=link545 onMouseOver="ShowTip(event, 'tt544', 'link545')" onMouseOut="HideTip('tt544')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.tickInset" id=link546 onMouseOver="ShowTip(event, 'tt545', 'link546')" onMouseOut="HideTip('tt545')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickInterval" id=link547 onMouseOver="ShowTip(event, 'tt546', 'link547')" onMouseOut="HideTip('tt546')" class=ISymbol>tickInterval</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.tickLength" id=link548 onMouseOver="ShowTip(event, 'tt547', 'link548')" onMouseOut="HideTip('tt547')" class=ISymbol>tickLength</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.tickMode" id=link549 onMouseOver="ShowTip(event, 'tt548', 'link549')" onMouseOut="HideTip('tt548')" class=ISymbol>tickMode</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickOptions" id=link550 onMouseOver="ShowTip(event, 'tt549', 'link550')" onMouseOut="HideTip('tt549')" class=ISymbol>tickOptions</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickPadding" id=link551 onMouseOver="ShowTip(event, 'tt550', 'link551')" onMouseOut="HideTip('tt550')" class=ISymbol>tickPadding</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tickRenderer</span><div class=ISubIndex><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.tickRenderer" id=link552 onMouseOver="ShowTip(event, 'tt551', 'link552')" onMouseOut="HideTip('tt551')" class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickRenderer" id=link553 onMouseOver="ShowTip(event, 'tt552', 'link553')" onMouseOut="HideTip('tt552')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickRenderer" id=link554 onMouseOver="ShowTip(event, 'tt553', 'link554')" onMouseOut="HideTip('tt553')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>ticks</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ticks" id=link555 onMouseOver="ShowTip(event, 'tt554', 'link555')" onMouseOut="HideTip('tt554')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.ticks" id=link556 onMouseOver="ShowTip(event, 'tt555', 'link556')" onMouseOut="HideTip('tt555')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tickSpacing</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickSpacing" id=link557 onMouseOver="ShowTip(event, 'tt556', 'link557')" onMouseOut="HideTip('tt556')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickSpacing" id=link558 onMouseOver="ShowTip(event, 'tt557', 'link558')" onMouseOut="HideTip('tt557')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.title" id=link559 onMouseOver="ShowTip(event, 'tt558', 'link559')" onMouseOut="HideTip('tt558')" class=ISymbol>title</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title" id=link560 onMouseOver="ShowTip(event, 'tt559', 'link560')" onMouseOut="HideTip('tt559')" class=ISymbol>Title</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipAxes" id=link561 onMouseOver="ShowTip(event, 'tt560', 'link561')" onMouseOut="HideTip('tt560')" class=ISymbol>tooltipAxes</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipAxisGroups" id=link562 onMouseOver="ShowTip(event, 'tt561', 'link562')" onMouseOut="HideTip('tt561')" class=ISymbol>tooltipAxisGroups</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipFadeSpeed</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipFadeSpeed" id=link563 onMouseOver="ShowTip(event, 'tt562', 'link563')" onMouseOut="HideTip('tt562')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFadeSpeed" id=link564 onMouseOver="ShowTip(event, 'tt563', 'link564')" onMouseOut="HideTip('tt563')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipFormatString</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipFormatString" id=link565 onMouseOver="ShowTip(event, 'tt564', 'link565')" onMouseOut="HideTip('tt564')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipFormatString" id=link566 onMouseOver="ShowTip(event, 'tt565', 'link566')" onMouseOut="HideTip('tt565')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFormatString" id=link567 onMouseOver="ShowTip(event, 'tt566', 'link567')" onMouseOut="HideTip('tt566')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipLocation</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipLocation" id=link568 onMouseOver="ShowTip(event, 'tt567', 'link568')" onMouseOut="HideTip('tt567')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipLocation" id=link569 onMouseOver="ShowTip(event, 'tt568', 'link569')" onMouseOut="HideTip('tt568')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipLocation" id=link570 onMouseOver="ShowTip(event, 'tt569', 'link570')" onMouseOut="HideTip('tt569')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipOffset</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipOffset" id=link571 onMouseOver="ShowTip(event, 'tt570', 'link571')" onMouseOut="HideTip('tt570')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipOffset" id=link572 onMouseOver="ShowTip(event, 'tt571', 'link572')" onMouseOut="HideTip('tt571')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipOffset" id=link573 onMouseOver="ShowTip(event, 'tt572', 'link573')" onMouseOut="HideTip('tt572')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.transposedData" id=link574 onMouseOver="ShowTip(event, 'tt573', 'link574')" onMouseOut="HideTip('tt573')" class=ISymbol>transposedData</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.type" id=link575 onMouseOver="ShowTip(event, 'tt574', 'link575')" onMouseOut="HideTip('tt574')" class=ISymbol>type</a>, <span class=IParent>$.jqplot.<wbr>Trendline</span></td></tr><tr><td class=IHeading><a name="U"></a>U</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.upBodyColor" id=link576 onMouseOver="ShowTip(event, 'tt575', 'link576')" onMouseOut="HideTip('tt575')" class=ISymbol>upBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Usage" id=link577 onMouseOver="ShowTip(event, 'tt576', 'link577')" onMouseOut="HideTip('tt576')" class=ISymbol>Usage</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>useAxesFormatters</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.useAxesFormatters" id=link578 onMouseOver="ShowTip(event, 'tt577', 'link578')" onMouseOut="HideTip('tt577')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.useAxesFormatters" id=link579 onMouseOver="ShowTip(event, 'tt578', 'link579')" onMouseOut="HideTip('tt578')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.useNegativeColors" id=link580 onMouseOver="ShowTip(event, 'tt579', 'link580')" onMouseOut="HideTip('tt579')" class=ISymbol>useNegativeColors</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.useSeriesColor" id=link581 onMouseOver="ShowTip(event, 'tt580', 'link581')" onMouseOut="HideTip('tt580')" class=ISymbol>useSeriesColor</a>, <span class=IParent>Axis</span></td></tr><tr><td class=IHeading><a name="V"></a>V</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.varyBarColor" id=link582 onMouseOver="ShowTip(event, 'tt581', 'link582')" onMouseOut="HideTip('tt581')" class=ISymbol>varyBarColor</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.varyBlockColors" id=link583 onMouseOver="ShowTip(event, 'tt582', 'link583')" onMouseOut="HideTip('tt582')" class=ISymbol>varyBlockColors</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.varyBubbleColors" id=link584 onMouseOver="ShowTip(event, 'tt583', 'link584')" onMouseOut="HideTip('tt583')" class=ISymbol>varyBubbleColors</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Version" id=link585 onMouseOver="ShowTip(event, 'tt584', 'link585')" onMouseOut="HideTip('tt584')" class=ISymbol>Version</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#VerticalLine" id=link586 onMouseOver="ShowTip(event, 'tt585', 'link586')" onMouseOut="HideTip('tt585')" class=ISymbol>VerticalLine</a></td></tr><tr><td class=IHeading><a name="W"></a>W</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.waterfall" id=link587 onMouseOver="ShowTip(event, 'tt586', 'link587')" onMouseOut="HideTip('tt586')" class=ISymbol>waterfall</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.wickColor" id=link588 onMouseOver="ShowTip(event, 'tt587', 'link588')" onMouseOut="HideTip('tt587')" class=ISymbol>wickColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.widthRatio" id=link589 onMouseOver="ShowTip(event, 'tt588', 'link589')" onMouseOut="HideTip('tt588')" class=ISymbol>widthRatio</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></td></tr><tr><td class=IHeading><a name="X"></a>X</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>xaxis</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.xaxis" id=link590 onMouseOver="ShowTip(event, 'tt589', 'link590')" onMouseOut="HideTip('tt589')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-core-js.html#Series.xaxis" id=link591 onMouseOver="ShowTip(event, 'tt590', 'link591')" onMouseOut="HideTip('tt590')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.xmax" id=link592 onMouseOver="ShowTip(event, 'tt591', 'link592')" onMouseOut="HideTip('tt591')" class=ISymbol>xmax</a>, <span class=IParent>HorizontalLine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.xmin" id=link593 onMouseOver="ShowTip(event, 'tt592', 'link593')" onMouseOut="HideTip('tt592')" class=ISymbol>xmin</a>, <span class=IParent>HorizontalLine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.xoffset" id=link594 onMouseOver="ShowTip(event, 'tt593', 'link594')" onMouseOut="HideTip('tt593')" class=ISymbol>xoffset</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.xpadding" id=link595 onMouseOver="ShowTip(event, 'tt594', 'link595')" onMouseOut="HideTip('tt594')" class=ISymbol>xpadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=IHeading><a name="Y"></a>Y</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.y" id=link596 onMouseOver="ShowTip(event, 'tt595', 'link596')" onMouseOut="HideTip('tt595')" class=ISymbol>y</a>, <span class=IParent>HorizontalLine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>yaxis</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.yaxis" id=link597 onMouseOver="ShowTip(event, 'tt596', 'link597')" onMouseOut="HideTip('tt596')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-core-js.html#Series.yaxis" id=link598 onMouseOver="ShowTip(event, 'tt597', 'link598')" onMouseOut="HideTip('tt597')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.yoffset" id=link599 onMouseOver="ShowTip(event, 'tt598', 'link599')" onMouseOut="HideTip('tt598')" class=ISymbol>yoffset</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.ypadding" id=link600 onMouseOver="ShowTip(event, 'tt599', 'link600')" onMouseOut="HideTip('tt599')" class=ISymbol>ypadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.yvalues" id=link601 onMouseOver="ShowTip(event, 'tt600', 'link601')" onMouseOut="HideTip('tt600')" class=ISymbol>yvalues</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=IHeading><a name="Z"></a>Z</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.zoom" id=link602 onMouseOver="ShowTip(event, 'tt601', 'link602')" onMouseOut="HideTip('tt601')" class=ISymbol>zoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy" id=link603 onMouseOver="ShowTip(event, 'tt602', 'link603')" onMouseOut="HideTip('tt602')" class=ISymbol>zoomProxy</a>, <span class=IParent>$.jqplot.<wbr>Cursor.$.jqplot.<wbr>Cursor</span></td></tr></table>
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt534"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.text = text</td></tr></table></blockquote>text of the title;</div></div><div class=CToolTip id="tt535"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textAlign</td></tr></table></blockquote>css text-align spec for the text.</div></div><div class=CToolTip id="tt536"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt537"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt538"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt539"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css color spec for the legend text.</div></div><div class=CToolTip id="tt540"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css color spec for the text.</div></div><div class=CToolTip id="tt541"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.themes = {}</td></tr></table></blockquote>hash of themes managed by the theme engine. </div></div><div class=CToolTip id="tt542"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.thickness = null</td></tr></table></blockquote>thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.</div></div><div class=CToolTip id="tt543"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickColor = &quot;989898&quot;</td></tr></table></blockquote>color of the tick marks around the gauge.</div></div><div class=CToolTip id="tt544"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInset = 0</td></tr></table></blockquote>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval. </div></div><div class=CToolTip id="tt545"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInset = 0</td></tr></table></blockquote>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval. </div></div><div class=CToolTip id="tt546"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInterval</td></tr></table></blockquote>number of units between ticks. </div></div><div class=CToolTip id="tt547"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickLength = 'auto'</td></tr></table></blockquote>length of the line in pixels indicating open and close price. </div></div><div class=CToolTip id="tt548"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickMode</td></tr></table></blockquote>How to space the ticks on the axis. </div></div><div class=CToolTip id="tt549"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickOptions = {}</td></tr></table></blockquote>Options that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.</div></div><div class=CToolTip id="tt550"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickPadding = null</td></tr></table></blockquote>padding of the tick marks to the outer ring and the tick labels to marks. </div></div><div class=CToolTip id="tt551"><div class=CProperty>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. </div></div><div class=CToolTip id="tt552"><div class=CProperty>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. </div></div><div class=CToolTip id="tt553"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickRenderer = $.jqplot.AxisTickRenderer</td></tr></table></blockquote>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.</div></div><div class=CToolTip id="tt554"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote>Array of tick values. </div></div><div class=CToolTip id="tt555"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote>1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis. </div></div><div class=CToolTip id="tt556"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 30</td></tr></table></blockquote>Degrees between ticks. </div></div><div class=CToolTip id="tt557"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 75</td></tr></table></blockquote>Approximate pixel spacing between ticks on graph. </div></div><div class=CToolTip id="tt558"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.title = new Title()</td></tr></table></blockquote>Title object. </div></div><div class=CToolTip id="tt559"><div class=CClass>Plot Title object. </div></div><div class=CToolTip id="tt560"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxes = 'both'</td></tr></table></blockquote>Which axes to display in tooltip, &lsquo;x&rsquo;, &lsquo;y&rsquo; or &lsquo;both&rsquo;, &lsquo;xy&rsquo; or &lsquo;yx&rsquo; &lsquo;both&rsquo; and &lsquo;xy&rsquo; are equivalent, &lsquo;yx&rsquo; reverses order of labels.</div></div><div class=CToolTip id="tt561"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxisGroups = []</td></tr></table></blockquote>Show position for the specified axes. </div></div><div class=CToolTip id="tt562"><div class=CProperty>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</div></div><div class=CToolTip id="tt563"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFadeSpeed = &quot;fast&quot;</td></tr></table></blockquote>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</div></div><div class=CToolTip id="tt564"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>tooltipFormatString: '%d, %d' }</td></tr></table></blockquote>Format string passed the x and y values of the cursor on the line. </div></div><div class=CToolTip id="tt565"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.4P, %.4P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt566"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.5P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt567"><div class=CProperty>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</div></div><div class=CToolTip id="tt568"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'se'</td></tr></table></blockquote>Where to position tooltip. </div></div><div class=CToolTip id="tt569"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'nw'</td></tr></table></blockquote>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</div></div><div class=CToolTip id="tt570"><div class=CProperty>Pixel offset of tooltip from the highlight.</div></div><div class=CToolTip id="tt571"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 6</td></tr></table></blockquote>Pixel offset of tooltip from the grid boudaries or cursor center.</div></div><div class=CToolTip id="tt572"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 2</td></tr></table></blockquote>Pixel offset of tooltip from the highlight.</div></div><div class=CToolTip id="tt573"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.transposedData = true</td></tr></table></blockquote>NOT IMPLEMENTED YET. </div></div><div class=CToolTip id="tt574"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.type = 'linear'</td></tr></table></blockquote>Either &lsquo;exponential&rsquo;, &lsquo;exp&rsquo;, or &lsquo;linear&rsquo;.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt575"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.upBodyColor = null</td></tr></table></blockquote>Color of candlestick body of an &ldquo;up&rdquo; day. </div></div><div class=CToolTip id="tt576"><div class=CGeneric>See jqPlot Usage</div></div><div class=CToolTip id="tt577"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt578"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt579"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useNegativeColors = true</td></tr></table></blockquote>true to color negative values differently in filled and bar charts.</div></div><div class=CToolTip id="tt580"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useSeriesColor = false</td></tr></table></blockquote>Use the color of the first series associated with this axis for the tick marks and line bordering this axis.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt581"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBarColor = false</td></tr></table></blockquote>true to color each bar of a series separately rather than have every bar of a given series the same color. </div></div><div class=CToolTip id="tt582"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBlockColors = false</td></tr></table></blockquote>true to vary the color of each block in this series according to the seriesColors array. </div></div><div class=CToolTip id="tt583"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBubbleColors = true</td></tr></table></blockquote>True to vary the color of each bubble in this series according to the seriesColors array. </div></div><div class=CToolTip id="tt584"><div class=CGeneric>version: 1.0.4 revision: 1121</div></div><div class=CToolTip id="tt585"><div class=CClass>A straight vertical line.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt586"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.waterfall = false</td></tr></table></blockquote>true to enable waterfall plot.</div></div><div class=CToolTip id="tt587"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.wickColor = null</td></tr></table></blockquote>color of the hi-lo line thorugh the candlestick body. </div></div><div class=CToolTip id="tt588"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.widthRatio = 0.2</td></tr></table></blockquote>The ratio of the width of the top of the funnel to the bottom. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt589"><div class=CProperty>X axis to use for positioning/scaling the line.</div></div><div class=CToolTip id="tt590"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xaxis = 'xaxis'</td></tr></table></blockquote>which x axis to use with this series, either &lsquo;xaxis&rsquo; or &lsquo;x2axis&rsquo;.</div></div><div class=CToolTip id="tt591"><div class=CProperty>x value for the end of the line, null to scale to axis max.</div></div><div class=CToolTip id="tt592"><div class=CProperty>x value for the start of the line, null to scale to axis min.</div></div><div class=CToolTip id="tt593"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xoffset = 0</td></tr></table></blockquote>DEPRECATED. </div></div><div class=CToolTip id="tt594"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xpadding = 6</td></tr></table></blockquote>horizontal padding in pixels between point and label</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt595"><div class=CProperty>y value to position the line</div></div><div class=CToolTip id="tt596"><div class=CProperty>Y axis to use for positioning/scaling the line.</div></div><div class=CToolTip id="tt597"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yaxis = 'yaxis'</td></tr></table></blockquote>which y axis to use with this series, either &lsquo;yaxis&rsquo; or &lsquo;y2axis&rsquo;.</div></div><div class=CToolTip id="tt598"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yoffset = 0</td></tr></table></blockquote>DEPRECATED. </div></div><div class=CToolTip id="tt599"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ypadding = 6</td></tr></table></blockquote>vertical padding in pixels between point and label</div></div><div class=CToolTip id="tt600"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yvalues = 1</td></tr></table></blockquote>Number of y values to expect in the data point array. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt601"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.zoom = false</td></tr></table></blockquote>Enable plot zooming.</div></div><div class=CToolTip id="tt602"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.Cursor.zoomProxy = function(</td><td class=PParameter nowrap>targetPlot,</td></tr><tr><td></td><td class=PParameter nowrap>controllerPlot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot. </div></div><!--END_ND_TOOLTIPS-->
+
+</div><!--Index-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Hooks.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Hooks.html
new file mode 100644
index 00000000..8b1a49f5
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index/Hooks.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Hook Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Hook Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="#A">A</a> &middot; B &middot; C &middot; D &middot; <a href="#E">E</a> &middot; F &middot; G &middot; H &middot; I &middot; <a href="#J">J</a> &middot; K &middot; L &middot; M &middot; N &middot; O &middot; <a href="#P">P</a> &middot; Q &middot; R &middot; S &middot; T &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="A"></a>A</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.addLegendRowHooks" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>addLegendRowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=IHeading><a name="E"></a>E</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.eventListenerHooks" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>eventListenerHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=IHeading><a name="J"></a>J</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.jqPlot_Pugin_Hooks" class=ISymbol>jqPlot Pugin Hooks</a>, <span class=IParent>$.jqplot</span></td></tr><tr><td class=IHeading><a name="P"></a>P</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawHooks" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>postDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesHooks" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=ISymbol>postDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesShadowHooks" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=ISymbol>postDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postInitHooks" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>postInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseOptionsHooks" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>postParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseSeriesOptionsHooks" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>postParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postSeriesInitHooks" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>postSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawHooks" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>preDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawLegendHooks" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=ISymbol>preDrawLegendHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesHooks" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=ISymbol>preDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesShadowHooks" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=ISymbol>preDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preInitHooks" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=ISymbol>preInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseOptionsHooks" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=ISymbol>preParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseSeriesOptionsHooks" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=ISymbol>preParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preSeriesInitHooks" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" class=ISymbol>preSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr></table>
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CHook>called at the end of legend draw, so plugins can add rows to the legend table.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt2"><div class=CHook>called at the end of plot drawing, binds listeners to the event canvas which lays on top of the grid area.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt3"><div class=CHook>called after plot draw.</div></div><div class=CToolTip id="tt4"><div class=CHook>called after each series is drawn.</div></div><div class=CToolTip id="tt5"><div class=CHook>called after series shadows are drawn.</div></div><div class=CToolTip id="tt6"><div class=CHook>called after initialization.</div></div><div class=CToolTip id="tt7"><div class=CHook>called after user options are parsed.</div></div><div class=CToolTip id="tt8"><div class=CHook>called after series related options are parsed.</div></div><div class=CToolTip id="tt9"><div class=CHook>called after series is initialized.</div></div><div class=CToolTip id="tt10"><div class=CHook>called before plot draw.</div></div><div class=CToolTip id="tt11"><div class=CHook>called before the legend is drawn.</div></div><div class=CToolTip id="tt12"><div class=CHook>called before each series is drawn.</div></div><div class=CToolTip id="tt13"><div class=CHook>called before series shadows are drawn.</div></div><div class=CToolTip id="tt14"><div class=CHook>called before initialization.</div></div><div class=CToolTip id="tt15"><div class=CHook>called before user options are parsed.</div></div><div class=CToolTip id="tt16"><div class=CHook>called before series related options are parsed.</div></div><div class=CToolTip id="tt17"><div class=CHook>called before series is initialized.</div></div><!--END_ND_TOOLTIPS-->
+
+</div><!--Index-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Hooks</div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties.html
new file mode 100644
index 00000000..24ad3fdf
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="#A">A</a> &middot; <a href="#B">B</a> &middot; <a href="#C">C</a> &middot; <a href="Properties2.html#D">D</a> &middot; <a href="Properties2.html#E">E</a> &middot; <a href="Properties2.html#F">F</a> &middot; <a href="Properties3.html#G">G</a> &middot; <a href="Properties3.html#H">H</a> &middot; <a href="Properties3.html#I">I</a> &middot; J &middot; K &middot; <a href="Properties3.html#L">L</a> &middot; <a href="Properties4.html#M">M</a> &middot; <a href="Properties4.html#N">N</a> &middot; <a href="Properties4.html#O">O</a> &middot; <a href="Properties4.html#P">P</a> &middot; Q &middot; <a href="Properties4.html#R">R</a> &middot; <a href="Properties5.html#S">S</a> &middot; <a href="Properties6.html#T">T</a> &middot; <a href="Properties6.html#U">U</a> &middot; <a href="Properties6.html#V">V</a> &middot; <a href="Properties6.html#W">W</a> &middot; <a href="Properties6.html#X">X</a> &middot; <a href="Properties6.html#Y">Y</a> &middot; <a href="Properties6.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="A"></a>A</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.activeTheme" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>activeTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.alignTicks" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>alignTicks</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.alpha" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>alpha</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>angle</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.angle" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.angle" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.angle" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=IParent>$.jqplot.<wbr>shadowRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.animate" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>animate</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.animateReplot" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>animateReplot</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.autoscale" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>autoscale</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleBubbles" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>autoscaleBubbles</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleMultiplier" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=ISymbol>autoscaleMultiplier</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscalePointsFactor" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=ISymbol>autoscalePointsFactor</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axes" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=ISymbol>axes</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axesDefaults" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=ISymbol>axesDefaults</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.axisDefaults" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=ISymbol>axisDefaults</a>, <span class=IParent>$.jqplot.<wbr>LogAxisRenderer</span></td></tr><tr><td class=IHeading><a name="B"></a>B</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>background</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.background" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Grid.background" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.background" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.bandData" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')" class=ISymbol>bandData</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barDirection" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')" class=ISymbol>barDirection</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelOptions" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')" class=ISymbol>barLabelOptions</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelRenderer" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')" class=ISymbol>barLabelRenderer</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabels" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')" class=ISymbol>barLabels</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barMargin" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')" class=ISymbol>barMargin</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>barPadding</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#barPadding" id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')" class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barPadding" id=link26 onMouseOver="ShowTip(event, 'tt26', 'link26')" onMouseOut="HideTip('tt26')" class=IParent>$.jqplot.<wbr>BarRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barWidth" id=link27 onMouseOver="ShowTip(event, 'tt27', 'link27')" onMouseOut="HideTip('tt27')" class=ISymbol>barWidth</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>baselineColor</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#baselineColor" id=link28 onMouseOver="ShowTip(event, 'tt28', 'link28')" onMouseOut="HideTip('tt28')" class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.baselineColor" id=link29 onMouseOver="ShowTip(event, 'tt29', 'link29')" onMouseOut="HideTip('tt29')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.baselineColor" id=link30 onMouseOver="ShowTip(event, 'tt30', 'link30')" onMouseOut="HideTip('tt30')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>baselineWidth</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#baselineWidth" id=link31 onMouseOver="ShowTip(event, 'tt31', 'link31')" onMouseOut="HideTip('tt31')" class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.baselineWidth" id=link32 onMouseOver="ShowTip(event, 'tt32', 'link32')" onMouseOut="HideTip('tt32')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.baselineWidth" id=link33 onMouseOver="ShowTip(event, 'tt33', 'link33')" onMouseOut="HideTip('tt33')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.bodyWidth" id=link34 onMouseOver="ShowTip(event, 'tt34', 'link34')" onMouseOut="HideTip('tt34')" class=ISymbol>bodyWidth</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.border" id=link35 onMouseOver="ShowTip(event, 'tt35', 'link35')" onMouseOut="HideTip('tt35')" class=ISymbol>border</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>borderColor</span><div class=ISubIndex><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.borderColor" id=link36 onMouseOver="ShowTip(event, 'tt36', 'link36')" onMouseOut="HideTip('tt36')" class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-core-js.html#Axis.borderColor" id=link37 onMouseOver="ShowTip(event, 'tt37', 'link37')" onMouseOut="HideTip('tt37')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderColor" id=link38 onMouseOver="ShowTip(event, 'tt38', 'link38')" onMouseOut="HideTip('tt38')" class=IParent>Grid</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>borderWidth</span><div class=ISubIndex><a href="../files/jqplot-core-js.html#Axis.borderWidth" id=link39 onMouseOver="ShowTip(event, 'tt39', 'link39')" onMouseOut="HideTip('tt39')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderWidth" id=link40 onMouseOver="ShowTip(event, 'tt40', 'link40')" onMouseOut="HideTip('tt40')" class=IParent>Grid</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.breakOnNull" id=link41 onMouseOver="ShowTip(event, 'tt41', 'link41')" onMouseOut="HideTip('tt41')" class=ISymbol>breakOnNull</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.breakPoints" id=link42 onMouseOver="ShowTip(event, 'tt42', 'link42')" onMouseOut="HideTip('tt42')" class=ISymbol>breakPoints</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.breakTickLabel" id=link43 onMouseOver="ShowTip(event, 'tt43', 'link43')" onMouseOut="HideTip('tt43')" class=ISymbol>breakTickLabel</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.bringSeriesToFront" id=link44 onMouseOver="ShowTip(event, 'tt44', 'link44')" onMouseOut="HideTip('tt44')" class=ISymbol>bringSeriesToFront</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleAlpha" id=link45 onMouseOver="ShowTip(event, 'tt45', 'link45')" onMouseOut="HideTip('tt45')" class=ISymbol>bubbleAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleGradients" id=link46 onMouseOver="ShowTip(event, 'tt46', 'link46')" onMouseOut="HideTip('tt46')" class=ISymbol>bubbleGradients</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=IHeading><a name="C"></a>C</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.candleStick" id=link47 onMouseOver="ShowTip(event, 'tt47', 'link47')" onMouseOut="HideTip('tt47')" class=ISymbol>candleStick</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.clearRect" id=link48 onMouseOver="ShowTip(event, 'tt48', 'link48')" onMouseOut="HideTip('tt48')" class=ISymbol>clearRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.clickReset" id=link49 onMouseOver="ShowTip(event, 'tt49', 'link49')" onMouseOut="HideTip('tt49')" class=ISymbol>clickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.closeColor" id=link50 onMouseOver="ShowTip(event, 'tt50', 'link50')" onMouseOut="HideTip('tt50')" class=ISymbol>closeColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>color</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.color" id=link51 onMouseOver="ShowTip(event, 'tt51', 'link51')" onMouseOut="HideTip('tt51')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.color" id=link52 onMouseOver="ShowTip(event, 'tt52', 'link52')" onMouseOut="HideTip('tt52')" class=IParent>$.jqplot.<wbr>Dragable</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.color" id=link53 onMouseOver="ShowTip(event, 'tt53', 'link53')" onMouseOut="HideTip('tt53')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.color" id=link54 onMouseOver="ShowTip(event, 'tt54', 'link54')" onMouseOut="HideTip('tt54')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.color" id=link55 onMouseOver="ShowTip(event, 'tt55', 'link55')" onMouseOut="HideTip('tt55')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.color" id=link56 onMouseOver="ShowTip(event, 'tt56', 'link56')" onMouseOut="HideTip('tt56')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainOutsideZoom" id=link57 onMouseOver="ShowTip(event, 'tt57', 'link57')" onMouseOut="HideTip('tt57')" class=ISymbol>constrainOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.constrainSmoothing" id=link58 onMouseOver="ShowTip(event, 'tt58', 'link58')" onMouseOut="HideTip('tt58')" class=ISymbol>constrainSmoothing</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.constrainTo" id=link59 onMouseOver="ShowTip(event, 'tt59', 'link59')" onMouseOut="HideTip('tt59')" class=ISymbol>constrainTo</a>, <span class=IParent>$.jqplot.<wbr>Dragable</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainZoomTo" id=link60 onMouseOver="ShowTip(event, 'tt60', 'link60')" onMouseOut="HideTip('tt60')" class=ISymbol>constrainZoomTo</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.css" id=link61 onMouseOver="ShowTip(event, 'tt61', 'link61')" onMouseOut="HideTip('tt61')" class=ISymbol>css</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.cursorLegendFormatString" id=link62 onMouseOver="ShowTip(event, 'tt62', 'link62')" onMouseOut="HideTip('tt62')" class=ISymbol>cursorLegendFormatString</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr></table>
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.activeTheme=null</td></tr></table></blockquote>Pointer to currently active theme</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alignTicks = false</td></tr></table></blockquote>true to align tick marks across opposed axes such as from the y2axis to yaxis.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alpha = 0.07</td></tr></table></blockquote>alpha transparency of shadow stroke.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 45</td></tr></table></blockquote>Angle of the shadow in degrees. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.animate = false</td></tr></table></blockquote>True to animate the series on initial plot draw (renderer dependent). </div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.animateReplot = false</td></tr></table></blockquote>True to animate series after a call to the replot() method. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscale = false</td></tr></table></blockquote>DEPRECATED the default scaling algorithm produces superior results.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleBubbles = true</td></tr></table></blockquote>True to scale the bubble radius based on plot size. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleMultiplier = 1.0</td></tr></table></blockquote>Multiplier the bubble size if autoscaleBubbles is true.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscalePointsFactor = -0.07</td></tr></table></blockquote>Factor which decreases bubble size based on how many bubbles on on the chart. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis'), yMidAxis: new Axis('yMidAxis')}</td></tr></table></blockquote>up to 4 axes are supported, each with it&rsquo;s own options, See Axis for axis specific options.</div></div><div class=CToolTip id="tt14"><div class=CProperty>default options that will be applied to all axes. </div></div><div class=CToolTip id="tt15"><div class=CProperty>Default properties which will be applied directly to the series.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = &quot;#efefef&quot;</td></tr></table></blockquote>background color of the inside of the gauge.</div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = '#fffdf6'</td></tr></table></blockquote>css spec for the background color.</div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background</td></tr></table></blockquote>css spec for the background of the legend box.</div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.bandData = []</td></tr></table></blockquote>Data used to draw error bands or confidence intervals above/below a line.</div></div><div class=CToolTip id="tt20"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barDirection = 'vertical'</td></tr></table></blockquote>&lsquo;vertical&rsquo; = up and down bars, &lsquo;horizontal&rsquo; = side to side bars</div></div><div class=CToolTip id="tt21"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelOptions = {}</td></tr></table></blockquote>options object to pass to the bar label renderer.</div></div><div class=CToolTip id="tt22"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote>renderer to use to draw labels under each bar.</div></div><div class=CToolTip id="tt23"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabels = this.barLabels || []</td></tr></table></blockquote>array of labels to put under each bar.</div></div><div class=CToolTip id="tt24"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barMargin = 10</td></tr></table></blockquote>Number of pixels between groups of bars at adjacent axis values.</div></div><div class=CToolTip id="tt25"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 10</td></tr></table></blockquote></div></div><div class=CToolTip id="tt26"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 8</td></tr></table></blockquote>Number of pixels between adjacent bars at the same axis value.</div></div><div class=CToolTip id="tt27"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barWidth = null</td></tr></table></blockquote>Width of the bar in pixels (auto by devaul). </div></div><div class=CToolTip id="tt28"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><div class=CToolTip id="tt29"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><div class=CToolTip id="tt30"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><div class=CToolTip id="tt31"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt32"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt33"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt34"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bodyWidth = 'auto'</td></tr></table></blockquote>width of the candlestick body in pixels. </div></div><div class=CToolTip id="tt35"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.border</td></tr></table></blockquote>css spec for the border around the legend box.</div></div><div class=CToolTip id="tt36"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote>color of the borders between areas on the chart</div></div><div class=CToolTip id="tt37"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote>color of the border adjacent to the axis. </div></div><div class=CToolTip id="tt38"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = '#999999'</td></tr></table></blockquote>css spec for the color of the grid border.</div></div><div class=CToolTip id="tt39"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = null</td></tr></table></blockquote>width of line stroked at the border of the axis. </div></div><div class=CToolTip id="tt40"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = 2.0</td></tr></table></blockquote>width of the border in pixels.</div></div><div class=CToolTip id="tt41"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakOnNull = false</td></tr></table></blockquote>Wether line segments should be be broken at null value. </div></div><div class=CToolTip id="tt42"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakPoints = null</td></tr></table></blockquote>EXPERIMENTAL!!&nbsp; </div></div><div class=CToolTip id="tt43"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakTickLabel = &quot;&amp;asymp</td></tr></table></blockquote>Label to use at the axis break if breakPoints are specified.</div></div><div class=CToolTip id="tt44"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bringSeriesToFront = false</td></tr></table></blockquote>This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.</div></div><div class=CToolTip id="tt45"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleAlpha = 1.0</td></tr></table></blockquote>Alpha transparency to apply to all bubbles in this series.</div></div><div class=CToolTip id="tt46"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleGradients = false</td></tr></table></blockquote>True to color the bubbles with gradient fills instead of flat colors. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt47"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.candleStick = false</td></tr></table></blockquote>true to render chart as candleStick. </div></div><div class=CToolTip id="tt48"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clearRect = false</td></tr></table></blockquote>true to cear a rectangle.</div></div><div class=CToolTip id="tt49"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clickReset = false</td></tr></table></blockquote>Will reset plot zoom if single click on plot without drag.</div></div><div class=CToolTip id="tt50"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.closeColor = null</td></tr></table></blockquote>color of the close price tick mark. </div></div><div class=CToolTip id="tt51"><div class=CProperty>color of the line</div></div><div class=CToolTip id="tt52"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote>CSS color spec for the dragged point (and adjacent line segment or bar).</div></div><div class=CToolTip id="tt53"><div class=CProperty>color of lines at top and bottom of bands [default: series color].</div></div><div class=CToolTip id="tt54"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>color of marker. </div></div><div class=CToolTip id="tt55"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>CSS color spec for the trend line. </div></div><div class=CToolTip id="tt56"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote>css color spec for the series</div></div><div class=CToolTip id="tt57"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainOutsideZoom = true</td></tr></table></blockquote>True to limit actual zoom area to edges of grid, even when zooming outside of plot area. </div></div><div class=CToolTip id="tt58"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.constrainSmoothing = true</td></tr></table></blockquote>True to use a more accurate smoothing algorithm that will not overshoot any data points. </div></div><div class=CToolTip id="tt59"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainTo = 'none'</td></tr></table></blockquote>Constrain dragging motion to an axis or to none. </div></div><div class=CToolTip id="tt60"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainZoomTo = 'none'</td></tr></table></blockquote>&lsquo;none&rsquo;, &lsquo;x&rsquo; or &lsquo;y&rsquo;</div></div><div class=CToolTip id="tt61"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}</td></tr></table></blockquote>default css styles that will be applied to all data blocks. </div></div><div class=CToolTip id="tt62"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString</td></tr></table></blockquote>Format string used in the cursor legend. </div></div><!--END_ND_TOOLTIPS-->
+
+</div><!--Index-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Properties</div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties2.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties2.html
new file mode 100644
index 00000000..60336a39
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties2.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="Properties.html#A">A</a> &middot; <a href="Properties.html#B">B</a> &middot; <a href="Properties.html#C">C</a> &middot; <a href="#D">D</a> &middot; <a href="#E">E</a> &middot; <a href="#F">F</a> &middot; <a href="Properties3.html#G">G</a> &middot; <a href="Properties3.html#H">H</a> &middot; <a href="Properties3.html#I">I</a> &middot; J &middot; K &middot; <a href="Properties3.html#L">L</a> &middot; <a href="Properties4.html#M">M</a> &middot; <a href="Properties4.html#N">N</a> &middot; <a href="Properties4.html#O">O</a> &middot; <a href="Properties4.html#P">P</a> &middot; Q &middot; <a href="Properties4.html#R">R</a> &middot; <a href="Properties5.html#S">S</a> &middot; <a href="Properties6.html#T">T</a> &middot; <a href="Properties6.html#U">U</a> &middot; <a href="Properties6.html#V">V</a> &middot; <a href="Properties6.html#W">W</a> &middot; <a href="Properties6.html#X">X</a> &middot; <a href="Properties6.html#Y">Y</a> &middot; <a href="Properties6.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="D"></a>D</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dashPattern</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine.dashPattern" id=link63 onMouseOver="ShowTip(event, 'tt63', 'link63')" onMouseOut="HideTip('tt63')" class=IParent>DashedHorizontalLine</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine.dashPattern" id=link64 onMouseOver="ShowTip(event, 'tt64', 'link64')" onMouseOut="HideTip('tt64')" class=IParent>DashedVerticalLine</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.data" id=link65 onMouseOver="ShowTip(event, 'tt65', 'link65')" onMouseOut="HideTip('tt65')" class=ISymbol>data</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelCenterOn" id=link66 onMouseOver="ShowTip(event, 'tt66', 'link66')" onMouseOut="HideTip('tt66')" class=ISymbol>dataLabelCenterOn</a>, <span class=IParent>$.jqplot.<wbr>PieRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelFormatString</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelFormatString" id=link67 onMouseOver="ShowTip(event, 'tt67', 'link67')" onMouseOut="HideTip('tt67')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelFormatString" id=link68 onMouseOver="ShowTip(event, 'tt68', 'link68')" onMouseOut="HideTip('tt68')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelFormatString" id=link69 onMouseOver="ShowTip(event, 'tt69', 'link69')" onMouseOut="HideTip('tt69')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelNudge</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelNudge" id=link70 onMouseOver="ShowTip(event, 'tt70', 'link70')" onMouseOut="HideTip('tt70')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelNudge" id=link71 onMouseOver="ShowTip(event, 'tt71', 'link71')" onMouseOut="HideTip('tt71')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelPositionFactor</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelPositionFactor" id=link72 onMouseOver="ShowTip(event, 'tt72', 'link72')" onMouseOut="HideTip('tt72')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelPositionFactor" id=link73 onMouseOver="ShowTip(event, 'tt73', 'link73')" onMouseOut="HideTip('tt73')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabels" id=link74 onMouseOver="ShowTip(event, 'tt74', 'link74')" onMouseOut="HideTip('tt74')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabels" id=link75 onMouseOver="ShowTip(event, 'tt75', 'link75')" onMouseOut="HideTip('tt75')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabels" id=link76 onMouseOver="ShowTip(event, 'tt76', 'link76')" onMouseOut="HideTip('tt76')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelThreshold</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelThreshold" id=link77 onMouseOver="ShowTip(event, 'tt77', 'link77')" onMouseOut="HideTip('tt77')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelThreshold" id=link78 onMouseOver="ShowTip(event, 'tt78', 'link78')" onMouseOut="HideTip('tt78')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelThreshold" id=link79 onMouseOver="ShowTip(event, 'tt79', 'link79')" onMouseOut="HideTip('tt79')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.dataRenderer" id=link80 onMouseOver="ShowTip(event, 'tt80', 'link80')" onMouseOut="HideTip('tt80')" class=ISymbol>dataRenderer</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.dataRendererOptions" id=link81 onMouseOver="ShowTip(event, 'tt81', 'link81')" onMouseOut="HideTip('tt81')" class=ISymbol>dataRendererOptions</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.dblClickReset" id=link82 onMouseOver="ShowTip(event, 'tt82', 'link82')" onMouseOut="HideTip('tt82')" class=ISymbol>dblClickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.defaultAxisStart" id=link83 onMouseOver="ShowTip(event, 'tt83', 'link83')" onMouseOut="HideTip('tt83')" class=ISymbol>defaultAxisStart</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.depth" id=link84 onMouseOver="ShowTip(event, 'tt84', 'link84')" onMouseOut="HideTip('tt84')" class=ISymbol>depth</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>diameter</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.diameter" id=link85 onMouseOver="ShowTip(event, 'tt85', 'link85')" onMouseOut="HideTip('tt85')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.diameter" id=link86 onMouseOver="ShowTip(event, 'tt86', 'link86')" onMouseOut="HideTip('tt86')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.diameter" id=link87 onMouseOver="ShowTip(event, 'tt87', 'link87')" onMouseOut="HideTip('tt87')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#disableIEFading" id=link88 onMouseOver="ShowTip(event, 'tt88', 'link88')" onMouseOut="HideTip('tt88')" class=ISymbol>disableIEFading</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.disableStack" id=link89 onMouseOver="ShowTip(event, 'tt89', 'link89')" onMouseOut="HideTip('tt89')" class=ISymbol>disableStack</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.downBodyColor" id=link90 onMouseOver="ShowTip(event, 'tt90', 'link90')" onMouseOut="HideTip('tt90')" class=ISymbol>downBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>drawBaseline</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#drawBaseline" id=link91 onMouseOver="ShowTip(event, 'tt91', 'link91')" onMouseOut="HideTip('tt91')" class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.drawBaseline" id=link92 onMouseOver="ShowTip(event, 'tt92', 'link92')" onMouseOut="HideTip('tt92')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.drawBaseline" id=link93 onMouseOver="ShowTip(event, 'tt93', 'link93')" onMouseOut="HideTip('tt93')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.drawBaseline" id=link94 onMouseOver="ShowTip(event, 'tt94', 'link94')" onMouseOut="HideTip('tt94')" class=IParent>$.jqplot.<wbr>LogAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawBorder" id=link95 onMouseOver="ShowTip(event, 'tt95', 'link95')" onMouseOut="HideTip('tt95')" class=ISymbol>drawBorder</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawGridlines" id=link96 onMouseOver="ShowTip(event, 'tt96', 'link96')" onMouseOut="HideTip('tt96')" class=ISymbol>drawGridlines</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMajorGridlines" id=link97 onMouseOver="ShowTip(event, 'tt97', 'link97')" onMouseOut="HideTip('tt97')" class=ISymbol>drawMajorGridlines</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMajorTickMarks" id=link98 onMouseOver="ShowTip(event, 'tt98', 'link98')" onMouseOut="HideTip('tt98')" class=ISymbol>drawMajorTickMarks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMinorGridlines" id=link99 onMouseOver="ShowTip(event, 'tt99', 'link99')" onMouseOut="HideTip('tt99')" class=ISymbol>drawMinorGridlines</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMinorTickMarks" id=link100 onMouseOver="ShowTip(event, 'tt100', 'link100')" onMouseOut="HideTip('tt100')" class=ISymbol>drawMinorTickMarks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=IHeading><a name="E"></a>E</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.edgeTolerance" id=link101 onMouseOver="ShowTip(event, 'tt101', 'link101')" onMouseOut="HideTip('tt101')" class=ISymbol>edgeTolerance</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>enableFontSupport</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.enableFontSupport" id=link102 onMouseOver="ShowTip(event, 'tt102', 'link102')" onMouseOut="HideTip('tt102')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.enableFontSupport" id=link103 onMouseOver="ShowTip(event, 'tt103', 'link103')" onMouseOut="HideTip('tt103')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>escapeHtml</span><div class=ISubIndex><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.escapeHtml" id=link104 onMouseOver="ShowTip(event, 'tt104', 'link104')" onMouseOut="HideTip('tt104')" class=IParent>$.jqplot.<wbr>BlockRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.escapeHtml" id=link105 onMouseOver="ShowTip(event, 'tt105', 'link105')" onMouseOut="HideTip('tt105')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.escapeHtml" id=link106 onMouseOver="ShowTip(event, 'tt106', 'link106')" onMouseOut="HideTip('tt106')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.escapeHtml" id=link107 onMouseOver="ShowTip(event, 'tt107', 'link107')" onMouseOut="HideTip('tt107')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>escapeHTML</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.escapeHTML" id=link108 onMouseOver="ShowTip(event, 'tt108', 'link108')" onMouseOut="HideTip('tt108')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.escapeHTML" id=link109 onMouseOver="ShowTip(event, 'tt109', 'link109')" onMouseOut="HideTip('tt109')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.escapeHTML" id=link110 onMouseOver="ShowTip(event, 'tt110', 'link110')" onMouseOut="HideTip('tt110')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr><tr><td class=IHeading><a name="F"></a>F</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fadeTooltip</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.fadeTooltip" id=link111 onMouseOver="ShowTip(event, 'tt111', 'link111')" onMouseOut="HideTip('tt111')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.fadeTooltip" id=link112 onMouseOver="ShowTip(event, 'tt112', 'link112')" onMouseOut="HideTip('tt112')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fill</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#fill" id=link113 onMouseOver="ShowTip(event, 'tt113', 'link113')" onMouseOut="HideTip('tt113')" class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.fill" id=link114 onMouseOver="ShowTip(event, 'tt114', 'link114')" onMouseOut="HideTip('tt114')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.fill" id=link115 onMouseOver="ShowTip(event, 'tt115', 'link115')" onMouseOut="HideTip('tt115')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.fill" id=link116 onMouseOver="ShowTip(event, 'tt116', 'link116')" onMouseOut="HideTip('tt116')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.fill" id=link117 onMouseOver="ShowTip(event, 'tt117', 'link117')" onMouseOut="HideTip('tt117')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.fill" id=link118 onMouseOver="ShowTip(event, 'tt118', 'link118')" onMouseOut="HideTip('tt118')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fill" id=link119 onMouseOver="ShowTip(event, 'tt119', 'link119')" onMouseOut="HideTip('tt119')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.fill" id=link120 onMouseOver="ShowTip(event, 'tt120', 'link120')" onMouseOut="HideTip('tt120')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAlpha" id=link121 onMouseOver="ShowTip(event, 'tt121', 'link121')" onMouseOut="HideTip('tt121')" class=ISymbol>fillAlpha</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAndStroke" id=link122 onMouseOver="ShowTip(event, 'tt122', 'link122')" onMouseOut="HideTip('tt122')" class=ISymbol>fillAndStroke</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAxis" id=link123 onMouseOver="ShowTip(event, 'tt123', 'link123')" onMouseOut="HideTip('tt123')" class=ISymbol>fillAxis</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.fillBetween" id=link124 onMouseOver="ShowTip(event, 'tt124', 'link124')" onMouseOut="HideTip('tt124')" class=ISymbol>fillBetween</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fillColor</span><div class=ISubIndex><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.fillColor" id=link125 onMouseOver="ShowTip(event, 'tt125', 'link125')" onMouseOut="HideTip('tt125')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-core-js.html#Series.fillColor" id=link126 onMouseOver="ShowTip(event, 'tt126', 'link126')" onMouseOut="HideTip('tt126')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillDownBody" id=link127 onMouseOver="ShowTip(event, 'tt127', 'link127')" onMouseOut="HideTip('tt127')" class=ISymbol>fillDownBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillRect" id=link128 onMouseOver="ShowTip(event, 'tt128', 'link128')" onMouseOut="HideTip('tt128')" class=ISymbol>fillRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillStyle" id=link129 onMouseOver="ShowTip(event, 'tt129', 'link129')" onMouseOut="HideTip('tt129')" class=ISymbol>fillStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToValue" id=link130 onMouseOver="ShowTip(event, 'tt130', 'link130')" onMouseOut="HideTip('tt130')" class=ISymbol>fillToValue</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToZero" id=link131 onMouseOver="ShowTip(event, 'tt131', 'link131')" onMouseOut="HideTip('tt131')" class=ISymbol>fillToZero</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillUpBody" id=link132 onMouseOver="ShowTip(event, 'tt132', 'link132')" onMouseOut="HideTip('tt132')" class=ISymbol>fillUpBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.followMouse" id=link133 onMouseOver="ShowTip(event, 'tt133', 'link133')" onMouseOut="HideTip('tt133')" class=ISymbol>followMouse</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontFamily</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontFamily" id=link134 onMouseOver="ShowTip(event, 'tt134', 'link134')" onMouseOut="HideTip('tt134')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontFamily" id=link135 onMouseOver="ShowTip(event, 'tt135', 'link135')" onMouseOut="HideTip('tt135')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontFamily" id=link136 onMouseOver="ShowTip(event, 'tt136', 'link136')" onMouseOut="HideTip('tt136')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.fontFamily" id=link137 onMouseOver="ShowTip(event, 'tt137', 'link137')" onMouseOut="HideTip('tt137')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontFamily" id=link138 onMouseOver="ShowTip(event, 'tt138', 'link138')" onMouseOut="HideTip('tt138')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontSize</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontSize" id=link139 onMouseOver="ShowTip(event, 'tt139', 'link139')" onMouseOut="HideTip('tt139')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontSize" id=link140 onMouseOver="ShowTip(event, 'tt140', 'link140')" onMouseOut="HideTip('tt140')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontSize" id=link141 onMouseOver="ShowTip(event, 'tt141', 'link141')" onMouseOut="HideTip('tt141')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.fontSize" id=link142 onMouseOver="ShowTip(event, 'tt142', 'link142')" onMouseOut="HideTip('tt142')" class=IParent>jqPlot</a><a href="../files/jqplot-core-js.html#Legend.fontSize" id=link143 onMouseOver="ShowTip(event, 'tt143', 'link143')" onMouseOut="HideTip('tt143')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontSize" id=link144 onMouseOver="ShowTip(event, 'tt144', 'link144')" onMouseOut="HideTip('tt144')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontStretch</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontStretch" id=link145 onMouseOver="ShowTip(event, 'tt145', 'link145')" onMouseOut="HideTip('tt145')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontStretch" id=link146 onMouseOver="ShowTip(event, 'tt146', 'link146')" onMouseOut="HideTip('tt146')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontWeight</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontWeight" id=link147 onMouseOver="ShowTip(event, 'tt147', 'link147')" onMouseOut="HideTip('tt147')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontWeight" id=link148 onMouseOver="ShowTip(event, 'tt148', 'link148')" onMouseOut="HideTip('tt148')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.forceTickAt0" id=link149 onMouseOver="ShowTip(event, 'tt149', 'link149')" onMouseOut="HideTip('tt149')" class=ISymbol>forceTickAt0</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.forceTickAt100" id=link150 onMouseOver="ShowTip(event, 'tt150', 'link150')" onMouseOut="HideTip('tt150')" class=ISymbol>forceTickAt100</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>formatString</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatString" id=link151 onMouseOver="ShowTip(event, 'tt151', 'link151')" onMouseOut="HideTip('tt151')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatString" id=link152 onMouseOver="ShowTip(event, 'tt152', 'link152')" onMouseOut="HideTip('tt152')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.formatString" id=link153 onMouseOver="ShowTip(event, 'tt153', 'link153')" onMouseOut="HideTip('tt153')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatString" id=link154 onMouseOver="ShowTip(event, 'tt154', 'link154')" onMouseOut="HideTip('tt154')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>formatter</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatter" id=link155 onMouseOver="ShowTip(event, 'tt155', 'link155')" onMouseOut="HideTip('tt155')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatter" id=link156 onMouseOver="ShowTip(event, 'tt156', 'link156')" onMouseOut="HideTip('tt156')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatter" id=link157 onMouseOver="ShowTip(event, 'tt157', 'link157')" onMouseOut="HideTip('tt157')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr></table>
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt63"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>dashPattern: [8,8] }</td></tr></table></blockquote>Array of line, space settings in pixels. </div></div><div class=CToolTip id="tt64"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>dashPattern: [8,8] }</td></tr></table></blockquote>Array of line, space settings in pixels. </div></div><div class=CToolTip id="tt65"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.data = []</td></tr></table></blockquote>user&rsquo;s data. </div></div><div class=CToolTip id="tt66"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelCenterOn = true</td></tr></table></blockquote>True to center the data label at its position. </div></div><div class=CToolTip id="tt67"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt68"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt69"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt70"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 0</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt71"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 2</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt72"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.4</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt73"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.52</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt74"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt75"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt76"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt77"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt78"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt79"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote>Threshhold in percentage (0-100) of pie area, below which no label will be displayed. </div></div><div class=CToolTip id="tt80"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataRenderer</td></tr></table></blockquote>A callable which can be used to preprocess data passed into the plot. </div></div><div class=CToolTip id="tt81"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataRendererOptions</td></tr></table></blockquote>Options that will be passed to the dataRenderer. </div></div><div class=CToolTip id="tt82"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dblClickReset = true</td></tr></table></blockquote>Will reset plot zoom if double click on plot without drag.</div></div><div class=CToolTip id="tt83"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.defaultAxisStart = 1</td></tr></table></blockquote>1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot. </div></div><div class=CToolTip id="tt84"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.depth = 3</td></tr></table></blockquote>how many times the shadow is stroked. </div></div><div class=CToolTip id="tt85"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the donut, auto computed by default</div></div><div class=CToolTip id="tt86"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the meterGauge, auto computed by default</div></div><div class=CToolTip id="tt87"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the pie, auto computed by default</div></div><div class=CToolTip id="tt88"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableIEFading = true</td></tr></table></blockquote>true to toggle series with a show/hide method only and not allow fading in/out. </div></div><div class=CToolTip id="tt89"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableStack = false</td></tr></table></blockquote>true to not stack this series with other series in the plot. </div></div><div class=CToolTip id="tt90"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.downBodyColor = null</td></tr></table></blockquote>Color of candlestick body on a &ldquo;down&rdquo; day. </div></div><div class=CToolTip id="tt91"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt92"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt93"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt94"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt95"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBorder = true</td></tr></table></blockquote>True to draw border around grid.</div></div><div class=CToolTip id="tt96"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawGridlines = true</td></tr></table></blockquote>wether to draw the gridlines on the plot.</div></div><div class=CToolTip id="tt97"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMajorGridlines = true</td></tr></table></blockquote>True to draw gridlines for major axis ticks.</div></div><div class=CToolTip id="tt98"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMajorTickMarks = true</td></tr></table></blockquote>True to draw tick marks for major axis ticks.</div></div><div class=CToolTip id="tt99"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMinorGridlines = false</td></tr></table></blockquote>True to draw gridlines for minor ticks.</div></div><div class=CToolTip id="tt100"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMinorTickMarks = true</td></tr></table></blockquote>True to draw tick marks for minor ticks. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt101"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.edgeTolerance = -5</td></tr></table></blockquote>Number of pixels that the label must be away from an axis boundary in order to be drawn. </div></div><div class=CToolTip id="tt102"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt103"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt104"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>true to escape html in the box label.</div></div><div class=CToolTip id="tt105"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = true</td></tr></table></blockquote>True to escape html in bubble label text.</div></div><div class=CToolTip id="tt106"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>True to escape special characters with their html entity equivalents in legend text. </div></div><div class=CToolTip id="tt107"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>True to escape special characters with their html entity equivalents in title text. </div></div><div class=CToolTip id="tt108"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote>true to escape HTML entities in the label.</div></div><div class=CToolTip id="tt109"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote>true to escape HTML entities in the label.</div></div><div class=CToolTip id="tt110"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = true</td></tr></table></blockquote>true to escape html entities in the labels. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt111"><div class=CProperty>true = fade in/out tooltip, flase = show/hide tooltip</div></div><div class=CToolTip id="tt112"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fadeTooltip = true</td></tr></table></blockquote>true = fade in/out tooltip, flase = show/hide tooltip</div></div><div class=CToolTip id="tt113"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>True to fill the bars.</div></div><div class=CToolTip id="tt114"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt115"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fill the areas.</div></div><div class=CToolTip id="tt116"><div class=CProperty>True to fill area between bands [default: true].</div></div><div class=CToolTip id="tt117"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt118"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt119"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt120"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>true or false, wether to fill under lines or in bars. </div></div><div class=CToolTip id="tt121"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAlpha</td></tr></table></blockquote>Alpha transparency to apply to the fill under the line. </div></div><div class=CToolTip id="tt122"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAndStroke = false</td></tr></table></blockquote>If true will stroke the line (with color this.color) as well as fill under it. </div></div><div class=CToolTip id="tt123"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAxis = 'y'</td></tr></table></blockquote>Either &lsquo;x&rsquo; or &lsquo;y&rsquo;. </div></div><div class=CToolTip id="tt124"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }</td></tr></table></blockquote>Fill between 2 line series in a plot. </div></div><div class=CToolTip id="tt125"><div class=CProperty>css color spec for filled area. </div></div><div class=CToolTip id="tt126"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillColor</td></tr></table></blockquote>CSS color spec to use for fill under line. </div></div><div class=CToolTip id="tt127"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillDownBody = true</td></tr></table></blockquote>true to render a &ldquo;down&rdquo; day (close price lower than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt128"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillRect = false</td></tr></table></blockquote>true to draw shape as a filled rectangle.</div></div><div class=CToolTip id="tt129"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillStyle = '#999999'</td></tr></table></blockquote>css color spec for the fill style.</div></div><div class=CToolTip id="tt130"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToValue = 0</td></tr></table></blockquote>fill a filled series to this value on the fill axis. </div></div><div class=CToolTip id="tt131"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToZero = false</td></tr></table></blockquote>true will force bar and filled series to fill toward zero on the fill Axis.</div></div><div class=CToolTip id="tt132"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillUpBody = false</td></tr></table></blockquote>true to render an &ldquo;up&rdquo; day (close price greater than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt133"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.followMouse = false</td></tr></table></blockquote>Tooltip follows the mouse, it is not at a fixed location. </div></div><div class=CToolTip id="tt134"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt135"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>CSS spec for the font-family css attribute. </div></div><div class=CToolTip id="tt136"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt137"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css font-family spec for the legend text.</div></div><div class=CToolTip id="tt138"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css font-family spec for the text.</div></div><div class=CToolTip id="tt139"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css spec for the font-size css attribute.</div></div><div class=CToolTip id="tt140"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '11pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt141"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '10pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt142"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css spec for the font-size attribute. </div></div><div class=CToolTip id="tt143"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css font-size spec for the legend text.</div></div><div class=CToolTip id="tt144"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css font-size spec for the text.</div></div><div class=CToolTip id="tt145"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt146"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt147"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote></div></div><div class=CToolTip id="tt148"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote>CSS spec for fontWeight</div></div><div class=CToolTip id="tt149"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.forceTickAt0 = false</td></tr></table></blockquote>This will ensure that there is always a tick mark at 0. </div></div><div class=CToolTip id="tt150"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.forceTickAt100 = false</td></tr></table></blockquote>This will ensure that there is always a tick mark at 100. </div></div><div class=CToolTip id="tt151"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt152"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt153"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = null</td></tr></table></blockquote>alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option. </div></div><div class=CToolTip id="tt154"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt155"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt156"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt157"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><!--END_ND_TOOLTIPS-->
+
+</div><!--Index-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Properties</div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties3.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties3.html
new file mode 100644
index 00000000..a3549331
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties3.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="Properties.html#A">A</a> &middot; <a href="Properties.html#B">B</a> &middot; <a href="Properties.html#C">C</a> &middot; <a href="Properties2.html#D">D</a> &middot; <a href="Properties2.html#E">E</a> &middot; <a href="Properties2.html#F">F</a> &middot; <a href="#G">G</a> &middot; <a href="#H">H</a> &middot; <a href="#I">I</a> &middot; J &middot; K &middot; <a href="#L">L</a> &middot; <a href="Properties4.html#M">M</a> &middot; <a href="Properties4.html#N">N</a> &middot; <a href="Properties4.html#O">O</a> &middot; <a href="Properties4.html#P">P</a> &middot; Q &middot; <a href="Properties4.html#R">R</a> &middot; <a href="Properties5.html#S">S</a> &middot; <a href="Properties6.html#T">T</a> &middot; <a href="Properties6.html#U">U</a> &middot; <a href="Properties6.html#V">V</a> &middot; <a href="Properties6.html#W">W</a> &middot; <a href="Properties6.html#X">X</a> &middot; <a href="Properties6.html#Y">Y</a> &middot; <a href="Properties6.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.grid" id=link158 onMouseOver="ShowTip(event, 'tt158', 'link158')" onMouseOut="HideTip('tt158')" class=ISymbol>grid</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineColor" id=link159 onMouseOver="ShowTip(event, 'tt159', 'link159')" onMouseOut="HideTip('tt159')" class=ISymbol>gridLineColor</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineWidth" id=link160 onMouseOver="ShowTip(event, 'tt160', 'link160')" onMouseOut="HideTip('tt160')" class=ISymbol>gridLineWidth</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.groups" id=link161 onMouseOver="ShowTip(event, 'tt161', 'link161')" onMouseOut="HideTip('tt161')" class=ISymbol>groups</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=IHeading><a name="H"></a>H</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.hideZeros" id=link162 onMouseOver="ShowTip(event, 'tt162', 'link162')" onMouseOut="HideTip('tt162')" class=ISymbol>hideZeros</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightAlpha" id=link163 onMouseOver="ShowTip(event, 'tt163', 'link163')" onMouseOut="HideTip('tt163')" class=ISymbol>highlightAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightColor" id=link164 onMouseOver="ShowTip(event, 'tt164', 'link164')" onMouseOut="HideTip('tt164')" class=ISymbol>highlightColor</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightColors</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightColors" id=link165 onMouseOver="ShowTip(event, 'tt165', 'link165')" onMouseOut="HideTip('tt165')" class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightColors" id=link166 onMouseOver="ShowTip(event, 'tt166', 'link166')" onMouseOut="HideTip('tt166')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightColors" id=link167 onMouseOver="ShowTip(event, 'tt167', 'link167')" onMouseOut="HideTip('tt167')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightColors" id=link168 onMouseOver="ShowTip(event, 'tt168', 'link168')" onMouseOut="HideTip('tt168')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightColors" id=link169 onMouseOver="ShowTip(event, 'tt169', 'link169')" onMouseOut="HideTip('tt169')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightColors" id=link170 onMouseOver="ShowTip(event, 'tt170', 'link170')" onMouseOut="HideTip('tt170')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightMouseDown</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightMouseDown" id=link171 onMouseOver="ShowTip(event, 'tt171', 'link171')" onMouseOut="HideTip('tt171')" class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseDown" id=link172 onMouseOver="ShowTip(event, 'tt172', 'link172')" onMouseOut="HideTip('tt172')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseDown" id=link173 onMouseOver="ShowTip(event, 'tt173', 'link173')" onMouseOut="HideTip('tt173')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseDown" id=link174 onMouseOver="ShowTip(event, 'tt174', 'link174')" onMouseOut="HideTip('tt174')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseDown" id=link175 onMouseOver="ShowTip(event, 'tt175', 'link175')" onMouseOut="HideTip('tt175')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseDown" id=link176 onMouseOver="ShowTip(event, 'tt176', 'link176')" onMouseOut="HideTip('tt176')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseDown" id=link177 onMouseOver="ShowTip(event, 'tt177', 'link177')" onMouseOut="HideTip('tt177')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightMouseOver</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightMouseOver" id=link178 onMouseOver="ShowTip(event, 'tt178', 'link178')" onMouseOut="HideTip('tt178')" class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseOver" id=link179 onMouseOver="ShowTip(event, 'tt179', 'link179')" onMouseOut="HideTip('tt179')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseOver" id=link180 onMouseOver="ShowTip(event, 'tt180', 'link180')" onMouseOut="HideTip('tt180')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseOver" id=link181 onMouseOver="ShowTip(event, 'tt181', 'link181')" onMouseOut="HideTip('tt181')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseOver" id=link182 onMouseOver="ShowTip(event, 'tt182', 'link182')" onMouseOut="HideTip('tt182')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseOver" id=link183 onMouseOver="ShowTip(event, 'tt183', 'link183')" onMouseOut="HideTip('tt183')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseOver" id=link184 onMouseOver="ShowTip(event, 'tt184', 'link184')" onMouseOut="HideTip('tt184')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.hlc" id=link185 onMouseOver="ShowTip(event, 'tt185', 'link185')" onMouseOut="HideTip('tt185')" class=ISymbol>hlc</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.hubRadius" id=link186 onMouseOver="ShowTip(event, 'tt186', 'link186')" onMouseOut="HideTip('tt186')" class=ISymbol>hubRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=IHeading><a name="I"></a>I</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.index" id=link187 onMouseOver="ShowTip(event, 'tt187', 'link187')" onMouseOut="HideTip('tt187')" class=ISymbol>index</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.innerDiameter" id=link188 onMouseOver="ShowTip(event, 'tt188', 'link188')" onMouseOut="HideTip('tt188')" class=ISymbol>innerDiameter</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.insertBreaks" id=link189 onMouseOver="ShowTip(event, 'tt189', 'link189')" onMouseOut="HideTip('tt189')" class=ISymbol>insertBreaks</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.intersectionThreshold" id=link190 onMouseOver="ShowTip(event, 'tt190', 'link190')" onMouseOut="HideTip('tt190')" class=ISymbol>intersectionThreshold</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.interval" id=link191 onMouseOver="ShowTip(event, 'tt191', 'link191')" onMouseOut="HideTip('tt191')" class=ISymbol>interval</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalColors" id=link192 onMouseOver="ShowTip(event, 'tt192', 'link192')" onMouseOut="HideTip('tt192')" class=ISymbol>intervalColors</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalInnerRadius" id=link193 onMouseOver="ShowTip(event, 'tt193', 'link193')" onMouseOut="HideTip('tt193')" class=ISymbol>intervalInnerRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalOuterRadius" id=link194 onMouseOver="ShowTip(event, 'tt194', 'link194')" onMouseOut="HideTip('tt194')" class=ISymbol>intervalOuterRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervals" id=link195 onMouseOver="ShowTip(event, 'tt195', 'link195')" onMouseOut="HideTip('tt195')" class=ISymbol>intervals</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>isarc</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.isarc" id=link196 onMouseOver="ShowTip(event, 'tt196', 'link196')" onMouseOut="HideTip('tt196')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.isarc" id=link197 onMouseOver="ShowTip(event, 'tt197', 'link197')" onMouseOut="HideTip('tt197')" class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>isMinorTick</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.isMinorTick" id=link198 onMouseOver="ShowTip(event, 'tt198', 'link198')" onMouseOut="HideTip('tt198')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.isMinorTick" id=link199 onMouseOver="ShowTip(event, 'tt199', 'link199')" onMouseOut="HideTip('tt199')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=IHeading><a name="L"></a>L</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>label</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.label" id=link200 onMouseOver="ShowTip(event, 'tt200', 'link200')" onMouseOut="HideTip('tt200')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.label" id=link201 onMouseOver="ShowTip(event, 'tt201', 'link201')" onMouseOut="HideTip('tt201')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.label" id=link202 onMouseOver="ShowTip(event, 'tt202', 'link202')" onMouseOut="HideTip('tt202')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.label" id=link203 onMouseOver="ShowTip(event, 'tt203', 'link203')" onMouseOut="HideTip('tt203')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.label" id=link204 onMouseOver="ShowTip(event, 'tt204', 'link204')" onMouseOut="HideTip('tt204')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.label" id=link205 onMouseOver="ShowTip(event, 'tt205', 'link205')" onMouseOut="HideTip('tt205')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelHeightAdjust" id=link206 onMouseOver="ShowTip(event, 'tt206', 'link206')" onMouseOut="HideTip('tt206')" class=ISymbol>labelHeightAdjust</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelOptions" id=link207 onMouseOver="ShowTip(event, 'tt207', 'link207')" onMouseOut="HideTip('tt207')" class=ISymbol>labelOptions</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>labelPosition</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.labelPosition" id=link208 onMouseOver="ShowTip(event, 'tt208', 'link208')" onMouseOut="HideTip('tt208')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelPosition" id=link209 onMouseOver="ShowTip(event, 'tt209', 'link209')" onMouseOut="HideTip('tt209')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelRenderer" id=link210 onMouseOver="ShowTip(event, 'tt210', 'link210')" onMouseOut="HideTip('tt210')" class=ISymbol>labelRenderer</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>labels</span><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labels" id=link211 onMouseOver="ShowTip(event, 'tt211', 'link211')" onMouseOut="HideTip('tt211')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.labels" id=link212 onMouseOver="ShowTip(event, 'tt212', 'link212')" onMouseOut="HideTip('tt212')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labelsFromSeries" id=link213 onMouseOver="ShowTip(event, 'tt213', 'link213')" onMouseOut="HideTip('tt213')" class=ISymbol>labelsFromSeries</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.legend" id=link214 onMouseOver="ShowTip(event, 'tt214', 'link214')" onMouseOut="HideTip('tt214')" class=ISymbol>legend</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineCap</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.lineCap" id=link215 onMouseOver="ShowTip(event, 'tt215', 'link215')" onMouseOut="HideTip('tt215')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineCap" id=link216 onMouseOver="ShowTip(event, 'tt216', 'link216')" onMouseOut="HideTip('tt216')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineCap" id=link217 onMouseOver="ShowTip(event, 'tt217', 'link217')" onMouseOut="HideTip('tt217')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.lineCap" id=link218 onMouseOver="ShowTip(event, 'tt218', 'link218')" onMouseOut="HideTip('tt218')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineJoin</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineJoin" id=link219 onMouseOver="ShowTip(event, 'tt219', 'link219')" onMouseOut="HideTip('tt219')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineJoin" id=link220 onMouseOver="ShowTip(event, 'tt220', 'link220')" onMouseOut="HideTip('tt220')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.lineJoin" id=link221 onMouseOver="ShowTip(event, 'tt221', 'link221')" onMouseOut="HideTip('tt221')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>linePattern</span><div class=ISubIndex><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.linePattern" id=link222 onMouseOver="ShowTip(event, 'tt222', 'link222')" onMouseOut="HideTip('tt222')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.linePattern" id=link223 onMouseOver="ShowTip(event, 'tt223', 'link223')" onMouseOut="HideTip('tt223')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineWidth</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.lineWidth" id=link224 onMouseOver="ShowTip(event, 'tt224', 'link224')" onMouseOut="HideTip('tt224')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.lineWidth" id=link225 onMouseOver="ShowTip(event, 'tt225', 'link225')" onMouseOut="HideTip('tt225')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.lineWidth" id=link226 onMouseOver="ShowTip(event, 'tt226', 'link226')" onMouseOut="HideTip('tt226')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.lineWidth" id=link227 onMouseOver="ShowTip(event, 'tt227', 'link227')" onMouseOut="HideTip('tt227')" class=IParent>$.jqplot.<wbr>OHLCRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineWidth" id=link228 onMouseOver="ShowTip(event, 'tt228', 'link228')" onMouseOut="HideTip('tt228')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.lineWidth" id=link229 onMouseOver="ShowTip(event, 'tt229', 'link229')" onMouseOut="HideTip('tt229')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.lineWidth" id=link230 onMouseOver="ShowTip(event, 'tt230', 'link230')" onMouseOut="HideTip('tt230')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.lineWidthAdjust" id=link231 onMouseOver="ShowTip(event, 'tt231', 'link231')" onMouseOut="HideTip('tt231')" class=ISymbol>lineWidthAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>location</span><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.location" id=link232 onMouseOver="ShowTip(event, 'tt232', 'link232')" onMouseOut="HideTip('tt232')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.location" id=link233 onMouseOver="ShowTip(event, 'tt233', 'link233')" onMouseOut="HideTip('tt233')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.looseZoom" id=link234 onMouseOver="ShowTip(event, 'tt234', 'link234')" onMouseOut="HideTip('tt234')" class=ISymbol>looseZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr></table>
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt158"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.grid = new Grid()</td></tr></table></blockquote>See Grid for grid specific options.</div></div><div class=CToolTip id="tt159"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineColor = '#cccccc'</td></tr></table></blockquote>color of the grid lines.</div></div><div class=CToolTip id="tt160"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineWidth = 1.0</td></tr></table></blockquote>width of the grid lines.</div></div><div class=CToolTip id="tt161"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.groups = 1</td></tr></table></blockquote>group bars into this many groups</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt162"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hideZeros = false</td></tr></table></blockquote>true to not show a label for a value which is 0.</div></div><div class=CToolTip id="tt163"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightAlpha = null</td></tr></table></blockquote>Alpha transparency to apply when highlighting bubble. </div></div><div class=CToolTip id="tt164"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColor = null</td></tr></table></blockquote>color to use when highlighting an area on a filled plot.</div></div><div class=CToolTip id="tt165"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt166"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a bar.</div></div><div class=CToolTip id="tt167"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>An array of colors to use when highlighting a slice. </div></div><div class=CToolTip id="tt168"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt169"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>array of colors to use when highlighting an area.</div></div><div class=CToolTip id="tt170"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt171"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt172"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt173"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a bubble. </div></div><div class=CToolTip id="tt174"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt175"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a area. </div></div><div class=CToolTip id="tt176"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over an area on a filled plot. </div></div><div class=CToolTip id="tt177"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt178"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt179"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt180"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight bubbles when moused over. </div></div><div class=CToolTip id="tt181"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt182"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area when moused over. </div></div><div class=CToolTip id="tt183"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area on a filled plot when moused over. </div></div><div class=CToolTip id="tt184"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt185"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hlc = false</td></tr></table></blockquote>true if is a hi-low-close chart (no open price). </div></div><div class=CToolTip id="tt186"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hubRadius = null</td></tr></table></blockquote>Radius of the hub at the bottom center of gauge which the needle attaches to. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt187"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.index</td></tr></table></blockquote>0 based index of this series in the plot series array.</div></div><div class=CToolTip id="tt188"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.innerDiameter = null</td></tr></table></blockquote>Inner diameter of the donut, auto calculated by default. </div></div><div class=CToolTip id="tt189"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.insertBreaks = true</td></tr></table></blockquote>true to turn spaces in data block label into html breaks br /.</div></div><div class=CToolTip id="tt190"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intersectionThreshold = 2</td></tr></table></blockquote>pixel distance from data point or marker to consider cursor lines intersecting with point. </div></div><div class=CToolTip id="tt191"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>interval: '3%' }</td></tr></table></blockquote>User specified interval above and below line for bands [default: &lsquo;3%&rsquo;&rsquo;]. </div></div><div class=CToolTip id="tt192"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalColors = [ &quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;]</td></tr></table></blockquote>Array of colors to use for the intervals.</div></div><div class=CToolTip id="tt193"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalInnerRadius = null</td></tr></table></blockquote>Radius of the inner circle of the interval ring.</div></div><div class=CToolTip id="tt194"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalOuterRadius = null</td></tr></table></blockquote>Radius of the outer circle of the interval ring.</div></div><div class=CToolTip id="tt195"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervals = []</td></tr></table></blockquote>Array of ranges to be drawn around the gauge. </div></div><div class=CToolTip id="tt196"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt197"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt198"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><div class=CToolTip id="tt199"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt200"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>The text or html for the label.</div></div><div class=CToolTip id="tt201"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>label for the axis.</div></div><div class=CToolTip id="tt202"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote>A gauge label like &lsquo;kph&rsquo; or &lsquo;Volts&rsquo;</div></div><div class=CToolTip id="tt203"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>Label for the trend line to use in the legend.</div></div><div class=CToolTip id="tt204"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote>Label for the axis</div></div><div class=CToolTip id="tt205"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>Line label to use in the legend.</div></div><div class=CToolTip id="tt206"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelHeightAdjust = 0</td></tr></table></blockquote>Number of Pixels to offset the label up (-) or down (+) from its default position.</div></div><div class=CToolTip id="tt207"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelOptions = {}</td></tr></table></blockquote>Options passed to the label renderer.</div></div><div class=CToolTip id="tt208"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'auto'</td></tr></table></blockquote>&lsquo;auto&rsquo;, &lsquo;start&rsquo;, &lsquo;middle&rsquo; or &lsquo;end&rsquo;. </div></div><div class=CToolTip id="tt209"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'inside'</td></tr></table></blockquote>Where to position the label, either &lsquo;inside&rsquo; or &lsquo;bottom&rsquo;.</div></div><div class=CToolTip id="tt210"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote>A class of a rendering engine for creating an axis label.</div></div><div class=CToolTip id="tt211"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote>array of arrays of labels, one array for each series.</div></div><div class=CToolTip id="tt212"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote>Array of labels to use. </div></div><div class=CToolTip id="tt213"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelsFromSeries = false</td></tr></table></blockquote>true to use labels within data point arrays.</div></div><div class=CToolTip id="tt214"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.legend = new Legend()</td></tr></table></blockquote>see $.jqplot.TableLegendRenderer</div></div><div class=CToolTip id="tt215"><div class=CProperty>Type of ending placed on the line [&lsquo;round&rsquo;, &lsquo;butt&rsquo;, &lsquo;square&rsquo;]</div></div><div class=CToolTip id="tt216"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt217"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt218"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>Canvas lineCap style at ends of line.</div></div><div class=CToolTip id="tt219"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt220"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt221"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'round'</td></tr></table></blockquote>Canvas lineJoin style between segments of series.</div></div><div class=CToolTip id="tt222"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.linePattern = 'solid'</td></tr></table></blockquote>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</div></div><div class=CToolTip id="tt223"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.linePattern = 'solid'</td></tr></table></blockquote>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</div></div><div class=CToolTip id="tt224"><div class=CProperty>Width of the line.</div></div><div class=CToolTip id="tt225"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>width of line if areas are stroked and not filled.</div></div><div class=CToolTip id="tt226"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>size of the line for non-filled markers.</div></div><div class=CToolTip id="tt227"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the hi-low line and open/close ticks. </div></div><div class=CToolTip id="tt228"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>width of the shadow line stroke.</div></div><div class=CToolTip id="tt229"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the trend line.</div></div><div class=CToolTip id="tt230"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2.5</td></tr></table></blockquote>width of the line in pixels. </div></div><div class=CToolTip id="tt231"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidthAdjust = 2.5</td></tr></table></blockquote>Pixels to add to the lineWidth of the highlight.</div></div><div class=CToolTip id="tt232"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'n'</td></tr></table></blockquote>compass location where to position the label around the point. </div></div><div class=CToolTip id="tt233"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'ne'</td></tr></table></blockquote>Placement of the legend. </div></div><div class=CToolTip id="tt234"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.looseZoom = true</td></tr></table></blockquote>Will expand zoom range to provide more rounded tick values. </div></div><!--END_ND_TOOLTIPS-->
+
+</div><!--Index-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Properties</div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties4.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties4.html
new file mode 100644
index 00000000..f802eb57
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties4.html
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="Properties.html#A">A</a> &middot; <a href="Properties.html#B">B</a> &middot; <a href="Properties.html#C">C</a> &middot; <a href="Properties2.html#D">D</a> &middot; <a href="Properties2.html#E">E</a> &middot; <a href="Properties2.html#F">F</a> &middot; <a href="Properties3.html#G">G</a> &middot; <a href="Properties3.html#H">H</a> &middot; <a href="Properties3.html#I">I</a> &middot; J &middot; K &middot; <a href="Properties3.html#L">L</a> &middot; <a href="#M">M</a> &middot; <a href="#N">N</a> &middot; <a href="#O">O</a> &middot; <a href="#P">P</a> &middot; Q &middot; <a href="#R">R</a> &middot; <a href="Properties5.html#S">S</a> &middot; <a href="Properties6.html#T">T</a> &middot; <a href="Properties6.html#U">U</a> &middot; <a href="Properties6.html#V">V</a> &middot; <a href="Properties6.html#W">W</a> &middot; <a href="Properties6.html#X">X</a> &middot; <a href="Properties6.html#Y">Y</a> &middot; <a href="Properties6.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="M"></a>M</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginBottom" id=link235 onMouseOver="ShowTip(event, 'tt235', 'link235')" onMouseOut="HideTip('tt235')" class=ISymbol>marginBottom</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginLeft" id=link236 onMouseOver="ShowTip(event, 'tt236', 'link236')" onMouseOut="HideTip('tt236')" class=ISymbol>marginLeft</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginRight" id=link237 onMouseOver="ShowTip(event, 'tt237', 'link237')" onMouseOut="HideTip('tt237')" class=ISymbol>marginRight</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginTop" id=link238 onMouseOver="ShowTip(event, 'tt238', 'link238')" onMouseOut="HideTip('tt238')" class=ISymbol>marginTop</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>mark</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.mark" id=link239 onMouseOver="ShowTip(event, 'tt239', 'link239')" onMouseOut="HideTip('tt239')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.mark" id=link240 onMouseOver="ShowTip(event, 'tt240', 'link240')" onMouseOut="HideTip('tt240')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.markerOptions" id=link241 onMouseOver="ShowTip(event, 'tt241', 'link241')" onMouseOut="HideTip('tt241')" class=ISymbol>markerOptions</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>markerRenderer</span><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.markerRenderer" id=link242 onMouseOver="ShowTip(event, 'tt242', 'link242')" onMouseOut="HideTip('tt242')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.markerRenderer" id=link243 onMouseOver="ShowTip(event, 'tt243', 'link243')" onMouseOut="HideTip('tt243')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.markerRenderer" id=link244 onMouseOver="ShowTip(event, 'tt244', 'link244')" onMouseOut="HideTip('tt244')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>markSize</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.markSize" id=link245 onMouseOver="ShowTip(event, 'tt245', 'link245')" onMouseOut="HideTip('tt245')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.markSize" id=link246 onMouseOver="ShowTip(event, 'tt246', 'link246')" onMouseOut="HideTip('tt246')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>max</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.max" id=link247 onMouseOver="ShowTip(event, 'tt247', 'link247')" onMouseOut="HideTip('tt247')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.max" id=link248 onMouseOver="ShowTip(event, 'tt248', 'link248')" onMouseOut="HideTip('tt248')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>min</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.min" id=link249 onMouseOver="ShowTip(event, 'tt249', 'link249')" onMouseOut="HideTip('tt249')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.min" id=link250 onMouseOver="ShowTip(event, 'tt250', 'link250')" onMouseOut="HideTip('tt250')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>minorTicks</span><div class=ISubIndex><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.minorTicks" id=link251 onMouseOver="ShowTip(event, 'tt251', 'link251')" onMouseOut="HideTip('tt251')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.minorTicks" id=link252 onMouseOver="ShowTip(event, 'tt252', 'link252')" onMouseOut="HideTip('tt252')" class=IParent>$.jqplot.<wbr>LogAxisRenderer</a></div></td></tr><tr><td class=IHeading><a name="N"></a>N</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.name" id=link253 onMouseOver="ShowTip(event, 'tt253', 'link253')" onMouseOut="HideTip('tt253')" class=ISymbol>name</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needlePad" id=link254 onMouseOver="ShowTip(event, 'tt254', 'link254')" onMouseOut="HideTip('tt254')" class=ISymbol>needlePad</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needleThickness" id=link255 onMouseOver="ShowTip(event, 'tt255', 'link255')" onMouseOut="HideTip('tt255')" class=ISymbol>needleThickness</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.negativeColor" id=link256 onMouseOver="ShowTip(event, 'tt256', 'link256')" onMouseOut="HideTip('tt256')" class=ISymbol>negativeColor</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.neighborThreshold" id=link257 onMouseOver="ShowTip(event, 'tt257', 'link257')" onMouseOut="HideTip('tt257')" class=ISymbol>neighborThreshold</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.noDataIndicator" id=link258 onMouseOver="ShowTip(event, 'tt258', 'link258')" onMouseOut="HideTip('tt258')" class=ISymbol>noDataIndicator</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>numberColumns</span><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberColumns" id=link259 onMouseOver="ShowTip(event, 'tt259', 'link259')" onMouseOut="HideTip('tt259')" class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberColumns" id=link260 onMouseOver="ShowTip(event, 'tt260', 'link260')" onMouseOut="HideTip('tt260')" class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberColumns" id=link261 onMouseOver="ShowTip(event, 'tt261', 'link261')" onMouseOut="HideTip('tt261')" class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberColumns" id=link262 onMouseOver="ShowTip(event, 'tt262', 'link262')" onMouseOut="HideTip('tt262')" class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberColumns" id=link263 onMouseOver="ShowTip(event, 'tt263', 'link263')" onMouseOut="HideTip('tt263')" class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>numberRows</span><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberRows" id=link264 onMouseOver="ShowTip(event, 'tt264', 'link264')" onMouseOut="HideTip('tt264')" class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberRows" id=link265 onMouseOver="ShowTip(event, 'tt265', 'link265')" onMouseOut="HideTip('tt265')" class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberRows" id=link266 onMouseOver="ShowTip(event, 'tt266', 'link266')" onMouseOut="HideTip('tt266')" class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberRows" id=link267 onMouseOver="ShowTip(event, 'tt267', 'link267')" onMouseOut="HideTip('tt267')" class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberRows" id=link268 onMouseOver="ShowTip(event, 'tt268', 'link268')" onMouseOut="HideTip('tt268')" class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.numberTicks" id=link269 onMouseOver="ShowTip(event, 'tt269', 'link269')" onMouseOut="HideTip('tt269')" class=ISymbol>numberTicks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=IHeading><a name="O"></a>O</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.objects" id=link270 onMouseOver="ShowTip(event, 'tt270', 'link270')" onMouseOut="HideTip('tt270')" class=ISymbol>objects</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.offset" id=link271 onMouseOver="ShowTip(event, 'tt271', 'link271')" onMouseOut="HideTip('tt271')" class=ISymbol>offset</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#offsetBars" id=link272 onMouseOver="ShowTip(event, 'tt272', 'link272')" onMouseOut="HideTip('tt272')" class=ISymbol>offsetBars</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.openColor" id=link273 onMouseOver="ShowTip(event, 'tt273', 'link273')" onMouseOut="HideTip('tt273')" class=ISymbol>openColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=IHeading><a name="P"></a>P</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.pad" id=link274 onMouseOver="ShowTip(event, 'tt274', 'link274')" onMouseOut="HideTip('tt274')" class=ISymbol>pad</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>padding</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.padding" id=link275 onMouseOver="ShowTip(event, 'tt275', 'link275')" onMouseOut="HideTip('tt275')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.padding" id=link276 onMouseOver="ShowTip(event, 'tt276', 'link276')" onMouseOut="HideTip('tt276')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.padding" id=link277 onMouseOver="ShowTip(event, 'tt277', 'link277')" onMouseOut="HideTip('tt277')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.padding" id=link278 onMouseOver="ShowTip(event, 'tt278', 'link278')" onMouseOut="HideTip('tt278')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMax" id=link279 onMouseOver="ShowTip(event, 'tt279', 'link279')" onMouseOut="HideTip('tt279')" class=ISymbol>padMax</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMin" id=link280 onMouseOver="ShowTip(event, 'tt280', 'link280')" onMouseOut="HideTip('tt280')" class=ISymbol>padMin</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.pegNeedle" id=link281 onMouseOver="ShowTip(event, 'tt281', 'link281')" onMouseOut="HideTip('tt281')" class=ISymbol>pegNeedle</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.placement" id=link282 onMouseOver="ShowTip(event, 'tt282', 'link282')" onMouseOut="HideTip('tt282')" class=ISymbol>placement</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#position" id=link283 onMouseOver="ShowTip(event, 'tt283', 'link283')" onMouseOut="HideTip('tt283')" class=ISymbol>position</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.predraw" id=link284 onMouseOver="ShowTip(event, 'tt284', 'link284')" onMouseOut="HideTip('tt284')" class=ISymbol>predraw</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>prefix</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.prefix" id=link285 onMouseOver="ShowTip(event, 'tt285', 'link285')" onMouseOut="HideTip('tt285')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.prefix" id=link286 onMouseOver="ShowTip(event, 'tt286', 'link286')" onMouseOut="HideTip('tt286')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>pt2px</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.pt2px" id=link287 onMouseOver="ShowTip(event, 'tt287', 'link287')" onMouseOut="HideTip('tt287')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.pt2px" id=link288 onMouseOver="ShowTip(event, 'tt288', 'link288')" onMouseOut="HideTip('tt288')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=IHeading><a name="R"></a>R</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>renderer</span><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.renderer" id=link289 onMouseOver="ShowTip(event, 'tt289', 'link289')" onMouseOut="HideTip('tt289')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.renderer" id=link290 onMouseOver="ShowTip(event, 'tt290', 'link290')" onMouseOut="HideTip('tt290')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.renderer" id=link291 onMouseOver="ShowTip(event, 'tt291', 'link291')" onMouseOut="HideTip('tt291')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.renderer" id=link292 onMouseOver="ShowTip(event, 'tt292', 'link292')" onMouseOut="HideTip('tt292')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.renderer" id=link293 onMouseOver="ShowTip(event, 'tt293', 'link293')" onMouseOut="HideTip('tt293')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>rendererOptions</span><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.rendererOptions" id=link294 onMouseOver="ShowTip(event, 'tt294', 'link294')" onMouseOut="HideTip('tt294')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.rendererOptions" id=link295 onMouseOver="ShowTip(event, 'tt295', 'link295')" onMouseOut="HideTip('tt295')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.rendererOptions" id=link296 onMouseOver="ShowTip(event, 'tt296', 'link296')" onMouseOut="HideTip('tt296')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.rendererOptions" id=link297 onMouseOver="ShowTip(event, 'tt297', 'link297')" onMouseOut="HideTip('tt297')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.rendererOptions" id=link298 onMouseOver="ShowTip(event, 'tt298', 'link298')" onMouseOut="HideTip('tt298')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.rendererOptions" id=link299 onMouseOver="ShowTip(event, 'tt299', 'link299')" onMouseOut="HideTip('tt299')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringColor" id=link300 onMouseOver="ShowTip(event, 'tt300', 'link300')" onMouseOut="HideTip('tt300')" class=ISymbol>ringColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.ringMargin" id=link301 onMouseOver="ShowTip(event, 'tt301', 'link301')" onMouseOut="HideTip('tt301')" class=ISymbol>ringMargin</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringWidth" id=link302 onMouseOver="ShowTip(event, 'tt302', 'link302')" onMouseOut="HideTip('tt302')" class=ISymbol>ringWidth</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.rowSpacing" id=link303 onMouseOver="ShowTip(event, 'tt303', 'link303')" onMouseOut="HideTip('tt303')" class=ISymbol>rowSpacing</a>, <span class=IParent>Legend</span></td></tr></table>
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt235"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginBottom = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt236"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginLeft = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt237"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginRight = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt238"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginTop = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt239"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote>tick mark on the axis. </div></div><div class=CToolTip id="tt240"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote>tick mark on the axis. </div></div><div class=CToolTip id="tt241"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerOptions = {}</td></tr></table></blockquote>renderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.</div></div><div class=CToolTip id="tt242"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.markerRenderer = new $.jqplot.MarkerRenderer(</td><td class=PParameter nowrap>{shadow:false}</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Renderer used to draw the marker of the highlighted point. </div></div><div class=CToolTip id="tt243"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = {show:false}</td></tr></table></blockquote>Renderer to use to draw markers on the line. </div></div><div class=CToolTip id="tt244"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = $.jqplot.MarkerRenderer</td></tr></table></blockquote>A class of a renderer which will draw marker (e.g. </div></div><div class=CToolTip id="tt245"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 6</td></tr></table></blockquote>Length of the tick marks in pixels. </div></div><div class=CToolTip id="tt246"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 4</td></tr></table></blockquote>Length of the tick marks in pixels. </div></div><div class=CToolTip id="tt247"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max</td></tr></table></blockquote>Maximum value on the gauge. </div></div><div class=CToolTip id="tt248"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max = null</td></tr></table></blockquote>maximum value of the axis (in data units, not pixels).</div></div><div class=CToolTip id="tt249"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min</td></tr></table></blockquote>Minimum value on the gauge. </div></div><div class=CToolTip id="tt250"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min = null</td></tr></table></blockquote>minimum value of the axis (in data units, not pixels).</div></div><div class=CToolTip id="tt251"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.minorTicks = 0</td></tr></table></blockquote>Number of ticks to add between &ldquo;major&rdquo; ticks. </div></div><div class=CToolTip id="tt252"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.minorTicks = 'auto'</td></tr></table></blockquote>Number of ticks to add between &ldquo;major&rdquo; ticks. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt253"><div class=CProperty>Optional name for the overlay object. </div></div><div class=CToolTip id="tt254"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needlePad = 6</td></tr></table></blockquote>Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.</div></div><div class=CToolTip id="tt255"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needleThickness = null</td></tr></table></blockquote>Maximum thickness the needle. </div></div><div class=CToolTip id="tt256"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.negativeColor</td></tr></table></blockquote>css color spec used for filled (area) plots that are filled to zero and the &ldquo;useNegativeColors&rdquo; option is true.</div></div><div class=CToolTip id="tt257"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.neighborThreshold = 4</td></tr></table></blockquote>how close or far (in pixels) the cursor must be from a point marker to detect the point.</div></div><div class=CToolTip id="tt258"><div class=CProperty>Options to set up a mock plot with a data loading indicator if no data is specified.</div></div><div class=CToolTip id="tt259"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt260"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt261"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt262"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt263"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt264"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt265"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt266"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt267"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt268"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt269"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberTicks</td></tr></table></blockquote>Desired number of ticks. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt270"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.objects = []</td></tr></table></blockquote></div></div><div class=CToolTip id="tt271"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offset = 1</td></tr></table></blockquote>Pixel offset at the given shadow angle of each shadow stroke from the last stroke.</div></div><div class=CToolTip id="tt272"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offsetBars = false</td></tr></table></blockquote>False will center bars on their y value. </div></div><div class=CToolTip id="tt273"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.openColor = null</td></tr></table></blockquote>color of the open price tick mark. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt274"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pad = 1.2</td></tr></table></blockquote>Padding to extend the range above and below the data bounds. </div></div><div class=CToolTip id="tt275"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote>padding between the donut and plot edges, legend, etc.</div></div><div class=CToolTip id="tt276"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = {top: 20, right: 20, bottom: 20, left: 20}</td></tr></table></blockquote>padding between the funnel and plot edges, legend, etc.</div></div><div class=CToolTip id="tt277"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = null</td></tr></table></blockquote>padding between the meterGauge and plot edges, auto calculated by default.</div></div><div class=CToolTip id="tt278"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote>padding between the pie and plot edges, legend, etc.</div></div><div class=CToolTip id="tt279"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMax = null</td></tr></table></blockquote>Padding to extend the range above data bounds. </div></div><div class=CToolTip id="tt280"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMin = null</td></tr></table></blockquote>Padding to extend the range below data bounds. </div></div><div class=CToolTip id="tt281"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pegNeedle = true</td></tr></table></blockquote>True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is &ldquo;pegged&rdquo;.</div></div><div class=CToolTip id="tt282"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.placement = &quot;insideGrid&quot;</td></tr></table></blockquote>&ldquo;insideGrid&rdquo; places legend inside the grid area of the plot. </div></div><div class=CToolTip id="tt283"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.position = null</td></tr></table></blockquote>Position of axis. </div></div><div class=CToolTip id="tt284"><div class=CProperty>Wether to draw the legend before the series or not. </div></div><div class=CToolTip id="tt285"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote>String to prepend to the tick label. </div></div><div class=CToolTip id="tt286"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote>String to prepend to the tick label. </div></div><div class=CToolTip id="tt287"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote>Point to pixel scaling factor, used for computing height of bounding box around a label. </div></div><div class=CToolTip id="tt288"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote>Point to pixel scaling factor, used for computing height of bounding box around a label. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt289"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = new $.jqplot.LineRenderer()</td></tr></table></blockquote>Renderer to use to draw the trend line. </div></div><div class=CToolTip id="tt290"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LinearAxisRenderer</td></tr></table></blockquote>A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.</div></div><div class=CToolTip id="tt291"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.CanvasGridRenderer</td></tr></table></blockquote>Instance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.</div></div><div class=CToolTip id="tt292"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LineRenderer</td></tr></table></blockquote>A class of a renderer which will draw the series, see $.jqplot.LineRenderer.</div></div><div class=CToolTip id="tt293"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.DivTitleRenderer</td></tr></table></blockquote>A class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.</div></div><div class=CToolTip id="tt294"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {marker:{show:false}}</td></tr></table></blockquote>Options to pass to the line renderer. </div></div><div class=CToolTip id="tt295"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options. </div></div><div class=CToolTip id="tt296"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>Options to pass on to the renderer, see $.jqplot.CanvasGridRenderer.</div></div><div class=CToolTip id="tt297"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options passed to the renderer.</div></div><div class=CToolTip id="tt298"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>Options to pass on to the renderer.</div></div><div class=CToolTip id="tt299"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options passed to the renderer.</div></div><div class=CToolTip id="tt300"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringColor = &quot;#BBC6D0&quot;</td></tr></table></blockquote>color of the outer ring, hub, and needle of the gauge.</div></div><div class=CToolTip id="tt301"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringMargin = null</td></tr></table></blockquote>pixel distance between rings, or multiple series in a donut plot. </div></div><div class=CToolTip id="tt302"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringWidth = null</td></tr></table></blockquote>width of the ring around the gauge. </div></div><div class=CToolTip id="tt303"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rowSpacing = '0.5em'</td></tr></table></blockquote>css padding-top spec for the rows in the legend.</div></div><!--END_ND_TOOLTIPS-->
+
+</div><!--Index-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Properties</div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties5.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties5.html
new file mode 100644
index 00000000..088d73b5
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties5.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="Properties.html#A">A</a> &middot; <a href="Properties.html#B">B</a> &middot; <a href="Properties.html#C">C</a> &middot; <a href="Properties2.html#D">D</a> &middot; <a href="Properties2.html#E">E</a> &middot; <a href="Properties2.html#F">F</a> &middot; <a href="Properties3.html#G">G</a> &middot; <a href="Properties3.html#H">H</a> &middot; <a href="Properties3.html#I">I</a> &middot; J &middot; K &middot; <a href="Properties3.html#L">L</a> &middot; <a href="Properties4.html#M">M</a> &middot; <a href="Properties4.html#N">N</a> &middot; <a href="Properties4.html#O">O</a> &middot; <a href="Properties4.html#P">P</a> &middot; Q &middot; <a href="Properties4.html#R">R</a> &middot; <a href="#S">S</a> &middot; <a href="Properties6.html#T">T</a> &middot; <a href="Properties6.html#U">U</a> &middot; <a href="Properties6.html#V">V</a> &middot; <a href="Properties6.html#W">W</a> &middot; <a href="Properties6.html#X">X</a> &middot; <a href="Properties6.html#Y">Y</a> &middot; <a href="Properties6.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.scaleToHiddenSeries" id=link304 onMouseOver="ShowTip(event, 'tt304', 'link304')" onMouseOut="HideTip('tt304')" class=ISymbol>scaleToHiddenSeries</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.sectionMargin" id=link305 onMouseOver="ShowTip(event, 'tt305', 'link305')" onMouseOut="HideTip('tt305')" class=ISymbol>sectionMargin</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.series" id=link306 onMouseOver="ShowTip(event, 'tt306', 'link306')" onMouseOut="HideTip('tt306')" class=ISymbol>series</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesColors" id=link307 onMouseOver="ShowTip(event, 'tt307', 'link307')" onMouseOut="HideTip('tt307')" class=ISymbol>seriesColors</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesDefaults" id=link308 onMouseOver="ShowTip(event, 'tt308', 'link308')" onMouseOut="HideTip('tt308')" class=ISymbol>seriesDefaults</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.seriesLabelIndex" id=link309 onMouseOver="ShowTip(event, 'tt309', 'link309')" onMouseOut="HideTip('tt309')" class=ISymbol>seriesLabelIndex</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggle" id=link310 onMouseOver="ShowTip(event, 'tt310', 'link310')" onMouseOut="HideTip('tt310')" class=ISymbol>seriesToggle</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggleReplot" id=link311 onMouseOver="ShowTip(event, 'tt311', 'link311')" onMouseOut="HideTip('tt311')" class=ISymbol>seriesToggleReplot</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadow</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadow" id=link312 onMouseOver="ShowTip(event, 'tt312', 'link312')" onMouseOut="HideTip('tt312')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadow" id=link313 onMouseOver="ShowTip(event, 'tt313', 'link313')" onMouseOut="HideTip('tt313')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadow" id=link314 onMouseOver="ShowTip(event, 'tt314', 'link314')" onMouseOut="HideTip('tt314')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadow" id=link315 onMouseOver="ShowTip(event, 'tt315', 'link315')" onMouseOut="HideTip('tt315')" class=IParent>Grid</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowAlpha</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowAlpha" id=link316 onMouseOver="ShowTip(event, 'tt316', 'link316')" onMouseOut="HideTip('tt316')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowAlpha" id=link317 onMouseOver="ShowTip(event, 'tt317', 'link317')" onMouseOut="HideTip('tt317')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowAlpha" id=link318 onMouseOver="ShowTip(event, 'tt318', 'link318')" onMouseOut="HideTip('tt318')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowAlpha" id=link319 onMouseOver="ShowTip(event, 'tt319', 'link319')" onMouseOut="HideTip('tt319')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAlpha" id=link320 onMouseOver="ShowTip(event, 'tt320', 'link320')" onMouseOut="HideTip('tt320')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowAlpha" id=link321 onMouseOver="ShowTip(event, 'tt321', 'link321')" onMouseOut="HideTip('tt321')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowAlpha" id=link322 onMouseOver="ShowTip(event, 'tt322', 'link322')" onMouseOut="HideTip('tt322')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAlpha" id=link323 onMouseOver="ShowTip(event, 'tt323', 'link323')" onMouseOut="HideTip('tt323')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAlpha" id=link324 onMouseOver="ShowTip(event, 'tt324', 'link324')" onMouseOut="HideTip('tt324')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAlpha" id=link325 onMouseOver="ShowTip(event, 'tt325', 'link325')" onMouseOut="HideTip('tt325')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowAngle</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowAngle" id=link326 onMouseOver="ShowTip(event, 'tt326', 'link326')" onMouseOut="HideTip('tt326')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAngle" id=link327 onMouseOver="ShowTip(event, 'tt327', 'link327')" onMouseOut="HideTip('tt327')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAngle" id=link328 onMouseOver="ShowTip(event, 'tt328', 'link328')" onMouseOut="HideTip('tt328')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAngle" id=link329 onMouseOver="ShowTip(event, 'tt329', 'link329')" onMouseOut="HideTip('tt329')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAngle" id=link330 onMouseOver="ShowTip(event, 'tt330', 'link330')" onMouseOut="HideTip('tt330')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowColor" id=link331 onMouseOver="ShowTip(event, 'tt331', 'link331')" onMouseOut="HideTip('tt331')" class=ISymbol>shadowColor</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowDepth</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowDepth" id=link332 onMouseOver="ShowTip(event, 'tt332', 'link332')" onMouseOut="HideTip('tt332')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowDepth" id=link333 onMouseOver="ShowTip(event, 'tt333', 'link333')" onMouseOut="HideTip('tt333')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowDepth" id=link334 onMouseOver="ShowTip(event, 'tt334', 'link334')" onMouseOut="HideTip('tt334')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowDepth" id=link335 onMouseOver="ShowTip(event, 'tt335', 'link335')" onMouseOut="HideTip('tt335')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowDepth" id=link336 onMouseOver="ShowTip(event, 'tt336', 'link336')" onMouseOut="HideTip('tt336')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowDepth" id=link337 onMouseOver="ShowTip(event, 'tt337', 'link337')" onMouseOut="HideTip('tt337')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowDepth" id=link338 onMouseOver="ShowTip(event, 'tt338', 'link338')" onMouseOut="HideTip('tt338')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowDepth" id=link339 onMouseOver="ShowTip(event, 'tt339', 'link339')" onMouseOut="HideTip('tt339')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowDepth" id=link340 onMouseOver="ShowTip(event, 'tt340', 'link340')" onMouseOut="HideTip('tt340')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowDepth" id=link341 onMouseOver="ShowTip(event, 'tt341', 'link341')" onMouseOut="HideTip('tt341')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowOffset</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowOffset" id=link342 onMouseOver="ShowTip(event, 'tt342', 'link342')" onMouseOut="HideTip('tt342')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowOffset" id=link343 onMouseOver="ShowTip(event, 'tt343', 'link343')" onMouseOut="HideTip('tt343')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowOffset" id=link344 onMouseOver="ShowTip(event, 'tt344', 'link344')" onMouseOut="HideTip('tt344')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowOffset" id=link345 onMouseOver="ShowTip(event, 'tt345', 'link345')" onMouseOut="HideTip('tt345')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowOffset" id=link346 onMouseOver="ShowTip(event, 'tt346', 'link346')" onMouseOut="HideTip('tt346')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowOffset" id=link347 onMouseOver="ShowTip(event, 'tt347', 'link347')" onMouseOut="HideTip('tt347')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowOffset" id=link348 onMouseOver="ShowTip(event, 'tt348', 'link348')" onMouseOut="HideTip('tt348')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowOffset" id=link349 onMouseOver="ShowTip(event, 'tt349', 'link349')" onMouseOut="HideTip('tt349')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowOffset" id=link350 onMouseOver="ShowTip(event, 'tt350', 'link350')" onMouseOut="HideTip('tt350')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowOffset" id=link351 onMouseOver="ShowTip(event, 'tt351', 'link351')" onMouseOut="HideTip('tt351')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowRenderer" id=link352 onMouseOver="ShowTip(event, 'tt352', 'link352')" onMouseOut="HideTip('tt352')" class=ISymbol>shadowRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowWidth" id=link353 onMouseOver="ShowTip(event, 'tt353', 'link353')" onMouseOut="HideTip('tt353')" class=ISymbol>shadowWidth</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shapeRenderer" id=link354 onMouseOver="ShowTip(event, 'tt354', 'link354')" onMouseOut="HideTip('tt354')" class=ISymbol>shapeRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>show</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.show" id=link355 onMouseOver="ShowTip(event, 'tt355', 'link355')" onMouseOut="HideTip('tt355')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.show" id=link356 onMouseOver="ShowTip(event, 'tt356', 'link356')" onMouseOut="HideTip('tt356')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.show" id=link357 onMouseOver="ShowTip(event, 'tt357', 'link357')" onMouseOut="HideTip('tt357')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.show" id=link358 onMouseOver="ShowTip(event, 'tt358', 'link358')" onMouseOut="HideTip('tt358')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.show" id=link359 onMouseOver="ShowTip(event, 'tt359', 'link359')" onMouseOut="HideTip('tt359')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.show" id=link360 onMouseOver="ShowTip(event, 'tt360', 'link360')" onMouseOut="HideTip('tt360')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.show" id=link361 onMouseOver="ShowTip(event, 'tt361', 'link361')" onMouseOut="HideTip('tt361')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.show" id=link362 onMouseOver="ShowTip(event, 'tt362', 'link362')" onMouseOut="HideTip('tt362')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.show" id=link363 onMouseOver="ShowTip(event, 'tt363', 'link363')" onMouseOut="HideTip('tt363')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.show" id=link364 onMouseOver="ShowTip(event, 'tt364', 'link364')" onMouseOut="HideTip('tt364')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.show" id=link365 onMouseOver="ShowTip(event, 'tt365', 'link365')" onMouseOut="HideTip('tt365')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.show" id=link366 onMouseOver="ShowTip(event, 'tt366', 'link366')" onMouseOut="HideTip('tt366')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Legend.show" id=link367 onMouseOver="ShowTip(event, 'tt367', 'link367')" onMouseOut="HideTip('tt367')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.show" id=link368 onMouseOver="ShowTip(event, 'tt368', 'link368')" onMouseOut="HideTip('tt368')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.show" id=link369 onMouseOver="ShowTip(event, 'tt369', 'link369')" onMouseOut="HideTip('tt369')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.showBorders" id=link370 onMouseOver="ShowTip(event, 'tt370', 'link370')" onMouseOut="HideTip('tt370')" class=ISymbol>showBorders</a>, <span class=IParent>$.jqplot.<wbr>MekkoRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showCursorLegend" id=link371 onMouseOver="ShowTip(event, 'tt371', 'link371')" onMouseOut="HideTip('tt371')" class=ISymbol>showCursorLegend</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showDataLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.showDataLabels" id=link372 onMouseOver="ShowTip(event, 'tt372', 'link372')" onMouseOut="HideTip('tt372')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.showDataLabels" id=link373 onMouseOver="ShowTip(event, 'tt373', 'link373')" onMouseOut="HideTip('tt373')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.showDataLabels" id=link374 onMouseOver="ShowTip(event, 'tt374', 'link374')" onMouseOut="HideTip('tt374')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showGridline</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showGridline" id=link375 onMouseOver="ShowTip(event, 'tt375', 'link375')" onMouseOut="HideTip('tt375')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showGridline" id=link376 onMouseOver="ShowTip(event, 'tt376', 'link376')" onMouseOut="HideTip('tt376')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showHorizontalLine" id=link377 onMouseOver="ShowTip(event, 'tt377', 'link377')" onMouseOut="HideTip('tt377')" class=ISymbol>showHorizontalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showLabel</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showLabel" id=link378 onMouseOver="ShowTip(event, 'tt378', 'link378')" onMouseOut="HideTip('tt378')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.showLabel" id=link379 onMouseOver="ShowTip(event, 'tt379', 'link379')" onMouseOut="HideTip('tt379')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showLabel" id=link380 onMouseOver="ShowTip(event, 'tt380', 'link380')" onMouseOut="HideTip('tt380')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Axis.showLabel" id=link381 onMouseOver="ShowTip(event, 'tt381', 'link381')" onMouseOut="HideTip('tt381')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.showLabel" id=link382 onMouseOver="ShowTip(event, 'tt382', 'link382')" onMouseOut="HideTip('tt382')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.showLabels" id=link383 onMouseOver="ShowTip(event, 'tt383', 'link383')" onMouseOut="HideTip('tt383')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.showLabels" id=link384 onMouseOver="ShowTip(event, 'tt384', 'link384')" onMouseOut="HideTip('tt384')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.showLine" id=link385 onMouseOver="ShowTip(event, 'tt385', 'link385')" onMouseOut="HideTip('tt385')" class=ISymbol>showLine</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.showLines" id=link386 onMouseOver="ShowTip(event, 'tt386', 'link386')" onMouseOut="HideTip('tt386')" class=ISymbol>showLines</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showMark</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showMark" id=link387 onMouseOver="ShowTip(event, 'tt387', 'link387')" onMouseOut="HideTip('tt387')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showMark" id=link388 onMouseOver="ShowTip(event, 'tt388', 'link388')" onMouseOut="HideTip('tt388')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showMarker</span><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showMarker" id=link389 onMouseOver="ShowTip(event, 'tt389', 'link389')" onMouseOut="HideTip('tt389')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-core-js.html#Series.showMarker" id=link390 onMouseOver="ShowTip(event, 'tt390', 'link390')" onMouseOut="HideTip('tt390')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.showMinorTicks" id=link391 onMouseOver="ShowTip(event, 'tt391', 'link391')" onMouseOut="HideTip('tt391')" class=ISymbol>showMinorTicks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.showSwatch" id=link392 onMouseOver="ShowTip(event, 'tt392', 'link392')" onMouseOut="HideTip('tt392')" class=ISymbol>showSwatch</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTickLabels" id=link393 onMouseOver="ShowTip(event, 'tt393', 'link393')" onMouseOut="HideTip('tt393')" class=ISymbol>showTickLabels</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.showTickMarks" id=link394 onMouseOver="ShowTip(event, 'tt394', 'link394')" onMouseOut="HideTip('tt394')" class=ISymbol>showTickMarks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showTicks</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTicks" id=link395 onMouseOver="ShowTip(event, 'tt395', 'link395')" onMouseOut="HideTip('tt395')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.showTicks" id=link396 onMouseOver="ShowTip(event, 'tt396', 'link396')" onMouseOut="HideTip('tt396')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showTooltip</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.showTooltip" id=link397 onMouseOver="ShowTip(event, 'tt397', 'link397')" onMouseOut="HideTip('tt397')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltip" id=link398 onMouseOver="ShowTip(event, 'tt398', 'link398')" onMouseOut="HideTip('tt398')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showTooltip" id=link399 onMouseOver="ShowTip(event, 'tt399', 'link399')" onMouseOut="HideTip('tt399')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipDataPosition" id=link400 onMouseOver="ShowTip(event, 'tt400', 'link400')" onMouseOut="HideTip('tt400')" class=ISymbol>showTooltipDataPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipGridPosition" id=link401 onMouseOver="ShowTip(event, 'tt401', 'link401')" onMouseOut="HideTip('tt401')" class=ISymbol>showTooltipGridPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipOutsideZoom" id=link402 onMouseOver="ShowTip(event, 'tt402', 'link402')" onMouseOut="HideTip('tt402')" class=ISymbol>showTooltipOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.showTooltipPrecision" id=link403 onMouseOver="ShowTip(event, 'tt403', 'link403')" onMouseOut="HideTip('tt403')" class=ISymbol>showTooltipPrecision</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipUnitPosition" id=link404 onMouseOver="ShowTip(event, 'tt404', 'link404')" onMouseOut="HideTip('tt404')" class=ISymbol>showTooltipUnitPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showVerticalLine" id=link405 onMouseOver="ShowTip(event, 'tt405', 'link405')" onMouseOut="HideTip('tt405')" class=ISymbol>showVerticalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>size</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.size" id=link406 onMouseOver="ShowTip(event, 'tt406', 'link406')" onMouseOut="HideTip('tt406')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.size" id=link407 onMouseOver="ShowTip(event, 'tt407', 'link407')" onMouseOut="HideTip('tt407')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.sizeAdjust" id=link408 onMouseOver="ShowTip(event, 'tt408', 'link408')" onMouseOut="HideTip('tt408')" class=ISymbol>sizeAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>sliceMargin</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.sliceMargin" id=link409 onMouseOver="ShowTip(event, 'tt409', 'link409')" onMouseOut="HideTip('tt409')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.sliceMargin" id=link410 onMouseOver="ShowTip(event, 'tt410', 'link410')" onMouseOut="HideTip('tt410')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.smooth" id=link411 onMouseOver="ShowTip(event, 'tt411', 'link411')" onMouseOut="HideTip('tt411')" class=ISymbol>smooth</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.sortData" id=link412 onMouseOver="ShowTip(event, 'tt412', 'link412')" onMouseOut="HideTip('tt412')" class=ISymbol>sortData</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.sortMergedLabels" id=link413 onMouseOver="ShowTip(event, 'tt413', 'link413')" onMouseOut="HideTip('tt413')" class=ISymbol>sortMergedLabels</a>, <span class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.stackedValue" id=link414 onMouseOver="ShowTip(event, 'tt414', 'link414')" onMouseOut="HideTip('tt414')" class=ISymbol>stackedValue</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.stackSeries" id=link415 onMouseOver="ShowTip(event, 'tt415', 'link415')" onMouseOut="HideTip('tt415')" class=ISymbol>stackSeries</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.start" id=link416 onMouseOver="ShowTip(event, 'tt416', 'link416')" onMouseOut="HideTip('tt416')" class=ISymbol>start</a>, <span class=IParent>Line</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>startAngle</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.startAngle" id=link417 onMouseOver="ShowTip(event, 'tt417', 'link417')" onMouseOut="HideTip('tt417')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.startAngle" id=link418 onMouseOver="ShowTip(event, 'tt418', 'link418')" onMouseOut="HideTip('tt418')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.stop" id=link419 onMouseOver="ShowTip(event, 'tt419', 'link419')" onMouseOut="HideTip('tt419')" class=ISymbol>stop</a>, <span class=IParent>Line</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeRect" id=link420 onMouseOver="ShowTip(event, 'tt420', 'link420')" onMouseOut="HideTip('tt420')" class=ISymbol>strokeRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeStyle" id=link421 onMouseOver="ShowTip(event, 'tt421', 'link421')" onMouseOut="HideTip('tt421')" class=ISymbol>strokeStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>style</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.style" id=link422 onMouseOver="ShowTip(event, 'tt422', 'link422')" onMouseOut="HideTip('tt422')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.style" id=link423 onMouseOver="ShowTip(event, 'tt423', 'link423')" onMouseOut="HideTip('tt423')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.suffix" id=link424 onMouseOver="ShowTip(event, 'tt424', 'link424')" onMouseOut="HideTip('tt424')" class=ISymbol>suffix</a>, <span class=IParent>$.jqplot.<wbr>AxisTickRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#synchronizeHighlight" id=link425 onMouseOver="ShowTip(event, 'tt425', 'link425')" onMouseOut="HideTip('tt425')" class=ISymbol>synchronizeHighlight</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.syncTicks" id=link426 onMouseOver="ShowTip(event, 'tt426', 'link426')" onMouseOut="HideTip('tt426')" class=ISymbol>syncTicks</a>, <span class=IParent>Axis</span></td></tr></table>
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt304"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.scaleToHiddenSeries = false</td></tr></table></blockquote>True to include hidden series when computing axes bounds and scaling.</div></div><div class=CToolTip id="tt305"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sectionMargin = 6</td></tr></table></blockquote>spacing between funnel sections in pixels.</div></div><div class=CToolTip id="tt306"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.series = []</td></tr></table></blockquote>Array of series object options. </div></div><div class=CToolTip id="tt307"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesColors = $.jqplot.config.defaultColors</td></tr></table></blockquote>Ann array of CSS color specifications that will be applied, in order, to the series in the plot. </div></div><div class=CToolTip id="tt308"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>seriesDefaults: {}, series:[] }</td></tr></table></blockquote>default options that will be applied to all series. </div></div><div class=CToolTip id="tt309"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesLabelIndex = null</td></tr></table></blockquote>array index for location of labels within data point arrays. </div></div><div class=CToolTip id="tt310"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggle = 'normal'</td></tr></table></blockquote>false to not enable series on/off toggling on the legend. </div></div><div class=CToolTip id="tt311"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggleReplot = false</td></tr></table></blockquote>True to replot the chart after toggling series on/off. </div></div><div class=CToolTip id="tt312"><div class=CProperty>wether or not to draw a shadow on the line</div></div><div class=CToolTip id="tt313"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether or not to draw a shadow on the line</div></div><div class=CToolTip id="tt314"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>true or false, wether or not to show the shadow.</div></div><div class=CToolTip id="tt315"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether to show a shadow behind the grid.</div></div><div class=CToolTip id="tt316"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.08</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt317"><div class=CProperty>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt318"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt319"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt320"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt321"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt322"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt323"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>Alpha transparency of the shadow.</div></div><div class=CToolTip id="tt324"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt325"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.1'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt326"><div class=CProperty>Shadow angle in degrees</div></div><div class=CToolTip id="tt327"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Shadow angle in degrees</div></div><div class=CToolTip id="tt328"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Angle of the shadow on the trend line.</div></div><div class=CToolTip id="tt329"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>shadow angle in degrees</div></div><div class=CToolTip id="tt330"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Shadow angle in degrees</div></div><div class=CToolTip id="tt331"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowColor = null</td></tr></table></blockquote>an optional css color spec for the shadow in &lsquo;rgba(n, n, n, n)&rsquo; form</div></div><div class=CToolTip id="tt332"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt333"><div class=CProperty>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt334"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt335"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt336"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt337"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 4</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt338"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt339"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>number of strokes to make of the shadow.</div></div><div class=CToolTip id="tt340"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt341"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt342"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt343"><div class=CProperty>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt344"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt345"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt346"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1</td></tr></table></blockquote>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt347"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt348"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt349"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.0</td></tr></table></blockquote>pixel offset for each stroke of the shadow.</div></div><div class=CToolTip id="tt350"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.5</td></tr></table></blockquote>Offset of each shadow stroke from the border in pixels</div></div><div class=CToolTip id="tt351"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.25</td></tr></table></blockquote>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt352"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowRenderer = new $.jqplot.ShadowRenderer()</td></tr></table></blockquote>Renderer that will draws the shadows on the marker.</div></div><div class=CToolTip id="tt353"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowWidth = 3</td></tr></table></blockquote>width of the stoke for the shadow</div></div><div class=CToolTip id="tt354"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shapeRenderer = new $.jqplot.ShapeRenderer()</td></tr></table></blockquote>Renderer that will draw the marker.</div></div><div class=CToolTip id="tt355"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt356"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label). </div></div><div class=CToolTip id="tt357"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt358"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt359"><div class=CProperty>true to show (draw), false to not draw.</div></div><div class=CToolTip id="tt360"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>wether to show the cursor or not.</div></div><div class=CToolTip id="tt361"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>true to show the highlight.</div></div><div class=CToolTip id="tt362"><div class=CProperty>true to show the bands. </div></div><div class=CToolTip id="tt363"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the marker.</div></div><div class=CToolTip id="tt364"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>show the labels or not.</div></div><div class=CToolTip id="tt365"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>Wether or not to show the trend line.</div></div><div class=CToolTip id="tt366"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote>Wether to display the axis on the graph.</div></div><div class=CToolTip id="tt367"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote>Wether to display the legend on the graph.</div></div><div class=CToolTip id="tt368"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to draw the series.</div></div><div class=CToolTip id="tt369"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the title</div></div><div class=CToolTip id="tt370"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showBorders = true</td></tr></table></blockquote>True to draw borders lines between areas on the chart. </div></div><div class=CToolTip id="tt371"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showCursorLegend = false</td></tr></table></blockquote>Replace the plot legend with an enhanced legend displaying intersection information.</div></div><div class=CToolTip id="tt372"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt373"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt374"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt375"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt376"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt377"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showHorizontalLine = false</td></tr></table></blockquote>draw a horizontal line across the plot which follows the cursor.</div></div><div class=CToolTip id="tt378"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt379"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt380"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt381"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>true to show the axis label.</div></div><div class=CToolTip id="tt382"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>true to show label for this series in the legend.</div></div><div class=CToolTip id="tt383"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote>True to show labels on bubbles (if any), false to not show.</div></div><div class=CToolTip id="tt384"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote>true to show the label text on the legend.</div></div><div class=CToolTip id="tt385"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLine = true</td></tr></table></blockquote>wether to actually draw the line or not. </div></div><div class=CToolTip id="tt386"><div class=CProperty>True to show lines at top and bottom of bands [default: false].</div></div><div class=CToolTip id="tt387"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt388"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt389"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote>true to show the marker</div></div><div class=CToolTip id="tt390"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote>wether or not to show the markers at the data points.</div></div><div class=CToolTip id="tt391"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMinorTicks = true</td></tr></table></blockquote>Wether or not to show minor ticks. </div></div><div class=CToolTip id="tt392"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showSwatches = true</td></tr></table></blockquote>true to show the color swatches on the legend.</div></div><div class=CToolTip id="tt393"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickLabels = true</td></tr></table></blockquote>true to show tick labels next to ticks.</div></div><div class=CToolTip id="tt394"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickMarks = true</td></tr></table></blockquote>Wether to show the tick marks (line crossing grid) or not. </div></div><div class=CToolTip id="tt395"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote>true to show ticks around gauge.</div></div><div class=CToolTip id="tt396"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote>Wether to show the ticks (both marks and labels) or not. </div></div><div class=CToolTip id="tt397"><div class=CProperty>Show a tooltip with data point values.</div></div><div class=CToolTip id="tt398"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>show a cursor position tooltip. </div></div><div class=CToolTip id="tt399"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>Show a tooltip with data point values.</div></div><div class=CToolTip id="tt400"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipDataPosition = false</td></tr></table></blockquote>Used with showVerticalLine to show intersecting data points in the tooltip.</div></div><div class=CToolTip id="tt401"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipGridPosition = false</td></tr></table></blockquote>show the grid pixel coordinates of the mouse.</div></div><div class=CToolTip id="tt402"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipOutsideZoom = false</td></tr></table></blockquote>True will keep updating the tooltip when zooming of the grid.</div></div><div class=CToolTip id="tt403"><div class=CProperty>Controls how close to line cursor must be to show tooltip. </div></div><div class=CToolTip id="tt404"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipUnitPosition = true</td></tr></table></blockquote>show the unit (data) coordinates of the mouse.</div></div><div class=CToolTip id="tt405"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showVerticalLine = false</td></tr></table></blockquote>draw a vertical line across the plot which follows the cursor. </div></div><div class=CToolTip id="tt406"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 4</td></tr></table></blockquote>Length of the tick beyond the grid in pixels. </div></div><div class=CToolTip id="tt407"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 9.0</td></tr></table></blockquote>Size of the marker (diameter or circle, length of edge of square, etc.)</div></div><div class=CToolTip id="tt408"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sizeAdjust = 5</td></tr></table></blockquote>Pixels to add to the overall size of the highlight.</div></div><div class=CToolTip id="tt409"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between donut slices in degrees.</div></div><div class=CToolTip id="tt410"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between pie slices in degrees.</div></div><div class=CToolTip id="tt411"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.smooth = false</td></tr></table></blockquote>True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points. </div></div><div class=CToolTip id="tt412"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortData = true</td></tr></table></blockquote>false to not sort the data passed in by the user. </div></div><div class=CToolTip id="tt413"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortMergedLabels = false</td></tr></table></blockquote>True to sort tick labels when labels are created by merging x axis values from multiple series. </div></div><div class=CToolTip id="tt414"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackedValue = false</td></tr></table></blockquote>true to display value as stacked in a stacked plot. </div></div><div class=CToolTip id="tt415"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackSeries = false</td></tr></table></blockquote>true or false, creates a stack or &ldquo;mountain&rdquo; plot. </div></div><div class=CToolTip id="tt416"><div class=CProperty>[x, y] coordinates for the start of the line.</div></div><div class=CToolTip id="tt417"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing donut in degrees. </div></div><div class=CToolTip id="tt418"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing pie in degrees. </div></div><div class=CToolTip id="tt419"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>stop: [] }</td></tr></table></blockquote>[x, y] coordinates for the end of the line.</div></div><div class=CToolTip id="tt420"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeRect = false</td></tr></table></blockquote>true to draw shape as a stroked rectangle.</div></div><div class=CToolTip id="tt421"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeStyle = '#999999'</td></tr></table></blockquote>css color spec for the stoke style</div></div><div class=CToolTip id="tt422"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'crosshair'</td></tr></table></blockquote>CSS spec for cursor style</div></div><div class=CToolTip id="tt423"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'filledCircle'</td></tr></table></blockquote>One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare</div></div><div class=CToolTip id="tt424"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.suffix = ''</td></tr></table></blockquote>String to append to the tick label. </div></div><div class=CToolTip id="tt425"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.synchronizeHighlight = false</td></tr></table></blockquote>Index of another series to highlight when this series is highlighted. </div></div><div class=CToolTip id="tt426"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.syncTicks = null</td></tr></table></blockquote>true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up. </div></div><!--END_ND_TOOLTIPS-->
+
+</div><!--Index-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Properties</div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties6.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties6.html
new file mode 100644
index 00000000..985ab8eb
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties6.html
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="Properties.html#A">A</a> &middot; <a href="Properties.html#B">B</a> &middot; <a href="Properties.html#C">C</a> &middot; <a href="Properties2.html#D">D</a> &middot; <a href="Properties2.html#E">E</a> &middot; <a href="Properties2.html#F">F</a> &middot; <a href="Properties3.html#G">G</a> &middot; <a href="Properties3.html#H">H</a> &middot; <a href="Properties3.html#I">I</a> &middot; J &middot; K &middot; <a href="Properties3.html#L">L</a> &middot; <a href="Properties4.html#M">M</a> &middot; <a href="Properties4.html#N">N</a> &middot; <a href="Properties4.html#O">O</a> &middot; <a href="Properties4.html#P">P</a> &middot; Q &middot; <a href="Properties4.html#R">R</a> &middot; <a href="Properties5.html#S">S</a> &middot; <a href="#T">T</a> &middot; <a href="#U">U</a> &middot; <a href="#V">V</a> &middot; <a href="#W">W</a> &middot; <a href="#X">X</a> &middot; <a href="#Y">Y</a> &middot; <a href="#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="T"></a>T</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title.text" id=link427 onMouseOver="ShowTip(event, 'tt427', 'link427')" onMouseOut="HideTip('tt427')" class=ISymbol>text</a>, <span class=IParent>Title</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title.textAlign" id=link428 onMouseOver="ShowTip(event, 'tt428', 'link428')" onMouseOut="HideTip('tt428')" class=ISymbol>textAlign</a>, <span class=IParent>Title</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>textColor</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.textColor" id=link429 onMouseOver="ShowTip(event, 'tt429', 'link429')" onMouseOut="HideTip('tt429')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.textColor" id=link430 onMouseOver="ShowTip(event, 'tt430', 'link430')" onMouseOut="HideTip('tt430')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.textColor" id=link431 onMouseOver="ShowTip(event, 'tt431', 'link431')" onMouseOut="HideTip('tt431')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.textColor" id=link432 onMouseOver="ShowTip(event, 'tt432', 'link432')" onMouseOut="HideTip('tt432')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.textColor" id=link433 onMouseOver="ShowTip(event, 'tt433', 'link433')" onMouseOut="HideTip('tt433')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.themes" id=link434 onMouseOver="ShowTip(event, 'tt434', 'link434')" onMouseOut="HideTip('tt434')" class=ISymbol>themes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.thickness" id=link435 onMouseOver="ShowTip(event, 'tt435', 'link435')" onMouseOut="HideTip('tt435')" class=ISymbol>thickness</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickColor" id=link436 onMouseOver="ShowTip(event, 'tt436', 'link436')" onMouseOut="HideTip('tt436')" class=ISymbol>tickColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tickInset</span><div class=ISubIndex><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickInset" id=link437 onMouseOver="ShowTip(event, 'tt437', 'link437')" onMouseOut="HideTip('tt437')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.tickInset" id=link438 onMouseOver="ShowTip(event, 'tt438', 'link438')" onMouseOut="HideTip('tt438')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickInterval" id=link439 onMouseOver="ShowTip(event, 'tt439', 'link439')" onMouseOut="HideTip('tt439')" class=ISymbol>tickInterval</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.tickLength" id=link440 onMouseOver="ShowTip(event, 'tt440', 'link440')" onMouseOut="HideTip('tt440')" class=ISymbol>tickLength</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.tickMode" id=link441 onMouseOver="ShowTip(event, 'tt441', 'link441')" onMouseOut="HideTip('tt441')" class=ISymbol>tickMode</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickOptions" id=link442 onMouseOver="ShowTip(event, 'tt442', 'link442')" onMouseOut="HideTip('tt442')" class=ISymbol>tickOptions</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickPadding" id=link443 onMouseOver="ShowTip(event, 'tt443', 'link443')" onMouseOut="HideTip('tt443')" class=ISymbol>tickPadding</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tickRenderer</span><div class=ISubIndex><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.tickRenderer" id=link444 onMouseOver="ShowTip(event, 'tt444', 'link444')" onMouseOut="HideTip('tt444')" class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickRenderer" id=link445 onMouseOver="ShowTip(event, 'tt445', 'link445')" onMouseOut="HideTip('tt445')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickRenderer" id=link446 onMouseOver="ShowTip(event, 'tt446', 'link446')" onMouseOut="HideTip('tt446')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>ticks</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ticks" id=link447 onMouseOver="ShowTip(event, 'tt447', 'link447')" onMouseOut="HideTip('tt447')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.ticks" id=link448 onMouseOver="ShowTip(event, 'tt448', 'link448')" onMouseOut="HideTip('tt448')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tickSpacing</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickSpacing" id=link449 onMouseOver="ShowTip(event, 'tt449', 'link449')" onMouseOut="HideTip('tt449')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickSpacing" id=link450 onMouseOver="ShowTip(event, 'tt450', 'link450')" onMouseOut="HideTip('tt450')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.title" id=link451 onMouseOver="ShowTip(event, 'tt451', 'link451')" onMouseOut="HideTip('tt451')" class=ISymbol>title</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipAxes" id=link452 onMouseOver="ShowTip(event, 'tt452', 'link452')" onMouseOut="HideTip('tt452')" class=ISymbol>tooltipAxes</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipAxisGroups" id=link453 onMouseOver="ShowTip(event, 'tt453', 'link453')" onMouseOut="HideTip('tt453')" class=ISymbol>tooltipAxisGroups</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipFadeSpeed</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipFadeSpeed" id=link454 onMouseOver="ShowTip(event, 'tt454', 'link454')" onMouseOut="HideTip('tt454')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFadeSpeed" id=link455 onMouseOver="ShowTip(event, 'tt455', 'link455')" onMouseOut="HideTip('tt455')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipFormatString</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipFormatString" id=link456 onMouseOver="ShowTip(event, 'tt456', 'link456')" onMouseOut="HideTip('tt456')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipFormatString" id=link457 onMouseOver="ShowTip(event, 'tt457', 'link457')" onMouseOut="HideTip('tt457')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFormatString" id=link458 onMouseOver="ShowTip(event, 'tt458', 'link458')" onMouseOut="HideTip('tt458')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipLocation</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipLocation" id=link459 onMouseOver="ShowTip(event, 'tt459', 'link459')" onMouseOut="HideTip('tt459')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipLocation" id=link460 onMouseOver="ShowTip(event, 'tt460', 'link460')" onMouseOut="HideTip('tt460')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipLocation" id=link461 onMouseOver="ShowTip(event, 'tt461', 'link461')" onMouseOut="HideTip('tt461')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipOffset</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipOffset" id=link462 onMouseOver="ShowTip(event, 'tt462', 'link462')" onMouseOut="HideTip('tt462')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipOffset" id=link463 onMouseOver="ShowTip(event, 'tt463', 'link463')" onMouseOut="HideTip('tt463')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipOffset" id=link464 onMouseOver="ShowTip(event, 'tt464', 'link464')" onMouseOut="HideTip('tt464')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.transposedData" id=link465 onMouseOver="ShowTip(event, 'tt465', 'link465')" onMouseOut="HideTip('tt465')" class=ISymbol>transposedData</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.type" id=link466 onMouseOver="ShowTip(event, 'tt466', 'link466')" onMouseOut="HideTip('tt466')" class=ISymbol>type</a>, <span class=IParent>$.jqplot.<wbr>Trendline</span></td></tr><tr><td class=IHeading><a name="U"></a>U</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.upBodyColor" id=link467 onMouseOver="ShowTip(event, 'tt467', 'link467')" onMouseOut="HideTip('tt467')" class=ISymbol>upBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>useAxesFormatters</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.useAxesFormatters" id=link468 onMouseOver="ShowTip(event, 'tt468', 'link468')" onMouseOut="HideTip('tt468')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.useAxesFormatters" id=link469 onMouseOver="ShowTip(event, 'tt469', 'link469')" onMouseOut="HideTip('tt469')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.useNegativeColors" id=link470 onMouseOver="ShowTip(event, 'tt470', 'link470')" onMouseOut="HideTip('tt470')" class=ISymbol>useNegativeColors</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.useSeriesColor" id=link471 onMouseOver="ShowTip(event, 'tt471', 'link471')" onMouseOut="HideTip('tt471')" class=ISymbol>useSeriesColor</a>, <span class=IParent>Axis</span></td></tr><tr><td class=IHeading><a name="V"></a>V</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.varyBarColor" id=link472 onMouseOver="ShowTip(event, 'tt472', 'link472')" onMouseOut="HideTip('tt472')" class=ISymbol>varyBarColor</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.varyBlockColors" id=link473 onMouseOver="ShowTip(event, 'tt473', 'link473')" onMouseOut="HideTip('tt473')" class=ISymbol>varyBlockColors</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.varyBubbleColors" id=link474 onMouseOver="ShowTip(event, 'tt474', 'link474')" onMouseOut="HideTip('tt474')" class=ISymbol>varyBubbleColors</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=IHeading><a name="W"></a>W</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.waterfall" id=link475 onMouseOver="ShowTip(event, 'tt475', 'link475')" onMouseOut="HideTip('tt475')" class=ISymbol>waterfall</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.wickColor" id=link476 onMouseOver="ShowTip(event, 'tt476', 'link476')" onMouseOut="HideTip('tt476')" class=ISymbol>wickColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.widthRatio" id=link477 onMouseOver="ShowTip(event, 'tt477', 'link477')" onMouseOut="HideTip('tt477')" class=ISymbol>widthRatio</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></td></tr><tr><td class=IHeading><a name="X"></a>X</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>xaxis</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.xaxis" id=link478 onMouseOver="ShowTip(event, 'tt478', 'link478')" onMouseOut="HideTip('tt478')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-core-js.html#Series.xaxis" id=link479 onMouseOver="ShowTip(event, 'tt479', 'link479')" onMouseOut="HideTip('tt479')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.xmax" id=link480 onMouseOver="ShowTip(event, 'tt480', 'link480')" onMouseOut="HideTip('tt480')" class=ISymbol>xmax</a>, <span class=IParent>HorizontalLine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.xmin" id=link481 onMouseOver="ShowTip(event, 'tt481', 'link481')" onMouseOut="HideTip('tt481')" class=ISymbol>xmin</a>, <span class=IParent>HorizontalLine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.xoffset" id=link482 onMouseOver="ShowTip(event, 'tt482', 'link482')" onMouseOut="HideTip('tt482')" class=ISymbol>xoffset</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.xpadding" id=link483 onMouseOver="ShowTip(event, 'tt483', 'link483')" onMouseOut="HideTip('tt483')" class=ISymbol>xpadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=IHeading><a name="Y"></a>Y</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.y" id=link484 onMouseOver="ShowTip(event, 'tt484', 'link484')" onMouseOut="HideTip('tt484')" class=ISymbol>y</a>, <span class=IParent>HorizontalLine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>yaxis</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.yaxis" id=link485 onMouseOver="ShowTip(event, 'tt485', 'link485')" onMouseOut="HideTip('tt485')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-core-js.html#Series.yaxis" id=link486 onMouseOver="ShowTip(event, 'tt486', 'link486')" onMouseOut="HideTip('tt486')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.yoffset" id=link487 onMouseOver="ShowTip(event, 'tt487', 'link487')" onMouseOut="HideTip('tt487')" class=ISymbol>yoffset</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.ypadding" id=link488 onMouseOver="ShowTip(event, 'tt488', 'link488')" onMouseOut="HideTip('tt488')" class=ISymbol>ypadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.yvalues" id=link489 onMouseOver="ShowTip(event, 'tt489', 'link489')" onMouseOut="HideTip('tt489')" class=ISymbol>yvalues</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=IHeading><a name="Z"></a>Z</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.zoom" id=link490 onMouseOver="ShowTip(event, 'tt490', 'link490')" onMouseOut="HideTip('tt490')" class=ISymbol>zoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr></table>
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt427"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.text = text</td></tr></table></blockquote>text of the title;</div></div><div class=CToolTip id="tt428"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textAlign</td></tr></table></blockquote>css text-align spec for the text.</div></div><div class=CToolTip id="tt429"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt430"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt431"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt432"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css color spec for the legend text.</div></div><div class=CToolTip id="tt433"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css color spec for the text.</div></div><div class=CToolTip id="tt434"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.themes = {}</td></tr></table></blockquote>hash of themes managed by the theme engine. </div></div><div class=CToolTip id="tt435"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.thickness = null</td></tr></table></blockquote>thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.</div></div><div class=CToolTip id="tt436"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickColor = &quot;989898&quot;</td></tr></table></blockquote>color of the tick marks around the gauge.</div></div><div class=CToolTip id="tt437"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInset = 0</td></tr></table></blockquote>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval. </div></div><div class=CToolTip id="tt438"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInset = 0</td></tr></table></blockquote>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval. </div></div><div class=CToolTip id="tt439"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInterval</td></tr></table></blockquote>number of units between ticks. </div></div><div class=CToolTip id="tt440"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickLength = 'auto'</td></tr></table></blockquote>length of the line in pixels indicating open and close price. </div></div><div class=CToolTip id="tt441"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickMode</td></tr></table></blockquote>How to space the ticks on the axis. </div></div><div class=CToolTip id="tt442"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickOptions = {}</td></tr></table></blockquote>Options that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.</div></div><div class=CToolTip id="tt443"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickPadding = null</td></tr></table></blockquote>padding of the tick marks to the outer ring and the tick labels to marks. </div></div><div class=CToolTip id="tt444"><div class=CProperty>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. </div></div><div class=CToolTip id="tt445"><div class=CProperty>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. </div></div><div class=CToolTip id="tt446"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickRenderer = $.jqplot.AxisTickRenderer</td></tr></table></blockquote>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.</div></div><div class=CToolTip id="tt447"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote>Array of tick values. </div></div><div class=CToolTip id="tt448"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote>1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis. </div></div><div class=CToolTip id="tt449"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 30</td></tr></table></blockquote>Degrees between ticks. </div></div><div class=CToolTip id="tt450"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 75</td></tr></table></blockquote>Approximate pixel spacing between ticks on graph. </div></div><div class=CToolTip id="tt451"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.title = new Title()</td></tr></table></blockquote>Title object. </div></div><div class=CToolTip id="tt452"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxes = 'both'</td></tr></table></blockquote>Which axes to display in tooltip, &lsquo;x&rsquo;, &lsquo;y&rsquo; or &lsquo;both&rsquo;, &lsquo;xy&rsquo; or &lsquo;yx&rsquo; &lsquo;both&rsquo; and &lsquo;xy&rsquo; are equivalent, &lsquo;yx&rsquo; reverses order of labels.</div></div><div class=CToolTip id="tt453"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxisGroups = []</td></tr></table></blockquote>Show position for the specified axes. </div></div><div class=CToolTip id="tt454"><div class=CProperty>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</div></div><div class=CToolTip id="tt455"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFadeSpeed = &quot;fast&quot;</td></tr></table></blockquote>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</div></div><div class=CToolTip id="tt456"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>tooltipFormatString: '%d, %d' }</td></tr></table></blockquote>Format string passed the x and y values of the cursor on the line. </div></div><div class=CToolTip id="tt457"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.4P, %.4P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt458"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.5P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt459"><div class=CProperty>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</div></div><div class=CToolTip id="tt460"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'se'</td></tr></table></blockquote>Where to position tooltip. </div></div><div class=CToolTip id="tt461"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'nw'</td></tr></table></blockquote>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</div></div><div class=CToolTip id="tt462"><div class=CProperty>Pixel offset of tooltip from the highlight.</div></div><div class=CToolTip id="tt463"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 6</td></tr></table></blockquote>Pixel offset of tooltip from the grid boudaries or cursor center.</div></div><div class=CToolTip id="tt464"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 2</td></tr></table></blockquote>Pixel offset of tooltip from the highlight.</div></div><div class=CToolTip id="tt465"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.transposedData = true</td></tr></table></blockquote>NOT IMPLEMENTED YET. </div></div><div class=CToolTip id="tt466"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.type = 'linear'</td></tr></table></blockquote>Either &lsquo;exponential&rsquo;, &lsquo;exp&rsquo;, or &lsquo;linear&rsquo;.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt467"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.upBodyColor = null</td></tr></table></blockquote>Color of candlestick body of an &ldquo;up&rdquo; day. </div></div><div class=CToolTip id="tt468"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt469"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt470"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useNegativeColors = true</td></tr></table></blockquote>true to color negative values differently in filled and bar charts.</div></div><div class=CToolTip id="tt471"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useSeriesColor = false</td></tr></table></blockquote>Use the color of the first series associated with this axis for the tick marks and line bordering this axis.</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt472"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBarColor = false</td></tr></table></blockquote>true to color each bar of a series separately rather than have every bar of a given series the same color. </div></div><div class=CToolTip id="tt473"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBlockColors = false</td></tr></table></blockquote>true to vary the color of each block in this series according to the seriesColors array. </div></div><div class=CToolTip id="tt474"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBubbleColors = true</td></tr></table></blockquote>True to vary the color of each bubble in this series according to the seriesColors array. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt475"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.waterfall = false</td></tr></table></blockquote>true to enable waterfall plot.</div></div><div class=CToolTip id="tt476"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.wickColor = null</td></tr></table></blockquote>color of the hi-lo line thorugh the candlestick body. </div></div><div class=CToolTip id="tt477"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.widthRatio = 0.2</td></tr></table></blockquote>The ratio of the width of the top of the funnel to the bottom. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt478"><div class=CProperty>X axis to use for positioning/scaling the line.</div></div><div class=CToolTip id="tt479"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xaxis = 'xaxis'</td></tr></table></blockquote>which x axis to use with this series, either &lsquo;xaxis&rsquo; or &lsquo;x2axis&rsquo;.</div></div><div class=CToolTip id="tt480"><div class=CProperty>x value for the end of the line, null to scale to axis max.</div></div><div class=CToolTip id="tt481"><div class=CProperty>x value for the start of the line, null to scale to axis min.</div></div><div class=CToolTip id="tt482"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xoffset = 0</td></tr></table></blockquote>DEPRECATED. </div></div><div class=CToolTip id="tt483"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xpadding = 6</td></tr></table></blockquote>horizontal padding in pixels between point and label</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt484"><div class=CProperty>y value to position the line</div></div><div class=CToolTip id="tt485"><div class=CProperty>Y axis to use for positioning/scaling the line.</div></div><div class=CToolTip id="tt486"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yaxis = 'yaxis'</td></tr></table></blockquote>which y axis to use with this series, either &lsquo;yaxis&rsquo; or &lsquo;y2axis&rsquo;.</div></div><div class=CToolTip id="tt487"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yoffset = 0</td></tr></table></blockquote>DEPRECATED. </div></div><div class=CToolTip id="tt488"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ypadding = 6</td></tr></table></blockquote>vertical padding in pixels between point and label</div></div><div class=CToolTip id="tt489"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yvalues = 1</td></tr></table></blockquote>Number of y values to expect in the data point array. </div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt490"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.zoom = false</td></tr></table></blockquote>Enable plot zooming.</div></div><!--END_ND_TOOLTIPS-->
+
+</div><!--Index-->
+
+
+<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
+
+
+<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Properties</div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
+var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
+--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
+HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
+
+
+<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
+
+
+<script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/javascript/main.js b/wqflask/wqflask/static/packages/jqplot/docs/javascript/main.js
new file mode 100644
index 00000000..efcdca96
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/javascript/main.js
@@ -0,0 +1,836 @@
+// This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure
+// Natural Docs is licensed under the GPL
+
+
+//
+// Browser Styles
+// ____________________________________________________________________________
+
+var agt=navigator.userAgent.toLowerCase();
+var browserType;
+var browserVer;
+
+if (agt.indexOf("opera") != -1)
+ {
+ browserType = "Opera";
+
+ if (agt.indexOf("opera 7") != -1 || agt.indexOf("opera/7") != -1)
+ { browserVer = "Opera7"; }
+ else if (agt.indexOf("opera 8") != -1 || agt.indexOf("opera/8") != -1)
+ { browserVer = "Opera8"; }
+ else if (agt.indexOf("opera 9") != -1 || agt.indexOf("opera/9") != -1)
+ { browserVer = "Opera9"; }
+ }
+
+else if (agt.indexOf("applewebkit") != -1)
+ {
+ browserType = "Safari";
+
+ if (agt.indexOf("version/3") != -1)
+ { browserVer = "Safari3"; }
+ else if (agt.indexOf("safari/4") != -1)
+ { browserVer = "Safari2"; }
+ }
+
+else if (agt.indexOf("khtml") != -1)
+ {
+ browserType = "Konqueror";
+ }
+
+else if (agt.indexOf("msie") != -1)
+ {
+ browserType = "IE";
+
+ if (agt.indexOf("msie 6") != -1)
+ { browserVer = "IE6"; }
+ else if (agt.indexOf("msie 7") != -1)
+ { browserVer = "IE7"; }
+ }
+
+else if (agt.indexOf("gecko") != -1)
+ {
+ browserType = "Firefox";
+
+ if (agt.indexOf("rv:1.7") != -1)
+ { browserVer = "Firefox1"; }
+ else if (agt.indexOf("rv:1.8)") != -1 || agt.indexOf("rv:1.8.0") != -1)
+ { browserVer = "Firefox15"; }
+ else if (agt.indexOf("rv:1.8.1") != -1)
+ { browserVer = "Firefox2"; }
+ }
+
+
+//
+// Support Functions
+// ____________________________________________________________________________
+
+
+function GetXPosition(item)
+ {
+ var position = 0;
+
+ if (item.offsetWidth != null)
+ {
+ while (item != document.body && item != null)
+ {
+ position += item.offsetLeft;
+ item = item.offsetParent;
+ };
+ };
+
+ return position;
+ };
+
+
+function GetYPosition(item)
+ {
+ var position = 0;
+
+ if (item.offsetWidth != null)
+ {
+ while (item != document.body && item != null)
+ {
+ position += item.offsetTop;
+ item = item.offsetParent;
+ };
+ };
+
+ return position;
+ };
+
+
+function MoveToPosition(item, x, y)
+ {
+ // Opera 5 chokes on the px extension, so it can use the Microsoft one instead.
+
+ if (item.style.left != null)
+ {
+ item.style.left = x + "px";
+ item.style.top = y + "px";
+ }
+ else if (item.style.pixelLeft != null)
+ {
+ item.style.pixelLeft = x;
+ item.style.pixelTop = y;
+ };
+ };
+
+
+//
+// Menu
+// ____________________________________________________________________________
+
+
+function ToggleMenu(id)
+ {
+ if (!window.document.getElementById)
+ { return; };
+
+ var display = window.document.getElementById(id).style.display;
+
+ if (display == "none")
+ { display = "block"; }
+ else
+ { display = "none"; }
+
+ window.document.getElementById(id).style.display = display;
+ }
+
+function HideAllBut(ids, max)
+ {
+ if (document.getElementById)
+ {
+ ids.sort( function(a,b) { return a - b; } );
+ var number = 1;
+
+ while (number < max)
+ {
+ if (ids.length > 0 && number == ids[0])
+ { ids.shift(); }
+ else
+ {
+ document.getElementById("MGroupContent" + number).style.display = "none";
+ };
+
+ number++;
+ };
+ };
+ }
+
+
+//
+// Tooltips
+// ____________________________________________________________________________
+
+
+var tooltipTimer = 0;
+
+function ShowTip(event, tooltipID, linkID)
+ {
+ if (tooltipTimer)
+ { clearTimeout(tooltipTimer); };
+
+ var docX = event.clientX + window.pageXOffset;
+ var docY = event.clientY + window.pageYOffset;
+
+ var showCommand = "ReallyShowTip('" + tooltipID + "', '" + linkID + "', " + docX + ", " + docY + ")";
+
+ tooltipTimer = setTimeout(showCommand, 1000);
+ }
+
+function ReallyShowTip(tooltipID, linkID, docX, docY)
+ {
+ tooltipTimer = 0;
+
+ var tooltip;
+ var link;
+
+ if (document.getElementById)
+ {
+ tooltip = document.getElementById(tooltipID);
+ link = document.getElementById(linkID);
+ }
+/* else if (document.all)
+ {
+ tooltip = eval("document.all['" + tooltipID + "']");
+ link = eval("document.all['" + linkID + "']");
+ }
+*/
+ if (tooltip)
+ {
+ var left = GetXPosition(link);
+ var top = GetYPosition(link);
+ top += link.offsetHeight;
+
+
+ // 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
+ // in case some browser snuck through the above if statement but didn't support everything.
+
+ if (!isFinite(top) || top == 0)
+ {
+ left = docX;
+ top = docY;
+ }
+
+ // Some spacing to get it out from under the cursor.
+
+ top += 10;
+
+ // Make sure the tooltip doesnt get smushed by being too close to the edge, or in some browsers, go off the edge of the
+ // page. We do it here because Konqueror does get offsetWidth right even if it doesnt get the positioning right.
+
+ if (tooltip.offsetWidth != null)
+ {
+ var width = tooltip.offsetWidth;
+ var docWidth = document.body.clientWidth;
+
+ if (left + width > docWidth)
+ { left = docWidth - width - 1; }
+
+ // If there's a horizontal scroll bar we could go past zero because it's using the page width, not the window width.
+ if (left < 0)
+ { left = 0; };
+ }
+
+ MoveToPosition(tooltip, left, top);
+ tooltip.style.visibility = "visible";
+ }
+ }
+
+function HideTip(tooltipID)
+ {
+ if (tooltipTimer)
+ {
+ clearTimeout(tooltipTimer);
+ tooltipTimer = 0;
+ }
+
+ var tooltip;
+
+ if (document.getElementById)
+ { tooltip = document.getElementById(tooltipID); }
+ else if (document.all)
+ { tooltip = eval("document.all['" + tooltipID + "']"); }
+
+ if (tooltip)
+ { tooltip.style.visibility = "hidden"; }
+ }
+
+
+//
+// Blockquote fix for IE
+// ____________________________________________________________________________
+
+
+function NDOnLoad()
+ {
+ if (browserVer == "IE6")
+ {
+ var scrollboxes = document.getElementsByTagName('blockquote');
+
+ if (scrollboxes.item(0))
+ {
+ NDDoResize();
+ window.onresize=NDOnResize;
+ };
+ };
+ };
+
+
+var resizeTimer = 0;
+
+function NDOnResize()
+ {
+ if (resizeTimer != 0)
+ { clearTimeout(resizeTimer); };
+
+ resizeTimer = setTimeout(NDDoResize, 250);
+ };
+
+
+function NDDoResize()
+ {
+ var scrollboxes = document.getElementsByTagName('blockquote');
+
+ var i;
+ var item;
+
+ i = 0;
+ while (item = scrollboxes.item(i))
+ {
+ item.style.width = 100;
+ i++;
+ };
+
+ i = 0;
+ while (item = scrollboxes.item(i))
+ {
+ item.style.width = item.parentNode.offsetWidth;
+ i++;
+ };
+
+ clearTimeout(resizeTimer);
+ resizeTimer = 0;
+ }
+
+
+
+/* ________________________________________________________________________________________________________
+
+ Class: SearchPanel
+ ________________________________________________________________________________________________________
+
+ A class handling everything associated with the search panel.
+
+ Parameters:
+
+ name - The name of the global variable that will be storing this instance. Is needed to be able to set timeouts.
+ mode - The mode the search is going to work in. Pass <NaturalDocs::Builder::Base->CommandLineOption()>, so the
+ value will be something like "HTML" or "FramedHTML".
+
+ ________________________________________________________________________________________________________
+*/
+
+
+function SearchPanel(name, mode, resultsPath)
+ {
+ if (!name || !mode || !resultsPath)
+ { alert("Incorrect parameters to SearchPanel."); };
+
+
+ // Group: Variables
+ // ________________________________________________________________________
+
+ /*
+ var: name
+ The name of the global variable that will be storing this instance of the class.
+ */
+ this.name = name;
+
+ /*
+ var: mode
+ The mode the search is going to work in, such as "HTML" or "FramedHTML".
+ */
+ this.mode = mode;
+
+ /*
+ var: resultsPath
+ The relative path from the current HTML page to the results page directory.
+ */
+ this.resultsPath = resultsPath;
+
+ /*
+ var: keyTimeout
+ The timeout used between a keystroke and when a search is performed.
+ */
+ this.keyTimeout = 0;
+
+ /*
+ var: keyTimeoutLength
+ The length of <keyTimeout> in thousandths of a second.
+ */
+ this.keyTimeoutLength = 500;
+
+ /*
+ var: lastSearchValue
+ The last search string executed, or an empty string if none.
+ */
+ this.lastSearchValue = "";
+
+ /*
+ var: lastResultsPage
+ The last results page. The value is only relevant if <lastSearchValue> is set.
+ */
+ this.lastResultsPage = "";
+
+ /*
+ var: deactivateTimeout
+
+ The timeout used between when a control is deactivated and when the entire panel is deactivated. Is necessary
+ because a control may be deactivated in favor of another control in the same panel, in which case it should stay
+ active.
+ */
+ this.deactivateTimout = 0;
+
+ /*
+ var: deactivateTimeoutLength
+ The length of <deactivateTimeout> in thousandths of a second.
+ */
+ this.deactivateTimeoutLength = 200;
+
+
+
+
+ // Group: DOM Elements
+ // ________________________________________________________________________
+
+
+ // Function: DOMSearchField
+ this.DOMSearchField = function()
+ { return document.getElementById("MSearchField"); };
+
+ // Function: DOMSearchType
+ this.DOMSearchType = function()
+ { return document.getElementById("MSearchType"); };
+
+ // Function: DOMPopupSearchResults
+ this.DOMPopupSearchResults = function()
+ { return document.getElementById("MSearchResults"); };
+
+ // Function: DOMPopupSearchResultsWindow
+ this.DOMPopupSearchResultsWindow = function()
+ { return document.getElementById("MSearchResultsWindow"); };
+
+ // Function: DOMSearchPanel
+ this.DOMSearchPanel = function()
+ { return document.getElementById("MSearchPanel"); };
+
+
+
+
+ // Group: Event Handlers
+ // ________________________________________________________________________
+
+
+ /*
+ Function: OnSearchFieldFocus
+ Called when focus is added or removed from the search field.
+ */
+ this.OnSearchFieldFocus = function(isActive)
+ {
+ this.Activate(isActive);
+ };
+
+
+ /*
+ Function: OnSearchFieldChange
+ Called when the content of the search field is changed.
+ */
+ this.OnSearchFieldChange = function()
+ {
+ if (this.keyTimeout)
+ {
+ clearTimeout(this.keyTimeout);
+ this.keyTimeout = 0;
+ };
+
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+
+ if (searchValue != this.lastSearchValue)
+ {
+ if (searchValue != "")
+ {
+ this.keyTimeout = setTimeout(this.name + ".Search()", this.keyTimeoutLength);
+ }
+ else
+ {
+ if (this.mode == "HTML")
+ { this.DOMPopupSearchResultsWindow().style.display = "none"; };
+ this.lastSearchValue = "";
+ };
+ };
+ };
+
+
+ /*
+ Function: OnSearchTypeFocus
+ Called when focus is added or removed from the search type.
+ */
+ this.OnSearchTypeFocus = function(isActive)
+ {
+ this.Activate(isActive);
+ };
+
+
+ /*
+ Function: OnSearchTypeChange
+ Called when the search type is changed.
+ */
+ this.OnSearchTypeChange = function()
+ {
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+
+ if (searchValue != "")
+ {
+ this.Search();
+ };
+ };
+
+
+
+ // Group: Action Functions
+ // ________________________________________________________________________
+
+
+ /*
+ Function: CloseResultsWindow
+ Closes the results window.
+ */
+ this.CloseResultsWindow = function()
+ {
+ this.DOMPopupSearchResultsWindow().style.display = "none";
+ this.Activate(false, true);
+ };
+
+
+ /*
+ Function: Search
+ Performs a search.
+ */
+ this.Search = function()
+ {
+ this.keyTimeout = 0;
+
+ var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
+ var searchTopic = this.DOMSearchType().value;
+
+ var pageExtension = searchValue.substr(0,1);
+
+ if (pageExtension.match(/^[a-z]/i))
+ { pageExtension = pageExtension.toUpperCase(); }
+ else if (pageExtension.match(/^[0-9]/))
+ { pageExtension = 'Numbers'; }
+ else
+ { pageExtension = "Symbols"; };
+
+ var resultsPage;
+ var resultsPageWithSearch;
+ var hasResultsPage;
+
+ // indexSectionsWithContent is defined in searchdata.js
+ if (indexSectionsWithContent[searchTopic][pageExtension] == true)
+ {
+ resultsPage = this.resultsPath + '/' + searchTopic + pageExtension + '.html';
+ resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+ hasResultsPage = true;
+ }
+ else
+ {
+ resultsPage = this.resultsPath + '/NoResults.html';
+ resultsPageWithSearch = resultsPage;
+ hasResultsPage = false;
+ };
+
+ var resultsFrame;
+ if (this.mode == "HTML")
+ { resultsFrame = window.frames.MSearchResults; }
+ else if (this.mode == "FramedHTML")
+ { resultsFrame = window.top.frames['Content']; };
+
+
+ if (resultsPage != this.lastResultsPage ||
+
+ // Bug in IE. If everything becomes hidden in a run, none of them will be able to be reshown in the next for some
+ // reason. It counts the right number of results, and you can even read the display as "block" after setting it, but it
+ // 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
+ // page anyway to get around the bug.
+ (browserType == "IE" && hasResultsPage &&
+ (!resultsFrame.searchResults || resultsFrame.searchResults.lastMatchCount == 0)) )
+
+ {
+ resultsFrame.location.href = resultsPageWithSearch;
+ }
+
+ // 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
+ // are results because NoResults.html doesn't have any JavaScript, and it would be useless to do anything on that page even
+ // if it did.
+ else if (hasResultsPage)
+ {
+ // We need to check if this exists in case the frame is present but didn't finish loading.
+ if (resultsFrame.searchResults)
+ { resultsFrame.searchResults.Search(searchValue); }
+
+ // Otherwise just reload instead of waiting.
+ else
+ { resultsFrame.location.href = resultsPageWithSearch; };
+ };
+
+
+ var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
+
+ if (this.mode == "HTML" && domPopupSearchResultsWindow.style.display != "block")
+ {
+ var domSearchType = this.DOMSearchType();
+
+ var left = GetXPosition(domSearchType);
+ var top = GetYPosition(domSearchType) + domSearchType.offsetHeight;
+
+ MoveToPosition(domPopupSearchResultsWindow, left, top);
+ domPopupSearchResultsWindow.style.display = 'block';
+ };
+
+
+ this.lastSearchValue = searchValue;
+ this.lastResultsPage = resultsPage;
+ };
+
+
+
+ // Group: Activation Functions
+ // Functions that handle whether the entire panel is active or not.
+ // ________________________________________________________________________
+
+
+ /*
+ Function: Activate
+
+ Activates or deactivates the search panel, resetting things to their default values if necessary. You can call this on every
+ control's OnBlur() and it will handle not deactivating the entire panel when focus is just switching between them transparently.
+
+ Parameters:
+
+ isActive - Whether you're activating or deactivating the panel.
+ ignoreDeactivateDelay - Set if you're positive the action will deactivate the panel and thus want to skip the delay.
+ */
+ this.Activate = function(isActive, ignoreDeactivateDelay)
+ {
+ // We want to ignore isActive being false while the results window is open.
+ if (isActive || (this.mode == "HTML" && this.DOMPopupSearchResultsWindow().style.display == "block"))
+ {
+ if (this.inactivateTimeout)
+ {
+ clearTimeout(this.inactivateTimeout);
+ this.inactivateTimeout = 0;
+ };
+
+ this.DOMSearchPanel().className = 'MSearchPanelActive';
+
+ var searchField = this.DOMSearchField();
+
+ if (searchField.value == 'Search')
+ { searchField.value = ""; }
+ }
+ else if (!ignoreDeactivateDelay)
+ {
+ this.inactivateTimeout = setTimeout(this.name + ".InactivateAfterTimeout()", this.inactivateTimeoutLength);
+ }
+ else
+ {
+ this.InactivateAfterTimeout();
+ };
+ };
+
+
+ /*
+ Function: InactivateAfterTimeout
+
+ Called by <inactivateTimeout>, which is set by <Activate()>. Inactivation occurs on a timeout because a control may
+ receive OnBlur() when focus is really transferring to another control in the search panel. In this case we don't want to
+ actually deactivate the panel because not only would that cause a visible flicker but it could also reset the search value.
+ So by doing it on a timeout instead, there's a short period where the second control's OnFocus() can cancel the deactivation.
+ */
+ this.InactivateAfterTimeout = function()
+ {
+ this.inactivateTimeout = 0;
+
+ this.DOMSearchPanel().className = 'MSearchPanelInactive';
+ this.DOMSearchField().value = "Search";
+
+ this.lastSearchValue = "";
+ this.lastResultsPage = "";
+ };
+ };
+
+
+
+
+/* ________________________________________________________________________________________________________
+
+ Class: SearchResults
+ _________________________________________________________________________________________________________
+
+ The class that handles everything on the search results page.
+ _________________________________________________________________________________________________________
+*/
+
+
+function SearchResults(name, mode)
+ {
+ /*
+ var: mode
+ The mode the search is going to work in, such as "HTML" or "FramedHTML".
+ */
+ this.mode = mode;
+
+ /*
+ var: lastMatchCount
+ The number of matches from the last run of <Search()>.
+ */
+ this.lastMatchCount = 0;
+
+
+ /*
+ Function: Toggle
+ Toggles the visibility of the passed element ID.
+ */
+ this.Toggle = function(id)
+ {
+ if (this.mode == "FramedHTML")
+ { return; };
+
+ var parentElement = document.getElementById(id);
+
+ var element = parentElement.firstChild;
+
+ while (element && element != parentElement)
+ {
+ if (element.nodeName == 'DIV' && element.className == 'ISubIndex')
+ {
+ if (element.style.display == 'block')
+ { element.style.display = "none"; }
+ else
+ { element.style.display = 'block'; }
+ };
+
+ if (element.nodeName == 'DIV' && element.hasChildNodes())
+ { element = element.firstChild; }
+ else if (element.nextSibling)
+ { element = element.nextSibling; }
+ else
+ {
+ do
+ {
+ element = element.parentNode;
+ }
+ while (element && element != parentElement && !element.nextSibling);
+
+ if (element && element != parentElement)
+ { element = element.nextSibling; };
+ };
+ };
+ };
+
+
+ /*
+ Function: Search
+
+ Searches for the passed string. If there is no parameter, it takes it from the URL query.
+
+ Always returns true, since other documents may try to call it and that may or may not be possible.
+ */
+ this.Search = function(search)
+ {
+ if (!search)
+ {
+ search = window.location.search;
+ search = search.substring(1); // Remove the leading ?
+ search = unescape(search);
+ };
+
+ search = search.replace(/^ +/, "");
+ search = search.replace(/ +$/, "");
+ search = search.toLowerCase();
+
+ if (search.match(/[^a-z0-9]/)) // Just a little speedup so it doesn't have to go through the below unnecessarily.
+ {
+ search = search.replace(/\_/g, "_und");
+ search = search.replace(/\ +/gi, "_spc");
+ search = search.replace(/\~/g, "_til");
+ search = search.replace(/\!/g, "_exc");
+ search = search.replace(/\@/g, "_att");
+ search = search.replace(/\#/g, "_num");
+ search = search.replace(/\$/g, "_dol");
+ search = search.replace(/\%/g, "_pct");
+ search = search.replace(/\^/g, "_car");
+ search = search.replace(/\&/g, "_amp");
+ search = search.replace(/\*/g, "_ast");
+ search = search.replace(/\(/g, "_lpa");
+ search = search.replace(/\)/g, "_rpa");
+ search = search.replace(/\-/g, "_min");
+ search = search.replace(/\+/g, "_plu");
+ search = search.replace(/\=/g, "_equ");
+ search = search.replace(/\{/g, "_lbc");
+ search = search.replace(/\}/g, "_rbc");
+ search = search.replace(/\[/g, "_lbk");
+ search = search.replace(/\]/g, "_rbk");
+ search = search.replace(/\:/g, "_col");
+ search = search.replace(/\;/g, "_sco");
+ search = search.replace(/\"/g, "_quo");
+ search = search.replace(/\'/g, "_apo");
+ search = search.replace(/\</g, "_lan");
+ search = search.replace(/\>/g, "_ran");
+ search = search.replace(/\,/g, "_com");
+ search = search.replace(/\./g, "_per");
+ search = search.replace(/\?/g, "_que");
+ search = search.replace(/\//g, "_sla");
+ search = search.replace(/[^a-z0-9\_]i/gi, "_zzz");
+ };
+
+ var resultRows = document.getElementsByTagName("div");
+ var matches = 0;
+
+ var i = 0;
+ while (i < resultRows.length)
+ {
+ var row = resultRows.item(i);
+
+ if (row.className == "SRResult")
+ {
+ var rowMatchName = row.id.toLowerCase();
+ rowMatchName = rowMatchName.replace(/^sr\d*_/, '');
+
+ if (search.length <= rowMatchName.length && rowMatchName.substr(0, search.length) == search)
+ {
+ row.style.display = "block";
+ matches++;
+ }
+ else
+ { row.style.display = "none"; };
+ };
+
+ i++;
+ };
+
+ document.getElementById("Searching").style.display="none";
+
+ if (matches == 0)
+ { document.getElementById("NoMatches").style.display="block"; }
+ else
+ { document.getElementById("NoMatches").style.display="none"; }
+
+ this.lastMatchCount = matches;
+
+ return true;
+ };
+ };
+
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/javascript/searchdata.js b/wqflask/wqflask/static/packages/jqplot/docs/javascript/searchdata.js
new file mode 100644
index 00000000..72083b4e
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/javascript/searchdata.js
@@ -0,0 +1,182 @@
+var indexSectionsWithContent = {
+ "General": {
+ "Symbols": true,
+ "Numbers": false,
+ "A": true,
+ "B": true,
+ "C": true,
+ "D": true,
+ "E": true,
+ "F": true,
+ "G": true,
+ "H": true,
+ "I": true,
+ "J": true,
+ "K": false,
+ "L": true,
+ "M": true,
+ "N": true,
+ "O": true,
+ "P": true,
+ "Q": true,
+ "R": true,
+ "S": true,
+ "T": true,
+ "U": true,
+ "V": true,
+ "W": true,
+ "X": true,
+ "Y": true,
+ "Z": true
+ },
+ "Functions": {
+ "Symbols": false,
+ "Numbers": false,
+ "A": false,
+ "B": false,
+ "C": true,
+ "D": true,
+ "E": false,
+ "F": false,
+ "G": true,
+ "H": false,
+ "I": true,
+ "J": false,
+ "K": false,
+ "L": false,
+ "M": true,
+ "N": true,
+ "O": false,
+ "P": false,
+ "Q": true,
+ "R": true,
+ "S": true,
+ "T": false,
+ "U": false,
+ "V": false,
+ "W": false,
+ "X": false,
+ "Y": false,
+ "Z": true
+ },
+ "Files": {
+ "Symbols": false,
+ "Numbers": false,
+ "A": false,
+ "B": false,
+ "C": false,
+ "D": false,
+ "E": false,
+ "F": false,
+ "G": false,
+ "H": false,
+ "I": false,
+ "J": true,
+ "K": false,
+ "L": false,
+ "M": false,
+ "N": false,
+ "O": false,
+ "P": false,
+ "Q": false,
+ "R": false,
+ "S": false,
+ "T": false,
+ "U": false,
+ "V": false,
+ "W": false,
+ "X": false,
+ "Y": false,
+ "Z": false
+ },
+ "Classes": {
+ "Symbols": true,
+ "Numbers": false,
+ "A": true,
+ "B": false,
+ "C": false,
+ "D": true,
+ "E": false,
+ "F": false,
+ "G": true,
+ "H": true,
+ "I": false,
+ "J": true,
+ "K": false,
+ "L": true,
+ "M": false,
+ "N": false,
+ "O": false,
+ "P": false,
+ "Q": false,
+ "R": false,
+ "S": true,
+ "T": true,
+ "U": false,
+ "V": true,
+ "W": false,
+ "X": false,
+ "Y": false,
+ "Z": false
+ },
+ "Hooks": {
+ "Symbols": false,
+ "Numbers": false,
+ "A": true,
+ "B": false,
+ "C": false,
+ "D": false,
+ "E": true,
+ "F": false,
+ "G": false,
+ "H": false,
+ "I": false,
+ "J": true,
+ "K": false,
+ "L": false,
+ "M": false,
+ "N": false,
+ "O": false,
+ "P": true,
+ "Q": false,
+ "R": false,
+ "S": false,
+ "T": false,
+ "U": false,
+ "V": false,
+ "W": false,
+ "X": false,
+ "Y": false,
+ "Z": false
+ },
+ "Properties": {
+ "Symbols": false,
+ "Numbers": false,
+ "A": true,
+ "B": true,
+ "C": true,
+ "D": true,
+ "E": true,
+ "F": true,
+ "G": true,
+ "H": true,
+ "I": true,
+ "J": false,
+ "K": false,
+ "L": true,
+ "M": true,
+ "N": true,
+ "O": true,
+ "P": true,
+ "Q": false,
+ "R": true,
+ "S": true,
+ "T": true,
+ "U": true,
+ "V": true,
+ "W": true,
+ "X": true,
+ "Y": true,
+ "Z": true
+ }
+ } \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesA.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesA.html
new file mode 100644
index 00000000..2f4dab57
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesA.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Axis><div class=IEntry><a href="../files/jqplot-core-js.html#Axis" target=_parent class=ISymbol>Axis</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesD.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesD.html
new file mode 100644
index 00000000..135eeb6a
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesD.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_DashedHorizontalLine><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine" target=_parent class=ISymbol>DashedHorizontalLine</a></div></div><div class=SRResult id=SR_DashedVerticalLine><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine" target=_parent class=ISymbol>DashedVerticalLine</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesG.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesG.html
new file mode 100644
index 00000000..36f121b0
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesG.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Grid><div class=IEntry><a href="../files/jqplot-core-js.html#Grid" target=_parent class=ISymbol>Grid</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesH.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesH.html
new file mode 100644
index 00000000..c411b320
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesH.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_HorizontalLine><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine" target=_parent class=ISymbol>HorizontalLine</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesJ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesJ.html
new file mode 100644
index 00000000..b2250098
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesJ.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jqPlot><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot" target=_parent class=ISymbol>jqPlot</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesL.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesL.html
new file mode 100644
index 00000000..6a93b819
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesL.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Legend><div class=IEntry><a href="../files/jqplot-core-js.html#Legend" target=_parent class=ISymbol>Legend</a></div></div><div class=SRResult id=SR_Line><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line" target=_parent class=ISymbol>Line</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesS.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesS.html
new file mode 100644
index 00000000..53823e7d
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesS.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Series><div class=IEntry><a href="../files/jqplot-core-js.html#Series" target=_parent class=ISymbol>Series</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesSymbols.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesSymbols.html
new file mode 100644
index 00000000..53396614
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesSymbols.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR__dol_perfn><div class=IEntry><a href="../files/jqplot-toImage-js.html#$.fn" target=_parent class=ISymbol>$.fn</a></div></div><div class=SRResult id=SR__dol_perjqplot><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot" target=_parent class=ISymbol>$.jqplot</a></div></div><div class=SRResult id=SR__dol_perjqplot_perAxisLabelRenderer><div class=IEntry><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>AxisLabelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perAxisTickRenderer><div class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>AxisTickRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBarRenderer><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BarRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBezierCurveRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js" target=_parent class=ISymbol>$.jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBlockRenderer><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BlockRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBubbleRenderer><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BubbleRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasAxisLabelRenderer><div class=IEntry><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasAxisTickRenderer><div class=IEntry><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasGridRenderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR__dol_perjqplot_perCanvasGridRenderer')" class=ISymbol>$.jqplot.<wbr>CanvasGridRenderer</a><div class=ISubIndex><a href="../files/jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" target=_parent class=IFile>jqplot.<wbr>canvasGridRenderer.js</a><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html#$.jqplot.CanvasGridRenderer" target=_parent class=IFile>plugins/<wbr>jqplot.<wbr>pyramidGridRenderer.js</a></div></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasOverlay><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasOverlay</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCategoryAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perciParser><div class=IEntry><a href="../files/plugins/jqplot-ciParser-js.html#$.jqplot.ciParser" target=_parent class=ISymbol>$.jqplot.<wbr>ciParser</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCursor><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor" target=_parent class=ISymbol>$.jqplot.<wbr>Cursor</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDateAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DateAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDivTitleRenderer><div class=IEntry><a href="../files/jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DivTitleRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDonutLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DonutLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDonutRenderer><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DonutRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDragable><div class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable" target=_parent class=ISymbol>$.jqplot.<wbr>Dragable</a></div></div><div class=SRResult id=SR__dol_perjqplot_perFunnelLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>FunnelLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perFunnelRenderer><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>FunnelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perHighlighter><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter" target=_parent class=ISymbol>$.jqplot.<wbr>Highlighter</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLinearAxisRenderer><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LinearAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLineRenderer><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LineRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLogAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LogAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMarkerRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MarkerRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMeterGaugeRenderer><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perOHLCRenderer><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>OHLCRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPieLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>PieLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPieRenderer><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>PieRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPointLabels><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels" target=_parent class=ISymbol>$.jqplot.<wbr>PointLabels</a></div></div><div class=SRResult id=SR__dol_perjqplot_pershadowRenderer><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>shadowRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_pershapeRenderer><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>shapeRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perThemeEngine><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine" target=_parent class=ISymbol>$.jqplot.<wbr>ThemeEngine</a></div></div><div class=SRResult id=SR__dol_perjqplot_perTrendline><div class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline" target=_parent class=ISymbol>$.jqplot.<wbr>Trendline</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesT.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesT.html
new file mode 100644
index 00000000..782f11db
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesT.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Title><div class=IEntry><a href="../files/jqplot-core-js.html#Title" target=_parent class=ISymbol>Title</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesV.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesV.html
new file mode 100644
index 00000000..62d2e7cb
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesV.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_VerticalLine><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#VerticalLine" target=_parent class=ISymbol>VerticalLine</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FilesJ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FilesJ.html
new file mode 100644
index 00000000..3c66afa0
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/FilesJ.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jqplot_perenhancedLegendRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#jqplot.enhancedLegendRenderer.js" target=_parent class=ISymbol>jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=SRResult id=SR_jqplot_perpyramidAxisRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#jqplot.pyramidAxisRenderer.js" target=_parent class=ISymbol>jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=SRResult id=SR_jqplot_perpyramidRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#jqplot.pyramidRenderer.js" target=_parent class=ISymbol>jqplot.<wbr>pyramidRenderer.js</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsC.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsC.html
new file mode 100644
index 00000000..40135d3a
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsC.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_copy><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.copy" target=_parent class=ISymbol>copy</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsD.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsD.html
new file mode 100644
index 00000000..2c2bed5d
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsD.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_destroy><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.destroy" target=_parent class=ISymbol>destroy</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_draw><div class=IEntry><a href="javascript:searchResults.Toggle('SR_draw')" class=ISymbol>draw</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.draw" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.draw" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.draw" target=_parent class=IParent>jqPlot</a></div></div></div><div class=SRResult id=SR_drawSeries><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.drawSeries" target=_parent class=ISymbol>drawSeries</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsG.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsG.html
new file mode 100644
index 00000000..561eabc0
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsG.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_get><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.get" target=_parent class=ISymbol>get</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_getThemeNames><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemeNames" target=_parent class=ISymbol>getThemeNames</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_getThemes><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemes" target=_parent class=ISymbol>getThemes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsI.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsI.html
new file mode 100644
index 00000000..45090983
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsI.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_init><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.init" target=_parent class=ISymbol>init</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsM.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsM.html
new file mode 100644
index 00000000..0b6446cb
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsM.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_makeGridData><div class=IEntry><a href="javascript:searchResults.Toggle('SR_makeGridData')" class=ISymbol>makeGridData</a><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.makeGridData" target=_parent class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.makeGridData" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></div></div><div class=SRResult id=SR_moveBlock><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.moveBlock" target=_parent class=ISymbol>moveBlock</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_moveSeriesToBack><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToBack" target=_parent class=ISymbol>moveSeriesToBack</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_moveSeriesToFront><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToFront" target=_parent class=ISymbol>moveSeriesToFront</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsN.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsN.html
new file mode 100644
index 00000000..7cc60bfe
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsN.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_newTheme><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.newTheme" target=_parent class=ISymbol>newTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsQ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsQ.html
new file mode 100644
index 00000000..9d06ebc0
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsQ.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_quickInit><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.quickInit" target=_parent class=ISymbol>quickInit</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsR.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsR.html
new file mode 100644
index 00000000..fac0dbcc
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsR.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_redraw><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.redraw" target=_parent class=ISymbol>redraw</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_reInitialize><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.reInitialize" target=_parent class=ISymbol>reInitialize</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_remove><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.remove" target=_parent class=ISymbol>remove</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_rename><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.rename" target=_parent class=ISymbol>rename</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_replot><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.replot" target=_parent class=ISymbol>replot</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_resetAxesScale><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.resetAxesScale" target=_parent class=ISymbol>resetAxesScale</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_restoreOriginalSeriesOrder><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restoreOriginalSeriesOrder" target=_parent class=ISymbol>restoreOriginalSeriesOrder</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_restorePreviousSeriesOrder><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restorePreviousSeriesOrder" target=_parent class=ISymbol>restorePreviousSeriesOrder</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsS.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsS.html
new file mode 100644
index 00000000..bab767cf
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsS.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_setGridData><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setGridData')" class=ISymbol>setGridData</a><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.setGridData" target=_parent class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.setGridData" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsZ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsZ.html
new file mode 100644
index 00000000..4b364e98
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsZ.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_zoomProxy><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy" target=_parent class=ISymbol>zoomProxy</a>, <span class=IParent>$.jqplot.<wbr>Cursor.$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralA.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralA.html
new file mode 100644
index 00000000..f62a230b
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralA.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_activeTheme><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.activeTheme" target=_parent class=ISymbol>activeTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_addLegendRowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.addLegendRowHooks" target=_parent class=ISymbol>addLegendRowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_alignTicks><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.alignTicks" target=_parent class=ISymbol>alignTicks</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_alpha><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.alpha" target=_parent class=ISymbol>alpha</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_angle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_angle')" class=ISymbol>angle</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a></div></div></div><div class=SRResult id=SR_animate><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.animate" target=_parent class=ISymbol>animate</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_animateReplot><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.animateReplot" target=_parent class=ISymbol>animateReplot</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_autoscale><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.autoscale" target=_parent class=ISymbol>autoscale</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_autoscaleBubbles><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleBubbles" target=_parent class=ISymbol>autoscaleBubbles</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_autoscaleMultiplier><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleMultiplier" target=_parent class=ISymbol>autoscaleMultiplier</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_autoscalePointsFactor><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscalePointsFactor" target=_parent class=ISymbol>autoscalePointsFactor</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_Available_spcOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Available_Options" target=_parent class=ISymbol>Available Options</a></div></div><div class=SRResult id=SR_axes><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axes" target=_parent class=ISymbol>axes</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_axesDefaults><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axesDefaults" target=_parent class=ISymbol>axesDefaults</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_Axis><div class=IEntry><a href="../files/jqplot-core-js.html#Axis" target=_parent class=ISymbol>Axis</a></div></div><div class=SRResult id=SR_axisDefaults><div class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.axisDefaults" target=_parent class=ISymbol>axisDefaults</a>, <span class=IParent>$.jqplot.<wbr>LogAxisRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralB.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralB.html
new file mode 100644
index 00000000..06a97030
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralB.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_background><div class=IEntry><a href="javascript:searchResults.Toggle('SR_background')" class=ISymbol>background</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.background" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Grid.background" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.background" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_bandData><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.bandData" target=_parent class=ISymbol>bandData</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_bands><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.bands" target=_parent class=ISymbol>bands</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_barDirection><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barDirection" target=_parent class=ISymbol>barDirection</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_barLabelOptions><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelOptions" target=_parent class=ISymbol>barLabelOptions</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barLabelRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelRenderer" target=_parent class=ISymbol>barLabelRenderer</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barLabels><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabels" target=_parent class=ISymbol>barLabels</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barMargin><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barMargin" target=_parent class=ISymbol>barMargin</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_barPadding><div class=IEntry><a href="javascript:searchResults.Toggle('SR_barPadding')" class=ISymbol>barPadding</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#barPadding" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barPadding" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a></div></div></div><div class=SRResult id=SR_barWidth><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barWidth" target=_parent class=ISymbol>barWidth</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_baselineColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_baselineColor')" class=ISymbol>baselineColor</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#baselineColor" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.baselineColor" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.baselineColor" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></div></div><div class=SRResult id=SR_baselineWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_baselineWidth')" class=ISymbol>baselineWidth</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#baselineWidth" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.baselineWidth" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.baselineWidth" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></div></div><div class=SRResult id=SR_bodyWidth><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.bodyWidth" target=_parent class=ISymbol>bodyWidth</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_border><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.border" target=_parent class=ISymbol>border</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_borderColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_borderColor')" class=ISymbol>borderColor</a><div class=ISubIndex><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.borderColor" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-core-js.html#Axis.borderColor" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderColor" target=_parent class=IParent>Grid</a></div></div></div><div class=SRResult id=SR_borderWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_borderWidth')" class=ISymbol>borderWidth</a><div class=ISubIndex><a href="../files/jqplot-core-js.html#Axis.borderWidth" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderWidth" target=_parent class=IParent>Grid</a></div></div></div><div class=SRResult id=SR_breakOnNull><div class=IEntry><a href="../files/jqplot-core-js.html#Series.breakOnNull" target=_parent class=ISymbol>breakOnNull</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_breakPoints><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.breakPoints" target=_parent class=ISymbol>breakPoints</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_breakTickLabel><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.breakTickLabel" target=_parent class=ISymbol>breakTickLabel</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_bringSeriesToFront><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.bringSeriesToFront" target=_parent class=ISymbol>bringSeriesToFront</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_bubbleAlpha><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleAlpha" target=_parent class=ISymbol>bubbleAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_bubbleGradients><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleGradients" target=_parent class=ISymbol>bubbleGradients</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralC.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralC.html
new file mode 100644
index 00000000..20bb76ec
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralC.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_candleStick><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.candleStick" target=_parent class=ISymbol>candleStick</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_Change_spcLog><div class=IEntry><a href="../files/changes-txt.html#Change_Log" target=_parent class=ISymbol>Change Log</a></div></div><div class=SRResult id=SR_Changes><div class=IEntry><a href="../files/jqplot-core-js.html#Changes" target=_parent class=ISymbol>Changes</a></div></div><div class=SRResult id=SR_clearRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.clearRect" target=_parent class=ISymbol>clearRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_clickReset><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.clickReset" target=_parent class=ISymbol>clickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_closeColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.closeColor" target=_parent class=ISymbol>closeColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_color><div class=IEntry><a href="javascript:searchResults.Toggle('SR_color')" class=ISymbol>color</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.color" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.color" target=_parent class=IParent>$.jqplot.<wbr>Dragable</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.color" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.color" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.color" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.color" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_constrainOutsideZoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainOutsideZoom" target=_parent class=ISymbol>constrainOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_constrainSmoothing><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.constrainSmoothing" target=_parent class=ISymbol>constrainSmoothing</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_constrainTo><div class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.constrainTo" target=_parent class=ISymbol>constrainTo</a>, <span class=IParent>$.jqplot.<wbr>Dragable</span></div></div><div class=SRResult id=SR_constrainZoomTo><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainZoomTo" target=_parent class=ISymbol>constrainZoomTo</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_copy><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.copy" target=_parent class=ISymbol>copy</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_Copyright_ampLicense><div class=IEntry><a href="../files/jqplot-core-js.html#CopyrightLicense" target=_parent class=ISymbol>Copyright&amp;License</a></div></div><div class=SRResult id=SR_css><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.css" target=_parent class=ISymbol>css</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_cursorLegendFormatString><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.cursorLegendFormatString" target=_parent class=ISymbol>cursorLegendFormatString</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralD.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralD.html
new file mode 100644
index 00000000..3c759ce2
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralD.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_DashedHorizontalLine><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine" target=_parent class=ISymbol>DashedHorizontalLine</a></div></div><div class=SRResult id=SR_DashedVerticalLine><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine" target=_parent class=ISymbol>DashedVerticalLine</a></div></div><div class=SRResult id=SR_dashPattern><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dashPattern')" class=ISymbol>dashPattern</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine.dashPattern" target=_parent class=IParent>DashedHorizontalLine</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine.dashPattern" target=_parent class=IParent>DashedVerticalLine</a></div></div></div><div class=SRResult id=SR_data><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.data" target=_parent class=ISymbol>data</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_dataLabelCenterOn><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelCenterOn" target=_parent class=ISymbol>dataLabelCenterOn</a>, <span class=IParent>$.jqplot.<wbr>PieRenderer</span></div></div><div class=SRResult id=SR_dataLabelFormatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelFormatString')" class=ISymbol>dataLabelFormatString</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelNudge><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelNudge')" class=ISymbol>dataLabelNudge</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelNudge" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelNudge" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelPositionFactor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelPositionFactor')" class=ISymbol>dataLabelPositionFactor</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelPositionFactor" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelPositionFactor" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabels')" class=ISymbol>dataLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelThreshold><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelThreshold')" class=ISymbol>dataLabelThreshold</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataRenderer><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.dataRenderer" target=_parent class=ISymbol>dataRenderer</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_dataRendererOptions><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.dataRendererOptions" target=_parent class=ISymbol>dataRendererOptions</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_dblClickReset><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.dblClickReset" target=_parent class=ISymbol>dblClickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_defaultAxisStart><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.defaultAxisStart" target=_parent class=ISymbol>defaultAxisStart</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_depth><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.depth" target=_parent class=ISymbol>depth</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_destroy><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.destroy" target=_parent class=ISymbol>destroy</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_diameter><div class=IEntry><a href="javascript:searchResults.Toggle('SR_diameter')" class=ISymbol>diameter</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_disableIEFading><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#disableIEFading" target=_parent class=ISymbol>disableIEFading</a></div></div><div class=SRResult id=SR_disableStack><div class=IEntry><a href="../files/jqplot-core-js.html#Series.disableStack" target=_parent class=ISymbol>disableStack</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_downBodyColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.downBodyColor" target=_parent class=ISymbol>downBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_draw><div class=IEntry><a href="javascript:searchResults.Toggle('SR_draw')" class=ISymbol>draw</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.draw" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.draw" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.draw" target=_parent class=IParent>jqPlot</a></div></div></div><div class=SRResult id=SR_drawBaseline><div class=IEntry><a href="javascript:searchResults.Toggle('SR_drawBaseline')" class=ISymbol>drawBaseline</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#drawBaseline" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.drawBaseline" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.drawBaseline" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.drawBaseline" target=_parent class=IParent>$.jqplot.<wbr>LogAxisRenderer</a></div></div></div><div class=SRResult id=SR_drawBorder><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawBorder" target=_parent class=ISymbol>drawBorder</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_drawGridlines><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawGridlines" target=_parent class=ISymbol>drawGridlines</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_drawMajorGridlines><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMajorGridlines" target=_parent class=ISymbol>drawMajorGridlines</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_drawMajorTickMarks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMajorTickMarks" target=_parent class=ISymbol>drawMajorTickMarks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_drawMinorGridlines><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMinorGridlines" target=_parent class=ISymbol>drawMinorGridlines</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_drawMinorTickMarks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMinorTickMarks" target=_parent class=ISymbol>drawMinorTickMarks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_drawSeries><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.drawSeries" target=_parent class=ISymbol>drawSeries</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralE.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralE.html
new file mode 100644
index 00000000..5f3a9205
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralE.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_edgeTolerance><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.edgeTolerance" target=_parent class=ISymbol>edgeTolerance</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_enableFontSupport><div class=IEntry><a href="javascript:searchResults.Toggle('SR_enableFontSupport')" class=ISymbol>enableFontSupport</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.enableFontSupport" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.enableFontSupport" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_escapeHtml><div class=IEntry><a href="javascript:searchResults.Toggle('SR_escapeHtml')" class=ISymbol>escapeHtml</a><div class=ISubIndex><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.escapeHtml" target=_parent class=IParent>$.jqplot.<wbr>BlockRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.escapeHtml" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.escapeHtml" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.escapeHtml" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR2_escapeHTML><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_escapeHTML')" class=ISymbol>escapeHTML</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.escapeHTML" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.escapeHTML" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.escapeHTML" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div><div class=SRResult id=SR_eventListenerHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.eventListenerHooks" target=_parent class=ISymbol>eventListenerHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralF.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralF.html
new file mode 100644
index 00000000..c1af77c8
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralF.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_fadeTooltip><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fadeTooltip')" class=ISymbol>fadeTooltip</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.fadeTooltip" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.fadeTooltip" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_fill><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fill')" class=ISymbol>fill</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#fill" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.fill" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_fillAlpha><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAlpha" target=_parent class=ISymbol>fillAlpha</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillAndStroke><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAndStroke" target=_parent class=ISymbol>fillAndStroke</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillAxis><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAxis" target=_parent class=ISymbol>fillAxis</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillBetween><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.fillBetween" target=_parent class=ISymbol>fillBetween</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_fillColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fillColor')" class=ISymbol>fillColor</a><div class=ISubIndex><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.fillColor" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-core-js.html#Series.fillColor" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_fillDownBody><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillDownBody" target=_parent class=ISymbol>fillDownBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_fillRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillRect" target=_parent class=ISymbol>fillRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_fillStyle><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillStyle" target=_parent class=ISymbol>fillStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_fillToValue><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToValue" target=_parent class=ISymbol>fillToValue</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillToZero><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToZero" target=_parent class=ISymbol>fillToZero</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillUpBody><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillUpBody" target=_parent class=ISymbol>fillUpBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_followMouse><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.followMouse" target=_parent class=ISymbol>followMouse</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_fontFamily><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontFamily')" class=ISymbol>fontFamily</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.fontFamily" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontFamily" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_fontSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontSize')" class=ISymbol>fontSize</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.fontSize" target=_parent class=IParent>jqPlot</a><a href="../files/jqplot-core-js.html#Legend.fontSize" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontSize" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_fontStretch><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontStretch')" class=ISymbol>fontStretch</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontStretch" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontStretch" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_fontWeight><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontWeight')" class=ISymbol>fontWeight</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontWeight" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontWeight" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_forceTickAt0><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.forceTickAt0" target=_parent class=ISymbol>forceTickAt0</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_forceTickAt100><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.forceTickAt100" target=_parent class=ISymbol>forceTickAt100</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_formatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_formatString')" class=ISymbol>formatString</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatString" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatString" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.formatString" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatString" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div><div class=SRResult id=SR_formatter><div class=IEntry><a href="javascript:searchResults.Toggle('SR_formatter')" class=ISymbol>formatter</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatter" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatter" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatter" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div><div class=SRResult id=SR_Functions><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Functions')" class=ISymbol>Functions</a><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.Functions" target=_parent class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.Functions" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.Functions" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralG.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralG.html
new file mode 100644
index 00000000..092df150
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralG.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_get><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.get" target=_parent class=ISymbol>get</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_getThemeNames><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemeNames" target=_parent class=ISymbol>getThemeNames</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_getThemes><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemes" target=_parent class=ISymbol>getThemes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_GPL_spcVersion_spc2><div class=IEntry><a href="../files/gpl-2-0-txt.html#GPL_Version_2" target=_parent class=ISymbol>GPL Version 2</a></div></div><div class=SRResult id=SR_grid><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.grid" target=_parent class=ISymbol>grid</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR2_Grid><div class=IEntry><a href="../files/jqplot-core-js.html#Grid" target=_parent class=ISymbol>Grid</a></div></div><div class=SRResult id=SR_gridLineColor><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineColor" target=_parent class=ISymbol>gridLineColor</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_gridLineWidth><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineWidth" target=_parent class=ISymbol>gridLineWidth</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_groups><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.groups" target=_parent class=ISymbol>groups</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralH.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralH.html
new file mode 100644
index 00000000..ff6d0676
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralH.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_hideZeros><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.hideZeros" target=_parent class=ISymbol>hideZeros</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_highlightAlpha><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightAlpha" target=_parent class=ISymbol>highlightAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_highlightColor><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightColor" target=_parent class=ISymbol>highlightColor</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_highlightColors><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightColors')" class=ISymbol>highlightColors</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightColors" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_highlightMouseDown><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightMouseDown')" class=ISymbol>highlightMouseDown</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightMouseDown" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_highlightMouseOver><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightMouseOver')" class=ISymbol>highlightMouseOver</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightMouseOver" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_hlc><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.hlc" target=_parent class=ISymbol>hlc</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_Hooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.Hooks" target=_parent class=ISymbol>Hooks</a>, <span class=IParent>$.jqplot</span></div></div><div class=SRResult id=SR_HorizontalLine><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine" target=_parent class=ISymbol>HorizontalLine</a></div></div><div class=SRResult id=SR_hubRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.hubRadius" target=_parent class=ISymbol>hubRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralI.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralI.html
new file mode 100644
index 00000000..7873ee40
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralI.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_index><div class=IEntry><a href="../files/jqplot-core-js.html#Series.index" target=_parent class=ISymbol>index</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_init><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.init" target=_parent class=ISymbol>init</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_innerDiameter><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.innerDiameter" target=_parent class=ISymbol>innerDiameter</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_insertBreaks><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.insertBreaks" target=_parent class=ISymbol>insertBreaks</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_intersectionThreshold><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.intersectionThreshold" target=_parent class=ISymbol>intersectionThreshold</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_interval><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.interval" target=_parent class=ISymbol>interval</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_intervalColors><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalColors" target=_parent class=ISymbol>intervalColors</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervalInnerRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalInnerRadius" target=_parent class=ISymbol>intervalInnerRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervalOuterRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalOuterRadius" target=_parent class=ISymbol>intervalOuterRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervals><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervals" target=_parent class=ISymbol>intervals</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_Introduction><div class=IEntry><a href="../files/jqplot-core-js.html#Introduction" target=_parent class=ISymbol>Introduction</a></div></div><div class=SRResult id=SR_isarc><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isarc')" class=ISymbol>isarc</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.isarc" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.isarc" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></div></div><div class=SRResult id=SR_isMinorTick><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isMinorTick')" class=ISymbol>isMinorTick</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.isMinorTick" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.isMinorTick" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralJ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralJ.html
new file mode 100644
index 00000000..fe560304
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralJ.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jqPlot><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot" target=_parent class=ISymbol>jqPlot</a></div></div><div class=SRResult id=SR_jqPlot_spcCharts><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot_Charts" target=_parent class=ISymbol>jqPlot Charts</a></div></div><div class=SRResult id=SR_jqPlot_spcCSS_spcCustomization><div class=IEntry><a href="../files/jqPlotCssStyling-txt.html#jqPlot_CSS_Customization" target=_parent class=ISymbol>jqPlot CSS Customization</a></div></div><div class=SRResult id=SR_jqPlot_spcOptions><div class=IEntry><a href="../files/jqPlotOptions-txt.html#jqPlot_Options" target=_parent class=ISymbol>jqPlot Options</a></div></div><div class=SRResult id=SR_jqPlot_spcPugin_spcHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.jqPlot_Pugin_Hooks" target=_parent class=ISymbol>jqPlot Pugin Hooks</a>, <span class=IParent>$.jqplot</span></div></div><div class=SRResult id=SR_jqPlot_spcUsage><div class=IEntry><a href="../files/usage-txt.html#jqPlot_Usage" target=_parent class=ISymbol>jqPlot Usage</a></div></div><div class=SRResult id=SR_jqplot_perenhancedLegendRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#jqplot.enhancedLegendRenderer.js" target=_parent class=ISymbol>jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=SRResult id=SR_jqplot_perpyramidAxisRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#jqplot.pyramidAxisRenderer.js" target=_parent class=ISymbol>jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=SRResult id=SR_jqplot_perpyramidRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#jqplot.pyramidRenderer.js" target=_parent class=ISymbol>jqplot.<wbr>pyramidRenderer.js</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralL.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralL.html
new file mode 100644
index 00000000..0fc12896
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralL.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_label><div class=IEntry><a href="javascript:searchResults.Toggle('SR_label')" class=ISymbol>label</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.label" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.label" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.label" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_labelHeightAdjust><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelHeightAdjust" target=_parent class=ISymbol>labelHeightAdjust</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_labelOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelOptions" target=_parent class=ISymbol>labelOptions</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_labelPosition><div class=IEntry><a href="javascript:searchResults.Toggle('SR_labelPosition')" class=ISymbol>labelPosition</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.labelPosition" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelPosition" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a></div></div></div><div class=SRResult id=SR_labelRenderer><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelRenderer" target=_parent class=ISymbol>labelRenderer</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_labels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_labels')" class=ISymbol>labels</a><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labels" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.labels" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_labelsFromSeries><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labelsFromSeries" target=_parent class=ISymbol>labelsFromSeries</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_legend><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.legend" target=_parent class=ISymbol>legend</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR2_Legend><div class=IEntry><a href="../files/jqplot-core-js.html#Legend" target=_parent class=ISymbol>Legend</a></div></div><div class=SRResult id=SR_Line><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line" target=_parent class=ISymbol>Line</a></div></div><div class=SRResult id=SR_lineCap><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineCap')" class=ISymbol>lineCap</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.lineCap" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineCap" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineCap" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.lineCap" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_lineJoin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineJoin')" class=ISymbol>lineJoin</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineJoin" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineJoin" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.lineJoin" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_linePattern><div class=IEntry><a href="javascript:searchResults.Toggle('SR_linePattern')" class=ISymbol>linePattern</a><div class=ISubIndex><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.linePattern" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.linePattern" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_lineWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineWidth')" class=ISymbol>lineWidth</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>OHLCRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.lineWidth" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_lineWidthAdjust><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.lineWidthAdjust" target=_parent class=ISymbol>lineWidthAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_location><div class=IEntry><a href="javascript:searchResults.Toggle('SR_location')" class=ISymbol>location</a><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.location" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.location" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_looseZoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.looseZoom" target=_parent class=ISymbol>looseZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralM.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralM.html
new file mode 100644
index 00000000..53789fac
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralM.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_makeGridData><div class=IEntry><a href="javascript:searchResults.Toggle('SR_makeGridData')" class=ISymbol>makeGridData</a><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.makeGridData" target=_parent class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.makeGridData" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></div></div><div class=SRResult id=SR_marginBottom><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginBottom" target=_parent class=ISymbol>marginBottom</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginLeft><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginLeft" target=_parent class=ISymbol>marginLeft</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginRight><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginRight" target=_parent class=ISymbol>marginRight</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginTop><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginTop" target=_parent class=ISymbol>marginTop</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_mark><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mark')" class=ISymbol>mark</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.mark" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.mark" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_markerOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Series.markerOptions" target=_parent class=ISymbol>markerOptions</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_markerRenderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_markerRenderer')" class=ISymbol>markerRenderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.markerRenderer" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.markerRenderer" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.markerRenderer" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_markSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_markSize')" class=ISymbol>markSize</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.markSize" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.markSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_max><div class=IEntry><a href="javascript:searchResults.Toggle('SR_max')" class=ISymbol>max</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.max" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.max" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_methods><div class=IEntry><a href="javascript:searchResults.Toggle('SR_methods')" class=ISymbol>methods</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.methods" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.methods" target=_parent class=IParent>$.jqplot.<wbr>ThemeEngine</a><a href="../files/jqplot-core-js.html#jqPlot.methods" target=_parent class=IParent>jqPlot</a></div></div></div><div class=SRResult id=SR2_Methods><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.Methods" target=_parent class=ISymbol>Methods</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_min><div class=IEntry><a href="javascript:searchResults.Toggle('SR_min')" class=ISymbol>min</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.min" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.min" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_minorTicks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_minorTicks')" class=ISymbol>minorTicks</a><div class=ISubIndex><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.minorTicks" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.minorTicks" target=_parent class=IParent>$.jqplot.<wbr>LogAxisRenderer</a></div></div></div><div class=SRResult id=SR_MIT_spcLicense><div class=IEntry><a href="../files/MIT-LICENSE-txt.html#MIT_License" target=_parent class=ISymbol>MIT License</a></div></div><div class=SRResult id=SR_moveBlock><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.moveBlock" target=_parent class=ISymbol>moveBlock</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_moveSeriesToBack><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToBack" target=_parent class=ISymbol>moveSeriesToBack</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_moveSeriesToFront><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToFront" target=_parent class=ISymbol>moveSeriesToFront</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralN.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralN.html
new file mode 100644
index 00000000..d282c788
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralN.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_name><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.name" target=_parent class=ISymbol>name</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></div></div><div class=SRResult id=SR_needlePad><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needlePad" target=_parent class=ISymbol>needlePad</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_needleThickness><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needleThickness" target=_parent class=ISymbol>needleThickness</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_negativeColor><div class=IEntry><a href="../files/jqplot-core-js.html#Series.negativeColor" target=_parent class=ISymbol>negativeColor</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_neighborThreshold><div class=IEntry><a href="../files/jqplot-core-js.html#Series.neighborThreshold" target=_parent class=ISymbol>neighborThreshold</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_newTheme><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.newTheme" target=_parent class=ISymbol>newTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_noDataIndicator><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.noDataIndicator" target=_parent class=ISymbol>noDataIndicator</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_numberColumns><div class=IEntry><a href="javascript:searchResults.Toggle('SR_numberColumns')" class=ISymbol>numberColumns</a><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberColumns" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></div></div><div class=SRResult id=SR_numberRows><div class=IEntry><a href="javascript:searchResults.Toggle('SR_numberRows')" class=ISymbol>numberRows</a><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberRows" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></div></div><div class=SRResult id=SR_numberTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.numberTicks" target=_parent class=ISymbol>numberTicks</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralO.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralO.html
new file mode 100644
index 00000000..bac068d9
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralO.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_objects><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.objects" target=_parent class=ISymbol>objects</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></div></div><div class=SRResult id=SR_offset><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.offset" target=_parent class=ISymbol>offset</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_offsetBars><div class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#offsetBars" target=_parent class=ISymbol>offsetBars</a></div></div><div class=SRResult id=SR_openColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.openColor" target=_parent class=ISymbol>openColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_Options_spcTutorial><div class=IEntry><a href="../files/optionsTutorial-txt.html#Options_Tutorial" target=_parent class=ISymbol>Options Tutorial</a></div></div><div class=SRResult id=SR_Options_spcUsage><div class=IEntry><a href="../files/jqplot-core-js.html#Options_Usage" target=_parent class=ISymbol>Options Usage</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralP.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralP.html
new file mode 100644
index 00000000..25e44059
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralP.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_pad><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.pad" target=_parent class=ISymbol>pad</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_padding><div class=IEntry><a href="javascript:searchResults.Toggle('SR_padding')" class=ISymbol>padding</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_padMax><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMax" target=_parent class=ISymbol>padMax</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_padMin><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMin" target=_parent class=ISymbol>padMin</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_pegNeedle><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.pegNeedle" target=_parent class=ISymbol>pegNeedle</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_placement><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.placement" target=_parent class=ISymbol>placement</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_position><div class=IEntry><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#position" target=_parent class=ISymbol>position</a></div></div><div class=SRResult id=SR_postDrawHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawHooks" target=_parent class=ISymbol>postDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postDrawSeriesHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesHooks" target=_parent class=ISymbol>postDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postDrawSeriesShadowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesShadowHooks" target=_parent class=ISymbol>postDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postInitHooks" target=_parent class=ISymbol>postInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postParseOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseOptionsHooks" target=_parent class=ISymbol>postParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postParseSeriesOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseSeriesOptionsHooks" target=_parent class=ISymbol>postParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postSeriesInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postSeriesInitHooks" target=_parent class=ISymbol>postSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_predraw><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.predraw" target=_parent class=ISymbol>predraw</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_preDrawHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawHooks" target=_parent class=ISymbol>preDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawLegendHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawLegendHooks" target=_parent class=ISymbol>preDrawLegendHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawSeriesHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesHooks" target=_parent class=ISymbol>preDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawSeriesShadowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesShadowHooks" target=_parent class=ISymbol>preDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_prefix><div class=IEntry><a href="javascript:searchResults.Toggle('SR_prefix')" class=ISymbol>prefix</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.prefix" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.prefix" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_preInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preInitHooks" target=_parent class=ISymbol>preInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preParseOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseOptionsHooks" target=_parent class=ISymbol>preParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preParseSeriesOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseSeriesOptionsHooks" target=_parent class=ISymbol>preParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preSeriesInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preSeriesInitHooks" target=_parent class=ISymbol>preSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_Properties><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Properties')" class=ISymbol>Properties</a><div class=ISubIndex><span class=IParent>Global</span><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#Properties" target=_parent class=IFile>plugins/<wbr>jqplot.<wbr>enhancedLegendRenderer.js</a><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#Properties" target=_parent class=IFile>plugins/<wbr>jqplot.<wbr>pyramidAxisRenderer.js</a><a href="../files/plugins/jqplot-pyramidRenderer-js.html#Properties" target=_parent class=IFile>plugins/<wbr>jqplot.<wbr>pyramidRenderer.js</a></div><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>BlockRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.Properties" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.Properties" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.Properties" target=_parent class=IParent>$.jqplot.<wbr>Dragable</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.Properties" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>LogAxisRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>OHLCRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>PieLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.Properties" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.Properties" target=_parent class=IParent>$.jqplot.<wbr>ThemeEngine</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.Properties" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.Properties" target=_parent class=IParent>Axis</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine.Properties" target=_parent class=IParent>DashedHorizontalLine</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine.Properties" target=_parent class=IParent>DashedVerticalLine</a><a href="../files/jqplot-core-js.html#Grid.Properties" target=_parent class=IParent>Grid</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.Properties" target=_parent class=IParent>HorizontalLine</a><a href="../files/jqplot-core-js.html#jqPlot.Properties" target=_parent class=IParent>jqPlot</a><a href="../files/jqplot-core-js.html#Legend.Properties" target=_parent class=IParent>Legend</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.Properties" target=_parent class=IParent>Line</a><a href="../files/jqplot-core-js.html#Series.Properties" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.Properties" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_pt2px><div class=IEntry><a href="javascript:searchResults.Toggle('SR_pt2px')" class=ISymbol>pt2px</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.pt2px" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.pt2px" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralQ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralQ.html
new file mode 100644
index 00000000..9d06ebc0
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralQ.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_quickInit><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.quickInit" target=_parent class=ISymbol>quickInit</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralR.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralR.html
new file mode 100644
index 00000000..830dac93
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralR.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_redraw><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.redraw" target=_parent class=ISymbol>redraw</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_reInitialize><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.reInitialize" target=_parent class=ISymbol>reInitialize</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_remove><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.remove" target=_parent class=ISymbol>remove</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_rename><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.rename" target=_parent class=ISymbol>rename</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_renderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_renderer')" class=ISymbol>renderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.renderer" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.renderer" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.renderer" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.renderer" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.renderer" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_rendererOptions><div class=IEntry><a href="javascript:searchResults.Toggle('SR_rendererOptions')" class=ISymbol>rendererOptions</a><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.rendererOptions" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.rendererOptions" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.rendererOptions" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.rendererOptions" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.rendererOptions" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.rendererOptions" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_replot><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.replot" target=_parent class=ISymbol>replot</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_resetAxesScale><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.resetAxesScale" target=_parent class=ISymbol>resetAxesScale</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_restoreOriginalSeriesOrder><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restoreOriginalSeriesOrder" target=_parent class=ISymbol>restoreOriginalSeriesOrder</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_restorePreviousSeriesOrder><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restorePreviousSeriesOrder" target=_parent class=ISymbol>restorePreviousSeriesOrder</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_ringColor><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringColor" target=_parent class=ISymbol>ringColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_ringMargin><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.ringMargin" target=_parent class=ISymbol>ringMargin</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_ringWidth><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringWidth" target=_parent class=ISymbol>ringWidth</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_rowSpacing><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.rowSpacing" target=_parent class=ISymbol>rowSpacing</a>, <span class=IParent>Legend</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralS.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralS.html
new file mode 100644
index 00000000..4cfc8650
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralS.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_scaleToHiddenSeries><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.scaleToHiddenSeries" target=_parent class=ISymbol>scaleToHiddenSeries</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_sectionMargin><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.sectionMargin" target=_parent class=ISymbol>sectionMargin</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></div></div><div class=SRResult id=SR_series><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.series" target=_parent class=ISymbol>series</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR2_Series><div class=IEntry><a href="../files/jqplot-core-js.html#Series" target=_parent class=ISymbol>Series</a></div></div><div class=SRResult id=SR_seriesColors><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesColors" target=_parent class=ISymbol>seriesColors</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_seriesDefaults><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesDefaults" target=_parent class=ISymbol>seriesDefaults</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_seriesLabelIndex><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.seriesLabelIndex" target=_parent class=ISymbol>seriesLabelIndex</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_seriesToggle><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggle" target=_parent class=ISymbol>seriesToggle</a></div></div><div class=SRResult id=SR_seriesToggleReplot><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggleReplot" target=_parent class=ISymbol>seriesToggleReplot</a></div></div><div class=SRResult id=SR_setGridData><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setGridData')" class=ISymbol>setGridData</a><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.setGridData" target=_parent class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.setGridData" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></div></div><div class=SRResult id=SR_shadow><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadow')" class=ISymbol>shadow</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadow" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadow" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadow" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadow" target=_parent class=IParent>Grid</a></div></div></div><div class=SRResult id=SR_shadowAlpha><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowAlpha')" class=ISymbol>shadowAlpha</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAlpha" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAlpha" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowAngle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowAngle')" class=ISymbol>shadowAngle</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowAngle" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAngle" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAngle" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAngle" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAngle" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowColor><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowColor" target=_parent class=ISymbol>shadowColor</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_shadowDepth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowDepth')" class=ISymbol>shadowDepth</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowDepth" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowDepth" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowOffset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowOffset')" class=ISymbol>shadowOffset</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowOffset" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowOffset" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowRenderer" target=_parent class=ISymbol>shadowRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></div></div><div class=SRResult id=SR_shadowWidth><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowWidth" target=_parent class=ISymbol>shadowWidth</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_shapeRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shapeRenderer" target=_parent class=ISymbol>shapeRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></div></div><div class=SRResult id=SR_show><div class=IEntry><a href="javascript:searchResults.Toggle('SR_show')" class=ISymbol>show</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.show" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.show" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.show" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.show" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.show" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.show" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Legend.show" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.show" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.show" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_showBorders><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.showBorders" target=_parent class=ISymbol>showBorders</a>, <span class=IParent>$.jqplot.<wbr>MekkoRenderer</span></div></div><div class=SRResult id=SR_showCursorLegend><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showCursorLegend" target=_parent class=ISymbol>showCursorLegend</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showDataLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showDataLabels')" class=ISymbol>showDataLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_showGridline><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showGridline')" class=ISymbol>showGridline</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showGridline" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showGridline" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_showHorizontalLine><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showHorizontalLine" target=_parent class=ISymbol>showHorizontalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showLabel><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showLabel')" class=ISymbol>showLabel</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Axis.showLabel" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.showLabel" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_showLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showLabels')" class=ISymbol>showLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.showLabels" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.showLabels" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_showLine><div class=IEntry><a href="../files/jqplot-core-js.html#Series.showLine" target=_parent class=ISymbol>showLine</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_showLines><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.showLines" target=_parent class=ISymbol>showLines</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_showMark><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showMark')" class=ISymbol>showMark</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showMark" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showMark" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_showMarker><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showMarker')" class=ISymbol>showMarker</a><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showMarker" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-core-js.html#Series.showMarker" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_showMinorTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.showMinorTicks" target=_parent class=ISymbol>showMinorTicks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_showSwatch><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.showSwatch" target=_parent class=ISymbol>showSwatch</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_showTickLabels><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTickLabels" target=_parent class=ISymbol>showTickLabels</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_showTickMarks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.showTickMarks" target=_parent class=ISymbol>showTickMarks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_showTicks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showTicks')" class=ISymbol>showTicks</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTicks" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.showTicks" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_showTooltip><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showTooltip')" class=ISymbol>showTooltip</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.showTooltip" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltip" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showTooltip" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_showTooltipDataPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipDataPosition" target=_parent class=ISymbol>showTooltipDataPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipGridPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipGridPosition" target=_parent class=ISymbol>showTooltipGridPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipOutsideZoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipOutsideZoom" target=_parent class=ISymbol>showTooltipOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipPrecision><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.showTooltipPrecision" target=_parent class=ISymbol>showTooltipPrecision</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></div></div><div class=SRResult id=SR_showTooltipUnitPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipUnitPosition" target=_parent class=ISymbol>showTooltipUnitPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showVerticalLine><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showVerticalLine" target=_parent class=ISymbol>showVerticalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_size><div class=IEntry><a href="javascript:searchResults.Toggle('SR_size')" class=ISymbol>size</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.size" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.size" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></div></div><div class=SRResult id=SR_sizeAdjust><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.sizeAdjust" target=_parent class=ISymbol>sizeAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_sliceMargin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_sliceMargin')" class=ISymbol>sliceMargin</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.sliceMargin" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.sliceMargin" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_smooth><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.smooth" target=_parent class=ISymbol>smooth</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_sortData><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.sortData" target=_parent class=ISymbol>sortData</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_sortMergedLabels><div class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.sortMergedLabels" target=_parent class=ISymbol>sortMergedLabels</a>, <span class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</span></div></div><div class=SRResult id=SR_stackedValue><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.stackedValue" target=_parent class=ISymbol>stackedValue</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_stackSeries><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.stackSeries" target=_parent class=ISymbol>stackSeries</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_start><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.start" target=_parent class=ISymbol>start</a>, <span class=IParent>Line</span></div></div><div class=SRResult id=SR_startAngle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_startAngle')" class=ISymbol>startAngle</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.startAngle" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.startAngle" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_stop><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.stop" target=_parent class=ISymbol>stop</a>, <span class=IParent>Line</span></div></div><div class=SRResult id=SR_strokeRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeRect" target=_parent class=ISymbol>strokeRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_strokeStyle><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeStyle" target=_parent class=ISymbol>strokeStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_style><div class=IEntry><a href="javascript:searchResults.Toggle('SR_style')" class=ISymbol>style</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.style" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.style" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></div></div><div class=SRResult id=SR_suffix><div class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.suffix" target=_parent class=ISymbol>suffix</a>, <span class=IParent>$.jqplot.<wbr>AxisTickRenderer</span></div></div><div class=SRResult id=SR_synchronizeHighlight><div class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#synchronizeHighlight" target=_parent class=ISymbol>synchronizeHighlight</a></div></div><div class=SRResult id=SR_syncTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.syncTicks" target=_parent class=ISymbol>syncTicks</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralSymbols.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralSymbols.html
new file mode 100644
index 00000000..53396614
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralSymbols.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR__dol_perfn><div class=IEntry><a href="../files/jqplot-toImage-js.html#$.fn" target=_parent class=ISymbol>$.fn</a></div></div><div class=SRResult id=SR__dol_perjqplot><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot" target=_parent class=ISymbol>$.jqplot</a></div></div><div class=SRResult id=SR__dol_perjqplot_perAxisLabelRenderer><div class=IEntry><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>AxisLabelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perAxisTickRenderer><div class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>AxisTickRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBarRenderer><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BarRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBezierCurveRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js" target=_parent class=ISymbol>$.jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBlockRenderer><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BlockRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBubbleRenderer><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BubbleRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasAxisLabelRenderer><div class=IEntry><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasAxisTickRenderer><div class=IEntry><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasGridRenderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR__dol_perjqplot_perCanvasGridRenderer')" class=ISymbol>$.jqplot.<wbr>CanvasGridRenderer</a><div class=ISubIndex><a href="../files/jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" target=_parent class=IFile>jqplot.<wbr>canvasGridRenderer.js</a><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html#$.jqplot.CanvasGridRenderer" target=_parent class=IFile>plugins/<wbr>jqplot.<wbr>pyramidGridRenderer.js</a></div></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasOverlay><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasOverlay</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCategoryAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perciParser><div class=IEntry><a href="../files/plugins/jqplot-ciParser-js.html#$.jqplot.ciParser" target=_parent class=ISymbol>$.jqplot.<wbr>ciParser</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCursor><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor" target=_parent class=ISymbol>$.jqplot.<wbr>Cursor</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDateAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DateAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDivTitleRenderer><div class=IEntry><a href="../files/jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DivTitleRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDonutLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DonutLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDonutRenderer><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DonutRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDragable><div class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable" target=_parent class=ISymbol>$.jqplot.<wbr>Dragable</a></div></div><div class=SRResult id=SR__dol_perjqplot_perFunnelLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>FunnelLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perFunnelRenderer><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>FunnelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perHighlighter><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter" target=_parent class=ISymbol>$.jqplot.<wbr>Highlighter</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLinearAxisRenderer><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LinearAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLineRenderer><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LineRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLogAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LogAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMarkerRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MarkerRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMeterGaugeRenderer><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perOHLCRenderer><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>OHLCRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPieLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>PieLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPieRenderer><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>PieRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPointLabels><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels" target=_parent class=ISymbol>$.jqplot.<wbr>PointLabels</a></div></div><div class=SRResult id=SR__dol_perjqplot_pershadowRenderer><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>shadowRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_pershapeRenderer><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>shapeRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perThemeEngine><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine" target=_parent class=ISymbol>$.jqplot.<wbr>ThemeEngine</a></div></div><div class=SRResult id=SR__dol_perjqplot_perTrendline><div class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline" target=_parent class=ISymbol>$.jqplot.<wbr>Trendline</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralT.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralT.html
new file mode 100644
index 00000000..20f4ead9
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralT.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_text><div class=IEntry><a href="../files/jqplot-core-js.html#Title.text" target=_parent class=ISymbol>text</a>, <span class=IParent>Title</span></div></div><div class=SRResult id=SR_textAlign><div class=IEntry><a href="../files/jqplot-core-js.html#Title.textAlign" target=_parent class=ISymbol>textAlign</a>, <span class=IParent>Title</span></div></div><div class=SRResult id=SR_textColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_textColor')" class=ISymbol>textColor</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.textColor" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.textColor" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_themes><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.themes" target=_parent class=ISymbol>themes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_thickness><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.thickness" target=_parent class=ISymbol>thickness</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_tickColor><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickColor" target=_parent class=ISymbol>tickColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_tickInset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tickInset')" class=ISymbol>tickInset</a><div class=ISubIndex><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickInset" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.tickInset" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></div></div><div class=SRResult id=SR_tickInterval><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickInterval" target=_parent class=ISymbol>tickInterval</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_tickLength><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.tickLength" target=_parent class=ISymbol>tickLength</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_tickMode><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.tickMode" target=_parent class=ISymbol>tickMode</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_tickOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickOptions" target=_parent class=ISymbol>tickOptions</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_tickPadding><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickPadding" target=_parent class=ISymbol>tickPadding</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_tickRenderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tickRenderer')" class=ISymbol>tickRenderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.tickRenderer" target=_parent class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickRenderer" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickRenderer" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_ticks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ticks')" class=ISymbol>ticks</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ticks" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.ticks" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_tickSpacing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tickSpacing')" class=ISymbol>tickSpacing</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickSpacing" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickSpacing" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_title><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.title" target=_parent class=ISymbol>title</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR2_Title><div class=IEntry><a href="../files/jqplot-core-js.html#Title" target=_parent class=ISymbol>Title</a></div></div><div class=SRResult id=SR_tooltipAxes><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipAxes" target=_parent class=ISymbol>tooltipAxes</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_tooltipAxisGroups><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipAxisGroups" target=_parent class=ISymbol>tooltipAxisGroups</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_tooltipFadeSpeed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipFadeSpeed')" class=ISymbol>tooltipFadeSpeed</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipFadeSpeed" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFadeSpeed" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_tooltipFormatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipFormatString')" class=ISymbol>tooltipFormatString</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipFormatString" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipFormatString" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFormatString" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_tooltipLocation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipLocation')" class=ISymbol>tooltipLocation</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipLocation" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipLocation" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipLocation" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_tooltipOffset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipOffset')" class=ISymbol>tooltipOffset</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipOffset" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipOffset" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipOffset" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_transposedData><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.transposedData" target=_parent class=ISymbol>transposedData</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_type><div class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.type" target=_parent class=ISymbol>type</a>, <span class=IParent>$.jqplot.<wbr>Trendline</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralU.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralU.html
new file mode 100644
index 00000000..31bcbf12
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralU.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_upBodyColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.upBodyColor" target=_parent class=ISymbol>upBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_Usage><div class=IEntry><a href="../files/jqplot-core-js.html#Usage" target=_parent class=ISymbol>Usage</a></div></div><div class=SRResult id=SR_useAxesFormatters><div class=IEntry><a href="javascript:searchResults.Toggle('SR_useAxesFormatters')" class=ISymbol>useAxesFormatters</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.useAxesFormatters" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.useAxesFormatters" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_useNegativeColors><div class=IEntry><a href="../files/jqplot-core-js.html#Series.useNegativeColors" target=_parent class=ISymbol>useNegativeColors</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_useSeriesColor><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.useSeriesColor" target=_parent class=ISymbol>useSeriesColor</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralV.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralV.html
new file mode 100644
index 00000000..51af427e
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralV.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_varyBarColor><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.varyBarColor" target=_parent class=ISymbol>varyBarColor</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_varyBlockColors><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.varyBlockColors" target=_parent class=ISymbol>varyBlockColors</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_varyBubbleColors><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.varyBubbleColors" target=_parent class=ISymbol>varyBubbleColors</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_Version><div class=IEntry><a href="../files/jqplot-core-js.html#Version" target=_parent class=ISymbol>Version</a></div></div><div class=SRResult id=SR_VerticalLine><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#VerticalLine" target=_parent class=ISymbol>VerticalLine</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralW.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralW.html
new file mode 100644
index 00000000..ce589762
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralW.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_waterfall><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.waterfall" target=_parent class=ISymbol>waterfall</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_wickColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.wickColor" target=_parent class=ISymbol>wickColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_widthRatio><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.widthRatio" target=_parent class=ISymbol>widthRatio</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralX.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralX.html
new file mode 100644
index 00000000..443e98c4
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralX.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_xaxis><div class=IEntry><a href="javascript:searchResults.Toggle('SR_xaxis')" class=ISymbol>xaxis</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.xaxis" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-core-js.html#Series.xaxis" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_xmax><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.xmax" target=_parent class=ISymbol>xmax</a>, <span class=IParent>HorizontalLine</span></div></div><div class=SRResult id=SR_xmin><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.xmin" target=_parent class=ISymbol>xmin</a>, <span class=IParent>HorizontalLine</span></div></div><div class=SRResult id=SR_xoffset><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.xoffset" target=_parent class=ISymbol>xoffset</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_xpadding><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.xpadding" target=_parent class=ISymbol>xpadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralY.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralY.html
new file mode 100644
index 00000000..8f6ea7a6
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralY.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_y><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.y" target=_parent class=ISymbol>y</a>, <span class=IParent>HorizontalLine</span></div></div><div class=SRResult id=SR_yaxis><div class=IEntry><a href="javascript:searchResults.Toggle('SR_yaxis')" class=ISymbol>yaxis</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.yaxis" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-core-js.html#Series.yaxis" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_yoffset><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.yoffset" target=_parent class=ISymbol>yoffset</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_ypadding><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.ypadding" target=_parent class=ISymbol>ypadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_yvalues><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.yvalues" target=_parent class=ISymbol>yvalues</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralZ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralZ.html
new file mode 100644
index 00000000..1e8baa08
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralZ.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_zoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.zoom" target=_parent class=ISymbol>zoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_zoomProxy><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy" target=_parent class=ISymbol>zoomProxy</a>, <span class=IParent>$.jqplot.<wbr>Cursor.$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksA.html b/wqflask/wqflask/static/packages/jqplot/docs/search/HooksA.html
new file mode 100644
index 00000000..82b17cda
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/HooksA.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_addLegendRowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.addLegendRowHooks" target=_parent class=ISymbol>addLegendRowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksE.html b/wqflask/wqflask/static/packages/jqplot/docs/search/HooksE.html
new file mode 100644
index 00000000..fe464932
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/HooksE.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_eventListenerHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.eventListenerHooks" target=_parent class=ISymbol>eventListenerHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksJ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/HooksJ.html
new file mode 100644
index 00000000..f94e0036
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/HooksJ.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jqPlot_spcPugin_spcHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.jqPlot_Pugin_Hooks" target=_parent class=ISymbol>jqPlot Pugin Hooks</a>, <span class=IParent>$.jqplot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksP.html b/wqflask/wqflask/static/packages/jqplot/docs/search/HooksP.html
new file mode 100644
index 00000000..eb28c716
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/HooksP.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_postDrawHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawHooks" target=_parent class=ISymbol>postDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postDrawSeriesHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesHooks" target=_parent class=ISymbol>postDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postDrawSeriesShadowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesShadowHooks" target=_parent class=ISymbol>postDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postInitHooks" target=_parent class=ISymbol>postInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postParseOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseOptionsHooks" target=_parent class=ISymbol>postParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postParseSeriesOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseSeriesOptionsHooks" target=_parent class=ISymbol>postParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postSeriesInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postSeriesInitHooks" target=_parent class=ISymbol>postSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawHooks" target=_parent class=ISymbol>preDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawLegendHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawLegendHooks" target=_parent class=ISymbol>preDrawLegendHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawSeriesHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesHooks" target=_parent class=ISymbol>preDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawSeriesShadowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesShadowHooks" target=_parent class=ISymbol>preDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preInitHooks" target=_parent class=ISymbol>preInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preParseOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseOptionsHooks" target=_parent class=ISymbol>preParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preParseSeriesOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseSeriesOptionsHooks" target=_parent class=ISymbol>preParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preSeriesInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preSeriesInitHooks" target=_parent class=ISymbol>preSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/NoResults.html b/wqflask/wqflask/static/packages/jqplot/docs/search/NoResults.html
new file mode 100644
index 00000000..d2459c05
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/NoResults.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=NoMatches>No Matches</div></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesA.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesA.html
new file mode 100644
index 00000000..386d9e89
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesA.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_activeTheme><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.activeTheme" target=_parent class=ISymbol>activeTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_alignTicks><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.alignTicks" target=_parent class=ISymbol>alignTicks</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_alpha><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.alpha" target=_parent class=ISymbol>alpha</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_angle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_angle')" class=ISymbol>angle</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a></div></div></div><div class=SRResult id=SR_animate><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.animate" target=_parent class=ISymbol>animate</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_animateReplot><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.animateReplot" target=_parent class=ISymbol>animateReplot</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_autoscale><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.autoscale" target=_parent class=ISymbol>autoscale</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_autoscaleBubbles><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleBubbles" target=_parent class=ISymbol>autoscaleBubbles</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_autoscaleMultiplier><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleMultiplier" target=_parent class=ISymbol>autoscaleMultiplier</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_autoscalePointsFactor><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscalePointsFactor" target=_parent class=ISymbol>autoscalePointsFactor</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_axes><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axes" target=_parent class=ISymbol>axes</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_axesDefaults><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axesDefaults" target=_parent class=ISymbol>axesDefaults</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_axisDefaults><div class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.axisDefaults" target=_parent class=ISymbol>axisDefaults</a>, <span class=IParent>$.jqplot.<wbr>LogAxisRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesB.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesB.html
new file mode 100644
index 00000000..a6cef468
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesB.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_background><div class=IEntry><a href="javascript:searchResults.Toggle('SR_background')" class=ISymbol>background</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.background" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Grid.background" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.background" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_bandData><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.bandData" target=_parent class=ISymbol>bandData</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_barDirection><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barDirection" target=_parent class=ISymbol>barDirection</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_barLabelOptions><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelOptions" target=_parent class=ISymbol>barLabelOptions</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barLabelRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelRenderer" target=_parent class=ISymbol>barLabelRenderer</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barLabels><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabels" target=_parent class=ISymbol>barLabels</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barMargin><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barMargin" target=_parent class=ISymbol>barMargin</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_barPadding><div class=IEntry><a href="javascript:searchResults.Toggle('SR_barPadding')" class=ISymbol>barPadding</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#barPadding" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barPadding" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a></div></div></div><div class=SRResult id=SR_barWidth><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barWidth" target=_parent class=ISymbol>barWidth</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_baselineColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_baselineColor')" class=ISymbol>baselineColor</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#baselineColor" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.baselineColor" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.baselineColor" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></div></div><div class=SRResult id=SR_baselineWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_baselineWidth')" class=ISymbol>baselineWidth</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#baselineWidth" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.baselineWidth" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.baselineWidth" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></div></div><div class=SRResult id=SR_bodyWidth><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.bodyWidth" target=_parent class=ISymbol>bodyWidth</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_border><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.border" target=_parent class=ISymbol>border</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_borderColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_borderColor')" class=ISymbol>borderColor</a><div class=ISubIndex><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.borderColor" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-core-js.html#Axis.borderColor" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderColor" target=_parent class=IParent>Grid</a></div></div></div><div class=SRResult id=SR_borderWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_borderWidth')" class=ISymbol>borderWidth</a><div class=ISubIndex><a href="../files/jqplot-core-js.html#Axis.borderWidth" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderWidth" target=_parent class=IParent>Grid</a></div></div></div><div class=SRResult id=SR_breakOnNull><div class=IEntry><a href="../files/jqplot-core-js.html#Series.breakOnNull" target=_parent class=ISymbol>breakOnNull</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_breakPoints><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.breakPoints" target=_parent class=ISymbol>breakPoints</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_breakTickLabel><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.breakTickLabel" target=_parent class=ISymbol>breakTickLabel</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_bringSeriesToFront><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.bringSeriesToFront" target=_parent class=ISymbol>bringSeriesToFront</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_bubbleAlpha><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleAlpha" target=_parent class=ISymbol>bubbleAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_bubbleGradients><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleGradients" target=_parent class=ISymbol>bubbleGradients</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesC.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesC.html
new file mode 100644
index 00000000..a30bf3da
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesC.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_candleStick><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.candleStick" target=_parent class=ISymbol>candleStick</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_clearRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.clearRect" target=_parent class=ISymbol>clearRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_clickReset><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.clickReset" target=_parent class=ISymbol>clickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_closeColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.closeColor" target=_parent class=ISymbol>closeColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_color><div class=IEntry><a href="javascript:searchResults.Toggle('SR_color')" class=ISymbol>color</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.color" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.color" target=_parent class=IParent>$.jqplot.<wbr>Dragable</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.color" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.color" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.color" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.color" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_constrainOutsideZoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainOutsideZoom" target=_parent class=ISymbol>constrainOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_constrainSmoothing><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.constrainSmoothing" target=_parent class=ISymbol>constrainSmoothing</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_constrainTo><div class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.constrainTo" target=_parent class=ISymbol>constrainTo</a>, <span class=IParent>$.jqplot.<wbr>Dragable</span></div></div><div class=SRResult id=SR_constrainZoomTo><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainZoomTo" target=_parent class=ISymbol>constrainZoomTo</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_css><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.css" target=_parent class=ISymbol>css</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_cursorLegendFormatString><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.cursorLegendFormatString" target=_parent class=ISymbol>cursorLegendFormatString</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesD.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesD.html
new file mode 100644
index 00000000..e0380eae
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesD.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_dashPattern><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dashPattern')" class=ISymbol>dashPattern</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine.dashPattern" target=_parent class=IParent>DashedHorizontalLine</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine.dashPattern" target=_parent class=IParent>DashedVerticalLine</a></div></div></div><div class=SRResult id=SR_data><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.data" target=_parent class=ISymbol>data</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_dataLabelCenterOn><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelCenterOn" target=_parent class=ISymbol>dataLabelCenterOn</a>, <span class=IParent>$.jqplot.<wbr>PieRenderer</span></div></div><div class=SRResult id=SR_dataLabelFormatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelFormatString')" class=ISymbol>dataLabelFormatString</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelNudge><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelNudge')" class=ISymbol>dataLabelNudge</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelNudge" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelNudge" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelPositionFactor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelPositionFactor')" class=ISymbol>dataLabelPositionFactor</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelPositionFactor" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelPositionFactor" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabels')" class=ISymbol>dataLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelThreshold><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelThreshold')" class=ISymbol>dataLabelThreshold</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataRenderer><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.dataRenderer" target=_parent class=ISymbol>dataRenderer</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_dataRendererOptions><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.dataRendererOptions" target=_parent class=ISymbol>dataRendererOptions</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_dblClickReset><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.dblClickReset" target=_parent class=ISymbol>dblClickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_defaultAxisStart><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.defaultAxisStart" target=_parent class=ISymbol>defaultAxisStart</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_depth><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.depth" target=_parent class=ISymbol>depth</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_diameter><div class=IEntry><a href="javascript:searchResults.Toggle('SR_diameter')" class=ISymbol>diameter</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_disableIEFading><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#disableIEFading" target=_parent class=ISymbol>disableIEFading</a></div></div><div class=SRResult id=SR_disableStack><div class=IEntry><a href="../files/jqplot-core-js.html#Series.disableStack" target=_parent class=ISymbol>disableStack</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_downBodyColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.downBodyColor" target=_parent class=ISymbol>downBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_drawBaseline><div class=IEntry><a href="javascript:searchResults.Toggle('SR_drawBaseline')" class=ISymbol>drawBaseline</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#drawBaseline" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.drawBaseline" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.drawBaseline" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.drawBaseline" target=_parent class=IParent>$.jqplot.<wbr>LogAxisRenderer</a></div></div></div><div class=SRResult id=SR_drawBorder><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawBorder" target=_parent class=ISymbol>drawBorder</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_drawGridlines><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawGridlines" target=_parent class=ISymbol>drawGridlines</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_drawMajorGridlines><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMajorGridlines" target=_parent class=ISymbol>drawMajorGridlines</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_drawMajorTickMarks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMajorTickMarks" target=_parent class=ISymbol>drawMajorTickMarks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_drawMinorGridlines><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMinorGridlines" target=_parent class=ISymbol>drawMinorGridlines</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_drawMinorTickMarks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMinorTickMarks" target=_parent class=ISymbol>drawMinorTickMarks</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesE.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesE.html
new file mode 100644
index 00000000..5bb760ff
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesE.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_edgeTolerance><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.edgeTolerance" target=_parent class=ISymbol>edgeTolerance</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_enableFontSupport><div class=IEntry><a href="javascript:searchResults.Toggle('SR_enableFontSupport')" class=ISymbol>enableFontSupport</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.enableFontSupport" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.enableFontSupport" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_escapeHtml><div class=IEntry><a href="javascript:searchResults.Toggle('SR_escapeHtml')" class=ISymbol>escapeHtml</a><div class=ISubIndex><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.escapeHtml" target=_parent class=IParent>$.jqplot.<wbr>BlockRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.escapeHtml" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.escapeHtml" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.escapeHtml" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR2_escapeHTML><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_escapeHTML')" class=ISymbol>escapeHTML</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.escapeHTML" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.escapeHTML" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.escapeHTML" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesF.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesF.html
new file mode 100644
index 00000000..cf90670b
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesF.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_fadeTooltip><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fadeTooltip')" class=ISymbol>fadeTooltip</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.fadeTooltip" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.fadeTooltip" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_fill><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fill')" class=ISymbol>fill</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#fill" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.fill" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_fillAlpha><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAlpha" target=_parent class=ISymbol>fillAlpha</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillAndStroke><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAndStroke" target=_parent class=ISymbol>fillAndStroke</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillAxis><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAxis" target=_parent class=ISymbol>fillAxis</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillBetween><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.fillBetween" target=_parent class=ISymbol>fillBetween</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_fillColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fillColor')" class=ISymbol>fillColor</a><div class=ISubIndex><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.fillColor" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-core-js.html#Series.fillColor" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_fillDownBody><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillDownBody" target=_parent class=ISymbol>fillDownBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_fillRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillRect" target=_parent class=ISymbol>fillRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_fillStyle><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillStyle" target=_parent class=ISymbol>fillStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_fillToValue><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToValue" target=_parent class=ISymbol>fillToValue</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillToZero><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToZero" target=_parent class=ISymbol>fillToZero</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillUpBody><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillUpBody" target=_parent class=ISymbol>fillUpBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_followMouse><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.followMouse" target=_parent class=ISymbol>followMouse</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_fontFamily><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontFamily')" class=ISymbol>fontFamily</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.fontFamily" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontFamily" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_fontSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontSize')" class=ISymbol>fontSize</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.fontSize" target=_parent class=IParent>jqPlot</a><a href="../files/jqplot-core-js.html#Legend.fontSize" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontSize" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_fontStretch><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontStretch')" class=ISymbol>fontStretch</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontStretch" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontStretch" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_fontWeight><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontWeight')" class=ISymbol>fontWeight</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontWeight" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontWeight" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_forceTickAt0><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.forceTickAt0" target=_parent class=ISymbol>forceTickAt0</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_forceTickAt100><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.forceTickAt100" target=_parent class=ISymbol>forceTickAt100</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_formatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_formatString')" class=ISymbol>formatString</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatString" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatString" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.formatString" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatString" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div><div class=SRResult id=SR_formatter><div class=IEntry><a href="javascript:searchResults.Toggle('SR_formatter')" class=ISymbol>formatter</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatter" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatter" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatter" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesG.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesG.html
new file mode 100644
index 00000000..3a7573d1
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesG.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_grid><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.grid" target=_parent class=ISymbol>grid</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_gridLineColor><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineColor" target=_parent class=ISymbol>gridLineColor</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_gridLineWidth><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineWidth" target=_parent class=ISymbol>gridLineWidth</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_groups><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.groups" target=_parent class=ISymbol>groups</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesH.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesH.html
new file mode 100644
index 00000000..ca8f802e
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesH.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_hideZeros><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.hideZeros" target=_parent class=ISymbol>hideZeros</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_highlightAlpha><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightAlpha" target=_parent class=ISymbol>highlightAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_highlightColor><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightColor" target=_parent class=ISymbol>highlightColor</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_highlightColors><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightColors')" class=ISymbol>highlightColors</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightColors" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_highlightMouseDown><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightMouseDown')" class=ISymbol>highlightMouseDown</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightMouseDown" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_highlightMouseOver><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightMouseOver')" class=ISymbol>highlightMouseOver</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightMouseOver" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_hlc><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.hlc" target=_parent class=ISymbol>hlc</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_hubRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.hubRadius" target=_parent class=ISymbol>hubRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesI.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesI.html
new file mode 100644
index 00000000..289adc8d
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesI.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_index><div class=IEntry><a href="../files/jqplot-core-js.html#Series.index" target=_parent class=ISymbol>index</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_innerDiameter><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.innerDiameter" target=_parent class=ISymbol>innerDiameter</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_insertBreaks><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.insertBreaks" target=_parent class=ISymbol>insertBreaks</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_intersectionThreshold><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.intersectionThreshold" target=_parent class=ISymbol>intersectionThreshold</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_interval><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.interval" target=_parent class=ISymbol>interval</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_intervalColors><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalColors" target=_parent class=ISymbol>intervalColors</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervalInnerRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalInnerRadius" target=_parent class=ISymbol>intervalInnerRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervalOuterRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalOuterRadius" target=_parent class=ISymbol>intervalOuterRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervals><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervals" target=_parent class=ISymbol>intervals</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_isarc><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isarc')" class=ISymbol>isarc</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.isarc" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.isarc" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></div></div><div class=SRResult id=SR_isMinorTick><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isMinorTick')" class=ISymbol>isMinorTick</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.isMinorTick" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.isMinorTick" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesL.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesL.html
new file mode 100644
index 00000000..2465230d
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesL.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_label><div class=IEntry><a href="javascript:searchResults.Toggle('SR_label')" class=ISymbol>label</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.label" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.label" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.label" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_labelHeightAdjust><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelHeightAdjust" target=_parent class=ISymbol>labelHeightAdjust</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_labelOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelOptions" target=_parent class=ISymbol>labelOptions</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_labelPosition><div class=IEntry><a href="javascript:searchResults.Toggle('SR_labelPosition')" class=ISymbol>labelPosition</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.labelPosition" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelPosition" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a></div></div></div><div class=SRResult id=SR_labelRenderer><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelRenderer" target=_parent class=ISymbol>labelRenderer</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_labels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_labels')" class=ISymbol>labels</a><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labels" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.labels" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_labelsFromSeries><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labelsFromSeries" target=_parent class=ISymbol>labelsFromSeries</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_legend><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.legend" target=_parent class=ISymbol>legend</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_lineCap><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineCap')" class=ISymbol>lineCap</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.lineCap" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineCap" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineCap" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.lineCap" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_lineJoin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineJoin')" class=ISymbol>lineJoin</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineJoin" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineJoin" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.lineJoin" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_linePattern><div class=IEntry><a href="javascript:searchResults.Toggle('SR_linePattern')" class=ISymbol>linePattern</a><div class=ISubIndex><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.linePattern" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.linePattern" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_lineWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineWidth')" class=ISymbol>lineWidth</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>OHLCRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.lineWidth" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_lineWidthAdjust><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.lineWidthAdjust" target=_parent class=ISymbol>lineWidthAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_location><div class=IEntry><a href="javascript:searchResults.Toggle('SR_location')" class=ISymbol>location</a><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.location" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.location" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_looseZoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.looseZoom" target=_parent class=ISymbol>looseZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesM.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesM.html
new file mode 100644
index 00000000..80a53cbf
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesM.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_marginBottom><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginBottom" target=_parent class=ISymbol>marginBottom</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginLeft><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginLeft" target=_parent class=ISymbol>marginLeft</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginRight><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginRight" target=_parent class=ISymbol>marginRight</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginTop><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginTop" target=_parent class=ISymbol>marginTop</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_mark><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mark')" class=ISymbol>mark</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.mark" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.mark" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_markerOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Series.markerOptions" target=_parent class=ISymbol>markerOptions</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_markerRenderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_markerRenderer')" class=ISymbol>markerRenderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.markerRenderer" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.markerRenderer" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.markerRenderer" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_markSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_markSize')" class=ISymbol>markSize</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.markSize" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.markSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_max><div class=IEntry><a href="javascript:searchResults.Toggle('SR_max')" class=ISymbol>max</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.max" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.max" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_min><div class=IEntry><a href="javascript:searchResults.Toggle('SR_min')" class=ISymbol>min</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.min" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.min" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_minorTicks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_minorTicks')" class=ISymbol>minorTicks</a><div class=ISubIndex><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.minorTicks" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.minorTicks" target=_parent class=IParent>$.jqplot.<wbr>LogAxisRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesN.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesN.html
new file mode 100644
index 00000000..c6018830
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesN.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_name><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.name" target=_parent class=ISymbol>name</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></div></div><div class=SRResult id=SR_needlePad><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needlePad" target=_parent class=ISymbol>needlePad</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_needleThickness><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needleThickness" target=_parent class=ISymbol>needleThickness</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_negativeColor><div class=IEntry><a href="../files/jqplot-core-js.html#Series.negativeColor" target=_parent class=ISymbol>negativeColor</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_neighborThreshold><div class=IEntry><a href="../files/jqplot-core-js.html#Series.neighborThreshold" target=_parent class=ISymbol>neighborThreshold</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_noDataIndicator><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.noDataIndicator" target=_parent class=ISymbol>noDataIndicator</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_numberColumns><div class=IEntry><a href="javascript:searchResults.Toggle('SR_numberColumns')" class=ISymbol>numberColumns</a><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberColumns" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></div></div><div class=SRResult id=SR_numberRows><div class=IEntry><a href="javascript:searchResults.Toggle('SR_numberRows')" class=ISymbol>numberRows</a><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberRows" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></div></div><div class=SRResult id=SR_numberTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.numberTicks" target=_parent class=ISymbol>numberTicks</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesO.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesO.html
new file mode 100644
index 00000000..e3e5f594
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesO.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_objects><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.objects" target=_parent class=ISymbol>objects</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></div></div><div class=SRResult id=SR_offset><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.offset" target=_parent class=ISymbol>offset</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_offsetBars><div class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#offsetBars" target=_parent class=ISymbol>offsetBars</a></div></div><div class=SRResult id=SR_openColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.openColor" target=_parent class=ISymbol>openColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesP.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesP.html
new file mode 100644
index 00000000..f1a4b167
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesP.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_pad><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.pad" target=_parent class=ISymbol>pad</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_padding><div class=IEntry><a href="javascript:searchResults.Toggle('SR_padding')" class=ISymbol>padding</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_padMax><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMax" target=_parent class=ISymbol>padMax</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_padMin><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMin" target=_parent class=ISymbol>padMin</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_pegNeedle><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.pegNeedle" target=_parent class=ISymbol>pegNeedle</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_placement><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.placement" target=_parent class=ISymbol>placement</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_position><div class=IEntry><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#position" target=_parent class=ISymbol>position</a></div></div><div class=SRResult id=SR_predraw><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.predraw" target=_parent class=ISymbol>predraw</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_prefix><div class=IEntry><a href="javascript:searchResults.Toggle('SR_prefix')" class=ISymbol>prefix</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.prefix" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.prefix" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_pt2px><div class=IEntry><a href="javascript:searchResults.Toggle('SR_pt2px')" class=ISymbol>pt2px</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.pt2px" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.pt2px" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesR.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesR.html
new file mode 100644
index 00000000..a462e099
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesR.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_renderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_renderer')" class=ISymbol>renderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.renderer" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.renderer" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.renderer" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.renderer" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.renderer" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_rendererOptions><div class=IEntry><a href="javascript:searchResults.Toggle('SR_rendererOptions')" class=ISymbol>rendererOptions</a><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.rendererOptions" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.rendererOptions" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.rendererOptions" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.rendererOptions" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.rendererOptions" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.rendererOptions" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_ringColor><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringColor" target=_parent class=ISymbol>ringColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_ringMargin><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.ringMargin" target=_parent class=ISymbol>ringMargin</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_ringWidth><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringWidth" target=_parent class=ISymbol>ringWidth</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_rowSpacing><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.rowSpacing" target=_parent class=ISymbol>rowSpacing</a>, <span class=IParent>Legend</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesS.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesS.html
new file mode 100644
index 00000000..712da7fb
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesS.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_scaleToHiddenSeries><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.scaleToHiddenSeries" target=_parent class=ISymbol>scaleToHiddenSeries</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_sectionMargin><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.sectionMargin" target=_parent class=ISymbol>sectionMargin</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></div></div><div class=SRResult id=SR_series><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.series" target=_parent class=ISymbol>series</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_seriesColors><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesColors" target=_parent class=ISymbol>seriesColors</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_seriesDefaults><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesDefaults" target=_parent class=ISymbol>seriesDefaults</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_seriesLabelIndex><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.seriesLabelIndex" target=_parent class=ISymbol>seriesLabelIndex</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_seriesToggle><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggle" target=_parent class=ISymbol>seriesToggle</a></div></div><div class=SRResult id=SR_seriesToggleReplot><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggleReplot" target=_parent class=ISymbol>seriesToggleReplot</a></div></div><div class=SRResult id=SR_shadow><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadow')" class=ISymbol>shadow</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadow" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadow" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadow" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadow" target=_parent class=IParent>Grid</a></div></div></div><div class=SRResult id=SR_shadowAlpha><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowAlpha')" class=ISymbol>shadowAlpha</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAlpha" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAlpha" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowAngle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowAngle')" class=ISymbol>shadowAngle</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowAngle" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAngle" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAngle" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAngle" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAngle" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowColor><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowColor" target=_parent class=ISymbol>shadowColor</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_shadowDepth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowDepth')" class=ISymbol>shadowDepth</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowDepth" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowDepth" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowOffset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowOffset')" class=ISymbol>shadowOffset</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowOffset" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowOffset" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowRenderer" target=_parent class=ISymbol>shadowRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></div></div><div class=SRResult id=SR_shadowWidth><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowWidth" target=_parent class=ISymbol>shadowWidth</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_shapeRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shapeRenderer" target=_parent class=ISymbol>shapeRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></div></div><div class=SRResult id=SR_show><div class=IEntry><a href="javascript:searchResults.Toggle('SR_show')" class=ISymbol>show</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.show" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.show" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.show" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.show" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.show" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.show" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Legend.show" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.show" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.show" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_showBorders><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.showBorders" target=_parent class=ISymbol>showBorders</a>, <span class=IParent>$.jqplot.<wbr>MekkoRenderer</span></div></div><div class=SRResult id=SR_showCursorLegend><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showCursorLegend" target=_parent class=ISymbol>showCursorLegend</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showDataLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showDataLabels')" class=ISymbol>showDataLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_showGridline><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showGridline')" class=ISymbol>showGridline</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showGridline" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showGridline" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_showHorizontalLine><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showHorizontalLine" target=_parent class=ISymbol>showHorizontalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showLabel><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showLabel')" class=ISymbol>showLabel</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Axis.showLabel" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.showLabel" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_showLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showLabels')" class=ISymbol>showLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.showLabels" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.showLabels" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_showLine><div class=IEntry><a href="../files/jqplot-core-js.html#Series.showLine" target=_parent class=ISymbol>showLine</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_showLines><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.showLines" target=_parent class=ISymbol>showLines</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_showMark><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showMark')" class=ISymbol>showMark</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showMark" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showMark" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_showMarker><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showMarker')" class=ISymbol>showMarker</a><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showMarker" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-core-js.html#Series.showMarker" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_showMinorTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.showMinorTicks" target=_parent class=ISymbol>showMinorTicks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_showSwatch><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.showSwatch" target=_parent class=ISymbol>showSwatch</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_showTickLabels><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTickLabels" target=_parent class=ISymbol>showTickLabels</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_showTickMarks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.showTickMarks" target=_parent class=ISymbol>showTickMarks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_showTicks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showTicks')" class=ISymbol>showTicks</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTicks" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.showTicks" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_showTooltip><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showTooltip')" class=ISymbol>showTooltip</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.showTooltip" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltip" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showTooltip" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_showTooltipDataPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipDataPosition" target=_parent class=ISymbol>showTooltipDataPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipGridPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipGridPosition" target=_parent class=ISymbol>showTooltipGridPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipOutsideZoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipOutsideZoom" target=_parent class=ISymbol>showTooltipOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipPrecision><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.showTooltipPrecision" target=_parent class=ISymbol>showTooltipPrecision</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></div></div><div class=SRResult id=SR_showTooltipUnitPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipUnitPosition" target=_parent class=ISymbol>showTooltipUnitPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showVerticalLine><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showVerticalLine" target=_parent class=ISymbol>showVerticalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_size><div class=IEntry><a href="javascript:searchResults.Toggle('SR_size')" class=ISymbol>size</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.size" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.size" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></div></div><div class=SRResult id=SR_sizeAdjust><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.sizeAdjust" target=_parent class=ISymbol>sizeAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_sliceMargin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_sliceMargin')" class=ISymbol>sliceMargin</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.sliceMargin" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.sliceMargin" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_smooth><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.smooth" target=_parent class=ISymbol>smooth</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_sortData><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.sortData" target=_parent class=ISymbol>sortData</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_sortMergedLabels><div class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.sortMergedLabels" target=_parent class=ISymbol>sortMergedLabels</a>, <span class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</span></div></div><div class=SRResult id=SR_stackedValue><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.stackedValue" target=_parent class=ISymbol>stackedValue</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_stackSeries><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.stackSeries" target=_parent class=ISymbol>stackSeries</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_start><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.start" target=_parent class=ISymbol>start</a>, <span class=IParent>Line</span></div></div><div class=SRResult id=SR_startAngle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_startAngle')" class=ISymbol>startAngle</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.startAngle" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.startAngle" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_stop><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.stop" target=_parent class=ISymbol>stop</a>, <span class=IParent>Line</span></div></div><div class=SRResult id=SR_strokeRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeRect" target=_parent class=ISymbol>strokeRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_strokeStyle><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeStyle" target=_parent class=ISymbol>strokeStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_style><div class=IEntry><a href="javascript:searchResults.Toggle('SR_style')" class=ISymbol>style</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.style" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.style" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></div></div><div class=SRResult id=SR_suffix><div class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.suffix" target=_parent class=ISymbol>suffix</a>, <span class=IParent>$.jqplot.<wbr>AxisTickRenderer</span></div></div><div class=SRResult id=SR_synchronizeHighlight><div class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#synchronizeHighlight" target=_parent class=ISymbol>synchronizeHighlight</a></div></div><div class=SRResult id=SR_syncTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.syncTicks" target=_parent class=ISymbol>syncTicks</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesT.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesT.html
new file mode 100644
index 00000000..bc107de4
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesT.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_text><div class=IEntry><a href="../files/jqplot-core-js.html#Title.text" target=_parent class=ISymbol>text</a>, <span class=IParent>Title</span></div></div><div class=SRResult id=SR_textAlign><div class=IEntry><a href="../files/jqplot-core-js.html#Title.textAlign" target=_parent class=ISymbol>textAlign</a>, <span class=IParent>Title</span></div></div><div class=SRResult id=SR_textColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_textColor')" class=ISymbol>textColor</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.textColor" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.textColor" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_themes><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.themes" target=_parent class=ISymbol>themes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_thickness><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.thickness" target=_parent class=ISymbol>thickness</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_tickColor><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickColor" target=_parent class=ISymbol>tickColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_tickInset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tickInset')" class=ISymbol>tickInset</a><div class=ISubIndex><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickInset" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.tickInset" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></div></div><div class=SRResult id=SR_tickInterval><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickInterval" target=_parent class=ISymbol>tickInterval</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_tickLength><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.tickLength" target=_parent class=ISymbol>tickLength</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_tickMode><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.tickMode" target=_parent class=ISymbol>tickMode</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_tickOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickOptions" target=_parent class=ISymbol>tickOptions</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_tickPadding><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickPadding" target=_parent class=ISymbol>tickPadding</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_tickRenderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tickRenderer')" class=ISymbol>tickRenderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.tickRenderer" target=_parent class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickRenderer" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickRenderer" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_ticks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ticks')" class=ISymbol>ticks</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ticks" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.ticks" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_tickSpacing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tickSpacing')" class=ISymbol>tickSpacing</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickSpacing" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickSpacing" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_title><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.title" target=_parent class=ISymbol>title</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_tooltipAxes><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipAxes" target=_parent class=ISymbol>tooltipAxes</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_tooltipAxisGroups><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipAxisGroups" target=_parent class=ISymbol>tooltipAxisGroups</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_tooltipFadeSpeed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipFadeSpeed')" class=ISymbol>tooltipFadeSpeed</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipFadeSpeed" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFadeSpeed" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_tooltipFormatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipFormatString')" class=ISymbol>tooltipFormatString</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipFormatString" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipFormatString" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFormatString" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_tooltipLocation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipLocation')" class=ISymbol>tooltipLocation</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipLocation" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipLocation" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipLocation" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_tooltipOffset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipOffset')" class=ISymbol>tooltipOffset</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipOffset" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipOffset" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipOffset" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_transposedData><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.transposedData" target=_parent class=ISymbol>transposedData</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_type><div class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.type" target=_parent class=ISymbol>type</a>, <span class=IParent>$.jqplot.<wbr>Trendline</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesU.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesU.html
new file mode 100644
index 00000000..df97c192
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesU.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_upBodyColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.upBodyColor" target=_parent class=ISymbol>upBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_useAxesFormatters><div class=IEntry><a href="javascript:searchResults.Toggle('SR_useAxesFormatters')" class=ISymbol>useAxesFormatters</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.useAxesFormatters" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.useAxesFormatters" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_useNegativeColors><div class=IEntry><a href="../files/jqplot-core-js.html#Series.useNegativeColors" target=_parent class=ISymbol>useNegativeColors</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_useSeriesColor><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.useSeriesColor" target=_parent class=ISymbol>useSeriesColor</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesV.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesV.html
new file mode 100644
index 00000000..ebd8349e
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesV.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_varyBarColor><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.varyBarColor" target=_parent class=ISymbol>varyBarColor</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_varyBlockColors><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.varyBlockColors" target=_parent class=ISymbol>varyBlockColors</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_varyBubbleColors><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.varyBubbleColors" target=_parent class=ISymbol>varyBubbleColors</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesW.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesW.html
new file mode 100644
index 00000000..ce589762
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesW.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_waterfall><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.waterfall" target=_parent class=ISymbol>waterfall</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_wickColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.wickColor" target=_parent class=ISymbol>wickColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_widthRatio><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.widthRatio" target=_parent class=ISymbol>widthRatio</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesX.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesX.html
new file mode 100644
index 00000000..443e98c4
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesX.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_xaxis><div class=IEntry><a href="javascript:searchResults.Toggle('SR_xaxis')" class=ISymbol>xaxis</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.xaxis" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-core-js.html#Series.xaxis" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_xmax><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.xmax" target=_parent class=ISymbol>xmax</a>, <span class=IParent>HorizontalLine</span></div></div><div class=SRResult id=SR_xmin><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.xmin" target=_parent class=ISymbol>xmin</a>, <span class=IParent>HorizontalLine</span></div></div><div class=SRResult id=SR_xoffset><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.xoffset" target=_parent class=ISymbol>xoffset</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_xpadding><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.xpadding" target=_parent class=ISymbol>xpadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesY.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesY.html
new file mode 100644
index 00000000..8f6ea7a6
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesY.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_y><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.y" target=_parent class=ISymbol>y</a>, <span class=IParent>HorizontalLine</span></div></div><div class=SRResult id=SR_yaxis><div class=IEntry><a href="javascript:searchResults.Toggle('SR_yaxis')" class=ISymbol>yaxis</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.yaxis" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-core-js.html#Series.yaxis" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_yoffset><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.yoffset" target=_parent class=ISymbol>yoffset</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_ypadding><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.ypadding" target=_parent class=ISymbol>ypadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_yvalues><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.yvalues" target=_parent class=ISymbol>yvalues</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesZ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesZ.html
new file mode 100644
index 00000000..9da6ccfc
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesZ.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_zoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.zoom" target=_parent class=ISymbol>zoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/styles/1.css b/wqflask/wqflask/static/packages/jqplot/docs/styles/1.css
new file mode 100644
index 00000000..17e9cbc3
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/styles/1.css
@@ -0,0 +1,767 @@
+/*
+ IMPORTANT: If you're editing this file in the output directory of one of
+ your projects, your changes will be overwritten the next time you run
+ Natural Docs. Instead, copy this file to your project directory, make your
+ changes, and you can use it with -s. Even better would be to make a CSS
+ file in your project directory with only your changes, which you can then
+ use with -s [original style] [your changes].
+
+ On the other hand, if you're editing this file in the Natural Docs styles
+ directory, the changes will automatically be applied to all your projects
+ that use this style the next time Natural Docs is run on them.
+
+ This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure
+ Natural Docs is licensed under the GPL
+*/
+
+body {
+ font: 10pt Verdana, Arial, sans-serif;
+ color: #000000;
+ margin: 0; padding: 0;
+ }
+
+.ContentPage,
+.IndexPage,
+.FramedMenuPage {
+ background-color: #E8E8E8;
+ }
+.FramedContentPage,
+.FramedIndexPage,
+.FramedSearchResultsPage,
+.PopupSearchResultsPage {
+ background-color: #FFFFFF;
+ }
+
+
+a:link,
+a:visited { color: #900000; text-decoration: none }
+a:hover { color: #900000; text-decoration: underline }
+a:active { color: #FF0000; text-decoration: underline }
+
+td {
+ vertical-align: top }
+
+img { border: 0; }
+
+
+/*
+ Comment out this line to use web-style paragraphs (blank line between
+ paragraphs, no indent) instead of print-style paragraphs (no blank line,
+ indented.)
+*/
+p {
+ text-indent: 5ex; margin: 0 }
+
+
+/* Opera doesn't break with just wbr, but will if you add this. */
+.Opera wbr:after {
+ content: "\00200B";
+ }
+
+
+/* Blockquotes are used as containers for things that may need to scroll. */
+blockquote {
+ padding: 0;
+ margin: 0;
+ overflow: auto;
+ }
+
+
+.Firefox1 blockquote {
+ padding-bottom: .5em;
+ }
+
+/* Turn off scrolling when printing. */
+@media print {
+ blockquote {
+ overflow: visible;
+ }
+ .IE blockquote {
+ width: auto;
+ }
+ }
+
+
+
+#Menu {
+ font-size: 9pt;
+ padding: 10px 0 0 0;
+ }
+.ContentPage #Menu,
+.IndexPage #Menu {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 31ex;
+ overflow: hidden;
+ }
+.ContentPage .Firefox #Menu,
+.IndexPage .Firefox #Menu {
+ width: 27ex;
+ }
+
+
+ .MTitle {
+ font-size: 16pt; font-weight: bold; font-variant: small-caps;
+ text-align: center;
+ padding: 5px 10px 15px 10px;
+ border-bottom: 1px dotted #000000;
+ margin-bottom: 15px }
+
+ .MSubTitle {
+ font-size: 9pt; font-weight: normal; font-variant: normal;
+ margin-top: 1ex; margin-bottom: 5px }
+
+
+ .MEntry a:link,
+ .MEntry a:hover,
+ .MEntry a:visited { color: #606060; margin-right: 0 }
+ .MEntry a:active { color: #A00000; margin-right: 0 }
+
+
+ .MGroup {
+ font-variant: small-caps; font-weight: bold;
+ margin: 1em 0 1em 10px;
+ }
+
+ .MGroupContent {
+ font-variant: normal; font-weight: normal }
+
+ .MGroup a:link,
+ .MGroup a:hover,
+ .MGroup a:visited { color: #545454; margin-right: 10px }
+ .MGroup a:active { color: #A00000; margin-right: 10px }
+
+
+ .MFile,
+ .MText,
+ .MLink,
+ .MIndex {
+ padding: 1px 17px 2px 10px;
+ margin: .25em 0 .25em 0;
+ }
+
+ .MText {
+ font-size: 8pt; font-style: italic }
+
+ .MLink {
+ font-style: italic }
+
+ #MSelected {
+ color: #000000; background-color: #FFFFFF;
+ /* Replace padding with border. */
+ padding: 0 10px 0 10px;
+ border-width: 1px 2px 2px 0; border-style: solid; border-color: #000000;
+ margin-right: 5px;
+ }
+
+ /* Close off the left side when its in a group. */
+ .MGroup #MSelected {
+ padding-left: 9px; border-left-width: 1px }
+
+ /* A treat for Mozilla users. Blatantly non-standard. Will be replaced with CSS 3 attributes when finalized/supported. */
+ .Firefox #MSelected {
+ -moz-border-radius-topright: 10px;
+ -moz-border-radius-bottomright: 10px }
+ .Firefox .MGroup #MSelected {
+ -moz-border-radius-topleft: 10px;
+ -moz-border-radius-bottomleft: 10px }
+
+
+ #MSearchPanel {
+ padding: 0px 6px;
+ margin: .25em 0;
+ }
+
+
+ #MSearchField {
+ font: italic 9pt Verdana, sans-serif;
+ color: #606060;
+ background-color: #E8E8E8;
+ border: none;
+ padding: 2px 4px;
+ width: 100%;
+ }
+ /* Only Opera gets it right. */
+ .Firefox #MSearchField,
+ .IE #MSearchField,
+ .Safari #MSearchField {
+ width: 94%;
+ }
+ .Opera9 #MSearchField,
+ .Konqueror #MSearchField {
+ width: 97%;
+ }
+ .FramedMenuPage .Firefox #MSearchField,
+ .FramedMenuPage .Safari #MSearchField,
+ .FramedMenuPage .Konqueror #MSearchField {
+ width: 98%;
+ }
+
+ /* Firefox doesn't do this right in frames without #MSearchPanel added on.
+ It's presence doesn't hurt anything other browsers. */
+ #MSearchPanel.MSearchPanelInactive:hover #MSearchField {
+ background-color: #FFFFFF;
+ border: 1px solid #C0C0C0;
+ padding: 1px 3px;
+ }
+ .MSearchPanelActive #MSearchField {
+ background-color: #FFFFFF;
+ border: 1px solid #C0C0C0;
+ font-style: normal;
+ padding: 1px 3px;
+ }
+
+ #MSearchType {
+ visibility: hidden;
+ font: 8pt Verdana, sans-serif;
+ width: 98%;
+ padding: 0;
+ border: 1px solid #C0C0C0;
+ }
+ .MSearchPanelActive #MSearchType,
+ /* As mentioned above, Firefox doesn't do this right in frames without #MSearchPanel added on. */
+ #MSearchPanel.MSearchPanelInactive:hover #MSearchType,
+ #MSearchType:focus {
+ visibility: visible;
+ color: #606060;
+ }
+ #MSearchType option#MSearchEverything {
+ font-weight: bold;
+ }
+
+ .Opera8 .MSearchPanelInactive:hover,
+ .Opera8 .MSearchPanelActive {
+ margin-left: -1px;
+ }
+
+
+ iframe#MSearchResults {
+ width: 60ex;
+ height: 15em;
+ }
+ #MSearchResultsWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #000000;
+ background-color: #E8E8E8;
+ }
+ #MSearchResultsWindowClose {
+ font-weight: bold;
+ font-size: 8pt;
+ display: block;
+ padding: 2px 5px;
+ }
+ #MSearchResultsWindowClose:link,
+ #MSearchResultsWindowClose:visited {
+ color: #000000;
+ text-decoration: none;
+ }
+ #MSearchResultsWindowClose:active,
+ #MSearchResultsWindowClose:hover {
+ color: #800000;
+ text-decoration: none;
+ background-color: #F4F4F4;
+ }
+
+
+
+
+#Content {
+ padding-bottom: 15px;
+ }
+
+.ContentPage #Content {
+ border-width: 0 0 1px 1px;
+ border-style: solid;
+ border-color: #000000;
+ background-color: #FFFFFF;
+ font-size: 9pt; /* To make 31ex match the menu's 31ex. */
+ margin-left: 31ex;
+ }
+.ContentPage .Firefox #Content {
+ margin-left: 27ex;
+ }
+
+
+
+ .CTopic {
+ font-size: 10pt;
+ margin-bottom: 3em;
+ }
+
+
+ .CTitle {
+ font-size: 12pt; font-weight: bold;
+ border-width: 0 0 1px 0; border-style: solid; border-color: #A0A0A0;
+ margin: 0 15px .5em 15px }
+
+ .CGroup .CTitle {
+ font-size: 16pt; font-variant: small-caps;
+ padding-left: 15px; padding-right: 15px;
+ border-width: 0 0 2px 0; border-color: #000000;
+ margin-left: 0; margin-right: 0 }
+
+ .CClass .CTitle,
+ .CInterface .CTitle,
+ .CDatabase .CTitle,
+ .CDatabaseTable .CTitle,
+ .CSection .CTitle {
+ font-size: 18pt;
+ color: #FFFFFF; background-color: #A0A0A0;
+ padding: 10px 15px 10px 15px;
+ border-width: 2px 0; border-color: #000000;
+ margin-left: 0; margin-right: 0 }
+
+ #MainTopic .CTitle {
+ font-size: 20pt;
+ color: #FFFFFF; background-color: #7070C0;
+ padding: 10px 15px 10px 15px;
+ border-width: 0 0 3px 0; border-color: #000000;
+ margin-left: 0; margin-right: 0 }
+
+ .CBody {
+ margin-left: 15px; margin-right: 15px }
+
+
+ .CToolTip {
+ position: absolute; visibility: hidden;
+ left: 0; top: 0;
+ background-color: #FFFFE0;
+ padding: 5px;
+ border-width: 1px 2px 2px 1px; border-style: solid; border-color: #000000;
+ font-size: 8pt;
+ }
+
+ .Opera .CToolTip {
+ max-width: 98%;
+ }
+
+ /* Scrollbars would be useless. */
+ .CToolTip blockquote {
+ overflow: hidden;
+ }
+ .IE6 .CToolTip blockquote {
+ overflow: visible;
+ }
+
+ .CHeading {
+ font-weight: bold; font-size: 10pt;
+ margin: 1.5em 0 .5em 0;
+ }
+
+ .CBody pre {
+ font: 10pt "Courier New", Courier, monospace;
+ margin: 1em 0;
+ }
+
+ .CBody ul {
+ /* I don't know why CBody's margin doesn't apply, but it's consistent across browsers so whatever.
+ Reapply it here as padding. */
+ padding-left: 15px; padding-right: 15px;
+ margin: .5em 5ex .5em 5ex;
+ }
+
+ .CDescriptionList {
+ margin: .5em 5ex 0 5ex }
+
+ .CDLEntry {
+ font: 10pt "Courier New", Courier, monospace; color: #808080;
+ padding-bottom: .25em;
+ white-space: nowrap }
+
+ .CDLDescription {
+ font-size: 10pt; /* For browsers that don't inherit correctly, like Opera 5. */
+ padding-bottom: .5em; padding-left: 5ex }
+
+
+ .CTopic img {
+ text-align: center;
+ display: block;
+ margin: 1em auto;
+ }
+ .CImageCaption {
+ font-variant: small-caps;
+ font-size: 8pt;
+ color: #808080;
+ text-align: center;
+ position: relative;
+ top: 1em;
+ }
+
+ .CImageLink {
+ color: #808080;
+ font-style: italic;
+ }
+ a.CImageLink:link,
+ a.CImageLink:visited,
+ a.CImageLink:hover { color: #808080 }
+
+
+
+
+
+.Prototype {
+ font: 10pt "Courier New", Courier, monospace;
+ padding: 5px 3ex;
+ border-width: 1px; border-style: solid;
+ margin: 0 5ex 1.5em 5ex;
+ }
+
+ .Prototype td {
+ font-size: 10pt;
+ }
+
+ .PDefaultValue,
+ .PDefaultValuePrefix,
+ .PTypePrefix {
+ color: #8F8F8F;
+ }
+ .PTypePrefix {
+ text-align: right;
+ }
+ .PAfterParameters {
+ vertical-align: bottom;
+ }
+
+ .IE .Prototype table {
+ padding: 0;
+ }
+
+ .CFunction .Prototype {
+ background-color: #F4F4F4; border-color: #D0D0D0 }
+ .CProperty .Prototype {
+ background-color: #F4F4FF; border-color: #C0C0E8 }
+ .CVariable .Prototype {
+ background-color: #FFFFF0; border-color: #E0E0A0 }
+
+ .CClass .Prototype {
+ border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0A0;
+ background-color: #F4F4F4;
+ }
+ .CInterface .Prototype {
+ border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0D0;
+ background-color: #F4F4FF;
+ }
+
+ .CDatabaseIndex .Prototype,
+ .CConstant .Prototype {
+ background-color: #D0D0D0; border-color: #000000 }
+ .CType .Prototype,
+ .CEnumeration .Prototype {
+ background-color: #FAF0F0; border-color: #E0B0B0;
+ }
+ .CDatabaseTrigger .Prototype,
+ .CEvent .Prototype,
+ .CDelegate .Prototype {
+ background-color: #F0FCF0; border-color: #B8E4B8 }
+
+ .CToolTip .Prototype {
+ margin: 0 0 .5em 0;
+ white-space: nowrap;
+ }
+
+
+
+
+
+.Summary {
+ margin: 1.5em 5ex 0 5ex }
+
+ .STitle {
+ font-size: 12pt; font-weight: bold;
+ margin-bottom: .5em }
+
+
+ .SBorder {
+ background-color: #FFFFF0;
+ padding: 15px;
+ border: 1px solid #C0C060 }
+
+ /* In a frame IE 6 will make them too long unless you set the width to 100%. Without frames it will be correct without a width
+ or slightly too long (but not enough to scroll) with a width. This arbitrary weirdness simply astounds me. IE 7 has the same
+ problem with frames, haven't tested it without. */
+ .FramedContentPage .IE .SBorder {
+ width: 100% }
+
+ /* A treat for Mozilla users. Blatantly non-standard. Will be replaced with CSS 3 attributes when finalized/supported. */
+ .Firefox .SBorder {
+ -moz-border-radius: 20px }
+
+
+ .STable {
+ font-size: 9pt; width: 100% }
+
+ .SEntry {
+ width: 30% }
+ .SDescription {
+ width: 70% }
+
+
+ .SMarked {
+ background-color: #F8F8D8 }
+
+ .SDescription { padding-left: 2ex }
+ .SIndent1 .SEntry { padding-left: 1.5ex } .SIndent1 .SDescription { padding-left: 3.5ex }
+ .SIndent2 .SEntry { padding-left: 3.0ex } .SIndent2 .SDescription { padding-left: 5.0ex }
+ .SIndent3 .SEntry { padding-left: 4.5ex } .SIndent3 .SDescription { padding-left: 6.5ex }
+ .SIndent4 .SEntry { padding-left: 6.0ex } .SIndent4 .SDescription { padding-left: 8.0ex }
+ .SIndent5 .SEntry { padding-left: 7.5ex } .SIndent5 .SDescription { padding-left: 9.5ex }
+
+ .SDescription a { color: #800000}
+ .SDescription a:active { color: #A00000 }
+
+ .SGroup td {
+ padding-top: .5em; padding-bottom: .25em }
+
+ .SGroup .SEntry {
+ font-weight: bold; font-variant: small-caps }
+
+ .SGroup .SEntry a { color: #800000 }
+ .SGroup .SEntry a:active { color: #F00000 }
+
+
+ .SMain td,
+ .SClass td,
+ .SDatabase td,
+ .SDatabaseTable td,
+ .SSection td {
+ font-size: 10pt;
+ padding-bottom: .25em }
+
+ .SClass td,
+ .SDatabase td,
+ .SDatabaseTable td,
+ .SSection td {
+ padding-top: 1em }
+
+ .SMain .SEntry,
+ .SClass .SEntry,
+ .SDatabase .SEntry,
+ .SDatabaseTable .SEntry,
+ .SSection .SEntry {
+ font-weight: bold;
+ }
+
+ .SMain .SEntry a,
+ .SClass .SEntry a,
+ .SDatabase .SEntry a,
+ .SDatabaseTable .SEntry a,
+ .SSection .SEntry a { color: #000000 }
+
+ .SMain .SEntry a:active,
+ .SClass .SEntry a:active,
+ .SDatabase .SEntry a:active,
+ .SDatabaseTable .SEntry a:active,
+ .SSection .SEntry a:active { color: #A00000 }
+
+
+
+
+
+.ClassHierarchy {
+ margin: 0 15px 1em 15px }
+
+ .CHEntry {
+ border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0A0;
+ margin-bottom: 3px;
+ padding: 2px 2ex;
+ font-size: 10pt;
+ background-color: #F4F4F4; color: #606060;
+ }
+
+ .Firefox .CHEntry {
+ -moz-border-radius: 4px;
+ }
+
+ .CHCurrent .CHEntry {
+ font-weight: bold;
+ border-color: #000000;
+ color: #000000;
+ }
+
+ .CHChildNote .CHEntry {
+ font-style: italic;
+ font-size: 8pt;
+ }
+
+ .CHIndent {
+ margin-left: 3ex;
+ }
+
+ .CHEntry a:link,
+ .CHEntry a:visited,
+ .CHEntry a:hover {
+ color: #606060;
+ }
+ .CHEntry a:active {
+ color: #800000;
+ }
+
+
+
+
+
+#Index {
+ background-color: #FFFFFF;
+ }
+
+/* As opposed to .PopupSearchResultsPage #Index */
+.IndexPage #Index,
+.FramedIndexPage #Index,
+.FramedSearchResultsPage #Index {
+ padding: 15px;
+ }
+
+.IndexPage #Index {
+ border-width: 0 0 1px 1px;
+ border-style: solid;
+ border-color: #000000;
+ font-size: 9pt; /* To make 27ex match the menu's 27ex. */
+ margin-left: 27ex;
+ }
+
+
+ .IPageTitle {
+ font-size: 20pt; font-weight: bold;
+ color: #FFFFFF; background-color: #7070C0;
+ padding: 10px 15px 10px 15px;
+ border-width: 0 0 3px 0; border-color: #000000; border-style: solid;
+ margin: -15px -15px 0 -15px }
+
+ .FramedSearchResultsPage .IPageTitle {
+ margin-bottom: 15px;
+ }
+
+ .INavigationBar {
+ font-size: 10pt;
+ text-align: center;
+ background-color: #FFFFF0;
+ padding: 5px;
+ border-bottom: solid 1px black;
+ margin: 0 -15px 15px -15px;
+ }
+
+ .INavigationBar a {
+ font-weight: bold }
+
+ .IHeading {
+ font-size: 16pt; font-weight: bold;
+ padding: 2.5em 0 .5em 0;
+ text-align: center;
+ width: 3.5ex;
+ }
+ #IFirstHeading {
+ padding-top: 0;
+ }
+
+ .IEntry {
+ font-size: 10pt;
+ padding-left: 1ex;
+ }
+ .PopupSearchResultsPage .IEntry {
+ font-size: 8pt;
+ padding: 1px 5px;
+ }
+ .PopupSearchResultsPage .Opera9 .IEntry,
+ .FramedSearchResultsPage .Opera9 .IEntry {
+ text-align: left;
+ }
+ .FramedSearchResultsPage .IEntry {
+ padding: 0;
+ }
+
+ .ISubIndex {
+ padding-left: 3ex; padding-bottom: .5em }
+ .PopupSearchResultsPage .ISubIndex {
+ display: none;
+ }
+
+ /* While it may cause some entries to look like links when they aren't, I found it's much easier to read the
+ index if everything's the same color. */
+ .ISymbol {
+ font-weight: bold; color: #900000 }
+
+ .IndexPage .ISymbolPrefix,
+ .FramedIndexPage .ISymbolPrefix {
+ font-size: 10pt;
+ text-align: right;
+ color: #C47C7C;
+ background-color: #F8F8F8;
+ border-right: 3px solid #E0E0E0;
+ border-left: 1px solid #E0E0E0;
+ padding: 0 1px 0 2px;
+ }
+ .PopupSearchResultsPage .ISymbolPrefix,
+ .FramedSearchResultsPage .ISymbolPrefix {
+ color: #900000;
+ }
+ .PopupSearchResultsPage .ISymbolPrefix {
+ font-size: 8pt;
+ }
+
+ .IndexPage #IFirstSymbolPrefix,
+ .FramedIndexPage #IFirstSymbolPrefix {
+ border-top: 1px solid #E0E0E0;
+ }
+ .IndexPage #ILastSymbolPrefix,
+ .FramedIndexPage #ILastSymbolPrefix {
+ border-bottom: 1px solid #E0E0E0;
+ }
+ .IndexPage #IOnlySymbolPrefix,
+ .FramedIndexPage #IOnlySymbolPrefix {
+ border-top: 1px solid #E0E0E0;
+ border-bottom: 1px solid #E0E0E0;
+ }
+
+ a.IParent,
+ a.IFile {
+ display: block;
+ }
+
+ .PopupSearchResultsPage .SRStatus {
+ padding: 2px 5px;
+ font-size: 8pt;
+ font-style: italic;
+ }
+ .FramedSearchResultsPage .SRStatus {
+ font-size: 10pt;
+ font-style: italic;
+ }
+
+ .SRResult {
+ display: none;
+ }
+
+
+
+#Footer {
+ font-size: 8pt;
+ color: #989898;
+ text-align: right;
+ }
+
+#Footer p {
+ text-indent: 0;
+ margin-bottom: .5em;
+ }
+
+.ContentPage #Footer,
+.IndexPage #Footer {
+ text-align: right;
+ margin: 2px;
+ }
+
+.FramedMenuPage #Footer {
+ text-align: center;
+ margin: 5em 10px 10px 10px;
+ padding-top: 1em;
+ border-top: 1px solid #C8C8C8;
+ }
+
+ #Footer a:link,
+ #Footer a:hover,
+ #Footer a:visited { color: #989898 }
+ #Footer a:active { color: #A00000 }
+
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/styles/2.css b/wqflask/wqflask/static/packages/jqplot/docs/styles/2.css
new file mode 100644
index 00000000..12117d4e
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/styles/2.css
@@ -0,0 +1,174 @@
+html, body {
+ height: 100%;
+}
+
+/*
+div.Firefox {
+ height: 100%;
+}
+*/
+
+.MTitle {
+ font-variant: normal;
+}
+
+.MLink {
+ font-style: normal;
+}
+
+.CBody {
+margin-left: 30px;
+margin-right: 30px;
+}
+
+p {
+ text-indent: 0;
+ margin-bottom: 1em;
+ }
+
+.CBody p {
+/*
+ padding-top: 4px;
+ padding-bottom: 4px;
+*/
+}
+
+#Menu {
+ margin-top: 94px;
+ border: 0px;
+}
+
+body.ContentPage {
+ background-image: url('../../images/background.jpg');
+ background-color: #818181;
+ background-position: left top;
+ background-repeat: repeat-x;
+}
+
+.MGroup a:link,
+.MGroup a:hover,
+.MGroup a:visited { color: #bfbfbf; margin-right: 10px }
+.MGroup a:active { color: #f58f07; margin-right: 10px }
+
+
+.MEntry a:link,
+.MEntry a:hover,
+.MEntry a:visited { color: #bfbfbf; margin-right: 0 }
+.MEntry a:active { color: #f58f07; margin-right: 0 }
+
+#Footer {
+ color: #bfbfbf;
+}
+
+#Footer a:link, #Footer a:hover, #Footer a:visited {
+ color: #5c93f0;
+}
+
+#MainTopic div.CTitle.logo {
+ color: #292929;
+ font-size: 0px;
+ font-style: normal;
+ font-weight: normal;
+ border-width: 0px;
+ padding: 0px;
+ margin: 0px;
+ background-position: left top;
+ background-repeat: no-repeat;
+ background-image: url('../../images/logo.jpg');
+ background-color: #292929;
+ height: 94px;
+ position: relative;
+
+}
+
+#MainTopic h1.CTitle a {
+ display: none;
+}
+
+
+#MainTopic div.CBody p:first-child {
+ margin-top: 24px;
+}
+
+.ContentPage #Content {
+ border: 0px;
+/* height: 100%; */
+}
+
+#IPageLogo {
+ width: 780px;
+ color: #292929;
+ font-style: normal;
+ font-weight: normal;
+ border-width: 0px;
+ padding: 0px;
+ margin: 0px;
+ background-position: left top;
+ background-repeat: no-repeat;
+ background-image: url('../../images/logo.jpg');
+ background-color: #292929;
+ height: 94px;
+ position: relative;
+ left: 27ex;
+}
+
+#Menu, #IPageLogo {
+ font-size: 9pt;
+}
+
+body.IndexPage {
+ background-image: url('../../images/background.jpg');
+}
+
+/*#IPageLogo:hover {
+ cursor: pointer;
+}*/
+
+.IPageTitle {
+ background-color:#FFFFF0;
+ color: #333333;
+ border: 0px;
+}
+
+
+
+div.nav {
+ position:relative;
+ top: 70px;
+ text-align: right;
+}
+
+a.nav span {
+ font-size: 11px;
+ position: relative;
+ bottom: 2px;
+}
+
+a.nav:visited {
+ text-decoration: none;
+ border: 0px;
+ color: #aaaaaa;
+}
+
+a.nav, a.nav:link {
+ border: 0px;
+ text-decoration: none;
+ font-family: Tahoma, "Helvetica Neue", "Trebuchet MS", Verdana, Arial, sans-serif;
+ font-size: 16px;
+ color: #aaaaaa;
+ margin-right: 11px;
+}
+
+a.nav:hover {
+ text-decoration: none;
+ border: 0px;
+ color: #E0771C;
+}
+
+a.nav:active {
+ text-decoration: none;
+ border: 0px;
+ color: #E0771C;
+}
+
+
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/styles/main.css b/wqflask/wqflask/static/packages/jqplot/docs/styles/main.css
new file mode 100644
index 00000000..a672a949
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/docs/styles/main.css
@@ -0,0 +1,2 @@
+@import URL("1.css");
+@import URL("2.css");
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/KCPsample4.csv b/wqflask/wqflask/static/packages/jqplot/examples/KCPsample4.csv
new file mode 100644
index 00000000..453517b0
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/KCPsample4.csv
@@ -0,0 +1,25 @@
+Product or service,v01,v02,v03,v04,v05,v06,v07,v08,v09,v10,v11,v12,v13,v14,v15,v16,v17,v18,v19,v20
+Rice,15.8442,13.0993,11.2898,10.7892,10.252,9.0165,8.5287,7.7442,6.9867,6.5213,5.9473,5.4766,4.9214,4.6398,3.8935,3.5228,3.0128,2.4847,2.0357,1.0672
+Bread and other cereals,1.7703,2.2535,2.2753,2.7927,2.2509,2.4341,2.5518,2.5547,2.4204,2.4186,2.4261,2.2927,2.4386,2.2295,2.2203,1.915,1.8791,1.7941,1.6567,0.9296
+Meat,8.3728,8.1221,8.3989,7.9758,8.8246,8.2377,8.432,7.8466,7.5343,7.1171,6.9801,6.9349,5.8307,5.7089,4.927,4.2237,3.6872,3.1429,2.581,1.3766
+Fish and seafood,9.1249,8.7326,7.6122,7.8577,7.1625,6.8527,6.5158,6.1715,6.1298,5.8702,5.3456,4.9906,4.4424,4.3022,3.5298,3.405,2.9977,2.4159,2.0832,1.1499
+Fruits and vegetables,8.0508,7.7875,7.6534,7.4448,7.3702,7.4188,7.3882,7.1647,6.9617,6.6576,6.6077,6.4823,5.9117,5.8149,5.505,5.5355,5.0907,4.569,4.3049,2.6325
+Other food products,10.4408,9.8278,9.9293,9.5176,9.6658,9.2359,9.2842,8.6497,8.7656,8.2962,8.155,7.7294,7.3674,6.9888,6.2995,5.7314,5.2703,4.6947,3.9614,2.2509
+Catering services,4.1883,4.7514,5.3198,5.8819,5.1732,5.5764,6.1713,6.7915,6.8511,7.2681,7.1461,8.109,9.2649,9.5322,11.2138,12.8299,12.9621,13.8936,13.7828,10.0525
+Non-alcoholic beverages,0.6641,0.8454,0.9018,1.0461,1.0113,1.235,1.279,1.3049,1.5024,1.4471,1.5358,1.5796,1.6471,1.6443,1.6562,1.6763,1.6097,1.5039,1.3752,0.864
+Alcoholic beverages,0.5221,0.6997,0.8513,0.8849,0.9168,0.9099,0.8339,0.9921,1.1169,1.1764,1.1936,1.1415,1.1181,1.2889,1.1378,1.023,1.1283,1.0417,0.9839,0.587
+Tobacco and narcotics,1.0969,1.188,1.0713,1.2803,1.1787,1.148,1.3229,1.1726,1.3764,1.3887,1.4011,1.3034,1.4368,1.5017,1.4899,1.4123,1.3168,1.1407,0.8458,0.38
+Clothing and footwear,2.275,2.5511,3.1025,2.9834,3.2857,3.7625,3.1928,3.7071,4.0364,3.629,3.9258,3.2208,3.7113,3.3166,3.4775,3.429,3.6121,3.4569,3.8416,4.1323
+Rentals (actual or imputed) and maintenance and repair of the dwelling,16.0654,15.719,16.3773,16.0175,15.8853,16.132,16.1309,16.3491,15.8512,16.4743,16.2862,15.7327,16.2793,16.6329,17.4903,17.4425,17.3413,18.3527,18.5029,15.2763
+Water supply and miscellaneous services related to the dwelling,1.1145,1.176,1.1183,1.0411,1.0058,1.0796,1.0321,1.0714,1.1117,1.0278,1.136,1.1397,1.1556,1.2206,1.2871,1.2361,1.2111,1.2312,1.1545,0.7881
+Electricity gas and other fuels,4.5928,4.7558,4.8855,4.4684,4.6677,4.6038,4.7789,4.6098,4.4171,4.5078,4.4137,4.4645,4.2693,4.2836,4.1709,4.159,3.8423,3.9957,3.6816,2.5785
+Furnishing household equipment and routine household maintenance,2.1027,2.1576,2.0721,2.0623,2.3498,2.2573,2.2866,2.3766,2.2488,2.3665,2.3445,2.2474,2.3345,2.2479,2.158,2.355,2.0744,2.2269,3.0474,3.8925
+Health,1.2709,1.6007,1.3996,1.612,1.4649,1.5875,1.7056,1.7315,1.7378,2.0401,2.3265,2.1096,2.0513,2.1548,2.0634,2.2206,1.8427,2.4817,2.3066,2.1685
+Transport,4.6414,5.6167,5.9571,6.5372,7.0242,7.6332,7.9823,8.3906,9.112,9.6872,10.2014,11.0074,11.375,11.6753,12.0489,12.0692,13.2962,13.2183,14.6559,32.0912
+Communication,0.2334,0.3642,0.5267,0.5911,0.8888,1.1633,1.0997,1.76,1.9811,2.1708,2.931,3.2634,3.6254,4.107,4.6944,5.0941,5.9984,6.2419,6.6059,5.8353
+Recreation and culture,2.2553,2.8903,2.9564,3.2839,3.4822,3.255,3.1666,3.4245,3.4066,3.8536,3.6333,4.0331,4.4847,4.3552,4.2768,4.1439,4.7196,4.6585,4.4286,3.921
+Education,0.3437,0.3282,0.4805,0.3881,0.4796,0.9766,0.6589,0.6443,1.0423,0.7941,1.064,1.5504,1.3977,1.5226,1.8344,1.9186,2.3022,2.8188,2.8424,2.7792
+Personal care,3.4466,3.5641,3.5711,3.4219,3.2835,3.3569,3.3416,3.4544,3.3675,3.2806,3.118,3.1881,3.2252,3.0588,3.0051,2.9868,3.0361,2.8972,2.9611,2.2867
+Other miscellaneous goods and services,1.5831,1.9691,2.2498,2.122,2.3766,2.1273,2.3165,2.0884,2.0421,2.0067,1.8809,2.0027,1.7115,1.7734,1.6204,1.6702,1.769,1.7391,2.3607,2.9604
+Food and non-alcoholic beverages,58.4561,55.4196,53.3806,53.3059,51.7105,50.007,50.1509,48.2276,47.1521,45.5962,44.1436,43.5952,41.8242,40.8606,39.2451,38.8396,36.5095,34.4988,31.7809,20.3231
+Non food,41.5439,44.5804,46.6194,46.6941,48.2895,49.993,49.8491,51.7724,52.8479,54.4038,55.8564,56.4048,58.1758,59.1394,60.7549,61.1604,63.4905,65.5012,68.2191,79.6769
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/ages.json b/wqflask/wqflask/static/packages/jqplot/examples/ages.json
new file mode 100644
index 00000000..86916187
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/ages.json
@@ -0,0 +1,5 @@
+[[1043353182,539695335,503657847,28.24,27.51,29.01,51.78],
+[0.0085318435343400800,0.0088774027062416400,0.0094714560875224100,0.0101640893891056000,0.0108249758696292000,0.0113773174183149000,0.0117954271696904000,0.0120868766491156000,0.0122726357410028000,0.0123620512208843000,0.0124092312631522000,0.0123929933989534000,0.0123170841477326000,0.0121788940682660000,0.0119848553256476000,0.0117367932349178000,0.0114334768233470000,0.0110840887113746000,0.0107005336950161000,0.0102889073661635000,0.0098746874267631800,0.0094727992165526500,0.0091066817836288100,0.0087853078056091400,0.0085176451289595700,0.0082955898249666400,0.0081021034227657000,0.0079410857437656400,0.0078129432771183200,0.0077041517746791700,0.0076076629996558600,0.0075063773837400400,0.0074212932416191700,0.0073577960797626100,0.0073199937766648000,0.0072872222696609900,0.0072249036551971000,0.0071436496521446000,0.0070535868312601700,0.0069442503777637000,0.0068032069975035000,0.0066093294501292200,0.0063936409488174700,0.0061768176372133200,0.0059737878831400300,0.0057724507581444500,0.0055456647375558400,0.0053139201135624000,0.0050952395722700100,0.0048873227886988200,0.0046839194356973000,0.0044709211871979300,0.0042683374557587400,0.0040886232834079100,0.0039394433696905200,0.0038097165950705600,0.0036797119436340500,0.0035595490798891500,0.0034559622921317600,0.0033586853733251200,0.0032515219944251700,0.0031141174480235800,0.0029601056879342400,0.0027997057390388600,0.0026388958299152400,0.0024706340765107900,0.0022829305753990900,0.0020900571013307600,0.0019037152224417700,0.0017251049256371200,0.0015499961243315000,0.0013709889555399900,0.0011982773790103000,0.0010401790931594200,0.0009015220565900700,0.0007812832602556460,0.0006749752626942340,0.0005833580512023270,0.0005061657847658260,0.0004399544894590220,0.0003808034210932470,0.0003273788998735520,0.0002794993115460400,0.0002369793671257210,0.0001995479850687680,0.0001668101805315270,0.0001383186716039340,0.0001138075253115040,0.0000929924552954457,0.0000755223736670678,0.0000610047525059652,0.0000490638302928227,0.0000396489252832302,0.0000330891826825378,0.0000281195284929135,0.0001070412478036410],
+[0.0071192629623232800,0.0072839317935624000,0.0075693293189514500,0.0079091875498352200,0.0082360857829773300,0.0084979038169712600,0.0086893986451354100,0.0088353986277422900,0.0089633895658643000,0.0090878796761182500,0.0092337667384807200,0.0093792123312149900,0.0095192745279032600,0.0096463104169553400,0.0097588790000607600,0.0098544841215461300,0.0099282199747865200,0.0099763812248601700,0.0099957597226035700,0.0099801585489242500,0.0099375446097938400,0.0098709094654945100,0.0097926096630396900,0.0097014318757340600,0.0095968423362564000,0.0094699215837397400,0.0093120985109391200,0.0091337644254482100,0.0089445678055607600,0.0087423328014590000,0.0085321350430430500,0.0083104164267343500,0.0081040369311665900,0.0079207770770160300,0.0077675098774536000,0.0076284130950824500,0.0074765938644635800,0.0073237591351693500,0.0071772210497332700,0.0070244435483804400,0.0068550745015274400,0.0066526057090785200,0.0064404461001358000,0.0062305720357510500,0.0060342707683446500,0.0058408705961082800,0.0056264339860478000,0.0054065565344313600,0.0051920462742280000,0.0049765895152515200,0.0047558832991186200,0.0045207003388048400,0.0042899070487080500,0.0040745089551306800,0.0038817655555785800,0.0037053224400247200,0.0035332134254902200,0.0033727187145046400,0.0032284905944481100,0.0030937679725170100,0.0029582187048090100,0.0028081834596732200,0.0026513461722362800,0.0024926069125082600,0.0023353006048059200,0.0021744630786167700,0.0020021420693961100,0.0018298895084829500,0.0016671380010344600,0.0015153637133401800,0.0013712248188900700,0.0012284616818527500,0.0010934572254154500,0.0009707133813897040,0.0008622603131043950,0.0007661899219731710,0.0006786114871838230,0.0006005435486257860,0.0005322956370150040,0.0004715229254612440,0.0004158721219136000,0.0003645948643149670,0.0003176904909297340,0.0002751152300590630,0.0002367021156783720,0.0002021700726755280,0.0001712214234345020,0.0001437557719387760,0.0001197138111336940,0.0000989925882290494,0.0000814263200020563,0.0000667991474109870,0.0000549164545704749,0.0000455518367647343,0.0000384480445034309,0.0001437755914949950],
+[1.284165231,1.3059697282,1.3408259576,1.3770498469,1.4083776842,1.4346340126,1.4545779876,1.4658887137,1.4671638972,1.457608962,1.4400548643,1.4158684686,1.3864911961,1.3528812542,1.3159697978,1.27622903,1.2340137083,1.1905291022,1.1471037258,1.1047013276,1.0647737249,1.0283340659,0.9964942039,0.9703629438,0.9510519527,0.9386721807,0.932316307,0.9316292996,0.9359838821,0.9443012277,0.9554470086,0.9678781103,0.9812761433,0.9953894103,1.0098153246,1.0236249732,1.035479081,1.0451994053,1.0530930686,1.0593183708,1.0634438538,1.0645809137,1.0637641578,1.0623066923,1.0608111193,1.0589993944,1.0561690641,1.0531914677,1.0515722425,1.052330754,1.0553372965,1.0597522653,1.0661637808,1.0752634417,1.0874733411,1.1017415355,1.1159815378,1.1309096828,1.1470504754,1.1633078085,1.1777943775,1.1882903501,1.1963378464,1.2035708256,1.2108560457,1.2175013424,1.2218302494,1.2239011525,1.223611334,1.2198647763,1.2112533925,1.1958739376,1.1742717733,1.1482333683,1.1203430352,1.0926602484,1.0658097999,1.040887396,1.0189501507,0.9998112064,0.9811922123,0.9621730704,0.9427349027,0.9230154312,0.903354613,0.8841353287,0.8656369091,0.8483181293,0.8323701879,0.8174967062,0.8028084248,0.7870522949,0.7736454722,0.7783827557,0.7836945697,0.7977724963],
+[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,"95+", ""]] \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/ajax-loader.gif b/wqflask/wqflask/static/packages/jqplot/examples/ajax-loader.gif
new file mode 100644
index 00000000..3288d103
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/ajax-loader.gif
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/area.html b/wqflask/wqflask/static/packages/jqplot/examples/area.html
new file mode 100644
index 00000000..2aa52884
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/area.html
@@ -0,0 +1,229 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Filled (Area) Charts</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="zooming.html">Previous</a> <a href="./">Examples</a> <a href="axisLabelTests.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+<style type="text/css">
+.jqplot-target {
+ margin: 30px;
+}
+
+#customTooltipDiv {
+ position: absolute;
+ display: none;
+ color: #333333;
+ font-size: 0.8em;
+ border: 1px solid #666666;
+ background-color: rgba(160, 160, 160, 0.2);
+ padding: 2px;
+}
+</style>
+
+<p>Area charts support highlighting and mouse events by default. The options and handlers and callbacks are essentially the same as with bar, pie, donut and funnel charts. One notable exception for area charts is that no data point index will be provided to the callback and the entire data set for the highlighted area will be returned. This is because the area is not associated with one particular data point, but with the entire data set of the series.</p>
+
+<div><span>Moused Over: </span><span id="info1b">Nothing</span></div>
+
+<div id="chart1b" style="width:400px;height:260px;"></div>
+
+<p>For the chart below, mouseover has been disabled and click handling is enabled by setting "highlightMouseDown: true". For "fillToZero" area charts that have both negative and positive values as shown below, clicking in either the positive of negative regions will generate the same result.</p>
+
+<div><span>You Clicked: </span><span id="info1c">Nothing yet</span></div>
+
+<div id="chart1c" style="width:400px;height:260px;"></div>
+
+<div id="chart2" style="width:600px;height:260px;"></div>
+
+<div id="customTooltipDiv">I'm a tooltip.</div>
+
+
+
+<script class="code" language="javascript" type="text/javascript">
+$(document).ready(function(){
+
+ var l2 = [11, 9, 5, 12, 14];
+ var l3 = [4, 8, 5, 3, 6];
+ var l4 = [12, 6, 13, 11, 2];
+
+
+ var plot1b = $.jqplot('chart1b',[l2, l3, l4],{
+ stackSeries: true,
+ showMarker: false,
+ seriesDefaults: {
+ fill: true
+ },
+ axes: {
+ xaxis: {
+ renderer: $.jqplot.CategoryAxisRenderer,
+ ticks: ["Mon", "Tue", "Wed", "Thr", "Fri"]
+ }
+ }
+ });
+
+ $('#chart1b').bind('jqplotDataHighlight',
+ function (ev, seriesIndex, pointIndex, data) {
+ $('#info1b').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
+ }
+ );
+
+ $('#chart1b').bind('jqplotDataUnhighlight',
+ function (ev) {
+ $('#info1b').html('Nothing');
+ }
+ );
+});
+</script>
+
+
+<script class="code" language="javascript" type="text/javascript">
+$(document).ready(function(){
+ var l5 = [4, -3, 3, 6, 2, -2];
+ var plot1c = $.jqplot('chart1c',[l5],{
+ stackSeries: true,
+ showMarker: false,
+ seriesDefaults: {
+ fill: true,
+ fillToZero: true,
+ rendererOptions: {
+ highlightMouseDown: true
+ }
+ }
+ });
+
+ $('#chart1c').bind('jqplotDataClick',
+ function (ev, seriesIndex, pointIndex, data) {
+ $('#info1c').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
+ }
+ );
+});
+</script>
+
+
+<script class="code" language="javascript" type="text/javascript">
+$(document).ready(function(){
+ var l6 = [11, 9, 5, 12, 14, 8, 7, 9, 6, 11, 9, 3, 4];
+ var l7 = [4, 8, 5, 3, 6, 5, 3, 2, 6, 7, 4, 3, 2];
+ var l8 = [12, 6, 13, 11, 2, 3, 4, 2, 1, 5, 7, 4, 8];
+
+ var ticks = [[1,'Dec 10'], [2,'Jan 11'], [3,'Feb 11'], [4,'Mar 11'], [5,'Apr 11'], [6,'May 11'], [7,'Jun 11'], [8,'Jul 11'], [9,'Aug 11'], [10,'Sep 11'], [11,'Oct 11'], [12,'Nov 11'], [13,'Dec 11']];
+
+
+ plot2 = $.jqplot('chart2',[l6, l7, l8],{
+ stackSeries: true,
+ showMarker: false,
+ highlighter: {
+ show: true,
+ showTooltip: false
+ },
+ seriesDefaults: {
+ fill: true,
+ },
+ series: [
+ {label: 'Beans'},
+ {label: 'Oranges'},
+ {label: 'Crackers'}
+ ],
+ legend: {
+ show: true,
+ placement: 'outsideGrid'
+ },
+ grid: {
+ drawBorder: false,
+ shadow: false
+ },
+ axes: {
+ xaxis: {
+ ticks: ticks,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ angle: -90
+ },
+ drawMajorGridlines: false
+ }
+ }
+ });
+
+ // capture the highlighters highlight event and show a custom tooltip.
+ $('#chart2').bind('jqplotHighlighterHighlight',
+ function (ev, seriesIndex, pointIndex, data, plot) {
+ // create some content for the tooltip. Here we want the label of the tick,
+ // which is not supplied to the highlighters standard tooltip.
+ var content = plot.series[seriesIndex].label + ', ' + plot.series[seriesIndex]._xaxis.ticks[pointIndex][1] + ', ' + data[1];
+ // get a handle on our custom tooltip element, which was previously created
+ // and styled. Be sure it is initiallly hidden!
+ var elem = $('#customTooltipDiv');
+ elem.html(content);
+ // Figure out where to position the tooltip.
+ var h = elem.outerHeight();
+ var w = elem.outerWidth();
+ var left = ev.pageX - w - 10;
+ var top = ev.pageY - h - 10;
+ // now stop any currently running animation, position the tooltip, and fade in.
+ elem.stop(true, true).css({left:left, top:top}).fadeIn(200);
+ }
+ );
+
+ // Hide the tooltip when unhighliting.
+ $('#chart2').bind('jqplotHighlighterUnhighlight',
+ function (ev) {
+ $('#customTooltipDiv').fadeOut(300);
+ }
+ );
+});
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.highlighter.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/axisLabelTests.html b/wqflask/wqflask/static/packages/jqplot/examples/axisLabelTests.html
new file mode 100644
index 00000000..88d3fbb4
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/axisLabelTests.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Line Charts and Options</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="area.html">Previous</a> <a href="./">Examples</a> <a href="axisLabelsRotatedText.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+<p>jqPlot support axis labels through the "label" option of each axis. The default label renderer creates labels in div tags, which allows full css control over every label. Labels are assigned css classes like "jqplot-axis_name-label" where "axis_name" will be xaxis, yaxis, etc.</p>
+
+<div id="chart1" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+<p>By including the "jqplot.canvasTextRenderer.min.js" and "jqplot.canvasAxisLabelRenderer.min.js" plugins, you can render label text directly onto canvas elements. This allows text to be rotated and yaxes will have their labels rotated 90 degrees by default. By default the labels will be rendered using the Hershey font metrics and not stroked as text. Most recent browsers (include IE 9) support native text rendering in canvas elements.</p>
+
+<div id="chart2" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+<p>If a visitors is using a browser suppporting native canvas fonts, the plot belowsupported browser, they will see the labels in the plot below rendered as 12 pt Georgia (or their system serif font if Georgia is unavailable). If they are on an unsupported browser, they will see the default Hershey font.</p>
+
+<div id="chart3" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var cosPoints = [];
+ for (var i=0; i<2*Math.PI; i+=0.1){
+ cosPoints.push([i, Math.cos(i)]);
+ }
+ var plot1 = $.jqplot('chart1', [cosPoints], {
+ series:[{showMarker:false}],
+ axes:{
+ xaxis:{
+ label:'Angle (radians)'
+ },
+ yaxis:{
+ label:'Cosine'
+ }
+ }
+ });
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var cosPoints = [];
+ for (var i=0; i<2*Math.PI; i+=0.1){
+ cosPoints.push([i, Math.cos(i)]);
+ }
+ var plot2 = $.jqplot('chart2', [cosPoints], {
+ series:[{showMarker:false}],
+ axes:{
+ xaxis:{
+ label:'Angle (radians)',
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer
+ },
+ yaxis:{
+ label:'Cosine',
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer
+ }
+ }
+ });
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var cosPoints = [];
+ for (var i=0; i<2*Math.PI; i+=0.1){
+ cosPoints.push([i, Math.cos(i)]);
+ }
+ var plot3 = $.jqplot('chart3', [cosPoints], {
+ series:[{showMarker:false}],
+ axes:{
+ xaxis:{
+ label:'Angle (radians)',
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ labelOptions: {
+ fontFamily: 'Georgia, Serif',
+ fontSize: '12pt'
+ }
+ },
+ yaxis:{
+ label:'Cosine',
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ labelOptions: {
+ fontFamily: 'Georgia, Serif',
+ fontSize: '12pt'
+ }
+ }
+ }
+ });
+});
+</script>
+
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/axisLabelsRotatedText.html b/wqflask/wqflask/static/packages/jqplot/examples/axisLabelsRotatedText.html
new file mode 100644
index 00000000..5f886ecc
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/axisLabelsRotatedText.html
@@ -0,0 +1,229 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Axis Labels and Rotated Text</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="axisLabelTests.html">Previous</a> <a href="./">Examples</a> <a href="axisScalingForceTickAt.html">Next</a></div>
+
+ <div class="example-plot" id="chart1"></div><div class="example-plot" id="chart2"></div><div class="example-plot" id="chart3"></div><div class="example-plot" id="chart4"></div>
+<!-- Example scripts go here -->
+
+ <style type="text/css">
+ .jqplot-point-label {white-space: nowrap;}
+/* .jqplot-yaxis-label {font-size: 14pt;}*/
+/* .jqplot-yaxis-tick {font-size: 7pt;}*/
+
+ div.jqplot-target {
+ height: 400px;
+ width: 750px;
+ margin: 70px;
+ }
+ </style>
+
+
+ <script class="code" type="text/javascript" language="javascript">
+$(document).ready(function(){
+ var line1 = [6.5, 9.2, 14, 19.65, 26.4, 35, 51];
+
+ var plot1 = $.jqplot('chart1', [line1], {
+ legend: {show:false},
+ axes:{
+ xaxis:{
+ tickOptions:{
+ angle: -30
+ },
+ tickRenderer:$.jqplot.CanvasAxisTickRenderer,
+ label:'Core Motor Amperage',
+ labelOptions:{
+ fontFamily:'Helvetica',
+ fontSize: '14pt'
+ },
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer
+ },
+ yaxis:{
+ renderer:$.jqplot.LogAxisRenderer,
+ tickOptions:{
+ labelPosition: 'middle',
+ angle:-30
+ },
+ tickRenderer:$.jqplot.CanvasAxisTickRenderer,
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ labelOptions:{
+ fontFamily:'Helvetica',
+ fontSize: '14pt'
+ },
+ label:'Core Motor Voltage'
+ }
+ }
+ });
+
+});
+</script>
+<script class="code" type="text/javascript" language="javascript">
+$(document).ready(function(){
+ var line2 = [['1/1/2008', 42], ['2/14/2008', 56], ['3/7/2008', 39], ['4/22/2008', 81]];
+
+ var plot2 = $.jqplot('chart2', [line2], {
+ axes: {
+ xaxis: {
+ renderer: $.jqplot.DateAxisRenderer,
+ label: 'Incliment Occurrance',
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ // labelPosition: 'middle',
+ angle: 15
+ }
+
+ },
+ yaxis: {
+ label: 'Incliment Factor',
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer
+ }
+ }
+ });
+
+});
+</script>
+<script class="code" type="text/javascript" language="javascript">
+$(document).ready(function(){
+ var line3 = [['Cup Holder Pinion Bob', 7], ['Generic Fog Lamp Marketing Gimmick', 9],
+ ['HDTV Receiver', 15], ['8 Track Control Module', 12],
+ ['SSPFM (Sealed Sludge Pump Fourier Modulator)', 3],
+ ['Transcender/Spice Rack', 6], ['Hair Spray Rear View Mirror Danger Indicator', 18]];
+
+ var plot3 = $.jqplot('chart3', [line3], {
+ series:[{renderer:$.jqplot.BarRenderer}],
+ axes: {
+ xaxis: {
+ renderer: $.jqplot.CategoryAxisRenderer,
+ label: 'Warranty Concern',
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ angle: -30,
+ fontFamily: 'Courier New',
+ fontSize: '9pt'
+ }
+
+ },
+ yaxis: {
+ label: 'Occurance',
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer
+ }
+ }
+ });
+
+
+});
+</script>
+
+ <script class="code" type="text/javascript" language="javascript">
+$(document).ready(function(){
+
+ var line = [['Cup Holder Pinion Bob', 7], ['Generic Fog Lamp', 9], ['HDTV Receiver', 15],
+ ['8 Track Control Module', 12], [' Sludge Pump Fourier Modulator', 3],
+ ['Transcender/Spice Rack', 6], ['Hair Spray Danger Indicator', 18]];
+
+ var line2 = [['Nickle', 28], ['Aluminum', 13], ['Xenon', 54], ['Silver', 47],
+ ['Sulfer', 16], ['Silicon', 14], ['Vanadium', 23]];
+
+ var plot4 = $.jqplot('chart4', [line, line2], {
+ title: 'Concern vs. Occurrance',
+ series:[{renderer:$.jqplot.BarRenderer}, {xaxis:'x2axis', yaxis:'y2axis'}],
+ axes: {
+ xaxis: {
+ renderer: $.jqplot.CategoryAxisRenderer,
+ label: 'Warranty Concern',
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ angle: 30
+ }
+ },
+ x2axis: {
+ renderer: $.jqplot.CategoryAxisRenderer,
+ label: 'Metal',
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ angle: 30
+ }
+ },
+ yaxis: {
+ autoscale:true,
+ label: 'Occurance',
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ angle: 30
+ }
+ },
+ y2axis: {
+ autoscale:true,
+ label: 'Number',
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ angle: 30
+ }
+ }
+ }
+ });
+});
+ </script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.logAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.barRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/axisScalingForceTickAt.html b/wqflask/wqflask/static/packages/jqplot/examples/axisScalingForceTickAt.html
new file mode 100644
index 00000000..f9b8056b
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/axisScalingForceTickAt.html
@@ -0,0 +1,242 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Force Plot to Have Tick at 0 or 100</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="axisLabelsRotatedText.html">Previous</a> <a href="./">Examples</a> <a href="bandedLine.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+
+<script language="javascript" type="text/javascript">
+
+ function makeContinuousData(npoints, ybase, yvariation) {
+ var data = [];
+ if (yvariation == null) {
+ yvariation = ybase;
+ ybase = (Math.random() - 0.5) * 2 * yvariation;
+ }
+ for (j=0; j<npoints; j++) {
+ data.push([j, ybase]);
+ ybase += (Math.random() - 0.5) * 2 * yvariation;
+ }
+ return data;
+ }
+
+ function makeRandomData(npoints, yvariation) {
+ var data = [];
+ for (j=0; j<npoints; j++) {
+ var y = (Math.random() - 0.5) * 2 * yvariation;
+ data.push([j, y]);
+ }
+ return data;
+ }
+ function makeDualContinuousData(npoints, xbase, xvariation, ybase, yvariation) {
+ var data = [];
+ if (ybase == null && yvariation == null) {
+ xvariation = xbase;
+ yvariation = xvariation;
+ xbase = (Math.random() - 0.5) * 2 * xvariation;
+ ybase = (Math.random() - 0.5) * 2 * yvariation;
+ }
+ for (j=0; j<npoints; j++) {
+ data.push([xbase, ybase]);
+ xbase += (Math.random()) * xvariation;
+ ybase += (Math.random() - 0.5) * 2 * yvariation;
+ }
+ return data;
+ }
+
+ var plotOptions = {
+ axes: {
+ yaxis: {
+ rendererOptions: { forceTickAt0: true, forceTickAt100: true }
+ }
+ }
+ };
+
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ plot1 = $.jqplot('chart1',[makeContinuousData(100, 55)], {});
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ plot2 = $.jqplot('chart2',[makeContinuousData(100, 1, 0.001)], {});
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ plot3 = $.jqplot('chart3',[makeContinuousData(20, 40, 5)], {
+ axes: {
+ yaxis: {
+ rendererOptions: { forceTickAt0: true, forceTickAt100: true }
+ }
+ }
+ });
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ plot4 = $.jqplot('chart4',[makeContinuousData(20, 40, 5)], {
+ axesDefaults: {
+ pad: 0
+ },
+ axes: {
+ yaxis: {
+ rendererOptions: { forceTickAt0: true, forceTickAt100: true }
+ }
+ }
+ });
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ plot5 = $.jqplot('chart5',[makeContinuousData(20, 40, 5)], {
+ axes: {
+ xaxis: {
+ padMin: 0,
+ padMax: 1.2
+ },
+ yaxis: {
+ padMax: 0,
+ rendererOptions: { forceTickAt0: true, forceTickAt100: true }
+ }
+ }
+ });
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ plot6 = $.jqplot('chart6',[makeContinuousData(20, 40, 8)], {
+ axes: {
+ yaxis: {
+ rendererOptions: { forceTickAt0: true, forceTickAt100: true }
+ }
+ },
+ canvasOverlay: {
+ show: true,
+ objects: [
+ {horizontalLine: {
+ name: 'pebbles',
+ y: 0,
+ lineWidth: 3,
+ color: 'rgb(100, 55, 124)',
+ shadow: true,
+ lineCap: 'butt',
+ xOffset: 0
+ }},
+ {dashedHorizontalLine: {
+ name: 'bam-bam',
+ y: 100,
+ lineWidth: 4,
+ dashPattern: [8, 16],
+ lineCap: 'round',
+ xOffset: '25',
+ color: 'rgb(66, 98, 144)',
+ shadow: false
+ }}
+ ]
+ }
+ });
+});
+
+function lineup(plot, name) {
+ var co = plot.plugins.canvasOverlay;
+ var line = co.get(name);
+ line.options.y += 5;
+ co.draw(plot);
+}
+
+function linedown(plot, name) {
+ var co = plot.plugins.canvasOverlay;
+ var line = co.get(name);
+ line.options.y -= 5;
+ co.draw(plot);
+}
+
+</script>
+
+<div id="chart1" style="height:300px; width:600px;margin: 30px;"></div>
+<pre class="code brush: js"></pre>
+<div id="chart2" style="height:300px; width:600px;margin: 30px;"></div>
+<pre class="code brush: js"></pre>
+<div id="chart3" style="height:300px; width:600px;margin: 30px;"></div>
+<pre class="code brush: js"></pre>
+<div id="chart4" style="height:300px; width:600px;margin: 30px;"></div>
+<pre class="code brush: js"></pre>
+<div id="chart5" style="height:300px; width:600px;margin: 30px;"></div>
+<pre class="code brush: js"></pre>
+<div id="chart6" style="height:300px; width:600px;margin: 30px;"></div>
+
+<div>
+<button onclick="lineup(plot6, 'pebbles')">&nbsp;Pebbles Up&nbsp;&nbsp;</button>
+<button onclick="linedown(plot6, 'pebbles')">&nbsp;Pebbles Down&nbsp;</button>
+</div>
+<div>
+<button onclick="lineup(plot6, 'bam-bam')">Bam-Bam Up</button>
+<button onclick="linedown(plot6, 'bam-bam')">Bam-Bam Down</button>
+</div>
+
+<pre class="code brush: js"></pre>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- Additional plugins go here -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasOverlay.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/bandedLine.html b/wqflask/wqflask/static/packages/jqplot/examples/bandedLine.html
new file mode 100644
index 00000000..1da1926c
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/bandedLine.html
@@ -0,0 +1,310 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Error Bands and Confidence Intervals</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="axisScalingForceTickAt.html">Previous</a> <a href="./">Examples</a> <a href="bar-charts.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+<p>Bands (like confidence intervals or error bands) can be added to line charts through the "bands" option of the line renderer. The band data can be automatically computed or manually assigned. If assigned manually, the simpliest approach is to set the "rendererOptions: { bandData: [] }" array on the series. Note that band data is taken into account when axes scale themselves so bands will not get clipped.</p>
+
+
+<p>Band data can be supplied as arrays of [x,y] values. One array for the upper band line and one for the lower band line.</p>
+
+ <div id="chart01" style="height:300px; width:600px;"></div>
+ <pre class="code brush:js"></pre>
+
+
+<p>The number of points in the band data arrays does not have to correspond to the number of points in the data series. Also, band data will be drawn as smoothed lines if the data series is smoothed.</p>
+
+ <div id="chart02" style="height:300px; width:600px;"></div>
+ <pre class="code brush:js"></pre>
+
+<p>In this example, band data is supplied as an array of arrays of y values for the low and hi bands. X values for the bands are taken from the x values of the series. The band data is of the form: [ [y low 1, y hi 1], [y low 2, y hi 2], ... ] and there must be a corresponding array of low/hi y values for each x value in the data series.</p>
+
+ <div id="chart1" style="height:300px; width:600px;"></div>
+ <pre class="code brush:js"></pre>
+
+<p>The band data can also be supplied as an array of [low y values], [hi y values]. In this case there must also be an equal number of low y values and hi y values as there are data points in the series. X values for the low and hi bands will be taken from the series data. Additionally, the order of low/hi values does not matter as long as they are consistent. jqPlot will figure out which is the low values and which are the high values.</p>
+
+ <div id="chart2" style="height:300px; width:600px;"></div>
+ <pre class="code brush:js"></pre>
+
+<p>Band data does not have to be provided. By default, jqPlot will compute +/- 3% band intervals if the "rendererOptions: { bands: { show: true } }" option is set. The band intervals can be customized as well through the "rendererOptions: { bands: { interval: [number|string|arry] } }" option. Valid intervals are:</p>
+
+<ul>
+<li> '1.7' - will add bands at y +/- 1.7 above and below the line.</li>
+<li> '10%' - will compute +/- 10% interval bands.</li>
+<li> [3, '-10%'] - will add bands at y + 3 and y - 10% above and below the line.</li>
+</ul>
+
+<p>Examples of such interval specifications are shown below:</p>
+
+ <div id="chart3" style="height:300px; width:600px;"></div>
+ <pre class="code brush:js"></pre>
+ <div id="chart4" style="height:300px; width:600px;"></div>
+ <pre class="code brush:js"></pre>
+
+ <div id="chart5" style="height:300px; width:600px;"></div>
+ <pre class="code brush:js"></pre>
+
+<p>You can also customize the fill color of the bands and turn on/off band lines. By default, bands respond to the mouse over event, but they can be set to respond to mouse down as well.</p>
+ <div id="chart6" style="height:300px; width:600px;"></div>
+ <pre class="code brush:js"></pre>
+
+<p>Note, the plots on this page all extend the following pre-defined theme:</p>
+
+ <pre class="code brush:js"></pre>
+
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ // Band data in arrays of [x,y] values.
+ bdat = [[['7/1/2011', 8], ['7/2/2011', 9], ['7/3/2011', 8], ['7/4/2011', 13], ['7/5/2011', 11], ['7/6/2011', 13]],
+ [['7/1/2011', 12], ['7/2/2011', 13], ['7/3/2011', 12], ['7/4/2011', 17], ['7/5/2011', 15], ['7/6/2011', 17]]];
+
+ dat = [['7/1/2011', 10], ['7/2/2011', 11], ['7/3/2011', 10], ['7/4/2011', 15], ['7/5/2011', 13], ['7/6/2011', 15]];
+
+ plot01 = $.jqplot('chart01', [dat], $.extend(true, {}, myTheme, {
+ series: [{
+ rendererOptions: {
+ bandData: bdat
+ }
+ }],
+ axes: {
+ xaxis: {
+ renderer: $.jqplot.DateAxisRenderer,
+ min: '7/1/2011',
+ max: '7/6/2011',
+ tickInterval: '1 day'
+ }
+ }
+ }));
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ // Band data in arrays of [x,y] values.
+ // Here the low band line (1st array) has 5 points and the hi band line has 4 points.
+ bdat = [[['7/1/2011', 9], ['7/3/2011', 7], ['7/4/2011', 13], ['7/5/2011', 11], ['7/6/2011', 13]],
+ [['7/1/2011', 12], ['7/3/2011', 14], ['7/4/2011', 18], ['7/6/2011', 16]]];
+
+ dat = [['7/1/2011', 10], ['7/2/2011', 11], ['7/3/2011', 10], ['7/4/2011', 15], ['7/5/2011', 13], ['7/6/2011', 15]];
+
+ plot02 = $.jqplot('chart02', [dat], $.extend(true, {}, myTheme, {
+ series: [{
+ rendererOptions: {
+ bandData: bdat,
+
+ // turn on smoothing
+ smooth: true
+ }
+ }],
+ axes: {
+ xaxis: {
+ renderer: $.jqplot.DateAxisRenderer,
+ min: '7/1/2011',
+ max: '7/6/2011',
+ tickInterval: '1 day'
+ }
+ }
+ }));
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ // data points for line.
+ dat = [[0, 10], [1, 11], [2, 10], [3, 15], [4, 13], [5, 15]];
+
+ // band data in [[low_y_1, hi_y_1], [low_y_2, hi_y_2],...] format
+ bdat = [[7, 13], [8, 14], [7, 13], [12, 18], [10, 16], [12, 18]];
+
+ plot1 = $.jqplot('chart1', [dat], $.extend(true, {}, myTheme, {
+ series: [{
+ rendererOptions: {
+ // Set the band data on the series.
+ // Bands will be turned on automatically if
+ // valid band data is present.
+ bandData: bdat,
+ smooth: true
+ }
+ }]
+ }));
+});
+
+</script>
+
+
+<script class="code" type="text/javascript">
+
+$(document).ready(function(){
+ // here band data specified as an array of [low y values] and [hi y values]
+ bdat = [[7, 8, 7, 12, 10, 12], [13, 14, 13, 18, 16, 18]];
+
+ // Same plot as before with different band data specification and smoothed lines.
+ plot2 = $.jqplot('chart2', [dat], $.extend(true, {}, myTheme, {
+ series: [
+ {
+ rendererOptions: {
+ bandData: bdat,
+ smooth: true
+ }
+ }]
+ }));
+});
+
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ plot3 = $.jqplot('chart3', [dat], $.extend(true, {}, myTheme, {
+ series: [{
+ rendererOptions: {
+ bands: {
+ // draw bands at 1.7 "units" above and below line.
+ interval: 1.7
+ },
+ smooth: true
+ }
+ }]
+ }));
+});
+
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ plot4 = $.jqplot('chart4', [dat], $.extend(true, {}, myTheme, {
+ series: [{
+ rendererOptions: {
+ bands: {
+ // draw interval at 10% above and below line.
+ interval: '10%'
+ },
+ smooth: true
+ }
+ }]
+ }));
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ plot5 = $.jqplot('chart5', [dat], $.extend(true, {}, myTheme, {
+ series: [{
+ rendererOptions: {
+ bands: {
+ // draw interval at 3 units above and 10% below line.
+ interval: [3, '-10%']
+ },
+ smooth: true
+ }
+ }]
+ }));
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ plot6 = $.jqplot('chart6', [dat], $.extend(true, {}, myTheme, {
+ series: [{
+ rendererOptions: {
+ bands: {
+ // draw interval at 3 units above and 10% below line.
+ interval: 4,
+ fillColor: 'rgba(198, 88, 88, 0.6)',
+ showLines: true
+ },
+
+ // highlight the band on mouse down, not on mouse over.
+ highlightMouseDown: true,
+ smooth: true
+ }
+ }]
+ }));
+});
+</script>
+
+<script class="code" type="text/javascript">
+///////
+// A default set of reusable plot options. Note that line
+// smoothing is turned on. Bands will be drawn with the same
+// smoothing as the line.
+//////
+myTheme = {
+ grid: {
+ drawBorder: false,
+ shadow: false,
+ background: 'rgba(255, 255, 255, 0.0)'
+ },
+ seriesDefaults: {
+ shadow: false,
+ showMarker: false
+ },
+ axes: {
+ xaxis: {
+ pad: 1.0,
+ tickOptions: {
+ showGridline: false
+ }
+ },
+ yaxis: {
+ pad: 1.05
+ }
+ }
+};
+</script>
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.highlighter.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.cursor.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pointLabels.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/bar-charts.html b/wqflask/wqflask/static/packages/jqplot/examples/bar-charts.html
new file mode 100644
index 00000000..67e9dcca
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/bar-charts.html
@@ -0,0 +1,219 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Vertical and Horizontal Bar Charts</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="bandedLine.html">Previous</a> <a href="./">Examples</a> <a href="barLineAnimated.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+
+ <style type="text/css">
+
+ .note {
+ font-size: 0.8em;
+ }
+ .jqplot-yaxis-tick {
+ white-space: nowrap;
+ }
+ </style>
+
+ <div id="chart1" style="width:600px; height:250px;"></div>
+
+ <pre class="code brush: js"></pre>
+
+ <div id="chart2" style="width:400px; height:300px;"></div>
+
+ <pre class="code brush: js"></pre>
+
+ <p class="text">Click on a bar in the plot below to update the text box.</p>
+ <p class="text">You Clicked:
+ <span id="info3">Nothing yet.</span>
+ </p>
+ <div id="chart3" style="width:400px; height:300px;"></div>
+
+ <pre class="code brush: js"></pre>
+
+ <script class="code" type="text/javascript">
+$(document).ready(function(){
+ var s1 = [200, 600, 700, 1000];
+ var s2 = [460, -210, 690, 820];
+ var s3 = [-260, -440, 320, 200];
+ // Can specify a custom tick Array.
+ // Ticks should match up one for each y value (category) in the series.
+ var ticks = ['May', 'June', 'July', 'August'];
+
+ var plot1 = $.jqplot('chart1', [s1, s2, s3], {
+ // The "seriesDefaults" option is an options object that will
+ // be applied to all series in the chart.
+ seriesDefaults:{
+ renderer:$.jqplot.BarRenderer,
+ rendererOptions: {fillToZero: true}
+ },
+ // Custom labels for the series are specified with the "label"
+ // option on the series option. Here a series option object
+ // is specified for each series.
+ series:[
+ {label:'Hotel'},
+ {label:'Event Regristration'},
+ {label:'Airfare'}
+ ],
+ // Show the legend and put it outside the grid, but inside the
+ // plot container, shrinking the grid to accomodate the legend.
+ // A value of "outside" would not shrink the grid and allow
+ // the legend to overflow the container.
+ legend: {
+ show: true,
+ placement: 'outsideGrid'
+ },
+ axes: {
+ // Use a category axis on the x axis and use our custom ticks.
+ xaxis: {
+ renderer: $.jqplot.CategoryAxisRenderer,
+ ticks: ticks
+ },
+ // Pad the y axis just a little so bars can get close to, but
+ // not touch, the grid boundaries. 1.2 is the default padding.
+ yaxis: {
+ pad: 1.05,
+ tickOptions: {formatString: '$%d'}
+ }
+ }
+ });
+});
+ </script>
+
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ // For horizontal bar charts, x an y values must will be "flipped"
+ // from their vertical bar counterpart.
+ var plot2 = $.jqplot('chart2', [
+ [[2,1], [4,2], [6,3], [3,4]],
+ [[5,1], [1,2], [3,3], [4,4]],
+ [[4,1], [7,2], [1,3], [2,4]]], {
+ seriesDefaults: {
+ renderer:$.jqplot.BarRenderer,
+ // Show point labels to the right ('e'ast) of each bar.
+ // edgeTolerance of -15 allows labels flow outside the grid
+ // up to 15 pixels. If they flow out more than that, they
+ // will be hidden.
+ pointLabels: { show: true, location: 'e', edgeTolerance: -15 },
+ // Rotate the bar shadow as if bar is lit from top right.
+ shadowAngle: 135,
+ // Here's where we tell the chart it is oriented horizontally.
+ rendererOptions: {
+ barDirection: 'horizontal'
+ }
+ },
+ axes: {
+ yaxis: {
+ renderer: $.jqplot.CategoryAxisRenderer
+ }
+ }
+ });
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var s1 = [2, 6, 7, 10];
+ var s2 = [7, 5, 3, 4];
+ var s3 = [14, 9, 3, 8];
+ plot3 = $.jqplot('chart3', [s1, s2, s3], {
+ // Tell the plot to stack the bars.
+ stackSeries: true,
+ captureRightClick: true,
+ seriesDefaults:{
+ renderer:$.jqplot.BarRenderer,
+ rendererOptions: {
+ // Put a 30 pixel margin between bars.
+ barMargin: 30,
+ // Highlight bars when mouse button pressed.
+ // Disables default highlighting on mouse over.
+ highlightMouseDown: true
+ },
+ pointLabels: {show: true}
+ },
+ axes: {
+ xaxis: {
+ renderer: $.jqplot.CategoryAxisRenderer
+ },
+ yaxis: {
+ // Don't pad out the bottom of the data range. By default,
+ // axes scaled as if data extended 10% above and below the
+ // actual range to prevent data points right on grid boundaries.
+ // Don't want to do that here.
+ padMin: 0
+ }
+ },
+ legend: {
+ show: true,
+ location: 'e',
+ placement: 'outside'
+ }
+ });
+ // Bind a listener to the "jqplotDataClick" event. Here, simply change
+ // the text of the info3 element to show what series and ponit were
+ // clicked along with the data for that point.
+ $('#chart3').bind('jqplotDataClick',
+ function (ev, seriesIndex, pointIndex, data) {
+ $('#info3').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
+ }
+ );
+});
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.min.js"></script>
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.pointLabels.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/barLineAnimated.html b/wqflask/wqflask/static/packages/jqplot/examples/barLineAnimated.html
new file mode 100644
index 00000000..7f485242
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/barLineAnimated.html
@@ -0,0 +1,165 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Animated Charts</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="bar-charts.html">Previous</a> <a href="./">Examples</a> <a href="barTest.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <div id="chart1" style="width:700px; height:300px"></div>
+
+ <p>This plot animates the bars bottom to top and the line series left to right upon initial page load. Since the <code>animateReplot: true</code> option is set, the bars and line will also animate upon calls to <code>plot1.replot( { resetAxes: true } )</code>.</p>
+
+ <pre class="code brush:js"></pre>
+
+
+ <script class="code" type="text/javascript">
+
+ $(document).ready(function () {
+ var s1 = [[2002, 112000], [2003, 122000], [2004, 104000], [2005, 99000], [2006, 121000],
+ [2007, 148000], [2008, 114000], [2009, 133000], [2010, 161000], [2011, 173000]];
+ var s2 = [[2002, 10200], [2003, 10800], [2004, 11200], [2005, 11800], [2006, 12400],
+ [2007, 12800], [2008, 13200], [2009, 12600], [2010, 13100]];
+
+ plot1 = $.jqplot("chart1", [s2, s1], {
+ // Turns on animatino for all series in this plot.
+ animate: true,
+ // Will animate plot on calls to plot1.replot({resetAxes:true})
+ animateReplot: true,
+ cursor: {
+ show: true,
+ zoom: true,
+ looseZoom: true,
+ showTooltip: false
+ },
+ series:[
+ {
+ pointLabels: {
+ show: true
+ },
+ renderer: $.jqplot.BarRenderer,
+ showHighlight: false,
+ yaxis: 'y2axis',
+ rendererOptions: {
+ // Speed up the animation a little bit.
+ // This is a number of milliseconds.
+ // Default for bar series is 3000.
+ animation: {
+ speed: 2500
+ },
+ barWidth: 15,
+ barPadding: -15,
+ barMargin: 0,
+ highlightMouseOver: false
+ }
+ },
+ {
+ rendererOptions: {
+ // speed up the animation a little bit.
+ // This is a number of milliseconds.
+ // Default for a line series is 2500.
+ animation: {
+ speed: 2000
+ }
+ }
+ }
+ ],
+ axesDefaults: {
+ pad: 0
+ },
+ axes: {
+ // These options will set up the x axis like a category axis.
+ xaxis: {
+ tickInterval: 1,
+ drawMajorGridlines: false,
+ drawMinorGridlines: true,
+ drawMajorTickMarks: false,
+ rendererOptions: {
+ tickInset: 0.5,
+ minorTicks: 1
+ }
+ },
+ yaxis: {
+ tickOptions: {
+ formatString: "$%'d"
+ },
+ rendererOptions: {
+ forceTickAt0: true
+ }
+ },
+ y2axis: {
+ tickOptions: {
+ formatString: "$%'d"
+ },
+ rendererOptions: {
+ // align the ticks on the y2 axis with the y axis.
+ alignTicks: true,
+ forceTickAt0: true
+ }
+ }
+ },
+ highlighter: {
+ show: true,
+ showLabel: true,
+ tooltipAxes: 'y',
+ sizeAdjust: 7.5 , tooltipLocation : 'ne'
+ }
+ });
+
+ });
+
+
+</script>
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.barRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.highlighter.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.cursor.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pointLabels.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/barTest.html b/wqflask/wqflask/static/packages/jqplot/examples/barTest.html
new file mode 100644
index 00000000..f28ad688
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/barTest.html
@@ -0,0 +1,299 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Bar Charts</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="barLineAnimated.html">Previous</a> <a href="./">Examples</a> <a href="bezierCurve.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <p>Below is a default bar plot. Bars will highlight on mouseover. Events are triggered when you mouseover a bar and also when you click on a bar. Here We capture the 'jqplotDataClick' event and display the clicked series index, point index and data values. When series data is assigned as a 1-dimensional array as in this example, jqPlot automatically converts it into a 2-dimensional array for plotting. So a series defined as [2, 6, 7, 10] will become [[1,2], [2,6], [3,7], [4,10]].<p>
+
+ <div><span>You Clicked: </span><span id="info1">Nothing yet</span></div>
+
+ <div id="chart1" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
+<pre class="code brush:js"></pre>
+
+ <p>The plot target also fires a 'jqplotDataMouseOver' when the cursor is moused over a bar even if highlighting is turned off. This event will fire continuously as the user mouses over the bar. 'jqplotDataHighlight' fires only once when the user first passes over the bar. Additionally, a 'jqplotDataUnhighlight' event is fired when the user moves out of a bar (if highlighting is enabled).<p>
+
+ <div><span>Moused Over: </span><span id="info2">Nothing</span></div>
+
+ <div id="chart2" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
+<pre class="code brush:js"></pre>
+
+ <div><span>Moused Over: </span><span id="info2b">Nothing</span></div>
+ <div><span>Clicked: </span><span id="info2c">Nothing</span></div>
+
+ <div id="chart2b" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
+<pre class="code brush:js"></pre>
+
+ <p>The next example has the plot's 'captureRightClick' option set to true. This causes the plot to fire a 'jqplotRightClick' event the the user clicks the right mouse button over a bar. Here, the 'highlightMouseDown' option is also set to true. This will highlight a slice on mouse down instead of on move over. Highlighting will occur for either left or right click.</p>
+
+ <div><span>You Right Clicked: </span><span id="info3">Nothing yet</span></div>
+
+ <div id="chart3" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
+<pre class="code brush:js"></pre>
+
+ <div id="chart4" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
+<pre class="code brush:js"></pre>
+
+ <div id="chart5" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
+<pre class="code brush:js"></pre>
+
+<p>A pie chart is added to test for incompatibilities.</p>
+ <div id="chart6" style="margin-top:20px; margin-left:20px; width:300px; height:200px;"></div>
+<pre class="code brush:js"></pre>
+
+<p>The nex example shows the placement of point labels on negative bars. They shou be placed on the opposite position. That is, if it is placed 'north' to the positive bars, then it should be placed 'south' to the negative bars.</p>
+ <div id="chart7" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
+<pre class="code brush:js"></pre>
+
+ <script class="code" type="text/javascript">$(document).ready(function(){
+ $.jqplot.config.enablePlugins = true;
+ var s1 = [2, 6, 7, 10];
+ var ticks = ['a', 'b', 'c', 'd'];
+
+ plot1 = $.jqplot('chart1', [s1], {
+ // Only animate if we're not using excanvas (not in IE 7 or IE 8)..
+ animate: !$.jqplot.use_excanvas,
+ seriesDefaults:{
+ renderer:$.jqplot.BarRenderer,
+ pointLabels: { show: true }
+ },
+ axes: {
+ xaxis: {
+ renderer: $.jqplot.CategoryAxisRenderer,
+ ticks: ticks
+ }
+ },
+ highlighter: { show: false }
+ });
+
+ $('#chart1').bind('jqplotDataClick',
+ function (ev, seriesIndex, pointIndex, data) {
+ $('#info1').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
+ }
+ );
+ });</script>
+
+ <script class="code" type="text/javascript">$(document).ready(function(){
+ var s1 = [2, 6, 7, 10];
+ var s2 = [7, 5, 3, 2];
+ var ticks = ['a', 'b', 'c', 'd'];
+
+ plot2 = $.jqplot('chart2', [s1, s2], {
+ seriesDefaults: {
+ renderer:$.jqplot.BarRenderer,
+ pointLabels: { show: true }
+ },
+ axes: {
+ xaxis: {
+ renderer: $.jqplot.CategoryAxisRenderer,
+ ticks: ticks
+ }
+ }
+ });
+
+ $('#chart2').bind('jqplotDataHighlight',
+ function (ev, seriesIndex, pointIndex, data) {
+ $('#info2').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
+ }
+ );
+
+ $('#chart2').bind('jqplotDataUnhighlight',
+ function (ev) {
+ $('#info2').html('Nothing');
+ }
+ );
+ });</script>
+
+ <script class="code" type="text/javascript">$(document).ready(function(){
+ plot2b = $.jqplot('chart2b', [[[2,1], [4,2], [6,3], [3,4]], [[5,1], [1,2], [3,3], [4,4]], [[4,1], [7,2], [1,3], [2,4]]], {
+ seriesDefaults: {
+ renderer:$.jqplot.BarRenderer,
+ pointLabels: { show: true, location: 'e', edgeTolerance: -15 },
+ shadowAngle: 135,
+ rendererOptions: {
+ barDirection: 'horizontal'
+ }
+ },
+ axes: {
+ yaxis: {
+ renderer: $.jqplot.CategoryAxisRenderer
+ }
+ }
+ });
+
+ $('#chart2b').bind('jqplotDataHighlight',
+ function (ev, seriesIndex, pointIndex, data) {
+ $('#info2b').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data+ ', pageX: '+ev.pageX+', pageY: '+ev.pageY);
+ }
+ );
+ $('#chart2b').bind('jqplotDataClick',
+ function (ev, seriesIndex, pointIndex, data) {
+ $('#info2c').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data+ ', pageX: '+ev.pageX+', pageY: '+ev.pageY);
+ }
+ );
+
+ $('#chart2b').bind('jqplotDataUnhighlight',
+ function (ev) {
+ $('#info2b').html('Nothing');
+ }
+ );
+ });</script>
+
+ <script class="code" type="text/javascript">$(document).ready(function(){
+ var s1 = [2, 6, 7, 10];
+ var s2 = [7, 5, 3, 2];
+ var s3 = [14, 9, 3, 8];
+ plot3 = $.jqplot('chart3', [s1, s2, s3], {
+ stackSeries: true,
+ captureRightClick: true,
+ seriesDefaults:{
+ renderer:$.jqplot.BarRenderer,
+ rendererOptions: {
+ highlightMouseDown: true
+ },
+ pointLabels: {show: true}
+ },
+ legend: {
+ show: true,
+ location: 'e',
+ placement: 'outside'
+ }
+ });
+
+ $('#chart3').bind('jqplotDataRightClick',
+ function (ev, seriesIndex, pointIndex, data) {
+ $('#info3').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
+ }
+ );
+ });</script>
+
+ <script class="code" type="text/javascript">$(document).ready(function(){
+ plot4 = $.jqplot('chart4', [[[2,1], [6,2], [7,3], [10,4]], [[7,1], [5,2],[3,3],[2,4]], [[14,1], [9,2], [9,3], [8,4]]], {
+ stackSeries: true,
+ captureRightClick: true,
+ seriesDefaults:{
+ renderer:$.jqplot.BarRenderer,
+ shadowAngle: 135,
+ rendererOptions: {
+ barDirection: 'horizontal',
+ highlightMouseDown: true
+ },
+ pointLabels: {show: true, formatString: '%d'}
+ },
+ legend: {
+ show: true,
+ location: 'e',
+ placement: 'outside'
+ },
+ axes: {
+ yaxis: {
+ renderer: $.jqplot.CategoryAxisRenderer
+ }
+ }
+ });
+ });</script>
+
+ <script class="code" type="text/javascript">$(document).ready(function(){
+ plot5 = $.jqplot('chart5', [[[2,1], [null,2], [7,3], [10,4]]], {
+ captureRightClick: true,
+ seriesDefaults:{
+ renderer:$.jqplot.BarRenderer,
+ shadowAngle: 135,
+ rendererOptions: {
+ barDirection: 'horizontal',
+ highlightMouseDown: true
+ },
+ pointLabels: {show: true, formatString: '%d'}
+ },
+ legend: {
+ show: true,
+ location: 'e',
+ placement: 'outside'
+ },
+ axes: {
+ yaxis: {
+ renderer: $.jqplot.CategoryAxisRenderer
+ }
+ }
+ });
+ });</script>
+
+ <script class="code" type="text/javascript">$(document).ready(function(){
+ plot6 = $.jqplot('chart6', [[1,2,3,4]], {seriesDefaults:{renderer:$.jqplot.PieRenderer}});
+ });</script>
+
+ <script class="code" type="text/javascript">$(document).ready(function(){
+ var s1 = [2, -6, 7, -5];
+ var ticks = ['a', 'b', 'c', 'd'];
+
+ plot7 = $.jqplot('chart7', [s1], {
+ seriesDefaults:{
+ renderer:$.jqplot.BarRenderer,
+ rendererOptions: { fillToZero: true },
+ pointLabels: { show: true }
+ },
+ axes: {
+ // yaxis: { autoscale: true },
+ xaxis: {
+ renderer: $.jqplot.CategoryAxisRenderer,
+ ticks: ticks
+ }
+ }
+ });
+ });</script>
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.barRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pieRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pointLabels.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/bezierCurve.html b/wqflask/wqflask/static/packages/jqplot/examples/bezierCurve.html
new file mode 100644
index 00000000..4741fb57
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/bezierCurve.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Bezier Curve Plots</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="barTest.html">Previous</a> <a href="./">Examples</a> <a href="blockPlot.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <p>The Bezier curve renderer can distinguish between two different input data formats. This first example has the data passed in as 2 data points, the second one defining the Bezier curve to the end point. With this format, non-default axes renderers will require specifying the minimum and maximum on the axes.</p>
+<pre>
+ [[xstart, ystart], [cp1x, cp1y, cp2x, cp2y, xend, yend]];
+</pre>
+<div id="chart1" class='plot' style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
+<p>This second example has the data broken out into 4 points, which will be assembled to define the Bezier Curve. With this format, any axes renderer can be used without explicitly specifying the minimum and maximum.</p>
+<pre>
+ [[xstart, ystart], [cp1x, cp1y], [cp2x, cp2y], [xend, yend]];
+</pre>
+<div id="chart2" class='plot' style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
+<p> Here is an example using a date axis renderer with Bezier curves. The data looks like:</p>
+<pre>
+ [['01/01/2010', 6], ['02/01/2010', 9], ['03/01/2010', 8], ['04/01/2010', 3]]
+</pre>
+
+<div id="chart3" class='plot' style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+
+ var line1 = [[0, 1], [2, 2, 4, .5, 6, 0]];
+ var line2 = [[0, 5], [2, 6, 5, 1, 6, .5]];
+ var line3 = [[0, 6], [3, 9, 4, 8, 6, 3]];
+ var line4 = [[0, 7], [2, 9, 4, 8, 6, 6]];
+ var line5 = [[0, 8], [3, 9, 4, 8, 6, 8]];
+
+ plot1 = $.jqplot("chart1", [line1,line2, line3, line4, line5], {
+ seriesDefaults: {renderer:$.jqplot.BezierCurveRenderer},
+ legend:{show:true}
+ });
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+
+ var s1 = [[0, 1], [2, 2], [4, .5], [6, 0]];
+ var s2 = [[0, 5], [2, 6], [5, 1], [6, .5]];
+ var s3 = [[0, 6], [3, 9], [4, 8], [6, 3]];
+ var s4 = [[0, 7], [2, 9], [4, 8], [6, 6]];
+ var s5 = [[0, 8], [3, 9], [4, 8], [6, 8]];
+
+ plot2 = $.jqplot("chart2", [s1,s2, s3, s4, s5], {
+ seriesDefaults: {renderer:$.jqplot.BezierCurveRenderer},
+ legend:{show:true}
+ });
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+
+ var s1 = [['01/01/2010', 1], ['02/01/2010', 2], ['03/01/2010', .5], ['04/01/2010', 0]];
+ var s2 = [['01/01/2010', 5], ['02/01/2010', 6], ['03/01/2010', 1], ['04/01/2010', .5]];
+ var s3 = [['01/01/2010', 6], ['02/01/2010', 9], ['03/01/2010', 8], ['04/01/2010', 3]];
+ var s4 = [['01/01/2010', 7], ['02/01/2010', 9], ['03/01/2010', 8], ['04/01/2010', 6]];
+ var s5 = [['01/01/2010', 8], ['02/01/2010', 9], ['03/01/2010', 8], ['04/01/2010', 8]];
+
+ plot3 = $.jqplot("chart3", [s1,s2, s3, s4, s5], {
+ seriesDefaults: {renderer:$.jqplot.BezierCurveRenderer},
+ axes:{xaxis:{renderer:$.jqplot.DateAxisRenderer, numberTicks:4}},
+ legend:{show:true}
+ });
+});
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.BezierCurveRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/blockPlot.html b/wqflask/wqflask/static/packages/jqplot/examples/blockPlot.html
new file mode 100644
index 00000000..cfbe68bd
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/blockPlot.html
@@ -0,0 +1,199 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Block Plots</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="bezierCurve.html">Previous</a> <a href="./">Examples</a> <a href="bodyOpenerNoHeader.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <p>Below is an example block plot. This plot also uses the Enhanced Legend Renderer plugin. Clicking on an item in the legend will toggle display of the appropriate series.</p>
+
+ <div id="chart1" class="plot" style="width:500px;height:300px;margin-bottom:30px;"></div>
+
+<p>Blocks can be moved by selecting the series, the point, and an optional duration parameter. If specified, duration will animate the movement. Duration is either a number in milliseconds, or the keywords 'fast' or 'slow'. Higher numbers will cause a slower animation.</p>
+ Series: <select id="seriesId">
+ <option value="0" selected>First</option>
+ <option value="1">Second</option>
+ <option value="2">Third</option>
+ </select>
+ Point: <select id="pointId">
+ <option value="0" selected>first</option>
+ <option value="1">second</option>
+ <option value="2">third</option>
+ <option value="3">fourth</option>
+ <option value="4">fifth</option>
+ <option value="5">six</option>
+ </select>
+ Duration: <select id="duration">
+ <option value="" selected>None</option>
+ <option value="150">100</option>
+ <option value="fast">fast</option>
+ <option value="300">300</option>
+ <option value="300">400</option>
+ <option value="300">500</option>
+ <option value="slow">slow</option>
+ <option value="900">700</option>
+ <option value="900">800</option>
+ <option value="900">900</option>
+ </select>
+ X: <button id="mxval" type="button" value="-0.5" onclick="move('x', -1);">-1</button> <button id="pxval" type="button" value="-0.5" onclick="move('x', 0.5);">0.5</button>
+ Y: <button id="myval" type="button" name="myval" value="-10" onclick="move('y', -30);">-30</button> <button id="pyval" type="button" name="pyval" value="10" onclick="move('y', 15);">15</button>
+
+ <pre class="code brush:js"></pre>
+
+
+ <p>This second chart is like the first except the "varyBlockColors" renderer option is set to true. This will vary the color of each block in a series separately. This allows displaying a third dimension to the data such as grouping beverage products by producer and by category such as "cola", "tea", "energy drink", etc.</p>
+
+ <p>Also, the legend has it's "showSwathces" option set to false, since the blocks of each series will be of varying color and won't correspond to one swatch color. This still enables the user to show and hide the series by clicking on a label in the legend.</p>
+
+ <div id="chart2" class="plot" style="width:500px;height:300px;margin-bottom:30px;"></div>
+
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+
+ var s1 = [[0.9, 120, 'Vernors'], [1.8, 140, 'Fanta'], [3.2, 90, 'Barqs', {background:'#ddbb33'}],
+ [4.1, 140, 'Arizon Iced Tea'], [4.5, 91, 'Red Bull'], [6.8, 17, 'Go Girl']];
+ var s2 = [[1.3, 44, 'Pepsi'], [2.1, 170, 'Sierra Mist'], [2.6, 66, 'Moutain Dew'],
+ [4, 52, 'Sobe'], [5.4, 16, 'Amp'], [6, 48, 'Aquafina']];
+ var s3 = [[1, 59, 'Coca-Cola', {background:'rgb(250, 160, 160)'}], [2, 50, 'Ambasa'],
+ [3, 90, 'Mello Yello'], [4, 90, 'Sprite'], [5, 71, 'Squirt'], [5, 155, 'Youki']];
+
+ $('#chart1').jqplot([s1, s2, s3],{
+ seriesDefaults:{
+ renderer:$.jqplot.BlockRenderer
+ },
+ legend:{
+ renderer: $.jqplot.EnhancedLegendRenderer,
+ show:true
+ },
+ series: [
+ {},
+ {rendererOptions: {
+ css:{background:'#A1EED6'}
+ }},
+ {rendererOptions: {
+ css:{background:'#D3E4A0'}
+ }}
+ ],
+ axes: {
+ xaxis: {
+ min:0,
+ max: 8
+ },
+ yaxis: {
+ min:0,
+ max: 200
+ }
+ }
+ });
+});
+
+ function move(dir, val) {
+ var plot1 = $('#chart1').data('jqplot');
+ val = parseFloat(val);
+ var sidx = parseInt($('#seriesId').val());
+ var pidx = parseInt($('#pointId').val());
+ var duration = $('#duration').val();
+ var x = plot1.series[sidx].data[pidx][0];
+ var y = plot1.series[sidx].data[pidx][1];
+ (dir == 'x') ? x += val : y += val;
+ plot1.series[sidx].moveBlock(pidx, x, y, duration);
+ }
+
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var s1 = [[0.9, 120, 'Vernors'], [1.8, 140, 'Fanta'], [3.2, 90, 'Barqs'],
+ [4.1, 140, 'Arizon Iced Tea'], [4.5, 91, 'Red Bull'], [6.8, 17, 'Go Girl']];
+ var s2 = [[1.3, 44, 'Pepsi'], [2.1, 170, 'Sierra Mist'], [2.6, 66, 'Moutain Dew'],
+ [4, 52, 'Sobe'], [5.4, 16, 'Amp'], [6, 48, 'Aquafina']];
+ var s3 = [[1, 59, 'Coca-Cola'], [2, 50, 'Sprite'], [3, 90, 'Mello Yello'],
+ [4, 90, 'Ambasa'], [5, 71, 'Squirt'], [5, 155, 'Youki']];
+
+
+ var plot2 = $.jqplot('chart2',[s1, s2, s3],{
+ seriesDefaults:{
+ renderer:$.jqplot.BlockRenderer,
+ rendererOptions: {
+ varyBlockColors: true
+ },
+ pointLabels:{
+ show: false
+ }
+ },
+ legend:{
+ renderer: $.jqplot.EnhancedLegendRenderer,
+ show:true,
+ showSwatches: false
+ },
+ series: [{label: 'Independent Brands'}, {label: 'Pepsi Brands'}, {label: 'Coke Brands'}],
+ axes: {
+ xaxis: {
+ min:0,
+ max: 8
+ },
+ yaxis: {
+ min:0,
+ max: 200
+ }
+ }
+ });
+
+ });
+
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.blockRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.enhancedLegendRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pointLabels.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/bubble-plots.html b/wqflask/wqflask/static/packages/jqplot/examples/bubble-plots.html
new file mode 100644
index 00000000..d210b98e
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/bubble-plots.html
@@ -0,0 +1,213 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Bubble Plots</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="bodyOpenerNoHeader.html">Previous</a> <a href="./">Examples</a> <a href="bubbleChart.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <style type="text/css">
+
+ .note {
+ font-size: 0.8em;
+ }
+
+ #tooltip1b {
+ font-size: 12px;
+ color: rgb(15%, 15%, 15%);
+ padding:2px;
+ background-color: rgba(95%, 95%, 95%, 0.8);
+ }
+
+ #legend1b {
+ font-size: 12px;
+ border: 1px solid #cdcdcd;
+ border-collapse: collapse;
+ }
+ #legend1b td, #legend1b th {
+ border: 1px solid #cdcdcd;
+ padding: 1px 4px;
+ }
+
+
+ </style>
+
+<p>Bubble charts represent 3 dimensional data. First, a basic bubble chart with the "bubbleGradients: true" option to specify gradient fills. Radial gradients are not supported in IE version before IE 9 and will be automatically disabled.</p>
+
+<div id="chart1" style="height:340px; width:460px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+<p>Data is passed in to a bubble chart as a series of [x, y, radius, &lt;label or object&gt;]. The optional fourth element of the data point can either be either a label string or an object having 'label' and/or 'color' properties to assign to the bubble.</p>
+
+<p>By default, all bubbles are scaled according to the size of the plot area. The radius value in the data point will be adjusted to fit the bubbles in the chart. If the "autoscaleBubbles" option is set to false, the radius value in the data will be taken as a literal pixel value for the radius of the points.</p>
+
+<p>Next are some basic customizations of bubble appearance with the "bubbleAlpha" and "highlightAlpha" options.</p>
+
+<div id="chart2" style="height:340px; width:460px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+<p>In the following example, display of a custom toolip and highlighting of a custom table legend is performed by binding to the "jqplotDataHighlight" and "jqplotDataUnhighlight" events. The custom legend table here is dynamically created with a few lines of jQuery (O.K., it could be done in one line) based on the data array of the plot.</p>
+
+<div style="position:absolute;z-index:99;display:none;" id="tooltip1b"></div>
+
+<table style="margin-left:auto; margin-right:auto;"><tr>
+ <td><div id="chart1b" style="width:460px;height:340px;"></div></td>
+ <td><div style="height:340px;"><table id="legend1b"><tr><th>Company</th><th>R Value</th></tr></table></div></td>
+</tr></table>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+
+ var arr = [[11, 123, 1236, "Acura"], [45, 92, 1067, "Alfa Romeo"],
+ [24, 104, 1176, "AM General"], [50, 23, 610, "Aston Martin Lagonda"],
+ [18, 17, 539, "Audi"], [7, 89, 864, "BMW"], [2, 13, 1026, "Bugatti"]];
+
+ var plot1 = $.jqplot('chart1',[arr],{
+ title: 'Bubble Chart with Gradient Fills',
+ seriesDefaults:{
+ renderer: $.jqplot.BubbleRenderer,
+ rendererOptions: {
+ bubbleGradients: true
+ },
+ shadow: true
+ }
+ });
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+
+ var arr = [[11, 123, 1236, "Acura"], [45, 92, 1067, "Alfa Romeo"],
+ [24, 104, 1176, "AM General"], [50, 23, 610, "Aston Martin Lagonda"],
+ [18, 17, 539, "Audi"], [7, 89, 864, "BMW"], [2, 13, 1026, "Bugatti"]];
+
+ var plot2 = $.jqplot('chart2',[arr],{
+ title: 'Transparent Bubbles',
+ seriesDefaults:{
+ renderer: $.jqplot.BubbleRenderer,
+ rendererOptions: {
+ bubbleAlpha: 0.6,
+ highlightAlpha: 0.8
+ },
+ shadow: true,
+ shadowAlpha: 0.05
+ }
+ });
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+
+ var arr = [[11, 123, 1236, "Acura"], [45, 92, 1067, "Alfa Romeo"],
+ [24, 104, 1176, "AM General"], [50, 23, 610, "Aston Martin Lagonda"],
+ [18, 17, 539, "Audi"], [7, 89, 864, "BMW"], [2, 13, 1026, "Bugatti"]];
+
+ var plot1b = $.jqplot('chart1b',[arr],{
+ title: 'Tooltip and Custom Legend Highlighting',
+ seriesDefaults:{
+ renderer: $.jqplot.BubbleRenderer,
+ rendererOptions: {
+ bubbleAlpha: 0.6,
+ highlightAlpha: 0.8,
+ showLabels: false
+ },
+ shadow: true,
+ shadowAlpha: 0.05
+ }
+ });
+
+ // Legend is a simple table in the html.
+ // Dynamically populate it with the labels from each data value.
+ $.each(arr, function(index, val) {
+ $('#legend1b').append('<tr><td>'+val[3]+'</td><td>'+val[2]+'</td></tr>');
+ });
+
+ // Now bind function to the highlight event to show the tooltip
+ // and highlight the row in the legend.
+ $('#chart1b').bind('jqplotDataHighlight',
+ function (ev, seriesIndex, pointIndex, data, radius) {
+ var chart_left = $('#chart1b').offset().left,
+ chart_top = $('#chart1b').offset().top,
+ x = plot1b.axes.xaxis.u2p(data[0]), // convert x axis unita to pixels
+ y = plot1b.axes.yaxis.u2p(data[1]); // convert y axis units to pixels
+ var color = 'rgb(50%,50%,100%)';
+ $('#tooltip1b').css({left:chart_left+x+radius+5, top:chart_top+y});
+ $('#tooltip1b').html('<span style="font-size:14px;font-weight:bold;color:' +
+ color + ';">' + data[3] + '</span><br />' + 'x: ' + data[0] +
+ '<br />' + 'y: ' + data[1] + '<br />' + 'r: ' + data[2]);
+ $('#tooltip1b').show();
+ $('#legend1b tr').css('background-color', '#ffffff');
+ $('#legend1b tr').eq(pointIndex+1).css('background-color', color);
+ });
+
+ // Bind a function to the unhighlight event to clean up after highlighting.
+ $('#chart1b').bind('jqplotDataUnhighlight',
+ function (ev, seriesIndex, pointIndex, data) {
+ $('#tooltip1b').empty();
+ $('#tooltip1b').hide();
+ $('#legend1b tr').css('background-color', '#ffffff');
+ });
+});
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.bubbleRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/bubbleChart.html b/wqflask/wqflask/static/packages/jqplot/examples/bubbleChart.html
new file mode 100644
index 00000000..628d9066
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/bubbleChart.html
@@ -0,0 +1,264 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Bubble Charts</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="bubble-plots.html">Previous</a> <a href="./">Examples</a> <a href="candlestick-charts.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <style type="text/css">
+ .jqplot-target {
+ margin-bottom: 2em;
+ }
+
+ .note {
+ font-size: 0.8em;
+ }
+
+ #tooltip1b {
+ font-size: 12px;
+ color: rgb(15%, 15%, 15%);
+ padding:2px;
+ background-color: rgba(95%, 95%, 95%, 0.8);
+ }
+
+ #legend1b {
+ font-size: 12px;
+ border: 1px solid #cdcdcd;
+ border-collapse: collapse;
+ }
+ #legend1b td, #legend1b th {
+ border: 1px solid #cdcdcd;
+ padding: 1px 4px;
+ }
+ </style>
+
+
+ <p>Bubble charts represent 3 dimensional data. Data is passed in to a bubble chart as a series of [x, y, radius, &lt;label or object&gt;]. The optional fourth element of the data point can either be either a label string or an object having 'label' and/or 'color' properties to assign to the bubble.</p>
+
+<p>By default, all bubbles are scaled according to the size of the plot area. The radius value in the data point will be adjusted to fit the bubbles in the chart. If the "autoscaleBubbles" option is set to false, the radius value in the data will be taken as a literal pixel value for the radius of the points.</p>
+
+<p>The below chart show basic customization of bubble appearance with the "bubbleAlpha" and "highlightAlpha" options.</p>
+
+<div id="chart1" class="plot" style="width:460px;height:340px;"></div>
+<pre class="code brush:js"></pre>
+
+<div style="position:absolute;z-index:99;display:none;" id="tooltip1b"></div>
+
+<table><tr>
+ <td><div id="chart1b" class="plot" style="width:460px;height:340px;"></div></td>
+ <td><div style="height:340px;"><table id="legend1b"><tr><th>Company</th><th>R Value</th></tr></table></div></td>
+</tr></table>
+<pre class="code brush:js"></pre>
+
+<p>Below is a basic bubble chart showing usage of the optional label and color properties passed in with the data.</p>
+
+<div id="chart1c" class="plot" style="width:460px;height:340px;"></div>
+<pre class="code brush:js"></pre>
+
+<p>The next chart uses the "bubbleGradients: true" option to specify gradient fills on the bubbles. Radial gradients are not supported in IE<sup>*</sup> and will be automatically disabled.</p>
+
+<div id="chart2" class="plot" style="width:460px;height:340px;"></div>
+
+<p class="note"><sup>*</sup>Radial gradients are not supported in IE 7 and IE 8 because they are not supported in the excanvas emulation layer used by jqPlot to render charts in IE 7 and IE 8. jqPlot renders charts using the HTML canvas element which is supported by nearly every browser including IE 9. Excanvas translates the canvas rendering to VML rendering for IE 7 and 8, but unfortunately does not properly handle radial gradients.</p>
+
+<pre class="code brush:js"></pre>
+
+<p>The following bubble chart shows the "autoscalePointsFactor" and "autoscaleMultiplier" options which can be used to control bubble scaling. The "autoscalePointsFactor" options controls bubble scaling with the number of points on the plot. A negative value will decrease bubble size and number of bubbles increases. The "autoscaleMultiplier" will makes all bubbles larger or smaller for values greater or less than 1.0.</p>
+
+<p>This chart also demonstrates some of the highlighting options. Bubble highlighting is controlled with the "highlightMouseOver" and "highlightMouseDown" boolean options. Here the "highlightMouseDown: true" option is set which causes the plot to highlight on mousedown (click). This automatically sets the "highlightMouseOver" option to false.</p>
+
+<p>Events are also trigger with plot interaction. Specifically, "jqplotDataHighlight", "jqplotDataUnhighlight", "jqplotDataClick" and "jqplotDataRightClick" events are triggered. Handlers are passed an event object, the series index, the point index, and the bubble data.</p>
+
+<div id="chart3" class="plot" style="width:600px;height:400px;"></div>
+<pre class="code brush:js"></pre>
+
+<script class="code" language="javascript" type="text/javascript">$(document).ready(function(){
+
+ var arr = [[11, 123, 1236, "Acura"], [45, 92, 1067, "Alfa Romeo"],
+ [24, 104, 1176, "AM General"], [50, 23, 610, "Aston Martin Lagonda"],
+ [18, 17, 539, "Audi"], [7, 89, 864, "BMW"], [2, 13, 1026, "Bugatti"]];
+
+ plot1 = $.jqplot('chart1',[arr],{
+ title: 'Transparent Bubbles',
+ seriesDefaults:{
+ renderer: $.jqplot.BubbleRenderer,
+ rendererOptions: {
+ bubbleAlpha: 0.6,
+ highlightAlpha: 0.8
+ },
+ shadow: true,
+ shadowAlpha: 0.05
+ }
+ });
+});</script>
+
+<script class="code" language="javascript" type="text/javascript">$(document).ready(function(){
+
+ var arr = [[11, 123, 1236, "Acura"], [45, 92, 1067, "Alfa Romeo"],
+ [24, 104, 1176, "AM General"], [50, 23, 610, "Aston Martin Lagonda"],
+ [18, 17, 539, "Audi"], [7, 89, 864, "BMW"], [2, 13, 1026, "Bugatti"]];
+
+ plot1b = $.jqplot('chart1b',[arr],{
+ title: 'Tooltip and Custom Legend Highlighting',
+ seriesDefaults:{
+ renderer: $.jqplot.BubbleRenderer,
+ rendererOptions: {
+ bubbleAlpha: 0.6,
+ highlightAlpha: 0.8,
+ showLabels: false
+ },
+ shadow: true,
+ shadowAlpha: 0.05
+ }
+ });
+
+ // Legend is a simple table in the html.
+ // Now populate it with the labels from each data value.
+ $.each(arr, function(index, val) {
+ $('#legend1b').append('<tr><td>'+val[3]+'</td><td>'+val[2]+'</td></tr>');
+ });
+
+ // Now bind function to the highlight event to show the tooltip
+ // and highlight the row in the legend.
+ $('#chart1b').bind('jqplotDataHighlight',
+ function (ev, seriesIndex, pointIndex, data, radius) {
+ var chart_left = $('#chart1b').offset().left,
+ chart_top = $('#chart1b').offset().top,
+ x = plot1b.axes.xaxis.u2p(data[0]), // convert x axis unita to pixels on grid
+ y = plot1b.axes.yaxis.u2p(data[1]); // convert y axis units to pixels on grid
+ var color = 'rgb(50%,50%,100%)';
+ $('#tooltip1b').css({left:chart_left+x+radius+5, top:chart_top+y});
+ $('#tooltip1b').html('<span style="font-size:14px;font-weight:bold;color:'+color+';">' +
+ data[3] + '</span><br />' + 'x: '+data[0] + '<br />' + 'y: ' +
+ data[1] + '<br />' + 'r: ' + data[2]);
+ $('#tooltip1b').show();
+ $('#legend1b tr').css('background-color', '#ffffff');
+ $('#legend1b tr').eq(pointIndex+1).css('background-color', color);
+ });
+
+ // Bind a function to the unhighlight event to clean up after highlighting.
+ $('#chart1b').bind('jqplotDataUnhighlight',
+ function (ev, seriesIndex, pointIndex, data) {
+ $('#tooltip1b').empty();
+ $('#tooltip1b').hide();
+ $('#legend1b tr').css('background-color', '#ffffff');
+ });
+});</script>
+
+<script class="code" language="javascript" type="text/javascript">$(document).ready(function(){
+
+ var arr = [[11, 123, 1236, {label:"Acura", color:'sandybrown'}],
+ [45, 92, 1067, {label:"Alfa Romeo", color:'skyblue'}],
+ [24, 104, 1176, {label:"AM General", color:"salmon"}], [50, 23, 610, {color:"papayawhip"}],
+ [18, 17, 539, "Audi"], [7, 89, 864], [2, 13, 1026, "Bugatti"]];
+
+ plot1c = $.jqplot('chart1c',[arr],{
+ title: 'Bubble Data Customizations',
+ seriesDefaults:{
+ renderer: $.jqplot.BubbleRenderer
+ }
+ });
+
+});</script>
+
+<script class="code" language="javascript" type="text/javascript">$(document).ready(function(){
+
+ var arr = [[11, 123, 1236, "Acura"], [45, 92, 1067, "Alfa Romeo"],
+ [24, 104, 1176, "AM General"], [50, 23, 610, "Aston Martin Lagonda"],
+ [18, 17, 539, "Audi"], [7, 89, 864, "BMW"], [2, 13, 1026, "Bugatti"]];
+
+ plot2 = $.jqplot('chart2',[arr],{
+ title: 'Bubble Gradient Fills*',
+ seriesDefaults:{
+ renderer: $.jqplot.BubbleRenderer,
+ rendererOptions: {
+ bubbleGradients: true
+ },
+ shadow: true
+ }
+ });
+
+});</script>
+
+<script class="code" language="javascript" type="text/javascript">$(document).ready(function(){
+
+ var arr = [[44, 66, 897, "Acura"], [25, 40, 1119, "Alfa Romeo"], [2, 33, 1197, "AM General"],
+ [4, 132, 896, "Aston Martin Lagonda"], [2, 129, 314, "Audi"], [14, 47, 612, "BMW"],
+ [45, 112, 719, "Bugatti"], [11, 38, 785, "Buick"], [15, 39, 367, "Cadillac"],
+ [6, 133, 726, "Chevrolet"], [48, 84, 1082, "Citroen"], [40, 18, 1047, "DaimlerChrysler Corporation"],
+ [24, 107, 1065, "Daewoo Motor Co."], [27, 92, 792, "Delorean Motor Company"], [1, 78, 803, "Dodge"],
+ [5, 149, 320, "Ferrari"], [11, 127, 497, "Fiat"], [14, 18, 805, "Ford Motor Company"],
+ [9, 101, 394, "General Motors"], [16, 57, 338, "GMC"], [19, 89, 977, "Holden"],
+ [35, 78, 464, "Honda"], [18, 130, 364, "Hummer"], [37, 20, 699, "Hyundai"],
+ [33, 140, 457, "Infiniti"], [12, 122, 533, "Isuzu"], [25, 67, 767, "Jaguar Cars"],
+ [0, 7, 481, "Jeep"], [38, 36, 611, "Jensen Motors"], [43, 91, 943, "Kia"], [45, 21, 569, "Laforza"]];
+
+ plot3 = $.jqplot('chart3',[arr],{
+ title: 'Bubble Auto Scaling Options',
+ seriesDefaults:{
+ renderer: $.jqplot.BubbleRenderer,
+ rendererOptions: {
+ autoscalePointsFactor: -0.15,
+ autoscaleMultiplier: 0.85,
+ highlightMouseDown: true,
+ bubbleAlpha: 0.7
+ },
+ shadow: true,
+ shadowAlpha: 0.05
+ }
+ });
+
+});</script>
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.bubbleRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/candlestick-charts.html b/wqflask/wqflask/static/packages/jqplot/examples/candlestick-charts.html
new file mode 100644
index 00000000..c0262e34
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/candlestick-charts.html
@@ -0,0 +1,209 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Open Hi Low Close and Candlestick Charts</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="bubbleChart.html">Previous</a> <a href="./">Examples</a> <a href="candlestick.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+<p>OHLC, HLC and Candlestick charts are all created using the $.jqplot.OHLCRenderer plugin. The plots on this page make use of the highlighter plugin which shows a customized tooltip as the mouse moves over a data point.</p>
+<div id="chart1" style="height:250px; width:600px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+<div id="chart2" style="height:250px; width:600px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+<p>The previous plots use the following data set. jqPlot will parse most human readable date formats. It is always safest, however, to pass a date in as a JavaScript timestamp rather than have jqPlot parse an arbitrary date string.</p>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+<script class="code" language="javascript" type="text/javascript">
+$(document).ready(function(){
+ // Note, the ohlc data is specified below
+ var plot1 = $.jqplot('chart1',[ohlc],{
+ // use the y2 axis on the right of the plot
+ //rather than the y axis on the left.
+ seriesDefaults:{yaxis:'y2axis'},
+ axes: {
+ xaxis: {
+ renderer:$.jqplot.DateAxisRenderer,
+ tickOptions:{formatString:'%b %e'},
+ // For date axes, we can specify ticks options as human
+ // readable dates. You should be as specific as possible,
+ // however, and include a date and time since some
+ // browser treat dates without a time as UTC and some
+ // treat dates without time as local time.
+ // Generally, if a time is specified without a time zone,
+ // the browser assumes the time zone of the client.
+ min: "09-01-2008 16:00",
+ max: "06-22-2009 16:00",
+ tickInterval: "6 weeks"
+ },
+ y2axis: {
+ tickOptions:{formatString:'$%d'}
+ }
+ },
+ series: [{renderer:$.jqplot.OHLCRenderer}],
+ highlighter: {
+ show: true,
+ showMarker:false,
+ tooltipAxes: 'xy',
+ yvalues: 4,
+ // You can customize the tooltip format string of the highlighter
+ // to include any arbitrary text or html and use format string
+ // placeholders (%s here) to represent x and y values.
+ formatString:'<table class="jqplot-highlighter"> \
+ <tr><td>date:</td><td>%s</td></tr> \
+ <tr><td>open:</td><td>%s</td></tr> \
+ <tr><td>hi:</td><td>%s</td></tr> \
+ <tr><td>low:</td><td>%s</td></tr> \
+ <tr><td>close:</td><td>%s</td></tr></table>'
+ }
+ });
+
+});
+</script>
+
+<script class="code" language="javascript" type="text/javascript">
+$(document).ready(function(){
+ var plot2 = $.jqplot('chart2',[ohlc],{
+ seriesDefaults:{yaxis:'y2axis'},
+ axes: {
+ xaxis: {
+ renderer:$.jqplot.DateAxisRenderer,
+ tickOptions:{formatString:'%b %e'},
+ min: "09-01-2008",
+ max: "06-22-2009",
+ tickInterval: "6 weeks"
+ },
+ y2axis: {
+ tickOptions:{formatString:'$%d'}
+ }
+ },
+ // To make a candle stick chart, set the "candleStick" option to true.
+ series: [
+ {
+ renderer:$.jqplot.OHLCRenderer,
+ rendererOptions:{ candleStick:true }
+ }
+ ],
+ highlighter: {
+ show: true,
+ showMarker:false,
+ tooltipAxes: 'xy',
+ yvalues: 4,
+ formatString:'<table class="jqplot-highlighter"> \
+ <tr><td>date:</td><td>%s</td></tr> \
+ <tr><td>open:</td><td>%s</td></tr> \
+ <tr><td>hi:</td><td>%s</td></tr> \
+ <tr><td>low:</td><td>%s</td></tr> \
+ <tr><td>close:</td><td>%s</td></tr></table>'
+ }
+ });
+
+});
+</script>
+
+
+<script class="code" language="javascript" type="text/javascript">
+ohlc = [
+ ['06/15/2009 16:00:00', 136.01, 139.5, 134.53, 139.48],
+ ['06/08/2009 16:00:00', 143.82, 144.56, 136.04, 136.97],
+ ['06/01/2009 16:00:00', 136.47, 146.4, 136, 144.67],
+ ['05/26/2009 16:00:00', 124.76, 135.9, 124.55, 135.81],
+ ['05/18/2009 16:00:00', 123.73, 129.31, 121.57, 122.5],
+ ['05/11/2009 16:00:00', 127.37, 130.96, 119.38, 122.42],
+ ['05/04/2009 16:00:00', 128.24, 133.5, 126.26, 129.19],
+ ['04/27/2009 16:00:00', 122.9, 127.95, 122.66, 127.24],
+ ['04/20/2009 16:00:00', 121.73, 127.2, 118.6, 123.9],
+ ['04/13/2009 16:00:00', 120.01, 124.25, 115.76, 123.42],
+ ['04/06/2009 16:00:00', 114.94, 120, 113.28, 119.57],
+ ['03/30/2009 16:00:00', 104.51, 116.13, 102.61, 115.99],
+ ['03/23/2009 16:00:00', 102.71, 109.98, 101.75, 106.85],
+ ['03/16/2009 16:00:00', 96.53, 103.48, 94.18, 101.59],
+ ['03/09/2009 16:00:00', 84.18, 97.2, 82.57, 95.93],
+ ['03/02/2009 16:00:00', 88.12, 92.77, 82.33, 85.3],
+ ['02/23/2009 16:00:00', 91.65, 92.92, 86.51, 89.31],
+ ['02/17/2009 16:00:00', 96.87, 97.04, 89, 91.2],
+ ['02/09/2009 16:00:00', 100, 103, 95.77, 99.16],
+ ['02/02/2009 16:00:00', 89.1, 100, 88.9, 99.72],
+ ['01/26/2009 16:00:00', 88.86, 95, 88.3, 90.13],
+ ['01/20/2009 16:00:00', 81.93, 90, 78.2, 88.36],
+ ['01/12/2009 16:00:00', 90.46, 90.99, 80.05, 82.33],
+ ['01/05/2009 16:00:00', 93.17, 97.17, 90.04, 90.58],
+ ['12/29/2008 16:00:00', 86.52, 91.04, 84.72, 90.75],
+ ['12/22/2008 16:00:00', 90.02, 90.03, 84.55, 85.81],
+ ['12/15/2008 16:00:00', 95.99, 96.48, 88.02, 90],
+ ['12/08/2008 16:00:00', 97.28, 103.6, 92.53, 98.27],
+ ['12/01/2008 16:00:00', 91.3, 96.23, 86.5, 94],
+ ['11/24/2008 16:00:00', 85.21, 95.25, 84.84, 92.67],
+ ['11/17/2008 16:00:00', 88.48, 91.58, 79.14, 82.58],
+ ['11/10/2008 16:00:00', 100.17, 100.4, 86.02, 90.24],
+ ['11/03/2008 16:00:00', 105.93, 111.79, 95.72, 98.24],
+ ['10/27/2008 16:00:00', 95.07, 112.19, 91.86, 107.59],
+ ['10/20/2008 16:00:00', 99.78, 101.25, 90.11, 96.38],
+ ['10/13/2008 16:00:00', 104.55, 116.4, 85.89, 97.4],
+ ['10/06/2008 16:00:00', 91.96, 101.5, 85, 96.8],
+ ['09/29/2008 16:00:00', 119.62, 119.68, 94.65, 97.07],
+ ['09/22/2008 16:00:00', 139.94, 140.25, 123, 128.24],
+ ['09/15/2008 16:00:00', 142.03, 147.69, 120.68, 140.91]
+];
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.min.js"></script>
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.ohlcRenderer.min.js"></script>
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.highlighter.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/candlestick.html b/wqflask/wqflask/static/packages/jqplot/examples/candlestick.html
new file mode 100644
index 00000000..b213d6ec
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/candlestick.html
@@ -0,0 +1,322 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Candlestick and Open Hi Low Close charts</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="candlestick-charts.html">Previous</a> <a href="./">Examples</a> <a href="canvas-overlay.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+<div id="chart1" class="code" style="margin:20px;height:240px; width:640px;"></div>
+<pre class="code brush:js"></pre>
+<div id="chart2" class="code" style="margin:20px;height:240px; width:640px;"></div>
+<pre class="code brush:js"></pre>
+<div id="chart2b" class="code" style="margin:20px;height:240px; width:640px;"></div>
+<pre class="code brush:js"></pre>
+<div id="chart3" class="code" style="margin:20px;height:240px; width:640px;"></div>
+<pre class="code brush:js"></pre>
+<div id="chart4" class="code" style="margin:20px;height:320px; width:500px;"></div>
+<pre class="code brush:js"></pre>
+<p>The examples on this page use the folowing code:</p>
+<pre class="common brush:js"></pre>
+
+<script class="common" type="text/javascript">
+
+ ohlc = [['07/06/2009', 138.7, 139.68, 135.18, 135.4],
+ ['06/29/2009', 143.46, 144.66, 139.79, 140.02],
+ ['06/22/2009', 140.67, 143.56, 132.88, 142.44],
+ ['06/15/2009', 136.01, 139.5, 134.53, 139.48],
+ ['06/08/2009', 143.82, 144.56, 136.04, 136.97],
+ ['06/01/2009', 136.47, 146.4, 136, 144.67],
+ ['05/26/2009', 124.76, 135.9, 124.55, 135.81],
+ ['05/18/2009', 123.73, 129.31, 121.57, 122.5],
+ ['05/11/2009', 127.37, 130.96, 119.38, 122.42],
+ ['05/04/2009', 128.24, 133.5, 126.26, 129.19],
+ ['04/27/2009', 122.9, 127.95, 122.66, 127.24],
+ ['04/20/2009', 121.73, 127.2, 118.6, 123.9],
+ ['04/13/2009', 120.01, 124.25, 115.76, 123.42],
+ ['04/06/2009', 114.94, 120, 113.28, 119.57],
+ ['03/30/2009', 104.51, 116.13, 102.61, 115.99],
+ ['03/23/2009', 102.71, 109.98, 101.75, 106.85],
+ ['03/16/2009', 96.53, 103.48, 94.18, 101.59],
+ ['03/09/2009', 84.18, 97.2, 82.57, 95.93],
+ ['03/02/2009', 88.12, 92.77, 82.33, 85.3],
+ ['02/23/2009', 91.65, 92.92, 86.51, 89.31],
+ ['02/17/2009', 96.87, 97.04, 89, 91.2],
+ ['02/09/2009', 100, 103, 95.77, 99.16],
+ ['02/02/2009', 89.1, 100, 88.9, 99.72],
+ ['01/26/2009', 88.86, 95, 88.3, 90.13],
+ ['01/20/2009', 81.93, 90, 78.2, 88.36],
+ ['01/12/2009', 90.46, 90.99, 80.05, 82.33],
+ ['01/05/2009', 93.17, 97.17, 90.04, 90.58],
+ ['12/29/2008', 86.52, 91.04, 84.72, 90.75],
+ ['12/22/2008', 90.02, 90.03, 84.55, 85.81],
+ ['12/15/2008', 95.99, 96.48, 88.02, 90],
+ ['12/08/2008', 97.28, 103.6, 92.53, 98.27],
+ ['12/01/2008', 91.3, 96.23, 86.5, 94],
+ ['11/24/2008', 85.21, 95.25, 84.84, 92.67],
+ ['11/17/2008', 88.48, 91.58, 79.14, 82.58],
+ ['11/10/2008', 100.17, 100.4, 86.02, 90.24],
+ ['11/03/2008', 105.93, 111.79, 95.72, 98.24],
+ ['10/27/2008', 95.07, 112.19, 91.86, 107.59],
+ ['10/20/2008', 99.78, 101.25, 90.11, 96.38],
+ ['10/13/2008', 104.55, 116.4, 85.89, 97.4],
+ ['10/06/2008', 91.96, 101.5, 85, 96.8],
+ ['09/29/2008', 119.62, 119.68, 94.65, 97.07],
+ ['09/22/2008', 139.94, 140.25, 123, 128.24],
+ ['09/15/2008', 142.03, 147.69, 120.68, 140.91],
+ ['09/08/2008', 164.57, 164.89, 146, 148.94]
+ ];
+
+ ohlc_b = [['07/06/2009', 138.7, 139.68, 135.18, 135.4, 'j'],
+ ['06/29/2009', 143.46, 144.66, 139.79, 140.02, 'q'],
+ ['06/22/2009', 140.67, 143.56, 132.88, 142.44, 'p'],
+ ['06/15/2009', 136.01, 139.5, 134.53, 139.48, 'l'],
+ ['06/08/2009', 143.82, 144.56, 136.04, 136.97, 'o'],
+ ['06/01/2009', 136.47, 146.4, 136, 144.67, 't'],
+ ['05/26/2009', 124.76, 135.9, 124.55, 135.81, '_'],
+ ['05/18/2009', 123.73, 129.31, 121.57, 122.5, 'c'],
+ ['05/11/2009', 127.37, 130.96, 119.38, 122.42, 'h'],
+ ['05/04/2009', 128.24, 133.5, 126.26, 129.19, 'a'],
+ ['04/27/2009', 122.9, 127.95, 122.66, 127.24, 'r'],
+ ['04/20/2009', 121.73, 127.2, 118.6, 123.9, 't'],
+ ['04/13/2009', 120.01, 124.25, 115.76, 123.42, 's']
+ ];
+
+ hlc = [['07/06/2009', 139.68, 135.18, 135.4],
+ ['06/29/2009', 144.66, 139.79, 140.02],
+ ['06/22/2009', 143.56, 132.88, 142.44],
+ ['06/15/2009', 139.5, 134.53, 139.48],
+ ['06/08/2009', 144.56, 136.04, 136.97],
+ ['06/01/2009', 146.4, 136, 144.67],
+ ['05/26/2009', 135.9, 124.55, 135.81],
+ ['05/18/2009', 129.31, 121.57, 122.5],
+ ['05/11/2009', 130.96, 119.38, 122.42],
+ ['05/04/2009', 133.5, 126.26, 129.19],
+ ['04/27/2009', 127.95, 122.66, 127.24],
+ ['04/20/2009', 127.2, 118.6, 123.9],
+ ['04/13/2009', 124.25, 115.76, 123.42],
+ ['04/06/2009', 120, 113.28, 119.57],
+ ['03/30/2009', 116.13, 102.61, 115.99],
+ ['03/23/2009', 109.98, 101.75, 106.85],
+ ['03/16/2009', 103.48, 94.18, 101.59],
+ ['03/09/2009', 97.2, 82.57, 95.93],
+ ['03/02/2009', 92.77, 82.33, 85.3],
+ ['02/23/2009', 92.92, 86.51, 89.31],
+ ['02/17/2009', 97.04, 89, 91.2],
+ ['02/09/2009', 103, 95.77, 99.16],
+ ['02/02/2009', 100, 88.9, 99.72],
+ ['01/26/2009', 95, 88.3, 90.13],
+ ['01/20/2009', 90, 78.2, 88.36],
+ ['01/12/2009', 90.99, 80.05, 82.33],
+ ['01/05/2009', 97.17, 90.04, 90.58],
+ ['12/29/2008', 91.04, 84.72, 90.75],
+ ['12/22/2008', 90.03, 84.55, 85.81],
+ ['12/15/2008', 96.48, 88.02, 90],
+ ['12/08/2008', 103.6, 92.53, 98.27],
+ ['12/01/2008', 96.23, 86.5, 94],
+ ['11/24/2008', 95.25, 84.84, 92.67],
+ ['11/17/2008', 91.58, 79.14, 82.58],
+ ['11/10/2008', 100.4, 86.02, 90.24],
+ ['11/03/2008', 111.79, 95.72, 98.24],
+ ['10/27/2008', 112.19, 91.86, 107.59],
+ ['10/20/2008', 101.25, 90.11, 96.38],
+ ['10/13/2008', 116.4, 85.89, 97.4],
+ ['10/06/2008', 101.5, 85, 96.8],
+ ['09/29/2008', 119.68, 94.65, 97.07],
+ ['09/22/2008', 140.25, 123, 128.24],
+ ['09/15/2008', 147.69, 120.68, 140.91],
+ ['09/08/2008', 164.89, 146, 148.94]
+ ];
+
+</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ $.jqplot.config.enablePlugins = true;
+ plot1 = $.jqplot('chart1',[ohlc],{
+ title: 'Chart',
+ axesDefaults:{},
+ axes: {
+ xaxis: {
+ renderer:$.jqplot.DateAxisRenderer
+ },
+ yaxis: {
+ tickOptions:{ prefix: '$' }
+ }
+ },
+ series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{}}],
+ cursor:{
+ zoom:true,
+ tooltipOffset: 10,
+ tooltipLocation: 'nw'
+ }
+ });
+});</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ plot2 = $.jqplot('chart2',[ohlc],{
+ title: 'Chart',
+ axesDefaults:{},
+ axes: {
+ xaxis: {
+ renderer:$.jqplot.DateAxisRenderer
+ },
+ yaxis: {
+ tickOptions:{ prefix: '$' }
+ }
+ },
+ series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}],
+ cursor:{
+ zoom:true,
+ tooltipOffset: 10,
+ tooltipLocation: 'nw'
+ },
+ highlighter: {
+ showMarker:false,
+ tooltipAxes: 'xy',
+ yvalues: 4,
+ formatString:'<table class="jqplot-highlighter"> \
+ <tr><td>date:</td><td>%s</td></tr> \
+ <tr><td>open:</td><td>%s</td></tr> \
+ <tr><td>hi:</td><td>%s</td></tr> \
+ <tr><td>low:</td><td>%s</td></tr> \
+ <tr><td>close:</td><td>%s</td></tr></table>'
+ }
+ });
+});</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ plot2b = $.jqplot('chart2b',[ohlc_b],{
+ title: 'Chart',
+ axesDefaults:{},
+ axes: {
+ xaxis: {
+ renderer:$.jqplot.DateAxisRenderer
+ },
+ yaxis: {
+ tickOptions:{ prefix: '$' }
+ }
+ },
+ series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}],
+ cursor:{
+ zoom:false,
+ tooltipOffset: 10,
+ tooltipLocation: 'nw'
+ },
+ highlighter: {
+ showMarker:false,
+ tooltipAxes: 'xy',
+ yvalues: 5,
+ formatString:'<table class="jqplot-highlighter"> \
+ <tr><td>date:</td><td>%s</td></tr> \
+ <tr><td>open:</td><td>%s</td></tr> \
+ <tr><td>hi:</td><td>%s</td></tr> \
+ <tr><td>low:</td><td>%s</td></tr> \
+ <tr><td>close:</td><td>%s</td></tr> \
+ <tr><td>letter:</td><td>%s</td></tr></table>'
+ }
+ });
+});</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ plot3 = $.jqplot('chart3',[hlc],{
+ title: 'Chart',
+ axesDefaults:{},
+ axes: {
+ xaxis: {
+ renderer:$.jqplot.DateAxisRenderer
+ },
+ yaxis: {
+ tickOptions:{ prefix: '$' }
+ }
+ },
+ series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{}}],
+ cursor:{
+ zoom:true,
+ tooltipOffset: 10,
+ tooltipLocation: 'nw'
+ }
+ });
+});</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ var catOHLC = [[1, 138.7, 139.68, 135.18, 135.4],
+ [2, 143.46, 144.66, 139.79, 140.02],
+ [3, 140.67, 143.56, 132.88, 142.44],
+ [4, 136.01, 139.5, 134.53, 139.48],
+ [5, 143.82, 144.56, 136.04, 136.97],
+ [6, 136.47, 146.4, 136, 144.67],
+ [7, 124.76, 135.9, 124.55, 135.81],
+ [8, 123.73, 129.31, 121.57, 122.5]];
+
+ var ticks = ['Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Mon', 'Tue'];
+
+ plot4 = $.jqplot('chart4',[catOHLC],{
+ axes: {
+ xaxis: {
+ renderer:$.jqplot.CategoryAxisRenderer,
+ ticks:ticks
+ },
+ yaxis: {
+ tickOptions:{ prefix: '$' }
+ }
+ },
+ series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}]
+ });
+});</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.ohlcRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.highlighter.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.cursor.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/canvas-overlay.html b/wqflask/wqflask/static/packages/jqplot/examples/canvas-overlay.html
new file mode 100644
index 00000000..c1ff2f00
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/canvas-overlay.html
@@ -0,0 +1,231 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Draw Lines on Plots - Canvas Overlay</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="candlestick.html">Previous</a> <a href="./">Examples</a> <a href="cursor-highlighter.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+
+ <div id="chart1" style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
+ <button onclick="lineup()">Up</button>
+ <button onclick="linedown()">Down</button>
+
+<pre class="code prettyprint brush: js"></pre>
+
+ <div id="chart2" style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
+<pre class="code prettyprint brush: js"></pre>
+
+
+ <script class="code" type="text/javascript">
+$(document).ready(function(){
+ var s1 = [[2009, 3.5], [2010, 4.4], [2011, 6.0], [2012, 9.1], [2013, 12.0], [2014, 14.4]];
+
+ var grid = {
+ gridLineWidth: 1.5,
+ gridLineColor: 'rgb(235,235,235)',
+ drawGridlines: true
+ };
+
+ plot1 = $.jqplot('chart1', [s1], {
+ series:[{
+ renderer:$.jqplot.BarRenderer,
+ rendererOptions: {
+ barWidth: 30
+ }
+ }],
+ axes: {
+ xaxis: {
+ renderer: $.jqplot.CategoryAxisRenderer
+ }
+ },
+ grid: grid,
+ canvasOverlay: {
+ show: true,
+ objects: [
+ {horizontalLine: {
+ name: 'barney',
+ y: 4,
+ lineWidth: 6,
+ color: 'rgb(100, 55, 124)',
+ shadow: false
+ }},
+ {horizontalLine: {
+ name: 'fred',
+ y: 6,
+ lineWidth: 12,
+ xminOffset: '8px',
+ xmaxOffset: '29px',
+ color: 'rgb(50, 55, 30)',
+ shadow: false
+ }},
+ {dashedHorizontalLine: {
+ name: 'wilma',
+ y: 8,
+ lineWidth: 2,
+ xOffset: '54',
+ color: 'rgb(133, 120, 24)',
+ shadow: false
+ }},
+ {horizontalLine: {
+ name: 'pebbles',
+ y: 10,
+ lineWidth: 3,
+ xOffset: 0,
+ color: 'rgb(89, 198, 154)',
+ shadow: false
+ }},
+ {dashedHorizontalLine: {
+ name: 'bam-bam',
+ y: 14,
+ lineWidth: 5,
+ dashPattern: [16, 12],
+ lineCap: 'round',
+ xOffset: '20',
+ color: 'rgb(66, 98, 144)',
+ shadow: false
+ }}
+ ]
+ }
+ });
+});
+
+function lineup() {
+ var co = plot1.plugins.canvasOverlay;
+ var line = co.get('fred');
+ line.options.y += 1;
+ co.draw(plot1);
+}
+
+function linedown() {
+ var co = plot1.plugins.canvasOverlay;
+ var line = co.get('fred');
+ line.options.y -= 1;
+ co.draw(plot1);
+}
+
+ </script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var s2 = [[9, 3.5], [15, 4.4], [22, 6.0], [38, 9.1], [51, 12.0], [62, 14.4]];
+
+ var grid = {
+ gridLineWidth: 1.5,
+ gridLineColor: 'rgb(235,235,235)',
+ drawGridlines: true
+ };
+
+ plot2 = $.jqplot('chart2', [s2], {
+ grid: grid,
+ canvasOverlay: {
+ show: true,
+ objects: [
+ {verticalLine: {
+ name: 'barney',
+ x: 10,
+ lineWidth: 6,
+ color: 'rgb(100, 55, 124)',
+ shadow: false
+ }},
+ {verticalLine: {
+ name: 'fred',
+ x: 15,
+ lineWidth: 12,
+ yminOffset: '8px',
+ ymaxOffset: '29px',
+ color: 'rgb(50, 55, 30)',
+ shadow: false
+ }},
+ {dashedVerticalLine: {
+ name: 'wilma',
+ x: 20,
+ lineWidth: 2,
+ yOffset: '14',
+ color: 'rgb(133, 120, 24)',
+ shadow: false
+ }},
+ {verticalLine: {
+ name: 'pebbles',
+ x: 35,
+ lineWidth: 3,
+ yOffset: 0,
+ lineCap: 'butt',
+ color: 'rgb(89, 198, 154)',
+ shadow: false
+ }},
+ {dashedVerticalLine: {
+ name: 'bam-bam',
+ x: 45,
+ lineWidth: 5,
+ dashPattern: [16, 12],
+ lineCap: 'round',
+ yOffset: '20px',
+ color: 'rgb(66, 98, 144)',
+ shadow: false
+ }}
+ ]
+ }
+ });
+
+});
+
+
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.min.js"></script>
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasOverlay.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/README b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/README
new file mode 100644
index 00000000..a0a0cc5a
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/README
@@ -0,0 +1,140 @@
+jQuery.colorpicker v0.6
+
+Copyright (c) 2011 Martijn W. van der Lee
+Licensed under the MIT.
+
+Full-featured colorpicker for jQueryUI with full theming support.
+Most images from jPicker by Christopher T. Tillman.
+Sourcecode created from scratch by Martijn W. van der Lee.
+
+IE support; make sure you have a doctype defined, or the colorpicker will not display correctly.
+
+Options:
+ alpha: false
+ Whether or not to show the inputs for alpha.
+
+ altAlpha: true
+ Change the opacity of the altField element(s) according to the alpha
+ setting.
+
+ altField: ''
+ Change the background color of the elements specified in this element.
+
+ altOnChange: true
+ If true, the altField element(s) are updated on every change, otherwise
+ only upon closing.
+
+ altProperties: 'background-color'
+ Comma-separated list of CSS properties to set color of in the altField.
+ The following properties are allowed, all others are ignored.
+ background-color
+ color
+ border-color
+ outline-color
+
+ autoOpen: false
+ If true, the dialog opens automatically upon page load.
+
+ buttonColorize: false
+ If a buttonimage is specified, change the background color of the
+ image when the color is changed.
+
+ buttonImage: 'images/ui-colorpicker.png'
+ Same as jQueryUI DatePicker.
+
+ buttonImageOnly: false
+ Same as jQueryUI DatePicker.
+
+ buttonText: 'Color'
+ Same as jQueryUI DatePicker.
+
+ closeOnOutside: true
+ Close the window when clicking outside the colorpicker display.
+
+ color: '#00FF00'
+ Initial color. Formats recognized are:
+ #rrggbb
+ rrggbb (same as previous, but without the #)
+ rgb(rrr,ggg,bbb)
+ rgba(rrr,ggg,bbb,a.a)
+ rgb(rrr%,ggg%,bbb%)
+ rgba(rrr%,ggg%,bbb%,aaa%)
+ w3c-defined color name
+
+ duration: 'fast'
+ Same as jQueryUI DatePicker.
+
+ hsv: true
+ Whether or not to show the inputs for HSV.
+
+ layout: { ... }
+ Set the position of elements in a table layout.
+ You could create any layout possible with HTML tables by specifying cell
+ position and size of each part.
+ @todo document how this works.
+
+ limit: ''
+ Limit the selectable colors to any of the predefined limits:
+ '' No limitations, allow 8bpp color for a palette of all
+ 16 million colors.
+ 'websafe' Set of 216 colors composed of 00, 33, 66, 99, cc and ff
+ color channel values in #rrggbb.
+ 'nibble' 4 bits per color, can be easily converted to #rgb format.
+ The palette is limited to 4096 colors.
+ 'binary' Allow only #00 or #ff as color channel values for primary
+ colors only; only 8 colors are available with this limit.
+
+ mode: 'h'
+ Determines the functionality of the map and bar components. Allowed values
+ are; 'h', 's', 'l', 'r', 'g', 'b' or 'a', for hue, saturation, luminosity,
+ red, green, blue and alpha respectively.
+
+ parts: ''
+ Determine which parts to display.
+ Use any of the preset names ('full', 'popup' or 'inline') or specify
+ an array of part names (i.e. ['header', 'map', 'bar', 'hex', 'inputs',
+ 'preview', 'swatches', 'footer']). If an empty string is given, the parts
+ will be automatically chosen as preset 'popup' or 'inline' depending on
+ the context in which the colorpicker is used.
+
+ rgb: true, // Show RGB controls and modes
+ Whether or not to show the inputs for RGB.
+
+ showAnim: 'fadeIn'
+ Same as jQueryUI DatePicker.
+
+ showOn: 'focus'
+ Same as jQueryUI DatePicker.
+
+ showOptions: {}
+ Same as jQueryUI DatePicker.
+
+ swatches: null
+ 'null' to show swatches of HTML colors or provide your own object
+ with colornames and [r,g,b] array.
+ For example { 'red': [ 255, 0, 0 ], 'blue': [0, 0, 255] }
+
+ title: 'Pick a color'
+ Title to display in the header.
+
+Events:
+ onClose: null
+ Triggered when the popup is closed.
+
+ onSelect: null
+ Triggered on each change, confirmation (click on OK button) and
+ cancellation (click on Cancel, outside window or window close button)
+ respectively.
+ Note that onSelect may be triggered in rapid succession when dragging the
+ mouse accross the map or bar and may be triggered without a change in color
+ upon specific user interactions.
+
+Methods:
+ open
+ Open the dialog
+
+ close
+ Close the dialog
+
+ destroy
+ Destroy the widget \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/TODO b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/TODO
new file mode 100644
index 00000000..acc10df3
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/TODO
@@ -0,0 +1,14 @@
+Make simple blog page + demo
+
+Post to...
+ http://wiki.jqueryui.com/w/page/12137750/ColorPicker
+ - screenshot
+ - link(s)
+ - check specs/requirements and add/fix them
+
+Colorwheel
+Triangle/wheel
+Related-colors swatching
+Configurable swatch layout
+ container-width/height, swatch-width/height
+ Autoscaling (table?) \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/bar-alpha.png b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/bar-alpha.png
new file mode 100644
index 00000000..2950daeb
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/bar-alpha.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/bar-opacity.png b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/bar-opacity.png
new file mode 100644
index 00000000..e42ad081
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/bar-opacity.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/bar-pointer.png b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/bar-pointer.png
new file mode 100644
index 00000000..6e980cfa
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/bar-pointer.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/bar.png b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/bar.png
new file mode 100644
index 00000000..80eb2bbe
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/bar.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/map-opacity.png b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/map-opacity.png
new file mode 100644
index 00000000..6756cee6
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/map-opacity.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/map-pointer.png b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/map-pointer.png
new file mode 100644
index 00000000..64992968
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/map-pointer.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/map.png b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/map.png
new file mode 100644
index 00000000..853d38c6
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/map.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/preview-opacity.png b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/preview-opacity.png
new file mode 100644
index 00000000..0dd9a2f8
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/preview-opacity.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/ui-colorpicker.png b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/ui-colorpicker.png
new file mode 100644
index 00000000..e244c689
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/ui-colorpicker.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/index.html b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/index.html
new file mode 100644
index 00000000..a3f14211
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/index.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+ <head>
+ <title>jqcp</title>
+ <!-- jQuery/jQueryUI (hosted) -->
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.js"></script>
+ <script src="http://jqueryui.com/themeroller/themeswitchertool/"></script>
+ <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/ui-lightness/jquery-ui.css" rel="stylesheet" type="text/css"/>
+ <!--link href="aristo/Aristo.css" rel="stylesheet" type="text/css"/-->
+ <style>
+ body {
+ font-family: 'Segoe UI', Verdana, Arial, Helvetica, sans-serif;
+ font-size: 62.5%;
+ }
+
+ #switcher {
+ float: right;
+ display: inline-block;
+ }
+ </style>
+ <script src="jquery.colorpicker.js"></script>
+ <link href="jquery.colorpicker.css" rel="stylesheet" type="text/css"/>
+ <script>
+ $( function() {
+ $('#switcher').themeswitcher();
+
+ $('#cp1').colorpicker({
+ onClose: function(hex, rgba, inst) {
+
+ },
+ onSelect: function(hex, rgba, inst) {
+ //console.log(hex);
+ //console.log(rgba);
+ //console.log(inst);
+ },
+ showOn: 'both',
+ showHeader: true,
+ showSwatches: true,
+ buttonColorize: true,
+ altField: '.cp1-alt',
+ altProperties: 'background-color,color'
+ });
+
+ $('#cp2').colorpicker({
+ alpha: true,
+ showButtonPanel: true
+ });
+
+ var cpb = $('#cp-buttons').colorpicker({
+ showOn: '',
+ parts: ['bar', 'map']
+ });
+ $('#cp-button-open').click( function() {
+ cpb.colorpicker('open');
+ });
+ $('#cp-button-close').click( function() {
+ cpb.colorpicker('close');
+ });
+ $('#cp-button-disable').click( function() {
+ cpb.colorpicker('disable');
+ });
+ });
+ </script>
+ </head>
+ <body>
+ <div id="switcher"></div>
+
+ Color: <input type="color" id="cp1" value="ff9900"/>
+ <div class="cp1-alt" style="border: 1px inset; width: 180px; height: 60px;">
+ <div style=" background-color: white; border: 1px solid black; margin: 5px; padding: 5px; font-size: 20px; font-weight: bold;">Text</div>
+ </div>
+
+ <hr/>
+
+ Inline:<div id="cp2"></div>
+
+ <hr/>
+
+ Activated by buttons: <input type="color" id="cp-buttons" value="927abc"/>
+ <br/><button id="cp-button-open">Open</button>
+ <br/><button id="cp-button-close">Close</button>
+ <br/><button id="cp-button-disable">Disable</button>
+ </body>
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/jquery.colorpicker.css b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/jquery.colorpicker.css
new file mode 100644
index 00000000..4e61a526
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/jquery.colorpicker.css
@@ -0,0 +1,129 @@
+.ui-colorpicker {
+ display: inline-block;
+ width: auto;
+}
+
+.ui-colorpicker-inline {
+ position: static;
+}
+
+.ui-colorpicker .ui-colorpicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-colorpicker .ui-colorpicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-colorpicker .ui-colorpicker-buttonpane button.ui-colorpicker-current { float:left; }
+
+.ui-colorpicker table {
+ font-size: 100%; /* Reset browser table font-size */
+ margin: 0;
+}
+
+.ui-colorpicker table td {
+ vertical-align: top;
+}
+
+.ui-colorpicker-padding-left {
+ padding-left: 10px;
+}
+.ui-colorpicker-padding-top {
+ padding-top: 10px;
+}
+
+.ui-colorpicker-border {
+ border: 1px inset;
+ display: inline-block;
+}
+
+/* Bar & map */
+#ui-colorpicker-map > *,
+#ui-colorpicker-bar > * {
+ position: absolute;
+ cursor: crosshair;
+}
+
+#ui-colorpicker-map-pointer,
+#ui-colorpicker-bar-pointer {
+ position: absolute;
+}
+/* Map */
+#ui-colorpicker-map,
+#ui-colorpicker-map > * {
+ display: block;
+ width: 256px;
+ height: 256px;
+ overflow: hidden;
+}
+
+#ui-colorpicker-map-layer-1,
+#ui-colorpicker-map-layer-2 { background: url(images/map.png) no-repeat; }
+#ui-colorpicker-map-layer-alpha { background: url(images/map-opacity.png); }
+#ui-colorpicker-map-pointer { display: inline-block; width: 15px; height: 15px; background: url(images/map-pointer.png) no-repeat; }
+
+
+/* Bar */
+#ui-colorpicker-bar,
+#ui-colorpicker-bar > * {
+ display: block;
+ width: 20px;
+ height: 256px;
+ overflow: hidden;
+ background-repeat: repeat-x;
+}
+
+#ui-colorpicker-bar-layer-1,
+#ui-colorpicker-bar-layer-2,
+#ui-colorpicker-bar-layer-3,
+#ui-colorpicker-bar-layer-4 { background: url(images/bar.png) repeat-x; }
+#ui-colorpicker-bar-layer-alpha { background: url(images/bar-opacity.png); }
+#ui-colorpicker-bar-layer-alphabar { background: url(images/bar-alpha.png); }
+#ui-colorpicker-bar-pointer { display: inline-block; width: 20px; height: 7px; background: url(images/bar-pointer.png) no-repeat; }
+
+/* Preview */
+#ui-colorpicker-preview {
+ text-align: center;
+}
+
+#ui-colorpicker-preview-initial {
+ cursor: pointer;
+}
+
+#ui-colorpicker-preview-initial,
+#ui-colorpicker-preview-current {
+ width: 50px;
+ height: 20px;
+ display: inline-block;
+}
+
+#ui-colorpicker-preview-initial-alpha,
+#ui-colorpicker-preview-current-alpha {
+ width: 50px;
+ height: 20px;
+ display: inline-block;
+ background: url(images/preview-opacity.png) repeat;
+}
+
+/* Inputs */
+#ui-colorpicker-inputs label {
+ width: 1.5em;
+ display: inline-block;
+}
+
+/* Hex */
+#ui-colorpicker-hex {
+ text-align: center;
+}
+
+/* Swatches */
+#ui-colorpicker-swatches {
+ width: 84px;
+ height: 256px;
+ overflow: auto;
+ background-color: #f8f8f8;
+}
+
+.ui-colorpicker-swatch {
+ cursor: pointer;
+ float: left;
+ width: 11px;
+ height: 11px;
+ border-right: 1px solid black;
+ border-bottom: 1px solid black;
+}
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/jquery.colorpicker.js b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/jquery.colorpicker.js
new file mode 100644
index 00000000..6ad9a564
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/colorpicker/jquery.colorpicker.js
@@ -0,0 +1,1654 @@
+/*jslint devel: true, bitwise: true, regexp: true, browser: true, confusion: true, unparam: true, eqeq: true, white: true, nomen: true, plusplus: true, maxerr: 50, indent: 4 */
+/*globals jQuery */
+
+/*
+ * ColorPicker v0.6
+ *
+ * Copyright (c) 2011 Martijn W. van der Lee
+ * Licensed under the MIT.
+ *
+ * Full-featured colorpicker for jQueryUI with full theming support.
+ * Most images from jPicker by Christopher T. Tillman.
+ * Sourcecode created from scratch by Martijn W. van der Lee.
+ *
+ * @todo Custom buttons ->none" -> special "none" state?
+ * @todo Undo/redo memory?
+ * @todo Small size variant (128x128)
+ * @todo Distance between rgb/hsv/a options
+ * @todo Force hex correction (limit and padding) upon done
+ * @todo if limit, correct initial color upon open
+ * @todo Shared swatches; cookies/session/global
+ * @todo Language files: Done/Color/Pick a color/H/S/V/R/G/B/A/color swatches
+ * @todo isRTL? What to RTL, besides button?
+ * @todo Implement 'disabled' option
+ * @todo Include header/footer in layout?
+ * @todo Split inputs into rgb/hsv/a parts
+ * @todo Modal popup mode
+ */
+
+(function ($) {
+ "use strict";
+
+ var _container_popup = '<div class="ui-colorpicker ui-colorpicker-dialog ui-dialog ui-widget ui-widget-content ui-corner-all colorpicker-container" style="display: none;"></div>',
+
+ _container_inline = '<div class="ui-colorpicker ui-colorpicker-inline ui-dialog ui-widget ui-widget-content ui-corner-all"></div>',
+
+ _parts_lists = {
+ 'full': ['header', 'map', 'bar', 'hex', 'inputs', 'preview', 'swatches', 'footer'],
+ 'popup': ['map', 'bar', 'hex', 'inputs', 'preview', 'footer'],
+ 'inline': ['map', 'bar', 'hex', 'inputs', 'preview']
+ },
+
+ _colors = {
+ 'Black': [0x00, 0x00, 0x00],
+ 'DimGray': [0x69, 0x69, 0x69],
+ 'Gray': [0x80, 0x80, 0x80],
+ 'DarkGray': [0xA9, 0xA9, 0xA9],
+ 'Silver': [0xC0, 0xC0, 0xC0],
+ 'LightGrey': [0xD3, 0xD3, 0xD3],
+ 'Gainsboro': [0xDC, 0xDC, 0xDC],
+ 'WhiteSmoke': [0xF5, 0xF5, 0xF5],
+ 'White': [0xFF, 0xFF, 0xFF],
+ 'RosyBrown': [0xBC, 0x8F, 0x8F],
+ 'IndianRed': [0xCD, 0x5C, 0x5C],
+ 'Brown': [0xA5, 0x2A, 0x2A],
+ 'FireBrick': [0xB2, 0x22, 0x22],
+ 'LightCoral': [0xF0, 0x80, 0x80],
+ 'Maroon': [0x80, 0x00, 0x00],
+ 'DarkRed': [0x8B, 0x00, 0x00],
+ 'Red': [0xFF, 0x00, 0x00],
+ 'Snow': [0xFF, 0xFA, 0xFA],
+ 'Salmon': [0xFA, 0x80, 0x72],
+ 'MistyRose': [0xFF, 0xE4, 0xE1],
+ 'Tomato': [0xFF, 0x63, 0x47],
+ 'DarkSalmon': [0xE9, 0x96, 0x7A],
+ 'OrangeRed': [0xFF, 0x45, 0x00],
+ 'Coral': [0xFF, 0x7F, 0x50],
+ 'LightSalmon': [0xFF, 0xA0, 0x7A],
+ 'Sienna': [0xA0, 0x52, 0x2D],
+ 'Seashell': [0xFF, 0xF5, 0xEE],
+ 'Chocolate': [0xD2, 0x69, 0x1E],
+ 'SaddleBrown': [0x8B, 0x45, 0x13],
+ 'SandyBrown': [0xF4, 0xA4, 0x60],
+ 'PeachPuff': [0xFF, 0xDA, 0xB9],
+ 'Peru': [0xCD, 0x85, 0x3F],
+ 'Linen': [0xFA, 0xF0, 0xE6],
+ 'DarkOrange': [0xFF, 0x8C, 0x00],
+ 'Bisque': [0xFF, 0xE4, 0xC4],
+ 'BurlyWood': [0xDE, 0xB8, 0x87],
+ 'Tan': [0xD2, 0xB4, 0x8C],
+ 'AntiqueWhite': [0xFA, 0xEB, 0xD7],
+ 'NavajoWhite': [0xFF, 0xDE, 0xAD],
+ 'BlanchedAlmond': [0xFF, 0xEB, 0xCD],
+ 'PapayaWhip': [0xFF, 0xEF, 0xD5],
+ 'Orange': [0xFF, 0xA5, 0x00],
+ 'Moccasin': [0xFF, 0xE4, 0xB5],
+ 'Wheat': [0xF5, 0xDE, 0xB3],
+ 'OldLace': [0xFD, 0xF5, 0xE6],
+ 'FloralWhite': [0xFF, 0xFA, 0xF0],
+ 'Goldenrod': [0xDA, 0xA5, 0x20],
+ 'DarkGoldenrod': [0xB8, 0x86, 0x0B],
+ 'Cornsilk': [0xFF, 0xF8, 0xDC],
+ 'Gold': [0xFF, 0xD7, 0x00],
+ 'PaleGoldenrod': [0xEE, 0xE8, 0xAA],
+ 'Khaki': [0xF0, 0xE6, 0x8C],
+ 'LemonChiffon': [0xFF, 0xFA, 0xCD],
+ 'DarkKhaki': [0xBD, 0xB7, 0x6B],
+ 'Beige': [0xF5, 0xF5, 0xDC],
+ 'LightGoldenrodYellow': [0xFA, 0xFA, 0xD2],
+ 'Olive': [0x80, 0x80, 0x00],
+ 'Yellow': [0xFF, 0xFF, 0x00],
+ 'LightYellow': [0xFF, 0xFF, 0xE0],
+ 'Ivory': [0xFF, 0xFF, 0xF0],
+ 'OliveDrab': [0x6B, 0x8E, 0x23],
+ 'YellowGreen': [0x9A, 0xCD, 0x32],
+ 'DarkOliveGreen': [0x55, 0x6B, 0x2F],
+ 'GreenYellow': [0xAD, 0xFF, 0x2F],
+ 'LawnGreen': [0x7C, 0xFC, 0x00],
+ 'Chartreuse': [0x7F, 0xFF, 0x00],
+ 'DarkSeaGreen': [0x8F, 0xBC, 0x8F],
+ 'ForestGreen': [0x22, 0x8B, 0x22],
+ 'LimeGreen': [0x32, 0xCD, 0x32],
+ 'LightGreen': [0x90, 0xEE, 0x90],
+ 'PaleGreen': [0x98, 0xFB, 0x98],
+ 'DarkGreen': [0x00, 0x64, 0x00],
+ 'Green': [0x00, 0x80, 0x00],
+ 'Lime': [0x00, 0xFF, 0x00],
+ 'Honeydew': [0xF0, 0xFF, 0xF0],
+ 'MediumSeaGreen': [0x3C, 0xB3, 0x71],
+ 'SeaGreen': [0x2E, 0x8B, 0x57],
+ 'SpringGreen': [0x00, 0xFF, 0x7F],
+ 'MintCream': [0xF5, 0xFF, 0xFA],
+ 'MediumSpringGreen': [0x00, 0xFA, 0x9A],
+ 'MediumAquamarine': [0x66, 0xCD, 0xAA],
+ 'Aquamarine': [0x7F, 0xFF, 0xD4],
+ 'Turquoise': [0x40, 0xE0, 0xD0],
+ 'LightSeaGreen': [0x20, 0xB2, 0xAA],
+ 'MediumTurquoise': [0x48, 0xD1, 0xCC],
+ 'DarkSlateGray': [0x2F, 0x4F, 0x4F],
+ 'PaleTurquoise': [0xAF, 0xEE, 0xEE],
+ 'Teal': [0x00, 0x80, 0x80],
+ 'DarkCyan': [0x00, 0x8B, 0x8B],
+ 'DarkTurquoise': [0x00, 0xCE, 0xD1],
+ 'Aqua': [0x00, 0xFF, 0xFF],
+ 'Cyan': [0x00, 0xFF, 0xFF],
+ 'LightCyan': [0xE0, 0xFF, 0xFF],
+ 'Azure': [0xF0, 0xFF, 0xFF],
+ 'CadetBlue': [0x5F, 0x9E, 0xA0],
+ 'PowderBlue': [0xB0, 0xE0, 0xE6],
+ 'LightBlue': [0xAD, 0xD8, 0xE6],
+ 'DeepSkyBlue': [0x00, 0xBF, 0xFF],
+ 'SkyBlue': [0x87, 0xCE, 0xEB],
+ 'LightSkyBlue': [0x87, 0xCE, 0xFA],
+ 'SteelBlue': [0x46, 0x82, 0xB4],
+ 'AliceBlue': [0xF0, 0xF8, 0xFF],
+ 'DodgerBlue': [0x1E, 0x90, 0xFF],
+ 'SlateGray': [0x70, 0x80, 0x90],
+ 'LightSlateGray': [0x77, 0x88, 0x99],
+ 'LightSteelBlue': [0xB0, 0xC4, 0xDE],
+ 'CornflowerBlue': [0x64, 0x95, 0xED],
+ 'RoyalBlue': [0x41, 0x69, 0xE1],
+ 'MidnightBlue': [0x19, 0x19, 0x70],
+ 'Lavender': [0xE6, 0xE6, 0xFA],
+ 'Navy': [0x00, 0x00, 0x80],
+ 'DarkBlue': [0x00, 0x00, 0x8B],
+ 'MediumBlue': [0x00, 0x00, 0xCD],
+ 'Blue': [0x00, 0x00, 0xFF],
+ 'GhostWhite': [0xF8, 0xF8, 0xFF],
+ 'DarkSlateBlue': [0x48, 0x3D, 0x8B],
+ 'SlateBlue': [0x6A, 0x5A, 0xCD],
+ 'MediumSlateBlue': [0x7B, 0x68, 0xEE],
+ 'MediumPurple': [0x93, 0x70, 0xDB],
+ 'BlueViolet': [0x8A, 0x2B, 0xE2],
+ 'Indigo': [0x4B, 0x00, 0x82],
+ 'DarkOrchid': [0x99, 0x32, 0xCC],
+ 'DarkViolet': [0x94, 0x00, 0xD3],
+ 'MediumOrchid': [0xBA, 0x55, 0xD3],
+ 'Thistle': [0xD8, 0xBF, 0xD8],
+ 'Plum': [0xDD, 0xA0, 0xDD],
+ 'Violet': [0xEE, 0x82, 0xEE],
+ 'Purple': [0x80, 0x00, 0x80],
+ 'DarkMagenta': [0x8B, 0x00, 0x8B],
+ 'Magenta': [0xFF, 0x00, 0xFF],
+ 'Fuchsia': [0xFF, 0x00, 0xFF],
+ 'Orchid': [0xDA, 0x70, 0xD6],
+ 'MediumVioletRed': [0xC7, 0x15, 0x85],
+ 'DeepPink': [0xFF, 0x14, 0x93],
+ 'HotPink': [0xFF, 0x69, 0xB4],
+ 'PaleVioletRed': [0xDB, 0x70, 0x93],
+ 'LavenderBlush': [0xFF, 0xF0, 0xF5],
+ 'Crimson': [0xDC, 0x14, 0x3C],
+ 'Pink': [0xFF, 0xC0, 0xCB],
+ 'LightPink': [0xFF, 0xB6, 0xC1]
+ };
+
+ $.widget("vanderlee.colorpicker", {
+ options: {
+ alpha: false, // Show alpha controls and mode
+ altAlpha: true, // change opacity of altField as well?
+ altField: '', // selector for DOM elements which change background color on change.
+ altOnChange: true, // true to update on each change, false to update only on close.
+ altProperties: 'background-color', // comma separated list of any of 'background-color', 'color', 'border-color', 'outline-color'
+ autoOpen: false, // Open dialog automatically upon creation
+ buttonColorize: false,
+ buttonImage: 'images/ui-colorpicker.png',
+ buttonImageOnly: false,
+ buttonText: 'Color', // Text on the button and/or title of button image.
+ closeOnOutside: true, // Close the dialog when clicking outside the dialog (not for inline)
+ color: '#00FF00', // Initial color (for inline only)
+ duration: 'fast',
+ hsv: true, // Show HSV controls and modes
+ layout: {
+ map: [0, 0, 1, 3], // Left, Top, Width, Height (in table cells).
+ bar: [1, 0, 1, 3],
+ preview: [2, 0, 1, 1],
+ inputs: [2, 1, 1, 1],
+ hex: [2, 2, 1, 1],
+ swatches: [3, 0, 1, 3]
+ },
+ limit: '', // Limit color "resolution": '', 'websafe', 'nibble', 'binary'
+ mode: 'h', // Initial editing mode, h, s, v, r, g, b or a
+ parts: '',
+ rgb: true, // Show RGB controls and modes
+ showAnim: 'fadeIn',
+ showOn: 'focus', // 'focus', 'button', 'both'
+ showOptions: {},
+ swatches: null,
+ title: 'Pick a color',
+
+ onClose: null,
+ onSelect: null
+ },
+
+ _create: function () {
+ var self = this;
+
+ self.opened = false;
+ self.generated = false;
+ self.inline = false;
+ self.changed = false;
+
+ self.dialog = null;
+ self.button = null;
+ self.image = null;
+
+ self.mode = self.options.mode;
+
+ if (self.options.swatches === null) {
+ self.options.swatches = _colors;
+ }
+
+ if (this.element[0].nodeName.toLowerCase() === 'input') {
+ if (self.element.val()) {
+ self.options.color = self.element.val();
+ }
+ self._loadColor();
+
+ $('body').append(_container_popup);
+ self.dialog = $('.ui-colorpicker:last');
+
+ // Click outside/inside
+ $(document).mousedown(function (event) {
+ if (!self.opened || event.target === self.element[0]) {
+ return;
+ }
+
+ // Check if clicked on any part of dialog
+ if ($(event.target).parents('.ui-colorpicker').length > 0) {
+ self.element.blur(); // inside window!
+ return;
+ }
+
+ // Check if clicked on button
+ var p,
+ parents = $(event.target).parents();
+ for (p in parents) {
+ if (self.button !== null && parents[p] === self.button[0]) {
+ return;
+ }
+ }
+
+ // no closeOnOutside
+ if (!self.options.closeOnOutside) {
+ return;
+ }
+
+ self.close();
+ });
+
+ if (self.options.showOn === 'focus' || self.options.showOn === 'both') {
+ self.element.focus(function () {
+ self.open();
+ });
+ }
+ if (self.options.showOn === 'button' || self.options.showOn === 'both') {
+ if (self.options.buttonImage !== '') {
+ self.image = $('<img/>').attr({
+ 'src': self.options.buttonImage,
+ 'alt': self.options.buttonText,
+ 'title': self.options.buttonText
+ });
+
+ if (self.options.buttonColorize) {
+ self.image.css('background-color', self.color.toCSS());
+ }
+ }
+
+ if (self.options.buttonImageOnly && self.image) {
+ self.button = self.image;
+ } else {
+ self.button = $('<button type="button"></button>').html(self.image || self.options.buttonText).button();
+ self.image = self.image ? $('img', self.button).first() : null;
+ }
+ self.button.insertAfter(self.element).click(function () {
+ self[self.opened ? 'close' : 'open']();
+ });
+ }
+
+ if (self.options.autoOpen) {
+ self.open();
+ }
+
+ self.element.keydown(function (event) {
+ if (event.keyCode === 9) {
+ self.close();
+ }
+ });
+
+ self.element.keyup(function (event) {
+ var rgb = self._parseHex(self.element.val());
+ if (rgb) {
+ self.color = (rgb === false ? new self.Color() : new self.Color(rgb[0], rgb[1], rgb[2]));
+ self._change();
+ }
+ });
+ } else {
+ self.inline = true;
+
+ $(this.element).html(_container_inline);
+ self.dialog = $('.ui-colorpicker', this.element);
+
+ self._generate();
+
+ self.opened = true;
+ }
+
+ return this;
+ },
+
+ destroy: function() {
+ this.element.unbind();
+
+ if (this.image !== null) {
+ this.image.remove();
+ }
+
+ if (this.button !== null) {
+ this.button.remove();
+ }
+
+ if (this.dialog !== null) {
+ this.dialog.remove();
+ }
+ },
+
+ _setOption: function(key, value){
+ var self = this;
+
+ switch (key) {
+ case "disabled":
+ if (value) {
+ self.dialog.addClass('ui-colorpicker-disabled');
+ } else {
+ self.dialog.removeClass('ui-colorpicker-disabled');
+ }
+ break;
+ }
+
+ $.Widget.prototype._setOption.apply(self, arguments);
+ },
+
+ _setAltField: function () {
+ if (this.options.altField && this.options.altProperties) {
+ var index,
+ property,
+ properties = this.options.altProperties.split(',');
+
+ for (index in properties) {
+ property = $.trim(properties[index]);
+ switch (property) {
+ case 'color':
+ case 'background-color':
+ case 'outline-color':
+ case 'border-color':
+ $(this.options.altField).css(property, this.color.toCSS());
+ break;
+ }
+ }
+
+ if (this.options.altAlpha) {
+ $(this.options.altField).css('opacity', this.color.a);
+ }
+ }
+ },
+
+ _loadColor: function () {
+ var rgb = this._parseColor(this.options.color); //@todo
+ this.color = (rgb === false ? new this.Color() : new this.Color(rgb[0], rgb[1], rgb[2]));
+ this.currentColor = $.extend({}, this.color);
+
+ this._setAltField();
+ },
+
+ _generate: function () {
+ var self = this,
+ index,
+ part,
+ parts_list;
+
+ // Determine the parts to include in this colorpicker
+ if (typeof self.options.parts === 'string') {
+ if (self.options.parts in _parts_lists) {
+ parts_list = _parts_lists[self.options.parts];
+ } else {
+ // automatic
+ parts_list = _parts_lists[self.inline ? 'inline' : 'popup'];
+ }
+ } else {
+ parts_list = self.options.parts;
+ }
+
+ // Add any parts to the internal parts list
+ self.parts = {};
+ for (index in parts_list) {
+ part = parts_list[index];
+ if (part in self._parts) {
+ self.parts[part] = new self._parts[part](self);
+ }
+ }
+
+
+ if (typeof this.color !== "object" || this.color.constructor !== this.Color) {
+ self._loadColor();
+ }
+
+ if (!self.generated) {
+ var layout_parts = [];
+
+ for (index in self.options.layout) {
+ if (index in self.parts) {
+ layout_parts.push({
+ part: index,
+ pos: self.options.layout[index]
+ });
+ }
+ }
+
+ $(self._layoutTable(layout_parts, function(cell, x, y) {
+ var classes = [];
+
+ if (x > 0) {
+ classes.push('ui-colorpicker-padding-left');
+ }
+
+ if (y > 0) {
+ classes.push('ui-colorpicker-padding-top');
+ }
+
+ return '<td id="ui-colorpicker-' + cell.part + '-container"'
+ + (cell.pos[2] > 1 ? ' colspan="' + cell.pos[2] + '"' : '')
+ + (cell.pos[3] > 1 ? ' rowspan="' + cell.pos[3] + '"' : '')
+ + (classes.length > 0 ? ' class="' + classes.join(' ') + '"' : '')
+ + ' valign="top"></td>';
+ })).appendTo(self.dialog).addClass('ui-dialog-content ui-widget-content');
+
+ self._initAllParts();
+ self._generateAllParts();
+ self.generated = true;
+ }
+ },
+
+ _layoutTable: function(layout, callback) {
+ var layout = layout.sort(function(a, b) {
+ if (a.pos[1] == b.pos[1]) {
+ return a.pos[0] - b.pos[0];
+ }
+ return a.pos[1] - b.pos[1];
+ }),
+ bitmap,
+ x,
+ y,
+ width, height,
+ columns, rows,
+ index,
+ cell,
+ html;
+
+ // Determine dimensions of the table
+ width = 0;
+ height = 0;
+ for (index in layout) {
+ width = Math.max(width, layout[index].pos[0] + layout[index].pos[2]);
+ height = Math.max(height, layout[index].pos[1] + layout[index].pos[3]);
+ }
+
+ // Initialize bitmap
+ bitmap = [];
+ for (x = 0; x < width; ++x) {
+ bitmap.push(new Array(height));
+ }
+
+ // Mark rows and columns which have layout assigned
+ rows = new Array(height);
+ columns = new Array(width);
+ for (index in layout) {
+ // mark columns
+ for (x = 0; x < layout[index].pos[2]; x += 1) {
+ columns[layout[index].pos[0] + x] = true;
+ }
+ for (y = 0; y < layout[index].pos[3]; y += 1) {
+ rows[layout[index].pos[1] + y] = true;
+ }
+ }
+
+ // Generate the table
+ html = '';
+ cell = layout[index = 0];
+ for (y = 0; y < height; ++y) {
+ html += '<tr>';
+ for (x = 0; x < width;) {
+ if (cell !== undefined && x == cell.pos[0] && y == cell.pos[1]) {
+ // Create a "real" cell
+ var w,
+ h;
+
+ html += callback(cell, x, y);
+
+ for (h = 0; h < cell.pos[3]; h +=1) {
+ for (w = 0; w < cell.pos[2]; w +=1) {
+ bitmap[x + w][y + h] = true;
+ }
+ }
+
+ x += cell.pos[2];
+ cell = layout[++index];
+ } else {
+ // Fill in the gaps
+ var colspan = 0;
+ var walked = false;
+
+ while (x < width && bitmap[x][y] === undefined && (cell === undefined || y < cell.pos[1] || (y == cell.pos[1] && x < cell.pos[0]))) {
+ if (columns[x] === true) {
+ colspan += 1;
+ }
+ walked = true;
+ x += 1;
+ }
+
+ if (colspan > 0) {
+ html += '<td colspan="'+colspan+'"></td>';
+ } else if (!walked) {
+ x += 1;
+ }
+ }
+ }
+ html += '</tr>';
+ }
+
+ return '<table cellspacing="0" cellpadding="0" border="0"><tbody>' + html + '</tbody></table>';
+ },
+
+ _effectGeneric: function (show, slide, fade, callback) {
+ var self = this;
+
+ if ($.effects && $.effects[self.options.showAnim]) {
+ self.dialog[show](self.options.showAnim, self.options.showOptions, self.options.duration, callback);
+ } else {
+ self.dialog[(self.options.showAnim === 'slideDown' ?
+ slide
+ : (self.options.showAnim === 'fadeIn' ?
+ fade
+ : show))]((self.options.showAnim ? self.options.duration : null), callback);
+ if (!self.options.showAnim || !self.options.duration) {
+ callback();
+ }
+ }
+ },
+
+ _effectShow: function (callback) {
+ this._effectGeneric('show', 'slideDown', 'fadeIn', callback);
+ },
+
+ _effectHide: function (callback) {
+ this._effectGeneric('hide', 'slideUp', 'fadeOut', callback);
+ },
+
+ open: function () {
+ if (!this.opened) {
+ this._generate();
+
+ var offset = this.element.offset(),
+ x = offset.left,
+ y = offset.top + this.element.outerHeight();
+ x -= Math.max(0, (x + this.dialog.width()) - $(window).width() + 20);
+ y -= Math.max(0, (y + this.dialog.height()) - $(window).height() + 20);
+ this.dialog.css({'left': x, 'top': y});
+
+ this._effectShow();
+ this.opened = true;
+ }
+ },
+
+ close: function () {
+ var self = this;
+
+ this._setAltField();
+
+ self.currentColor = $.extend({}, self.color);
+ self.changed = false;
+
+ // tear down the interface
+ self._effectHide(function () {
+ self.dialog.empty();
+ self.generated = false;
+
+ self.opened = false;
+ self._callback(self.options.onClose);
+ });
+ },
+
+ _callback: function (f) {
+ var self = this;
+
+ if (f instanceof Function) {
+ f(self.color.toCSS(), {
+ r: self.color.r,
+ g: self.color.g,
+ b: self.color.b,
+ a: self.color.a
+ }, self);
+ }
+ },
+
+ _generateAllParts: function () {
+ $.each(this.parts, function (index, part) {
+ part.generate();
+ });
+ },
+
+ _initAllParts: function () {
+ $.each(this.parts, function (index, part) {
+ part.init();
+ });
+ },
+
+ _change: function () {
+ this.changed = true;
+
+ switch (this.options.limit) {
+ case 'websafe':
+ this.color.limit(6);
+ break;
+
+ case 'nibble':
+ this.color.limit(16);
+ break;
+
+ case 'binary':
+ this.color.limit(2);
+ break;
+ }
+
+ // update colors
+ if (!this.inline) {
+ if (!this.color.equals(this._parseHex(this.element.val()))) {
+ this.element.val(this.color.toHex());
+ }
+
+ if (this.image && this.options.buttonColorize) {
+ this.image.css('background-color', this.color.toCSS());
+ }
+
+ if (this.options.altOnChange) {
+ this._setAltField();
+ }
+ }
+
+ // callback
+ this._callback(this.options.onSelect);
+
+ $.each(this.parts, function (index, part) {
+ part.repaint();
+ });
+ },
+
+ _intToHex: function (dec) {
+ var result = dec.toString(16);
+ if (result.length === 1) {
+ result = ('0' + result);
+ }
+ return result.toLowerCase();
+ },
+
+ // This will be deprecated by jQueryUI 1.9 widget
+ _hoverable: function (e) {
+ e.hover(function () {
+ e.addClass("ui-state-hover");
+ }, function () {
+ e.removeClass("ui-state-hover");
+ });
+ },
+
+ // This will be deprecated by jQueryUI 1.9 widget
+ _focusable: function (e) {
+ e.focus(function () {
+ e.addClass("ui-state-focus");
+ }).blur(function () {
+ e.removeClass("ui-state-focus");
+ });
+ },
+
+ _parts: {
+ header: function (inst) {
+ var self = this,
+ e = null,
+ _html;
+
+ _html = function () {
+ return '<div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix">'
+ + '<span class="ui-dialog-title">' + inst.options.title + '</span>'
+ + '<a href="#" class="ui-dialog-titlebar-close ui-corner-all" role="button">'
+ + '<div class="ui-icon ui-icon-closethick"></div></a></div>';
+ };
+
+ this.init = function () {
+ e = $(_html()).prependTo(inst.dialog);
+ var close = $('.ui-dialog-titlebar-close', e);
+ inst._hoverable(close);
+ inst._focusable(close);
+
+ close.click( function() {
+ inst.close()
+ });
+ };
+
+ this.repaint = function () {
+ };
+
+ this.generate = function () {
+ this.repaint();
+ };
+ },
+
+ map: function (inst) {
+ var self = this,
+ e = null,
+ _mousedown, _mouseup, _mousemove, _html;
+
+ _mousedown = function (event) {
+ if (!inst.opened) {
+ return;
+ }
+
+ var div = $('#ui-colorpicker-map-layer-pointer', e),
+ offset = div.offset(),
+ width = div.width(),
+ height = div.height(),
+ x = event.pageX - offset.left,
+ y = event.pageY - offset.top;
+
+ if (x >= 0 && x < width && y >= 0 && y < height) {
+ event.stopImmediatePropagation();
+ event.preventDefault();
+ $(document).unbind('mousedown', _mousedown);
+ $(document).bind('mouseup', _mouseup);
+ $(document).bind('mousemove', _mousemove);
+ _mousemove(event);
+ }
+ };
+
+ _mouseup = function (event) {
+ event.stopImmediatePropagation();
+ event.preventDefault();
+ $(document).unbind('mouseup', _mouseup);
+ $(document).unbind('mousemove', _mousemove);
+ $(document).bind('mousedown', _mousedown);
+ };
+
+ _mousemove = function (event) {
+ event.stopImmediatePropagation();
+ event.preventDefault();
+
+ if (event.pageX === self.x && event.pageY === self.y) {
+ return;
+ }
+ self.x = event.pageX;
+ self.y = event.pageY;
+
+ var div = $('#ui-colorpicker-map-layer-pointer', e),
+ offset = div.offset(),
+ width = div.width(),
+ height = div.height(),
+ x = event.pageX - offset.left,
+ y = event.pageY - offset.top;
+
+ x = Math.max(0, Math.min(x / width, 1));
+ y = Math.max(0, Math.min(y / height, 1));
+
+ // interpret values
+ switch (inst.mode) {
+ case 'h':
+ inst.color.s = x;
+ inst.color.v = 1 - y;
+ inst.color.updateRGB();
+ break;
+
+ case 's':
+ case 'a':
+ inst.color.h = x;
+ inst.color.v = 1 - y;
+ inst.color.updateRGB();
+ break;
+
+ case 'v':
+ inst.color.h = x;
+ inst.color.s = 1 - y;
+ inst.color.updateRGB();
+ break;
+
+ case 'r':
+ inst.color.b = x;
+ inst.color.g = 1 - y;
+ inst.color.updateHSV();
+ break;
+
+ case 'g':
+ inst.color.b = x;
+ inst.color.r = 1 - y;
+ inst.color.updateHSV();
+ break;
+
+ case 'b':
+ inst.color.r = x;
+ inst.color.g = 1 - y;
+ inst.color.updateHSV();
+ break;
+ }
+
+ inst._change();
+ };
+
+ _html = function () {
+ var html = '<div id="ui-colorpicker-map" class="ui-colorpicker-border">'
+ + '<span id="ui-colorpicker-map-layer-1">&nbsp;</span>'
+ + '<span id="ui-colorpicker-map-layer-2">&nbsp;</span>'
+ + (inst.options.alpha ? '<span id="ui-colorpicker-map-layer-alpha">&nbsp;</span>' : '')
+ + '<span id="ui-colorpicker-map-layer-pointer"><span id="ui-colorpicker-map-pointer"></span></span></div>';
+ return html;
+ };
+
+ this.generate = function () {
+ switch (inst.mode) {
+ case 'h':
+ $('#ui-colorpicker-map-layer-1', e).css({'background-position': '0 0', 'opacity': ''}).show();
+ $('#ui-colorcasepicker-map-layer-2', e).hide();
+ break;
+
+ case 's':
+ case 'a':
+ $('#ui-colorpicker-map-layer-1', e).css({'background-position': '0 -260px', 'opacity': ''}).show();
+ $('#ui-colorpicker-map-layer-2', e).css({'background-position': '0 -520px', 'opacity': ''}).show();
+ break;
+
+ case 'v':
+ $(e).css('background-color', 'black');
+ $('#ui-colorpicker-map-layer-1', e).css({'background-position': '0 -780px', 'opacity': ''}).show();
+ $('#ui-colorpicker-map-layer-2', e).hide();
+ break;
+
+ case 'r':
+ $('#ui-colorpicker-map-layer-1', e).css({'background-position': '0 -1040px', 'opacity': ''}).show();
+ $('#ui-colorpicker-map-layer-2', e).css({'background-position': '0 -1300px', 'opacity': ''}).show();
+ break;
+
+ case 'g':
+ $('#ui-colorpicker-map-layer-1', e).css({'background-position': '0 -1560px', 'opacity': ''}).show();
+ $('#ui-colorpicker-map-layer-2', e).css({'background-position': '0 -1820px', 'opacity': ''}).show();
+ break;
+
+ case 'b':
+ $('#ui-colorpicker-map-layer-1', e).css({'background-position': '0 -2080px', 'opacity': ''}).show();
+ $('#ui-colorpicker-map-layer-2', e).css({'background-position': '0 -2340px', 'opacity': ''}).show();
+ break;
+ }
+ self.repaint();
+ };
+
+ this.repaint = function () {
+ var div = $('#ui-colorpicker-map-layer-pointer', e),
+ x = 0,
+ y = 0;
+
+ switch (inst.mode) {
+ case 'h':
+ x = inst.color.s * div.width();
+ y = (1 - inst.color.v) * div.width();
+ $(e).css('background-color', inst.color.normClone().toCSS());
+ break;
+
+ case 's':
+ case 'a':
+ x = inst.color.h * div.width();
+ y = (1 - inst.color.v) * div.width();
+ $('#ui-colorpicker-map-layer-2', e).css('opacity', 1 - inst.color.s);
+ break;
+
+ case 'v':
+ x = inst.color.h * div.width();
+ y = (1 - inst.color.s) * div.width();
+ $('#ui-colorpicker-map-layer-1', e).css('opacity', inst.color.v);
+ break;
+
+ case 'r':
+ x = inst.color.b * div.width();
+ y = (1 - inst.color.g) * div.width();
+ $('#ui-colorpicker-map-layer-2', e).css('opacity', inst.color.r);
+ break;
+
+ case 'g':
+ x = inst.color.b * div.width();
+ y = (1 - inst.color.r) * div.width();
+ $('#ui-colorpicker-map-layer-2', e).css('opacity', inst.color.g);
+ break;
+
+ case 'b':
+ x = inst.color.r * div.width();
+ y = (1 - inst.color.g) * div.width();
+ $('#ui-colorpicker-map-layer-2', e).css('opacity', inst.color.b);
+ break;
+ }
+
+ if (inst.options.alpha) {
+ $('#ui-colorpicker-map-layer-alpha', e).css('opacity', 1 - inst.color.a);
+ }
+
+ $('#ui-colorpicker-map-pointer', e).css({
+ 'left': x - 7,
+ 'top': y - 7
+ });
+ };
+
+ this.init = function () {
+ e = $(_html()).appendTo($('#ui-colorpicker-map-container', inst.dialog));
+
+ e.bind('mousedown', _mousedown);
+ };
+ },
+
+ bar: function (inst) {
+ var self = this,
+ e = null,
+ _mousedown, _mouseup, _mousemove, _html;
+
+ _mousedown = function (event) {
+ if (!inst.opened) {
+ return;
+ }
+
+ var div = $('#ui-colorpicker-bar-layer-pointer', e),
+ offset = div.offset(),
+ width = div.width(),
+ height = div.height(),
+ x = event.pageX - offset.left,
+ y = event.pageY - offset.top;
+
+ if (x >= 0 && x < width && y >= 0 && y < height) {
+ event.stopImmediatePropagation();
+ event.preventDefault();
+ $(document).unbind('mousedown', _mousedown);
+ $(document).bind('mouseup', _mouseup);
+ $(document).bind('mousemove', _mousemove);
+ _mousemove(event);
+ }
+ };
+
+ _mouseup = function (event) {
+ event.stopImmediatePropagation();
+ event.preventDefault();
+ $(document).unbind('mouseup', _mouseup);
+ $(document).unbind('mousemove', _mousemove);
+ $(document).bind('mousedown', _mousedown);
+ };
+
+ _mousemove = function (event) {
+ event.stopImmediatePropagation();
+ event.preventDefault();
+
+ if (event.pageY === self.y) {
+ return;
+ }
+ self.y = event.pageY;
+
+ var div = $('#ui-colorpicker-bar-layer-pointer', e),
+ offset = div.offset(),
+ height = div.height(),
+ y = event.pageY - offset.top;
+
+ y = Math.max(0, Math.min(y / height, 1));
+
+ // interpret values
+ switch (inst.mode) {
+ case 'h':
+ inst.color.h = 1 - y;
+ inst.color.updateRGB();
+ break;
+
+ case 's':
+ inst.color.s = 1 - y;
+ inst.color.updateRGB();
+ break;
+
+ case 'v':
+ inst.color.v = 1 - y;
+ inst.color.updateRGB();
+ break;
+
+ case 'r':
+ inst.color.r = 1 - y;
+ inst.color.updateHSV();
+ break;
+
+ case 'g':
+ inst.color.g = 1 - y;
+ inst.color.updateHSV();
+ break;
+
+ case 'b':
+ inst.color.b = 1 - y;
+ inst.color.updateHSV();
+ break;
+
+ case 'a':
+ inst.color.a = 1 - y;
+ break;
+ }
+
+ inst._change();
+ };
+
+ _html = function () {
+ var html = '<div id="ui-colorpicker-bar" class="ui-colorpicker-border">'
+ + '<span id="ui-colorpicker-bar-layer-1">&nbsp;</span>'
+ + '<span id="ui-colorpicker-bar-layer-2">&nbsp;</span>'
+ + '<span id="ui-colorpicker-bar-layer-3">&nbsp;</span>'
+ + '<span id="ui-colorpicker-bar-layer-4">&nbsp;</span>';
+
+ if (inst.options.alpha) {
+ html += '<span id="ui-colorpicker-bar-layer-alpha">&nbsp;</span>'
+ + '<span id="ui-colorpicker-bar-layer-alphabar">&nbsp;</span>';
+ }
+
+ html += '<span id="ui-colorpicker-bar-layer-pointer"><span id="ui-colorpicker-bar-pointer"></span></span></div>';
+
+ return html;
+ };
+
+ this.generate = function () {
+ switch (inst.mode) {
+ case 'h':
+ case 's':
+ case 'v':
+ case 'r':
+ case 'g':
+ case 'b':
+ $('#ui-colorpicker-bar-layer-alpha', e).show();
+ $('#ui-colorpicker-bar-layer-alphabar', e).hide();
+ break;
+
+ case 'a':
+ $('#ui-colorpicker-bar-layer-alpha', e).hide();
+ $('#ui-colorpicker-bar-layer-alphabar', e).show();
+ break;
+ }
+
+ switch (inst.mode) {
+ case 'h':
+ $('#ui-colorpicker-bar-layer-1', e).css({'background-position': '0 0', 'opacity': ''}).show();
+ $('#ui-colorpicker-bar-layer-2', e).hide();
+ $('#ui-colorpicker-bar-layer-3', e).hide();
+ $('#ui-colorpicker-bar-layer-4', e).hide();
+ break;
+
+ case 's':
+ $('#ui-colorpicker-bar-layer-1', e).css({'background-position': '0 -260px', 'opacity': ''}).show();
+ $('#ui-colorpicker-bar-layer-2', e).css({'background-position': '0 -520px', 'opacity': ''}).show();
+ $('#ui-colorpicker-bar-layer-3', e).hide();
+ $('#ui-colorpicker-bar-layer-4', e).hide();
+ break;
+
+ case 'v':
+ $('#ui-colorpicker-bar-layer-1', e).css({'background-position': '0 -520px', 'opacity': ''}).show();
+ $('#ui-colorpicker-bar-layer-2', e).hide();
+ $('#ui-colorpicker-bar-layer-3', e).hide();
+ $('#ui-colorpicker-bar-layer-4', e).hide();
+ break;
+
+ case 'r':
+ $('#ui-colorpicker-bar-layer-1', e).css({'background-position': '0 -1560px', 'opacity': ''}).show();
+ $('#ui-colorpicker-bar-layer-2', e).css({'background-position': '0 -1300px', 'opacity': ''}).show();
+ $('#ui-colorpicker-bar-layer-3', e).css({'background-position': '0 -780px', 'opacity': ''}).show();
+ $('#ui-colorpicker-bar-layer-4', e).css({'background-position': '0 -1040px', 'opacity': ''}).show();
+ break;
+
+ case 'g':
+ $('#ui-colorpicker-bar-layer-1', e).css({'background-position': '0 -2600px', 'opacity': ''}).show();
+ $('#ui-colorpicker-bar-layer-2', e).css({'background-position': '0 -2340px', 'opacity': ''}).show();
+ $('#ui-colorpicker-bar-layer-3', e).css({'background-position': '0 -1820px', 'opacity': ''}).show();
+ $('#ui-colorpicker-bar-layer-4', e).css({'background-position': '0 -2080px', 'opacity': ''}).show();
+ break;
+
+ case 'b':
+ $('#ui-colorpicker-bar-layer-1', e).css({'background-position': '0 -3640px', 'opacity': ''}).show();
+ $('#ui-colorpicker-bar-layer-2', e).css({'background-position': '0 -3380px', 'opacity': ''}).show();
+ $('#ui-colorpicker-bar-layer-3', e).css({'background-position': '0 -2860px', 'opacity': ''}).show();
+ $('#ui-colorpicker-bar-layer-4', e).css({'background-position': '0 -3120px', 'opacity': ''}).show();
+ break;
+
+ case 'a':
+ $('#ui-colorpicker-bar-layer-1', e).hide();
+ $('#ui-colorpicker-bar-layer-2', e).hide();
+ $('#ui-colorpicker-bar-layer-3', e).hide();
+ $('#ui-colorpicker-bar-layer-4', e).hide();
+ break;
+ }
+ self.repaint();
+ };
+
+ this.repaint = function () {
+ var div = $('#ui-colorpicker-bar-layer-pointer', e),
+ y = 0;
+
+ switch (inst.mode) {
+ case 'h':
+ y = (1 - inst.color.h) * div.height();
+ break;
+
+ case 's':
+ y = (1 - inst.color.s) * div.height();
+ $('#ui-colorpicker-bar-layer-2', e).css('opacity', 1 - inst.color.v);
+ $(e).css('background-color', inst.color.normClone().toCSS());
+ break;
+
+ case 'v':
+ y = (1 - inst.color.v) * div.height();
+ $(e).css('background-color', inst.color.normClone().toCSS());
+ break;
+
+ case 'r':
+ y = (1 - inst.color.r) * div.height();
+ $('#ui-colorpicker-bar-layer-2', e).css('opacity', Math.max(0, (inst.color.b - inst.color.g)));
+ $('#ui-colorpicker-bar-layer-3', e).css('opacity', Math.max(0, (inst.color.g - inst.color.b)));
+ $('#ui-colorpicker-bar-layer-4', e).css('opacity', Math.min(inst.color.b, inst.color.g));
+ break;
+
+ case 'g':
+ y = (1 - inst.color.g) * div.height();
+ $('#ui-colorpicker-bar-layer-2', e).css('opacity', Math.max(0, (inst.color.b - inst.color.r)));
+ $('#ui-colorpicker-bar-layer-3', e).css('opacity', Math.max(0, (inst.color.r - inst.color.b)));
+ $('#ui-colorpicker-bar-layer-4', e).css('opacity', Math.min(inst.color.r, inst.color.b));
+ break;
+
+ case 'b':
+ y = (1 - inst.color.b) * div.height();
+ $('#ui-colorpicker-bar-layer-2', e).css('opacity', Math.max(0, (inst.color.r - inst.color.g)));
+ $('#ui-colorpicker-bar-layer-3', e).css('opacity', Math.max(0, (inst.color.g - inst.color.r)));
+ $('#ui-colorpicker-bar-layer-4', e).css('opacity', Math.min(inst.color.r, inst.color.g));
+ break;
+
+ case 'a':
+ y = (1 - inst.color.a) * div.height();
+ $(e).css('background-color', inst.color.normClone().toCSS());
+ break;
+ }
+
+ if (inst.mode !== 'a') {
+ $('#ui-colorpicker-bar-layer-alpha', e).css('opacity', 1 - inst.color.a);
+ }
+
+ $('#ui-colorpicker-bar-pointer', e).css('top', y - 3);
+ };
+
+ this.init = function () {
+ e = $(_html()).appendTo($('#ui-colorpicker-bar-container', inst.dialog));
+
+ e.bind('mousedown', _mousedown);
+ };
+ },
+
+ inputs: function (inst) {
+ var self = this,
+ e = null,
+ _html;
+
+ _html = function () {
+ var html = '<div id="ui-colorpicker-inputs">';
+
+ if (inst.options.hsv) {
+ html += '<div id="ui-colorpicker-h"><input class="ui-colorpicker-mode" type="radio" value="h"/><label>H:</label><input class="ui-colorpicker-number ui-colorpicker-number-hsv" type="number" min="0" max="360" size="10"/><span class="ui-colorpicker-unit">&deg;</span></div>'
+ + '<div id="ui-colorpicker-s"><input class="ui-colorpicker-mode" type="radio" value="s"/><label>S:</label><input class="ui-colorpicker-number ui-colorpicker-number-hsv" type="number" min="0" max="100" size="10"/><span class="ui-colorpicker-unit">%</span></div>'
+ + '<div id="ui-colorpicker-v"><input class="ui-colorpicker-mode" type="radio" value="v"/><label>V:</label><input class="ui-colorpicker-number ui-colorpicker-number-hsv" type="number" min="0" max="100" size="10"/><span class="ui-colorpicker-unit">%</span></div>';
+ }
+
+ if (inst.options.rgb) {
+ html += '<div id="ui-colorpicker-r"><input class="ui-colorpicker-mode" type="radio" value="r"/><label>R:</label><input class="ui-colorpicker-number ui-colorpicker-number-rgb" type="number" min="0" max="255" size="10"/><span class="ui-colorpicker-unit"></span></div>'
+ + '<div id="ui-colorpicker-g"><input class="ui-colorpicker-mode" type="radio" value="g"/><label>G:</label><input class="ui-colorpicker-number ui-colorpicker-number-rgb" type="number" min="0" max="255" size="10"/><span class="ui-colorpicker-unit"></span></div>'
+ + '<div id="ui-colorpicker-b"><input class="ui-colorpicker-mode" type="radio" value="b"/><label>B:</label><input class="ui-colorpicker-number ui-colorpicker-number-rgb" type="number" min="0" max="255" size="10"/><span class="ui-colorpicker-unit"></span></div>';
+ }
+
+ if (inst.options.alpha) {
+ html += '<div id="ui-colorpicker-a"><input class="ui-colorpicker-mode" name="mode" type="radio" value="a"/><label>A:</label><input class="ui-colorpicker-number ui-colorpicker-number-a" type="number" min="0" max="100" size="10"/><span class="ui-colorpicker-unit">%</span></div>';
+ }
+
+ return html + '</div>';
+ };
+
+ this.init = function () {
+ e = $(_html()).appendTo($('#ui-colorpicker-inputs-container', inst.dialog));
+
+ $('.ui-colorpicker-mode', e).click(function () {
+ inst.mode = $(this).val();
+ inst._generateAllParts();
+ });
+
+ $('.ui-colorpicker-number', e).bind('change input keyup', function () {
+ inst.color.r = $('#ui-colorpicker-r .ui-colorpicker-number', e).val() / 255;
+ inst.color.g = $('#ui-colorpicker-g .ui-colorpicker-number', e).val() / 255;
+ inst.color.b = $('#ui-colorpicker-b .ui-colorpicker-number', e).val() / 255;
+ inst.color.a = $('#ui-colorpicker-a .ui-colorpicker-number', e).val() / 100;
+ inst.color.h = $('#ui-colorpicker-h .ui-colorpicker-number', e).val() / 360;
+ inst.color.s = $('#ui-colorpicker-s .ui-colorpicker-number', e).val() / 100;
+ inst.color.v = $('#ui-colorpicker-v .ui-colorpicker-number', e).val() / 100;
+
+ if ($(this).hasClass('ui-colorpicker-number-hsv')) {
+ inst.color.updateRGB();
+ } else if ($(this).hasClass('ui-colorpicker-number-rgb')) {
+ inst.color.updateHSV();
+ }
+
+ inst._change();
+ });
+ };
+
+ this.repaint = function () {
+ var c = $.extend(inst.color);
+ c.h *= 360;
+ c.s *= 100;
+ c.v *= 100;
+ c.r *= 255;
+ c.g *= 255;
+ c.b *= 255;
+ c.a *= 100;
+
+ $.each(c, function (index, value) {
+ var v = Math.round(value);
+ if (!$('#ui-colorpicker-' + index + ' .ui-colorpicker-number', e).is(':focus')
+ && $('#ui-colorpicker-' + index + ' .ui-colorpicker-number', e).val() !== v) {
+ $('#ui-colorpicker-' + index + ' .ui-colorpicker-number', e).val(v);
+ }
+ });
+ };
+
+ this.generate = function () {
+ $('.ui-colorpicker-mode', e).each(function () {
+ $(this).attr('checked', $(this).val() === inst.mode);
+ });
+ this.repaint();
+ };
+ },
+
+ preview: function (inst) {
+ var self = this,
+ e = null,
+ _html;
+
+ _html = function () {
+ return '<div id="ui-colorpicker-preview">'
+ + '<span class="ui-colorpicker-border">'
+ + '<div id="ui-colorpicker-preview-initial"><div id="ui-colorpicker-preview-initial-alpha"></div></div>'
+ + '<div id="ui-colorpicker-preview-current"><div id="ui-colorpicker-preview-current-alpha"></div></div>'
+ + '</span>'
+ + '</div>';
+ };
+
+ this.init = function () {
+ e = $(_html()).appendTo($('#ui-colorpicker-preview-container', inst.dialog));
+
+ $('#ui-colorpicker-preview-initial', e).click(function () {
+ inst.color = $.extend({}, inst.currentColor);
+ inst._change();
+ });
+
+ };
+
+ this.repaint = function () {
+ $('#ui-colorpicker-preview-initial', e).css('background-color', inst.currentColor.toCSS()).attr('title', inst.currentColor.toHex());
+ $('#ui-colorpicker-preview-initial-alpha', e).css('opacity', 1 - inst.currentColor.a);
+ $('#ui-colorpicker-preview-current', e).css('background-color', inst.color.toCSS()).attr('title', inst.color.toHex());
+ $('#ui-colorpicker-preview-current-alpha', e).css('opacity', 1 - inst.color.a);
+ };
+
+ this.generate = function () {
+ if (inst.options.alpha) {
+ $('#ui-colorpicker-preview-initial-alpha, #ui-colorpicker-preview-current-alpha', e).show();
+ } else {
+ $('#ui-colorpicker-preview-initial-alpha, #ui-colorpicker-preview-current-alpha', e).hide();
+ }
+
+ this.repaint();
+ };
+ },
+
+ hex: function (inst) {
+ var self = this,
+ e = null,
+ _html;
+
+ _html = function () {
+ var html = '';
+
+ if (inst.options.alpha) {
+ html += '<input id="ui-colorpicker-hex-alpha" maxlength="2" size="2"/>';
+ }
+
+ html += '<input id="ui-colorpicker-hex-input" maxlength="6" size="6"/>';
+
+ return '<div id="ui-colorpicker-hex"><label for="ui-colorpicker-hex-input">#: </label>' + html + '</div>';
+ };
+
+ this.init = function () {
+ e = $(_html()).appendTo($('#ui-colorpicker-hex-container', inst.dialog));
+
+ $('#ui-colorpicker-hex-input', e).bind('change keyup', function () {
+ var rgb = inst._parseHex($(this).val());
+ inst.color.r = rgb[0];
+ inst.color.g = rgb[1];
+ inst.color.b = rgb[2];
+ inst.color.updateHSV();
+ inst._change();
+ });
+
+ $('#ui-colorpicker-hex-alpha', e).bind('change keyup', function () {
+ inst.color.a = parseInt($('#ui-colorpicker-hex-alpha', e).val(), 16);
+ inst._change();
+ });
+ };
+
+ this.repaint = function () {
+ if (!$('#ui-colorpicker-hex-input', e).is(':focus')) {
+ $('#ui-colorpicker-hex-input', e).val(inst.color.toHex(true));
+ }
+
+ if (!$('#ui-colorpicker-hex-alpha', e).is(':focus')) {
+ $('#ui-colorpicker-hex-alpha', e).val(inst._intToHex(inst.color.a * 255));
+ }
+ };
+
+ this.generate = function () {
+ this.repaint();
+ };
+ },
+
+ swatches: function (inst) {
+ var self = this,
+ e = null,
+ _html;
+
+ _html = function () {
+ var html = '';
+
+ $.each(inst.options.swatches, function (name, color) {
+ var hex = inst._intToHex(color[0]) + inst._intToHex(color[1]) + inst._intToHex(color[2]);
+ html += '<div class="ui-colorpicker-swatch" style="background-color: #' + hex + '" title="' + name + '"></div>';
+ });
+
+ return '<div id="ui-colorpicker-swatches" class="ui-colorpicker-border">' + html + '</div>';
+ };
+
+ this.init = function () {
+ e = $(_html()).appendTo($('#ui-colorpicker-swatches-container', inst.dialog));
+
+ $('.ui-colorpicker-swatch', e).click(function () {
+ var rgb = inst._parseColor($(this).css('background-color'));
+ inst.color = (rgb === false ? new inst.Color() : new inst.Color(rgb[0], rgb[1], rgb[2]));
+ inst._change();
+ });
+ };
+
+ this.repaint = function () {
+ // Not affected by changing color;
+ };
+
+ this.generate = function () {
+ // Not affected by changing color;
+ };
+ },
+
+ footer: function (inst) {
+ var self = this,
+ e = null,
+ _html;
+
+ _html = function () {
+ return '<div class="ui-dialog-buttonpane ui-widget-content">'
+ + (inst.options.alpha ? '<button class="ui-colorpicker-transparent">transparent</button>' : '')
+ + (inst.inline ? '' : '<div class="ui-dialog-buttonset">'
+ + '<button class="ui-colorpicker-close">Done</button>'
+ + '</div>')
+ + '</div>';
+ };
+
+ this.init = function () {
+ e = $(_html()).appendTo(inst.dialog);
+
+ $('.ui-colorpicker-close', e).button().click(function () {
+ inst.close();
+ });
+
+ if (inst.options.alpha) {
+ $('.ui-colorpicker-transparent', e).button().click(function () {
+ inst.color.a = 0;
+ inst._change();
+ });
+ }
+ };
+
+ this.repaint = function () {};
+
+ this.generate = function () {};
+ }
+ },
+
+ _parseHex: function (color) {
+ var name = $.trim(color).toLowerCase(),
+ c,
+ m;
+
+ if (_colors[name]) {
+ c = _colors[name];
+ return [c[0] / 255, c[1] / 255, c[2] / 255];
+ }
+
+ // {#}rrggbb
+ m = /^#?([a-fA-F0-9]{0,6})/.exec(color);
+ if (m) {
+ c = parseInt(m[1], 16);
+ return [((c >> 16) & 0xFF) / 255,
+ ((c >> 8) & 0xFF) / 255,
+ (c & 0xFF) / 255];
+ }
+ },
+
+ _parseColor: function (color) {
+ var m;
+
+ // rgba(r,g,b,a)
+ m = /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/.exec(color);
+ if (m) {
+ return [
+ m[1] / 255,
+ m[2] / 255,
+ m[3] / 255,
+ m[4] / 255
+ ];
+ }
+
+ // rgba(r%,g%,b%,a%)
+ m = /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/.exec(color);
+ if (m) {
+ return [
+ m[1] / 100,
+ m[2] / 100,
+ m[3] / 100,
+ m[4] / 100
+ ];
+ }
+
+ // #rrggbb
+ m = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color);
+ if (m) {
+ return [
+ parseInt(m[1], 16) / 255,
+ parseInt(m[2], 16) / 255,
+ parseInt(m[3], 16) / 255
+ ];
+ }
+
+ // #rgb
+ m = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color);
+ if (m) {
+ return [
+ parseInt(m[1] + m[1], 16) / 255,
+ parseInt(m[2] + m[2], 16) / 255,
+ parseInt(m[3] + m[3], 16) / 255
+ ];
+ }
+
+ return this._parseHex(color);
+ },
+
+ Color: function () {
+ var a, args = arguments;
+
+ this.updateRGB = function () {
+ this.h = Math.max(0, Math.min(this.h, 1));
+ this.s = Math.max(0, Math.min(this.s, 1));
+ this.v = Math.max(0, Math.min(this.v, 1));
+
+ if (this.s === 0) {
+ this.r = this.g = this.b = this.v;
+ } else {
+ var var_h = this.h === 1 ? 0 : this.h * 6,
+ var_i = Math.floor(var_h),
+ var_1 = this.v * (1 - this.s),
+ var_2 = this.v * (1 - this.s * (var_h - var_i)),
+ var_3 = this.v * (1 - this.s * (1 - (var_h - var_i)));
+
+ if (var_i === 0) {
+ this.r = this.v;
+ this.g = var_3;
+ this.b = var_1;
+ } else if (var_i === 1) {
+ this.r = var_2;
+ this.g = this.v;
+ this.b = var_1;
+ } else if (var_i === 2) {
+ this.r = var_1;
+ this.g = this.v;
+ this.b = var_3;
+ } else if (var_i === 3) {
+ this.r = var_1;
+ this.g = var_2;
+ this.b = this.v;
+ } else if (var_i === 4) {
+ this.r = var_3;
+ this.g = var_1;
+ this.b = this.v;
+ } else {
+ this.r = this.v;
+ this.g = var_1;
+ this.b = var_2;
+ }
+ }
+ return this;
+ };
+
+ this.updateHSV = function () {
+ var minVal, maxVal, delta, del_R, del_G, del_B;
+ this.r = Math.max(0, Math.min(this.r, 1));
+ this.g = Math.max(0, Math.min(this.g, 1));
+ this.b = Math.max(0, Math.min(this.b, 1));
+
+ minVal = Math.min(this.r, this.g, this.b);
+ maxVal = Math.max(this.r, this.g, this.b);
+ delta = maxVal - minVal;
+
+ this.v = maxVal;
+
+ if (delta === 0) {
+ this.h = 0;
+ this.s = 0;
+ } else {
+ this.s = delta / maxVal;
+ del_R = (((maxVal - this.r) / 6) + (delta / 2)) / delta;
+ del_G = (((maxVal - this.g) / 6) + (delta / 2)) / delta;
+ del_B = (((maxVal - this.b) / 6) + (delta / 2)) / delta;
+
+ if (this.r === maxVal) {
+ this.h = del_B - del_G;
+ } else if (this.g === maxVal) {
+ this.h = (1 / 3) + del_R - del_B;
+ } else if (this.b === maxVal) {
+ this.h = (2 / 3) + del_G - del_R;
+ }
+
+ if (this.h < 0) {
+ this.h += 1;
+ } else if (this.h > 1) {
+ this.h -= 1;
+ }
+ }
+ return this;
+ };
+
+ this._hexify = function (number) {
+ // return Math.round(number).toString(16);
+ var digits = '0123456789abcdef',
+ lsd = number % 16,
+ msd = (number - lsd) / 16,
+ hexified = digits.charAt(msd) + digits.charAt(lsd);
+ return hexified;
+ };
+
+ this.toHex = function () {
+ return this._hexify(this.r * 255) + this._hexify(this.g * 255) + this._hexify(this.b * 255);
+ };
+
+ this.toCSS = function () {
+ return '#' + this.toHex();
+ };
+
+ this.toHexAlpha = function () {
+ return this._hexify(this.a * 255);
+ };
+
+ this.normClone = function () {
+ return $.extend({}, this, {s: 1, v: 1}).updateRGB();
+ };
+
+ this.equals = function (rgb) {
+ return rgb[0] === this.r
+ && rgb[1] === this.g
+ && rgb[2] === this.b;
+ };
+
+ this.limit = function (steps) {
+ steps -= 1;
+ this.r = Math.round(this.r * steps) / steps;
+ this.g = Math.round(this.g * steps) / steps;
+ this.b = Math.round(this.b * steps) / steps;
+ this.updateHSV();
+ };
+
+ for (a = 0; a < args.length; a += 1) {
+ args[a] = Math.max(0, Math.min(args[a], 1));
+ }
+
+ if (args.length === 0) {
+ this.r = 0;
+ this.g = 0;
+ this.b = 0;
+ this.a = 1;
+ this.h = 0;
+ this.s = 0;
+ this.v = 0;
+ } else if (args.length === 3) {
+ // r,g,b
+ this.r = args[0] || 0;
+ this.g = args[1] || 0;
+ this.b = args[2] || 0;
+ this.a = 1;
+ this.updateHSV();
+ } else if (args.length === 7) {
+ // r,g,b,a,h,s,v
+ this.r = args[0] || 0;
+ this.g = args[1] || 0;
+ this.b = args[2] || 0;
+ this.a = args[3] || 0;
+ this.h = args[4] || 0;
+ this.s = args[5] || 0;
+ this.v = args[6] || 0;
+ }
+ }
+ });
+
+}(jQuery));
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/cursor-highlighter.html b/wqflask/wqflask/static/packages/jqplot/examples/cursor-highlighter.html
new file mode 100644
index 00000000..ef35aebf
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/cursor-highlighter.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Data Point Highlighting, Tooltips and Cursor Tracking</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="canvas-overlay.html">Previous</a> <a href="./">Examples</a> <a href="customHighlighterCursorTrendline.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+<p>The Highlighter plugin will highlight data points near the mouse and display an optional tooltip with the data point value. By default, the tooltip values will be formatted with the same formatter as used to display the axes tick values. The text format can be customized with an optional sprintf style format string.</p>
+
+<div id="chart1" style="height:300px; width:600px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+<p>The Cursor plugin changes the mouse cursor when it enters the graph area and displays an optional tooltip with the mouse position. The tooltip can be in a fixed location, or it can follow the mouse. The pointer style, set to "crosshair" by default, can also be customized. Tooltip values are formatted similar to the Highlighter plugin. By default they use the axes formatters, but can be customized with a sprintf format string.</p>
+
+<div id="chart2" style="height:300px; width:600px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var line1=[['23-May-08', 578.55], ['20-Jun-08', 566.5], ['25-Jul-08', 480.88], ['22-Aug-08', 509.84],
+ ['26-Sep-08', 454.13], ['24-Oct-08', 379.75], ['21-Nov-08', 303], ['26-Dec-08', 308.56],
+ ['23-Jan-09', 299.14], ['20-Feb-09', 346.51], ['20-Mar-09', 325.99], ['24-Apr-09', 386.15]];
+ var plot1 = $.jqplot('chart1', [line1], {
+ title:'Data Point Highlighting',
+ axes:{
+ xaxis:{
+ renderer:$.jqplot.DateAxisRenderer,
+ tickOptions:{
+ formatString:'%b&nbsp;%#d'
+ }
+ },
+ yaxis:{
+ tickOptions:{
+ formatString:'$%.2f'
+ }
+ }
+ },
+ highlighter: {
+ show: true,
+ sizeAdjust: 7.5
+ },
+ cursor: {
+ show: false
+ }
+ });
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var line1=[['23-May-08', 578.55], ['20-Jun-08', 566.5], ['25-Jul-08', 480.88], ['22-Aug-08', 509.84],
+ ['26-Sep-08', 454.13], ['24-Oct-08', 379.75], ['21-Nov-08', 303], ['26-Dec-08', 308.56],
+ ['23-Jan-09', 299.14], ['20-Feb-09', 346.51], ['20-Mar-09', 325.99], ['24-Apr-09', 386.15]];
+ var plot2 = $.jqplot('chart2', [line1], {
+ title:'Mouse Cursor Tracking',
+ axes:{
+ xaxis:{
+ renderer:$.jqplot.DateAxisRenderer,
+ tickOptions:{
+ formatString:'%b&nbsp;%#d'
+ }
+ },
+ yaxis:{
+ tickOptions:{
+ formatString:'$%.2f'
+ }
+ }
+ },
+ highlighter: {
+ show: false
+ },
+ cursor: {
+ show: true,
+ tooltipLocation:'sw'
+ }
+ });
+});
+</script>
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.highlighter.min.js"></script>
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.min.js"></script>
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/customHighlighterCursorTrendline.html b/wqflask/wqflask/static/packages/jqplot/examples/customHighlighterCursorTrendline.html
new file mode 100644
index 00000000..d5ed6ce4
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/customHighlighterCursorTrendline.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Highlighting, Dragging Points, Cursor and Trend Lines.</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="cursor-highlighter.html">Previous</a> <a href="./">Examples</a> <a href="dashboardWidget.html">Next</a></div>
+
+ <div class="example-plot" id="chart1"></div>
+<!-- Example scripts go here -->
+
+ <script class="code" type="text/javascript">
+
+ $(document).ready(function () {
+
+ $.jqplot.config.enablePlugins = true;
+
+ s1 = [['23-May-08',1],['24-May-08',4],['25-May-08',2],['26-May-08', 6]];
+
+ plot1 = $.jqplot('chart1',[s1],{
+ title: 'Highlighting, Dragging, Cursor and Trend Line',
+ axes: {
+ xaxis: {
+ renderer: $.jqplot.DateAxisRenderer,
+ tickOptions: {
+ formatString: '%#m/%#d/%y'
+ },
+ numberTicks: 4
+ },
+ yaxis: {
+ tickOptions: {
+ formatString: '$%.2f'
+ }
+ }
+ },
+ highlighter: {
+ sizeAdjust: 10,
+ tooltipLocation: 'n',
+ tooltipAxes: 'y',
+ tooltipFormatString: '<b><i><span style="color:red;">hello</span></i></b> %.2f',
+ useAxesFormatters: false
+ },
+ cursor: {
+ show: true
+ }
+ });
+ });
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.barRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.cursor.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.highlighter.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.dragable.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.trendline.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/dashboardWidget.html b/wqflask/wqflask/static/packages/jqplot/examples/dashboardWidget.html
new file mode 100644
index 00000000..d57f1de3
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/dashboardWidget.html
@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Animated Dashboard Sample - Filled Line with Log Axis</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="customHighlighterCursorTrendline.html">Previous</a> <a href="./">Examples</a> <a href="dashedLines.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+ <link class="include" rel="stylesheet" type="text/css" href="jquery-ui/css/smoothness/jquery-ui.css" />
+
+ <style type="text/css">
+ .jqplot-target {
+ margin: 20px;
+ height: 340px;
+ width: 600px;
+ color: #dddddd;
+ }
+
+ .ui-widget-content {
+ background: rgb(57,57,57);
+ }
+
+ table.jqplot-table-legend {
+ border: 0px;
+ background-color: rgba(100,100,100, 0.0);
+ }
+
+ .jqplot-highlighter-tooltip {
+ background-color: rgba(57,57,57, 0.9);
+ padding: 7px;
+ color: #dddddd;
+ }
+
+
+
+ </style>
+
+ <div class="ui-widget ui-corner-all">
+ <div class="ui-widget-header ui-corner-top">Hi Powered Data</div>
+ <div class="ui-widget-content ui-corner-bottom" >
+ <div id="chart1"></div>
+ </div>
+ </div>
+
+ <pre class="code brush:js"></pre>
+
+ <script class="code" type="text/javascript">
+
+ $(document).ready(function () {
+ $.jqplot._noToImageButton = true;
+ var prevYear = [["2011-08-01",398], ["2011-08-02",255.25], ["2011-08-03",263.9], ["2011-08-04",154.24],
+ ["2011-08-05",210.18], ["2011-08-06",109.73], ["2011-08-07",166.91], ["2011-08-08",330.27], ["2011-08-09",546.6],
+ ["2011-08-10",260.5], ["2011-08-11",330.34], ["2011-08-12",464.32], ["2011-08-13",432.13], ["2011-08-14",197.78],
+ ["2011-08-15",311.93], ["2011-08-16",650.02], ["2011-08-17",486.13], ["2011-08-18",330.99], ["2011-08-19",504.33],
+ ["2011-08-20",773.12], ["2011-08-21",296.5], ["2011-08-22",280.13], ["2011-08-23",428.9], ["2011-08-24",469.75],
+ ["2011-08-25",628.07], ["2011-08-26",516.5], ["2011-08-27",405.81], ["2011-08-28",367.5], ["2011-08-29",492.68],
+ ["2011-08-30",700.79], ["2011-08-31",588.5], ["2011-09-01",511.83], ["2011-09-02",721.15], ["2011-09-03",649.62],
+ ["2011-09-04",653.14], ["2011-09-06",900.31], ["2011-09-07",803.59], ["2011-09-08",851.19], ["2011-09-09",2059.24],
+ ["2011-09-10",994.05], ["2011-09-11",742.95], ["2011-09-12",1340.98], ["2011-09-13",839.78], ["2011-09-14",1769.21],
+ ["2011-09-15",1559.01], ["2011-09-16",2099.49], ["2011-09-17",1510.22], ["2011-09-18",1691.72],
+ ["2011-09-19",1074.45], ["2011-09-20",1529.41], ["2011-09-21",1876.44], ["2011-09-22",1986.02],
+ ["2011-09-23",1461.91], ["2011-09-24",1460.3], ["2011-09-25",1392.96], ["2011-09-26",2164.85],
+ ["2011-09-27",1746.86], ["2011-09-28",2220.28], ["2011-09-29",2617.91], ["2011-09-30",3236.63]];
+
+ var currYear = [["2011-08-01",796.01], ["2011-08-02",510.5], ["2011-08-03",527.8], ["2011-08-04",308.48],
+ ["2011-08-05",420.36], ["2011-08-06",219.47], ["2011-08-07",333.82], ["2011-08-08",660.55], ["2011-08-09",1093.19],
+ ["2011-08-10",521], ["2011-08-11",660.68], ["2011-08-12",928.65], ["2011-08-13",864.26], ["2011-08-14",395.55],
+ ["2011-08-15",623.86], ["2011-08-16",1300.05], ["2011-08-17",972.25], ["2011-08-18",661.98], ["2011-08-19",1008.67],
+ ["2011-08-20",1546.23], ["2011-08-21",593], ["2011-08-22",560.25], ["2011-08-23",857.8], ["2011-08-24",939.5],
+ ["2011-08-25",1256.14], ["2011-08-26",1033.01], ["2011-08-27",811.63], ["2011-08-28",735.01], ["2011-08-29",985.35],
+ ["2011-08-30",1401.58], ["2011-08-31",1177], ["2011-09-01",1023.66], ["2011-09-02",1442.31], ["2011-09-03",1299.24],
+ ["2011-09-04",1306.29], ["2011-09-06",1800.62], ["2011-09-07",1607.18], ["2011-09-08",1702.38],
+ ["2011-09-09",4118.48], ["2011-09-10",1988.11], ["2011-09-11",1485.89], ["2011-09-12",2681.97],
+ ["2011-09-13",1679.56], ["2011-09-14",3538.43], ["2011-09-15",3118.01], ["2011-09-16",4198.97],
+ ["2011-09-17",3020.44], ["2011-09-18",3383.45], ["2011-09-19",2148.91], ["2011-09-20",3058.82],
+ ["2011-09-21",3752.88], ["2011-09-22",3972.03], ["2011-09-23",2923.82], ["2011-09-24",2920.59],
+ ["2011-09-25",2785.93], ["2011-09-26",4329.7], ["2011-09-27",3493.72], ["2011-09-28",4440.55],
+ ["2011-09-29",5235.81], ["2011-09-30",6473.25]];
+
+ var plot1 = $.jqplot("chart1", [prevYear, currYear], {
+ seriesColors: ["rgba(78, 135, 194, 0.7)", "rgb(211, 235, 59)"],
+ title: 'Monthly TurnKey Revenue',
+ highlighter: {
+ show: true,
+ sizeAdjust: 1,
+ tooltipOffset: 9
+ },
+ grid: {
+ background: 'rgba(57,57,57,0.0)',
+ drawBorder: false,
+ shadow: false,
+ gridLineColor: '#666666',
+ gridLineWidth: 2
+ },
+ legend: {
+ show: true,
+ placement: 'outside'
+ },
+ seriesDefaults: {
+ rendererOptions: {
+ smooth: true,
+ animation: {
+ show: true
+ }
+ },
+ showMarker: false
+ },
+ series: [
+ {
+ fill: true,
+ label: '2010'
+ },
+ {
+ label: '2011'
+ }
+ ],
+ axesDefaults: {
+ rendererOptions: {
+ baselineWidth: 1.5,
+ baselineColor: '#444444',
+ drawBaseline: false
+ }
+ },
+ axes: {
+ xaxis: {
+ renderer: $.jqplot.DateAxisRenderer,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ formatString: "%b %e",
+ angle: -30,
+ textColor: '#dddddd'
+ },
+ min: "2011-08-01",
+ max: "2011-09-30",
+ tickInterval: "7 days",
+ drawMajorGridlines: false
+ },
+ yaxis: {
+ renderer: $.jqplot.LogAxisRenderer,
+ pad: 0,
+ rendererOptions: {
+ minorTicks: 1
+ },
+ tickOptions: {
+ formatString: "$%'d",
+ showMark: false
+ }
+ }
+ }
+ });
+
+ $('.jqplot-highlighter-tooltip').addClass('ui-corner-all')
+ });
+
+
+ </script>
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+ <script class="include" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.logAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.highlighter.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/dashedLines.html b/wqflask/wqflask/static/packages/jqplot/examples/dashedLines.html
new file mode 100644
index 00000000..d1bf48fb
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/dashedLines.html
@@ -0,0 +1,227 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Dashed Lines with Smoothing</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="dashboardWidget.html">Previous</a> <a href="./">Examples</a> <a href="data-renderers.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <style type="text/css">
+ .jqplot-target {
+ margin-bottom: 2em;
+ }
+
+ p {
+ margin: 2em 0;
+ }
+ </style>
+
+
+ <div id="chart1" style="margin-top:20px; margin-left:20px; width:600px; height:300px;"></div>
+
+ <div id="chart1b" style="margin-top:20px; margin-left:20px; width:600px; height:300px;"></div>
+
+ <div id="chart2" style="margin-top:20px; margin-left:20px; width:600px; height:300px;"></div>
+
+ <div id="chart3" style="margin-top:20px; margin-left:20px; width:600px; height:300px;"></div>
+
+ <div id="chart4" style="margin-top:20px; margin-left:20px; width:600px; height:300px;"></div>
+
+ <div id="chart4b" style="margin-top:20px; margin-left:20px; width:600px; height:300px;"></div>
+
+ <div id="chart5" style="margin-top:20px; margin-left:20px; width:600px; height:300px;"></div>
+
+ <script class="code" type="text/javascript">
+
+ $(document).ready(function () {
+ s1 = [[0, 2], [1, 6], [2, 7], [3, 10]];
+
+ // Lines can be drawn as solid, dashed or dotted with the "linePattern" option.
+ // The default is "solid". Other basic options are "dashed" and "dotted".
+
+ plot1 = $.jqplot("chart1", [s1], {
+ seriesDefaults:{
+ linePattern: 'dashed',
+ showMarker: false,
+ shadow: false
+ }
+ });
+ });
+</script>
+
+ <script class="code" type="text/javascript">
+
+ $(document).ready(function () {
+
+ s1 = [[0, 2], [1, 6], [2, 7], [3, 10]];
+
+ // Size of the dashes is proportional to the width of the line.
+
+ plot1b = $.jqplot("chart1b", [s1], {
+ seriesDefaults:{
+ linePattern: 'dashed',
+ lineWidth: 7,
+ showMarker: false,
+ shadow: false
+ }
+ });
+ });
+</script>
+
+
+ <script class="code" type="text/javascript">
+ $(document).ready(function () {
+ s2 = [[0, 6.29], [0.1, 8.21], [0.2, 8.92], [0.3, 7.33], [0.4, 7.91], [0.5, 3.6], [0.6, 6.88],
+ [0.7, 1.5], [0.8, 0.08], [0.9, 6.36], [1, 0.5], [1.1, 9.14], [1.2, 6.23], [1.3, 2.66],
+ [1.4, 9.9], [1.5, 7.44], [1.6, 7.82], [1.7, 8.57], [1.8, 3.99], [1.9, 3.83], [2, 6.78],
+ [2.1, 7.63], [2.2, 6.94], [2.3, 1.24], [2.4, 2.25], [2.5, 0.67], [2.6, 6.73], [2.7, 2.25],
+ [2.8, 7.72], [2.9, 9.36], [3, 8.49]];
+
+ // Here is the default dotted line.
+
+ plot2 = $.jqplot("chart2", [s2], {
+ seriesDefaults:{
+ linePattern: 'dotted',
+ showMarker: false,
+ shadow: false
+ }
+ });
+ });
+</script>
+
+
+ <script class="code" type="text/javascript">
+ $(document).ready(function () {
+
+ // Dashes and dots work with smoothed lines as well.
+
+ plot3 = $.jqplot("chart3", [s2], {
+ seriesDefaults:{
+ linePattern: 'dashed',
+ showMarker: false,
+ shadow: false,
+ rendererOptions: {
+ smooth: true
+ }
+ }
+ });
+ });
+</script>
+
+
+ <script class="code" type="text/javascript">
+ $(document).ready(function () {
+
+ // A user defined linePattern can be specified as well. The format
+ // of a linePattern definition is an array like [dash length, gap length, ...].
+ // The line looks best when the line pattern array has an even number
+ // of elements, so it begins with a dash and ends with a gap.
+ // The dash and gap lengths are scaled to the line thickness.
+
+ plot4 = $.jqplot("chart4", [s2], {
+ seriesDefaults:{
+ linePattern: [4, 3, 1, 3, 1, 3],
+ showMarker: false,
+ shadow: false,
+ rendererOptions: {
+ smooth: true
+ }
+ }
+ });
+ });
+</script>
+
+
+<script class="code" type="text/javascript">
+ $(document).ready(function () {
+
+ // The linePattern option also accepts a shorthand string
+ // notation of dash (-) and dot (.) characters to create
+ // a customized pattern.
+
+ plot4b = $.jqplot("chart4b", [s2], {
+ seriesDefaults:{
+ linePattern: '-.',
+ showMarker: false,
+ shadow: false,
+ rendererOptions: {
+ smooth: true
+ }
+ }
+ });
+ });
+</script>
+
+ <script class="code" type="text/javascript">
+ $(document).ready(function () {
+
+ // The default dash length and gap length can be controlled
+ // with the dashLength and gapLength config parameters.
+
+ $.jqplot.config.dashLength = 5;
+ $.jqplot.config.gapLength = 2;
+
+ plot5 = $.jqplot("chart5", [s2], {
+ seriesDefaults:{
+ linePattern: 'dashed',
+ showMarker: false,
+ shadow: false,
+ rendererOptions: {
+ smooth: true
+ }
+ }
+ });
+ });
+</script>
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/data-renderers.html b/wqflask/wqflask/static/packages/jqplot/examples/data-renderers.html
new file mode 100644
index 00000000..ba835d58
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/data-renderers.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>AJAX and JSON Data Loading via Data Renderers</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="dashedLines.html">Previous</a> <a href="./">Examples</a> <a href="date-axes.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+<p>Data renderers allow jqPlot to pull data from any external source (e.g. a function implementing an AJAX call). Simply assign the external source to the "dataRenderer" plot option. The only requirement on data renderers is that it must return a valid jqPlot data array.</p>
+
+<div id="chart1" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+<p>Data renderers get passed options by the plot. The signiture for a data renderer is:</p>
+
+
+<pre class="brush: js">
+function(userData, plotObject, options) {
+ ...
+ return data;
+}
+</pre>
+
+
+<p>Where userData is whatever data was passed into the plot, plotObject is a reference back to the plot itself, and options are any options passed into the plots "dataRendererOption" option. The following example shows a more complicated example which uses ajax pulls data from an external json data source.</p>
+
+<div id="chart2" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ // Our data renderer function, returns an array of the form:
+ // [[[x1, sin(x1)], [x2, sin(x2)], ...]]
+ var sineRenderer = function() {
+ var data = [[]];
+ for (var i=0; i<13; i+=0.5) {
+ data[0].push([i, Math.sin(i)]);
+ }
+ return data;
+ };
+
+ // we have an empty data array here, but use the "dataRenderer"
+ // option to tell the plot to get data from our renderer.
+ var plot1 = $.jqplot('chart1',[],{
+ title: 'Sine Data Renderer',
+ dataRenderer: sineRenderer
+ });
+});
+</script>
+
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ // Our ajax data renderer which here retrieves a text file.
+ // it could contact any source and pull data, however.
+ // The options argument isn't used in this renderer.
+ var ajaxDataRenderer = function(url, plot, options) {
+ var ret = null;
+ $.ajax({
+ // have to use synchronous here, else the function
+ // will return before the data is fetched
+ async: false,
+ url: url,
+ dataType:"json",
+ success: function(data) {
+ ret = data;
+ }
+ });
+ return ret;
+ };
+
+ // The url for our json data
+ var jsonurl = "./jsondata.txt";
+
+ // passing in the url string as the jqPlot data argument is a handy
+ // shortcut for our renderer. You could also have used the
+ // "dataRendererOptions" option to pass in the url.
+ var plot2 = $.jqplot('chart2', jsonurl,{
+ title: "AJAX JSON Data Renderer",
+ dataRenderer: ajaxDataRenderer,
+ dataRendererOptions: {
+ unusedOptionalUrl: jsonurl
+ }
+ });
+});
+</script>
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.json2.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/date-axes.html b/wqflask/wqflask/static/packages/jqplot/examples/date-axes.html
new file mode 100644
index 00000000..4fa3f620
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/date-axes.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Date Axes</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="data-renderers.html">Previous</a> <a href="./">Examples</a> <a href="dateAxisLogAxisZooming.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+<p>Date axes support is provided through the dateAxisRenderer plugin. Date axes expand javascripts native date handling capabilities. This allow dates to be input in almost any unambiguous form, not just in milliseconds!</p>
+
+<p><em>Note, although jqPlot will parse most any human readable date, it is safest to use javascript time stamps when possible. Also, it is best to specify a date and time and not just a date alone. This is due to inconsistent browser handling of local time vs. UTC with bare dates.</em></p>
+
+<div id="chart1" style="height:300px; width:650px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+<p>Date Axes also provide powerful formatting features. This allows custom formatter strings to be used to format axis tick labels precisely the way you want.</p>
+
+<div id="chart2" style="height:300px; width:650px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var line1=[['2008-08-12 4:00PM',4], ['2008-09-12 4:00PM',6.5], ['2008-10-12 4:00PM',5.7], ['2008-11-12 4:00PM',9], ['2008-12-12 4:00PM',8.2]];
+ var plot1 = $.jqplot('chart1', [line1], {
+ title:'Default Date Axis',
+ axes:{
+ xaxis:{
+ renderer:$.jqplot.DateAxisRenderer
+ }
+ },
+ series:[{lineWidth:4, markerOptions:{style:'square'}}]
+ });
+});
+</script>
+
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var line1=[['2008-06-30 8:00AM',4], ['2008-7-14 8:00AM',6.5], ['2008-7-28 8:00AM',5.7], ['2008-8-11 8:00AM',9], ['2008-8-25 8:00AM',8.2]];
+ var plot2 = $.jqplot('chart2', [line1], {
+ title:'Customized Date Axis',
+ axes:{
+ xaxis:{
+ renderer:$.jqplot.DateAxisRenderer,
+ tickOptions:{formatString:'%b %#d, %#I %p'},
+ min:'June 16, 2008 8:00AM',
+ tickInterval:'2 weeks'
+ }
+ },
+ series:[{lineWidth:4, markerOptions:{style:'square'}}]
+ });
+});
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/dateAxisLogAxisZooming.html b/wqflask/wqflask/static/packages/jqplot/examples/dateAxisLogAxisZooming.html
new file mode 100644
index 00000000..81f0f1c7
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/dateAxisLogAxisZooming.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Zooming with Date and Log Axes</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="date-axes.html">Previous</a> <a href="./">Examples</a> <a href="dateAxisRenderer.html">Next</a></div>
+
+ <div class="example-plot" id="chart1" style="width: 700px; height: 400px;"></div>
+
+<!-- Example scripts go here -->
+
+<script type="text/javascript" src="yahooData.js" ></script>
+
+<script type="text/javascript" class="code">
+$(document).ready(function(){
+ plot1 = $.jqplot('chart1', [yahoo], {
+ series: [{
+ renderer: $.jqplot.OHLCRenderer,
+ rendererOptions: {
+ candleStick: true
+ }
+ }],
+ axes: {
+ xaxis: {
+ renderer:$.jqplot.DateAxisRenderer,
+ rendererOptions: {
+ tickInset: 0
+ },
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ angle: -30
+ }
+ },
+ yaxis: {
+ renderer: $.jqplot.LogAxisRenderer,
+ tickOptions:{ prefix: '$' }
+ }
+ },
+ cursor:{
+ show: true,
+ zoom: true
+ }
+ });
+});
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.logAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.ohlcRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.cursor.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/dateAxisRenderer.html b/wqflask/wqflask/static/packages/jqplot/examples/dateAxisRenderer.html
new file mode 100644
index 00000000..b0b72fba
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/dateAxisRenderer.html
@@ -0,0 +1,292 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Date Axes</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="dateAxisLogAxisZooming.html">Previous</a> <a href="./">Examples</a> <a href="fillBetweenLines.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+<p class="text">Date axis renderer with default settings. Ticks are given wider spacing by default since date axes typically have longer tick labels.</p>
+<div id="chart1" style="margin:20px;height:240px; width:640px;"></div>
+<p class="text">Date axis recognizes rotated tick labels. It will space ticks a little closer when labels are rotated.</p>
+<div id="chart2" style="margin:20px;height:240px; width:640px;"></div>
+<p class="text">If you want more or less ticks, specify the "numberTicks" options. Date axes will try to produce the desired number of ticks, but may adjust to get a nice interval.</p>
+<div id="chart3" style="margin:20px;height:240px; width:640px;"></div>
+
+<script type="text/javascript">
+ var ohlc = [['07/06/09', 138.7, 139.68, 135.18, 135.4],
+ ['06/29/09', 143.46, 144.66, 139.79, 140.02],
+ ['06/22/09', 140.67, 143.56, 132.88, 142.44],
+ ['06/15/09', 136.01, 139.5, 134.53, 139.48],
+ ['06/08/09', 143.82, 144.56, 136.04, 136.97],
+ ['06/01/09', 136.47, 146.4, 136, 144.67],
+ ['05/26/09', 124.76, 135.9, 124.55, 135.81],
+ ['05/18/09', 123.73, 129.31, 121.57, 122.5],
+ ['05/11/09', 127.37, 130.96, 119.38, 122.42],
+ ['05/04/09', 128.24, 133.5, 126.26, 129.19],
+ ['04/27/09', 122.9, 127.95, 122.66, 127.24],
+ ['04/20/09', 121.73, 127.2, 118.6, 123.9],
+ ['04/13/09', 120.01, 124.25, 115.76, 123.42],
+ ['04/06/09', 114.94, 120, 113.28, 119.57],
+ ['03/30/09', 104.51, 116.13, 102.61, 115.99],
+ ['03/23/09', 102.71, 109.98, 101.75, 106.85],
+ ['03/16/09', 96.53, 103.48, 94.18, 101.59],
+ ['03/09/09', 84.18, 97.2, 82.57, 95.93],
+ ['03/02/09', 88.12, 92.77, 82.33, 85.3],
+ ['02/23/09', 91.65, 92.92, 86.51, 89.31],
+ ['02/17/09', 96.87, 97.04, 89, 91.2],
+ ['02/09/09', 100, 103, 95.77, 99.16],
+ ['02/02/09', 89.1, 100, 88.9, 99.72],
+ ['01/26/09', 88.86, 95, 88.3, 90.13],
+ ['01/20/09', 81.93, 90, 78.2, 88.36],
+ ['01/12/09', 90.46, 90.99, 80.05, 82.33],
+ ['01/05/09', 93.17, 97.17, 90.04, 90.58],
+ ['12/29/08', 86.52, 91.04, 84.72, 90.75],
+ ['12/22/08', 90.02, 90.03, 84.55, 85.81],
+ ['12/15/08', 95.99, 96.48, 88.02, 90],
+ ['12/08/08', 97.28, 103.6, 92.53, 98.27],
+ ['12/01/08', 91.3, 96.23, 86.5, 94],
+ ['11/24/08', 85.21, 95.25, 84.84, 92.67],
+ ['11/17/08', 88.48, 91.58, 79.14, 82.58],
+ ['11/10/08', 100.17, 100.4, 86.02, 90.24],
+ ['11/03/08', 105.93, 111.79, 95.72, 98.24],
+ ['10/27/08', 95.07, 112.19, 91.86, 107.59],
+ ['10/20/08', 99.78, 101.25, 90.11, 96.38],
+ ['10/13/08', 104.55, 116.4, 85.89, 97.4],
+ ['10/06/08', 91.96, 101.5, 85, 96.8],
+ ['09/29/08', 119.62, 119.68, 94.65, 97.07],
+ ['09/22/08', 139.94, 140.25, 123, 128.24],
+ ['09/15/08', 142.03, 147.69, 120.68, 140.91],
+ ['09/08/08', 164.57, 164.89, 146, 148.94]
+ ];
+
+ var hlc = [['07/06/09', 139.68, 135.18, 135.4],
+ ['06/29/09', 144.66, 139.79, 140.02],
+ ['06/22/09', 143.56, 132.88, 142.44],
+ ['06/15/09', 139.5, 134.53, 139.48],
+ ['06/08/09', 144.56, 136.04, 136.97],
+ ['06/01/09', 146.4, 136, 144.67],
+ ['05/26/09', 135.9, 124.55, 135.81],
+ ['05/18/09', 129.31, 121.57, 122.5],
+ ['05/11/09', 130.96, 119.38, 122.42],
+ ['05/04/09', 133.5, 126.26, 129.19],
+ ['04/27/09', 127.95, 122.66, 127.24],
+ ['04/20/09', 127.2, 118.6, 123.9],
+ ['04/13/09', 124.25, 115.76, 123.42],
+ ['04/06/09', 120, 113.28, 119.57],
+ ['03/30/09', 116.13, 102.61, 115.99],
+ ['03/23/09', 109.98, 101.75, 106.85],
+ ['03/16/09', 103.48, 94.18, 101.59],
+ ['03/09/09', 97.2, 82.57, 95.93],
+ ['03/02/09', 92.77, 82.33, 85.3],
+ ['02/23/09', 92.92, 86.51, 89.31],
+ ['02/17/09', 97.04, 89, 91.2],
+ ['02/09/09', 103, 95.77, 99.16],
+ ['02/02/09', 100, 88.9, 99.72],
+ ['01/26/09', 95, 88.3, 90.13],
+ ['01/20/09', 90, 78.2, 88.36],
+ ['01/12/09', 90.99, 80.05, 82.33],
+ ['01/05/09', 97.17, 90.04, 90.58],
+ ['12/29/08', 91.04, 84.72, 90.75],
+ ['12/22/08', 90.03, 84.55, 85.81],
+ ['12/15/08', 96.48, 88.02, 90],
+ ['12/08/08', 103.6, 92.53, 98.27],
+ ['12/01/08', 96.23, 86.5, 94],
+ ['11/24/08', 95.25, 84.84, 92.67],
+ ['11/17/08', 91.58, 79.14, 82.58],
+ ['11/10/08', 100.4, 86.02, 90.24],
+ ['11/03/08', 111.79, 95.72, 98.24],
+ ['10/27/08', 112.19, 91.86, 107.59],
+ ['10/20/08', 101.25, 90.11, 96.38],
+ ['10/13/08', 116.4, 85.89, 97.4],
+ ['10/06/08', 101.5, 85, 96.8],
+ ['09/29/08', 119.68, 94.65, 97.07],
+ ['09/22/08', 140.25, 123, 128.24],
+ ['09/15/08', 147.69, 120.68, 140.91],
+ ['09/08/08', 164.89, 146, 148.94]
+ ];
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ title: "CandleStick Chart",
+ // Globally enable plugins like cursor and highlighter
+ $.jqplot.config.enablePlugins = true;
+
+ // for 2 digit years, set the default centry to 2000.
+ $.jsDate.config.defaultCentury = 2000;
+
+ plot1 = $.jqplot('chart1',[ohlc],{
+ axes: {
+ xaxis: {
+ renderer:$.jqplot.DateAxisRenderer
+ },
+ yaxis: {
+ tickOptions:{prefix: '$'}
+ }
+ },
+ series: [
+ {
+ renderer:$.jqplot.OHLCRenderer,
+ rendererOptions:{
+ candleStick:true
+ }
+ }
+ ],
+ highlighter: {
+ showMarker:false,
+ tooltipAxes: 'xy',
+ yvalues: 4,
+ formatString:'<table class="jqplot-highlighter"> \
+ <tr><td>date:</td><td>%s</td></tr> \
+ <tr><td>open:</td><td>%s</td></tr> \
+ <tr><td>hi:</td><td>%s</td></tr> \
+ <tr><td>low:</td><td>%s</td></tr> \
+ <tr><td>close:</td><td>%s</td></tr> \
+ </table>'
+ }
+ });
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+
+ plot2 = $.jqplot('chart2',[ohlc],{
+ title: 'OHLC chart',
+ axes: {
+ xaxis: {
+ renderer:$.jqplot.DateAxisRenderer,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ angle: -30
+ }
+ },
+ yaxis: {
+ tickOptions:{
+ prefix: '$'
+ }
+ }
+ },
+ series: [
+ {
+ renderer:$.jqplot.OHLCRenderer
+ }
+ ],
+ highlighter: {
+ showMarker:false,
+ tooltipAxes: 'xy',
+ yvalues: 4,
+ formatString:'<table class="jqplot-highlighter"> \
+ <tr><td>date:</td><td>%s</td></tr> \
+ <tr><td>open:</td><td>%s</td></tr> \
+ <tr><td>hi:</td><td>%s</td></tr> \
+ <tr><td>low:</td><td>%s</td></tr> \
+ <tr><td>close:</td><td>%s</td></tr> \
+ </table>'
+ }
+ });
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+
+ plot3 = $.jqplot('chart3',[ohlc],{
+ axesDefaults:{},
+ axes: {
+ xaxis: {
+ renderer:$.jqplot.DateAxisRenderer,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ numberTicks: 7,
+ tickOptions: {
+ angle: -30
+ }
+ },
+ yaxis: {
+ tickOptions:{
+ prefix: '$'
+ }
+ }
+ },
+ series: [
+ {
+ renderer:$.jqplot.OHLCRenderer,
+ rendererOptions:{
+ candleStick:true
+ }
+ }
+ ],
+ highlighter: {
+ showMarker:false,
+ tooltipAxes: 'xy',
+ yvalues: 4,
+ formatString:'<table class="jqplot-highlighter"> \
+ <tr><td>date:</td><td>%s</td></tr> \
+ <tr><td>open:</td><td>%s</td></tr> \
+ <tr><td>hi:</td><td>%s</td></tr> \
+ <tr><td>low:</td><td>%s</td></tr> \
+ <tr><td>close:</td><td>%s</td></tr> \
+ </table>'
+ }
+ });
+});
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.ohlcRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.highlighter.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/example.js b/wqflask/wqflask/static/packages/jqplot/examples/example.js
new file mode 100644
index 00000000..ff85cd20
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/example.js
@@ -0,0 +1,114 @@
+$(document).ready(function(){
+ if (!$.jqplot._noCodeBlock) {
+ $('script.code').each(function(index) {
+ if ($('pre.code').eq(index).length ) {
+ $('pre.code').eq(index).text($(this).html());
+ }
+ else {
+ // var str = $(this).text();
+ // $('div.jqplot-target').eq(index).after($('<pre class="code">'+str+'</pre>'));
+ var pre = $('<pre class="code prettyprint brush: js"></pre>');
+ $('div.jqplot-target').eq(index).after(pre);
+ pre.text($(this).html());
+ pre = null;
+ }
+ });
+
+ $('script.common').each(function(index) {
+ $('pre.common').eq(index).text($(this).html());
+ });
+
+ var elstr='';
+ if ($('script.include, link.include').length > 0) {
+
+ if ($('pre.include').length == 0) {
+ var temp = [
+ '<div class="code prettyprint include">',
+ '<p class="text">The charts on this page depend on the following files:</p>',
+ '<pre class="include prettyprint brush: html gutter: false"></pre>',
+ '</div>'
+ ];
+
+ temp = $(temp.join('\n'));
+ $('div.example-content').append(temp);
+ temp = null;
+ }
+
+
+ $('script.include').each(function(index) {
+ if (elstr !== '') {
+ elstr += '\n';
+ }
+ elstr += '<script type="text/javascript" src="'+$(this).attr('src')+'"></script>';
+ });
+
+ $('link.include').each(function(index) {
+ if (elstr !== '') {
+ elstr += '\n';
+ }
+ elstr += '<link rel="stylesheet" type="text/css" hrf="'+$(this).attr('href')+'" />';
+ })
+
+ $('pre.include').text(elstr);
+ }
+
+ else {
+ $('pre.include').remove();
+ $('div.include').remove();
+ }
+ }
+
+ if (!$.jqplot.use_excanvas) {
+ $('div.jqplot-target').each(function(){
+ var outerDiv = $(document.createElement('div'));
+ var header = $(document.createElement('div'));
+ var div = $(document.createElement('div'));
+
+ outerDiv.append(header);
+ outerDiv.append(div);
+
+ outerDiv.addClass('jqplot-image-container');
+ header.addClass('jqplot-image-container-header');
+ div.addClass('jqplot-image-container-content');
+
+ header.html('Right Click to Save Image As...');
+
+ var close = $(document.createElement('a'));
+ close.addClass('jqplot-image-container-close');
+ close.html('Close');
+ close.attr('href', '#');
+ close.click(function() {
+ $(this).parents('div.jqplot-image-container').hide(500);
+ })
+ header.append(close);
+
+ $(this).after(outerDiv);
+ outerDiv.hide();
+
+ outerDiv = header = div = close = null;
+
+ if (!$.jqplot._noToImageButton) {
+ var btn = $(document.createElement('button'));
+ btn.text('View Plot Image');
+ btn.addClass('jqplot-image-button');
+ btn.bind('click', {chart: $(this)}, function(evt) {
+ var imgelem = evt.data.chart.jqplotToImageElem();
+ var div = $(this).nextAll('div.jqplot-image-container').first();
+ div.children('div.jqplot-image-container-content').empty();
+ div.children('div.jqplot-image-container-content').append(imgelem);
+ div.show(500);
+ div = null;
+ });
+
+ $(this).after(btn);
+ btn.after('<br />');
+ btn = null;
+ }
+ });
+ }
+
+ SyntaxHighlighter.defaults['toolbar'] = true;
+ SyntaxHighlighter.all();
+
+ $(document).unload(function() {$('*').unbind(); });
+}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/example.min.js b/wqflask/wqflask/static/packages/jqplot/examples/example.min.js
new file mode 100644
index 00000000..132e2295
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/example.min.js
@@ -0,0 +1 @@
+$(document).ready(function(){if(!$.jqplot._noCodeBlock){$("script.code").each(function(c){if($("pre.code").eq(c).length){$("pre.code").eq(c).text($(this).html())}else{var d=$('<pre class="code prettyprint brush: js"></pre>');$("div.jqplot-target").eq(c).after(d);d.text($(this).html());d=null}});$("script.common").each(function(c){$("pre.common").eq(c).text($(this).html())});var b="";if($("script.include, link.include").length>0){if($("pre.include").length==0){var a=['<div class="code prettyprint include">','<p class="text">The charts on this page depend on the following files:</p>','<pre class="include prettyprint brush: html gutter: false"></pre>',"</div>"];a=$(a.join("\n"));$("div.example-content").append(a);a=null}$("script.include").each(function(c){if(b!==""){b+="\n"}b+='<script type="text/javascript" src="'+$(this).attr("src")+'"><\/script>'});$("link.include").each(function(c){if(b!==""){b+="\n"}b+='<link rel="stylesheet" type="text/css" hrf="'+$(this).attr("href")+'" />'});$("pre.include").text(b)}else{$("pre.include").remove();$("div.include").remove()}}if(!$.jqplot.use_excanvas){$("div.jqplot-target").each(function(){var d=$(document.createElement("div"));var g=$(document.createElement("div"));var f=$(document.createElement("div"));d.append(g);d.append(f);d.addClass("jqplot-image-container");g.addClass("jqplot-image-container-header");f.addClass("jqplot-image-container-content");g.html("Right Click to Save Image As...");var e=$(document.createElement("a"));e.addClass("jqplot-image-container-close");e.html("Close");e.attr("href","#");e.click(function(){$(this).parents("div.jqplot-image-container").hide(500)});g.append(e);$(this).after(d);d.hide();d=g=f=e=null;if(!$.jqplot._noToImageButton){var c=$(document.createElement("button"));c.text("View Plot Image");c.addClass("jqplot-image-button");c.bind("click",{chart:$(this)},function(h){var j=h.data.chart.jqplotToImageElem();var i=$(this).nextAll("div.jqplot-image-container").first();i.children("div.jqplot-image-container-content").empty();i.children("div.jqplot-image-container-content").append(j);i.show(500);i=null});$(this).after(c);c.after("<br />");c=null}})}SyntaxHighlighter.defaults.toolbar=true;SyntaxHighlighter.all();$(document).unload(function(){$("*").unbind()})}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/examples.css b/wqflask/wqflask/static/packages/jqplot/examples/examples.css
new file mode 100644
index 00000000..9a084d0c
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/examples.css
@@ -0,0 +1,140 @@
+body {
+ margin:0px;
+ padding: 0px;
+ font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;
+}
+
+div.logo {
+ position: relative;
+ height: 94px;
+ padding: 0px;
+ margin-bottom: 30px;
+ top: 0px;
+ background-image: url('./images/logo.jpg');
+ background-repeat: no-repeat;
+ background-color: #292929;
+}
+
+div.nav {
+ position:relative;
+ top: 70px;
+ text-align: right;
+}
+
+a.nav span {
+ font-size: 11px;
+ position: relative;
+ bottom: 2px;
+}
+
+a.nav:visited {
+ text-decoration: none;
+ border: 0px;
+ color: #aaaaaa;
+}
+
+a.nav, a.nav:link {
+ border: 0px;
+ text-decoration: none;
+ font-family: Tahoma, "Helvetica Neue", "Trebuchet MS", Verdana, Arial, sans-serif;
+ font-size: 16px;
+ color: #aaaaaa;
+ margin-right: 11px;
+}
+
+a.nav:hover {
+ text-decoration: none;
+ border: 0px;
+ color: #E0771C;
+}
+
+a.nav:active {
+ text-decoration: none;
+ border: 0px;
+ color: #E0771C;
+}
+
+div.example-content {
+ margin: 30px 50px;
+}
+
+div.example-nav {
+ margin-bottom:30px;
+}
+
+pre.code-block{
+ background: #D8F4DC;
+ border: 1px solid rgb(200, 200, 200);
+ padding-top: 1em;
+ padding-left: 3em;
+ padding-bottom: 1em;
+ margin-top: 1em;
+ margin-bottom: 3em;
+
+}
+
+pre.code {
+/* background: #D8F4DC;*/
+ border: 1px solid rgb(200, 200, 200);
+ padding-top: 1em;
+ padding-left: 3em;
+ padding-bottom: 1em;
+ margin-top: 1em;
+ margin-bottom: 4em;
+
+}
+
+div.include {
+ margin-bottom: 2em;
+}
+
+p {
+ margin: 2em 0;
+}
+
+.jqplot-image-button {
+ margin-bottom: 15px;
+ margin-top: 15px;
+}
+
+div.jqplot-image-container {
+ position: relative;
+ z-index: 11;
+
+ margin: auto;
+ display: none;
+ background-color: #ffffff;
+ border: 1px solid #999;
+ display: inline-block;
+ margin-top: 25px;
+}
+
+div.jqplot-image-container-header {
+ font-size: 1.0em;
+ font-weight: bold;
+ padding: 5px 15px;
+ background-color: #eee;
+}
+
+div.jqplot-image-container-content {
+ padding: 15px;
+ background-color: #ffffff;
+}
+
+a.jqplot-image-container-close {
+ float: right;
+}
+
+div.example-plot {
+ width: 500px;
+ height: 300px;
+}
+
+.jqplot-table-legend-label {
+ white-space: nowrap;
+}
+
+div.syntaxhighlighter {
+ margin-top: 4em !important;
+ margin-bottom: 3em !important;
+} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/examples.min.css b/wqflask/wqflask/static/packages/jqplot/examples/examples.min.css
new file mode 100644
index 00000000..e5c93c3a
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/examples.min.css
@@ -0,0 +1 @@
+body{margin:0;padding:0;font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;}div.logo{position:relative;height:94px;padding:0;margin-bottom:30px;top:0;background-image:url('./images/logo.jpg');background-repeat:no-repeat;background-color:#292929;}div.nav{position:relative;top:70px;text-align:right;}a.nav span{font-size:11px;position:relative;bottom:2px;}a.nav:visited{text-decoration:none;border:0;color:#aaa;}a.nav,a.nav:link{border:0;text-decoration:none;font-family:Tahoma,"Helvetica Neue","Trebuchet MS",Verdana,Arial,sans-serif;font-size:16px;color:#aaa;margin-right:11px;}a.nav:hover{text-decoration:none;border:0;color:#E0771C;}a.nav:active{text-decoration:none;border:0;color:#E0771C;}div.example-content{margin:30px 50px;}div.example-nav{margin-bottom:30px;}pre.code-block{background:#D8F4DC;border:1px solid #c8c8c8;padding-top:1em;padding-left:3em;padding-bottom:1em;margin-top:1em;margin-bottom:3em;}pre.code{border:1px solid #c8c8c8;padding-top:1em;padding-left:3em;padding-bottom:1em;margin-top:1em;margin-bottom:4em;}div.include{margin-bottom:2em;}p{margin:2em 0;}.jqplot-image-button{margin-bottom:15px;margin-top:15px;}div.jqplot-image-container{position:relative;z-index:11;margin:auto;display:none;background-color:#fff;border:1px solid #999;display:inline-block;margin-top:25px;}div.jqplot-image-container-header{font-size:1.0em;font-weight:bold;padding:5px 15px;background-color:#eee;}div.jqplot-image-container-content{padding:15px;background-color:#fff;}a.jqplot-image-container-close{float:right;}div.example-plot{width:500px;height:300px;}.jqplot-table-legend-label{white-space:nowrap;}div.syntaxhighlighter{margin-top:4em!important;margin-bottom:3em!important;} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/fillBetweenLines.html b/wqflask/wqflask/static/packages/jqplot/examples/fillBetweenLines.html
new file mode 100644
index 00000000..50c2d66a
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/fillBetweenLines.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Charts with Fill Between Lines</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="dateAxisRenderer.html">Previous</a> <a href="./">Examples</a> <a href="hiddenPlotsInTabs.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <style type="text/css" media="screen">
+ .jqplot-axis {
+ font-size: 0.85em;
+ }
+ .jqplot-title {
+ font-size: 1.1em;
+ }
+ </style>
+
+
+ <div id="chart1" style="margin-top:20px; margin-left:20px; width:600px; height:400px;"></div>
+
+ <p>Enter 2 series to fill between:</p>
+
+ <label for="series1">First Series: </label>
+ <input type="text" name="series1" value="1" />
+ <label for="series2"> Second Series: </label>
+ <input type="text" name="series2" value="3" />
+ <button name="changeFill">Change Fill</button>
+
+ <pre class="code brush:js"></pre>
+
+
+ <script class="code" type="text/javascript" language="javascript">
+ $(document).ready(function(){
+ var l0 = [6, 11, 10, 13, 11, 7];
+ var l1 = [3, 6, 7, 7, 5, 3];
+ var l2 = [4, 8, 9, 10, 8, 6];
+ var l3 = [9, 13, 14, 16, 17, 19];
+ var l4 = [15, 17, 16, 18, 13, 11];
+
+ var plot1 = $.jqplot("chart1", [l0, l1, l2, l3, l4], {
+ title: "Fill between 2 lines",
+ axesDefaults: {
+ pad: 1.05
+ },
+ //////
+ // Use the fillBetween option to control fill between two
+ // lines on a plot.
+ //////
+ fillBetween: {
+ // series1: Required, if missing won't fill.
+ series1: 1,
+ // series2: Required, if missing won't fill.
+ series2: 3,
+ // color: Optional, defaults to fillColor of series1.
+ color: "rgba(227, 167, 111, 0.7)",
+ // baseSeries: Optional. Put fill on a layer below this series
+ // index. Defaults to 0 (first series). If an index higher than 0 is
+ // used, fill will hide series below it.
+ baseSeries: 0,
+ // fill: Optional, defaults to true. False to turn off fill.
+ fill: true
+ },
+ seriesDefaults: {
+ rendererOptions: {
+ //////
+ // Turn on line smoothing. By default, a constrained cubic spline
+ // interpolation algorithm is used which will not overshoot or
+ // undershoot any data points.
+ //////
+ smooth: true
+ }
+ }
+ });
+
+ // bind a function to the change button to update the plot's fillBetween series
+ // and replot().
+ $("button[name=changeFill]").click(function(e) {
+ plot1.fillBetween.series1 = parseInt($("input[name=series1]").val());
+ plot1.fillBetween.series2 = parseInt($("input[name=series2]").val());
+ plot1.replot();
+ });
+ });
+ </script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/hiddenPlotsInTabs.html b/wqflask/wqflask/static/packages/jqplot/examples/hiddenPlotsInTabs.html
new file mode 100644
index 00000000..1a508baa
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/hiddenPlotsInTabs.html
@@ -0,0 +1,225 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Hidden Plots</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="fillBetweenLines.html">Previous</a> <a href="./">Examples</a> <a href="kcp_area.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <style type="text/css">
+ .ui-tabs, .ui-accordion {
+ width: 690px;
+ margin: 2em auto;
+ }
+ .ui-tabs-nav, .ui-accordion-header {
+ font-size: 12px;
+ }
+
+ .ui-tabs-panel, .ui-accordion-content {
+ font-size: 14px;
+ }
+
+ .jqplot-target {
+ font-size: 18px;
+ }
+
+ ol.description {
+ list-style-position: inside;
+ font-size:15px;
+ margin:1.5em auto;
+ padding:0 15px;
+ width:600px;
+ }
+ </style>
+
+<p class="description">This page demonstrates placing plots within jQuery UI widgets. Tab 2 and tab 3 contain plots. Using a combination of alternate sizing specification and the jqplot "replot" method the plots are properly displayed when their containers are shown.</p>
+
+ <p class="description">The alternate sizing specifications for setting plot height and width are needed because a hidden element (or child of a hidden element) has no size. The first example in tab 2 uses custom "data-height" and "data-width" attributes on the plot target element. The second example uses "width" and "height" properties specified on the options object passed into the $.jqplot() function.</p>
+
+ <p class="description">The default plot size is 300px wide by 400px high. The default setting can be overridden by specifying different values to the $.jqplot.config.defaultHeight and $.jqplot.config.defaultWidth properties. Height and width values are taken in this order of precedence:
+ </p>
+
+ <ol class="description">
+ <li>The css properties of the plot target if available (not available with display:none;).</li>
+ <li>Options object passed into the $.jqplot() function.</li>
+ <li>Custom data-height and data-width attributes on the plot target.</li>
+ <li>The config defaults.</li>
+ </ol>
+
+ <div id="tabs">
+ <ul>
+ <li><a href="#tabs-1">Tab 1</a></li>
+ <li><a href="#tabs-2">Tab 2</a></li>
+ <li><a href="#tabs-3">Tab 3</a></li>
+ </ul>
+ <div id="tabs-1">
+ Tabs 2 and 3 have plots. Since tabs 2 and 3 are initially inactive, their contents (and the plots) are initially hidden.
+ </div>
+
+ <div id="tabs-2">
+ <p>This plot was in an initially hidden container. It's hieght and width are set by the "data-height" and "data-width" properties of the plot container.</p>
+ <div id="chart1" data-height="260px" data-width="480px" style="margin-top:20px; margin-left:20px;"></div>
+ </div>
+
+ <div id="tabs-3">
+ <p>This plot is in an initially hidden container. It's height and width are set by the 'height' and 'width' properties of the options object passed into the plot constructor.</p>
+ <div id="chart2" style="margin-top:20px; margin-left:20px;"></div>
+ </div>
+
+ </div>
+
+ <p class="description">In the accordion below, section 2 contains a plot. Sizing plots in hidden accordion sections is very similar to sizing in a tab widget. Because of the default animation on accordions, however, the plot will not draw itself until the entire accordion panel is shown.</p>
+
+<div id="accordion" style="margin-top:50px">
+
+ <h3><a href="#">Section 1</a></h3>
+ <div>
+ Here is section 1 there is no plot. Section 2 has a plot that will display once the section is completely shown.
+ </div>
+
+ <h3><a href="#">Section 2</a></h3>
+ <div>
+ <p>
+ This plot also has it's height and width set with the data-height and data-width attributes. Note, if you want the accordion widget to properly size itself </em>before</em> the plot is shown, you must also specify a css height and width on the plot target.
+ </p>
+ <div id="chart3" data-height="200" data-width="400" style="width:400px; height: 200px; margin-top: 20px; margin-left: 20px"></div>
+ </div>
+
+</div>
+
+<p class="description">Code for generating the plots follows. It is critical to bind the callback to the UI widgets "show" or "change" method which calls the plots "replot" method. Without this, the plot won't properly redraw itself when it's container becomes visible.</p>
+
+<p class="description">
+ Note in the ui.index and plot._drawCount properties in the tabsshow callback. ui.index gives the index of the activated tab. plot._drawCount keeps track of how many times the plot was visibly drawn (or redrawn/replotted). Generally, replot only needs to be called the first time the plot is visibly drawn, hence the check for plot._drawCount === 0.
+ </p>
+
+<pre class="code brush:js"></pre>
+
+<script class="code" type="text/javascript">
+ $(document).ready(function() {
+ $.jqplot.config.enablePlugins = false;
+
+ var l1 = [18, 36, 14, 11];
+ var l2 = [[2, 14], [7, 2], [8,5]];
+ var l3 = [4, 7, 9, 2, 11, 5, 9, 13, 8, 7];
+ var l4 = [['peech',3], ['cabbage', 2], ['bean', 4], ['orange', 5]];
+
+ $("#tabs").tabs();
+ $("#accordion").accordion();
+
+ var plot1 = $.jqplot('chart1', [l1, l2, l3], {
+ title: "I was hidden",
+ lengend:{show:true},
+ series:[{},{yaxis:'y2axis'}, {yaxis:'y3axis'}],
+ cursor:{show:true, zoom:true},
+ axesDefaults:{useSeriesColor:true, rendererOptions: { alignTicks: true}}
+ });
+
+ var plot2 = $.jqplot('chart2', [l4], {
+ height: 200,
+ width: 300,
+ series:[{renderer:$.jqplot.PieRenderer}],
+ legend:{show:true}
+ });
+
+ var catOHLC = [[1, 138.7, 139.68, 135.18, 135.4],
+ [2, 143.46, 144.66, 139.79, 140.02],
+ [3, 140.67, 143.56, 132.88, 142.44],
+ [4, 136.01, 139.5, 134.53, 139.48],
+ [5, 143.82, 144.56, 136.04, 136.97],
+ [6, 136.47, 146.4, 136, 144.67],
+ [7, 124.76, 135.9, 124.55, 135.81],
+ [8, 123.73, 129.31, 121.57, 122.5]];
+
+ var ticks = ['Tue', 'Wed', 'Thu', 'Fri', 'Mon', 'Tue', 'Wed', 'Thr'];
+
+ var plot3 = $.jqplot('chart3',[catOHLC],{
+ grid:{ drawGridlines:true},
+ title: 'A CandleStick Chart',
+ axes: {
+ xaxis: {
+ renderer:$.jqplot.CategoryAxisRenderer,
+ ticks:ticks
+ },
+ yaxis: {
+ tickOptions:{formatString:'$%.2f'}
+ }
+ },
+ series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}]
+ });
+
+ $('#tabs').bind('tabsshow', function(event, ui) {
+ if (ui.index === 1 && plot1._drawCount === 0) {
+ plot1.replot();
+ }
+ else if (ui.index === 2 && plot2._drawCount === 0) {
+ plot2.replot();
+ }
+ });
+
+ $('#accordion').bind('accordionchange', function(event, ui) {
+ var index = $(this).find("h3").index ( ui.newHeader[0] );
+ if (index === 1) {
+ plot3.replot();
+ }
+ });
+
+ });
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+ <script class="include" type="text/javascript" src="../plugins/jqplot.cursor.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pieRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.ohlcRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+ <link class="include" type="text/css" href="jquery-ui/css/smoothness/jquery-ui.min.css" rel="Stylesheet" />
+ <script class="include" type="text/javascript" src="jquery-ui/js/jquery-ui.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/images/logo.jpg b/wqflask/wqflask/static/packages/jqplot/examples/images/logo.jpg
new file mode 100644
index 00000000..a12fffcd
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/images/logo.jpg
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/images/ui-colorpicker.png b/wqflask/wqflask/static/packages/jqplot/examples/images/ui-colorpicker.png
new file mode 100644
index 00000000..e244c689
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/images/ui-colorpicker.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/index.html b/wqflask/wqflask/static/packages/jqplot/examples/index.html
new file mode 100644
index 00000000..2947604a
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/index.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>jqPlot Sample Charts</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+<!-- Index content goes here -->
+
+<style type="text/css">
+
+ p.example-link {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ margin-left: 120px;
+ }
+
+</style>
+
+<div class="example-links">
+
+<p class="example-link"><a class="example-link" href="area.html">Filled (Area) Charts</a></p>
+<p class="example-link"><a class="example-link" href="axisLabelTests.html">Line Charts and Options</a></p>
+<p class="example-link"><a class="example-link" href="axisLabelsRotatedText.html">Axis Labels and Rotated Text</a></p>
+<p class="example-link"><a class="example-link" href="axisScalingForceTickAt.html">Force Plot to Have Tick at 0 or 100</a></p>
+<p class="example-link"><a class="example-link" href="bandedLine.html">Error Bands and Confidence Intervals</a></p>
+<p class="example-link"><a class="example-link" href="bar-charts.html">Vertical and Horizontal Bar Charts</a></p>
+<p class="example-link"><a class="example-link" href="barLineAnimated.html">Animated Charts</a></p>
+<p class="example-link"><a class="example-link" href="barTest.html">Bar Charts</a></p>
+<p class="example-link"><a class="example-link" href="bezierCurve.html">Bezier Curve Plots</a></p>
+<p class="example-link"><a class="example-link" href="blockPlot.html">Block Plots</a></p>
+<p class="example-link"><a class="example-link" href="bubble-plots.html">Bubble Plots</a></p>
+<p class="example-link"><a class="example-link" href="bubbleChart.html">Bubble Charts</a></p>
+<p class="example-link"><a class="example-link" href="candlestick-charts.html">Open Hi Low Close and Candlestick Charts</a></p>
+<p class="example-link"><a class="example-link" href="candlestick.html">Candlestick and Open Hi Low Close charts</a></p>
+<p class="example-link"><a class="example-link" href="canvas-overlay.html">Draw Lines on Plots - Canvas Overlay</a></p>
+<p class="example-link"><a class="example-link" href="cursor-highlighter.html">Data Point Highlighting, Tooltips and Cursor Tracking</a></p>
+<p class="example-link"><a class="example-link" href="customHighlighterCursorTrendline.html">Highlighting, Dragging Points, Cursor and Trend Lines.</a></p>
+<p class="example-link"><a class="example-link" href="dashboardWidget.html">Animated Dashboard Sample - Filled Line with Log Axis</a></p>
+<p class="example-link"><a class="example-link" href="dashedLines.html">Dashed Lines with Smoothing</a></p>
+<p class="example-link"><a class="example-link" href="data-renderers.html">AJAX and JSON Data Loading via Data Renderers</a></p>
+<p class="example-link"><a class="example-link" href="date-axes.html">Date Axes</a></p>
+<p class="example-link"><a class="example-link" href="dateAxisLogAxisZooming.html">Zooming with Date and Log Axes</a></p>
+<p class="example-link"><a class="example-link" href="dateAxisRenderer.html">Date Axes</a></p>
+<p class="example-link"><a class="example-link" href="fillBetweenLines.html">Charts with Fill Between Lines</a></p>
+<p class="example-link"><a class="example-link" href="hiddenPlotsInTabs.html">Hidden Plots</a></p>
+<p class="example-link"><a class="example-link" href="kcp_area.html">Area Chart</a></p>
+<p class="example-link"><a class="example-link" href="kcp_area2.html">Area Chart 2</a></p>
+<p class="example-link"><a class="example-link" href="kcp_cdf.html">Cumulative Density Function Chart</a></p>
+<p class="example-link"><a class="example-link" href="kcp_engel.html">Engel Curves</a></p>
+<p class="example-link"><a class="example-link" href="kcp_lorenz.html">Lorenz Curves</a></p>
+<p class="example-link"><a class="example-link" href="kcp_pdf.html">Probability Density Function Chart</a></p>
+<p class="example-link"><a class="example-link" href="kcp_pyramid.html">Pyramid Charts</a></p>
+<p class="example-link"><a class="example-link" href="kcp_pyramid2.html">Pyramid Charts 2</a></p>
+<p class="example-link"><a class="example-link" href="kcp_pyramid_by_age.html">Pyramid Chart By Age</a></p>
+<p class="example-link"><a class="example-link" href="kcp_quintiles.html">Quintile Pyramid Charts</a></p>
+<p class="example-link"><a class="example-link" href="line-charts.html">Line Charts and Options</a></p>
+<p class="example-link"><a class="example-link" href="mekkoCharts.html">Mekko Charts</a></p>
+<p class="example-link"><a class="example-link" href="meritOrder.html">Merit Order Charts</a></p>
+<p class="example-link"><a class="example-link" href="meterGauge.html">Meter Gauge</a></p>
+<p class="example-link"><a class="example-link" href="multipleBarColors.html">Bar Colors Example</a></p>
+<p class="example-link"><a class="example-link" href="pie-donut-charts.html">Pie and Donut Charts</a></p>
+<p class="example-link"><a class="example-link" href="pieTest.html">Pie Charts and Options</a></p>
+<p class="example-link"><a class="example-link" href="pieTest4.html">Pie Charts and Options 2</a></p>
+<p class="example-link"><a class="example-link" href="point-labels.html">Data Point labels</a></p>
+<p class="example-link"><a class="example-link" href="resizablePlot.html">Resizable Plots</a></p>
+<p class="example-link"><a class="example-link" href="rotated-tick-labels.html">Rotated Labels and Font Styling</a></p>
+<p class="example-link"><a class="example-link" href="rotatedTickLabelsZoom.html">Date Axes, Rotated Labels and Zooming</a></p>
+<p class="example-link"><a class="example-link" href="selectorSyntax.html">Plot Creation with jQuery Selectors</a></p>
+<p class="example-link"><a class="example-link" href="smoothedLine.html">Smoothed Lines</a></p>
+<p class="example-link"><a class="example-link" href="theming.html">Chart Theming</a></p>
+<p class="example-link"><a class="example-link" href="waterfall.html">Waterfall Charts</a></p>
+<p class="example-link"><a class="example-link" href="waterfall2.html">Waterfall charts 2</a></p>
+<p class="example-link"><a class="example-link" href="zoom1.html">Zooming</a></p>
+<p class="example-link"><a class="example-link" href="zoomOptions.html">Zoom Options</a></p>
+<p class="example-link"><a class="example-link" href="zoomProxy.html">Zoom Proxy - Control one plot from another</a></p>
+<p class="example-link"><a class="example-link" href="zooming.html">Plot Zooming and Cursor Control</a></p>
+
+</div>
+
+<!-- End Index content -->
+
+
+ </div>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
new file mode 100644
index 00000000..5b5dab2a
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
new file mode 100644
index 00000000..ac8b229a
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
new file mode 100644
index 00000000..ad3d6346
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 00000000..42ccba26
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
new file mode 100644
index 00000000..5a46b47c
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
new file mode 100644
index 00000000..86c2baa6
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
new file mode 100644
index 00000000..4443fdc1
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
new file mode 100644
index 00000000..7c9fa6c6
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png
new file mode 100644
index 00000000..b273ff11
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png
new file mode 100644
index 00000000..09d1cdc8
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png
new file mode 100644
index 00000000..59bd45b9
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png
new file mode 100644
index 00000000..6d02426c
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png
new file mode 100644
index 00000000..2ab019b7
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/jquery-ui.css b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/jquery-ui.css
new file mode 100644
index 00000000..0f1a7e77
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/jquery-ui.css
@@ -0,0 +1,568 @@
+/*
+ * jQuery UI CSS Framework 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*
+ * jQuery UI CSS Framework 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
+.ui-widget-content a { color: #222222; }
+.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
+.ui-widget-header a { color: #222222; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
+.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
+ * jQuery UI Resizable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizable#theming
+ */
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
+ * jQuery UI Selectable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectable#theming
+ */
+.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
+/*
+ * jQuery UI Accordion 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion#theming
+ */
+/* IE/Win - Fix animation bug - #4615 */
+.ui-accordion { width: 100%; }
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-li-fix { display: inline; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
+.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
+.ui-accordion .ui-accordion-content-active { display: block; }
+/*
+ * jQuery UI Autocomplete 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete#theming
+ */
+.ui-autocomplete { position: absolute; cursor: default; }
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+
+/*
+ * jQuery UI Menu 1.8.16
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Menu#theming
+ */
+.ui-menu {
+ list-style:none;
+ padding: 2px;
+ margin: 0;
+ display:block;
+ float: left;
+}
+.ui-menu .ui-menu {
+ margin-top: -3px;
+}
+.ui-menu .ui-menu-item {
+ margin:0;
+ padding: 0;
+ zoom: 1;
+ float: left;
+ clear: left;
+ width: 100%;
+}
+.ui-menu .ui-menu-item a {
+ text-decoration:none;
+ display:block;
+ padding:.2em .4em;
+ line-height:1.5;
+ zoom:1;
+}
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+ font-weight: normal;
+ margin: -1px;
+}
+/*
+ * jQuery UI Button 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button#theming
+ */
+.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
+.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
+button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
+.ui-button-icons-only { width: 3.4em; }
+button.ui-button-icons-only { width: 3.7em; }
+
+/*button text element */
+.ui-button .ui-button-text { display: block; line-height: 1.4; }
+.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
+.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
+.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
+.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+/* no icon support for input elements, provide padding by default */
+input.ui-button { padding: .4em 1em; }
+
+/*button icon element(s) */
+.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
+.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
+.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
+.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+
+/*button sets*/
+.ui-buttonset { margin-right: 7px; }
+.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+
+/* workarounds */
+button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+/*
+ * jQuery UI Dialog 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog#theming
+ */
+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/*
+ * jQuery UI Slider 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider#theming
+ */
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
+ * jQuery UI Tabs 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs#theming
+ */
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
+/*
+ * jQuery UI Datepicker 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker#theming
+ */
+.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+ display: none; /*sorry for IE5*/
+ display/**/: block; /*sorry for IE5*/
+ position: absolute; /*must have*/
+ z-index: -1; /*must have*/
+ filter: mask(); /*must have*/
+ top: -4px; /*must have*/
+ left: -4px; /*must have*/
+ width: 200px; /*must have*/
+ height: 200px; /*must have*/
+}/*
+ * jQuery UI Progressbar 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar#theming
+ */
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/jquery-ui.min.css b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/jquery-ui.min.css
new file mode 100644
index 00000000..08821f53
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/jquery-ui.min.css
@@ -0,0 +1 @@
+.ui-helper-hidden{display:none;}.ui-helper-hidden-accessible{position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none;}.ui-helper-clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.ui-helper-clearfix{display:inline-block;}/* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix{height:1%;}.ui-helper-clearfix{display:block;}/* end clearfix */ .ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0);}.ui-state-disabled{cursor:default!important;}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%;}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em;}.ui-widget .ui-widget{font-size:1em;}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em;}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222;}.ui-widget-content a{color:#222;}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold;}.ui-widget-header a{color:#222;}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555;}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none;}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121;}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none;}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121;}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none;}.ui-widget :active{outline:none;}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636;}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636;}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a;}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a;}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a;}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold;}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal;}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none;}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png);}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png);}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png);}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png);}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png);}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png);}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png);}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png);}.ui-icon-carat-1-n{background-position:0 0;}.ui-icon-carat-1-ne{background-position:-16px 0;}.ui-icon-carat-1-e{background-position:-32px 0;}.ui-icon-carat-1-se{background-position:-48px 0;}.ui-icon-carat-1-s{background-position:-64px 0;}.ui-icon-carat-1-sw{background-position:-80px 0;}.ui-icon-carat-1-w{background-position:-96px 0;}.ui-icon-carat-1-nw{background-position:-112px 0;}.ui-icon-carat-2-n-s{background-position:-128px 0;}.ui-icon-carat-2-e-w{background-position:-144px 0;}.ui-icon-triangle-1-n{background-position:0 -16px;}.ui-icon-triangle-1-ne{background-position:-16px -16px;}.ui-icon-triangle-1-e{background-position:-32px -16px;}.ui-icon-triangle-1-se{background-position:-48px -16px;}.ui-icon-triangle-1-s{background-position:-64px -16px;}.ui-icon-triangle-1-sw{background-position:-80px -16px;}.ui-icon-triangle-1-w{background-position:-96px -16px;}.ui-icon-triangle-1-nw{background-position:-112px -16px;}.ui-icon-triangle-2-n-s{background-position:-128px -16px;}.ui-icon-triangle-2-e-w{background-position:-144px -16px;}.ui-icon-arrow-1-n{background-position:0 -32px;}.ui-icon-arrow-1-ne{background-position:-16px -32px;}.ui-icon-arrow-1-e{background-position:-32px -32px;}.ui-icon-arrow-1-se{background-position:-48px -32px;}.ui-icon-arrow-1-s{background-position:-64px -32px;}.ui-icon-arrow-1-sw{background-position:-80px -32px;}.ui-icon-arrow-1-w{background-position:-96px -32px;}.ui-icon-arrow-1-nw{background-position:-112px -32px;}.ui-icon-arrow-2-n-s{background-position:-128px -32px;}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px;}.ui-icon-arrow-2-e-w{background-position:-160px -32px;}.ui-icon-arrow-2-se-nw{background-position:-176px -32px;}.ui-icon-arrowstop-1-n{background-position:-192px -32px;}.ui-icon-arrowstop-1-e{background-position:-208px -32px;}.ui-icon-arrowstop-1-s{background-position:-224px -32px;}.ui-icon-arrowstop-1-w{background-position:-240px -32px;}.ui-icon-arrowthick-1-n{background-position:0 -48px;}.ui-icon-arrowthick-1-ne{background-position:-16px -48px;}.ui-icon-arrowthick-1-e{background-position:-32px -48px;}.ui-icon-arrowthick-1-se{background-position:-48px -48px;}.ui-icon-arrowthick-1-s{background-position:-64px -48px;}.ui-icon-arrowthick-1-sw{background-position:-80px -48px;}.ui-icon-arrowthick-1-w{background-position:-96px -48px;}.ui-icon-arrowthick-1-nw{background-position:-112px -48px;}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px;}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px;}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px;}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px;}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px;}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px;}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px;}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px;}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px;}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px;}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px;}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px;}.ui-icon-arrowreturn-1-w{background-position:-64px -64px;}.ui-icon-arrowreturn-1-n{background-position:-80px -64px;}.ui-icon-arrowreturn-1-e{background-position:-96px -64px;}.ui-icon-arrowreturn-1-s{background-position:-112px -64px;}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px;}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px;}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px;}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px;}.ui-icon-arrow-4{background-position:0 -80px;}.ui-icon-arrow-4-diag{background-position:-16px -80px;}.ui-icon-extlink{background-position:-32px -80px;}.ui-icon-newwin{background-position:-48px -80px;}.ui-icon-refresh{background-position:-64px -80px;}.ui-icon-shuffle{background-position:-80px -80px;}.ui-icon-transfer-e-w{background-position:-96px -80px;}.ui-icon-transferthick-e-w{background-position:-112px -80px;}.ui-icon-folder-collapsed{background-position:0 -96px;}.ui-icon-folder-open{background-position:-16px -96px;}.ui-icon-document{background-position:-32px -96px;}.ui-icon-document-b{background-position:-48px -96px;}.ui-icon-note{background-position:-64px -96px;}.ui-icon-mail-closed{background-position:-80px -96px;}.ui-icon-mail-open{background-position:-96px -96px;}.ui-icon-suitcase{background-position:-112px -96px;}.ui-icon-comment{background-position:-128px -96px;}.ui-icon-person{background-position:-144px -96px;}.ui-icon-print{background-position:-160px -96px;}.ui-icon-trash{background-position:-176px -96px;}.ui-icon-locked{background-position:-192px -96px;}.ui-icon-unlocked{background-position:-208px -96px;}.ui-icon-bookmark{background-position:-224px -96px;}.ui-icon-tag{background-position:-240px -96px;}.ui-icon-home{background-position:0 -112px;}.ui-icon-flag{background-position:-16px -112px;}.ui-icon-calendar{background-position:-32px -112px;}.ui-icon-cart{background-position:-48px -112px;}.ui-icon-pencil{background-position:-64px -112px;}.ui-icon-clock{background-position:-80px -112px;}.ui-icon-disk{background-position:-96px -112px;}.ui-icon-calculator{background-position:-112px -112px;}.ui-icon-zoomin{background-position:-128px -112px;}.ui-icon-zoomout{background-position:-144px -112px;}.ui-icon-search{background-position:-160px -112px;}.ui-icon-wrench{background-position:-176px -112px;}.ui-icon-gear{background-position:-192px -112px;}.ui-icon-heart{background-position:-208px -112px;}.ui-icon-star{background-position:-224px -112px;}.ui-icon-link{background-position:-240px -112px;}.ui-icon-cancel{background-position:0 -128px;}.ui-icon-plus{background-position:-16px -128px;}.ui-icon-plusthick{background-position:-32px -128px;}.ui-icon-minus{background-position:-48px -128px;}.ui-icon-minusthick{background-position:-64px -128px;}.ui-icon-close{background-position:-80px -128px;}.ui-icon-closethick{background-position:-96px -128px;}.ui-icon-key{background-position:-112px -128px;}.ui-icon-lightbulb{background-position:-128px -128px;}.ui-icon-scissors{background-position:-144px -128px;}.ui-icon-clipboard{background-position:-160px -128px;}.ui-icon-copy{background-position:-176px -128px;}.ui-icon-contact{background-position:-192px -128px;}.ui-icon-image{background-position:-208px -128px;}.ui-icon-video{background-position:-224px -128px;}.ui-icon-script{background-position:-240px -128px;}.ui-icon-alert{background-position:0 -144px;}.ui-icon-info{background-position:-16px -144px;}.ui-icon-notice{background-position:-32px -144px;}.ui-icon-help{background-position:-48px -144px;}.ui-icon-check{background-position:-64px -144px;}.ui-icon-bullet{background-position:-80px -144px;}.ui-icon-radio-off{background-position:-96px -144px;}.ui-icon-radio-on{background-position:-112px -144px;}.ui-icon-pin-w{background-position:-128px -144px;}.ui-icon-pin-s{background-position:-144px -144px;}.ui-icon-play{background-position:0 -160px;}.ui-icon-pause{background-position:-16px -160px;}.ui-icon-seek-next{background-position:-32px -160px;}.ui-icon-seek-prev{background-position:-48px -160px;}.ui-icon-seek-end{background-position:-64px -160px;}.ui-icon-seek-start{background-position:-80px -160px;}.ui-icon-seek-first{background-position:-80px -160px;}.ui-icon-stop{background-position:-96px -160px;}.ui-icon-eject{background-position:-112px -160px;}.ui-icon-volume-off{background-position:-128px -160px;}.ui-icon-volume-on{background-position:-144px -160px;}.ui-icon-power{background-position:0 -176px;}.ui-icon-signal-diag{background-position:-16px -176px;}.ui-icon-signal{background-position:-32px -176px;}.ui-icon-battery-0{background-position:-48px -176px;}.ui-icon-battery-1{background-position:-64px -176px;}.ui-icon-battery-2{background-position:-80px -176px;}.ui-icon-battery-3{background-position:-96px -176px;}.ui-icon-circle-plus{background-position:0 -192px;}.ui-icon-circle-minus{background-position:-16px -192px;}.ui-icon-circle-close{background-position:-32px -192px;}.ui-icon-circle-triangle-e{background-position:-48px -192px;}.ui-icon-circle-triangle-s{background-position:-64px -192px;}.ui-icon-circle-triangle-w{background-position:-80px -192px;}.ui-icon-circle-triangle-n{background-position:-96px -192px;}.ui-icon-circle-arrow-e{background-position:-112px -192px;}.ui-icon-circle-arrow-s{background-position:-128px -192px;}.ui-icon-circle-arrow-w{background-position:-144px -192px;}.ui-icon-circle-arrow-n{background-position:-160px -192px;}.ui-icon-circle-zoomin{background-position:-176px -192px;}.ui-icon-circle-zoomout{background-position:-192px -192px;}.ui-icon-circle-check{background-position:-208px -192px;}.ui-icon-circlesmall-plus{background-position:0 -208px;}.ui-icon-circlesmall-minus{background-position:-16px -208px;}.ui-icon-circlesmall-close{background-position:-32px -208px;}.ui-icon-squaresmall-plus{background-position:-48px -208px;}.ui-icon-squaresmall-minus{background-position:-64px -208px;}.ui-icon-squaresmall-close{background-position:-80px -208px;}.ui-icon-grip-dotted-vertical{background-position:0 -224px;}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px;}.ui-icon-grip-solid-vertical{background-position:-32px -224px;}.ui-icon-grip-solid-horizontal{background-position:-48px -224px;}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px;}.ui-icon-grip-diagonal-se{background-position:-80px -224px;}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px;}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px;}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px;}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px;}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;}.ui-resizable{position:relative;}.ui-resizable-handle{position:absolute;font-size:.1px;z-index:99999;display:block;}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none;}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0;}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0;}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%;}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%;}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px;}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px;}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px;}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px;}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black;}.ui-accordion{width:100%;}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1;}.ui-accordion .ui-accordion-li-fix{display:inline;}.ui-accordion .ui-accordion-header-active{border-bottom:0!important;}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em .7em;}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em;}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px;}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1;}.ui-accordion .ui-accordion-content-active{display:block;}.ui-autocomplete{position:absolute;cursor:default;}* html .ui-autocomplete{width:1px;}.ui-menu{list-style:none;padding:2px;margin:0;display:block;float:left;}.ui-menu .ui-menu{margin-top:-3px;}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;float:left;clear:left;width:100%;}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:.2em .4em;line-height:1.5;zoom:1;}.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px;}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible;}.ui-button-icon-only{width:2.2em;}button.ui-button-icon-only{width:2.4em;}.ui-button-icons-only{width:3.4em;}button.ui-button-icons-only{width:3.7em;}.ui-button .ui-button-text{display:block;line-height:1.4;}.ui-button-text-only .ui-button-text{padding:.4em 1em;}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px;}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em;}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em;}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em;}input.ui-button{padding:.4em 1em;}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px;}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px;}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em;}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em;}.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em;}.ui-buttonset{margin-right:7px;}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em;}button.ui-button::-moz-focus-inner{border:0;padding:0;}.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden;}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative;}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0;}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px;}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px;}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0;}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1;}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em;}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right;}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer;}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px;}.ui-draggable .ui-dialog-titlebar{cursor:move;}.ui-slider{position:relative;text-align:left;}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0;}.ui-slider-horizontal{height:.8em;}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em;}.ui-slider-horizontal .ui-slider-range{top:0;height:100%;}.ui-slider-horizontal .ui-slider-range-min{left:0;}.ui-slider-horizontal .ui-slider-range-max{right:0;}.ui-slider-vertical{width:.8em;height:100px;}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em;}.ui-slider-vertical .ui-slider-range{left:0;width:100%;}.ui-slider-vertical .ui-slider-range-min{bottom:0;}.ui-slider-vertical .ui-slider-range-max{top:0;}.ui-tabs{position:relative;padding:.2em;zoom:1;}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0;}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0!important;padding:0;white-space:nowrap;}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none;}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px;}.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text;}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer;}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none;}.ui-tabs .ui-tabs-hide{display:none!important;}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none;}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0;}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em;}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px;}.ui-datepicker .ui-datepicker-prev{left:2px;}.ui-datepicker .ui-datepicker-next{right:2px;}.ui-datepicker .ui-datepicker-prev-hover{left:1px;}.ui-datepicker .ui-datepicker-next-hover{right:1px;}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px;}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center;}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0;}.ui-datepicker select.ui-datepicker-month-year{width:100%;}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%;}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em;}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0;}.ui-datepicker td{border:0;padding:1px;}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none;}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0;}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible;}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left;}.ui-datepicker.ui-datepicker-multi{width:auto;}.ui-datepicker-multi .ui-datepicker-group{float:left;}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em;}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%;}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%;}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%;}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0;}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0;}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left;}.ui-datepicker-row-break{clear:both;width:100%;font-size:0;}.ui-datepicker-rtl{direction:rtl;}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto;}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto;}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto;}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto;}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right;}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left;}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right;}.ui-datepicker-rtl .ui-datepicker-group{float:right;}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-cover{display:none;display:block;position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px;}.ui-progressbar{height:2em;text-align:left;}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%;} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
new file mode 100644
index 00000000..954e22db
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
new file mode 100644
index 00000000..64ece570
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
new file mode 100644
index 00000000..abdc0108
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
new file mode 100644
index 00000000..9b383f4d
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
new file mode 100644
index 00000000..a23baad2
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 00000000..42ccba26
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
new file mode 100644
index 00000000..39d5824d
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
new file mode 100644
index 00000000..f1273672
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
new file mode 100644
index 00000000..359397ac
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_228ef1_256x240.png
new file mode 100644
index 00000000..a641a371
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_228ef1_256x240.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ef8c08_256x240.png
new file mode 100644
index 00000000..85e63e9f
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ef8c08_256x240.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ffd27a_256x240.png
new file mode 100644
index 00000000..e117effa
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ffd27a_256x240.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ffffff_256x240.png b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ffffff_256x240.png
new file mode 100644
index 00000000..42f8f992
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ffffff_256x240.png
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.9pre.css b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.9pre.css
new file mode 100644
index 00000000..cd66d537
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.9pre.css
@@ -0,0 +1,612 @@
+/*
+ * jQuery UI CSS Framework 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+/*
+ * jQuery UI Accordion 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion#theming
+ */
+/* IE/Win - Fix animation bug - #4615 */
+.ui-accordion { width: 100%; }
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-heading { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
+.ui-accordion-icons .ui-accordion-heading { padding-left: 2.2em; }
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
+.ui-accordion .ui-accordion-content-active { display: block; }
+/*
+ * jQuery UI Autocomplete 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete#theming
+ */
+.ui-autocomplete { position: absolute; cursor: default; }
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+/*
+ * jQuery UI Button 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button#theming
+ */
+.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
+.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
+button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
+.ui-button-icons-only { width: 3.4em; }
+button.ui-button-icons-only { width: 3.7em; }
+
+/*button text element */
+.ui-button .ui-button-text { display: block; line-height: 1.4; }
+.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
+.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
+.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
+.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+/* no icon support for input elements, provide padding by default */
+input.ui-button { padding: .4em 1em; }
+
+/*button icon element(s) */
+.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
+.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
+.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
+.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+
+/*button sets*/
+.ui-buttonset { margin-right: 7px; }
+.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+
+/* workarounds */
+button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+/*
+ * jQuery UI Datepicker 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker#theming
+ */
+.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+ display: none; /*sorry for IE5*/
+ display/**/: block; /*sorry for IE5*/
+ position: absolute; /*must have*/
+ z-index: -1; /*must have*/
+ filter: mask(); /*must have*/
+ top: -4px; /*must have*/
+ left: -4px; /*must have*/
+ width: 200px; /*must have*/
+ height: 200px; /*must have*/
+}/*
+ * jQuery UI Dialog 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog#theming
+ */
+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/*
+ * jQuery UI Menu 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Menu#theming
+ */
+.ui-menu { list-style:none; padding: 2px; margin: 0; display:block; outline: none; }
+.ui-menu .ui-menu { margin-top: -3px; position: absolute; }
+.ui-menu .ui-menu-item { margin: 0; padding: 0; zoom: 1; width: 100%; }
+.ui-menu .ui-menu-item a { text-decoration: none; display: block; padding: 2px .4em; line-height: 1.5; zoom: 1; font-weight: normal; }
+.ui-menu .ui-menu-item a.ui-state-focus,
+.ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; margin: -1px; }
+
+.ui-menu li.ui-state-disabled { font-weight: normal; padding: .0em .4em; margin: .4em 0 .2em; line-height: 1.5; }
+
+/* icon support */
+.ui-menu-icons { position: relative; }
+.ui-menu-icons .ui-menu-item a { position: relative; padding-left: 2em; }
+
+/* left-aligned */
+.ui-menu .ui-icon { position: absolute; top: .2em; left: .2em; }
+
+/* right-aligned */
+.ui-menu .ui-menu-icon { position: static; float: right; }
+/*
+ * jQuery UI Menubar 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ */
+.ui-menubar { list-style: none; margin: 0; padding-left: 0; }
+
+.ui-menubar-item { float: left; }
+
+.ui-menubar .ui-button { float: left; font-weight: normal; border-top-width: 0 !important; border-bottom-width: 0 !important; margin: 0; outline: none; }
+.ui-menubar .ui-menubar-link { border-right: 1px dashed transparent; border-left: 1px dashed transparent; }
+
+.ui-menubar .ui-menu { width: 200px; position: absolute; z-index: 9999; }
+/*
+ * jQuery UI Progressbar 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar#theming
+ */
+.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/*
+ * jQuery UI Resizable 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizable#theming
+ */
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
+ * jQuery UI Selectable 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectable#theming
+ */
+.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
+/*
+ * jQuery UI Slider 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider#theming
+ */
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
+ * jQuery UI Spinner 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Spinner#theming
+ */
+.ui-spinner { position:relative; display: inline-block; overflow: hidden; padding: 0; vertical-align: middle; }
+.ui-spinner-input { border: none; background: none; padding: 0; margin: .2em 0; vertical-align: middle; margin-left: .4em; margin-right: 22px; }
+.ui-spinner-button { width: 16px; height: 50%; font-size: .5em; padding: 0; margin: 0; z-index: 100; text-align: center; vertical-align: middle; position: absolute; cursor: default; display: block; overflow: hidden; right: 0; }
+.ui-spinner a.ui-spinner-button { border-top: none; border-bottom: none; border-right: none; } /* more specificity required here to overide default borders */
+.ui-spinner .ui-icon { position: absolute; margin-top: -8px; top: 50%; left: 0; } /* vertical centre icon */
+.ui-spinner-up { top: 0; }
+.ui-spinner-down { bottom: 0; }
+
+/* TR overrides */
+span.ui-spinner { background: none; }
+.ui-spinner .ui-icon-triangle-1-s {
+ /* need to fix icons sprite */
+ background-position:-65px -16px;
+}
+/*
+ * jQuery UI Tabs 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs#theming
+ */
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 0; margin: 1px .2em 0 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: -1px; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-tabs-loading a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+/*
+ * jQuery UI Tooltip 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tooltip#theming
+ */
+.ui-tooltip {
+ padding:8px;
+ position:absolute;
+ z-index:9999;
+ -o-box-shadow: 0 0 5px #aaa;
+ -moz-box-shadow: 0 0 5px #aaa;
+ -webkit-box-shadow: 0 0 5px #aaa;
+ box-shadow: 0 0 5px #aaa;
+}
+/* Fades and background-images don't work well together in IE6, drop the image */
+* html .ui-tooltip {
+ background-image: none;
+}
+body .ui-tooltip { border-width:2px; }
+/*
+ * jQuery UI CSS Framework 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; }
+.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; }
+.ui-widget-content a { color: #222222/*{fcContent}*/; }
+.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; }
+.ui-widget-header a { color: #222222/*{fcHeader}*/; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -khtml-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; }
+.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -khtml-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; }
+
+/* Overlays */
+.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; }
+.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; } \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.9pre.min.css b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.9pre.min.css
new file mode 100644
index 00000000..56a9be11
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.9pre.min.css
@@ -0,0 +1,10 @@
+/*
+ * jQuery UI CSS Framework 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+.ui-helper-hidden{display:none;}.ui-helper-hidden-accessible{position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none;}.ui-helper-clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.ui-helper-clearfix{display:inline-block;}/* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix{height:1%;}.ui-helper-clearfix{display:block;}/* end clearfix */ .ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0);}.ui-state-disabled{cursor:default!important;}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%;}.ui-accordion{width:100%;}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1;}.ui-accordion .ui-accordion-header-active{border-bottom:0!important;}.ui-accordion .ui-accordion-heading{display:block;font-size:1em;padding:.5em .5em .5em .7em;}.ui-accordion-icons .ui-accordion-heading{padding-left:2.2em;}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px;}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1;}.ui-accordion .ui-accordion-content-active{display:block;}.ui-autocomplete{position:absolute;cursor:default;}* html .ui-autocomplete{width:1px;}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible;}.ui-button-icon-only{width:2.2em;}button.ui-button-icon-only{width:2.4em;}.ui-button-icons-only{width:3.4em;}button.ui-button-icons-only{width:3.7em;}.ui-button .ui-button-text{display:block;line-height:1.4;}.ui-button-text-only .ui-button-text{padding:.4em 1em;}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px;}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em;}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em;}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em;}input.ui-button{padding:.4em 1em;}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px;}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px;}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em;}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em;}.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em;}.ui-buttonset{margin-right:7px;}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em;}button.ui-button::-moz-focus-inner{border:0;padding:0;}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none;}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0;}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em;}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px;}.ui-datepicker .ui-datepicker-prev{left:2px;}.ui-datepicker .ui-datepicker-next{right:2px;}.ui-datepicker .ui-datepicker-prev-hover{left:1px;}.ui-datepicker .ui-datepicker-next-hover{right:1px;}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px;}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center;}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0;}.ui-datepicker select.ui-datepicker-month-year{width:100%;}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%;}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em;}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0;}.ui-datepicker td{border:0;padding:1px;}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none;}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0;}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible;}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left;}.ui-datepicker.ui-datepicker-multi{width:auto;}.ui-datepicker-multi .ui-datepicker-group{float:left;}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em;}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%;}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%;}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%;}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0;}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0;}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left;}.ui-datepicker-row-break{clear:both;width:100%;font-size:0;}.ui-datepicker-rtl{direction:rtl;}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto;}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto;}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto;}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto;}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right;}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left;}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right;}.ui-datepicker-rtl .ui-datepicker-group{float:right;}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-cover{display:none;display:block;position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px;}.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden;}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative;}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0;}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px;}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px;}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0;}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1;}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em;}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right;}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer;}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px;}.ui-draggable .ui-dialog-titlebar{cursor:move;}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:none;}.ui-menu .ui-menu{margin-top:-3px;position:absolute;}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;width:100%;}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;zoom:1;font-weight:normal;}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px;}.ui-menu li.ui-state-disabled{font-weight:normal;padding:.0em .4em;margin:.4em 0 .2em;line-height:1.5;}.ui-menu-icons{position:relative;}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em;}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em;}.ui-menu .ui-menu-icon{position:static;float:right;}.ui-menubar{list-style:none;margin:0;padding-left:0;}.ui-menubar-item{float:left;}.ui-menubar .ui-button{float:left;font-weight:normal;border-top-width:0!important;border-bottom-width:0!important;margin:0;outline:none;}.ui-menubar .ui-menubar-link{border-right:1px dashed transparent;border-left:1px dashed transparent;}.ui-menubar .ui-menu{width:200px;position:absolute;z-index:9999;}.ui-progressbar{height:2em;text-align:left;overflow:hidden;}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%;}.ui-resizable{position:relative;}.ui-resizable-handle{position:absolute;font-size:.1px;z-index:99999;display:block;}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none;}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0;}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0;}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%;}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%;}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px;}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px;}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px;}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px;}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black;}.ui-slider{position:relative;text-align:left;}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0;}.ui-slider-horizontal{height:.8em;}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em;}.ui-slider-horizontal .ui-slider-range{top:0;height:100%;}.ui-slider-horizontal .ui-slider-range-min{left:0;}.ui-slider-horizontal .ui-slider-range-max{right:0;}.ui-slider-vertical{width:.8em;height:100px;}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em;}.ui-slider-vertical .ui-slider-range{left:0;width:100%;}.ui-slider-vertical .ui-slider-range-min{bottom:0;}.ui-slider-vertical .ui-slider-range-max{top:0;}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle;}.ui-spinner-input{border:none;background:none;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px;}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;z-index:100;text-align:center;vertical-align:middle;position:absolute;cursor:default;display:block;overflow:hidden;right:0;}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none;}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0;}.ui-spinner-up{top:0;}.ui-spinner-down{bottom:0;}span.ui-spinner{background:none;}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px;}.ui-tabs{position:relative;padding:.2em;zoom:1;}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0;}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom:0!important;padding:0;white-space:nowrap;}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none;}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px;}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text;}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer;}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none;}.ui-tooltip{padding:8px;position:absolute;z-index:9999;-o-box-shadow:0 0 5px #aaa;-moz-box-shadow:0 0 5px #aaa;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa;}* html .ui-tooltip{background-image:none;}body .ui-tooltip{border-width:2px;}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em;}.ui-widget .ui-widget{font-size:1em;}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em;}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222;}.ui-widget-content a{color:#222;}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold;}.ui-widget-header a{color:#222;}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555;}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none;}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121;}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none;}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121;}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none;}.ui-widget :active{outline:none;}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636;}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636;}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a;}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a;}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a;}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold;}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal;}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none;}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png);}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png);}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png);}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png);}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png);}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png);}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png);}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png);}.ui-icon-carat-1-n{background-position:0 0;}.ui-icon-carat-1-ne{background-position:-16px 0;}.ui-icon-carat-1-e{background-position:-32px 0;}.ui-icon-carat-1-se{background-position:-48px 0;}.ui-icon-carat-1-s{background-position:-64px 0;}.ui-icon-carat-1-sw{background-position:-80px 0;}.ui-icon-carat-1-w{background-position:-96px 0;}.ui-icon-carat-1-nw{background-position:-112px 0;}.ui-icon-carat-2-n-s{background-position:-128px 0;}.ui-icon-carat-2-e-w{background-position:-144px 0;}.ui-icon-triangle-1-n{background-position:0 -16px;}.ui-icon-triangle-1-ne{background-position:-16px -16px;}.ui-icon-triangle-1-e{background-position:-32px -16px;}.ui-icon-triangle-1-se{background-position:-48px -16px;}.ui-icon-triangle-1-s{background-position:-64px -16px;}.ui-icon-triangle-1-sw{background-position:-80px -16px;}.ui-icon-triangle-1-w{background-position:-96px -16px;}.ui-icon-triangle-1-nw{background-position:-112px -16px;}.ui-icon-triangle-2-n-s{background-position:-128px -16px;}.ui-icon-triangle-2-e-w{background-position:-144px -16px;}.ui-icon-arrow-1-n{background-position:0 -32px;}.ui-icon-arrow-1-ne{background-position:-16px -32px;}.ui-icon-arrow-1-e{background-position:-32px -32px;}.ui-icon-arrow-1-se{background-position:-48px -32px;}.ui-icon-arrow-1-s{background-position:-64px -32px;}.ui-icon-arrow-1-sw{background-position:-80px -32px;}.ui-icon-arrow-1-w{background-position:-96px -32px;}.ui-icon-arrow-1-nw{background-position:-112px -32px;}.ui-icon-arrow-2-n-s{background-position:-128px -32px;}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px;}.ui-icon-arrow-2-e-w{background-position:-160px -32px;}.ui-icon-arrow-2-se-nw{background-position:-176px -32px;}.ui-icon-arrowstop-1-n{background-position:-192px -32px;}.ui-icon-arrowstop-1-e{background-position:-208px -32px;}.ui-icon-arrowstop-1-s{background-position:-224px -32px;}.ui-icon-arrowstop-1-w{background-position:-240px -32px;}.ui-icon-arrowthick-1-n{background-position:0 -48px;}.ui-icon-arrowthick-1-ne{background-position:-16px -48px;}.ui-icon-arrowthick-1-e{background-position:-32px -48px;}.ui-icon-arrowthick-1-se{background-position:-48px -48px;}.ui-icon-arrowthick-1-s{background-position:-64px -48px;}.ui-icon-arrowthick-1-sw{background-position:-80px -48px;}.ui-icon-arrowthick-1-w{background-position:-96px -48px;}.ui-icon-arrowthick-1-nw{background-position:-112px -48px;}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px;}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px;}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px;}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px;}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px;}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px;}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px;}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px;}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px;}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px;}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px;}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px;}.ui-icon-arrowreturn-1-w{background-position:-64px -64px;}.ui-icon-arrowreturn-1-n{background-position:-80px -64px;}.ui-icon-arrowreturn-1-e{background-position:-96px -64px;}.ui-icon-arrowreturn-1-s{background-position:-112px -64px;}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px;}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px;}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px;}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px;}.ui-icon-arrow-4{background-position:0 -80px;}.ui-icon-arrow-4-diag{background-position:-16px -80px;}.ui-icon-extlink{background-position:-32px -80px;}.ui-icon-newwin{background-position:-48px -80px;}.ui-icon-refresh{background-position:-64px -80px;}.ui-icon-shuffle{background-position:-80px -80px;}.ui-icon-transfer-e-w{background-position:-96px -80px;}.ui-icon-transferthick-e-w{background-position:-112px -80px;}.ui-icon-folder-collapsed{background-position:0 -96px;}.ui-icon-folder-open{background-position:-16px -96px;}.ui-icon-document{background-position:-32px -96px;}.ui-icon-document-b{background-position:-48px -96px;}.ui-icon-note{background-position:-64px -96px;}.ui-icon-mail-closed{background-position:-80px -96px;}.ui-icon-mail-open{background-position:-96px -96px;}.ui-icon-suitcase{background-position:-112px -96px;}.ui-icon-comment{background-position:-128px -96px;}.ui-icon-person{background-position:-144px -96px;}.ui-icon-print{background-position:-160px -96px;}.ui-icon-trash{background-position:-176px -96px;}.ui-icon-locked{background-position:-192px -96px;}.ui-icon-unlocked{background-position:-208px -96px;}.ui-icon-bookmark{background-position:-224px -96px;}.ui-icon-tag{background-position:-240px -96px;}.ui-icon-home{background-position:0 -112px;}.ui-icon-flag{background-position:-16px -112px;}.ui-icon-calendar{background-position:-32px -112px;}.ui-icon-cart{background-position:-48px -112px;}.ui-icon-pencil{background-position:-64px -112px;}.ui-icon-clock{background-position:-80px -112px;}.ui-icon-disk{background-position:-96px -112px;}.ui-icon-calculator{background-position:-112px -112px;}.ui-icon-zoomin{background-position:-128px -112px;}.ui-icon-zoomout{background-position:-144px -112px;}.ui-icon-search{background-position:-160px -112px;}.ui-icon-wrench{background-position:-176px -112px;}.ui-icon-gear{background-position:-192px -112px;}.ui-icon-heart{background-position:-208px -112px;}.ui-icon-star{background-position:-224px -112px;}.ui-icon-link{background-position:-240px -112px;}.ui-icon-cancel{background-position:0 -128px;}.ui-icon-plus{background-position:-16px -128px;}.ui-icon-plusthick{background-position:-32px -128px;}.ui-icon-minus{background-position:-48px -128px;}.ui-icon-minusthick{background-position:-64px -128px;}.ui-icon-close{background-position:-80px -128px;}.ui-icon-closethick{background-position:-96px -128px;}.ui-icon-key{background-position:-112px -128px;}.ui-icon-lightbulb{background-position:-128px -128px;}.ui-icon-scissors{background-position:-144px -128px;}.ui-icon-clipboard{background-position:-160px -128px;}.ui-icon-copy{background-position:-176px -128px;}.ui-icon-contact{background-position:-192px -128px;}.ui-icon-image{background-position:-208px -128px;}.ui-icon-video{background-position:-224px -128px;}.ui-icon-script{background-position:-240px -128px;}.ui-icon-alert{background-position:0 -144px;}.ui-icon-info{background-position:-16px -144px;}.ui-icon-notice{background-position:-32px -144px;}.ui-icon-help{background-position:-48px -144px;}.ui-icon-check{background-position:-64px -144px;}.ui-icon-bullet{background-position:-80px -144px;}.ui-icon-radio-on{background-position:-96px -144px;}.ui-icon-radio-off{background-position:-112px -144px;}.ui-icon-pin-w{background-position:-128px -144px;}.ui-icon-pin-s{background-position:-144px -144px;}.ui-icon-play{background-position:0 -160px;}.ui-icon-pause{background-position:-16px -160px;}.ui-icon-seek-next{background-position:-32px -160px;}.ui-icon-seek-prev{background-position:-48px -160px;}.ui-icon-seek-end{background-position:-64px -160px;}.ui-icon-seek-start{background-position:-80px -160px;}.ui-icon-seek-first{background-position:-80px -160px;}.ui-icon-stop{background-position:-96px -160px;}.ui-icon-eject{background-position:-112px -160px;}.ui-icon-volume-off{background-position:-128px -160px;}.ui-icon-volume-on{background-position:-144px -160px;}.ui-icon-power{background-position:0 -176px;}.ui-icon-signal-diag{background-position:-16px -176px;}.ui-icon-signal{background-position:-32px -176px;}.ui-icon-battery-0{background-position:-48px -176px;}.ui-icon-battery-1{background-position:-64px -176px;}.ui-icon-battery-2{background-position:-80px -176px;}.ui-icon-battery-3{background-position:-96px -176px;}.ui-icon-circle-plus{background-position:0 -192px;}.ui-icon-circle-minus{background-position:-16px -192px;}.ui-icon-circle-close{background-position:-32px -192px;}.ui-icon-circle-triangle-e{background-position:-48px -192px;}.ui-icon-circle-triangle-s{background-position:-64px -192px;}.ui-icon-circle-triangle-w{background-position:-80px -192px;}.ui-icon-circle-triangle-n{background-position:-96px -192px;}.ui-icon-circle-arrow-e{background-position:-112px -192px;}.ui-icon-circle-arrow-s{background-position:-128px -192px;}.ui-icon-circle-arrow-w{background-position:-144px -192px;}.ui-icon-circle-arrow-n{background-position:-160px -192px;}.ui-icon-circle-zoomin{background-position:-176px -192px;}.ui-icon-circle-zoomout{background-position:-192px -192px;}.ui-icon-circle-check{background-position:-208px -192px;}.ui-icon-circlesmall-plus{background-position:0 -208px;}.ui-icon-circlesmall-minus{background-position:-16px -208px;}.ui-icon-circlesmall-close{background-position:-32px -208px;}.ui-icon-squaresmall-plus{background-position:-48px -208px;}.ui-icon-squaresmall-minus{background-position:-64px -208px;}.ui-icon-squaresmall-close{background-position:-80px -208px;}.ui-icon-grip-dotted-vertical{background-position:0 -224px;}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px;}.ui-icon-grip-solid-vertical{background-position:-32px -224px;}.ui-icon-grip-solid-horizontal{background-position:-48px -224px;}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px;}.ui-icon-grip-diagonal-se{background-position:-80px -224px;}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px;}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px;}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px;}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px;}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui.css b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui.css
new file mode 100644
index 00000000..5547c7b9
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui.css
@@ -0,0 +1,568 @@
+/*
+ * jQuery UI CSS Framework 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*
+ * jQuery UI CSS Framework 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
+.ui-widget-content a { color: #333333; }
+.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
+.ui-widget-header a { color: #ffffff; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
+.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
+.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*
+ * jQuery UI Resizable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizable#theming
+ */
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
+ * jQuery UI Selectable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectable#theming
+ */
+.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
+/*
+ * jQuery UI Accordion 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion#theming
+ */
+/* IE/Win - Fix animation bug - #4615 */
+.ui-accordion { width: 100%; }
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-li-fix { display: inline; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
+.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
+.ui-accordion .ui-accordion-content-active { display: block; }
+/*
+ * jQuery UI Autocomplete 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete#theming
+ */
+.ui-autocomplete { position: absolute; cursor: default; }
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+
+/*
+ * jQuery UI Menu 1.8.16
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Menu#theming
+ */
+.ui-menu {
+ list-style:none;
+ padding: 2px;
+ margin: 0;
+ display:block;
+ float: left;
+}
+.ui-menu .ui-menu {
+ margin-top: -3px;
+}
+.ui-menu .ui-menu-item {
+ margin:0;
+ padding: 0;
+ zoom: 1;
+ float: left;
+ clear: left;
+ width: 100%;
+}
+.ui-menu .ui-menu-item a {
+ text-decoration:none;
+ display:block;
+ padding:.2em .4em;
+ line-height:1.5;
+ zoom:1;
+}
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+ font-weight: normal;
+ margin: -1px;
+}
+/*
+ * jQuery UI Button 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button#theming
+ */
+.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
+.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
+button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
+.ui-button-icons-only { width: 3.4em; }
+button.ui-button-icons-only { width: 3.7em; }
+
+/*button text element */
+.ui-button .ui-button-text { display: block; line-height: 1.4; }
+.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
+.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
+.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
+.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+/* no icon support for input elements, provide padding by default */
+input.ui-button { padding: .4em 1em; }
+
+/*button icon element(s) */
+.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
+.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
+.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
+.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+
+/*button sets*/
+.ui-buttonset { margin-right: 7px; }
+.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+
+/* workarounds */
+button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+/*
+ * jQuery UI Dialog 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog#theming
+ */
+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/*
+ * jQuery UI Slider 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider#theming
+ */
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
+ * jQuery UI Tabs 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs#theming
+ */
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
+/*
+ * jQuery UI Datepicker 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker#theming
+ */
+.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+ display: none; /*sorry for IE5*/
+ display/**/: block; /*sorry for IE5*/
+ position: absolute; /*must have*/
+ z-index: -1; /*must have*/
+ filter: mask(); /*must have*/
+ top: -4px; /*must have*/
+ left: -4px; /*must have*/
+ width: 200px; /*must have*/
+ height: 200px; /*must have*/
+}/*
+ * jQuery UI Progressbar 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar#theming
+ */
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui.min.css b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui.min.css
new file mode 100644
index 00000000..78f7d3d0
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui.min.css
@@ -0,0 +1 @@
+.ui-helper-hidden{display:none;}.ui-helper-hidden-accessible{position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none;}.ui-helper-clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.ui-helper-clearfix{display:inline-block;}/* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix{height:1%;}.ui-helper-clearfix{display:block;}/* end clearfix */ .ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0);}.ui-state-disabled{cursor:default!important;}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%;}.ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em;}.ui-widget .ui-widget{font-size:1em;}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em;}.ui-widget-content{border:1px solid #ddd;background:#eee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;color:#333;}.ui-widget-content a{color:#333;}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;color:#fff;font-weight:bold;}.ui-widget-header a{color:#fff;}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#1c94c4;}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none;}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #fbcb09;background:#fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#c77405;}.ui-state-hover a,.ui-state-hover a:hover{color:#c77405;text-decoration:none;}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#eb8f00;}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none;}.ui-widget :active{outline:none;}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;color:#363636;}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636;}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;color:#fff;}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff;}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff;}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold;}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal;}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none;}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png);}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png);}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_ffffff_256x240.png);}.ui-state-default .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png);}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png);}.ui-state-active .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png);}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_228ef1_256x240.png);}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_ffd27a_256x240.png);}.ui-icon-carat-1-n{background-position:0 0;}.ui-icon-carat-1-ne{background-position:-16px 0;}.ui-icon-carat-1-e{background-position:-32px 0;}.ui-icon-carat-1-se{background-position:-48px 0;}.ui-icon-carat-1-s{background-position:-64px 0;}.ui-icon-carat-1-sw{background-position:-80px 0;}.ui-icon-carat-1-w{background-position:-96px 0;}.ui-icon-carat-1-nw{background-position:-112px 0;}.ui-icon-carat-2-n-s{background-position:-128px 0;}.ui-icon-carat-2-e-w{background-position:-144px 0;}.ui-icon-triangle-1-n{background-position:0 -16px;}.ui-icon-triangle-1-ne{background-position:-16px -16px;}.ui-icon-triangle-1-e{background-position:-32px -16px;}.ui-icon-triangle-1-se{background-position:-48px -16px;}.ui-icon-triangle-1-s{background-position:-64px -16px;}.ui-icon-triangle-1-sw{background-position:-80px -16px;}.ui-icon-triangle-1-w{background-position:-96px -16px;}.ui-icon-triangle-1-nw{background-position:-112px -16px;}.ui-icon-triangle-2-n-s{background-position:-128px -16px;}.ui-icon-triangle-2-e-w{background-position:-144px -16px;}.ui-icon-arrow-1-n{background-position:0 -32px;}.ui-icon-arrow-1-ne{background-position:-16px -32px;}.ui-icon-arrow-1-e{background-position:-32px -32px;}.ui-icon-arrow-1-se{background-position:-48px -32px;}.ui-icon-arrow-1-s{background-position:-64px -32px;}.ui-icon-arrow-1-sw{background-position:-80px -32px;}.ui-icon-arrow-1-w{background-position:-96px -32px;}.ui-icon-arrow-1-nw{background-position:-112px -32px;}.ui-icon-arrow-2-n-s{background-position:-128px -32px;}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px;}.ui-icon-arrow-2-e-w{background-position:-160px -32px;}.ui-icon-arrow-2-se-nw{background-position:-176px -32px;}.ui-icon-arrowstop-1-n{background-position:-192px -32px;}.ui-icon-arrowstop-1-e{background-position:-208px -32px;}.ui-icon-arrowstop-1-s{background-position:-224px -32px;}.ui-icon-arrowstop-1-w{background-position:-240px -32px;}.ui-icon-arrowthick-1-n{background-position:0 -48px;}.ui-icon-arrowthick-1-ne{background-position:-16px -48px;}.ui-icon-arrowthick-1-e{background-position:-32px -48px;}.ui-icon-arrowthick-1-se{background-position:-48px -48px;}.ui-icon-arrowthick-1-s{background-position:-64px -48px;}.ui-icon-arrowthick-1-sw{background-position:-80px -48px;}.ui-icon-arrowthick-1-w{background-position:-96px -48px;}.ui-icon-arrowthick-1-nw{background-position:-112px -48px;}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px;}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px;}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px;}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px;}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px;}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px;}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px;}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px;}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px;}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px;}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px;}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px;}.ui-icon-arrowreturn-1-w{background-position:-64px -64px;}.ui-icon-arrowreturn-1-n{background-position:-80px -64px;}.ui-icon-arrowreturn-1-e{background-position:-96px -64px;}.ui-icon-arrowreturn-1-s{background-position:-112px -64px;}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px;}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px;}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px;}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px;}.ui-icon-arrow-4{background-position:0 -80px;}.ui-icon-arrow-4-diag{background-position:-16px -80px;}.ui-icon-extlink{background-position:-32px -80px;}.ui-icon-newwin{background-position:-48px -80px;}.ui-icon-refresh{background-position:-64px -80px;}.ui-icon-shuffle{background-position:-80px -80px;}.ui-icon-transfer-e-w{background-position:-96px -80px;}.ui-icon-transferthick-e-w{background-position:-112px -80px;}.ui-icon-folder-collapsed{background-position:0 -96px;}.ui-icon-folder-open{background-position:-16px -96px;}.ui-icon-document{background-position:-32px -96px;}.ui-icon-document-b{background-position:-48px -96px;}.ui-icon-note{background-position:-64px -96px;}.ui-icon-mail-closed{background-position:-80px -96px;}.ui-icon-mail-open{background-position:-96px -96px;}.ui-icon-suitcase{background-position:-112px -96px;}.ui-icon-comment{background-position:-128px -96px;}.ui-icon-person{background-position:-144px -96px;}.ui-icon-print{background-position:-160px -96px;}.ui-icon-trash{background-position:-176px -96px;}.ui-icon-locked{background-position:-192px -96px;}.ui-icon-unlocked{background-position:-208px -96px;}.ui-icon-bookmark{background-position:-224px -96px;}.ui-icon-tag{background-position:-240px -96px;}.ui-icon-home{background-position:0 -112px;}.ui-icon-flag{background-position:-16px -112px;}.ui-icon-calendar{background-position:-32px -112px;}.ui-icon-cart{background-position:-48px -112px;}.ui-icon-pencil{background-position:-64px -112px;}.ui-icon-clock{background-position:-80px -112px;}.ui-icon-disk{background-position:-96px -112px;}.ui-icon-calculator{background-position:-112px -112px;}.ui-icon-zoomin{background-position:-128px -112px;}.ui-icon-zoomout{background-position:-144px -112px;}.ui-icon-search{background-position:-160px -112px;}.ui-icon-wrench{background-position:-176px -112px;}.ui-icon-gear{background-position:-192px -112px;}.ui-icon-heart{background-position:-208px -112px;}.ui-icon-star{background-position:-224px -112px;}.ui-icon-link{background-position:-240px -112px;}.ui-icon-cancel{background-position:0 -128px;}.ui-icon-plus{background-position:-16px -128px;}.ui-icon-plusthick{background-position:-32px -128px;}.ui-icon-minus{background-position:-48px -128px;}.ui-icon-minusthick{background-position:-64px -128px;}.ui-icon-close{background-position:-80px -128px;}.ui-icon-closethick{background-position:-96px -128px;}.ui-icon-key{background-position:-112px -128px;}.ui-icon-lightbulb{background-position:-128px -128px;}.ui-icon-scissors{background-position:-144px -128px;}.ui-icon-clipboard{background-position:-160px -128px;}.ui-icon-copy{background-position:-176px -128px;}.ui-icon-contact{background-position:-192px -128px;}.ui-icon-image{background-position:-208px -128px;}.ui-icon-video{background-position:-224px -128px;}.ui-icon-script{background-position:-240px -128px;}.ui-icon-alert{background-position:0 -144px;}.ui-icon-info{background-position:-16px -144px;}.ui-icon-notice{background-position:-32px -144px;}.ui-icon-help{background-position:-48px -144px;}.ui-icon-check{background-position:-64px -144px;}.ui-icon-bullet{background-position:-80px -144px;}.ui-icon-radio-off{background-position:-96px -144px;}.ui-icon-radio-on{background-position:-112px -144px;}.ui-icon-pin-w{background-position:-128px -144px;}.ui-icon-pin-s{background-position:-144px -144px;}.ui-icon-play{background-position:0 -160px;}.ui-icon-pause{background-position:-16px -160px;}.ui-icon-seek-next{background-position:-32px -160px;}.ui-icon-seek-prev{background-position:-48px -160px;}.ui-icon-seek-end{background-position:-64px -160px;}.ui-icon-seek-start{background-position:-80px -160px;}.ui-icon-seek-first{background-position:-80px -160px;}.ui-icon-stop{background-position:-96px -160px;}.ui-icon-eject{background-position:-112px -160px;}.ui-icon-volume-off{background-position:-128px -160px;}.ui-icon-volume-on{background-position:-144px -160px;}.ui-icon-power{background-position:0 -176px;}.ui-icon-signal-diag{background-position:-16px -176px;}.ui-icon-signal{background-position:-32px -176px;}.ui-icon-battery-0{background-position:-48px -176px;}.ui-icon-battery-1{background-position:-64px -176px;}.ui-icon-battery-2{background-position:-80px -176px;}.ui-icon-battery-3{background-position:-96px -176px;}.ui-icon-circle-plus{background-position:0 -192px;}.ui-icon-circle-minus{background-position:-16px -192px;}.ui-icon-circle-close{background-position:-32px -192px;}.ui-icon-circle-triangle-e{background-position:-48px -192px;}.ui-icon-circle-triangle-s{background-position:-64px -192px;}.ui-icon-circle-triangle-w{background-position:-80px -192px;}.ui-icon-circle-triangle-n{background-position:-96px -192px;}.ui-icon-circle-arrow-e{background-position:-112px -192px;}.ui-icon-circle-arrow-s{background-position:-128px -192px;}.ui-icon-circle-arrow-w{background-position:-144px -192px;}.ui-icon-circle-arrow-n{background-position:-160px -192px;}.ui-icon-circle-zoomin{background-position:-176px -192px;}.ui-icon-circle-zoomout{background-position:-192px -192px;}.ui-icon-circle-check{background-position:-208px -192px;}.ui-icon-circlesmall-plus{background-position:0 -208px;}.ui-icon-circlesmall-minus{background-position:-16px -208px;}.ui-icon-circlesmall-close{background-position:-32px -208px;}.ui-icon-squaresmall-plus{background-position:-48px -208px;}.ui-icon-squaresmall-minus{background-position:-64px -208px;}.ui-icon-squaresmall-close{background-position:-80px -208px;}.ui-icon-grip-dotted-vertical{background-position:0 -224px;}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px;}.ui-icon-grip-solid-vertical{background-position:-32px -224px;}.ui-icon-grip-solid-horizontal{background-position:-48px -224px;}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px;}.ui-icon-grip-diagonal-se{background-position:-80px -224px;}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px;}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px;}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px;}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px;}.ui-widget-overlay{background:#666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;opacity:.50;filter:Alpha(Opacity=50);}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;opacity:.20;filter:Alpha(Opacity=20);-moz-border-radius:5px;-khtml-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;}.ui-resizable{position:relative;}.ui-resizable-handle{position:absolute;font-size:.1px;z-index:99999;display:block;}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none;}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0;}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0;}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%;}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%;}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px;}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px;}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px;}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px;}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black;}.ui-accordion{width:100%;}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1;}.ui-accordion .ui-accordion-li-fix{display:inline;}.ui-accordion .ui-accordion-header-active{border-bottom:0!important;}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em .7em;}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em;}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px;}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1;}.ui-accordion .ui-accordion-content-active{display:block;}.ui-autocomplete{position:absolute;cursor:default;}* html .ui-autocomplete{width:1px;}.ui-menu{list-style:none;padding:2px;margin:0;display:block;float:left;}.ui-menu .ui-menu{margin-top:-3px;}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;float:left;clear:left;width:100%;}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:.2em .4em;line-height:1.5;zoom:1;}.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px;}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible;}.ui-button-icon-only{width:2.2em;}button.ui-button-icon-only{width:2.4em;}.ui-button-icons-only{width:3.4em;}button.ui-button-icons-only{width:3.7em;}.ui-button .ui-button-text{display:block;line-height:1.4;}.ui-button-text-only .ui-button-text{padding:.4em 1em;}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px;}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em;}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em;}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em;}input.ui-button{padding:.4em 1em;}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px;}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px;}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em;}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em;}.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em;}.ui-buttonset{margin-right:7px;}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em;}button.ui-button::-moz-focus-inner{border:0;padding:0;}.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden;}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative;}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0;}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px;}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px;}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0;}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1;}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em;}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right;}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer;}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px;}.ui-draggable .ui-dialog-titlebar{cursor:move;}.ui-slider{position:relative;text-align:left;}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0;}.ui-slider-horizontal{height:.8em;}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em;}.ui-slider-horizontal .ui-slider-range{top:0;height:100%;}.ui-slider-horizontal .ui-slider-range-min{left:0;}.ui-slider-horizontal .ui-slider-range-max{right:0;}.ui-slider-vertical{width:.8em;height:100px;}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em;}.ui-slider-vertical .ui-slider-range{left:0;width:100%;}.ui-slider-vertical .ui-slider-range-min{bottom:0;}.ui-slider-vertical .ui-slider-range-max{top:0;}.ui-tabs{position:relative;padding:.2em;zoom:1;}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0;}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0!important;padding:0;white-space:nowrap;}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none;}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px;}.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text;}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer;}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none;}.ui-tabs .ui-tabs-hide{display:none!important;}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none;}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0;}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em;}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px;}.ui-datepicker .ui-datepicker-prev{left:2px;}.ui-datepicker .ui-datepicker-next{right:2px;}.ui-datepicker .ui-datepicker-prev-hover{left:1px;}.ui-datepicker .ui-datepicker-next-hover{right:1px;}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px;}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center;}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0;}.ui-datepicker select.ui-datepicker-month-year{width:100%;}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%;}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em;}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0;}.ui-datepicker td{border:0;padding:1px;}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none;}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0;}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible;}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left;}.ui-datepicker.ui-datepicker-multi{width:auto;}.ui-datepicker-multi .ui-datepicker-group{float:left;}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em;}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%;}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%;}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%;}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0;}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0;}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left;}.ui-datepicker-row-break{clear:both;width:100%;font-size:0;}.ui-datepicker-rtl{direction:rtl;}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto;}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto;}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto;}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto;}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right;}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left;}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right;}.ui-datepicker-rtl .ui-datepicker-group{float:right;}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-cover{display:none;display:block;position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px;}.ui-progressbar{height:2em;text-align:left;}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%;} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery-ui-1.9pre.min.js b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery-ui-1.9pre.min.js
new file mode 100644
index 00000000..5ca2642d
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery-ui-1.9pre.min.js
@@ -0,0 +1,473 @@
+/*!
+ * jQuery UI 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(a,g){function d(e,f){var i=e.nodeName.toLowerCase();if("area"===i){i=e.parentNode;var b=i.name;if(!e.href||!b||i.nodeName.toLowerCase()!=="map")return false;i=a("img[usemap=#"+b+"]")[0];return!!i&&c(i)}return(/input|select|textarea|button|object/.test(i)?!e.disabled:"a"==i?e.href||f:f)&&c(e)}function c(e){return!a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(!a.ui.version){a.extend(a.ui,{version:"1.9pre",
+keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var i=this;setTimeout(function(){a(i).focus();
+f&&f.call(i)},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;e=a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,
+"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!e.length?a(document):e},zIndex:function(e){if(e!==g)return this.css("zIndex",e);if(this.length){e=a(this[0]);for(var f;e.length&&e[0]!==document;){f=e.css("position");if(f==="absolute"||f==="relative"||f==="fixed"){f=parseInt(e.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}e=e.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",
+function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(e,f){function i(l,j,m,n){a.each(b,function(){j-=parseFloat(a.curCSS(l,"padding"+this,true))||0;if(m)j-=parseFloat(a.curCSS(l,"border"+this+"Width",true))||0;if(n)j-=parseFloat(a.curCSS(l,"margin"+this,true))||0});return j}var b=f==="Width"?["Left","Right"]:["Top","Bottom"],h=f.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,
+outerHeight:a.fn.outerHeight};a.fn["inner"+f]=function(l){if(l===g)return k["inner"+f].call(this);return this.each(function(){a(this).css(h,i(this,l)+"px")})};a.fn["outer"+f]=function(l,j){if(typeof l!=="number")return k["outer"+f].call(this,l);return this.each(function(){a(this).css(h,i(this,l,true,j)+"px")})}});a.extend(a.expr[":"],{data:function(e,f,i){return!!a.data(e,i[3])},focusable:function(e){return d(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(e){var f=a.attr(e,"tabindex"),i=isNaN(f);
+return(i||f>=0)&&d(e,!i)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart"in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(e,f,i){e=a.ui[e].prototype;for(var b in i){e.plugins[b]=e.plugins[b]||[];e.plugins[b].push([f,i[b]])}},call:function(e,f,i){if((f=e.plugins[f])&&e.element[0].parentNode)for(var b=
+0;b<f.length;b++)e.options[f[b][0]]&&f[b][1].apply(e.element,i)}},contains:a.contains,hasScroll:function(e,f){if(a(e).css("overflow")==="hidden")return false;var i=f&&f==="left"?"scrollLeft":"scrollTop",b=false;if(e[i]>0)return true;e[i]=1;b=e[i]>0;e[i]=0;return b},isOverAxis:function(e,f,i){return e>f&&e<f+i},isOver:function(e,f,i,b,h,k){return a.ui.isOverAxis(e,i,h)&&a.ui.isOverAxis(f,b,k)}})}})(jQuery);
+(function(a,g){var d=Array.prototype.slice,c=a.cleanData;a.cleanData=function(e){for(var f=0,i;(i=e[f])!=null;f++)try{a(i).triggerHandler("remove")}catch(b){}c(e)};a.widget=function(e,f,i){var b=e.split(".")[0],h;e=e.split(".")[1];h=b+"-"+e;if(!i){i=f;f=a.Widget}a.expr[":"][h]=function(l){return!!a.data(l,e)};a[b]=a[b]||{};a[b][e]=a.extend(function(l,j){if(!this._createWidget)return new a[b][e](l,j);arguments.length&&this._createWidget(l,j)},a[b][e],{version:i.version});var k=new f;k.options=a.widget.extend({},
+k.options);a.each(i,function(l,j){if(a.isFunction(j))i[l]=function(){var m=function(o){return f.prototype[o].apply(this,d.call(arguments,1))},n=function(o,p){return f.prototype[o].apply(this,p)};return function(){var o=this._super,p=this._superApply,q;this._super=m;this._superApply=n;q=j.apply(this,arguments);this._super=o;this._superApply=p;return q}}()});a[b][e].prototype=a.widget.extend(k,{namespace:b,widgetName:e,widgetEventPrefix:e,widgetBaseClass:h},i);a.widget.bridge(e,a[b][e])};a.widget.extend=
+function(e){for(var f=d.call(arguments,1),i=0,b=f.length,h,k;i<b;i++)for(h in f[i]){k=f[i][h];if(f[i].hasOwnProperty(h)&&k!==g)e[h]=a.isPlainObject(k)?a.widget.extend({},e[h],k):k}return e};a.widget.bridge=function(e,f){a.fn[e]=function(i){var b=typeof i==="string",h=d.call(arguments,1),k=this;i=!b&&h.length?a.widget.extend.apply(null,[i].concat(h)):i;b?this.each(function(){var l=a.data(this,e);if(!l)return a.error("cannot call methods on "+e+" prior to initialization; attempted to call method '"+
+i+"'");if(!a.isFunction(l[i])||i.charAt(0)==="_")return a.error("no such method '"+i+"' for "+e+" widget instance");var j=l[i].apply(l,h);if(j!==l&&j!==g){k=j&&j.jquery?k.pushStack(j.get()):j;return false}}):this.each(function(){var l=a.data(this,e);l?l.option(i||{})._init():f(i,this)});return k}};a.Widget=function(e,f){if(!this._createWidget)return new a[namespace][name](e,f);arguments.length&&this._createWidget(e,f)};a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",
+options:{disabled:false,create:null},_createWidget:function(e,f){f=a(f||this.defaultElement||this)[0];this.element=a(f);this.options=a.widget.extend({},this.options,this._getCreateOptions(),e);this.bindings=a();this.hoverable=a();this.focusable=a();if(f!==this){a.data(f,this.widgetName,this);this._bind({remove:"destroy"})}this._create();this._trigger("create");this._init()},_getCreateOptions:a.noop,_create:a.noop,_init:a.noop,destroy:function(){this._destroy();this.element.unbind("."+this.widgetName).removeData(this.widgetName);
+this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled");this.bindings.unbind("."+this.widgetName);this.hoverable.removeClass("ui-state-hover");this.focusable.removeClass("ui-state-focus")},_destroy:a.noop,widget:function(){return this.element},option:function(e,f){var i=e,b,h,k;if(arguments.length===0)return a.widget.extend({},this.options);if(typeof e==="string"){i={};b=e.split(".");e=b.shift();if(b.length){h=i[e]=a.widget.extend({},
+this.options[e]);for(k=0;k<b.length-1;k++){h[b[k]]=h[b[k]]||{};h=h[b[k]]}e=b.pop();if(f===g)return h[e]===g?null:h[e];h[e]=f}else{if(f===g)return this.options[e]===g?null:this.options[e];i[e]=f}}this._setOptions(i);return this},_setOptions:function(e){var f=this;a.each(e,function(i,b){f._setOption(i,b)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget().toggleClass(this.widgetBaseClass+"-disabled ui-state-disabled",!!f).attr("aria-disabled",f);this.hoverable.removeClass("ui-state-hover");
+this.focusable.removeClass("ui-state-focus")}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_bind:function(e,f){if(f){e=a(e);this.bindings=this.bindings.add(e)}else{f=e;e=this.element}var i=this;a.each(f,function(b,h){function k(){if(!(i.options.disabled===true||a(this).hasClass("ui-state-disabled")))return(typeof h==="string"?i[h]:h).apply(i,arguments)}var l=b.match(/^(\w+)\s*(.*)$/),j=l[1]+"."+i.widgetName;(l=
+l[2])?i.widget().delegate(l,j,k):e.bind(j,k)})},_delay:function(e,f){var i=this;return setTimeout(function(){return(typeof e==="string"?i[e]:e).apply(i,arguments)},f||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e);this._bind(e,{mouseenter:function(f){a(f.currentTarget).addClass("ui-state-hover")},mouseleave:function(f){a(f.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e);this._bind(e,{focusin:function(f){a(f.currentTarget).addClass("ui-state-focus")},
+focusout:function(f){a(f.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(e,f,i){var b=this.options[e];f=a.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();i=i||{};if(f.originalEvent){e=a.event.props.length;for(var h;e;){h=a.event.props[--e];f[h]=f.originalEvent[h]}}this.element.trigger(f,i);i=a.isArray(i)?[f].concat(i):[f,i];return!(a.isFunction(b)&&b.apply(this.element[0],i)===false||f.isDefaultPrevented())}};a.each({show:"fadeIn",hide:"fadeOut"},
+function(e,f){a.Widget.prototype["_"+e]=function(i,b,h){if(typeof b==="string")b={effect:b};var k,l=!b?e:b===true||typeof b==="number"?f:b.effect||f;b=b||{};if(typeof b==="number")b={duration:b};k=!a.isEmptyObject(b);b.complete=h;b.delay&&i.delay(b.delay);if(k&&a.effects&&(a.effects.effect[l]||a.uiBackCompat!==false&&a.effects[l]))i[e](b);else if(l!==e&&i[l])i[l](b.duration,b.easing,h);else i.queue(function(j){a(this)[e]();h&&h.call(i[0]);j()})}});if(a.uiBackCompat!==false)a.Widget.prototype._getCreateOptions=
+function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]}})(jQuery);
+(function(a){var g=false;a(document).mouseup(function(){g=false});a.widget("ui.mouse",{version:"1.9pre",options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(c){return d._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===a.data(c.target,d.widgetName+".preventClickEvent")){a.removeData(c.target,d.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},
+_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(d){if(!g){this._mouseStarted&&this._mouseUp(d);this._mouseDownEvent=d;var c=this,e=d.which==1,f=typeof this.options.cancel=="string"&&d.target.nodeName?a(d.target).closest(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(d))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(d)&&
+this._mouseDelayMet(d)){this._mouseStarted=this._mouseStart(d)!==false;if(!this._mouseStarted){d.preventDefault();return true}}true===a.data(d.target,this.widgetName+".preventClickEvent")&&a.removeData(d.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(i){return c._mouseMove(i)};this._mouseUpDelegate=function(i){return c._mouseUp(i)};a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);d.preventDefault();
+return g=true}},_mouseMove:function(d){if(a.browser.msie&&!(document.documentMode>=9)&&!d.button)return this._mouseUp(d);if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,d)!==false)?this._mouseDrag(d):this._mouseUp(d);return!this._mouseStarted},_mouseUp:function(d){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,
+this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;d.target==this._mouseDownEvent.target&&a.data(d.target,this.widgetName+".preventClickEvent",true);this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
+(function(a){a.widget("ui.draggable",a.ui.mouse,{version:"1.9pre",widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
+"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(g){var d=
+this.options;if(this.helper||d.disabled||a(g.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(g);if(!this.handle)return false;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(a(this).offset()).appendTo("body")});return true},_mouseStart:function(g){var d=this.options;this.helper=
+this._createHelper(g);this._cacheHelperProportions();if(a.ui.ddmanager)a.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:g.pageX-this.offset.left,top:g.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
+this.originalPosition=this.position=this._generatePosition(g);this.originalPageX=g.pageX;this.originalPageY=g.pageY;d.cursorAt&&this._adjustOffsetFromHelper(d.cursorAt);d.containment&&this._setContainment();if(this._trigger("start",g)===false){this._clear();return false}this._cacheHelperProportions();a.ui.ddmanager&&!d.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,g);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(g,true);a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,g);return true},
+_mouseDrag:function(g,d){this.position=this._generatePosition(g);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();if(this._trigger("drag",g,c)===false){this._mouseUp({});return false}this.position=c.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,g);return false},_mouseStop:function(g){var d=
+false;if(a.ui.ddmanager&&!this.options.dropBehaviour)d=a.ui.ddmanager.drop(this,g);if(this.dropped){d=this.dropped;this.dropped=false}if(!this.element[0]||!this.element[0].parentNode)return false;if(this.options.revert=="invalid"&&!d||this.options.revert=="valid"&&d||this.options.revert===true||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d)){var c=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",g)!==
+false&&c._clear()})}else this._trigger("stop",g)!==false&&this._clear();return false},_mouseUp:function(g){this.options.iframeFix===true&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,g);return a.ui.mouse.prototype._mouseUp.call(this,g)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(g){var d=!this.options.handle||!a(this.options.handle,this.element).length?
+true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==g.target)d=true});return d},_createHelper:function(g){var d=this.options;g=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[g])):d.helper=="clone"?this.element.clone().removeAttr("id"):this.element;g.parents("body").length||g.appendTo(d.appendTo=="parent"?this.element[0].parentNode:d.appendTo);g[0]!=this.element[0]&&!/(fixed|absolute)/.test(g.css("position"))&&g.css("position","absolute");return g},
+_adjustOffsetFromHelper:function(g){if(typeof g=="string")g=g.split(" ");if(a.isArray(g))g={left:+g[0],top:+g[1]||0};if("left"in g)this.offset.click.left=g.left+this.margins.left;if("right"in g)this.offset.click.left=this.helperProportions.width-g.right+this.margins.left;if("top"in g)this.offset.click.top=g.top+this.margins.top;if("bottom"in g)this.offset.click.top=this.helperProportions.height-g.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var g=
+this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.contains(this.scrollParent[0],this.offsetParent[0])){g.left+=this.scrollParent.scrollLeft();g.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)g={top:0,left:0};return{top:g.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:g.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
+10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var g=this.element.position();return{top:g.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:g.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),
+10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var g=this.options;if(g.containment=="parent")g.containment=this.helper[0].parentNode;if(g.containment=="document"||g.containment=="window")this.containment=[g.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,g.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,
+(g.containment=="document"?0:a(window).scrollLeft())+a(g.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(g.containment=="document"?0:a(window).scrollTop())+(a(g.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(g.containment)&&g.containment.constructor!=Array){g=a(g.containment);var d=g[0];if(d){g.offset();var c=a(d).css("overflow")!=
+"hidden";this.containment=[(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0),(parseInt(a(d).css("borderTopWidth"),10)||0)+(parseInt(a(d).css("paddingTop"),10)||0),(c?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),
+10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=g}}else if(g.containment.constructor==Array)this.containment=g.containment},_convertPositionTo:function(g,d){if(!d)d=this.position;var c=g=="absolute"?1:-1,e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(e[0].tagName);return{top:d.top+
+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:e.scrollTop())*c),left:d.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:e.scrollLeft())*c)}},_generatePosition:function(g){var d=this.options,c=this.cssPosition=="absolute"&&
+!(this.scrollParent[0]!=document&&a.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName),f=g.pageX,i=g.pageY;if(this.originalPosition){var b;if(this.containment){if(this.relative_container){b=this.relative_container.offset();b=[this.containment[0]+b.left,this.containment[1]+b.top,this.containment[2]+b.left,this.containment[3]+b.top]}else b=this.containment;if(g.pageX-this.offset.click.left<b[0])f=b[0]+this.offset.click.left;if(g.pageY-
+this.offset.click.top<b[1])i=b[1]+this.offset.click.top;if(g.pageX-this.offset.click.left>b[2])f=b[2]+this.offset.click.left;if(g.pageY-this.offset.click.top>b[3])i=b[3]+this.offset.click.top}if(d.grid){i=d.grid[1]?this.originalPageY+Math.round((i-this.originalPageY)/d.grid[1])*d.grid[1]:this.originalPageY;i=b?!(i-this.offset.click.top<b[1]||i-this.offset.click.top>b[3])?i:!(i-this.offset.click.top<b[1])?i-d.grid[1]:i+d.grid[1]:i;f=d.grid[0]?this.originalPageX+Math.round((f-this.originalPageX)/d.grid[0])*
+d.grid[0]:this.originalPageX;f=b?!(f-this.offset.click.left<b[0]||f-this.offset.click.left>b[2])?f:!(f-this.offset.click.left<b[0])?f-d.grid[0]:f+d.grid[0]:f}}return{top:i-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<
+526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(g,d,c){c=c||this._uiHash();a.ui.plugin.call(this,g,[d,c]);if(g=="drag")this.positionAbs=this._convertPositionTo("absolute");return a.Widget.prototype._trigger.call(this,g,d,
+c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});a.ui.plugin.add("draggable","connectToSortable",{start:function(g,d){var c=a(this).data("draggable"),e=c.options,f=a.extend({},d,{item:c.element});c.sortables=[];a(e.connectToSortable).each(function(){var i=a.data(this,"sortable");if(i&&!i.options.disabled){c.sortables.push({instance:i,shouldRevert:i.options.revert});i.refreshPositions();i._trigger("activate",
+g,f)}})},stop:function(g,d){var c=a(this).data("draggable"),e=a.extend({},d,{item:c.element});a.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(g);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=
+false;this.instance._trigger("deactivate",g,e)}})},drag:function(g,d){var c=a(this).data("draggable"),e=this;a.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(e).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);
+this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return d.helper[0]};g.target=this.instance.currentItem[0];this.instance._mouseCapture(g,true);this.instance._mouseStart(g,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;
+c._trigger("toSortable",g);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(g)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",g,this.instance._uiHash(this.instance));this.instance._mouseStop(g,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&
+this.instance.placeholder.remove();c._trigger("fromSortable",g);c.dropped=false}})}});a.ui.plugin.add("draggable","cursor",{start:function(){var g=a("body"),d=a(this).data("draggable").options;if(g.css("cursor"))d._cursor=g.css("cursor");g.css("cursor",d.cursor)},stop:function(){var g=a(this).data("draggable").options;g._cursor&&a("body").css("cursor",g._cursor)}});a.ui.plugin.add("draggable","opacity",{start:function(g,d){var c=a(d.helper),e=a(this).data("draggable").options;if(c.css("opacity"))e._opacity=
+c.css("opacity");c.css("opacity",e.opacity)},stop:function(g,d){var c=a(this).data("draggable").options;c._opacity&&a(d.helper).css("opacity",c._opacity)}});a.ui.plugin.add("draggable","scroll",{start:function(){var g=a(this).data("draggable");if(g.scrollParent[0]!=document&&g.scrollParent[0].tagName!="HTML")g.overflowOffset=g.scrollParent.offset()},drag:function(g){var d=a(this).data("draggable"),c=d.options,e=false;if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!=
+"x")if(d.overflowOffset.top+d.scrollParent[0].offsetHeight-g.pageY<c.scrollSensitivity)d.scrollParent[0].scrollTop=e=d.scrollParent[0].scrollTop+c.scrollSpeed;else if(g.pageY-d.overflowOffset.top<c.scrollSensitivity)d.scrollParent[0].scrollTop=e=d.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(d.overflowOffset.left+d.scrollParent[0].offsetWidth-g.pageX<c.scrollSensitivity)d.scrollParent[0].scrollLeft=e=d.scrollParent[0].scrollLeft+c.scrollSpeed;else if(g.pageX-d.overflowOffset.left<
+c.scrollSensitivity)d.scrollParent[0].scrollLeft=e=d.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(g.pageY-a(document).scrollTop()<c.scrollSensitivity)e=a(document).scrollTop(a(document).scrollTop()-c.scrollSpeed);else if(a(window).height()-(g.pageY-a(document).scrollTop())<c.scrollSensitivity)e=a(document).scrollTop(a(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(g.pageX-a(document).scrollLeft()<c.scrollSensitivity)e=a(document).scrollLeft(a(document).scrollLeft()-
+c.scrollSpeed);else if(a(window).width()-(g.pageX-a(document).scrollLeft())<c.scrollSensitivity)e=a(document).scrollLeft(a(document).scrollLeft()+c.scrollSpeed)}e!==false&&a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(d,g)}});a.ui.plugin.add("draggable","snap",{start:function(){var g=a(this).data("draggable"),d=g.options;g.snapElements=[];a(d.snap.constructor!=String?d.snap.items||":data(draggable)":d.snap).each(function(){var c=a(this),e=c.offset();this!=g.element[0]&&g.snapElements.push({item:this,
+width:c.outerWidth(),height:c.outerHeight(),top:e.top,left:e.left})})},drag:function(g,d){for(var c=a(this).data("draggable"),e=c.options,f=e.snapTolerance,i=d.offset.left,b=i+c.helperProportions.width,h=d.offset.top,k=h+c.helperProportions.height,l=c.snapElements.length-1;l>=0;l--){var j=c.snapElements[l].left,m=j+c.snapElements[l].width,n=c.snapElements[l].top,o=n+c.snapElements[l].height;if(j-f<i&&i<m+f&&n-f<h&&h<o+f||j-f<i&&i<m+f&&n-f<k&&k<o+f||j-f<b&&b<m+f&&n-f<h&&h<o+f||j-f<b&&b<m+f&&n-f<k&&
+k<o+f){if(e.snapMode!="inner"){var p=Math.abs(n-k)<=f,q=Math.abs(o-h)<=f,u=Math.abs(j-b)<=f,s=Math.abs(m-i)<=f;if(p)d.position.top=c._convertPositionTo("relative",{top:n-c.helperProportions.height,left:0}).top-c.margins.top;if(q)d.position.top=c._convertPositionTo("relative",{top:o,left:0}).top-c.margins.top;if(u)d.position.left=c._convertPositionTo("relative",{top:0,left:j-c.helperProportions.width}).left-c.margins.left;if(s)d.position.left=c._convertPositionTo("relative",{top:0,left:m}).left-c.margins.left}var r=
+p||q||u||s;if(e.snapMode!="outer"){p=Math.abs(n-h)<=f;q=Math.abs(o-k)<=f;u=Math.abs(j-i)<=f;s=Math.abs(m-b)<=f;if(p)d.position.top=c._convertPositionTo("relative",{top:n,left:0}).top-c.margins.top;if(q)d.position.top=c._convertPositionTo("relative",{top:o-c.helperProportions.height,left:0}).top-c.margins.top;if(u)d.position.left=c._convertPositionTo("relative",{top:0,left:j}).left-c.margins.left;if(s)d.position.left=c._convertPositionTo("relative",{top:0,left:m-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[l].snapping&&
+(p||q||u||s||r))c.options.snap.snap&&c.options.snap.snap.call(c.element,g,a.extend(c._uiHash(),{snapItem:c.snapElements[l].item}));c.snapElements[l].snapping=p||q||u||s||r}else{c.snapElements[l].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,g,a.extend(c._uiHash(),{snapItem:c.snapElements[l].item}));c.snapElements[l].snapping=false}}}});a.ui.plugin.add("draggable","stack",{start:function(){var g=a(this).data("draggable").options;g=a.makeArray(a(g.stack)).sort(function(c,e){return(parseInt(a(c).css("zIndex"),
+10)||0)-(parseInt(a(e).css("zIndex"),10)||0)});if(g.length){var d=parseInt(g[0].style.zIndex)||0;a(g).each(function(c){this.style.zIndex=d+c});this[0].style.zIndex=d+g.length}}});a.ui.plugin.add("draggable","zIndex",{start:function(g,d){var c=a(d.helper),e=a(this).data("draggable").options;if(c.css("zIndex"))e._zIndex=c.css("zIndex");c.css("zIndex",e.zIndex)},stop:function(g,d){var c=a(this).data("draggable").options;c._zIndex&&a(d.helper).css("zIndex",c._zIndex)}})})(jQuery);
+(function(a){a.widget("ui.droppable",{version:"1.9pre",widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var g=this.options,d=g.accept;this.isover=0;this.isout=1;this.accept=a.isFunction(d)?d:function(c){return c.is(d)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[g.scope]=a.ui.ddmanager.droppables[g.scope]||[];
+a.ui.ddmanager.droppables[g.scope].push(this);g.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var g=a.ui.ddmanager.droppables[this.options.scope],d=0;d<g.length;d++)g[d]==this&&g.splice(d,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(g,d){if(g=="accept")this.accept=a.isFunction(d)?d:function(c){return c.is(d)};a.Widget.prototype._setOption.apply(this,arguments)},_activate:function(g){var d=
+a.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass);d&&this._trigger("activate",g,this.ui(d))},_deactivate:function(g){var d=a.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);d&&this._trigger("deactivate",g,this.ui(d))},_over:function(g){var d=a.ui.ddmanager.current;if(!(!d||(d.currentItem||d.element)[0]==this.element[0]))if(this.accept.call(this.element[0],d.currentItem||d.element)){this.options.hoverClass&&
+this.element.addClass(this.options.hoverClass);this._trigger("over",g,this.ui(d))}},_out:function(g){var d=a.ui.ddmanager.current;if(!(!d||(d.currentItem||d.element)[0]==this.element[0]))if(this.accept.call(this.element[0],d.currentItem||d.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",g,this.ui(d))}},_drop:function(g,d){var c=d||a.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var f=
+a.data(this,"droppable");if(f.options.greedy&&!f.options.disabled&&f.options.scope==c.options.scope&&f.accept.call(f.element[0],c.currentItem||c.element)&&a.ui.intersect(c,a.extend(f,{offset:f.element.offset()}),f.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
+g,this.ui(c));return this.element}return false},ui:function(g){return{draggable:g.currentItem||g.element,helper:g.helper,position:g.position,offset:g.positionAbs}}});a.ui.intersect=function(g,d,c){if(!d.offset)return false;var e=(g.positionAbs||g.position.absolute).left,f=e+g.helperProportions.width,i=(g.positionAbs||g.position.absolute).top,b=i+g.helperProportions.height,h=d.offset.left,k=h+d.proportions.width,l=d.offset.top,j=l+d.proportions.height;switch(c){case "fit":return h<=e&&f<=k&&l<=i&&
+b<=j;case "intersect":return h<e+g.helperProportions.width/2&&f-g.helperProportions.width/2<k&&l<i+g.helperProportions.height/2&&b-g.helperProportions.height/2<j;case "pointer":return a.ui.isOver((g.positionAbs||g.position.absolute).top+(g.clickOffset||g.offset.click).top,(g.positionAbs||g.position.absolute).left+(g.clickOffset||g.offset.click).left,l,h,d.proportions.height,d.proportions.width);case "touch":return(i>=l&&i<=j||b>=l&&b<=j||i<l&&b>j)&&(e>=h&&e<=k||f>=h&&f<=k||e<h&&f>k);default:return false}};
+a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(g,d){var c=a.ui.ddmanager.droppables[g.options.scope]||[],e=d?d.type:null,f=(g.currentItem||g.element).find(":data(droppable)").andSelf(),i=0;a:for(;i<c.length;i++)if(!(c[i].options.disabled||g&&!c[i].accept.call(c[i].element[0],g.currentItem||g.element))){for(var b=0;b<f.length;b++)if(f[b]==c[i].element[0]){c[i].proportions.height=0;continue a}c[i].visible=c[i].element.css("display")!="none";if(c[i].visible){e=="mousedown"&&
+c[i]._activate.call(c[i],d);c[i].offset=c[i].element.offset();c[i].proportions={width:c[i].element[0].offsetWidth,height:c[i].element[0].offsetHeight}}}},drop:function(g,d){var c=false;a.each(a.ui.ddmanager.droppables[g.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&a.ui.intersect(g,this,this.options.tolerance))c=c||this._drop.call(this,d);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],g.currentItem||g.element)){this.isout=1;this.isover=
+0;this._deactivate.call(this,d)}}});return c},dragStart:function(g,d){g.element.parentsUntil("body").bind("scroll.droppable",function(){g.options.refreshPositions||a.ui.ddmanager.prepareOffsets(g,d)})},drag:function(g,d){g.options.refreshPositions&&a.ui.ddmanager.prepareOffsets(g,d);a.each(a.ui.ddmanager.droppables[g.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=a.ui.intersect(g,this,this.options.tolerance);if(c=!c&&this.isover==1?"isout":c&&this.isover==
+0?"isover":null){var e;if(this.options.greedy){var f=this.element.parents(":data(droppable):eq(0)");if(f.length){e=a.data(f[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,d)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,d);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,d)}}}})},dragStop:function(g,d){g.element.parentsUntil("body").unbind("scroll.droppable");g.options.refreshPositions||a.ui.ddmanager.prepareOffsets(g,
+d)}}})(jQuery);
+(function(a){a.widget("ui.resizable",a.ui.mouse,{version:"1.9pre",widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var c=this,e=this.options;this.element.addClass("ui-resizable");a.extend(this,{_aspectRatio:!!e.aspectRatio,aspectRatio:e.aspectRatio,originalElement:this.element,
+_proportionallyResizeElements:[],_helper:e.helper||e.ghost||e.animate?e.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&a.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(a('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
+top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
+this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=e.handles||(!a(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
+nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var f=this.handles.split(",");this.handles={};for(var i=0;i<f.length;i++){var b=a.trim(f[i]),h=a('<div class="ui-resizable-handle '+("ui-resizable-"+b)+'"></div>');/sw|se|ne|nw/.test(b)&&h.css({zIndex:++e.zIndex});"se"==b&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[b]=".ui-resizable-"+b;this.element.append(h)}}this._renderAxis=function(k){k=k||this.element;for(var l in this.handles){if(this.handles[l].constructor==
+String)this.handles[l]=a(this.handles[l],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=a(this.handles[l],this.element),m=0;m=/sw|ne|nw|se|n|s/.test(l)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(l)?"Top":/se|sw|s/.test(l)?"Bottom":/^e$/.test(l)?"Right":"Left"].join("");k.css(j,m);this._proportionallyResize()}a(this.handles[l])}};this._renderAxis(this.element);this._handles=a(".ui-resizable-handle",this.element).disableSelection();
+this._handles.mouseover(function(){if(!c.resizing){if(this.className)var k=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);c.axis=k&&k[1]?k[1]:"se"}});if(e.autoHide){this._handles.hide();a(this.element).addClass("ui-resizable-autohide").hover(function(){if(!e.disabled){a(this).removeClass("ui-resizable-autohide");c._handles.show()}},function(){if(!e.disabled)if(!c.resizing){a(this).addClass("ui-resizable-autohide");c._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
+var c=function(f){a(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){c(this.element);var e=this.element;e.after(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);c(this.originalElement);return this},_mouseCapture:function(c){var e=
+false,f;for(f in this.handles)if(a(this.handles[f])[0]==c.target)e=true;return!this.options.disabled&&e},_mouseStart:function(c){var e=this.options,f=this.element.position(),i=this.element;this.resizing=true;this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()};if(i.is(".ui-draggable")||/absolute/.test(i.css("position")))i.css({position:"absolute",top:f.top,left:f.left});a.browser.opera&&/relative/.test(i.css("position"))&&i.css({position:"relative",top:"auto",left:"auto"});
+this._renderProxy();f=g(this.helper.css("left"));var b=g(this.helper.css("top"));if(e.containment){f+=a(e.containment).scrollLeft()||0;b+=a(e.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:f,top:b};this.size=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalSize=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalPosition={left:f,top:b};this.sizeDiff=
+{width:i.outerWidth()-i.width(),height:i.outerHeight()-i.height()};this.originalMousePosition={left:c.pageX,top:c.pageY};this.aspectRatio=typeof e.aspectRatio=="number"?e.aspectRatio:this.originalSize.width/this.originalSize.height||1;e=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",e=="auto"?this.axis+"-resize":e);i.addClass("ui-resizable-resizing");this._propagate("start",c);return true},_mouseDrag:function(c){var e=this.helper,f=this.originalMousePosition,i=this._change[this.axis];
+if(!i)return false;f=i.apply(this,[c,c.pageX-f.left||0,c.pageY-f.top||0]);this._updateVirtualBoundaries(c.shiftKey);if(this._aspectRatio||c.shiftKey)f=this._updateRatio(f,c);f=this._respectSize(f,c);this._propagate("resize",c);e.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(f);this._trigger("resize",c,this.ui());return false},
+_mouseStop:function(c){this.resizing=false;var e=this.options;if(this._helper){var f=this._proportionallyResizeElements,i=f.length&&/textarea/i.test(f[0].nodeName);f=i&&a.ui.hasScroll(f[0],"left")?0:this.sizeDiff.height;i=i?0:this.sizeDiff.width;i={width:this.helper.width()-i,height:this.helper.height()-f};f=parseInt(this.element.css("left"),10)+(this.position.left-this.originalPosition.left)||null;var b=parseInt(this.element.css("top"),10)+(this.position.top-this.originalPosition.top)||null;e.animate||
+this.element.css(a.extend(i,{top:b,left:f}));this.helper.height(this.size.height);this.helper.width(this.size.width);this._helper&&!e.animate&&this._proportionallyResize()}a("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",c);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(c){var e=this.options,f,i,b;e={minWidth:d(e.minWidth)?e.minWidth:0,maxWidth:d(e.maxWidth)?e.maxWidth:Infinity,minHeight:d(e.minHeight)?e.minHeight:
+0,maxHeight:d(e.maxHeight)?e.maxHeight:Infinity};if(this._aspectRatio||c){c=e.minHeight*this.aspectRatio;i=e.minWidth/this.aspectRatio;f=e.maxHeight*this.aspectRatio;b=e.maxWidth/this.aspectRatio;if(c>e.minWidth)e.minWidth=c;if(i>e.minHeight)e.minHeight=i;if(f<e.maxWidth)e.maxWidth=f;if(b<e.maxHeight)e.maxHeight=b}this._vBoundaries=e},_updateCache:function(c){this.offset=this.helper.offset();if(d(c.left))this.position.left=c.left;if(d(c.top))this.position.top=c.top;if(d(c.height))this.size.height=
+c.height;if(d(c.width))this.size.width=c.width},_updateRatio:function(c){var e=this.position,f=this.size,i=this.axis;if(d(c.height))c.width=c.height*this.aspectRatio;else if(d(c.width))c.height=c.width/this.aspectRatio;if(i=="sw"){c.left=e.left+(f.width-c.width);c.top=null}if(i=="nw"){c.top=e.top+(f.height-c.height);c.left=e.left+(f.width-c.width)}return c},_respectSize:function(c){var e=this._vBoundaries,f=this.axis,i=d(c.width)&&e.maxWidth&&e.maxWidth<c.width,b=d(c.height)&&e.maxHeight&&e.maxHeight<
+c.height,h=d(c.width)&&e.minWidth&&e.minWidth>c.width,k=d(c.height)&&e.minHeight&&e.minHeight>c.height;if(h)c.width=e.minWidth;if(k)c.height=e.minHeight;if(i)c.width=e.maxWidth;if(b)c.height=e.maxHeight;var l=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,m=/sw|nw|w/.test(f);f=/nw|ne|n/.test(f);if(h&&m)c.left=l-e.minWidth;if(i&&m)c.left=l-e.maxWidth;if(k&&f)c.top=j-e.minHeight;if(b&&f)c.top=j-e.maxHeight;if((e=!c.width&&!c.height)&&!c.left&&c.top)c.top=null;
+else if(e&&!c.top&&c.left)c.left=null;return c},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var c=this.helper||this.element,e=0;e<this._proportionallyResizeElements.length;e++){var f=this._proportionallyResizeElements[e];if(!this.borderDif){var i=[f.css("borderTopWidth"),f.css("borderRightWidth"),f.css("borderBottomWidth"),f.css("borderLeftWidth")],b=[f.css("paddingTop"),f.css("paddingRight"),f.css("paddingBottom"),f.css("paddingLeft")];this.borderDif=a.map(i,
+function(h,k){var l=parseInt(h,10)||0,j=parseInt(b[k],10)||0;return l+j})}a.browser.msie&&(a(c).is(":hidden")||a(c).parents(":hidden").length)||f.css({height:c.height()-this.borderDif[0]-this.borderDif[2]||0,width:c.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var c=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');var e=a.browser.msie&&a.browser.version<7,f=e?1:0;e=e?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+
+e,height:this.element.outerHeight()+e,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++c.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(c,e){return{width:this.originalSize.width+e}},w:function(c,e){return{left:this.originalPosition.left+e,width:this.originalSize.width-e}},n:function(c,e,f){return{top:this.originalPosition.top+f,height:this.originalSize.height-f}},s:function(c,e,f){return{height:this.originalSize.height+
+f}},se:function(c,e,f){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[c,e,f]))},sw:function(c,e,f){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[c,e,f]))},ne:function(c,e,f){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[c,e,f]))},nw:function(c,e,f){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[c,e,f]))}},_propagate:function(c,e){a.ui.plugin.call(this,c,[e,this.ui()]);
+c!="resize"&&this._trigger(c,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});a.ui.plugin.add("resizable","alsoResize",{start:function(){var c=a(this).data("resizable").options,e=function(f){a(f).each(function(){var i=a(this);i.data("resizable-alsoresize",{width:parseInt(i.width(),10),height:parseInt(i.height(),10),
+left:parseInt(i.css("left"),10),top:parseInt(i.css("top"),10),position:i.css("position")})})};if(typeof c.alsoResize=="object"&&!c.alsoResize.parentNode)if(c.alsoResize.length){c.alsoResize=c.alsoResize[0];e(c.alsoResize)}else a.each(c.alsoResize,function(f){e(f)});else e(c.alsoResize)},resize:function(c,e){var f=a(this).data("resizable"),i=f.options,b=f.originalSize,h=f.originalPosition,k={height:f.size.height-b.height||0,width:f.size.width-b.width||0,top:f.position.top-h.top||0,left:f.position.left-
+h.left||0},l=function(j,m){a(j).each(function(){var n=a(this),o=a(this).data("resizable-alsoresize"),p={},q=m&&m.length?m:n.parents(e.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(q,function(u,s){var r=(o[s]||0)+(k[s]||0);if(r&&r>=0)p[s]=r||null});if(a.browser.opera&&/relative/.test(n.css("position"))){f._revertToRelativePosition=true;n.css({position:"absolute",top:"auto",left:"auto"})}n.css(p)})};typeof i.alsoResize=="object"&&!i.alsoResize.nodeType?a.each(i.alsoResize,
+function(j,m){l(j,m)}):l(i.alsoResize)},stop:function(){var c=a(this).data("resizable"),e=c.options,f=function(i){a(i).each(function(){var b=a(this);b.css({position:b.data("resizable-alsoresize").position})})};if(c._revertToRelativePosition){c._revertToRelativePosition=false;typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(i){f(i)}):f(e.alsoResize)}a(this).removeData("resizable-alsoresize")}});a.ui.plugin.add("resizable","animate",{stop:function(c){var e=a(this).data("resizable"),
+f=e.options,i=e._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName),h=b&&a.ui.hasScroll(i[0],"left")?0:e.sizeDiff.height;b={width:e.size.width-(b?0:e.sizeDiff.width),height:e.size.height-h};h=parseInt(e.element.css("left"),10)+(e.position.left-e.originalPosition.left)||null;var k=parseInt(e.element.css("top"),10)+(e.position.top-e.originalPosition.top)||null;e.element.animate(a.extend(b,k&&h?{top:k,left:h}:{}),{duration:f.animateDuration,easing:f.animateEasing,step:function(){var l=
+{width:parseInt(e.element.css("width"),10),height:parseInt(e.element.css("height"),10),top:parseInt(e.element.css("top"),10),left:parseInt(e.element.css("left"),10)};i&&i.length&&a(i[0]).css({width:l.width,height:l.height});e._updateCache(l);e._propagate("resize",c)}})}});a.ui.plugin.add("resizable","containment",{start:function(){var c=a(this).data("resizable"),e=c.element,f=c.options.containment;if(e=f instanceof a?f.get(0):/parent/.test(f)?e.parent().get(0):f){c.containerElement=a(e);if(/document/.test(f)||
+f==document){c.containerOffset={left:0,top:0};c.containerPosition={left:0,top:0};c.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight}}else{var i=a(e),b=[];a(["Top","Right","Left","Bottom"]).each(function(l,j){b[l]=g(i.css("padding"+j))});c.containerOffset=i.offset();c.containerPosition=i.position();c.containerSize={height:i.innerHeight()-b[3],width:i.innerWidth()-b[1]};f=c.containerOffset;var h=c.containerSize.height,
+k=c.containerSize.width;k=a.ui.hasScroll(e,"left")?e.scrollWidth:k;h=a.ui.hasScroll(e)?e.scrollHeight:h;c.parentData={element:e,left:f.left,top:f.top,width:k,height:h}}}},resize:function(c){var e=a(this).data("resizable"),f=e.options,i=e.containerOffset,b=e.position;c=e._aspectRatio||c.shiftKey;var h={top:0,left:0},k=e.containerElement;if(k[0]!=document&&/static/.test(k.css("position")))h=i;if(b.left<(e._helper?i.left:0)){e.size.width+=e._helper?e.position.left-i.left:e.position.left-h.left;if(c)e.size.height=
+e.size.width/f.aspectRatio;e.position.left=f.helper?i.left:0}if(b.top<(e._helper?i.top:0)){e.size.height+=e._helper?e.position.top-i.top:e.position.top;if(c)e.size.width=e.size.height*f.aspectRatio;e.position.top=e._helper?i.top:0}e.offset.left=e.parentData.left+e.position.left;e.offset.top=e.parentData.top+e.position.top;f=Math.abs((e._helper?e.offset.left-h.left:e.offset.left-h.left)+e.sizeDiff.width);i=Math.abs((e._helper?e.offset.top-h.top:e.offset.top-i.top)+e.sizeDiff.height);b=e.containerElement.get(0)==
+e.element.parent().get(0);h=/relative|absolute/.test(e.containerElement.css("position"));if(b&&h)f-=e.parentData.left;if(f+e.size.width>=e.parentData.width){e.size.width=e.parentData.width-f;if(c)e.size.height=e.size.width/e.aspectRatio}if(i+e.size.height>=e.parentData.height){e.size.height=e.parentData.height-i;if(c)e.size.width=e.size.height*e.aspectRatio}},stop:function(){var c=a(this).data("resizable"),e=c.options,f=c.containerOffset,i=c.containerPosition,b=c.containerElement,h=a(c.helper),k=
+h.offset(),l=h.outerWidth()-c.sizeDiff.width;h=h.outerHeight()-c.sizeDiff.height;c._helper&&!e.animate&&/relative/.test(b.css("position"))&&a(this).css({left:k.left-i.left-f.left,width:l,height:h});c._helper&&!e.animate&&/static/.test(b.css("position"))&&a(this).css({left:k.left-i.left-f.left,width:l,height:h})}});a.ui.plugin.add("resizable","ghost",{start:function(){var c=a(this).data("resizable"),e=c.options,f=c.size;c.ghost=c.originalElement.clone();c.ghost.css({opacity:0.25,display:"block",position:"relative",
+height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof e.ghost=="string"?e.ghost:"");c.ghost.appendTo(c.helper)},resize:function(){var c=a(this).data("resizable");c.ghost&&c.ghost.css({position:"relative",height:c.size.height,width:c.size.width})},stop:function(){var c=a(this).data("resizable");c.ghost&&c.helper&&c.helper.get(0).removeChild(c.ghost.get(0))}});a.ui.plugin.add("resizable","grid",{resize:function(){var c=a(this).data("resizable"),e=c.options,
+f=c.size,i=c.originalSize,b=c.originalPosition,h=c.axis;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-i.width)/(e.grid[0]||1))*(e.grid[0]||1);e=Math.round((f.height-i.height)/(e.grid[1]||1))*(e.grid[1]||1);if(/^(se|s|e)$/.test(h)){c.size.width=i.width+k;c.size.height=i.height+e}else if(/^(ne)$/.test(h)){c.size.width=i.width+k;c.size.height=i.height+e;c.position.top=b.top-e}else{if(/^(sw)$/.test(h)){c.size.width=i.width+k;c.size.height=i.height+e}else{c.size.width=
+i.width+k;c.size.height=i.height+e;c.position.top=b.top-e}c.position.left=b.left-k}}});var g=function(c){return parseInt(c,10)||0},d=function(c){return!isNaN(parseInt(c,10))}})(jQuery);
+(function(a){a.widget("ui.selectable",a.ui.mouse,{version:"1.9pre",options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var g=this;this.element.addClass("ui-selectable");this.dragged=false;var d;this.refresh=function(){d=a(g.options.filter,g.element[0]);d.each(function(){var c=a(this),e=c.offset();a.data(this,"selectable-item",{element:this,$element:c,left:e.left,top:e.top,right:e.left+c.outerWidth(),bottom:e.top+c.outerHeight(),startselected:false,
+selected:c.hasClass("ui-selected"),selecting:c.hasClass("ui-selecting"),unselecting:c.hasClass("ui-unselecting")})})};this.refresh();this.selectees=d.addClass("ui-selectee");this._mouseInit();this.helper=a("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(g){var d=
+this;this.opos=[g.pageX,g.pageY];if(!this.options.disabled){var c=this.options;this.selectees=a(c.filter,this.element[0]);this._trigger("start",g);a(c.appendTo).append(this.helper);this.helper.css({left:g.clientX,top:g.clientY,width:0,height:0});c.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var e=a.data(this,"selectable-item");e.startselected=true;if(!g.metaKey){e.$element.removeClass("ui-selected");e.selected=false;e.$element.addClass("ui-unselecting");e.unselecting=
+true;d._trigger("unselecting",g,{unselecting:e.element})}});a(g.target).parents().andSelf().each(function(){var e=a.data(this,"selectable-item");if(e){var f=!g.metaKey||!e.$element.hasClass("ui-selected");e.$element.removeClass(f?"ui-unselecting":"ui-selected").addClass(f?"ui-selecting":"ui-unselecting");e.unselecting=!f;e.selecting=f;(e.selected=f)?d._trigger("selecting",g,{selecting:e.element}):d._trigger("unselecting",g,{unselecting:e.element});return false}})}},_mouseDrag:function(g){var d=this;
+this.dragged=true;if(!this.options.disabled){var c=this.options,e=this.opos[0],f=this.opos[1],i=g.pageX,b=g.pageY;if(e>i){var h=i;i=e;e=h}if(f>b){h=b;b=f;f=h}this.helper.css({left:e,top:f,width:i-e,height:b-f});this.selectees.each(function(){var k=a.data(this,"selectable-item");if(!(!k||k.element==d.element[0])){var l=false;if(c.tolerance=="touch")l=!(k.left>i||k.right<e||k.top>b||k.bottom<f);else if(c.tolerance=="fit")l=k.left>e&&k.right<i&&k.top>f&&k.bottom<b;if(l){if(k.selected){k.$element.removeClass("ui-selected");
+k.selected=false}if(k.unselecting){k.$element.removeClass("ui-unselecting");k.unselecting=false}if(!k.selecting){k.$element.addClass("ui-selecting");k.selecting=true;d._trigger("selecting",g,{selecting:k.element})}}else{if(k.selecting)if(g.metaKey&&k.startselected){k.$element.removeClass("ui-selecting");k.selecting=false;k.$element.addClass("ui-selected");k.selected=true}else{k.$element.removeClass("ui-selecting");k.selecting=false;if(k.startselected){k.$element.addClass("ui-unselecting");k.unselecting=
+true}d._trigger("unselecting",g,{unselecting:k.element})}if(k.selected)if(!g.metaKey&&!k.startselected){k.$element.removeClass("ui-selected");k.selected=false;k.$element.addClass("ui-unselecting");k.unselecting=true;d._trigger("unselecting",g,{unselecting:k.element})}}}});return false}},_mouseStop:function(g){var d=this;this.dragged=false;a(".ui-unselecting",this.element[0]).each(function(){var c=a.data(this,"selectable-item");c.$element.removeClass("ui-unselecting");c.unselecting=false;c.startselected=
+false;d._trigger("unselected",g,{unselected:c.element})});a(".ui-selecting",this.element[0]).each(function(){var c=a.data(this,"selectable-item");c.$element.removeClass("ui-selecting").addClass("ui-selected");c.selecting=false;c.selected=true;c.startselected=true;d._trigger("selected",g,{selected:c.element})});this._trigger("stop",g);this.helper.remove();return false}})})(jQuery);
+(function(a){a.widget("ui.sortable",a.ui.mouse,{version:"1.9pre",widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var g=this.options;this.containerCache=
+{};this.element.addClass("ui-sortable");this.refresh();this.floating=this.items.length?g.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled");this._mouseDestroy();for(var g=this.items.length-1;g>=0;g--)this.items[g].item.removeData(this.widgetName+"-item");return this},_setOption:function(g,
+d){if(g==="disabled"){this.options[g]=d;this.widget().toggleClass("ui-sortable-disabled",!!d)}else a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(g,d){var c=this;if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(g);var e=null,f=this;a(g.target).parents().each(function(){if(a.data(this,c.widgetName+"-item")==f){e=a(this);return false}});if(a.data(g.target,c.widgetName+"-item")==f)e=a(g.target);if(!e)return false;
+if(this.options.handle&&!d){var i=false;a(this.options.handle,e).find("*").andSelf().each(function(){if(this==g.target)i=true});if(!i)return false}this.currentItem=e;this._removeCurrentsFromItems();return true},_mouseStart:function(g,d,c){d=this.options;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(g);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-
+this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:g.pageX-this.offset.left,top:g.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(g);this.originalPageX=g.pageX;this.originalPageY=g.pageY;d.cursorAt&&this._adjustOffsetFromHelper(d.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],
+parent:this.currentItem.parent()[0]};this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();d.containment&&this._setContainment();if(d.cursor){if(a("body").css("cursor"))this._storedCursor=a("body").css("cursor");a("body").css("cursor",d.cursor)}if(d.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",d.opacity)}if(d.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",
+d.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",g,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",g,this._uiHash(this));if(a.ui.ddmanager)a.ui.ddmanager.current=this;a.ui.ddmanager&&!d.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,g);this.dragging=true;this.helper.addClass("ui-sortable-helper");
+this._mouseDrag(g);return true},_mouseDrag:function(g){this.position=this._generatePosition(g);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var d=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-g.pageY<d.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+d.scrollSpeed;
+else if(g.pageY-this.overflowOffset.top<d.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-d.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-g.pageX<d.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+d.scrollSpeed;else if(g.pageX-this.overflowOffset.left<d.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-d.scrollSpeed}else{if(g.pageY-a(document).scrollTop()<d.scrollSensitivity)c=
+a(document).scrollTop(a(document).scrollTop()-d.scrollSpeed);else if(a(window).height()-(g.pageY-a(document).scrollTop())<d.scrollSensitivity)c=a(document).scrollTop(a(document).scrollTop()+d.scrollSpeed);if(g.pageX-a(document).scrollLeft()<d.scrollSensitivity)c=a(document).scrollLeft(a(document).scrollLeft()-d.scrollSpeed);else if(a(window).width()-(g.pageX-a(document).scrollLeft())<d.scrollSensitivity)c=a(document).scrollLeft(a(document).scrollLeft()+d.scrollSpeed)}c!==false&&a.ui.ddmanager&&!d.dropBehaviour&&
+a.ui.ddmanager.prepareOffsets(this,g)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(d=this.items.length-1;d>=0;d--){c=this.items[d];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!a.contains(this.placeholder[0],e)&&(this.options.type==
+"semi-dynamic"?!a.contains(this.element[0],e):1)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(g,c);else break;this._trigger("change",g,this._uiHash());break}}this._contactContainers(g);a.ui.ddmanager&&a.ui.ddmanager.drag(this,g);this._trigger("sort",g,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(g,d){if(g){a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,g);if(this.options.revert){var c=
+this,e=c.placeholder.offset();c.reverting=true;a(this.helper).animate({left:e.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(g)})}else this._clear(g,d);return false}},cancel:function(){if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?
+this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var g=this.containers.length-1;g>=0;g--){this.containers[g]._trigger("deactivate",null,this._uiHash(this));if(this.containers[g].containerCache.over){this.containers[g]._trigger("out",null,this._uiHash(this));this.containers[g].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&
+this.helper&&this.helper[0].parentNode&&this.helper.remove();a.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(g){var d=this._getItemsAsjQuery(g&&g.connected),c=[];g=g||{};a(d).each(function(){var e=(a(g.item||this).attr(g.attribute||"id")||"").match(g.expression||/(.+)[-=_](.+)/);if(e)c.push((g.key||e[1]+"[]")+"="+
+(g.key&&g.expression?e[1]:e[2]))});!c.length&&g.key&&c.push(g.key+"=");return c.join("&")},toArray:function(g){var d=this._getItemsAsjQuery(g&&g.connected),c=[];g=g||{};d.each(function(){c.push(a(g.item||this).attr(g.attribute||"id")||"")});return c},_intersectsWith:function(g){var d=this.positionAbs.left,c=d+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,i=g.left,b=i+g.width,h=g.top,k=h+g.height,l=this.offset.click.top,j=this.offset.click.left;return this.options.tolerance==
+"pointer"||this.options.forcePointerForContainers||this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>g[this.floating?"width":"height"]?e+l>h&&e+l<k&&d+j>i&&d+j<b:i<d+this.helperProportions.width/2&&c-this.helperProportions.width/2<b&&h<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(g){var d=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,g.top,g.height);g=a.ui.isOverAxis(this.positionAbs.left+
+this.offset.click.left,g.left,g.width);d=d&&g;g=this._getDragVerticalDirection();var c=this._getDragHorizontalDirection();if(!d)return false;return this.floating?c&&c=="right"||g=="down"?2:1:g&&(g=="down"?2:1)},_intersectsWithSides:function(g){var d=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,g.top+g.height/2,g.height);g=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,g.left+g.width/2,g.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();
+return this.floating&&e?e=="right"&&g||e=="left"&&!g:c&&(c=="down"&&d||c=="up"&&!d)},_getDragVerticalDirection:function(){var g=this.positionAbs.top-this.lastPositionAbs.top;return g!=0&&(g>0?"down":"up")},_getDragHorizontalDirection:function(){var g=this.positionAbs.left-this.lastPositionAbs.left;return g!=0&&(g>0?"right":"left")},refresh:function(g){this._refreshItems(g);this.refreshPositions();return this},_connectWith:function(){var g=this.options;return g.connectWith.constructor==String?[g.connectWith]:
+g.connectWith},_getItemsAsjQuery:function(g){var d=[],c=[],e=this._connectWith();if(e&&g)for(g=e.length-1;g>=0;g--)for(var f=a(e[g]),i=f.length-1;i>=0;i--){var b=a.data(f[i],this.widgetName);if(b&&b!=this&&!b.options.disabled)c.push([a.isFunction(b.options.items)?b.options.items.call(b.element):a(b.options.items,b.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),b])}c.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):
+a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(g=c.length-1;g>=0;g--)c[g][0].each(function(){d.push(this)});return a(d)},_removeCurrentsFromItems:function(){for(var g=this.currentItem.find(":data("+this.widgetName+"-item)"),d=0;d<this.items.length;d++)for(var c=0;c<g.length;c++)g[c]==this.items[d].item[0]&&this.items.splice(d,1)},_refreshItems:function(g){this.items=[];this.containers=[this];var d=this.items,c=[[a.isFunction(this.options.items)?
+this.options.items.call(this.element[0],g,{item:this.currentItem}):a(this.options.items,this.element),this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var i=a(e[f]),b=i.length-1;b>=0;b--){var h=a.data(i[b],this.widgetName);if(h&&h!=this&&!h.options.disabled){c.push([a.isFunction(h.options.items)?h.options.items.call(h.element[0],g,{item:this.currentItem}):a(h.options.items,h.element),h]);this.containers.push(h)}}for(f=c.length-1;f>=0;f--){g=c[f][1];e=c[f][0];b=0;for(i=e.length;b<
+i;b++){h=a(e[b]);h.data(this.widgetName+"-item",g);d.push({item:h,instance:g,width:0,height:0,left:0,top:0})}}},refreshPositions:function(g){if(this.offsetParent&&this.helper)this.offset.parent=this._getParentOffset();for(var d=this.items.length-1;d>=0;d--){var c=this.items[d];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?a(this.options.toleranceElement,c.item):c.item;if(!g){c.width=e.outerWidth();c.height=e.outerHeight()}e=
+e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(d=this.containers.length-1;d>=0;d--){e=this.containers[d].element.offset();this.containers[d].containerCache.left=e.left;this.containers[d].containerCache.top=e.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}return this},_createPlaceholder:function(g){var d=
+g||this,c=d.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=a(document.createElement(d.currentItem[0].nodeName)).addClass(e||d.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,i){if(!(e&&!c.forcePlaceholderSize)){i.height()||i.height(d.currentItem.innerHeight()-parseInt(d.currentItem.css("paddingTop")||0,10)-parseInt(d.currentItem.css("paddingBottom")||
+0,10));i.width()||i.width(d.currentItem.innerWidth()-parseInt(d.currentItem.css("paddingLeft")||0,10)-parseInt(d.currentItem.css("paddingRight")||0,10))}}}}d.placeholder=a(c.placeholder.element.call(d.element,d.currentItem));d.currentItem.after(d.placeholder);c.placeholder.update(d,d.placeholder)},_contactContainers:function(g){for(var d=null,c=null,e=this.containers.length-1;e>=0;e--)if(!a.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(d&&
+a.contains(this.containers[e].element[0],d.element[0]))){d=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",g,this._uiHash(this));this.containers[e].containerCache.over=0}if(d)if(this.containers.length===1){this.containers[c]._trigger("over",g,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){d=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],i=this.items.length-
+1;i>=0;i--)if(a.contains(this.containers[c].element[0],this.items[i].item[0])){var b=this.items[i][this.containers[c].floating?"left":"top"];if(Math.abs(b-f)<d){d=Math.abs(b-f);e=this.items[i]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(g,e,null,true):this._rearrange(g,null,this.containers[c].element,true);this._trigger("change",g,this._uiHash());this.containers[c]._trigger("change",g,this._uiHash(this));this.options.placeholder.update(this.currentContainer,
+this.placeholder);this.containers[c]._trigger("over",g,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(g){var d=this.options;g=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[g,this.currentItem])):d.helper=="clone"?this.currentItem.clone():this.currentItem;g.parents("body").length||a(d.appendTo!="parent"?d.appendTo:this.currentItem[0].parentNode)[0].appendChild(g[0]);if(g[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,
+height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(g[0].style.width==""||d.forceHelperSize)g.width(this.currentItem.width());if(g[0].style.height==""||d.forceHelperSize)g.height(this.currentItem.height());return g},_adjustOffsetFromHelper:function(g){if(typeof g=="string")g=g.split(" ");if(a.isArray(g))g={left:+g[0],top:+g[1]||0};if("left"in g)this.offset.click.left=g.left+this.margins.left;if("right"in
+g)this.offset.click.left=this.helperProportions.width-g.right+this.margins.left;if("top"in g)this.offset.click.top=g.top+this.margins.top;if("bottom"in g)this.offset.click.top=this.helperProportions.height-g.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var g=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.contains(this.scrollParent[0],this.offsetParent[0])){g.left+=this.scrollParent.scrollLeft();g.top+=
+this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)g={top:0,left:0};return{top:g.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:g.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var g=this.currentItem.position();return{top:g.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),
+left:g.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var g=this.options;if(g.containment=="parent")g.containment=this.helper[0].parentNode;
+if(g.containment=="document"||g.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(g.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(g.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(g.containment)){var d=a(g.containment)[0];g=a(g.containment).offset();
+var c=a(d).css("overflow")!="hidden";this.containment=[g.left+(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0)-this.margins.left,g.top+(parseInt(a(d).css("borderTopWidth"),10)||0)+(parseInt(a(d).css("paddingTop"),10)||0)-this.margins.top,g.left+(c?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,g.top+(c?Math.max(d.scrollHeight,
+d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(g,d){if(!d)d=this.position;var c=g=="absolute"?1:-1,e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(e[0].tagName);return{top:d.top+this.offset.relative.top*c+this.offset.parent.top*
+c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:e.scrollTop())*c),left:d.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:e.scrollLeft())*c)}},_generatePosition:function(g){var d=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:
+this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();var f=g.pageX,i=g.pageY;if(this.originalPosition){if(this.containment){if(g.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(g.pageY-this.offset.click.top<this.containment[1])i=this.containment[1]+this.offset.click.top;if(g.pageX-this.offset.click.left>
+this.containment[2])f=this.containment[2]+this.offset.click.left;if(g.pageY-this.offset.click.top>this.containment[3])i=this.containment[3]+this.offset.click.top}if(d.grid){i=this.originalPageY+Math.round((i-this.originalPageY)/d.grid[1])*d.grid[1];i=this.containment?!(i-this.offset.click.top<this.containment[1]||i-this.offset.click.top>this.containment[3])?i:!(i-this.offset.click.top<this.containment[1])?i-d.grid[1]:i+d.grid[1]:i;f=this.originalPageX+Math.round((f-this.originalPageX)/d.grid[0])*
+d.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-d.grid[0]:f+d.grid[0]:f}}return{top:i-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&
+this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(g,d,c,e){c?c[0].appendChild(this.placeholder[0]):d.item[0].parentNode.insertBefore(this.placeholder[0],this.direction=="down"?d.item[0]:d.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,i=this.counter;window.setTimeout(function(){i==f.counter&&f.refreshPositions(!e)},0)},_clear:function(g,d){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem.parent().length&&
+this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!d&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||
+this.domPosition.parent!=this.currentItem.parent()[0])&&!d)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!a.contains(this.element[0],this.currentItem[0])){d||c.push(function(f){this._trigger("remove",f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(a.contains(this.containers[e].element[0],this.currentItem[0])&&!d){c.push(function(f){return function(i){f._trigger("receive",i,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(i){f._trigger("update",
+i,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){d||c.push(function(f){return function(i){f._trigger("deactivate",i,this._uiHash(this))}}.call(this,this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(i){f._trigger("out",i,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&a("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",
+this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!d){this._trigger("beforeStop",g,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,g);this._trigger("stop",g,this._uiHash())}return false}d||this._trigger("beforeStop",g,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!d){for(e=
+0;e<c.length;e++)c[e].call(this,g);this._trigger("stop",g,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){a.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},_uiHash:function(g){var d=g||this;return{helper:d.helper,placeholder:d.placeholder||a([]),position:d.position,originalPosition:d.originalPosition,offset:d.positionAbs,item:d.currentItem,sender:g?g.element:null}}})})(jQuery);
+jQuery.effects||function(a,g){function d(l){var j;if(l&&l.constructor===Array&&l.length===3)return l;if(j=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(l))return[parseInt(j[1],10),parseInt(j[2],10),parseInt(j[3],10)];if(j=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(l))return[parseFloat(j[1])*2.55,parseFloat(j[2])*2.55,parseFloat(j[3])*2.55];if(j=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(l))return[parseInt(j[1],
+16),parseInt(j[2],16),parseInt(j[3],16)];if(j=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(l))return[parseInt(j[1]+j[1],16),parseInt(j[2]+j[2],16),parseInt(j[3]+j[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(l))return b.transparent;return b[a.trim(l).toLowerCase()]}function c(){var l=this.ownerDocument.defaultView?this.ownerDocument.defaultView.getComputedStyle(this,null):this.currentStyle,j={},m,n;if(l&&l.length&&l[0]&&l[l[0]])for(n=l.length;n--;){m=l[n];if(typeof l[m]==="string")j[a.camelCase(m)]=l[m]}else for(m in l)if(typeof l[m]===
+"string")j[m]=l[m];return j}function e(l,j,m,n){if(a.isPlainObject(l))return l;l={effect:l};if(j===g)j={};if(a.isFunction(j)){n=j;m=null;j={}}if(a.type(j)==="number"||a.fx.speeds[j]){n=m;m=j;j={}}if(a.isFunction(m)){n=m;m=null}j&&a.extend(l,j);m=m||j.duration;l.duration=a.fx.off?0:typeof m==="number"?m:m in a.fx.speeds?a.fx.speeds[m]:a.fx.speeds._default;l.complete=n||j.complete;return l}function f(l){if(!l||typeof l==="number"||a.fx.speeds[l])return true;if(typeof l==="string"&&!a.effects.effect[l]){if(i&&
+a.effects[l])return false;return true}return false}var i=a.uiBackCompat!==false;a.effects={effect:{}};a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","borderColor","color","outlineColor"],function(l,j){a.fx.step[j]=function(m){if(!m.colorInit){var n;n=m.elem;var o=j,p;do{p=a.curCSS(n,o);if(p!=""&&p!=="transparent"||a.nodeName(n,"body"))break;o="backgroundColor"}while(n=n.parentNode);n=d(p);m.start=n;m.end=d(m.end);m.colorInit=true}m.elem.style[j]=
+"rgb("+Math.max(Math.min(parseInt(m.pos*(m.end[0]-m.start[0])+m.start[0],10),255),0)+","+Math.max(Math.min(parseInt(m.pos*(m.end[1]-m.start[1])+m.start[1],10),255),0)+","+Math.max(Math.min(parseInt(m.pos*(m.end[2]-m.start[2])+m.start[2],10),255),0)+")"}});var b={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,
+0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,
+203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},h=["add","remove","toggle"],k={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(l,j){a.fx.step[j]=function(m){if(m.end!=="none"&&!m.setAttr||m.pos===1&&!m.setAttr){jQuery.style(m.elem,j,m.end);m.setAttr=
+true}}});a.effects.animateClass=function(l,j,m,n){var o=a.speed(j,m,n);return this.queue(function(){var p=a(this),q=p.attr("class")||"",u,s=o.children?p.find("*").andSelf():p;s=s.map(function(){var r=a(this);return{el:r,originalStyleAttr:r.attr("style")||" ",start:c.call(this)}});a.each(h,function(r,t){if(l[t])p[t+"Class"](l[t])});u=p.attr("class");s=s.map(function(){this.end=c.call(this.el[0]);var r=this.start,t=this.end,v={},w,x;for(w in t){x=t[w];if(r[w]!=x)if(!k[w])if(a.fx.step[w]||!isNaN(parseFloat(x)))v[w]=
+x}this.diff=v;return this});p.attr("class",q);s=s.map(function(){var r=this,t=a.Deferred();this.el.animate(this.diff,{duration:o.duration,easing:o.easing,queue:false,complete:function(){t.resolve(r)}});return t.promise()});a.when.apply(a,s.get()).done(function(){p.attr("class",u);a.each(arguments,function(){if(typeof this.el.attr("style")==="object"){this.el.attr("style").cssText="";this.el.attr("style").cssText=this.originalStyleAttr}else this.el.attr("style",this.originalStyleAttr)});o.complete.call(p[0])})})};
+a.fn.extend({_addClass:a.fn.addClass,addClass:function(l,j,m,n){return j?a.effects.animateClass.apply(this,[{add:l},j,m,n]):this._addClass(l)},_removeClass:a.fn.removeClass,removeClass:function(l,j,m,n){return j?a.effects.animateClass.apply(this,[{remove:l},j,m,n]):this._removeClass(l)},_toggleClass:a.fn.toggleClass,toggleClass:function(l,j,m,n,o){return typeof j==="boolean"||j===g?m?a.effects.animateClass.apply(this,[j?{add:l}:{remove:l},m,n,o]):this._toggleClass(l,j):a.effects.animateClass.apply(this,
+[{toggle:l},j,m,n])},switchClass:function(l,j,m,n,o){return a.effects.animateClass.apply(this,[{add:j,remove:l},m,n,o])}});a.extend(a.effects,{version:"1.9pre",save:function(l,j){for(var m=0;m<j.length;m++)j[m]!==null&&l.data("ec.storage."+j[m],l[0].style[j[m]])},restore:function(l,j){for(var m=0;m<j.length;m++)j[m]!==null&&l.css(j[m],l.data("ec.storage."+j[m]))},setMode:function(l,j){if(j==="toggle")j=l.is(":hidden")?"show":"hide";return j},getBaseline:function(l,j){var m,n;switch(l[0]){case "top":m=
+0;break;case "middle":m=0.5;break;case "bottom":m=1;break;default:m=l[0]/j.height}switch(l[1]){case "left":n=0;break;case "center":n=0.5;break;case "right":n=1;break;default:n=l[1]/j.width}return{x:n,y:m}},createWrapper:function(l){if(l.parent().is(".ui-effects-wrapper"))return l.parent();var j={width:l.outerWidth(true),height:l.outerHeight(true),"float":l.css("float")},m=a("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),
+n={width:l.width(),height:l.height()},o=document.activeElement;l.wrap(m);if(l[0]===o||a.contains(l[0],o))a(o).focus();m=l.parent();if(l.css("position")==="static"){m.css({position:"relative"});l.css({position:"relative"})}else{a.extend(j,{position:l.css("position"),zIndex:l.css("z-index")});a.each(["top","left","bottom","right"],function(p,q){j[q]=l.css(q);if(isNaN(parseInt(j[q],10)))j[q]="auto"});l.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}l.css(n);return m.css(j).show()},
+removeWrapper:function(l){var j=document.activeElement;if(l.parent().is(".ui-effects-wrapper")){l.parent().replaceWith(l);if(l[0]===j||a.contains(l[0],j))a(j).focus()}return l},setTransition:function(l,j,m,n){n=n||{};a.each(j,function(o,p){var q=l.cssUnit(p);if(q[0]>0)n[p]=q[0]*m+q[1]});return n}});a.fn.extend({effect:function(){function l(q){function u(){a.isFunction(r)&&r.call(s[0]);a.isFunction(q)&&q()}var s=a(this),r=j.complete,t=j.mode;(s.is(":hidden")?t==="hide":t==="show")?u():o.call(s[0],
+j,u)}var j=e.apply(this,arguments),m=j.mode,n=j.queue,o=a.effects.effect[j.effect],p=!o&&i&&a.effects[j.effect];if(a.fx.off||!(o||p))return m?this[m](j.duration,j.complete):this.each(function(){j.complete&&j.complete.call(this)});return o?n===false?this.each(l):this.queue(n||"fx",l):p.call(this,{options:j,duration:j.duration,callback:j.complete,mode:j.mode})},_show:a.fn.show,show:function(l){if(f(l))return this._show.apply(this,arguments);else{var j=e.apply(this,arguments);j.mode="show";return this.effect.call(this,
+j)}},_hide:a.fn.hide,hide:function(l){if(f(l))return this._hide.apply(this,arguments);else{var j=e.apply(this,arguments);j.mode="hide";return this.effect.call(this,j)}},__toggle:a.fn.toggle,toggle:function(l){if(f(l)||typeof l==="boolean"||a.isFunction(l))return this.__toggle.apply(this,arguments);else{var j=e.apply(this,arguments);j.mode="toggle";return this.effect.call(this,j)}},cssUnit:function(l){var j=this.css(l),m=[];a.each(["em","px","%","pt"],function(n,o){if(j.indexOf(o)>0)m=[parseFloat(j),
+o]});return m}});a.easing.jswing=a.easing.swing;a.extend(a.easing,{def:"easeOutQuad",swing:function(l,j,m,n,o){return a.easing[a.easing.def](l,j,m,n,o)},easeInQuad:function(l,j,m,n,o){return n*(j/=o)*j+m},easeOutQuad:function(l,j,m,n,o){return-n*(j/=o)*(j-2)+m},easeInOutQuad:function(l,j,m,n,o){if((j/=o/2)<1)return n/2*j*j+m;return-n/2*(--j*(j-2)-1)+m},easeInCubic:function(l,j,m,n,o){return n*(j/=o)*j*j+m},easeOutCubic:function(l,j,m,n,o){return n*((j=j/o-1)*j*j+1)+m},easeInOutCubic:function(l,j,
+m,n,o){if((j/=o/2)<1)return n/2*j*j*j+m;return n/2*((j-=2)*j*j+2)+m},easeInQuart:function(l,j,m,n,o){return n*(j/=o)*j*j*j+m},easeOutQuart:function(l,j,m,n,o){return-n*((j=j/o-1)*j*j*j-1)+m},easeInOutQuart:function(l,j,m,n,o){if((j/=o/2)<1)return n/2*j*j*j*j+m;return-n/2*((j-=2)*j*j*j-2)+m},easeInQuint:function(l,j,m,n,o){return n*(j/=o)*j*j*j*j+m},easeOutQuint:function(l,j,m,n,o){return n*((j=j/o-1)*j*j*j*j+1)+m},easeInOutQuint:function(l,j,m,n,o){if((j/=o/2)<1)return n/2*j*j*j*j*j+m;return n/2*
+((j-=2)*j*j*j*j+2)+m},easeInSine:function(l,j,m,n,o){return-n*Math.cos(j/o*(Math.PI/2))+n+m},easeOutSine:function(l,j,m,n,o){return n*Math.sin(j/o*(Math.PI/2))+m},easeInOutSine:function(l,j,m,n,o){return-n/2*(Math.cos(Math.PI*j/o)-1)+m},easeInExpo:function(l,j,m,n,o){return j==0?m:n*Math.pow(2,10*(j/o-1))+m},easeOutExpo:function(l,j,m,n,o){return j==o?m+n:n*(-Math.pow(2,-10*j/o)+1)+m},easeInOutExpo:function(l,j,m,n,o){if(j==0)return m;if(j==o)return m+n;if((j/=o/2)<1)return n/2*Math.pow(2,10*(j-1))+
+m;return n/2*(-Math.pow(2,-10*--j)+2)+m},easeInCirc:function(l,j,m,n,o){return-n*(Math.sqrt(1-(j/=o)*j)-1)+m},easeOutCirc:function(l,j,m,n,o){return n*Math.sqrt(1-(j=j/o-1)*j)+m},easeInOutCirc:function(l,j,m,n,o){if((j/=o/2)<1)return-n/2*(Math.sqrt(1-j*j)-1)+m;return n/2*(Math.sqrt(1-(j-=2)*j)+1)+m},easeInElastic:function(l,j,m,n,o){l=1.70158;var p=o*0.3,q=n;if(j==0)return m;if((j/=o)==1)return m+n;if(q<Math.abs(n)){q=n;l=p/4}else l=p/(2*Math.PI)*Math.asin(n/q);return-(q*Math.pow(2,10*(j-=1))*Math.sin((j*
+o-l)*2*Math.PI/p))+m},easeOutElastic:function(l,j,m,n,o){l=1.70158;var p=o*0.3,q=n;if(j==0)return m;if((j/=o)==1)return m+n;if(q<Math.abs(n)){q=n;l=p/4}else l=p/(2*Math.PI)*Math.asin(n/q);return q*Math.pow(2,-10*j)*Math.sin((j*o-l)*2*Math.PI/p)+n+m},easeInOutElastic:function(l,j,m,n,o){l=1.70158;var p=o*0.3*1.5,q=n;if(j==0)return m;if((j/=o/2)==2)return m+n;if(q<Math.abs(n)){q=n;l=p/4}else l=p/(2*Math.PI)*Math.asin(n/q);if(j<1)return-0.5*q*Math.pow(2,10*(j-=1))*Math.sin((j*o-l)*2*Math.PI/p)+m;return q*
+Math.pow(2,-10*(j-=1))*Math.sin((j*o-l)*2*Math.PI/p)*0.5+n+m},easeInBack:function(l,j,m,n,o,p){if(p==g)p=1.70158;return n*(j/=o)*j*((p+1)*j-p)+m},easeOutBack:function(l,j,m,n,o,p){if(p==g)p=1.70158;return n*((j=j/o-1)*j*((p+1)*j+p)+1)+m},easeInOutBack:function(l,j,m,n,o,p){if(p==g)p=1.70158;if((j/=o/2)<1)return n/2*j*j*(((p*=1.525)+1)*j-p)+m;return n/2*((j-=2)*j*(((p*=1.525)+1)*j+p)+2)+m},easeInBounce:function(l,j,m,n,o){return n-a.easing.easeOutBounce(l,o-j,0,n,o)+m},easeOutBounce:function(l,j,m,
+n,o){return(j/=o)<1/2.75?n*7.5625*j*j+m:j<2/2.75?n*(7.5625*(j-=1.5/2.75)*j+0.75)+m:j<2.5/2.75?n*(7.5625*(j-=2.25/2.75)*j+0.9375)+m:n*(7.5625*(j-=2.625/2.75)*j+0.984375)+m},easeInOutBounce:function(l,j,m,n,o){if(j<o/2)return a.easing.easeInBounce(l,j*2,0,n,o)*0.5+m;return a.easing.easeOutBounce(l,j*2-o,0,n,o)*0.5+n*0.5+m}})}(jQuery);
+(function(a){var g=/up|down|vertical/,d=/up|left|vertical|horizontal/;a.effects.effect.blind=function(c,e){var f=a(this),i=["position","top","bottom","left","right","height","width"],b=a.effects.setMode(f,c.mode||"hide"),h=c.direction||"up",k=g.test(h),l=k?"height":"width",j=k?"top":"left";h=d.test(h);var m={},n=b==="show",o,p;f.parent().is(".ui-effects-wrapper")?a.effects.save(f.parent(),i):a.effects.save(f,i);f.show();p=parseInt(f.css("top"),10);o=a.effects.createWrapper(f).css({overflow:"hidden"});
+p=k?o[l]()+p:o[l]();m[l]=n?p:0;if(!h){f.css(k?"bottom":"right",0).css(k?"top":"left","").css({position:"absolute"});m[j]=n?0:p}if(n){o.css(l,0);h||o.css(j,p)}o.animate(m,{duration:c.duration,easing:c.easing,queue:false,complete:function(){b==="hide"&&f.hide();a.effects.restore(f,i);a.effects.removeWrapper(f);e()}})}})(jQuery);
+(function(a){a.effects.effect.bounce=function(g,d){var c=a(this),e=["position","top","bottom","left","right","height","width"],f=a.effects.setMode(c,g.mode||"effect"),i=f==="hide",b=f==="show",h=g.direction||"up";f=g.distance;var k=g.times||5,l=k*2+(b||i?1:0),j=g.duration/l,m=g.easing,n=h==="up"||h==="down"?"top":"left";h=h==="up"||h==="left";var o,p,q=c.queue(),u=q.length;if(b||i)e.push("opacity");a.effects.save(c,e);c.show();a.effects.createWrapper(c);f||(f=c[n==="top"?"outerHeight":"outerWidth"]()/
+3);if(b){p={opacity:1};p[n]=0;c.css("opacity",0).css(n,h?-f*2:f*2).animate(p,j,m)}if(i)f/=Math.pow(2,k-1);p={};for(b=p[n]=0;b<k;b++){o={};o[n]=(h?"-=":"+=")+f;c.animate(o,j,m).animate(p,j,m);f=i?f*2:f/2}if(i){o={opacity:0};o[n]=(h?"-=":"+=")+f;c.animate(o,j,m)}c.queue(function(){i&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d()});u>1&&q.splice.apply(q,[1,0].concat(q.splice(u,l+1)));c.dequeue()}})(jQuery);
+(function(a){a.effects.effect.clip=function(g,d){var c=a(this),e=["position","top","bottom","left","right","height","width"],f=a.effects.setMode(c,g.mode||"hide")==="show",i=(g.direction||"vertical")==="vertical",b=i?"height":"width";i=i?"top":"left";var h={},k,l;a.effects.save(c,e);c.show();k=a.effects.createWrapper(c).css({overflow:"hidden"});k=c[0].tagName==="IMG"?k:c;l=k[b]();if(f){k.css(b,0);k.css(i,l/2)}h[b]=f?l:0;h[i]=f?0:l/2;k.animate(h,{queue:false,duration:g.duration,easing:g.easing,complete:function(){f||
+c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d()}})}})(jQuery);
+(function(a){a.effects.effect.drop=function(g,d){var c=a(this),e=["position","top","bottom","left","right","opacity","height","width"],f=a.effects.setMode(c,g.mode||"hide"),i=f==="show",b=g.direction||"left",h=b==="up"||b==="down"?"top":"left";b=b==="up"||b==="left"?"pos":"neg";var k={opacity:i?1:0},l;a.effects.save(c,e);c.show();a.effects.createWrapper(c);l=g.distance||c[h=="top"?"outerHeight":"outerWidth"]({margin:true})/2;if(i)c.css("opacity",0).css(h,b=="pos"?-l:l);k[h]=(i?b==="pos"?"+=":"-=":
+b==="pos"?"-=":"+=")+l;c.animate(k,{queue:false,duration:g.duration,easing:g.easing,complete:function(){f=="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d()}})}})(jQuery);
+(function(a){a.effects.effect.explode=function(g,d){function c(){j.push(this);if(j.length==e*f){i.css({visibility:"visible"});a(j).remove();b||i.hide();d()}}var e=g.pieces?Math.round(Math.sqrt(g.pieces)):3,f=e,i=a(this),b=a.effects.setMode(i,g.mode||"hide")==="show",h=i.show().css("visibility","hidden").offset(),k=Math.ceil(i.outerWidth()/f),l=Math.ceil(i.outerHeight()/e),j=[],m,n,o,p,q,u;for(m=0;m<e;m++){p=h.top+m*l;u=m-(e-1)/2;for(n=0;n<f;n++){o=h.left+n*k;q=n-(f-1)/2;i.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",
+visibility:"visible",left:-n*k,top:-m*l}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:k,height:l,left:o+(b?q*k:0),top:p+(b?u*l:0),opacity:b?0:1}).animate({left:o+(b?0:q*k),top:p+(b?0:u*l),opacity:b?1:0},g.duration||500,g.easing,c)}}}})(jQuery);
+(function(a){a.effects.effect.fade=function(g,d){var c=a(this),e=a.effects.setMode(c,g.mode||"toggle")==="hide";c.show();c.animate({opacity:e?0:1},{queue:false,duration:g.duration,easing:g.easing,complete:function(){e&&c.hide();d()}})}})(jQuery);
+(function(a){a.effects.effect.fold=function(g,d){var c=a(this),e=["position","top","bottom","left","right","height","width"],f=a.effects.setMode(c,g.mode||"hide"),i=f==="show",b=f==="hide";f=g.size||15;var h=/([0-9]+)%/.exec(f),k=!!g.horizFirst,l=i!=k,j=l?["width","height"]:["height","width"],m=g.duration/2,n,o={},p={};a.effects.save(c,e);c.show();n=a.effects.createWrapper(c).css({overflow:"hidden"});l=l?[n.width(),n.height()]:[n.height(),n.width()];if(h)f=parseInt(h[1],10)/100*l[b?0:1];if(i)n.css(k?
+{height:0,width:f}:{height:f,width:0});o[j[0]]=i?l[0]:f;p[j[1]]=i?l[1]:0;n.animate(o,m,g.easing).animate(p,m,g.easing,function(){b&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d()})}})(jQuery);
+(function(a){a.effects.effect.highlight=function(g,d){var c=a(this),e=["backgroundImage","backgroundColor","opacity"],f=a.effects.setMode(c,g.mode||"show"),i={backgroundColor:c.css("backgroundColor")};if(f==="hide")i.opacity=0;a.effects.save(c,e);c.show().css({backgroundImage:"none",backgroundColor:g.color||"#ffff99"}).animate(i,{queue:false,duration:g.duration,easing:g.easing,complete:function(){f==="hide"&&c.hide();a.effects.restore(c,e);d()}})}})(jQuery);
+(function(a){a.effects.effect.pulsate=function(g,d){var c=a(this),e=a.effects.setMode(c,g.mode||"show"),f=e==="show",i=e==="hide";e=(g.times||5)*2+(f||e==="hide"?1:0);var b=g.duration/e,h=0,k=c.queue(),l=k.length;if(f||!c.is(":visible")){c.css("opacity",0).show();h=1}for(f=1;f<e;f++){c.animate({opacity:h},b,g.easing);h=1-h}c.animate({opacity:h},b,g.easing);c.queue(function(){i&&c.hide();d()});l>1&&k.splice.apply(k,[1,0].concat(k.splice(l,e+1)));c.dequeue()}})(jQuery);
+(function(a){a.effects.effect.puff=function(g,d){var c=a(this),e=a.effects.setMode(c,g.mode||"hide"),f=e==="hide",i=parseInt(g.percent,10)||150,b=i/100,h={height:c.height(),width:c.width()};a.extend(g,{effect:"scale",queue:false,fade:true,mode:e,complete:d,percent:f?i:100,from:f?h:{height:h.height*b,width:h.width*b}});c.effect(g)};a.effects.effect.scale=function(g,d){var c=a(this),e=a.extend(true,{},g),f=a.effects.setMode(c,g.mode||"effect"),i=parseInt(g.percent,10)||(parseInt(g.percent,10)==0?0:
+f=="hide"?0:100),b=g.direction||"both",h=g.origin,k={height:c.height(),width:c.width(),outerHeight:c.outerHeight(),outerWidth:c.outerWidth()};i={y:b!="horizontal"?i/100:1,x:b!="vertical"?i/100:1};e.effect="size";e.queue=false;e.complete=d;if(f!="effect"){e.origin=h||["middle","center"];e.restore=true}e.from=g.from||(f=="show"?{height:0,width:0}:k);e.to={height:k.height*i.y,width:k.width*i.x,outerHeight:k.outerHeight*i.y,outerWidth:k.outerWidth*i.x};if(e.fade){if(f=="show"){e.from.opacity=0;e.to.opacity=
+1}if(f=="hide"){e.from.opacity=1;e.to.opacity=0}}c.effect(e)};a.effects.effect.size=function(g,d){var c=a(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],f=["position","top","bottom","left","right","overflow","opacity"],i=["width","height","overflow"],b=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],l=a.effects.setMode(c,g.mode||"effect"),j=g.restore||
+l!=="effect",m=g.scale||"both",n=g.origin||["middle","center"],o,p,q,u=c.css("position"),s=c.css("bottom")!=="auto"?"bottom":"top";originalHorizontalPositioning=c.css("right")!=="auto"?"right":"left";l==="show"&&c.show();o={height:c.height(),width:c.width(),outerHeight:c.outerHeight(),outerWidth:c.outerWidth()};c.from=g.from||o;c.to=g.to||o;q={from:{y:c.from.height/o.height,x:c.from.width/o.width},to:{y:c.to.height/o.height,x:c.to.width/o.width}};if(m=="box"||m=="both"){if(q.from.y!==q.to.y){e=e.concat(h);
+c.from=a.effects.setTransition(c,h,q.from.y,c.from);c.to=a.effects.setTransition(c,h,q.to.y,c.to)}if(q.from.x!==q.to.x){e=e.concat(k);c.from=a.effects.setTransition(c,k,q.from.x,c.from);c.to=a.effects.setTransition(c,k,q.to.x,c.to)}}if(m=="content"||m=="both")if(q.from.y!==q.to.y){e=e.concat(b);c.from=a.effects.setTransition(c,b,q.from.y,c.from);c.to=a.effects.setTransition(c,b,q.to.y,c.to)}a.effects.save(c,j?e:f);c.show();a.effects.createWrapper(c);c.css("overflow","hidden").css(c.from);if(n){p=
+a.effects.getBaseline(n,o);c.from.top=(o.outerHeight-c.outerHeight())*p.y;c.from.left=(o.outerWidth-c.outerWidth())*p.x;c.to.top=(o.outerHeight-c.to.outerHeight)*p.y;c.to.left=(o.outerWidth-c.to.outerWidth)*p.x}c.css(c.from);if(m=="content"||m=="both"){h=h.concat(["marginTop","marginBottom"]).concat(b);k=k.concat(["marginLeft","marginRight"]);i=e.concat(h).concat(k);c.find("*[width]").each(function(){var r=a(this),t={height:r.height(),width:r.width()};j&&a.effects.save(r,i);r.from={height:t.height*
+q.from.y,width:t.width*q.from.x};r.to={height:t.height*q.to.y,width:t.width*q.to.x};if(q.from.y!=q.to.y){r.from=a.effects.setTransition(r,h,q.from.y,r.from);r.to=a.effects.setTransition(r,h,q.to.y,r.to)}if(q.from.x!=q.to.x){r.from=a.effects.setTransition(r,k,q.from.x,r.from);r.to=a.effects.setTransition(r,k,q.to.x,r.to)}r.css(r.from);r.animate(r.to,g.duration,g.easing,function(){j&&a.effects.restore(r,i)})})}c.animate(c.to,{queue:false,duration:g.duration,easing:g.easing,complete:function(){c.to.opacity===
+0&&c.css("opacity",c.from.opacity);l=="hide"&&c.hide();a.effects.restore(c,j?e:f);j||(u==="static"?c.css({position:"relative",top:c.to.top,left:c.to.left}):a.each([s,originalHorizontalPositioning],function(r,t){c.css(t,function(v,w){var x=parseInt(w,10),C=r?c.to.left:c.to.top,A=r?c.to.outerWidth-c.from.outerWidth:c.to.outerHeight-c.from.outerHeight,y=n[r]===t,D=n[r]==="middle"||n[r]==="center";if(w==="auto")return C+"px";if(!(t=="left"||t=="top"))if(u==="relative")C*=-1;else D||(C-=A*(y?-1:1));return x+
+C+"px"})}));a.effects.removeWrapper(c);d()}})}})(jQuery);
+(function(a){a.effects.effect.shake=function(g,d){var c=a(this),e=["position","top","bottom","left","right","height","width"],f=a.effects.setMode(c,g.mode||"effect"),i=g.direction||"left",b=g.distance||20,h=g.times||3,k=h*2+1,l=g.duration,j=i=="up"||i=="down"?"top":"left",m=i=="up"||i=="left";i={};var n={},o={},p=c.queue(),q=p.length;a.effects.save(c,e);c.show();a.effects.createWrapper(c);i[j]=(m?"-=":"+=")+b;n[j]=(m?"+=":"-=")+b*2;o[j]=(m?"-=":"+=")+b*2;c.animate(i,l,g.easing);for(b=1;b<h;b++)c.animate(n,
+l,g.easing).animate(o,l,g.easing);c.animate(n,l,g.easing).animate(i,l/2,g.easing).queue(function(){f==="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d()});q>1&&p.splice.apply(p,[1,0].concat(p.splice(q,k+1)));c.dequeue()}})(jQuery);
+(function(a){a.effects.effect.slide=function(g,d){var c=a(this),e=["position","top","bottom","left","right","width","height"],f=a.effects.setMode(c,g.mode||"show"),i=f==="show",b=g.direction||"left",h=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left";var k,l={};a.effects.save(c,e);c.show();k=g.distance||c[h==="top"?"outerHeight":"outerWidth"]({margin:true});a.effects.createWrapper(c).css({overflow:"hidden"});if(i)c.css(h,b?isNaN(k)?"-"+k:-k:k);l[h]=(i?b?"+=":"-=":b?"-=":"+=")+k;c.animate(l,{queue:false,
+duration:g.duration,easing:g.easing,complete:function(){f==="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d()}})}})(jQuery);
+(function(a){a.effects.effect.transfer=function(g,d){var c=a(this),e=a(g.to),f=e.css("position")==="fixed",i=a("body"),b=f?i.scrollTop():0;i=f?i.scrollLeft():0;var h=e.offset();e={top:h.top-b,left:h.left-i,height:e.innerHeight(),width:e.innerWidth()};h=c.offset();var k=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(g.className).css({top:h.top-b,left:h.left-i,height:c.innerHeight(),width:c.innerWidth(),position:f?"fixed":"absolute"}).animate(e,g.duration,g.easing,function(){k.remove();
+d()})}})(jQuery);
+(function(a){a.widget("ui.accordion",{version:"1.9pre",options:{active:0,animated:"slide",collapsible:false,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var g=this.options;this.lastToggle={};this.element.addClass("ui-accordion ui-widget ui-helper-reset");this.headers=this.element.find(g.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all");this._hoverable(this.headers);
+this._focusable(this.headers);this.headers.find(":first-child").addClass("ui-accordion-heading");this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(!g.collapsible&&g.active===false)g.active=0;if(g.active<0)g.active+=this.headers.length;this.active=this._findActive(g.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");this.active.next().addClass("ui-accordion-content-active");this._createIcons();
+this.refresh();this.element.attr("role","tablist");this.headers.attr("role","tab").bind("keydown.accordion",a.proxy(this,"_keydown")).next().attr("role","tabpanel");this.headers.not(this.active).attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();this.active.length?this.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):this.headers.eq(0).attr("tabIndex",0);a.browser.safari||this.headers.find("a").attr("tabIndex",-1);this._setupEvents(g.event)},_createIcons:function(){var g=
+this.options.icons;if(g){a("<span>").addClass("ui-accordion-header-icon ui-icon "+g.header).prependTo(this.headers);this.active.children(".ui-accordion-header-icon").removeClass(g.header).addClass(g.activeHeader);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-accordion-header-icon").remove();this.element.removeClass("ui-accordion-icons")},_destroy:function(){this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex").find("a").removeAttr("tabIndex").end().find(".ui-accordion-heading").removeClass("ui-accordion-heading");
+this._destroyIcons();var g=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");this.options.heightStyle!=="content"&&g.css("height","")},_setOption:function(g,d){if(g==="active")this._activate(d);else{if(g==="event"){this.options.event&&this.headers.unbind(this.options.event+".accordion",this._eventHandler);this._setupEvents(d)}this._super("_setOption",
+g,d);g==="collapsible"&&!d&&this.options.active===false&&this._activate(0);if(g==="icons"){this._destroyIcons();d&&this._createIcons()}g==="disabled"&&this.headers.add(this.headers.next()).toggleClass("ui-accordion-disabled ui-state-disabled",!!d)}},_keydown:function(g){if(!(this.options.disabled||g.altKey||g.ctrlKey)){var d=a.ui.keyCode,c=this.headers.length,e=this.headers.index(g.target),f=false;switch(g.keyCode){case d.RIGHT:case d.DOWN:f=this.headers[(e+1)%c];break;case d.LEFT:case d.UP:f=this.headers[(e-
+1+c)%c];break;case d.SPACE:case d.ENTER:this._eventHandler(g)}if(f){a(g.target).attr("tabIndex",-1);a(f).attr("tabIndex",0);f.focus();g.preventDefault()}}},refresh:function(){var g=this.options,d=this.element.parent(),c,e;if(g.heightStyle==="fill"){if(!a.support.minHeight){e=d.css("overflow");d.css("overflow","hidden")}c=d.height();this.element.siblings(":visible").each(function(){var f=a(this),i=f.css("position");i==="absolute"||i==="fixed"||(c-=f.outerHeight(true))});e&&d.css("overflow",e);this.headers.each(function(){c-=
+a(this).outerHeight(true)});this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")}else if(g.heightStyle==="auto"){c=0;this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c)}return this},_activate:function(g){g=this._findActive(g)[0];if(g!==this.active[0]){g=g||this.active[0];this._eventHandler({target:g,currentTarget:g,preventDefault:a.noop})}},_findActive:function(g){return typeof g==="number"?
+this.headers.eq(g):a()},_setupEvents:function(g){g&&this.headers.bind(g.split(" ").join(".accordion ")+".accordion",a.proxy(this,"_eventHandler"))},_eventHandler:function(g){var d=this.options,c=this.active,e=a(g.currentTarget),f=e[0]===c[0],i=f&&d.collapsible,b=i?a():e.next(),h=c.next();b={oldHeader:c,oldContent:h,newHeader:i?a():e,newContent:b};g.preventDefault();if(!(d.disabled||f&&!d.collapsible||this._trigger("beforeActivate",g,b)===false)){d.active=i?false:this.headers.index(e);this.active=
+f?a():e;this._toggle(b);c.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-accordion-header-icon").removeClass(d.icons.activeHeader).addClass(d.icons.header);if(!f){e.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-accordion-header-icon").removeClass(d.icons.header).addClass(d.icons.activeHeader);e.next().addClass("ui-accordion-content-active")}}},_toggle:function(g){function d(){c._completed(g)}
+var c=this,e=c.options,f=g.newContent,i=g.oldContent;if(e.animated){var b=a.ui.accordion.animations;e=e.animated;var h;if(!b[e]){h={easing:a.easing[e]?e:"slide",duration:700};e="slide"}b[e]({widget:c,toShow:f,toHide:i,prevShow:c.lastToggle.toShow,prevHide:c.lastToggle.toHide,complete:d,down:f.length&&(!i.length||f.index()<i.index())},h)}else{i.hide();f.show();d()}i.prev().attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).blur();f.prev().attr({"aria-expanded":"true","aria-selected":"true",
+tabIndex:0}).focus()},_completed:function(g){var d=g.newContent,c=g.oldContent;this.options.heightStyle==="content"&&d.add(c).css({height:"",overflow:""});c.removeClass("ui-accordion-content-active");if(c.length)c.parent()[0].className=c.parent()[0].className;this._trigger("activate",null,g)}});a.extend(a.ui.accordion,{animations:{slide:function(g,d){if(g.prevShow||g.prevHide){g.prevHide.stop(true,true);g.toHide=g.prevShow}var c=g.toShow.css("overflow"),e=g.toHide.css("overflow"),f=0,i={},b={},h;
+g=a.extend({easing:"swing",duration:300},g,d);g.widget.lastToggle=g;if(g.toHide.size())if(g.toShow.size()){var k=g.toShow;h=k[0].style.width;k.width(parseInt(k.parent().width(),10)-parseInt(k.css("paddingLeft"),10)-parseInt(k.css("paddingRight"),10)-(parseInt(k.css("borderLeftWidth"),10)||0)-(parseInt(k.css("borderRightWidth"),10)||0));a.each(["height","paddingTop","paddingBottom"],function(l,j){b[j]="hide";var m=(""+a.css(g.toShow[0],j)).match(/^([\d+-.]+)(.*)$/);i[j]={value:j==="height"&&m[1]===
+"0"?1:m[1],unit:m[2]||"px"}});g.toShow.css({height:0,overflow:"hidden"}).show();g.toHide.filter(":hidden").each(g.complete).end().filter(":visible").animate(b,{step:function(l,j){if(j.prop=="height"||j.prop=="paddingTop"||j.prop=="paddingBottom")f=j.end-j.start===0?0:(j.now-j.start)/(j.end-j.start);g.toShow[0].style[j.prop]=f*i[j.prop].value+i[j.prop].unit},duration:g.duration,easing:g.easing,complete:function(){g.toShow.css({width:h,overflow:c});g.toHide.css("overflow",e);g.complete()}})}else g.toHide.animate({height:"hide",
+paddingTop:"hide",paddingBottom:"hide"},g);else{h=g.toShow[0].style.width;g.toShow.show().width(g.toShow.width()).hide().animate({height:"show",paddingTop:"show",paddingBottom:"show"},{duration:g.duration,easing:g.easing,complete:function(){g.toShow.width(h);g.complete()}})}},bounceslide:function(g){this.slide(g,{easing:g.down?"easeOutBounce":"swing",duration:g.down?1E3:200})}}});if(a.uiBackCompat!==false){(function(g,d){g.extend(d.options,{navigation:false,navigationFilter:function(){return this.href.toLowerCase()===
+location.href.toLowerCase()}});var c=d._create;d._create=function(){if(this.options.navigation){var e=this,f=this.element.find(this.options.header),i=f.next(),b=f.add(i).find("a").filter(this.options.navigationFilter)[0];b&&f.add(i).each(function(h){if(g.contains(this,b)){e.options.active=Math.floor(h/2);return false}})}c.call(this)}})(jQuery,jQuery.ui.accordion.prototype);(function(g,d){g.extend(d.options,{heightStyle:null,autoHeight:true,clearStyle:false,fillSpace:false});var c=d._create,e=d._setOption;
+g.extend(d,{_create:function(){this.options.heightStyle=this.options.heightStyle||this._mergeHeightStyle();c.call(this)},_setOption:function(f){if(f==="autoHeight"||f==="clearStyle"||f==="fillSpace")this.options.heightStyle=this._mergeHeightStyle();e.apply(this,arguments)},_mergeHeightStyle:function(){var f=this.options;if(f.fillSpace)return"fill";if(f.clearStyle)return"content";if(f.autoHeight)return"auto"}})})(jQuery,jQuery.ui.accordion.prototype);(function(g,d){g.extend(d.options.icons,{activeHeader:null,
+headerSelected:"ui-icon-triangle-1-s"});var c=d._createIcons;d._createIcons=function(){this.options.icons.activeHeader=this.options.icons.activeHeader||this.options.icons.headerSelected;c.call(this)}})(jQuery,jQuery.ui.accordion.prototype);(function(g,d){d.activate=d._activate;var c=d._findActive;d._findActive=function(e){if(e===-1)e=false;if(e&&typeof e!=="number"){e=this.headers.index(this.headers.filter(e));if(e===-1)e=false}return c.call(this,e)}})(jQuery,jQuery.ui.accordion.prototype);jQuery.ui.accordion.prototype.resize=
+jQuery.ui.accordion.prototype.refresh;(function(g,d){g.extend(d.options,{change:null,changestart:null});var c=d._trigger;d._trigger=function(e,f,i){var b=c.apply(this,arguments);if(!b)return false;if(e==="beforeActivate")b=c.call(this,"changestart",f,i);else if(e==="activate")b=c.call(this,"change",f,i);return b}})(jQuery,jQuery.ui.accordion.prototype)}})(jQuery);
+(function(a){var g=0;a.widget("ui.autocomplete",{version:"1.9pre",defaultElement:"<input>",options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var d=this,c=this.element[0].ownerDocument,e,f;this.valueMethod=this.element[this.element.is("input,textarea")?"val":"text"];this.element.addClass("ui-autocomplete-input").attr("autocomplete",
+"off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(i){if(d.options.disabled||d.element.prop("readOnly"))f=e=true;else{f=e=false;var b=a.ui.keyCode;switch(i.keyCode){case b.PAGE_UP:e=true;d._move("previousPage",i);break;case b.PAGE_DOWN:e=true;d._move("nextPage",i);break;case b.UP:e=true;d._move("previous",i);i.preventDefault();break;case b.DOWN:e=true;d._move("next",i);i.preventDefault();break;case b.ENTER:case b.NUMPAD_ENTER:if(d.menu.active){e=
+true;i.preventDefault()}case b.TAB:if(!d.menu.active)break;d.menu.select(i);break;case b.ESCAPE:if(d.menu.element.is(":visible")){d._value(d.term);d.close(i)}break;default:d._searchTimeout(i)}}}).bind("keypress.autocomplete",function(i){if(e){e=false;i.preventDefault()}else{var b=a.ui.keyCode;switch(i.keyCode){case b.PAGE_UP:d._move("previousPage",i);break;case b.PAGE_DOWN:d._move("nextPage",i);break;case b.UP:d._move("previous",i);i.preventDefault();break;case b.DOWN:d._move("next",i);i.preventDefault()}}}).bind("input.autocomplete",
+function(i){if(f){f=false;i.preventDefault()}else d._searchTimeout(i)}).bind("focus.autocomplete",function(){if(!d.options.disabled){d.selectedItem=null;d.previous=d._value()}}).bind("blur.autocomplete",function(i){if(!d.options.disabled){clearTimeout(d.searching);d.closing=setTimeout(function(){d.close(i);d._change(i)},150)}});this._initSource();this.response=function(){return d._response.apply(d,arguments)};this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",
+c)[0]).mousedown(function(i){var b=d.menu.element[0];a(i.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(h){h.target!==d.element[0]&&h.target!==b&&!a.contains(b,h.target)&&d.close()})},1);setTimeout(function(){clearTimeout(d.closing)},13)}).menu({input:a(),focus:function(i,b){var h=b.item.data("item.autocomplete");false!==d._trigger("focus",i,{item:h})&&/^key/.test(i.originalEvent.type)&&d._value(h.value)},select:function(i,b){var h=b.item.data("item.autocomplete"),
+k=d.previous;if(d.element[0]!==c.activeElement){d.element.focus();d.previous=k;setTimeout(function(){d.previous=k;d.selectedItem=h},1)}false!==d._trigger("select",i,{item:h})&&d._value(h.value);d.term=d._value();d.close(i);d.selectedItem=h}}).zIndex(this.element.zIndex()+1).hide().data("menu");a.fn.bgiframe&&this.menu.element.bgiframe()},_destroy:function(){clearTimeout(this.searching);this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");
+this.menu.element.remove()},_setOption:function(d,c){this._super("_setOption",d,c);d==="source"&&this._initSource();if(d==="appendTo")this.menu.element.appendTo(a(c||"body",this.element[0].ownerDocument)[0]);d==="disabled"&&c&&this.xhr&&this.xhr.abort()},_initSource:function(){var d=this,c,e;if(a.isArray(this.options.source)){c=this.options.source;this.source=function(f,i){i(a.ui.autocomplete.filter(c,f.term))}}else if(typeof this.options.source==="string"){e=this.options.source;this.source=function(f,
+i){d.xhr&&d.xhr.abort();d.xhr=a.ajax({url:e,data:f,dataType:"json",autocompleteRequest:++g,success:function(b){this.autocompleteRequest===g&&i(b)},error:function(){this.autocompleteRequest===g&&i([])}})}}else this.source=this.options.source},_searchTimeout:function(d){var c=this;clearTimeout(c.searching);c.searching=setTimeout(function(){if(c.term!==c._value()){c.selectedItem=null;c.search(null,d)}},c.options.delay)},search:function(d,c){d=d!=null?d:this._value();this.term=this._value();if(d.length<
+this.options.minLength)return this.close(c);clearTimeout(this.closing);if(this._trigger("search",c)!==false)return this._search(d)},_search:function(d){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:d},this.response)},_response:function(d){if(d)d=this._normalize(d);this._trigger("response",null,{content:d});if(!this.options.disabled&&d&&d.length){this._suggest(d);this._trigger("open")}else this.close();this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},
+close:function(d){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.blur();this._trigger("close",d)}},_change:function(d){this.previous!==this._value()&&this._trigger("change",d,{item:this.selectedItem})},_normalize:function(d){if(d.length&&d[0].label&&d[0].value)return d;return a.map(d,function(c){if(typeof c==="string")return{label:c,value:c};return a.extend({label:c.label||c.value,value:c.value||c.label},c)})},_suggest:function(d){var c=this.menu.element.empty().zIndex(this.element.zIndex()+
+1);this._renderMenu(c,d);this.menu.blur();this.menu.refresh();c.show();this._resizeMenu();c.position(a.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var d=this.menu.element;d.outerWidth(Math.max(d.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(d,c){var e=this;a.each(c,function(f,i){e._renderItem(d,i)})},_renderItem:function(d,c){return a("<li></li>").data("item.autocomplete",c).append(a("<a></a>").text(c.label)).appendTo(d)},
+_move:function(d,c){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(d)||this.menu.last()&&/^next/.test(d)){this._value(this.term);this.menu.blur()}else this.menu[d](c);else this.search(null,c)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)}});a.extend(a.ui.autocomplete,{escapeRegex:function(d){return d.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(d,c){var e=RegExp(a.ui.autocomplete.escapeRegex(c),
+"i");return a.grep(d,function(f){return e.test(f.label||f.value||f)})}})})(jQuery);
+(function(a){var g,d,c,e,f=function(){var b=a(this).find(":ui-button");setTimeout(function(){b.button("refresh")},1)},i=function(b){var h=b.name,k=b.form,l=a([]);if(h)l=k?a(k).find("[name='"+h+"']"):a("[name='"+h+"']",b.ownerDocument).filter(function(){return!this.form});return l};a.widget("ui.button",{version:"1.9pre",defaultElement:"<button>",options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",
+f);if(typeof this.options.disabled!=="boolean")this.options.disabled=this.element.prop("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,h=this.options,k=this.type==="checkbox"||this.type==="radio",l="ui-state-hover"+(!k?" ui-state-active":"");if(h.label===null)h.label=this.buttonElement.html();if(this.element.is(":disabled"))h.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",
+function(){if(!h.disabled){a(this).addClass("ui-state-hover");this===g&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){h.disabled||a(this).removeClass(l)}).bind("click.button",function(j){if(h.disabled){j.preventDefault();j.stopImmediatePropagation()}});this.element.bind("focus.button",function(){b.buttonElement.addClass("ui-state-focus")}).bind("blur.button",function(){b.buttonElement.removeClass("ui-state-focus")});if(k){this.element.bind("change.button",function(){e||
+b.refresh()});this.buttonElement.bind("mousedown.button",function(j){if(!h.disabled){e=false;d=j.pageX;c=j.pageY}}).bind("mouseup.button",function(j){if(!h.disabled)if(d!==j.pageX||c!==j.pageY)e=true})}if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(h.disabled||e)return false;a(this).toggleClass("ui-state-active");b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(h.disabled||e)return false;
+a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed","true");var j=b.element[0];i(j).not(j).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")});else{this.buttonElement.bind("mousedown.button",function(){if(h.disabled)return false;a(this).addClass("ui-state-active");g=this;a(document).one("mouseup",function(){g=null})}).bind("mouseup.button",function(){if(h.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",
+function(j){if(h.disabled)return false;if(j.keyCode==a.ui.keyCode.SPACE||j.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(j){j.keyCode===a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",h.disabled);this._resetButton()},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":
+this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type==="radio"){var b=this.element.parents().last(),h="label[for='"+this.element.attr("id")+"']";this.buttonElement=b.find(h);if(!this.buttonElement.length){b=b.length?b.siblings():this.element.siblings();this.buttonElement=b.filter(h);if(!this.buttonElement.length)this.buttonElement=b.find(h)}this.element.addClass("ui-helper-hidden-accessible");(b=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");
+this.buttonElement.prop("aria-pressed",b)}else this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());
+this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(b,h){this._super("_setOption",b,h);if(b==="disabled")h?this.element.prop("disabled",true):this.element.prop("disabled",false);else this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")i(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",
+"false")});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false")},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
+h=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),k=this.options.icons,l=k.primary&&k.secondary,j=[];if(k.primary||k.secondary){if(this.options.text)j.push("ui-button-text-icon"+(l?"s":k.primary?"-primary":"-secondary"));k.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+k.primary+"'></span>");k.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+k.secondary+"'></span>");if(!this.options.text){j.push(l?"ui-button-icons-only":
+"ui-button-icon-only");this.hasTitle||b.attr("title",h)}}else j.push("ui-button-text-only");b.addClass(j.join(" "))}}});a.ui.button.version="1.9pre";a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,h){b==="disabled"&&this.buttons.button("option",b,h);this._super("_setOption",b,h)},refresh:function(){var b=this.element.css("direction")===
+"rtl";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(b?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}})})(jQuery);
+(function(a,g){function d(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
+"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
+"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
+minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false,disabled:false};a.extend(this._defaults,this.regional[""]);this.dpDiv=c(a('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function c(b){return b.delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a",
+"mouseout",function(){a(this).removeClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&a(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&a(this).removeClass("ui-datepicker-next-hover")}).delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a","mouseover",function(){if(!a.datepicker._isDisabledDatepicker(i.inline?b.parent()[0]:i.input[0])){a(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+a(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&a(this).addClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&a(this).addClass("ui-datepicker-next-hover")}})}function e(b,h){a.extend(b,h);for(var k in h)if(h[k]==null||h[k]==g)b[k]=h[k];return b}a.extend(a.ui,{datepicker:{version:"1.9pre"}});var f=(new Date).getTime(),i;a.extend(d.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",
+arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(b){e(this._defaults,b||{});return this},_attachDatepicker:function(b,h){var k=null,l;for(l in this._defaults){var j=b.getAttribute("date:"+l);if(j){k=k||{};try{k[l]=eval(j)}catch(m){k[l]=j}}}l=b.nodeName.toLowerCase();j=l=="div"||l=="span";if(!b.id){this.uuid+=1;b.id="dp"+this.uuid}var n=this._newInst(a(b),j);n.settings=a.extend({},h||{},k||{});if(l=="input")this._connectDatepicker(b,n);else j&&this._inlineDatepicker(b,
+n)},_newInst:function(b,h){return{id:b[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:b,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:h,dpDiv:!h?this.dpDiv:c(a('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(b,h){var k=a(b);h.append=a([]);h.trigger=a([]);if(!k.hasClass(this.markerClassName)){this._attachments(k,h);k.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",
+function(l,j,m){h.settings[j]=m}).bind("getData.datepicker",function(l,j){return this._get(h,j)});this._autoSize(h);a.data(b,"datepicker",h);h.settings.disabled&&this._disableDatepicker(b)}},_attachments:function(b,h){var k=this._get(h,"appendText"),l=this._get(h,"isRTL");h.append&&h.append.remove();if(k){h.append=a('<span class="'+this._appendClass+'">'+k+"</span>");b[l?"before":"after"](h.append)}b.unbind("focus",this._showDatepicker);h.trigger&&h.trigger.remove();k=this._get(h,"showOn");if(k==
+"focus"||k=="both")b.focus(this._showDatepicker);if(k=="button"||k=="both"){k=this._get(h,"buttonText");var j=this._get(h,"buttonImage");h.trigger=a(this._get(h,"buttonImageOnly")?a("<img/>").addClass(this._triggerClass).attr({src:j,alt:k,title:k}):a('<button type="button"></button>').addClass(this._triggerClass).html(j==""?k:a("<img/>").attr({src:j,alt:k,title:k})));b[l?"before":"after"](h.trigger);h.trigger.click(function(){a.datepicker._datepickerShowing&&a.datepicker._lastInput==b[0]?a.datepicker._hideDatepicker():
+a.datepicker._showDatepicker(b[0]);return false})}},_autoSize:function(b){if(this._get(b,"autoSize")&&!b.inline){var h=new Date(2009,11,20),k=this._get(b,"dateFormat");if(k.match(/[DM]/)){var l=function(j){for(var m=0,n=0,o=0;o<j.length;o++)if(j[o].length>m){m=j[o].length;n=o}return n};h.setMonth(l(this._get(b,k.match(/MM/)?"monthNames":"monthNamesShort")));h.setDate(l(this._get(b,k.match(/DD/)?"dayNames":"dayNamesShort"))+20-h.getDay())}b.input.attr("size",this._formatDate(b,h).length)}},_inlineDatepicker:function(b,
+h){var k=a(b);if(!k.hasClass(this.markerClassName)){k.addClass(this.markerClassName).append(h.dpDiv).bind("setData.datepicker",function(l,j,m){h.settings[j]=m}).bind("getData.datepicker",function(l,j){return this._get(h,j)});a.data(b,"datepicker",h);this._setDate(h,this._getDefaultDate(h),true);this._updateDatepicker(h);this._updateAlternate(h);h.settings.disabled&&this._disableDatepicker(b);h.dpDiv.css("display","block")}},_dialogDatepicker:function(b,h,k,l,j){b=this._dialogInst;if(!b){this.uuid+=
+1;this._dialogInput=a('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);a("body").append(this._dialogInput);b=this._dialogInst=this._newInst(this._dialogInput,false);b.settings={};a.data(this._dialogInput[0],"datepicker",b)}e(b.settings,l||{});h=h&&h.constructor==Date?this._formatDate(b,h):h;this._dialogInput.val(h);this._pos=j?j.length?j:[j.pageX,j.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/
+2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");b.settings.onSelect=k;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);a.blockUI&&a.blockUI(this.dpDiv);a.data(this._dialogInput[0],"datepicker",b);return this},_destroyDatepicker:function(b){var h=
+a(b),k=a.data(b,"datepicker");if(h.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();a.removeData(b,"datepicker");if(l=="input"){k.append.remove();k.trigger.remove();h.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(l=="div"||l=="span")h.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(b){var h=a(b),k=a.data(b,"datepicker");if(h.hasClass(this.markerClassName)){var l=
+b.nodeName.toLowerCase();if(l=="input"){b.disabled=false;k.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(l=="div"||l=="span"){h=h.children("."+this._inlineClass);h.children().removeClass("ui-state-disabled");h.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",false)}this._disabledInputs=a.map(this._disabledInputs,function(j){return j==b?null:j})}},_disableDatepicker:function(b){var h=a(b),k=a.data(b,
+"datepicker");if(h.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();if(l=="input"){b.disabled=true;k.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(l=="div"||l=="span"){h=h.children("."+this._inlineClass);h.children().addClass("ui-state-disabled");h.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",true)}this._disabledInputs=a.map(this._disabledInputs,function(j){return j==b?
+null:j});this._disabledInputs[this._disabledInputs.length]=b}},_isDisabledDatepicker:function(b){if(!b)return false;for(var h=0;h<this._disabledInputs.length;h++)if(this._disabledInputs[h]==b)return true;return false},_getInst:function(b){try{return a.data(b,"datepicker")}catch(h){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(b,h,k){var l=this._getInst(b);if(arguments.length==2&&typeof h=="string")return h=="defaults"?a.extend({},a.datepicker._defaults):l?h=="all"?
+a.extend({},l.settings):this._get(l,h):null;var j=h||{};if(typeof h=="string"){j={};j[h]=k}if(l){this._curInst==l&&this._hideDatepicker();var m=this._getDateDatepicker(b,true),n=this._getMinMaxDate(l,"min"),o=this._getMinMaxDate(l,"max");e(l.settings,j);if(n!==null&&j.dateFormat!==g&&j.minDate===g)l.settings.minDate=this._formatDate(l,n);if(o!==null&&j.dateFormat!==g&&j.maxDate===g)l.settings.maxDate=this._formatDate(l,o);this._attachments(a(b),l);this._autoSize(l);this._setDate(l,m);this._updateAlternate(l);
+this._updateDatepicker(l)}},_changeDatepicker:function(b,h,k){this._optionDatepicker(b,h,k)},_refreshDatepicker:function(b){(b=this._getInst(b))&&this._updateDatepicker(b)},_setDateDatepicker:function(b,h){var k=this._getInst(b);if(k){this._setDate(k,h);this._updateDatepicker(k);this._updateAlternate(k)}},_getDateDatepicker:function(b,h){var k=this._getInst(b);k&&!k.inline&&this._setDateFromField(k,h);return k?this._getDate(k):null},_doKeyDown:function(b){var h=a.datepicker._getInst(b.target),k=true,
+l=h.dpDiv.is(".ui-datepicker-rtl");h._keyEvent=true;if(a.datepicker._datepickerShowing)switch(b.keyCode){case 9:a.datepicker._hideDatepicker();k=false;break;case 13:k=a("td."+a.datepicker._dayOverClass+":not(."+a.datepicker._currentClass+")",h.dpDiv);k[0]&&a.datepicker._selectDay(b.target,h.selectedMonth,h.selectedYear,k[0]);if(b=a.datepicker._get(h,"onSelect")){k=a.datepicker._formatDate(h);b.apply(h.input?h.input[0]:null,[k,h])}else a.datepicker._hideDatepicker();return false;case 27:a.datepicker._hideDatepicker();
+break;case 33:a.datepicker._adjustDate(b.target,b.ctrlKey?-a.datepicker._get(h,"stepBigMonths"):-a.datepicker._get(h,"stepMonths"),"M");break;case 34:a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(h,"stepBigMonths"):+a.datepicker._get(h,"stepMonths"),"M");break;case 35:if(b.ctrlKey||b.metaKey)a.datepicker._clearDate(b.target);k=b.ctrlKey||b.metaKey;break;case 36:if(b.ctrlKey||b.metaKey)a.datepicker._gotoToday(b.target);k=b.ctrlKey||b.metaKey;break;case 37:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,
+l?+1:-1,"D");k=b.ctrlKey||b.metaKey;if(b.originalEvent.altKey)a.datepicker._adjustDate(b.target,b.ctrlKey?-a.datepicker._get(h,"stepBigMonths"):-a.datepicker._get(h,"stepMonths"),"M");break;case 38:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,-7,"D");k=b.ctrlKey||b.metaKey;break;case 39:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,l?-1:+1,"D");k=b.ctrlKey||b.metaKey;if(b.originalEvent.altKey)a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(h,"stepBigMonths"):
++a.datepicker._get(h,"stepMonths"),"M");break;case 40:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,+7,"D");k=b.ctrlKey||b.metaKey;break;default:k=false}else if(b.keyCode==36&&b.ctrlKey)a.datepicker._showDatepicker(this);else k=false;if(k){b.preventDefault();b.stopPropagation()}},_doKeyPress:function(b){var h=a.datepicker._getInst(b.target);if(a.datepicker._get(h,"constrainInput")){h=a.datepicker._possibleChars(a.datepicker._get(h,"dateFormat"));var k=String.fromCharCode(b.charCode==g?
+b.keyCode:b.charCode);return b.ctrlKey||b.metaKey||k<" "||!h||h.indexOf(k)>-1}},_doKeyUp:function(b){b=a.datepicker._getInst(b.target);if(b.input.val()!=b.lastVal)try{if(a.datepicker.parseDate(a.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,a.datepicker._getFormatConfig(b))){a.datepicker._setDateFromField(b);a.datepicker._updateAlternate(b);a.datepicker._updateDatepicker(b)}}catch(h){a.datepicker.log(h)}return true},_showDatepicker:function(b){b=b.target||b;if(b.nodeName.toLowerCase()!=
+"input")b=a("input",b.parentNode)[0];if(!(a.datepicker._isDisabledDatepicker(b)||a.datepicker._lastInput==b)){var h=a.datepicker._getInst(b);if(a.datepicker._curInst&&a.datepicker._curInst!=h){a.datepicker._curInst.dpDiv.stop(true,true);h&&a.datepicker._datepickerShowing&&a.datepicker._hideDatepicker(a.datepicker._curInst.input[0])}var k=a.datepicker._get(h,"beforeShow");k=k?k.apply(b,[b,h]):{};if(k!==false){e(h.settings,k);h.lastVal=null;a.datepicker._lastInput=b;a.datepicker._setDateFromField(h);
+if(a.datepicker._inDialog)b.value="";if(!a.datepicker._pos){a.datepicker._pos=a.datepicker._findPos(b);a.datepicker._pos[1]+=b.offsetHeight}var l=false;a(b).parents().each(function(){l|=a(this).css("position")=="fixed";return!l});if(l&&a.browser.opera){a.datepicker._pos[0]-=document.documentElement.scrollLeft;a.datepicker._pos[1]-=document.documentElement.scrollTop}k={left:a.datepicker._pos[0],top:a.datepicker._pos[1]};a.datepicker._pos=null;h.dpDiv.empty();h.dpDiv.css({position:"absolute",display:"block",
+top:"-1000px"});a.datepicker._updateDatepicker(h);k=a.datepicker._checkOffset(h,k,l);h.dpDiv.css({position:a.datepicker._inDialog&&a.blockUI?"static":l?"fixed":"absolute",display:"none",left:k.left+"px",top:k.top+"px"});if(!h.inline){k=a.datepicker._get(h,"showAnim");var j=a.datepicker._get(h,"duration"),m=function(){var n=h.dpDiv.find("iframe.ui-datepicker-cover");if(n.length){var o=a.datepicker._getBorders(h.dpDiv);n.css({left:-o[0],top:-o[1],width:h.dpDiv.outerWidth(),height:h.dpDiv.outerHeight()})}};
+h.dpDiv.zIndex(a(b).zIndex()+1);a.datepicker._datepickerShowing=true;if(a.effects&&(a.effects.effect[k]||a.effects[k]))h.dpDiv.show(k,a.datepicker._get(h,"showOptions"),j,m);else h.dpDiv[k||"show"](k?j:null,m);if(!k||!j)m();h.input.is(":visible")&&!h.input.is(":disabled")&&h.input.focus();a.datepicker._curInst=h}}}},_updateDatepicker:function(b){this.maxRows=4;var h=a.datepicker._getBorders(b.dpDiv);i=b;b.dpDiv.empty().append(this._generateHTML(b));var k=b.dpDiv.find("iframe.ui-datepicker-cover");
+k.length&&k.css({left:-h[0],top:-h[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()});b.dpDiv.find("."+this._dayOverClass+" a").mouseover();h=this._getNumberOfMonths(b);k=h[1];b.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");k>1&&b.dpDiv.addClass("ui-datepicker-multi-"+k).css("width",17*k+"em");b.dpDiv[(h[0]!=1||h[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");b.dpDiv[(this._get(b,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");
+b==a.datepicker._curInst&&a.datepicker._datepickerShowing&&b.input&&b.input.is(":visible")&&!b.input.is(":disabled")&&b.input[0]!=document.activeElement&&b.input.focus();if(b.yearshtml){var l=b.yearshtml;setTimeout(function(){l===b.yearshtml&&b.yearshtml&&b.dpDiv.find("select.ui-datepicker-year:first").replaceWith(b.yearshtml);l=b.yearshtml=null},0)}},_getBorders:function(b){var h=function(k){return{thin:1,medium:2,thick:3}[k]||k};return[parseFloat(h(b.css("border-left-width"))),parseFloat(h(b.css("border-top-width")))]},
+_checkOffset:function(b,h,k){var l=b.dpDiv.outerWidth(),j=b.dpDiv.outerHeight(),m=b.input?b.input.outerWidth():0,n=b.input?b.input.outerHeight():0,o=document.documentElement.clientWidth+a(document).scrollLeft(),p=document.documentElement.clientHeight+a(document).scrollTop();h.left-=this._get(b,"isRTL")?l-m:0;h.left-=k&&h.left==b.input.offset().left?a(document).scrollLeft():0;h.top-=k&&h.top==b.input.offset().top+n?a(document).scrollTop():0;h.left-=Math.min(h.left,h.left+l>o&&o>l?Math.abs(h.left+l-
+o):0);h.top-=Math.min(h.top,h.top+j>p&&p>j?Math.abs(j+n):0);return h},_findPos:function(b){for(var h=this._get(this._getInst(b),"isRTL");b&&(b.type=="hidden"||b.nodeType!=1||a.expr.filters.hidden(b));)b=b[h?"previousSibling":"nextSibling"];b=a(b).offset();return[b.left,b.top]},_hideDatepicker:function(b){var h=this._curInst;if(!(!h||b&&h!=a.data(b,"datepicker")))if(this._datepickerShowing){b=this._get(h,"showAnim");var k=this._get(h,"duration"),l=function(){a.datepicker._tidyDialog(h);this._curInst=
+null};if(a.effects&&(a.effects.effect[b]||a.effects[b]))h.dpDiv.hide(b,a.datepicker._get(h,"showOptions"),k,l);else h.dpDiv[b=="slideDown"?"slideUp":b=="fadeIn"?"fadeOut":"hide"](b?k:null,l);b||l();this._datepickerShowing=false;if(b=this._get(h,"onClose"))b.apply(h.input?h.input[0]:null,[h.input?h.input.val():"",h]);this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(a.blockUI){a.unblockUI();a("body").append(this.dpDiv)}}this._inDialog=false}},
+_tidyDialog:function(b){b.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(b){if(a.datepicker._curInst){b=a(b.target);var h=a.datepicker._getInst(b[0]);if(b[0].id!=a.datepicker._mainDivId&&b.parents("#"+a.datepicker._mainDivId).length==0&&!b.hasClass(a.datepicker.markerClassName)&&!b.hasClass(a.datepicker._triggerClass)&&a.datepicker._datepickerShowing&&!(a.datepicker._inDialog&&a.blockUI)||b.hasClass(a.datepicker.markerClassName)&&a.datepicker._curInst!=
+h)a.datepicker._hideDatepicker()}},_adjustDate:function(b,h,k){b=a(b);var l=this._getInst(b[0]);if(!this._isDisabledDatepicker(b[0])){this._adjustInstDate(l,h+(k=="M"?this._get(l,"showCurrentAtPos"):0),k);this._updateDatepicker(l)}},_gotoToday:function(b){b=a(b);var h=this._getInst(b[0]);if(this._get(h,"gotoCurrent")&&h.currentDay){h.selectedDay=h.currentDay;h.drawMonth=h.selectedMonth=h.currentMonth;h.drawYear=h.selectedYear=h.currentYear}else{var k=new Date;h.selectedDay=k.getDate();h.drawMonth=
+h.selectedMonth=k.getMonth();h.drawYear=h.selectedYear=k.getFullYear()}this._notifyChange(h);this._adjustDate(b)},_selectMonthYear:function(b,h,k){b=a(b);var l=this._getInst(b[0]);l["selected"+(k=="M"?"Month":"Year")]=l["draw"+(k=="M"?"Month":"Year")]=parseInt(h.options[h.selectedIndex].value,10);this._notifyChange(l);this._adjustDate(b)},_selectDay:function(b,h,k,l){var j=a(b);if(!(a(l).hasClass(this._unselectableClass)||this._isDisabledDatepicker(j[0]))){j=this._getInst(j[0]);j.selectedDay=j.currentDay=
+a("a",l).html();j.selectedMonth=j.currentMonth=h;j.selectedYear=j.currentYear=k;this._selectDate(b,this._formatDate(j,j.currentDay,j.currentMonth,j.currentYear))}},_clearDate:function(b){b=a(b);this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(b,h){var k=this._getInst(a(b)[0]);h=h!=null?h:this._formatDate(k);k.input&&k.input.val(h);this._updateAlternate(k);var l=this._get(k,"onSelect");if(l)l.apply(k.input?k.input[0]:null,[h,k]);else k.input&&k.input.trigger("change");if(k.inline)this._updateDatepicker(k);
+else{this._hideDatepicker();this._lastInput=k.input[0];typeof k.input[0]!="object"&&k.input.focus();this._lastInput=null}},_updateAlternate:function(b){var h=this._get(b,"altField");if(h){var k=this._get(b,"altFormat")||this._get(b,"dateFormat"),l=this._getDate(b),j=this.formatDate(k,l,this._getFormatConfig(b));a(h).each(function(){a(this).val(j)})}},noWeekends:function(b){b=b.getDay();return[b>0&&b<6,""]},iso8601Week:function(b){b=new Date(b.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var h=
+b.getTime();b.setMonth(0);b.setDate(1);return Math.floor(Math.round((h-b)/864E5)/7)+1},parseDate:function(b,h,k){if(b==null||h==null)throw"Invalid arguments";h=typeof h=="object"?h.toString():h+"";if(h=="")return null;var l=(k?k.shortYearCutoff:null)||this._defaults.shortYearCutoff;l=typeof l!="string"?l:(new Date).getFullYear()%100+parseInt(l,10);for(var j=(k?k.dayNamesShort:null)||this._defaults.dayNamesShort,m=(k?k.dayNames:null)||this._defaults.dayNames,n=(k?k.monthNamesShort:null)||this._defaults.monthNamesShort,
+o=(k?k.monthNames:null)||this._defaults.monthNames,p=k=-1,q=-1,u=-1,s=false,r=function(y){(y=C+1<b.length&&b.charAt(C+1)==y)&&C++;return y},t=function(y){var D=r(y);y=h.substring(x).match(RegExp("^\\d{1,"+(y=="@"?14:y=="!"?20:y=="y"&&D?4:y=="o"?3:2)+"}"));if(!y)throw"Missing number at position "+x;x+=y[0].length;return parseInt(y[0],10)},v=function(y,D,J){y=a.map(r(y)?J:D,function(H,E){return[[E,H]]}).sort(function(H,E){return-(H[1].length-E[1].length)});var I=-1;a.each(y,function(H,E){var K=E[1];
+if(h.substr(x,K.length).toLowerCase()==K.toLowerCase()){I=E[0];x+=K.length;return false}});if(I!=-1)return I+1;else throw"Unknown name at position "+x;},w=function(){if(h.charAt(x)!=b.charAt(C))throw"Unexpected literal at position "+x;x++},x=0,C=0;C<b.length;C++)if(s)if(b.charAt(C)=="'"&&!r("'"))s=false;else w();else switch(b.charAt(C)){case "d":q=t("d");break;case "D":v("D",j,m);break;case "o":u=t("o");break;case "m":p=t("m");break;case "M":p=v("M",n,o);break;case "y":k=t("y");break;case "@":var A=
+new Date(t("@"));k=A.getFullYear();p=A.getMonth()+1;q=A.getDate();break;case "!":A=new Date((t("!")-this._ticksTo1970)/1E4);k=A.getFullYear();p=A.getMonth()+1;q=A.getDate();break;case "'":if(r("'"))w();else s=true;break;default:w()}if(x<h.length){j=h.substr(x);if(!/^\s+/.test(j))throw"Extra/unparsed characters found in date: "+j;}if(k==-1)k=(new Date).getFullYear();else if(k<100)k+=(new Date).getFullYear()-(new Date).getFullYear()%100+(k<=l?0:-100);if(u>-1){p=1;q=u;do{l=this._getDaysInMonth(k,p-1);
+if(q<=l)break;p++;q-=l}while(1)}A=this._daylightSavingAdjust(new Date(k,p-1,q));if(A.getFullYear()!=k||A.getMonth()+1!=p||A.getDate()!=q)throw"Invalid date";return A},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*864E9,formatDate:function(b,h,k){if(!h)return"";
+var l=(k?k.dayNamesShort:null)||this._defaults.dayNamesShort,j=(k?k.dayNames:null)||this._defaults.dayNames,m=(k?k.monthNamesShort:null)||this._defaults.monthNamesShort;k=(k?k.monthNames:null)||this._defaults.monthNames;var n=function(r){(r=s+1<b.length&&b.charAt(s+1)==r)&&s++;return r},o=function(r,t,v){t=""+t;if(n(r))for(;t.length<v;)t="0"+t;return t},p=function(r,t,v,w){return n(r)?w[t]:v[t]},q="",u=false;if(h)for(var s=0;s<b.length;s++)if(u)if(b.charAt(s)=="'"&&!n("'"))u=false;else q+=b.charAt(s);
+else switch(b.charAt(s)){case "d":q+=o("d",h.getDate(),2);break;case "D":q+=p("D",h.getDay(),l,j);break;case "o":q+=o("o",Math.round(((new Date(h.getFullYear(),h.getMonth(),h.getDate())).getTime()-(new Date(h.getFullYear(),0,0)).getTime())/864E5),3);break;case "m":q+=o("m",h.getMonth()+1,2);break;case "M":q+=p("M",h.getMonth(),m,k);break;case "y":q+=n("y")?h.getFullYear():(h.getYear()%100<10?"0":"")+h.getYear()%100;break;case "@":q+=h.getTime();break;case "!":q+=h.getTime()*1E4+this._ticksTo1970;
+break;case "'":if(n("'"))q+="'";else u=true;break;default:q+=b.charAt(s)}return q},_possibleChars:function(b){for(var h="",k=false,l=function(m){(m=j+1<b.length&&b.charAt(j+1)==m)&&j++;return m},j=0;j<b.length;j++)if(k)if(b.charAt(j)=="'"&&!l("'"))k=false;else h+=b.charAt(j);else switch(b.charAt(j)){case "d":case "m":case "y":case "@":h+="0123456789";break;case "D":case "M":return null;case "'":if(l("'"))h+="'";else k=true;break;default:h+=b.charAt(j)}return h},_get:function(b,h){return b.settings[h]!==
+g?b.settings[h]:this._defaults[h]},_setDateFromField:function(b,h){if(b.input.val()!=b.lastVal){var k=this._get(b,"dateFormat"),l=b.lastVal=b.input?b.input.val():null,j,m;j=m=this._getDefaultDate(b);var n=this._getFormatConfig(b);try{j=this.parseDate(k,l,n)||m}catch(o){this.log(o);l=h?"":l}b.selectedDay=j.getDate();b.drawMonth=b.selectedMonth=j.getMonth();b.drawYear=b.selectedYear=j.getFullYear();b.currentDay=l?j.getDate():0;b.currentMonth=l?j.getMonth():0;b.currentYear=l?j.getFullYear():0;this._adjustInstDate(b)}},
+_getDefaultDate:function(b){return this._restrictMinMax(b,this._determineDate(b,this._get(b,"defaultDate"),new Date))},_determineDate:function(b,h,k){var l=function(j){var m=new Date;m.setDate(m.getDate()+j);return m};if(h=(h=h==null||h===""?k:typeof h=="string"?function(j){try{return a.datepicker.parseDate(a.datepicker._get(b,"dateFormat"),j,a.datepicker._getFormatConfig(b))}catch(m){}var n=(j.toLowerCase().match(/^c/)?a.datepicker._getDate(b):null)||new Date,o=n.getFullYear(),p=n.getMonth();n=n.getDate();
+for(var q=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,u=q.exec(j);u;){switch(u[2]||"d"){case "d":case "D":n+=parseInt(u[1],10);break;case "w":case "W":n+=parseInt(u[1],10)*7;break;case "m":case "M":p+=parseInt(u[1],10);n=Math.min(n,a.datepicker._getDaysInMonth(o,p));break;case "y":case "Y":o+=parseInt(u[1],10);n=Math.min(n,a.datepicker._getDaysInMonth(o,p))}u=q.exec(j)}return new Date(o,p,n)}(h):typeof h=="number"?isNaN(h)?k:l(h):new Date(h.getTime()))&&h.toString()=="Invalid Date"?k:h){h.setHours(0);h.setMinutes(0);
+h.setSeconds(0);h.setMilliseconds(0)}return this._daylightSavingAdjust(h)},_daylightSavingAdjust:function(b){if(!b)return null;b.setHours(b.getHours()>12?b.getHours()+2:0);return b},_setDate:function(b,h,k){var l=!h,j=b.selectedMonth,m=b.selectedYear;h=this._restrictMinMax(b,this._determineDate(b,h,new Date));b.selectedDay=b.currentDay=h.getDate();b.drawMonth=b.selectedMonth=b.currentMonth=h.getMonth();b.drawYear=b.selectedYear=b.currentYear=h.getFullYear();if((j!=b.selectedMonth||m!=b.selectedYear)&&
+!k)this._notifyChange(b);this._adjustInstDate(b);if(b.input)b.input.val(l?"":this._formatDate(b))},_getDate:function(b){return!b.currentYear||b.input&&b.input.val()==""?null:this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay))},_generateHTML:function(b){var h=new Date;h=this._daylightSavingAdjust(new Date(h.getFullYear(),h.getMonth(),h.getDate()));var k=this._get(b,"isRTL"),l=this._get(b,"showButtonPanel"),j=this._get(b,"hideIfNoPrevNext"),m=this._get(b,"navigationAsDateFormat"),
+n=this._getNumberOfMonths(b),o=this._get(b,"showCurrentAtPos"),p=this._get(b,"stepMonths"),q=n[0]!=1||n[1]!=1,u=this._daylightSavingAdjust(!b.currentDay?new Date(9999,9,9):new Date(b.currentYear,b.currentMonth,b.currentDay)),s=this._getMinMaxDate(b,"min"),r=this._getMinMaxDate(b,"max");o=b.drawMonth-o;var t=b.drawYear;if(o<0){o+=12;t--}if(r){var v=this._daylightSavingAdjust(new Date(r.getFullYear(),r.getMonth()-n[0]*n[1]+1,r.getDate()));for(v=s&&v<s?s:v;this._daylightSavingAdjust(new Date(t,o,1))>
+v;){o--;if(o<0){o=11;t--}}}b.drawMonth=o;b.drawYear=t;v=this._get(b,"prevText");v=!m?v:this.formatDate(v,this._daylightSavingAdjust(new Date(t,o-p,1)),this._getFormatConfig(b));v=this._canAdjustMonth(b,-1,t,o)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+f+".datepicker._adjustDate('#"+b.id+"', -"+p+", 'M');\" title=\""+v+'"><span class="ui-icon ui-icon-circle-triangle-'+(k?"e":"w")+'">'+v+"</span></a>":j?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+
+v+'"><span class="ui-icon ui-icon-circle-triangle-'+(k?"e":"w")+'">'+v+"</span></a>";var w=this._get(b,"nextText");w=!m?w:this.formatDate(w,this._daylightSavingAdjust(new Date(t,o+p,1)),this._getFormatConfig(b));j=this._canAdjustMonth(b,+1,t,o)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+f+".datepicker._adjustDate('#"+b.id+"', +"+p+", 'M');\" title=\""+w+'"><span class="ui-icon ui-icon-circle-triangle-'+(k?"w":"e")+'">'+w+"</span></a>":j?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+
+w+'"><span class="ui-icon ui-icon-circle-triangle-'+(k?"w":"e")+'">'+w+"</span></a>";p=this._get(b,"currentText");w=this._get(b,"gotoCurrent")&&b.currentDay?u:h;p=!m?p:this.formatDate(p,w,this._getFormatConfig(b));m=!b.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+f+'.datepicker._hideDatepicker();">'+this._get(b,"closeText")+"</button>":"";l=l?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(k?m:"")+(this._isInRange(b,
+w)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+f+".datepicker._gotoToday('#"+b.id+"');\">"+p+"</button>":"")+(k?"":m)+"</div>":"";m=parseInt(this._get(b,"firstDay"),10);m=isNaN(m)?0:m;p=this._get(b,"showWeek");w=this._get(b,"dayNames");this._get(b,"dayNamesShort");var x=this._get(b,"dayNamesMin"),C=this._get(b,"monthNames"),A=this._get(b,"monthNamesShort"),y=this._get(b,"beforeShowDay"),D=this._get(b,"showOtherMonths"),
+J=this._get(b,"selectOtherMonths");this._get(b,"calculateWeek");for(var I=this._getDefaultDate(b),H="",E=0;E<n[0];E++){var K="";this.maxRows=4;for(var M=0;M<n[1];M++){var P=this._daylightSavingAdjust(new Date(t,o,b.selectedDay)),B=" ui-corner-all",F="";if(q){F+='<div class="ui-datepicker-group';if(n[1]>1)switch(M){case 0:F+=" ui-datepicker-group-first";B=" ui-corner-"+(k?"right":"left");break;case n[1]-1:F+=" ui-datepicker-group-last";B=" ui-corner-"+(k?"left":"right");break;default:F+=" ui-datepicker-group-middle";
+B=""}F+='">'}F+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+B+'">'+(/all|left/.test(B)&&E==0?k?j:v:"")+(/all|right/.test(B)&&E==0?k?v:j:"")+this._generateMonthYearHeader(b,o,t,s,r,E>0||M>0,C,A)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var G=p?'<th class="ui-datepicker-week-col">'+this._get(b,"weekHeader")+"</th>":"";for(B=0;B<7;B++){var z=(B+m)%7;G+="<th"+((B+m+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+w[z]+'">'+x[z]+"</span></th>"}F+=
+G+"</tr></thead><tbody>";G=this._getDaysInMonth(t,o);if(t==b.selectedYear&&o==b.selectedMonth)b.selectedDay=Math.min(b.selectedDay,G);B=(this._getFirstDayOfMonth(t,o)-m+7)%7;G=Math.ceil((B+G)/7);this.maxRows=G=q?this.maxRows>G?this.maxRows:G:G;z=this._daylightSavingAdjust(new Date(t,o,1-B));for(var Q=0;Q<G;Q++){F+="<tr>";var R=!p?"":'<td class="ui-datepicker-week-col">'+this._get(b,"calculateWeek")(z)+"</td>";for(B=0;B<7;B++){var N=y?y.apply(b.input?b.input[0]:null,[z]):[true,""],L=z.getMonth()!=
+o,O=L&&!J||!N[0]||s&&z<s||r&&z>r;R+='<td class="'+((B+m+6)%7>=5?" ui-datepicker-week-end":"")+(L?" ui-datepicker-other-month":"")+(z.getTime()==P.getTime()&&o==b.selectedMonth&&b._keyEvent||I.getTime()==z.getTime()&&I.getTime()==P.getTime()?" "+this._dayOverClass:"")+(O?" "+this._unselectableClass+" ui-state-disabled":"")+(L&&!D?"":" "+N[1]+(z.getTime()==u.getTime()?" "+this._currentClass:"")+(z.getTime()==h.getTime()?" ui-datepicker-today":""))+'"'+((!L||D)&&N[2]?' title="'+N[2]+'"':"")+(O?"":' onclick="DP_jQuery_'+
+f+".datepicker._selectDay('#"+b.id+"',"+z.getMonth()+","+z.getFullYear()+', this);return false;"')+">"+(L&&!D?"&#xa0;":O?'<span class="ui-state-default">'+z.getDate()+"</span>":'<a class="ui-state-default'+(z.getTime()==h.getTime()?" ui-state-highlight":"")+(z.getTime()==u.getTime()?" ui-state-active":"")+(L?" ui-priority-secondary":"")+'" href="#">'+z.getDate()+"</a>")+"</td>";z.setDate(z.getDate()+1);z=this._daylightSavingAdjust(z)}F+=R+"</tr>"}o++;if(o>11){o=0;t++}F+="</tbody></table>"+(q?"</div>"+
+(n[0]>0&&M==n[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");K+=F}H+=K}H+=l+(a.browser.msie&&parseInt(a.browser.version,10)<7&&!b.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':"");b._keyEvent=false;return H},_generateMonthYearHeader:function(b,h,k,l,j,m,n,o){var p=this._get(b,"changeMonth"),q=this._get(b,"changeYear"),u=this._get(b,"showMonthAfterYear"),s='<div class="ui-datepicker-title">',r="";if(m||!p)r+='<span class="ui-datepicker-month">'+
+n[h]+"</span>";else{n=l&&l.getFullYear()==k;var t=j&&j.getFullYear()==k;r+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+f+".datepicker._selectMonthYear('#"+b.id+"', this, 'M');\" >";for(var v=0;v<12;v++)if((!n||v>=l.getMonth())&&(!t||v<=j.getMonth()))r+='<option value="'+v+'"'+(v==h?' selected="selected"':"")+">"+o[v]+"</option>";r+="</select>"}u||(s+=r+(m||!(p&&q)?"&#xa0;":""));if(!b.yearshtml){b.yearshtml="";if(m||!q)s+='<span class="ui-datepicker-year">'+k+"</span>";else{o=this._get(b,
+"yearRange").split(":");var w=(new Date).getFullYear();n=function(x){x=x.match(/c[+-].*/)?k+parseInt(x.substring(1),10):x.match(/[+-].*/)?w+parseInt(x,10):parseInt(x,10);return isNaN(x)?w:x};h=n(o[0]);o=Math.max(h,n(o[1]||""));h=l?Math.max(h,l.getFullYear()):h;o=j?Math.min(o,j.getFullYear()):o;for(b.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+f+".datepicker._selectMonthYear('#"+b.id+"', this, 'Y');\" >";h<=o;h++)b.yearshtml+='<option value="'+h+'"'+(h==k?' selected="selected"':
+"")+">"+h+"</option>";b.yearshtml+="</select>";s+=b.yearshtml;b.yearshtml=null}}s+=this._get(b,"yearSuffix");if(u)s+=(m||!(p&&q)?"&#xa0;":"")+r;s+="</div>";return s},_adjustInstDate:function(b,h,k){var l=b.drawYear+(k=="Y"?h:0),j=b.drawMonth+(k=="M"?h:0);h=Math.min(b.selectedDay,this._getDaysInMonth(l,j))+(k=="D"?h:0);l=this._restrictMinMax(b,this._daylightSavingAdjust(new Date(l,j,h)));b.selectedDay=l.getDate();b.drawMonth=b.selectedMonth=l.getMonth();b.drawYear=b.selectedYear=l.getFullYear();if(k==
+"M"||k=="Y")this._notifyChange(b)},_restrictMinMax:function(b,h){var k=this._getMinMaxDate(b,"min"),l=this._getMinMaxDate(b,"max");k=k&&h<k?k:h;return l&&k>l?l:k},_notifyChange:function(b){var h=this._get(b,"onChangeMonthYear");if(h)h.apply(b.input?b.input[0]:null,[b.selectedYear,b.selectedMonth+1,b])},_getNumberOfMonths:function(b){b=this._get(b,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(b,h){return this._determineDate(b,this._get(b,h+"Date"),null)},
+_getDaysInMonth:function(b,h){return 32-this._daylightSavingAdjust(new Date(b,h,32)).getDate()},_getFirstDayOfMonth:function(b,h){return(new Date(b,h,1)).getDay()},_canAdjustMonth:function(b,h,k,l){var j=this._getNumberOfMonths(b);k=this._daylightSavingAdjust(new Date(k,l+(h<0?h:j[0]*j[1]),1));h<0&&k.setDate(this._getDaysInMonth(k.getFullYear(),k.getMonth()));return this._isInRange(b,k)},_isInRange:function(b,h){var k=this._getMinMaxDate(b,"min"),l=this._getMinMaxDate(b,"max");return(!k||h.getTime()>=
+k.getTime())&&(!l||h.getTime()<=l.getTime())},_getFormatConfig:function(b){var h=this._get(b,"shortYearCutoff");h=typeof h!="string"?h:(new Date).getFullYear()%100+parseInt(h,10);return{shortYearCutoff:h,dayNamesShort:this._get(b,"dayNamesShort"),dayNames:this._get(b,"dayNames"),monthNamesShort:this._get(b,"monthNamesShort"),monthNames:this._get(b,"monthNames")}},_formatDate:function(b,h,k,l){if(!h){b.currentDay=b.selectedDay;b.currentMonth=b.selectedMonth;b.currentYear=b.selectedYear}h=h?typeof h==
+"object"?h:this._daylightSavingAdjust(new Date(l,k,h)):this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay));return this.formatDate(this._get(b,"dateFormat"),h,this._getFormatConfig(b))}});a.fn.datepicker=function(b){if(!this.length)return this;if(!a.datepicker.initialized){a(document).mousedown(a.datepicker._checkExternalClick).find("body").append(a.datepicker.dpDiv);a.datepicker.initialized=true}var h=Array.prototype.slice.call(arguments,1);if(typeof b=="string"&&(b=="isDisabled"||
+b=="getDate"||b=="widget"))return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(h));if(b=="option"&&arguments.length==2&&typeof arguments[1]=="string")return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(h));return this.each(function(){typeof b=="string"?a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this].concat(h)):a.datepicker._attachDatepicker(this,b)})};a.datepicker=new d;a.datepicker.initialized=false;a.datepicker.uuid=(new Date).getTime();
+a.datepicker.version="1.9pre";window["DP_jQuery_"+f]=a})(jQuery);
+(function(a,g){var d={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},c={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true};a.widget("ui.dialog",{version:"1.9pre",options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var f=a(this).css(e).offset().top;
+f<0&&a(this).css("top",e.top-f)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var e=this,f=e.options,i=f.title||"&#160;",b=a.ui.dialog.getTitleId(e.element),h=(e.uiDialog=a("<div>")).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+f.dialogClass).css({display:"none",outline:0,zIndex:f.zIndex}).attr("tabIndex",
+-1).keydown(function(j){if(f.closeOnEscape&&!j.isDefaultPrevented()&&j.keyCode&&j.keyCode===a.ui.keyCode.ESCAPE){e.close(j);j.preventDefault()}}).attr({role:"dialog","aria-labelledby":b}).mousedown(function(j){e.moveToTop(false,j)}).appendTo("body");e.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(h);var k=(e.uiDialogTitlebar=a("<div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(h),l=a("<a href='#'></a>").addClass("ui-dialog-titlebar-close ui-corner-all").attr("role",
+"button").click(function(j){j.preventDefault();e.close(j)}).appendTo(k);(e.uiDialogTitlebarCloseText=a("<span>")).addClass("ui-icon ui-icon-closethick").text(f.closeText).appendTo(l);a("<span>").addClass("ui-dialog-title").attr("id",b).html(i).prependTo(k);k.find("*").add(k).disableSelection();this._hoverable(l);this._focusable(l);f.draggable&&a.fn.draggable&&e._makeDraggable();f.resizable&&a.fn.resizable&&e._makeResizable();e._createButtons(f.buttons);e._isOpen=false;a.fn.bgiframe&&h.bgiframe()},
+_init:function(){this.options.autoOpen&&this.open()},_destroy:function(){this.overlay&&this.overlay.destroy();this.uiDialog.hide();this.element.removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");this.uiDialog.remove();this.originalTitle&&this.element.attr("title",this.originalTitle)},widget:function(){return this.uiDialog},close:function(e){if(!this._isOpen)return f;var f=this,i,b;if(false!==f._trigger("beforeClose",e)){f._isOpen=false;f.overlay&&f.overlay.destroy();f.uiDialog.unbind("keypress.ui-dialog");
+if(f.options.hide)f.uiDialog.hide(f.options.hide,function(){f._trigger("close",e)});else{f.uiDialog.hide();f._trigger("close",e)}a.ui.dialog.overlay.resize();if(f.options.modal){i=0;a(".ui-dialog").each(function(){if(this!==f.uiDialog[0]){b=a(this).css("z-index");isNaN(b)||(i=Math.max(i,b))}});a.ui.dialog.maxZ=i}return f}},isOpen:function(){return this._isOpen},moveToTop:function(e,f){var i=this.options;if(i.modal&&!e||!i.stack&&!i.modal)return this._trigger("focus",f);if(i.zIndex>a.ui.dialog.maxZ)a.ui.dialog.maxZ=
+i.zIndex;if(this.overlay){a.ui.dialog.maxZ+=1;a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ;this.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ)}i={scrollTop:this.element.scrollTop(),scrollLeft:this.element.scrollLeft()};a.ui.dialog.maxZ+=1;this.uiDialog.css("z-index",a.ui.dialog.maxZ);this.element.attr(i);this._trigger("focus",f);return this},open:function(){if(!this._isOpen){var e=this.options,f=this.uiDialog;this._size();this._position(e.position);f.show(e.show);this.overlay=e.modal?new a.ui.dialog.overlay(this):
+null;this.moveToTop(true);e.modal&&f.bind("keydown.ui-dialog",function(i){if(i.keyCode===a.ui.keyCode.TAB){var b=a(":tabbable",this),h=b.filter(":first");b=b.filter(":last");if(i.target===b[0]&&!i.shiftKey){h.focus(1);return false}else if(i.target===h[0]&&i.shiftKey){b.focus(1);return false}}});e=this.element.find(":tabbable");if(!e.length){e=f.find(".ui-dialog-buttonpane :tabbable");e.length||(e=f)}e.eq(0).focus();this._isOpen=true;this._trigger("open");return this}},_createButtons:function(e){var f=
+this,i=false;f.uiDialog.find(".ui-dialog-buttonpane").remove();typeof e==="object"&&e!==null&&a.each(e,function(){return!(i=true)});if(i){var b=a("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),h=a("<div>").addClass("ui-dialog-buttonset").appendTo(b);a.each(e,function(k,l){l=a.isFunction(l)?{click:l,text:k}:l;var j=a("<button type='button'>").attr(l,true).unbind("click").click(function(){l.click.apply(f.element[0],arguments)}).appendTo(h);a.fn.button&&j.button()});
+f.uiDialog.addClass("ui-dialog-buttons");b.appendTo(f.uiDialog)}else f.uiDialog.removeClass("ui-dialog-buttons")},_makeDraggable:function(){function e(h){return{position:h.position,offset:h.offset}}var f=this,i=f.options,b=a(document);f.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(h,k){a(this).addClass("ui-dialog-dragging");f._trigger("dragStart",h,e(k))},drag:function(h,k){f._trigger("drag",h,e(k))},
+stop:function(h,k){i.position=[k.position.left-b.scrollLeft(),k.position.top-b.scrollTop()];a(this).removeClass("ui-dialog-dragging");f._trigger("dragStop",h,e(k));a.ui.dialog.overlay.resize()}})},_makeResizable:function(e){function f(k){return{originalPosition:k.originalPosition,originalSize:k.originalSize,position:k.position,size:k.size}}e=e===g?this.options.resizable:e;var i=this,b=i.options,h=i.uiDialog.css("position");e=typeof e==="string"?e:"n,e,s,w,se,sw,ne,nw";i.uiDialog.resizable({cancel:".ui-dialog-content",
+containment:"document",alsoResize:i.element,maxWidth:b.maxWidth,maxHeight:b.maxHeight,minWidth:b.minWidth,minHeight:i._minHeight(),handles:e,start:function(k,l){a(this).addClass("ui-dialog-resizing");i._trigger("resizeStart",k,f(l))},resize:function(k,l){i._trigger("resize",k,f(l))},stop:function(k,l){a(this).removeClass("ui-dialog-resizing");b.height=a(this).height();b.width=a(this).width();i._trigger("resizeStop",k,f(l));a.ui.dialog.overlay.resize()}}).css("position",h).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},
+_minHeight:function(){var e=this.options;return e.height==="auto"?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(e){var f=[],i=[0,0],b;if(e){if(typeof e==="string"||typeof e==="object"&&"0"in e){f=e.split?e.split(" "):[e[0],e[1]];if(f.length===1)f[1]=f[0];a.each(["left","top"],function(h,k){if(+f[h]===f[h]){i[h]=f[h];f[h]=k}});e={my:f.join(" "),at:f.join(" "),offset:i.join(" ")}}e=a.extend({},a.ui.dialog.prototype.options.position,e)}else e=a.ui.dialog.prototype.options.position;(b=
+this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.position(e);b||this.uiDialog.hide()},_setOptions:function(e){var f=this,i={},b=false;a.each(e,function(h,k){f._setOption(h,k);if(h in d)b=true;if(h in c)i[h]=k});b&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",i)},_setOption:function(e,f){var i=this.uiDialog;switch(e){case "buttons":this._createButtons(f);break;case "closeText":this.uiDialogTitlebarCloseText.text(""+f);break;case "dialogClass":i.removeClass(this.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
+f);break;case "disabled":f?i.addClass("ui-dialog-disabled"):i.removeClass("ui-dialog-disabled");break;case "draggable":var b=i.is(":data(draggable)");b&&!f&&i.draggable("destroy");!b&&f&&this._makeDraggable();break;case "position":this._position(f);break;case "resizable":(b=i.is(":data(resizable)"))&&!f&&i.resizable("destroy");b&&typeof f==="string"&&i.resizable("option","handles",f);!b&&f!==false&&this._makeResizable(f);break;case "title":a(".ui-dialog-title",this.uiDialogTitlebar).html(""+(f||"&#160;"))}this._super("_setOption",
+e,f)},_size:function(){var e=this.options,f,i,b=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(e.minWidth>e.width)e.width=e.minWidth;f=this.uiDialog.css({height:"auto",width:e.width}).height();i=Math.max(0,e.minHeight-f);if(e.height==="auto")if(a.support.minHeight)this.element.css({minHeight:i,height:"auto"});else{this.uiDialog.show();e=this.element.css("height","auto").height();b||this.uiDialog.hide();this.element.height(Math.max(e,i))}else this.element.height(Math.max(e.height-
+f,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});a.extend(a.ui.dialog,{uuid:0,maxZ:0,getTitleId:function(e){e=e.attr("id");if(!e){this.uuid+=1;e=this.uuid}return"ui-dialog-title-"+e},overlay:function(e){this.$el=a.ui.dialog.overlay.create(e)}});a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(e){return e+".dialog-overlay"}).join(" "),create:function(e){if(this.instances.length===
+0){setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(i){if(a(i.target).zIndex()<a.ui.dialog.overlay.maxZ)return false})},1);a(document).bind("keydown.dialog-overlay",function(i){if(e.options.closeOnEscape&&!i.isDefaultPrevented()&&i.keyCode&&i.keyCode===a.ui.keyCode.ESCAPE){e.close(i);i.preventDefault()}});a(window).bind("resize.dialog-overlay",a.ui.dialog.overlay.resize)}var f=(this.oldInstances.pop()||a("<div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
+height:this.height()});a.fn.bgiframe&&f.bgiframe();this.instances.push(f);return f},destroy:function(e){var f=a.inArray(e,this.instances);f!==-1&&this.oldInstances.push(this.instances.splice(f,1)[0]);this.instances.length===0&&a([document,window]).unbind(".dialog-overlay");e.height(0).width(0).remove();var i=0;a.each(this.instances,function(){i=Math.max(i,this.css("z-index"))});this.maxZ=i},height:function(){var e,f;if(a.browser.msie){e=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
+f=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return e<f?a(window).height()+"px":e+"px"}else return a(document).height()+"px"},width:function(){var e,f;if(a.browser.msie){e=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);f=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return e<f?a(window).width()+"px":e+"px"}else return a(document).width()+"px"},resize:function(){var e=a([]);a.each(a.ui.dialog.overlay.instances,function(){e=
+e.add(this)});e.css({width:0,height:0}).css({width:a.ui.dialog.overlay.width(),height:a.ui.dialog.overlay.height()})}});a.extend(a.ui.dialog.overlay.prototype,{destroy:function(){a.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
+(function(a){var g=0;a.widget("ui.menu",{version:"1.9pre",defaultElement:"<ul>",delay:150,options:{items:"ul",position:{my:"left top",at:"right top"}},_create:function(){this.activeMenu=this.element;this.isScrolling=false;this.menuId=this.element.attr("id")||"ui-menu-"+g++;this.element.find(".ui-icon").length&&this.element.addClass("ui-menu-icons");this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({id:this.menuId,role:"menu"}).bind("click.menu",a.proxy(function(d){this.options.disabled&&
+d.preventDefault()},this));this._bind({"click .ui-menu-item:has(a)":function(d){d.stopImmediatePropagation();var c=a(d.currentTarget);if(!this.active||this.active[0]!==c[0])this.focus(d,c);this.select(d)},"mouseover .ui-menu-item":function(d){d.stopImmediatePropagation();if(!this.isScrolling){var c=a(d.currentTarget);c.siblings().children(".ui-state-active").removeClass("ui-state-active");this.focus(d,c)}this.isScrolling=false},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll","mouseout .ui-menu-item":"blur",
+focus:function(d){this.focus(d,a(d.target).children(".ui-menu-item:first"))},blur:function(d){this._delay(function(){a.contains(this.element[0],document.activeElement)||this.collapseAll(d)},0)},scroll:function(){this.isScrolling=true}});this.refresh();this.element.attr("tabIndex",0);this._bind({keydown:function(d){switch(d.keyCode){case a.ui.keyCode.PAGE_UP:this.previousPage(d);d.preventDefault();d.stopImmediatePropagation();break;case a.ui.keyCode.PAGE_DOWN:this.nextPage(d);d.preventDefault();d.stopImmediatePropagation();
+break;case a.ui.keyCode.HOME:this._move("first","first",d);d.preventDefault();d.stopImmediatePropagation();break;case a.ui.keyCode.END:this._move("last","last",d);d.preventDefault();d.stopImmediatePropagation();break;case a.ui.keyCode.UP:this.previous(d);d.preventDefault();d.stopImmediatePropagation();break;case a.ui.keyCode.DOWN:this.next(d);d.preventDefault();d.stopImmediatePropagation();break;case a.ui.keyCode.LEFT:this.collapse(d)&&d.stopImmediatePropagation();d.preventDefault();break;case a.ui.keyCode.RIGHT:this.expand(d)&&
+d.stopImmediatePropagation();d.preventDefault();break;case a.ui.keyCode.ENTER:if(this.active.children("a[aria-haspopup='true']").length)this.expand(d)&&d.stopImmediatePropagation();else{this.select(d);d.stopImmediatePropagation()}d.preventDefault();break;case a.ui.keyCode.ESCAPE:this.collapse(d)&&d.stopImmediatePropagation();d.preventDefault();break;default:d.stopPropagation();clearTimeout(this.filterTimer);var c;c=this.previousFilter||"";var e=String.fromCharCode(d.keyCode),f=false;if(e==c)f=true;
+else e=c+e;var i=function(b){return b.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")};c=this.activeMenu.children(".ui-menu-item").filter(function(){return RegExp("^"+i(e),"i").test(a(this).children("a").text())});c=f&&c.index(this.active.next())!=-1?this.active.nextAll(".ui-menu-item"):c;if(!c.length){e=String.fromCharCode(d.keyCode);c=this.activeMenu.children(".ui-menu-item").filter(function(){return RegExp("^"+i(e),"i").test(a(this).children("a").text())})}if(c.length){this.focus(d,c);if(c.length>1){this.previousFilter=
+e;this.filterTimer=this._delay(function(){delete this.previousFilter},1E3)}else delete this.previousFilter}else delete this.previousFilter}}});this._bind(document,{click:function(d){a(d.target).closest(".ui-menu").length||this.collapseAll(d)}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").andSelf().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").show();
+this.element.find(".ui-menu-item").unbind(".menu").removeClass("ui-menu-item").removeAttr("role").children("a").removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").removeAttr("id").children(".ui-icon").remove()},refresh:function(){var d=this.element.find(this.options.items+":not( .ui-menu )").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr("role","menu").hide().attr("aria-hidden","true").attr("aria-expanded","false"),
+c=this.menuId;d.add(this.element).children(":not( .ui-menu-item ):has( a )").addClass("ui-menu-item").attr("role","presentation").children("a").addClass("ui-corner-all").attr("tabIndex",-1).attr("role","menuitem").attr("id",function(e){return c+"-"+e});d.each(function(){var e=a(this),f=e.prev("a");f.attr("aria-haspopup","true").prepend('<span class="ui-menu-icon ui-icon ui-icon-carat-1-e"></span>');e.attr("aria-labelledby",f.attr("id"))})},focus:function(d,c){this.blur(d);if(this._hasScroll()){var e=
+parseFloat(a.curCSS(this.activeMenu[0],"borderTopWidth",true))||0,f=parseFloat(a.curCSS(this.activeMenu[0],"paddingTop",true))||0;e=c.offset().top-this.activeMenu.offset().top-e-f;f=this.activeMenu.scrollTop();var i=this.activeMenu.height(),b=c.height();if(e<0)this.activeMenu.scrollTop(f+e);else e+b>i&&this.activeMenu.scrollTop(f+e-i+b)}this.active=c.first().children("a").addClass("ui-state-focus").end();this.element.attr("aria-activedescendant",this.active.children("a").attr("id"));this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active");
+this.timer=this._delay(function(){this._close()},this.delay);e=a("> .ui-menu",c);e.length&&/^mouse/.test(d.type)&&this._startOpening(e);this.activeMenu=c.parent();this._trigger("focus",d,{item:c})},blur:function(d){if(this.active){clearTimeout(this.timer);this.active.children("a").removeClass("ui-state-focus");this.active=null;this._trigger("blur",d,{item:this.active})}},_startOpening:function(d){clearTimeout(this.timer);if(d.attr("aria-hidden")==="true")this.timer=this._delay(function(){this._close();
+this._open(d)},this.delay)},_open:function(d){clearTimeout(this.timer);this.element.find(".ui-menu").not(d.parents()).hide().attr("aria-hidden","true");var c=a.extend({},{of:this.active},a.type(this.options.position)=="function"?this.options.position(this.active):this.options.position);d.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(c)},collapseAll:function(d,c){var e=c?this.element:a(d&&d.target).closest(this.element.find(".ui-menu"));if(!e.length)e=this.element;this._close(e);
+this.blur(d);this.activeMenu=e},_close:function(d){d||(d=this.active?this.active.parent():this.element);d.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(d){var c=this.active&&this.active.parent().closest(".ui-menu-item",this.element);if(c&&c.length){this._close();this.focus(d,c);return true}},expand:function(d){var c=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();
+if(c&&c.length){this._open(c.parent());this._delay(function(){this.focus(d,c)},20);return true}},next:function(d){this._move("next","first",d)},previous:function(d){this._move("prev","last",d)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(d,c,e){if(this.active){d=d==="first"||d==="last"?this.active[d==="first"?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[d+
+"All"](".ui-menu-item").eq(0);d.length?this.focus(e,d):this.focus(e,this.activeMenu.children(".ui-menu-item")[c]())}else this.focus(e,this.activeMenu.children(".ui-menu-item")[c]())},nextPage:function(d){if(this._hasScroll())if(this.active){if(!this.last()){var c=this.active.offset().top,e=this.element.height(),f;this.active.nextAll(".ui-menu-item").each(function(){f=a(this);return a(this).offset().top-c-e<0});this.focus(d,f)}}else this.focus(d,this.activeMenu.children(".ui-menu-item").first());else this.focus(d,
+this.activeMenu.children(".ui-menu-item")[!this.active?"first":"last"]())},previousPage:function(d){if(this._hasScroll())if(this.active){if(!this.first()){var c=this.active.offset().top,e=this.element.height(),f;this.active.prevAll(".ui-menu-item").each(function(){f=a(this);return a(this).offset().top-c+e>0});this.focus(d,f)}}else this.focus(d,this.activeMenu.children(".ui-menu-item").first());else this.focus(d,this.activeMenu.children(".ui-menu-item").first())},_hasScroll:function(){return this.element.height()<
+this.element.prop("scrollHeight")},select:function(d){var c={item:this.active};this.collapseAll(d,true);this._trigger("select",d,c)}})})(jQuery);
+(function(a){a.widget("ui.menubar",{version:"1.9pre",options:{autoExpand:false,buttons:false,menuIcon:false,position:{my:"left top",at:"left bottom"}},_create:function(){var g=this,d=this.items=this.element.children("li").addClass("ui-menubar-item").attr("role","presentation").children("button, a");d.slice(1).attr("tabIndex",-1);this.element.addClass("ui-menubar ui-widget-header ui-helper-clearfix").attr("role","menubar");this._focusable(d);this._hoverable(d);d.next("ul").menu({position:{within:this.options.position.within},
+select:function(c,e){e.item.parents("ul.ui-menu:last").hide();g._close();a(c.target).prev().focus();g._trigger("select",c,e)}}).hide().attr({"aria-hidden":"true","aria-expanded":"false"}).bind("keydown.menubar",function(c){if(!a(this).is(":hidden"))switch(c.keyCode){case a.ui.keyCode.LEFT:g._left(c);c.preventDefault();break;case a.ui.keyCode.RIGHT:g._right(c);c.preventDefault()}});d.each(function(){var c=a(this),e=c.next("ul");c.bind("click.menubar focus.menubar mouseenter.menubar",function(f){if(!(f.type==
+"focus"&&!f.originalEvent)){f.preventDefault();if(f.type=="click"&&e.is(":visible")&&g.active&&g.active[0]==e[0])g._close();else if(g.open&&f.type=="mouseenter"||f.type=="click"||g.options.autoExpand){g.options.autoExpand&&clearTimeout(g.closeTimer);g._open(f,e)}}}).bind("keydown",function(f){switch(f.keyCode){case a.ui.keyCode.SPACE:case a.ui.keyCode.UP:case a.ui.keyCode.DOWN:g._open(f,a(this).next());f.preventDefault();break;case a.ui.keyCode.LEFT:g._prev(f,a(this));f.preventDefault();break;case a.ui.keyCode.RIGHT:g._next(f,
+a(this));f.preventDefault()}}).addClass("ui-button ui-widget ui-button-text-only ui-menubar-link").attr("role","menuitem").attr("aria-haspopup","true").wrapInner("<span class='ui-button-text'></span>");if(g.options.menuIcon){c.addClass("ui-state-default").append("<span class='ui-button-icon-secondary ui-icon ui-icon-triangle-1-s'></span>");c.removeClass("ui-button-text-only").addClass("ui-button-text-icon-secondary")}g.options.buttons||c.addClass("ui-menubar-link").removeClass("ui-state-default")});
+g._bind({keydown:function(c){if(c.keyCode==a.ui.keyCode.ESCAPE&&g.active&&g.active.menu("collapse",c)!==true){var e=g.active;g.active.blur();g._close(c);e.prev().focus()}},focusin:function(){clearTimeout(g.closeTimer)},focusout:function(c){g.closeTimer=setTimeout(function(){g._close(c)},150)},"mouseleave .ui-menubar-item":function(c){if(g.options.autoExpand)g.closeTimer=setTimeout(function(){g._close(c)},150)},"mouseenter .ui-menubar-item":function(){clearTimeout(g.closeTimer)}})},_destroy:function(){var g=
+this.element.children("li").removeClass("ui-menubar-item").removeAttr("role").children("button, a");this.element.removeClass("ui-menubar ui-widget-header ui-helper-clearfix").removeAttr("role").unbind(".menubar");g.unbind(".menubar").removeClass("ui-button ui-widget ui-button-text-only ui-menubar-link ui-state-default").removeAttr("role").removeAttr("aria-haspopup").children("span.ui-button-text").each(function(){var d=a(this);d.parent().html(d.html())}).end().children(".ui-icon").remove();this.element.find(":ui-menu").menu("destroy").show().removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("tabindex").unbind(".menubar")},
+_close:function(){if(this.active&&this.active.length){this.active.menu("collapseAll").hide().attr({"aria-hidden":"true","aria-expanded":"false"});this.active.prev().removeClass("ui-state-active").removeAttr("tabIndex");this.active=null;this.open=false}},_open:function(g,d){if(!(this.active&&this.active[0]==d[0])){if(this.active){this.active.menu("collapseAll").hide().attr({"aria-hidden":"true","aria-expanded":"false"});this.active.prev().removeClass("ui-state-active")}var c=d.prev().addClass("ui-state-active").attr("tabIndex",
+-1);this.active=d.show().position(a.extend({of:c},this.options.position)).removeAttr("aria-hidden").attr("aria-expanded","true").menu("focus",g,d.children("li").first()).focus().focusin();this.open=true}},_prev:function(g,d){d.attr("tabIndex",-1);var c=d.parent().prevAll("li").children(".ui-button").eq(0);c.length?c.removeAttr("tabIndex")[0].focus():this.element.children("li:last").children(".ui-button:last").removeAttr("tabIndex")[0].focus()},_next:function(g,d){d.attr("tabIndex",-1);var c=d.parent().nextAll("li").children(".ui-button").eq(0);
+c.length?c.removeAttr("tabIndex")[0].focus():this.element.children("li:first").children(".ui-button:first").removeAttr("tabIndex")[0].focus()},_left:function(g){var d=this.active.parent().prevAll("li:eq(0)").children(".ui-menu").eq(0);d.length||(d=this.element.children("li:last").children(".ui-menu:first"));this._open(g,d)},_right:function(g){var d=this.active.parent().nextAll("li:eq(0)").children(".ui-menu").eq(0);d.length||(d=this.element.children("li:first").children(".ui-menu:first"));this._open(g,
+d)}})})(jQuery);
+(function(a){var g=0;a.widget("ui.popup",{version:"1.9pre",options:{position:{my:"left top",at:"left bottom"},show:{effect:"slideDown",duration:"fast"},hide:{effect:"fadeOut",duration:"fast"}},_create:function(){if(!this.options.trigger)this.options.trigger=this.element.prev();if(!this.element.attr("id")){this.element.attr("id","ui-popup-"+g++);this.generatedId=true}if(!this.element.attr("role")){this.element.attr("role","dialog");this.generatedRole=true}this.options.trigger.attr("aria-haspopup","true").attr("aria-owns",
+this.element.attr("id"));this.element.addClass("ui-popup");this._beforeClose();this.element.hide();this._bind(this.options.trigger,{keydown:function(d){a.ui.button&&this.options.trigger.is("a:ui-button")&&d.keyCode==a.ui.keyCode.SPACE&&d.preventDefault();d.keyCode==a.ui.keyCode.SPACE&&this.options.trigger.is("a:not(:ui-button)")&&this.options.trigger.trigger("click",d);if(d.keyCode==a.ui.keyCode.DOWN){d.preventDefault();this.options.trigger.trigger("click",d)}},click:function(d){d.preventDefault();
+if(!this.isOpen){clearTimeout(this.closeTimer);this._delay(function(){this.open(d)},1)}}});if(!a.ui.menu||!this.element.is(":ui-menu"))this._bind({keydown:function(d){if(d.keyCode===a.ui.keyCode.TAB){var c=a(":tabbable",this.element),e=c.first();c=c.last();if(d.target===c[0]&&!d.shiftKey){e.focus(1);d.preventDefault()}else if(d.target===e[0]&&d.shiftKey){c.focus(1);d.preventDefault()}}}});this._bind({keyup:function(d){if(d.keyCode==a.ui.keyCode.ESCAPE&&this.element.is(":visible")){this.close(d);this.options.trigger.focus()}}});
+this._bind(document,{click:function(d){this.isOpen&&!a(d.target).closest(".ui-popup").length&&this.close(d)}})},_destroy:function(){this.element.show().removeClass("ui-popup").removeAttr("aria-hidden").removeAttr("aria-expanded").unbind("keypress.ui-popup");this.options.trigger.removeAttr("aria-haspopup").removeAttr("aria-owns");this.generatedId&&this.element.removeAttr("id");this.generatedRole&&this.element.removeAttr("role")},open:function(d){var c=a.extend({},{of:this.options.trigger},this.options.position);
+this._show(this.element,this.options.show);this.element.attr("aria-hidden","false").attr("aria-expanded","true").position(c);if(a.ui.menu&&this.element.is(":ui-menu")){this.element.menu("focus",d,this.element.children("li").first());this.element.focus()}else{c=this.element.find(":tabbable");this.removeTabIndex=false;if(!c.length){if(!this.element.is(":tabbable")){this.element.attr("tabindex","0");this.removeTabIndex=true}c=c.add(this.element[0])}c.first().focus(1)}this.options.trigger.attr("tabindex",
+-1);this.isOpen=true;this._trigger("open",d)},close:function(d){this._beforeClose();this._hide(this.element,this.options.hide);this.options.trigger.attr("tabindex",0);this.removeTabIndex&&this.element.removeAttr("tabindex");this.isOpen=false;this._trigger("close",d)},_beforeClose:function(){this.element.attr("aria-hidden","true").attr("aria-expanded","false")}})})(jQuery);
+(function(a,g){a.ui=a.ui||{};var d=/left|center|right/,c=/top|center|bottom/,e=/[+-]\d+%?/,f=/^\w+/,i=/%$/,b=a.fn.position;a.position={scrollbarWidth:function(){var h,k,l=a("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>");k=l.children()[0];a("body").append(l);h=k.offsetWidth;l.css("overflow","scroll");k=k.offsetWidth;if(h===k)k=l[0].clientWidth;l.remove();return h-k},getScrollInfo:function(h){var k=h[0]!==window,l=k?h.css("overflow-x"):
+"";k=k?h.css("overflow-y"):"";l=l==="auto"||l==="scroll"?a.position.scrollbarWidth():0;k=k==="auto"||k==="scroll"?a.position.scrollbarWidth():0;return{height:h.height()<h[0].scrollHeight?k:0,width:h.width()<h[0].scrollWidth?l:0}}};a.fn.position=function(h){if(!h||!h.of)return b.apply(this,arguments);h=a.extend({},h);var k=a(h.of),l=a(h.within||window),j=k[0],m=(h.collision||"flip").split(" "),n={},o,p,q,u;if(j.nodeType===9){p=k.width();q=k.height();u={top:0,left:0}}else if(a.isWindow(j)){p=k.width();
+q=k.height();u={top:k.scrollTop(),left:k.scrollLeft()}}else if(j.preventDefault){h.at="left top";p=q=0;u={top:h.of.pageY,left:h.of.pageX}}else{p=k.outerWidth();q=k.outerHeight();u=k.offset()}a.each(["my","at"],function(){var s=(h[this]||"").split(" "),r,t;if(s.length===1)s=d.test(s[0])?s.concat(["center"]):c.test(s[0])?["center"].concat(s):["center","center"];s[0]=d.test(s[0])?s[0]:"center";s[1]=c.test(s[1])?s[1]:"center";r=e.exec(s[0]);t=e.exec(s[1]);n[this]=[r?r[0]:0,t?t[0]:0];h[this]=[f.exec(s[0])[0],
+f.exec(s[1])[0]]});if(m.length===1)m[1]=m[0];if(h.at[0]==="right")u.left+=p;else if(h.at[0]==="center")u.left+=p/2;if(h.at[1]==="bottom")u.top+=q;else if(h.at[1]==="center")u.top+=q/2;o=[parseInt(n.at[0],10)*(i.test(n.at[0])?p/100:1),parseInt(n.at[1],10)*(i.test(n.at[1])?q/100:1)];u.left+=o[0];u.top+=o[1];return this.each(function(){var s=a(this),r=s.outerWidth(),t=s.outerHeight(),v=parseInt(a.curCSS(this,"marginLeft",true))||0,w=parseInt(a.curCSS(this,"marginTop",true))||0,x=a.position.getScrollInfo(l),
+C=r+v+(parseInt(a.curCSS(this,"marginRight",true))||0)+x.width,A=t+w+(parseInt(a.curCSS(this,"marginBottom",true))||0)+x.height,y=a.extend({},u),D=[parseInt(n.my[0],10)*(i.test(n.my[0])?s.outerWidth()/100:1),parseInt(n.my[1],10)*(i.test(n.my[1])?s.outerHeight()/100:1)],J;if(h.my[0]==="right")y.left-=r;else if(h.my[0]==="center")y.left-=r/2;if(h.my[1]==="bottom")y.top-=t;else if(h.my[1]==="center")y.top-=t/2;y.left+=D[0];y.top+=D[1];J={marginLeft:v,marginTop:w};a.each(["left","top"],function(I,H){if(a.ui.position[m[I]])a.ui.position[m[I]][H](y,
+{targetWidth:p,targetHeight:q,elemWidth:r,elemHeight:t,collisionPosition:J,collisionWidth:C,collisionHeight:A,offset:[o[0]+D[0],o[1]+D[1]],my:h.my,at:h.at,within:l,elem:s})});a.fn.bgiframe&&s.bgiframe();s.offset(a.extend(y,{using:h.using}))})};a.ui.position={fit:{left:function(h,k){var l=k.within,j=a(window),m=a.isWindow(k.within[0]),n=m?j.scrollLeft():l.offset().left;j=m?j.width():l.outerWidth();m=h.left-k.collisionPosition.marginLeft;l=n-m;var o=m+k.collisionWidth-j-n;if(k.collisionWidth>j)if(l>
+0&&o<=0){n=h.left+l+k.collisionWidth-j-n;h.left+=l-n}else h.left=o>0&&l<=0?n:l>o?n+j-k.collisionWidth:n;else if(l>0)h.left+=l;else if(o>0)h.left-=o;else h.left=Math.max(h.left-m,h.left)},top:function(h,k){var l=k.within,j=a(window),m=a.isWindow(k.within[0]),n=m?j.scrollTop():l.offset().top;j=m?j.height():l.outerHeight();m=h.top-k.collisionPosition.marginTop;l=n-m;var o=m+k.collisionHeight-j-n;if(k.collisionHeight>j)if(l>0&&o<=0){n=h.top+l+k.collisionHeight-j-n;h.top+=l-n}else h.top=o>0&&l<=0?n:l>
+o?n+j-k.collisionHeight:n;else if(l>0)h.top+=l;else if(o>0)h.top-=o;else h.top=Math.max(h.top-m,h.top)}},flip:{left:function(h,k){if(k.at[0]!=="center"){k.elem.removeClass("ui-flipped-left ui-flipped-right");var l=k.within;a(window);var j=a.isWindow(k.within[0]),m=(j?0:l.offset().left)+l.scrollLeft(),n=j?l.width():l.outerWidth();j=h.left-k.collisionPosition.marginLeft;l=j-m;var o=j+k.collisionWidth-n-m;j=k.my[0]==="left"?-k.elemWidth:k.my[0]==="right"?k.elemWidth:0;var p=k.at[0]==="left"?k.targetWidth:
+-k.targetWidth,q=-2*k.offset[0];if(l<0){m=h.left+j+p+q+k.collisionWidth-n-m;if(m<0||m<Math.abs(l)){k.elem.addClass("ui-flipped-right");h.left+=j+p+q}}else if(o>0){m=h.left-k.collisionPosition.marginLeft+j+p+q-m;if(m>0||Math.abs(m)<o){k.elem.addClass("ui-flipped-left");h.left+=j+p+q}}}},top:function(h,k){if(k.at[1]!=="center"){k.elem.removeClass("ui-flipped-top ui-flipped-bottom");var l=k.within;a(window);var j=a.isWindow(k.within[0]),m=(j?0:l.offset().top)+l.scrollTop(),n=j?l.height():l.outerHeight();
+j=h.top-k.collisionPosition.marginTop;l=j-m;var o=j+k.collisionHeight-n-m;j=k.my[1]==="top"?-k.elemHeight:k.my[1]==="bottom"?k.elemHeight:0;var p=k.at[1]==="top"?k.targetHeight:-k.targetHeight,q=-2*k.offset[1];if(l<0){m=h.top+j+p+q+k.collisionHeight-n-m;if(h.top+j+p+q>l&&(m<0||m<Math.abs(l))){k.elem.addClass("ui-flipped-bottom");h.top+=j+p+q}}else if(o>0){m=h.top-k.collisionPosition.marginTop+j+p+q-m;if(h.top+j+p+q>o&&(m>0||Math.abs(m)<o)){k.elem.addClass("ui-flipped-top");h.top+=j+p+q}}}}},flipfit:{left:function(){a.ui.position.flip.left.apply(this,
+arguments);a.ui.position.fit.left.apply(this,arguments)},top:function(){a.ui.position.flip.top.apply(this,arguments);a.ui.position.fit.top.apply(this,arguments)}}};a.uiBackCompat!==false&&function(h){var k=h.fn.position;h.fn.position=function(l){if(!l||!l.offset)return k.call(this,l);var j=l.offset.split(" "),m=l.at.split(" ");if(j.length===1)j[1]=j[0];if(/^\d/.test(j[0]))j[0]="+"+j[0];if(/^\d/.test(j[1]))j[1]="+"+j[1];if(m.length===1)if(/left|center|right/.test(m[0]))m[1]="center";else{m[1]=m[0];
+m[0]="center"}return k.call(this,h.extend(l,{at:m[0]+j[0]+" "+m[1]+j[1],offset:g}))}}(jQuery)})(jQuery);
+(function(a,g){a.widget("ui.progressbar",{version:"1.9pre",options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
+this.valueDiv.remove()},value:function(d){if(d===g)return this._value();this._setOption("value",d);return this},_setOption:function(d,c){if(d==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}this._super("_setOption",d,c)},_value:function(){var d=this.options.value;if(typeof d!=="number")d=0;return Math.min(this.options.max,Math.max(this.min,d))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var d=
+this.value(),c=this._percentage();if(this.oldValue!==d){this.oldValue=d;this._trigger("change")}this.valueDiv.toggle(d>this.min).toggleClass("ui-corner-right",d===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",d)}})})(jQuery);
+(function(a){a.widget("ui.slider",a.ui.mouse,{version:"1.9pre",widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var g=this,d=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),e=d.values&&d.values.length||1,f=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
+this.orientation+" ui-widget ui-widget-content ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":""));this.range=a([]);if(d.range){if(d.range===true){if(!d.values)d.values=[this._valueMin(),this._valueMin()];if(d.values.length&&d.values.length!==2)d.values=[d.values[0],d.values[0]]}this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:""))}for(var i=c.length;i<e;i+=1)f.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
+this.handles=c.add(a(f.join("")).appendTo(g.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(b){b.preventDefault()}).hover(function(){d.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(d.disabled)a(this).blur();else{a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(b){a(this).data("index.ui-slider-handle",
+b)});this.handles.keydown(function(b){var h=true,k=a(this).data("index.ui-slider-handle"),l,j,m;if(!g.options.disabled){switch(b.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:h=false;if(!g._keySliding){g._keySliding=true;a(this).addClass("ui-state-active");l=g._start(b,k);if(l===false)return}}m=g.options.step;l=g.options.values&&g.options.values.length?
+j=g.values(k):j=g.value();switch(b.keyCode){case a.ui.keyCode.HOME:j=g._valueMin();break;case a.ui.keyCode.END:j=g._valueMax();break;case a.ui.keyCode.PAGE_UP:j=g._trimAlignValue(l+(g._valueMax()-g._valueMin())/5);break;case a.ui.keyCode.PAGE_DOWN:j=g._trimAlignValue(l-(g._valueMax()-g._valueMin())/5);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(l===g._valueMax())return;j=g._trimAlignValue(l+m);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(l===g._valueMin())return;j=g._trimAlignValue(l-
+m)}g._slide(b,k,j);return h}}).keyup(function(b){var h=a(this).data("index.ui-slider-handle");if(g._keySliding){g._keySliding=false;g._stop(b,h);g._change(b,h);a(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
+return this},_mouseCapture:function(g){var d=this.options,c,e,f,i,b;if(d.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:g.pageX,y:g.pageY});e=this._valueMax()-this._valueMin()+1;i=this;this.handles.each(function(h){var k=Math.abs(c-i.values(h));if(e>k){e=k;f=a(this);b=h}});if(d.range===true&&this.values(1)===d.min){b+=1;f=a(this.handles[b])}if(this._start(g,b)===false)return false;
+this._mouseSliding=true;i._handleIndex=b;f.addClass("ui-state-active").focus();d=f.offset();this._clickOffset=!a(g.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:g.pageX-d.left-f.width()/2,top:g.pageY-d.top-f.height()/2-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(g,b,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(g){var d=
+this._normValueFromMouse({x:g.pageX,y:g.pageY});this._slide(g,this._handleIndex,d);return false},_mouseStop:function(g){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(g,this._handleIndex);this._change(g,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(g){var d;if(this.orientation==="horizontal"){d=
+this.elementSize.width;g=g.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{d=this.elementSize.height;g=g.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}d=g/d;if(d>1)d=1;if(d<0)d=0;if(this.orientation==="vertical")d=1-d;g=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+d*g)},_start:function(g,d){var c={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(d);
+c.values=this.values()}return this._trigger("start",g,c)},_slide:function(g,d,c){var e;if(this.options.values&&this.options.values.length){e=this.values(d?0:1);if(this.options.values.length===2&&this.options.range===true&&(d===0&&c>e||d===1&&c<e))c=e;if(c!==this.values(d)){e=this.values();e[d]=c;g=this._trigger("slide",g,{handle:this.handles[d],value:c,values:e});this.values(d?0:1);g!==false&&this.values(d,c,true)}}else if(c!==this.value()){g=this._trigger("slide",g,{handle:this.handles[d],value:c});
+g!==false&&this.value(c)}},_stop:function(g,d){var c={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(d);c.values=this.values()}this._trigger("stop",g,c)},_change:function(g,d){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(d);c.values=this.values()}this._trigger("change",g,c)}},value:function(g){if(arguments.length){this.options.value=
+this._trimAlignValue(g);this._refreshValue();this._change(null,0)}else return this._value()},values:function(g,d){var c,e,f;if(arguments.length>1){this.options.values[g]=this._trimAlignValue(d);this._refreshValue();this._change(null,g)}else if(arguments.length)if(a.isArray(arguments[0])){c=this.options.values;e=arguments[0];for(f=0;f<c.length;f+=1){c[f]=this._trimAlignValue(e[f]);this._change(null,f)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(g):
+this.value();else return this._values()},_setOption:function(g,d){var c,e=0;if(a.isArray(this.options.values))e=this.options.values.length;a.Widget.prototype._setOption.apply(this,arguments);switch(g){case "disabled":if(d){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.prop("disabled",true);this.element.addClass("ui-disabled")}else{this.handles.prop("disabled",false);this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
+this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<e;c+=1)this._change(null,c);this._animateOff=false}},_value:function(){var g=this.options.value;return g=this._trimAlignValue(g)},_values:function(g){var d,c;if(arguments.length){d=this.options.values[g];
+d=this._trimAlignValue(d)}else{d=this.options.values.slice();for(c=0;c<d.length;c+=1)d[c]=this._trimAlignValue(d[c])}return d},_trimAlignValue:function(g){if(g<=this._valueMin())return this._valueMin();if(g>=this._valueMax())return this._valueMax();var d=this.options.step>0?this.options.step:1,c=(g-this._valueMin())%d;g-=c;if(Math.abs(c)*2>=d)g+=c>0?d:-d;return parseFloat(g.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var g=
+this.options.range,d=this.options,c=this,e=!this._animateOff?d.animate:false,f,i={},b,h,k,l;if(this.options.values&&this.options.values.length)this.handles.each(function(j){f=(c.values(j)-c._valueMin())/(c._valueMax()-c._valueMin())*100;i[c.orientation==="horizontal"?"left":"bottom"]=f+"%";a(this).stop(1,1)[e?"animate":"css"](i,d.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(j===0)c.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},d.animate);if(j===1)c.range[e?"animate":"css"]({width:f-
+b+"%"},{queue:false,duration:d.animate})}else{if(j===0)c.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},d.animate);if(j===1)c.range[e?"animate":"css"]({height:f-b+"%"},{queue:false,duration:d.animate})}b=f});else{h=this.value();k=this._valueMin();l=this._valueMax();f=l!==k?(h-k)/(l-k)*100:0;i[c.orientation==="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[e?"animate":"css"](i,d.animate);if(g==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},
+d.animate);if(g==="max"&&this.orientation==="horizontal")this.range[e?"animate":"css"]({width:100-f+"%"},{queue:false,duration:d.animate});if(g==="min"&&this.orientation==="vertical")this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},d.animate);if(g==="max"&&this.orientation==="vertical")this.range[e?"animate":"css"]({height:100-f+"%"},{queue:false,duration:d.animate})}}})})(jQuery);
+(function(a){function g(d){return function(){var c=this.element.val();d.apply(this,arguments);this._refresh();c!==this.element.val()&&this._trigger("change")}}a.widget("ui.spinner",{version:"1.9pre",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,incremental:true,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._value(this.element.val(),true);this._draw();this._bind(this._events);this._refresh()},_getCreateOptions:function(){var d=
+{},c=this.element;a.each(["min","max","step"],function(e,f){var i=c.attr(f);if(i!==undefined&&i.length)d[f]=i});return d},_events:{keydown:function(d){this._start(d)&&this._keydown(d)&&d.preventDefault()},keyup:"_stop",focus:function(){this.uiSpinner.addClass("ui-state-active");this.previous=this.element.val()},blur:function(d){this._refresh();this.uiSpinner.removeClass("ui-state-active");this.previous!==this.element.val()&&this._trigger("change",d)},mousewheel:function(d,c){if(c){if(!this.spinning&&
+!this._start(d))return false;this._spin((c>0?1:-1)*this.options.step,d);clearTimeout(this.mousewheelTimer);this.mousewheelTimer=setTimeout(function(){this.spinning&&this._stop(d)},100);d.preventDefault()}},"mousedown .ui-spinner-button":function(d){d.preventDefault();document.activeElement!==this.element[0]&&this.element.focus();if(this._start(d)!==false)this._repeat(null,a(d.currentTarget).hasClass("ui-spinner-up")?1:-1,d)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(d){if(a(d.currentTarget).hasClass("ui-state-active")){if(this._start(d)===
+false)return false;this._repeat(null,a(d.currentTarget).hasClass("ui-spinner-up")?1:-1,d)}},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var d=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this._hoverable(d);this.element.attr("role","spinbutton");this.buttons=d.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all");this.buttons.height()===d.height()&&d.height()>
+0&&d.height(d.height());this.options.disabled&&this.disable()},_keydown:function(d){var c=this.options,e=a.ui.keyCode;switch(d.keyCode){case e.UP:this._repeat(null,1,d);return true;case e.DOWN:this._repeat(null,-1,d);return true;case e.PAGE_UP:this._repeat(null,c.page,d);return true;case e.PAGE_DOWN:this._repeat(null,-c.page,d);return true}return false},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-state-default ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon ui-icon-triangle-1-n'>&#9650;</span></a><a class='ui-spinner-button ui-spinner-down ui-corner-br'><span class='ui-icon ui-icon-triangle-1-s'>&#9660;</span></a>"},
+_start:function(d){if(!this.spinning&&this._trigger("start",d)===false)return false;if(!this.counter)this.counter=1;return this.spinning=true},_repeat:function(d,c,e){d=d||500;clearTimeout(this.timer);this.timer=this._delay(function(){this._repeat(40,c,e)},d);this._spin(c*this.options.step,e)},_spin:function(d,c){var e=this.value()||0;if(!this.counter)this.counter=1;e=this._adjustValue(e+d*this._increment(this.counter));if(!this.spinning||this._trigger("spin",c,{value:e})!==false){this._value(e);
+this.counter++}},_increment:function(d){var c=this.options.incremental;if(c)return a.isFunction(c)?c(d):Math.floor(d*d*d/5E4-d*d/500+17*d/200+1);return 1},_precision:function(){var d=this._precisionOf(this.options.step);if(this.options.min!==null)d=Math.max(d,this._precisionOf(this.options.min));return d},_precisionOf:function(d){d=d.toString();var c=d.indexOf(".");return c===-1?0:d.length-c-1},_adjustValue:function(d){var c,e=this.options;c=e.min!==null?e.min:0;d=Math.round((d-c)/e.step)*e.step;
+d=parseFloat((c+d).toFixed(this._precision()));if(e.max!==null&&d>e.max)return e.max;if(e.min!==null&&d<e.min)return e.min;return d},_stop:function(d){if(this.spinning){clearTimeout(this.timer);clearTimeout(this.mousewheelTimer);this.counter=0;this.spinning=false;this._trigger("stop",d)}},_setOption:function(d,c){this._super("_setOption",d,c);if(d==="disabled")if(c){this.element.prop("disabled",true);this.buttons.button("disable")}else{this.element.prop("disabled",false);this.buttons.button("enable")}},
+_setOptions:g(function(d){this._super("_setOptions",d);this._value(this.element.val())}),_parse:function(d){if(typeof d==="string"&&d!=="")d=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(d,10,this.options.culture):+d;return d===""||isNaN(d)?null:d},_format:function(d){if(d==="")return"";return window.Globalize&&this.options.numberFormat?Globalize.format(d,this.options.numberFormat,this.options.culture):d},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,
+"aria-valuenow":this._parse(this.element.val())})},_value:function(d,c){var e;if(d!==""){e=this._parse(d);if(e!==null){c||(e=this._adjustValue(e));d=this._format(e)}}this.element.val(d);this._refresh()},destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",false).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");this._super("destroy");this.uiSpinner.replaceWith(this.element)},stepUp:g(function(d){this._stepUp(d)}),
+_stepUp:function(d){this._spin((d||1)*this.options.step)},stepDown:g(function(d){this._stepDown(d)}),_stepDown:function(d){this._spin((d||1)*-this.options.step)},pageUp:g(function(d){this._stepUp((d||1)*this.options.page)}),pageDown:g(function(d){this._stepDown((d||1)*this.options.page)}),value:function(d){if(!arguments.length)return this._parse(this.element.val());g(this._value).call(this,d)},widget:function(){return this.uiSpinner}})})(jQuery);
+(function(a,g){var d=0,c=function(){var f=/#.*$/,i=location.href.replace(f,"");return function(b){b=b.cloneNode(false);return b.hash.length>1&&b.href.replace(f,"")===i}}();a.widget("ui.tabs",{version:"1.9pre",options:{active:null,collapsible:false,event:"click",fx:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var f=this,i=f.options,b=i.active;f.running=false;f.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");f._processTabs();if(b===null){location.hash&&
+f.anchors.each(function(h,k){if(k.hash===location.hash){b=h;return false}});if(b===null)b=f.lis.filter(".ui-tabs-active").index();if(b===null||b===-1)b=f.lis.length?0:false}if(b!==false){b=this.lis.eq(b).index();if(b===-1)b=i.collapsible?false:0}i.active=b;if(!i.collapsible&&i.active===false&&this.anchors.length)i.active=0;if(a.isArray(i.disabled))i.disabled=a.unique(i.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(h){return f.lis.index(h)}))).sort();this._setupFx(i.fx);this._refresh();
+this.panels.hide();this.lis.removeClass("ui-tabs-active ui-state-active");if(i.active!==false&&this.anchors.length){this.active=this._findActive(i.active);f._getPanelForTab(this.active).show();this.lis.eq(i.active).addClass("ui-tabs-active ui-state-active");this.load(i.active)}else this.active=a()},_setOption:function(f,i){if(f=="active")this._activate(i);else if(f==="disabled")this._setupDisabled(i);else{this._super("_setOption",f,i);f==="collapsible"&&!i&&this.options.active===false&&this._activate(0);
+f==="event"&&this._setupEvents(i);f==="fx"&&this._setupFx(i)}},_tabId:function(f){return a(f).attr("aria-controls")||"ui-tabs-"+ ++d},_sanitizeSelector:function(f){return f?f.replace(/[!"$%&'()*+,.\/:;<=>?@[\]^`{|}~]/g,"\\$&"):""},refresh:function(){var f=this.options,i=this.list.children(":has(a[href])");f.disabled=a.map(i.filter(".ui-state-disabled"),function(b){return i.index(b)});this._processTabs();this._refresh();this.panels.not(this._getPanelForTab(this.active)).hide();if(f.active===false||
+!this.anchors.length){f.active=false;this.active=a()}else if(this.active.length&&!a.contains(this.list[0],this.active[0])){f=f.active-1;this._activate(f>=0?f:0)}else f.active=this.anchors.index(this.active)},_refresh:function(){var f=this.options;this.element.toggleClass("ui-tabs-collapsible",f.collapsible);this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");
+this._setupDisabled(f.disabled);this._setupEvents(f.event);this.lis.unbind(".tabs");this._focusable(this.lis);this._hoverable(this.lis)},_processTabs:function(){var f=this;this.list=this.element.find("ol,ul").eq(0);this.lis=a(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);this.anchors.each(function(i,b){var h,k;if(c(b)){h=b.hash;k=f.element.find(f._sanitizeSelector(h))}else{var l=f._tabId(b);h="#"+l;k=f.element.find(h);if(!k.length){k=
+f._createPanel(l);k.insertAfter(f.panels[i-1]||f.list)}}if(k.length)f.panels=f.panels.add(k);a(b).attr("aria-controls",h.substring(1))})},_createPanel:function(f){return a("<div></div>").attr("id",f).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("destroy.tabs",true)},_setupDisabled:function(f){if(a.isArray(f))if(f.length){if(f.length===this.anchors.length)f=true}else f=false;for(var i=0,b;b=this.lis[i];i++)a(b).toggleClass("ui-state-disabled",f===true||a.inArray(i,f)!==-1);this.options.disabled=
+f},_setupFx:function(f){if(f)if(a.isArray(f)){this.hideFx=f[0];this.showFx=f[1]}else this.hideFx=this.showFx=f},_resetStyle:function(f,i){!a.support.opacity&&i.opacity&&f[0].style.removeAttribute("filter")},_setupEvents:function(f){this.anchors.unbind(".tabs");f&&this.anchors.bind(f.split(" ").join(".tabs ")+".tabs",a.proxy(this,"_eventHandler"));this.anchors.bind("click.tabs",function(i){i.preventDefault()})},_eventHandler:function(f){var i=this.options,b=this.active,h=a(f.currentTarget),k=h[0]===
+b[0],l=k&&i.collapsible,j=l?a():this._getPanelForTab(h),m=!b.length?a():this._getPanelForTab(b),n=h.closest("li");b={oldTab:b,oldPanel:m,newTab:l?a():h,newPanel:j};f.preventDefault();if(n.hasClass("ui-state-disabled")||n.hasClass("ui-tabs-loading")||this.running||k&&!i.collapsible||this._trigger("beforeActivate",f,b)===false)h[0].blur();else{i.active=l?false:this.anchors.index(h);this.active=k?a():h;this.xhr&&this.xhr.abort();if(!m.length&&!j.length)throw"jQuery UI Tabs: Mismatching fragment identifier.";
+if(j.length){this.load(this.anchors.index(h),f);h[0].blur()}this._toggle(f,b)}},_toggle:function(f,i){function b(){k.running=false;k._trigger("activate",f,i)}function h(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active");if(l.length&&k.showFx)l.animate(k.showFx,k.showFx.duration||"normal",function(){k._resetStyle(a(this),k.showFx);b()});else{l.show();b()}}var k=this,l=i.newPanel,j=i.oldPanel;k.running=true;if(j.length&&k.hideFx)j.animate(k.hideFx,k.hideFx.duration||"normal",function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active");
+k._resetStyle(a(this),k.hideFx);h()});else{i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active");j.hide();h()}},_activate:function(f){f=this._findActive(f)[0];if(f!==this.active[0]){f=f||this.active[0];this._eventHandler({target:f,currentTarget:f,preventDefault:a.noop})}},_findActive:function(f){return typeof f==="number"?this.anchors.eq(f):typeof f==="string"?this.anchors.filter("[href$='"+f+"']"):a()},_getIndex:function(f){if(typeof f=="string")f=this.anchors.index(this.anchors.filter("[href$="+
+f+"]"));return f},_destroy:function(){this.xhr&&this.xhr.abort();this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.unbind(".tabs").removeData("href.tabs").removeData("load.tabs");this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass("ui-state-default ui-corner-top ui-tabs-active ui-state-active ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom")});
+return this},enable:function(f){var i=this.options.disabled;if(i!==false){if(f===g)i=false;else{f=this._getIndex(f);i=a.isArray(i)?a.map(i,function(b){return b!==f?b:null}):a.map(this.lis,function(b,h){return h!==f?h:null})}this._setupDisabled(i)}},disable:function(f){var i=this.options.disabled;if(i!==true){if(f===g)i=true;else{f=this._getIndex(f);if(a.inArray(f,i)!==-1)return;i=a.isArray(i)?a.merge([f],i).sort():[f]}this._setupDisabled(i)}},load:function(f,i){f=this._getIndex(f);var b=this,h=this.anchors.eq(f),
+k=b._getPanelForTab(h),l={tab:h,panel:k};if(!c(h[0])){if(this.xhr=a.ajax({url:h.attr("href"),beforeSend:function(j,m){return b._trigger("beforeLoad",i,a.extend({jqXHR:j,ajaxSettings:m},l))}})){this.lis.eq(f).addClass("ui-tabs-loading");this.xhr.success(function(j){setTimeout(function(){k.html(j);b._trigger("load",i,l)},1)}).complete(function(j,m){setTimeout(function(){m==="abort"&&b.panels.stop(false,true);b.lis.eq(f).removeClass("ui-tabs-loading");j===b.xhr&&delete b.xhr})})}return this}},_getPanelForTab:function(f){return this.element.find(this._sanitizeSelector("#"+
+a(f).attr("aria-controls")))}});if(a.uiBackCompat!==false){a.ui.tabs.prototype._ui=function(f,i){return{tab:f,panel:i,index:this.anchors.index(f)}};(function(f,i){i.url=function(b,h){this.anchors.eq(b).attr("href",h)}})(jQuery,jQuery.ui.tabs.prototype);(function(f,i){f.extend(i.options,{ajaxOptions:null,cache:false});var b=i._create,h=i._setOption,k=i._destroy,l=i.url||f.noop;f.extend(i,{_create:function(){b.call(this);var j=this;this.element.bind("tabsbeforeload.tabs",function(m,n){if(f.data(n.tab[0],
+"cache.tabs"))m.preventDefault();else{f.extend(n.ajaxSettings,j.options.ajaxOptions,{error:function(o,p){try{j.options.ajaxOptions.error(o,p,n.tab.closest("li").index(),n.tab[0])}catch(q){}}});n.jqXHR.success(function(){j.options.cache&&f.data(n.tab[0],"cache.tabs",true)})}})},_setOption:function(j,m){j==="cache"&&m===false&&this.anchors.removeData("cache.tabs");h.apply(this,arguments)},_destroy:function(){this.anchors.removeData("cache.tabs");k.call(this)},url:function(j){this.anchors.eq(j).removeData("cache.tabs");
+l.apply(this,arguments)}})})(jQuery,jQuery.ui.tabs.prototype);(function(f,i){i.abort=function(){this.xhr&&this.xhr.abort()}})(jQuery,jQuery.ui.tabs.prototype);a.widget("ui.tabs",a.ui.tabs,{options:{spinner:"<em>Loading&#8230;</em>"},_create:function(){this._super("_create");this._bind({tabsbeforeload:function(f,i){if(this.options.spinner){var b=i.tab.find("span"),h=b.html();b.html(this.options.spinner);i.jqXHR.complete(function(){b.html(h)})}}})}});(function(f,i){f.extend(i.options,{enable:null,disable:null});
+var b=i.enable,h=i.disable;i.enable=function(k){var l=this.options,j;if(k&&l.disabled===true||f.isArray(l.disabled)&&f.inArray(k,l.disabled)!==-1)j=true;b.apply(this,arguments);j&&this._trigger("enable",null,this._ui(this.anchors[k],this.panels[k]))};i.disable=function(k){var l=this.options,j;if(k&&l.disabled===false||f.isArray(l.disabled)&&f.inArray(k,l.disabled)===-1)j=true;h.apply(this,arguments);j&&this._trigger("disable",null,this._ui(this.anchors[k],this.panels[k]))}})(jQuery,jQuery.ui.tabs.prototype);
+(function(f,i){f.extend(i.options,{add:null,remove:null,tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"});i.add=function(b,h,k){if(k===g)k=this.anchors.length;var l=this.options;h=f(l.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,h));b=!b.indexOf("#")?b.replace("#",""):this._tabId(h.find("a")[0]);h.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);h.find("a").attr("aria-controls",b);var j=k>=this.lis.length,m=this.element.find("#"+b);if(!m.length){m=
+this._createPanel(b);if(j)k>0?m.insertAfter(this.panels.eq(-1)):m.appendTo(this.element);else m.insertBefore(this.panels[k])}m.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").hide();j?h.appendTo(this.list):h.insertBefore(this.lis[k]);l.disabled=f.map(l.disabled,function(n){return n>=k?++n:n});this.refresh();this.lis.length===1&&l.active===false&&this.option("active",0);this._trigger("add",null,this._ui(this.anchors[k],this.panels[k]));return this};i.remove=function(b){b=this._getIndex(b);
+var h=this.options,k=this.lis.eq(b).remove(),l=this._getPanelForTab(k.find("a[aria-controls]")).remove();if(k.hasClass("ui-tabs-active")&&this.anchors.length>2)this._activate(b+(b+1<this.anchors.length?1:-1));h.disabled=f.map(f.grep(h.disabled,function(j){return j!==b}),function(j){return j>=b?--j:j});this.refresh();this._trigger("remove",null,this._ui(k.find("a")[0],l[0]));return this}})(jQuery,jQuery.ui.tabs.prototype);(function(f,i){i.length=function(){return this.anchors.length}})(jQuery,jQuery.ui.tabs.prototype);
+(function(f,i){f.extend(i.options,{idPrefix:"ui-tabs-"});i._tabId=function(b){return f(b).attr("aria-controls")||b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+ ++d}})(jQuery,jQuery.ui.tabs.prototype);(function(f,i){f.extend(i.options,{panelTemplate:"<div></div>"});i._createPanel=function(b){return f(this.options.panelTemplate).attr("id",b).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("destroy.tabs",true)}})(jQuery,jQuery.ui.tabs.prototype);
+(function(f,i){var b=i._create,h=i._setOption,k=i._eventHandler;i._create=function(){var l=this.options;if(l.active===null&&l.selected!==g)l.active=l.selected===-1?false:l.selected;b.call(this);l.selected=l.active;if(l.selected===false)l.selected=-1};i._setOption=function(l,j){if(l!=="selected")return h.apply(this,arguments);var m=this.options;h.call(this,"active",j===-1?false:j);m.selected=m.active;if(m.selected===false)m.selected=-1};i._eventHandler=function(){k.apply(this,arguments);this.options.selected=
+this.options.active;if(this.options.selected===false)this.options.selected=-1}})(jQuery,jQuery.ui.tabs.prototype);(function(f,i){f.extend(i.options,{show:null,select:null});var b=i._create,h=i._trigger;i._create=function(){b.call(this);this.options.active!==false&&this._trigger("show",null,this._ui(this.active[0],this._getPanelForTab(this.active)[0]))};i._trigger=function(k,l,j){if(!h.apply(this,arguments))return false;if(k==="beforeActivate"&&j.newTab.length)h.call(this,"select",l,{tab:j.newTab[0],
+panel:j.newPanel[0],index:j.newTab.closest("li").index()});else k==="activate"&&j.newTab.length&&h.call(this,"show",l,{tab:j.newTab[0],panel:j.newPanel[0],index:j.newTab.closest("li").index()})}})(jQuery,jQuery.ui.tabs.prototype);(function(f,i){i.select=function(b){b=this._getIndex(b);if(b===-1)if(this.options.collapsible&&this.options.selected!==-1)b=this.options.selected;else return;this.anchors.eq(b).trigger(this.options.event+".tabs")}})(jQuery,jQuery.ui.tabs.prototype);var e=0;a.widget("ui.tabs",
+a.ui.tabs,{options:{cookie:null},_create:function(){var f=this.options,i;if(f.active==null&&f.cookie){i=parseInt(this._cookie(),10);if(i===-1)i=false;f.active=i}this._super("_create")},_cookie:function(f){var i=[this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+ ++e)];if(arguments.length){i.push(f===false?-1:f);i.push(this.options.cookie)}return a.cookie.apply(null,i)},_refresh:function(){this._super("_refresh");this.options.cookie&&this._cookie(this.options.active,this.options.cookie)},
+_eventHandler:function(){this._superApply("_eventHandler",arguments);this.options.cookie&&this._cookie(this.options.active,this.options.cookie)},_destroy:function(){this._super("_destroy");this.options.cookie&&this._cookie(null,this.options.cookie)}});a.widget("ui.tabs",a.ui.tabs,{_trigger:function(f,i,b){b=a.extend({},b);if(f==="load"){b.panel=b.panel[0];b.tab=b.tab[0]}return this._super("_trigger",f,i,b)}})}})(jQuery);
+(function(a){var g=0;a.widget("ui.tooltip",{version:"1.9pre",options:{content:function(){return a(this).attr("title")},hide:true,items:"[title]",position:{my:"left+15 center",at:"right center",collision:"flipfit flipfit"},show:true,tooltipClass:null,close:null,open:null},_create:function(){this._bind({mouseover:"open",focusin:"open"});this.tooltips={}},_setOption:function(d,c){if(d==="disabled"){this[c?"_disable":"_enable"]();this.options[d]=c}else this._super("_setOption",d,c)},_disable:function(){var d=
+this;a.each(this.tooltips,function(c,e){var f=a.Event("blur");f.target=f.currentTarget=e[0];d.close(f,true)});this.element.find(this.options.items).andSelf().each(function(){var c=a(this);c.is("[title]")&&c.data("tooltip-title",c.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).andSelf().each(function(){var d=a(this);d.data("tooltip-title")&&d.attr("title",d.data("tooltip-title"))})},open:function(d){var c,e=this,f=a(d?d.target:this.element).closest(this.options.items);
+if(!(!f.length||f.attr("aria-describedby"))){f.data("tooltip-title")||f.data("tooltip-title",f.attr("title"));(c=this.options.content.call(f[0],function(i){setTimeout(function(){e._open(d,f,i)},1)}))&&e._open(d,f,c)}},_open:function(d,c,e){if(e){c.is("[title]")&&c.attr("title","");var f=this._find(c);if(!f.length){f=this._tooltip(c);c.attr("aria-describedby",f.attr("id"))}f.find(".ui-tooltip-content").html(e);f.stop(true).position(a.extend({of:c},this.options.position)).hide();this._show(f,this.options.show);
+this._trigger("open",d,{tooltip:f});this._bind(c,{mouseleave:"close",blur:"close",keyup:function(i){if(i.keyCode==a.ui.keyCode.ESCAPE){i=a.Event(i);i.currentTarget=c[0];this.close(i,true)}}})}},close:function(d,c){var e=this,f=a(d?d.currentTarget:this.element),i=this._find(f);if(!(!c&&document.activeElement===f[0])){f.data("tooltip-title")&&f.attr("title",f.data("tooltip-title"));f.removeAttr("aria-describedby");i.stop(true);this._hide(i,this.options.hide,function(){a(this).remove();delete e.tooltips[this.id]});
+f.unbind("mouseleave.tooltip blur.tooltip keyup.tooltip");this._trigger("close",d,{tooltip:i})}},_tooltip:function(d){var c="ui-tooltip-"+g++,e=a("<div>").attr({id:c,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));a("<div>").addClass("ui-tooltip-content").appendTo(e);e.appendTo(document.body);a.fn.bgiframe&&e.bgiframe();this.tooltips[c]=d;return e},_find:function(d){return(d=d.attr("aria-describedby"))?a("#"+d):a()},_destroy:function(){a.each(this.tooltips,
+function(d){a("#"+d).remove()})}})})(jQuery);
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery-ui.js b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery-ui.js
new file mode 100644
index 00000000..cd515f36
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery-ui.js
@@ -0,0 +1,11767 @@
+/*!
+ * jQuery UI 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function( $, undefined ) {
+
+// prevent duplicate loading
+// this is only a problem because we proxy existing functions
+// and we don't want to double proxy them
+$.ui = $.ui || {};
+if ( $.ui.version ) {
+ return;
+}
+
+$.extend( $.ui, {
+ version: "1.8.16",
+
+ keyCode: {
+ ALT: 18,
+ BACKSPACE: 8,
+ CAPS_LOCK: 20,
+ COMMA: 188,
+ COMMAND: 91,
+ COMMAND_LEFT: 91, // COMMAND
+ COMMAND_RIGHT: 93,
+ CONTROL: 17,
+ DELETE: 46,
+ DOWN: 40,
+ END: 35,
+ ENTER: 13,
+ ESCAPE: 27,
+ HOME: 36,
+ INSERT: 45,
+ LEFT: 37,
+ MENU: 93, // COMMAND_RIGHT
+ NUMPAD_ADD: 107,
+ NUMPAD_DECIMAL: 110,
+ NUMPAD_DIVIDE: 111,
+ NUMPAD_ENTER: 108,
+ NUMPAD_MULTIPLY: 106,
+ NUMPAD_SUBTRACT: 109,
+ PAGE_DOWN: 34,
+ PAGE_UP: 33,
+ PERIOD: 190,
+ RIGHT: 39,
+ SHIFT: 16,
+ SPACE: 32,
+ TAB: 9,
+ UP: 38,
+ WINDOWS: 91 // COMMAND
+ }
+});
+
+// plugins
+$.fn.extend({
+ propAttr: $.fn.prop || $.fn.attr,
+
+ _focus: $.fn.focus,
+ focus: function( delay, fn ) {
+ return typeof delay === "number" ?
+ this.each(function() {
+ var elem = this;
+ setTimeout(function() {
+ $( elem ).focus();
+ if ( fn ) {
+ fn.call( elem );
+ }
+ }, delay );
+ }) :
+ this._focus.apply( this, arguments );
+ },
+
+ scrollParent: function() {
+ var scrollParent;
+ if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
+ scrollParent = this.parents().filter(function() {
+ return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
+ }).eq(0);
+ } else {
+ scrollParent = this.parents().filter(function() {
+ return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
+ }).eq(0);
+ }
+
+ return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
+ },
+
+ zIndex: function( zIndex ) {
+ if ( zIndex !== undefined ) {
+ return this.css( "zIndex", zIndex );
+ }
+
+ if ( this.length ) {
+ var elem = $( this[ 0 ] ), position, value;
+ while ( elem.length && elem[ 0 ] !== document ) {
+ // Ignore z-index if position is set to a value where z-index is ignored by the browser
+ // This makes behavior of this function consistent across browsers
+ // WebKit always returns auto if the element is positioned
+ position = elem.css( "position" );
+ if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+ // IE returns 0 when zIndex is not specified
+ // other browsers return a string
+ // we ignore the case of nested elements with an explicit value of 0
+ // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+ value = parseInt( elem.css( "zIndex" ), 10 );
+ if ( !isNaN( value ) && value !== 0 ) {
+ return value;
+ }
+ }
+ elem = elem.parent();
+ }
+ }
+
+ return 0;
+ },
+
+ disableSelection: function() {
+ return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
+ ".ui-disableSelection", function( event ) {
+ event.preventDefault();
+ });
+ },
+
+ enableSelection: function() {
+ return this.unbind( ".ui-disableSelection" );
+ }
+});
+
+$.each( [ "Width", "Height" ], function( i, name ) {
+ var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+ type = name.toLowerCase(),
+ orig = {
+ innerWidth: $.fn.innerWidth,
+ innerHeight: $.fn.innerHeight,
+ outerWidth: $.fn.outerWidth,
+ outerHeight: $.fn.outerHeight
+ };
+
+ function reduce( elem, size, border, margin ) {
+ $.each( side, function() {
+ size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0;
+ if ( border ) {
+ size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0;
+ }
+ if ( margin ) {
+ size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0;
+ }
+ });
+ return size;
+ }
+
+ $.fn[ "inner" + name ] = function( size ) {
+ if ( size === undefined ) {
+ return orig[ "inner" + name ].call( this );
+ }
+
+ return this.each(function() {
+ $( this ).css( type, reduce( this, size ) + "px" );
+ });
+ };
+
+ $.fn[ "outer" + name] = function( size, margin ) {
+ if ( typeof size !== "number" ) {
+ return orig[ "outer" + name ].call( this, size );
+ }
+
+ return this.each(function() {
+ $( this).css( type, reduce( this, size, true, margin ) + "px" );
+ });
+ };
+});
+
+// selectors
+function focusable( element, isTabIndexNotNaN ) {
+ var nodeName = element.nodeName.toLowerCase();
+ if ( "area" === nodeName ) {
+ var map = element.parentNode,
+ mapName = map.name,
+ img;
+ if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+ return false;
+ }
+ img = $( "img[usemap=#" + mapName + "]" )[0];
+ return !!img && visible( img );
+ }
+ return ( /input|select|textarea|button|object/.test( nodeName )
+ ? !element.disabled
+ : "a" == nodeName
+ ? element.href || isTabIndexNotNaN
+ : isTabIndexNotNaN)
+ // the element and all of its ancestors must be visible
+ && visible( element );
+}
+
+function visible( element ) {
+ return !$( element ).parents().andSelf().filter(function() {
+ return $.curCSS( this, "visibility" ) === "hidden" ||
+ $.expr.filters.hidden( this );
+ }).length;
+}
+
+$.extend( $.expr[ ":" ], {
+ data: function( elem, i, match ) {
+ return !!$.data( elem, match[ 3 ] );
+ },
+
+ focusable: function( element ) {
+ return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+ },
+
+ tabbable: function( element ) {
+ var tabIndex = $.attr( element, "tabindex" ),
+ isTabIndexNaN = isNaN( tabIndex );
+ return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+ }
+});
+
+// support
+$(function() {
+ var body = document.body,
+ div = body.appendChild( div = document.createElement( "div" ) );
+
+ $.extend( div.style, {
+ minHeight: "100px",
+ height: "auto",
+ padding: 0,
+ borderWidth: 0
+ });
+
+ $.support.minHeight = div.offsetHeight === 100;
+ $.support.selectstart = "onselectstart" in div;
+
+ // set display to none to avoid a layout bug in IE
+ // http://dev.jquery.com/ticket/4014
+ body.removeChild( div ).style.display = "none";
+});
+
+
+
+
+
+// deprecated
+$.extend( $.ui, {
+ // $.ui.plugin is deprecated. Use the proxy pattern instead.
+ plugin: {
+ add: function( module, option, set ) {
+ var proto = $.ui[ module ].prototype;
+ for ( var i in set ) {
+ proto.plugins[ i ] = proto.plugins[ i ] || [];
+ proto.plugins[ i ].push( [ option, set[ i ] ] );
+ }
+ },
+ call: function( instance, name, args ) {
+ var set = instance.plugins[ name ];
+ if ( !set || !instance.element[ 0 ].parentNode ) {
+ return;
+ }
+
+ for ( var i = 0; i < set.length; i++ ) {
+ if ( instance.options[ set[ i ][ 0 ] ] ) {
+ set[ i ][ 1 ].apply( instance.element, args );
+ }
+ }
+ }
+ },
+
+ // will be deprecated when we switch to jQuery 1.4 - use jQuery.contains()
+ contains: function( a, b ) {
+ return document.compareDocumentPosition ?
+ a.compareDocumentPosition( b ) & 16 :
+ a !== b && a.contains( b );
+ },
+
+ // only used by resizable
+ hasScroll: function( el, a ) {
+
+ //If overflow is hidden, the element might have extra content, but the user wants to hide it
+ if ( $( el ).css( "overflow" ) === "hidden") {
+ return false;
+ }
+
+ var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+ has = false;
+
+ if ( el[ scroll ] > 0 ) {
+ return true;
+ }
+
+ // TODO: determine which cases actually cause this to happen
+ // if the element doesn't have the scroll set, see if it's possible to
+ // set the scroll
+ el[ scroll ] = 1;
+ has = ( el[ scroll ] > 0 );
+ el[ scroll ] = 0;
+ return has;
+ },
+
+ // these are odd functions, fix the API or move into individual plugins
+ isOverAxis: function( x, reference, size ) {
+ //Determines when x coordinate is over "b" element axis
+ return ( x > reference ) && ( x < ( reference + size ) );
+ },
+ isOver: function( y, x, top, left, height, width ) {
+ //Determines when x, y coordinates is over "b" element
+ return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width );
+ }
+});
+
+})( jQuery );
+/*!
+ * jQuery UI Widget 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function( $, undefined ) {
+
+// jQuery 1.4+
+if ( $.cleanData ) {
+ var _cleanData = $.cleanData;
+ $.cleanData = function( elems ) {
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ try {
+ $( elem ).triggerHandler( "remove" );
+ // http://bugs.jquery.com/ticket/8235
+ } catch( e ) {}
+ }
+ _cleanData( elems );
+ };
+} else {
+ var _remove = $.fn.remove;
+ $.fn.remove = function( selector, keepData ) {
+ return this.each(function() {
+ if ( !keepData ) {
+ if ( !selector || $.filter( selector, [ this ] ).length ) {
+ $( "*", this ).add( [ this ] ).each(function() {
+ try {
+ $( this ).triggerHandler( "remove" );
+ // http://bugs.jquery.com/ticket/8235
+ } catch( e ) {}
+ });
+ }
+ }
+ return _remove.call( $(this), selector, keepData );
+ });
+ };
+}
+
+$.widget = function( name, base, prototype ) {
+ var namespace = name.split( "." )[ 0 ],
+ fullName;
+ name = name.split( "." )[ 1 ];
+ fullName = namespace + "-" + name;
+
+ if ( !prototype ) {
+ prototype = base;
+ base = $.Widget;
+ }
+
+ // create selector for plugin
+ $.expr[ ":" ][ fullName ] = function( elem ) {
+ return !!$.data( elem, name );
+ };
+
+ $[ namespace ] = $[ namespace ] || {};
+ $[ namespace ][ name ] = function( options, element ) {
+ // allow instantiation without initializing for simple inheritance
+ if ( arguments.length ) {
+ this._createWidget( options, element );
+ }
+ };
+
+ var basePrototype = new base();
+ // we need to make the options hash a property directly on the new instance
+ // otherwise we'll modify the options hash on the prototype that we're
+ // inheriting from
+// $.each( basePrototype, function( key, val ) {
+// if ( $.isPlainObject(val) ) {
+// basePrototype[ key ] = $.extend( {}, val );
+// }
+// });
+ basePrototype.options = $.extend( true, {}, basePrototype.options );
+ $[ namespace ][ name ].prototype = $.extend( true, basePrototype, {
+ namespace: namespace,
+ widgetName: name,
+ widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name,
+ widgetBaseClass: fullName
+ }, prototype );
+
+ $.widget.bridge( name, $[ namespace ][ name ] );
+};
+
+$.widget.bridge = function( name, object ) {
+ $.fn[ name ] = function( options ) {
+ var isMethodCall = typeof options === "string",
+ args = Array.prototype.slice.call( arguments, 1 ),
+ returnValue = this;
+
+ // allow multiple hashes to be passed on init
+ options = !isMethodCall && args.length ?
+ $.extend.apply( null, [ true, options ].concat(args) ) :
+ options;
+
+ // prevent calls to internal methods
+ if ( isMethodCall && options.charAt( 0 ) === "_" ) {
+ return returnValue;
+ }
+
+ if ( isMethodCall ) {
+ this.each(function() {
+ var instance = $.data( this, name ),
+ methodValue = instance && $.isFunction( instance[options] ) ?
+ instance[ options ].apply( instance, args ) :
+ instance;
+ // TODO: add this back in 1.9 and use $.error() (see #5972)
+// if ( !instance ) {
+// throw "cannot call methods on " + name + " prior to initialization; " +
+// "attempted to call method '" + options + "'";
+// }
+// if ( !$.isFunction( instance[options] ) ) {
+// throw "no such method '" + options + "' for " + name + " widget instance";
+// }
+// var methodValue = instance[ options ].apply( instance, args );
+ if ( methodValue !== instance && methodValue !== undefined ) {
+ returnValue = methodValue;
+ return false;
+ }
+ });
+ } else {
+ this.each(function() {
+ var instance = $.data( this, name );
+ if ( instance ) {
+ instance.option( options || {} )._init();
+ } else {
+ $.data( this, name, new object( options, this ) );
+ }
+ });
+ }
+
+ return returnValue;
+ };
+};
+
+$.Widget = function( options, element ) {
+ // allow instantiation without initializing for simple inheritance
+ if ( arguments.length ) {
+ this._createWidget( options, element );
+ }
+};
+
+$.Widget.prototype = {
+ widgetName: "widget",
+ widgetEventPrefix: "",
+ options: {
+ disabled: false
+ },
+ _createWidget: function( options, element ) {
+ // $.widget.bridge stores the plugin instance, but we do it anyway
+ // so that it's stored even before the _create function runs
+ $.data( element, this.widgetName, this );
+ this.element = $( element );
+ this.options = $.extend( true, {},
+ this.options,
+ this._getCreateOptions(),
+ options );
+
+ var self = this;
+ this.element.bind( "remove." + this.widgetName, function() {
+ self.destroy();
+ });
+
+ this._create();
+ this._trigger( "create" );
+ this._init();
+ },
+ _getCreateOptions: function() {
+ return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ];
+ },
+ _create: function() {},
+ _init: function() {},
+
+ destroy: function() {
+ this.element
+ .unbind( "." + this.widgetName )
+ .removeData( this.widgetName );
+ this.widget()
+ .unbind( "." + this.widgetName )
+ .removeAttr( "aria-disabled" )
+ .removeClass(
+ this.widgetBaseClass + "-disabled " +
+ "ui-state-disabled" );
+ },
+
+ widget: function() {
+ return this.element;
+ },
+
+ option: function( key, value ) {
+ var options = key;
+
+ if ( arguments.length === 0 ) {
+ // don't return a reference to the internal hash
+ return $.extend( {}, this.options );
+ }
+
+ if (typeof key === "string" ) {
+ if ( value === undefined ) {
+ return this.options[ key ];
+ }
+ options = {};
+ options[ key ] = value;
+ }
+
+ this._setOptions( options );
+
+ return this;
+ },
+ _setOptions: function( options ) {
+ var self = this;
+ $.each( options, function( key, value ) {
+ self._setOption( key, value );
+ });
+
+ return this;
+ },
+ _setOption: function( key, value ) {
+ this.options[ key ] = value;
+
+ if ( key === "disabled" ) {
+ this.widget()
+ [ value ? "addClass" : "removeClass"](
+ this.widgetBaseClass + "-disabled" + " " +
+ "ui-state-disabled" )
+ .attr( "aria-disabled", value );
+ }
+
+ return this;
+ },
+
+ enable: function() {
+ return this._setOption( "disabled", false );
+ },
+ disable: function() {
+ return this._setOption( "disabled", true );
+ },
+
+ _trigger: function( type, event, data ) {
+ var callback = this.options[ type ];
+
+ event = $.Event( event );
+ event.type = ( type === this.widgetEventPrefix ?
+ type :
+ this.widgetEventPrefix + type ).toLowerCase();
+ data = data || {};
+
+ // copy original event properties over to the new event
+ // this would happen if we could call $.event.fix instead of $.Event
+ // but we don't have a way to force an event to be fixed multiple times
+ if ( event.originalEvent ) {
+ for ( var i = $.event.props.length, prop; i; ) {
+ prop = $.event.props[ --i ];
+ event[ prop ] = event.originalEvent[ prop ];
+ }
+ }
+
+ this.element.trigger( event, data );
+
+ return !( $.isFunction(callback) &&
+ callback.call( this.element[0], event, data ) === false ||
+ event.isDefaultPrevented() );
+ }
+};
+
+})( jQuery );
+/*!
+ * jQuery UI Mouse 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+var mouseHandled = false;
+$( document ).mouseup( function( e ) {
+ mouseHandled = false;
+});
+
+$.widget("ui.mouse", {
+ options: {
+ cancel: ':input,option',
+ distance: 1,
+ delay: 0
+ },
+ _mouseInit: function() {
+ var self = this;
+
+ this.element
+ .bind('mousedown.'+this.widgetName, function(event) {
+ return self._mouseDown(event);
+ })
+ .bind('click.'+this.widgetName, function(event) {
+ if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) {
+ $.removeData(event.target, self.widgetName + '.preventClickEvent');
+ event.stopImmediatePropagation();
+ return false;
+ }
+ });
+
+ this.started = false;
+ },
+
+ // TODO: make sure destroying one instance of mouse doesn't mess with
+ // other instances of mouse
+ _mouseDestroy: function() {
+ this.element.unbind('.'+this.widgetName);
+ },
+
+ _mouseDown: function(event) {
+ // don't let more than one widget handle mouseStart
+ if( mouseHandled ) { return };
+
+ // we may have missed mouseup (out of window)
+ (this._mouseStarted && this._mouseUp(event));
+
+ this._mouseDownEvent = event;
+
+ var self = this,
+ btnIsLeft = (event.which == 1),
+ // event.target.nodeName works around a bug in IE 8 with
+ // disabled inputs (#7620)
+ elIsCancel = (typeof this.options.cancel == "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+ if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+ return true;
+ }
+
+ this.mouseDelayMet = !this.options.delay;
+ if (!this.mouseDelayMet) {
+ this._mouseDelayTimer = setTimeout(function() {
+ self.mouseDelayMet = true;
+ }, this.options.delay);
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted = (this._mouseStart(event) !== false);
+ if (!this._mouseStarted) {
+ event.preventDefault();
+ return true;
+ }
+ }
+
+ // Click event may never have fired (Gecko & Opera)
+ if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) {
+ $.removeData(event.target, this.widgetName + '.preventClickEvent');
+ }
+
+ // these delegates are required to keep context
+ this._mouseMoveDelegate = function(event) {
+ return self._mouseMove(event);
+ };
+ this._mouseUpDelegate = function(event) {
+ return self._mouseUp(event);
+ };
+ $(document)
+ .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+ .bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+
+ event.preventDefault();
+
+ mouseHandled = true;
+ return true;
+ },
+
+ _mouseMove: function(event) {
+ // IE mouseup check - mouseup happened when mouse was out of window
+ if ($.browser.msie && !(document.documentMode >= 9) && !event.button) {
+ return this._mouseUp(event);
+ }
+
+ if (this._mouseStarted) {
+ this._mouseDrag(event);
+ return event.preventDefault();
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted =
+ (this._mouseStart(this._mouseDownEvent, event) !== false);
+ (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+ }
+
+ return !this._mouseStarted;
+ },
+
+ _mouseUp: function(event) {
+ $(document)
+ .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+ .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+
+ if (this._mouseStarted) {
+ this._mouseStarted = false;
+
+ if (event.target == this._mouseDownEvent.target) {
+ $.data(event.target, this.widgetName + '.preventClickEvent', true);
+ }
+
+ this._mouseStop(event);
+ }
+
+ return false;
+ },
+
+ _mouseDistanceMet: function(event) {
+ return (Math.max(
+ Math.abs(this._mouseDownEvent.pageX - event.pageX),
+ Math.abs(this._mouseDownEvent.pageY - event.pageY)
+ ) >= this.options.distance
+ );
+ },
+
+ _mouseDelayMet: function(event) {
+ return this.mouseDelayMet;
+ },
+
+ // These are placeholder methods, to be overriden by extending plugin
+ _mouseStart: function(event) {},
+ _mouseDrag: function(event) {},
+ _mouseStop: function(event) {},
+ _mouseCapture: function(event) { return true; }
+});
+
+})(jQuery);
+/*
+ * jQuery UI Draggable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+$.widget("ui.draggable", $.ui.mouse, {
+ widgetEventPrefix: "drag",
+ options: {
+ addClasses: true,
+ appendTo: "parent",
+ axis: false,
+ connectToSortable: false,
+ containment: false,
+ cursor: "auto",
+ cursorAt: false,
+ grid: false,
+ handle: false,
+ helper: "original",
+ iframeFix: false,
+ opacity: false,
+ refreshPositions: false,
+ revert: false,
+ revertDuration: 500,
+ scope: "default",
+ scroll: true,
+ scrollSensitivity: 20,
+ scrollSpeed: 20,
+ snap: false,
+ snapMode: "both",
+ snapTolerance: 20,
+ stack: false,
+ zIndex: false
+ },
+ _create: function() {
+
+ if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position")))
+ this.element[0].style.position = 'relative';
+
+ (this.options.addClasses && this.element.addClass("ui-draggable"));
+ (this.options.disabled && this.element.addClass("ui-draggable-disabled"));
+
+ this._mouseInit();
+
+ },
+
+ destroy: function() {
+ if(!this.element.data('draggable')) return;
+ this.element
+ .removeData("draggable")
+ .unbind(".draggable")
+ .removeClass("ui-draggable"
+ + " ui-draggable-dragging"
+ + " ui-draggable-disabled");
+ this._mouseDestroy();
+
+ return this;
+ },
+
+ _mouseCapture: function(event) {
+
+ var o = this.options;
+
+ // among others, prevent a drag on a resizable-handle
+ if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle'))
+ return false;
+
+ //Quit if we're not on a valid handle
+ this.handle = this._getHandle(event);
+ if (!this.handle)
+ return false;
+
+ if ( o.iframeFix ) {
+ $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
+ $('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
+ .css({
+ width: this.offsetWidth+"px", height: this.offsetHeight+"px",
+ position: "absolute", opacity: "0.001", zIndex: 1000
+ })
+ .css($(this).offset())
+ .appendTo("body");
+ });
+ }
+
+ return true;
+
+ },
+
+ _mouseStart: function(event) {
+
+ var o = this.options;
+
+ //Create and append the visible helper
+ this.helper = this._createHelper(event);
+
+ //Cache the helper size
+ this._cacheHelperProportions();
+
+ //If ddmanager is used for droppables, set the global draggable
+ if($.ui.ddmanager)
+ $.ui.ddmanager.current = this;
+
+ /*
+ * - Position generation -
+ * This block generates everything position related - it's the core of draggables.
+ */
+
+ //Cache the margins of the original element
+ this._cacheMargins();
+
+ //Store the helper's css position
+ this.cssPosition = this.helper.css("position");
+ this.scrollParent = this.helper.scrollParent();
+
+ //The element's absolute position on the page minus margins
+ this.offset = this.positionAbs = this.element.offset();
+ this.offset = {
+ top: this.offset.top - this.margins.top,
+ left: this.offset.left - this.margins.left
+ };
+
+ $.extend(this.offset, {
+ click: { //Where the click happened, relative to the element
+ left: event.pageX - this.offset.left,
+ top: event.pageY - this.offset.top
+ },
+ parent: this._getParentOffset(),
+ relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+ });
+
+ //Generate the original position
+ this.originalPosition = this.position = this._generatePosition(event);
+ this.originalPageX = event.pageX;
+ this.originalPageY = event.pageY;
+
+ //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
+ (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+ //Set a containment if given in the options
+ if(o.containment)
+ this._setContainment();
+
+ //Trigger event + callbacks
+ if(this._trigger("start", event) === false) {
+ this._clear();
+ return false;
+ }
+
+ //Recache the helper size
+ this._cacheHelperProportions();
+
+ //Prepare the droppable offsets
+ if ($.ui.ddmanager && !o.dropBehaviour)
+ $.ui.ddmanager.prepareOffsets(this, event);
+
+ this.helper.addClass("ui-draggable-dragging");
+ this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+
+ //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
+ if ( $.ui.ddmanager ) $.ui.ddmanager.dragStart(this, event);
+
+ return true;
+ },
+
+ _mouseDrag: function(event, noPropagation) {
+
+ //Compute the helpers position
+ this.position = this._generatePosition(event);
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ //Call plugins and callbacks and use the resulting position if something is returned
+ if (!noPropagation) {
+ var ui = this._uiHash();
+ if(this._trigger('drag', event, ui) === false) {
+ this._mouseUp({});
+ return false;
+ }
+ this.position = ui.position;
+ }
+
+ if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
+ if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
+ if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
+
+ return false;
+ },
+
+ _mouseStop: function(event) {
+
+ //If we are using droppables, inform the manager about the drop
+ var dropped = false;
+ if ($.ui.ddmanager && !this.options.dropBehaviour)
+ dropped = $.ui.ddmanager.drop(this, event);
+
+ //if a drop comes from outside (a sortable)
+ if(this.dropped) {
+ dropped = this.dropped;
+ this.dropped = false;
+ }
+
+ //if the original element is removed, don't bother to continue if helper is set to "original"
+ if((!this.element[0] || !this.element[0].parentNode) && this.options.helper == "original")
+ return false;
+
+ if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+ var self = this;
+ $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
+ if(self._trigger("stop", event) !== false) {
+ self._clear();
+ }
+ });
+ } else {
+ if(this._trigger("stop", event) !== false) {
+ this._clear();
+ }
+ }
+
+ return false;
+ },
+
+ _mouseUp: function(event) {
+ if (this.options.iframeFix === true) {
+ $("div.ui-draggable-iframeFix").each(function() {
+ this.parentNode.removeChild(this);
+ }); //Remove frame helpers
+ }
+
+ //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
+ if( $.ui.ddmanager ) $.ui.ddmanager.dragStop(this, event);
+
+ return $.ui.mouse.prototype._mouseUp.call(this, event);
+ },
+
+ cancel: function() {
+
+ if(this.helper.is(".ui-draggable-dragging")) {
+ this._mouseUp({});
+ } else {
+ this._clear();
+ }
+
+ return this;
+
+ },
+
+ _getHandle: function(event) {
+
+ var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false;
+ $(this.options.handle, this.element)
+ .find("*")
+ .andSelf()
+ .each(function() {
+ if(this == event.target) handle = true;
+ });
+
+ return handle;
+
+ },
+
+ _createHelper: function(event) {
+
+ var o = this.options;
+ var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone().removeAttr('id') : this.element);
+
+ if(!helper.parents('body').length)
+ helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo));
+
+ if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position")))
+ helper.css("position", "absolute");
+
+ return helper;
+
+ },
+
+ _adjustOffsetFromHelper: function(obj) {
+ if (typeof obj == 'string') {
+ obj = obj.split(' ');
+ }
+ if ($.isArray(obj)) {
+ obj = {left: +obj[0], top: +obj[1] || 0};
+ }
+ if ('left' in obj) {
+ this.offset.click.left = obj.left + this.margins.left;
+ }
+ if ('right' in obj) {
+ this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+ }
+ if ('top' in obj) {
+ this.offset.click.top = obj.top + this.margins.top;
+ }
+ if ('bottom' in obj) {
+ this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+ }
+ },
+
+ _getParentOffset: function() {
+
+ //Get the offsetParent and cache its position
+ this.offsetParent = this.helper.offsetParent();
+ var po = this.offsetParent.offset();
+
+ // This is a special case where we need to modify a offset calculated on start, since the following happened:
+ // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+ // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+ // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+ if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
+ po.left += this.scrollParent.scrollLeft();
+ po.top += this.scrollParent.scrollTop();
+ }
+
+ if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
+ || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
+ po = { top: 0, left: 0 };
+
+ return {
+ top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+ left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+ };
+
+ },
+
+ _getRelativeOffset: function() {
+
+ if(this.cssPosition == "relative") {
+ var p = this.element.position();
+ return {
+ top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+ left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+ };
+ } else {
+ return { top: 0, left: 0 };
+ }
+
+ },
+
+ _cacheMargins: function() {
+ this.margins = {
+ left: (parseInt(this.element.css("marginLeft"),10) || 0),
+ top: (parseInt(this.element.css("marginTop"),10) || 0),
+ right: (parseInt(this.element.css("marginRight"),10) || 0),
+ bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
+ };
+ },
+
+ _cacheHelperProportions: function() {
+ this.helperProportions = {
+ width: this.helper.outerWidth(),
+ height: this.helper.outerHeight()
+ };
+ },
+
+ _setContainment: function() {
+
+ var o = this.options;
+ if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
+ if(o.containment == 'document' || o.containment == 'window') this.containment = [
+ o.containment == 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+ o.containment == 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+ (o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
+ (o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+ ];
+
+ if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) {
+ var c = $(o.containment);
+ var ce = c[0]; if(!ce) return;
+ var co = c.offset();
+ var over = ($(ce).css("overflow") != 'hidden');
+
+ this.containment = [
+ (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0),
+ (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0),
+ (over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right,
+ (over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom
+ ];
+ this.relative_container = c;
+
+ } else if(o.containment.constructor == Array) {
+ this.containment = o.containment;
+ }
+
+ },
+
+ _convertPositionTo: function(d, pos) {
+
+ if(!pos) pos = this.position;
+ var mod = d == "absolute" ? 1 : -1;
+ var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+ return {
+ top: (
+ pos.top // The absolute mouse position
+ + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent
+ + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border)
+ - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+ ),
+ left: (
+ pos.left // The absolute mouse position
+ + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent
+ + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border)
+ - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+ )
+ };
+
+ },
+
+ _generatePosition: function(event) {
+
+ var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+ var pageX = event.pageX;
+ var pageY = event.pageY;
+
+ /*
+ * - Position constraining -
+ * Constrain the position to a mix of grid, containment.
+ */
+
+ if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+ var containment;
+ if(this.containment) {
+ if (this.relative_container){
+ var co = this.relative_container.offset();
+ containment = [ this.containment[0] + co.left,
+ this.containment[1] + co.top,
+ this.containment[2] + co.left,
+ this.containment[3] + co.top ];
+ }
+ else {
+ containment = this.containment;
+ }
+
+ if(event.pageX - this.offset.click.left < containment[0]) pageX = containment[0] + this.offset.click.left;
+ if(event.pageY - this.offset.click.top < containment[1]) pageY = containment[1] + this.offset.click.top;
+ if(event.pageX - this.offset.click.left > containment[2]) pageX = containment[2] + this.offset.click.left;
+ if(event.pageY - this.offset.click.top > containment[3]) pageY = containment[3] + this.offset.click.top;
+ }
+
+ if(o.grid) {
+ //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+ var top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
+ pageY = containment ? (!(top - this.offset.click.top < containment[1] || top - this.offset.click.top > containment[3]) ? top : (!(top - this.offset.click.top < containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+ var left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
+ pageX = containment ? (!(left - this.offset.click.left < containment[0] || left - this.offset.click.left > containment[2]) ? left : (!(left - this.offset.click.left < containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+ }
+
+ }
+
+ return {
+ top: (
+ pageY // The absolute mouse position
+ - this.offset.click.top // Click offset (relative to the element)
+ - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent
+ - this.offset.parent.top // The offsetParent's offset without borders (offset + border)
+ + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+ ),
+ left: (
+ pageX // The absolute mouse position
+ - this.offset.click.left // Click offset (relative to the element)
+ - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent
+ - this.offset.parent.left // The offsetParent's offset without borders (offset + border)
+ + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+ )
+ };
+
+ },
+
+ _clear: function() {
+ this.helper.removeClass("ui-draggable-dragging");
+ if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove();
+ //if($.ui.ddmanager) $.ui.ddmanager.current = null;
+ this.helper = null;
+ this.cancelHelperRemoval = false;
+ },
+
+ // From now on bulk stuff - mainly helpers
+
+ _trigger: function(type, event, ui) {
+ ui = ui || this._uiHash();
+ $.ui.plugin.call(this, type, [event, ui]);
+ if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins
+ return $.Widget.prototype._trigger.call(this, type, event, ui);
+ },
+
+ plugins: {},
+
+ _uiHash: function(event) {
+ return {
+ helper: this.helper,
+ position: this.position,
+ originalPosition: this.originalPosition,
+ offset: this.positionAbs
+ };
+ }
+
+});
+
+$.extend($.ui.draggable, {
+ version: "1.8.16"
+});
+
+$.ui.plugin.add("draggable", "connectToSortable", {
+ start: function(event, ui) {
+
+ var inst = $(this).data("draggable"), o = inst.options,
+ uiSortable = $.extend({}, ui, { item: inst.element });
+ inst.sortables = [];
+ $(o.connectToSortable).each(function() {
+ var sortable = $.data(this, 'sortable');
+ if (sortable && !sortable.options.disabled) {
+ inst.sortables.push({
+ instance: sortable,
+ shouldRevert: sortable.options.revert
+ });
+ sortable.refreshPositions(); // Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
+ sortable._trigger("activate", event, uiSortable);
+ }
+ });
+
+ },
+ stop: function(event, ui) {
+
+ //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
+ var inst = $(this).data("draggable"),
+ uiSortable = $.extend({}, ui, { item: inst.element });
+
+ $.each(inst.sortables, function() {
+ if(this.instance.isOver) {
+
+ this.instance.isOver = 0;
+
+ inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
+ this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
+
+ //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid'
+ if(this.shouldRevert) this.instance.options.revert = true;
+
+ //Trigger the stop of the sortable
+ this.instance._mouseStop(event);
+
+ this.instance.options.helper = this.instance.options._helper;
+
+ //If the helper has been the original item, restore properties in the sortable
+ if(inst.options.helper == 'original')
+ this.instance.currentItem.css({ top: 'auto', left: 'auto' });
+
+ } else {
+ this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
+ this.instance._trigger("deactivate", event, uiSortable);
+ }
+
+ });
+
+ },
+ drag: function(event, ui) {
+
+ var inst = $(this).data("draggable"), self = this;
+
+ var checkPos = function(o) {
+ var dyClick = this.offset.click.top, dxClick = this.offset.click.left;
+ var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left;
+ var itemHeight = o.height, itemWidth = o.width;
+ var itemTop = o.top, itemLeft = o.left;
+
+ return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth);
+ };
+
+ $.each(inst.sortables, function(i) {
+
+ //Copy over some variables to allow calling the sortable's native _intersectsWith
+ this.instance.positionAbs = inst.positionAbs;
+ this.instance.helperProportions = inst.helperProportions;
+ this.instance.offset.click = inst.offset.click;
+
+ if(this.instance._intersectsWith(this.instance.containerCache)) {
+
+ //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
+ if(!this.instance.isOver) {
+
+ this.instance.isOver = 1;
+ //Now we fake the start of dragging for the sortable instance,
+ //by cloning the list group item, appending it to the sortable and using it as inst.currentItem
+ //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
+ this.instance.currentItem = $(self).clone().removeAttr('id').appendTo(this.instance.element).data("sortable-item", true);
+ this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
+ this.instance.options.helper = function() { return ui.helper[0]; };
+
+ event.target = this.instance.currentItem[0];
+ this.instance._mouseCapture(event, true);
+ this.instance._mouseStart(event, true, true);
+
+ //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
+ this.instance.offset.click.top = inst.offset.click.top;
+ this.instance.offset.click.left = inst.offset.click.left;
+ this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
+ this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
+
+ inst._trigger("toSortable", event);
+ inst.dropped = this.instance.element; //draggable revert needs that
+ //hack so receive/update callbacks work (mostly)
+ inst.currentItem = inst.element;
+ this.instance.fromOutside = inst;
+
+ }
+
+ //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
+ if(this.instance.currentItem) this.instance._mouseDrag(event);
+
+ } else {
+
+ //If it doesn't intersect with the sortable, and it intersected before,
+ //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
+ if(this.instance.isOver) {
+
+ this.instance.isOver = 0;
+ this.instance.cancelHelperRemoval = true;
+
+ //Prevent reverting on this forced stop
+ this.instance.options.revert = false;
+
+ // The out event needs to be triggered independently
+ this.instance._trigger('out', event, this.instance._uiHash(this.instance));
+
+ this.instance._mouseStop(event, true);
+ this.instance.options.helper = this.instance.options._helper;
+
+ //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
+ this.instance.currentItem.remove();
+ if(this.instance.placeholder) this.instance.placeholder.remove();
+
+ inst._trigger("fromSortable", event);
+ inst.dropped = false; //draggable revert needs that
+ }
+
+ };
+
+ });
+
+ }
+});
+
+$.ui.plugin.add("draggable", "cursor", {
+ start: function(event, ui) {
+ var t = $('body'), o = $(this).data('draggable').options;
+ if (t.css("cursor")) o._cursor = t.css("cursor");
+ t.css("cursor", o.cursor);
+ },
+ stop: function(event, ui) {
+ var o = $(this).data('draggable').options;
+ if (o._cursor) $('body').css("cursor", o._cursor);
+ }
+});
+
+$.ui.plugin.add("draggable", "opacity", {
+ start: function(event, ui) {
+ var t = $(ui.helper), o = $(this).data('draggable').options;
+ if(t.css("opacity")) o._opacity = t.css("opacity");
+ t.css('opacity', o.opacity);
+ },
+ stop: function(event, ui) {
+ var o = $(this).data('draggable').options;
+ if(o._opacity) $(ui.helper).css('opacity', o._opacity);
+ }
+});
+
+$.ui.plugin.add("draggable", "scroll", {
+ start: function(event, ui) {
+ var i = $(this).data("draggable");
+ if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset();
+ },
+ drag: function(event, ui) {
+
+ var i = $(this).data("draggable"), o = i.options, scrolled = false;
+
+ if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') {
+
+ if(!o.axis || o.axis != 'x') {
+ if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
+ i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
+ else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity)
+ i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
+ }
+
+ if(!o.axis || o.axis != 'y') {
+ if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
+ i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
+ else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity)
+ i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
+ }
+
+ } else {
+
+ if(!o.axis || o.axis != 'x') {
+ if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
+ scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+ else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
+ scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+ }
+
+ if(!o.axis || o.axis != 'y') {
+ if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
+ scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+ else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
+ scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+ }
+
+ }
+
+ if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
+ $.ui.ddmanager.prepareOffsets(i, event);
+
+ }
+});
+
+$.ui.plugin.add("draggable", "snap", {
+ start: function(event, ui) {
+
+ var i = $(this).data("draggable"), o = i.options;
+ i.snapElements = [];
+
+ $(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() {
+ var $t = $(this); var $o = $t.offset();
+ if(this != i.element[0]) i.snapElements.push({
+ item: this,
+ width: $t.outerWidth(), height: $t.outerHeight(),
+ top: $o.top, left: $o.left
+ });
+ });
+
+ },
+ drag: function(event, ui) {
+
+ var inst = $(this).data("draggable"), o = inst.options;
+ var d = o.snapTolerance;
+
+ var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+ y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+
+ for (var i = inst.snapElements.length - 1; i >= 0; i--){
+
+ var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width,
+ t = inst.snapElements[i].top, b = t + inst.snapElements[i].height;
+
+ //Yes, I know, this is insane ;)
+ if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) {
+ if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+ inst.snapElements[i].snapping = false;
+ continue;
+ }
+
+ if(o.snapMode != 'inner') {
+ var ts = Math.abs(t - y2) <= d;
+ var bs = Math.abs(b - y1) <= d;
+ var ls = Math.abs(l - x2) <= d;
+ var rs = Math.abs(r - x1) <= d;
+ if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+ if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
+ if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
+ if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
+ }
+
+ var first = (ts || bs || ls || rs);
+
+ if(o.snapMode != 'outer') {
+ var ts = Math.abs(t - y1) <= d;
+ var bs = Math.abs(b - y2) <= d;
+ var ls = Math.abs(l - x1) <= d;
+ var rs = Math.abs(r - x2) <= d;
+ if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
+ if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+ if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
+ if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
+ }
+
+ if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first))
+ (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+ inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+
+ };
+
+ }
+});
+
+$.ui.plugin.add("draggable", "stack", {
+ start: function(event, ui) {
+
+ var o = $(this).data("draggable").options;
+
+ var group = $.makeArray($(o.stack)).sort(function(a,b) {
+ return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
+ });
+ if (!group.length) { return; }
+
+ var min = parseInt(group[0].style.zIndex) || 0;
+ $(group).each(function(i) {
+ this.style.zIndex = min + i;
+ });
+
+ this[0].style.zIndex = min + group.length;
+
+ }
+});
+
+$.ui.plugin.add("draggable", "zIndex", {
+ start: function(event, ui) {
+ var t = $(ui.helper), o = $(this).data("draggable").options;
+ if(t.css("zIndex")) o._zIndex = t.css("zIndex");
+ t.css('zIndex', o.zIndex);
+ },
+ stop: function(event, ui) {
+ var o = $(this).data("draggable").options;
+ if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex);
+ }
+});
+
+})(jQuery);
+/*
+ * jQuery UI Droppable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Droppables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.mouse.js
+ * jquery.ui.draggable.js
+ */
+(function( $, undefined ) {
+
+$.widget("ui.droppable", {
+ widgetEventPrefix: "drop",
+ options: {
+ accept: '*',
+ activeClass: false,
+ addClasses: true,
+ greedy: false,
+ hoverClass: false,
+ scope: 'default',
+ tolerance: 'intersect'
+ },
+ _create: function() {
+
+ var o = this.options, accept = o.accept;
+ this.isover = 0; this.isout = 1;
+
+ this.accept = $.isFunction(accept) ? accept : function(d) {
+ return d.is(accept);
+ };
+
+ //Store the droppable's proportions
+ this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
+
+ // Add the reference and positions to the manager
+ $.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
+ $.ui.ddmanager.droppables[o.scope].push(this);
+
+ (o.addClasses && this.element.addClass("ui-droppable"));
+
+ },
+
+ destroy: function() {
+ var drop = $.ui.ddmanager.droppables[this.options.scope];
+ for ( var i = 0; i < drop.length; i++ )
+ if ( drop[i] == this )
+ drop.splice(i, 1);
+
+ this.element
+ .removeClass("ui-droppable ui-droppable-disabled")
+ .removeData("droppable")
+ .unbind(".droppable");
+
+ return this;
+ },
+
+ _setOption: function(key, value) {
+
+ if(key == 'accept') {
+ this.accept = $.isFunction(value) ? value : function(d) {
+ return d.is(value);
+ };
+ }
+ $.Widget.prototype._setOption.apply(this, arguments);
+ },
+
+ _activate: function(event) {
+ var draggable = $.ui.ddmanager.current;
+ if(this.options.activeClass) this.element.addClass(this.options.activeClass);
+ (draggable && this._trigger('activate', event, this.ui(draggable)));
+ },
+
+ _deactivate: function(event) {
+ var draggable = $.ui.ddmanager.current;
+ if(this.options.activeClass) this.element.removeClass(this.options.activeClass);
+ (draggable && this._trigger('deactivate', event, this.ui(draggable)));
+ },
+
+ _over: function(event) {
+
+ var draggable = $.ui.ddmanager.current;
+ if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element
+
+ if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+ if(this.options.hoverClass) this.element.addClass(this.options.hoverClass);
+ this._trigger('over', event, this.ui(draggable));
+ }
+
+ },
+
+ _out: function(event) {
+
+ var draggable = $.ui.ddmanager.current;
+ if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element
+
+ if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+ if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);
+ this._trigger('out', event, this.ui(draggable));
+ }
+
+ },
+
+ _drop: function(event,custom) {
+
+ var draggable = custom || $.ui.ddmanager.current;
+ if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element
+
+ var childrenIntersection = false;
+ this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function() {
+ var inst = $.data(this, 'droppable');
+ if(
+ inst.options.greedy
+ && !inst.options.disabled
+ && inst.options.scope == draggable.options.scope
+ && inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element))
+ && $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
+ ) { childrenIntersection = true; return false; }
+ });
+ if(childrenIntersection) return false;
+
+ if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+ if(this.options.activeClass) this.element.removeClass(this.options.activeClass);
+ if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);
+ this._trigger('drop', event, this.ui(draggable));
+ return this.element;
+ }
+
+ return false;
+
+ },
+
+ ui: function(c) {
+ return {
+ draggable: (c.currentItem || c.element),
+ helper: c.helper,
+ position: c.position,
+ offset: c.positionAbs
+ };
+ }
+
+});
+
+$.extend($.ui.droppable, {
+ version: "1.8.16"
+});
+
+$.ui.intersect = function(draggable, droppable, toleranceMode) {
+
+ if (!droppable.offset) return false;
+
+ var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
+ y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height;
+ var l = droppable.offset.left, r = l + droppable.proportions.width,
+ t = droppable.offset.top, b = t + droppable.proportions.height;
+
+ switch (toleranceMode) {
+ case 'fit':
+ return (l <= x1 && x2 <= r
+ && t <= y1 && y2 <= b);
+ break;
+ case 'intersect':
+ return (l < x1 + (draggable.helperProportions.width / 2) // Right Half
+ && x2 - (draggable.helperProportions.width / 2) < r // Left Half
+ && t < y1 + (draggable.helperProportions.height / 2) // Bottom Half
+ && y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
+ break;
+ case 'pointer':
+ var draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left),
+ draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top),
+ isOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width);
+ return isOver;
+ break;
+ case 'touch':
+ return (
+ (y1 >= t && y1 <= b) || // Top edge touching
+ (y2 >= t && y2 <= b) || // Bottom edge touching
+ (y1 < t && y2 > b) // Surrounded vertically
+ ) && (
+ (x1 >= l && x1 <= r) || // Left edge touching
+ (x2 >= l && x2 <= r) || // Right edge touching
+ (x1 < l && x2 > r) // Surrounded horizontally
+ );
+ break;
+ default:
+ return false;
+ break;
+ }
+
+};
+
+/*
+ This manager tracks offsets of draggables and droppables
+*/
+$.ui.ddmanager = {
+ current: null,
+ droppables: { 'default': [] },
+ prepareOffsets: function(t, event) {
+
+ var m = $.ui.ddmanager.droppables[t.options.scope] || [];
+ var type = event ? event.type : null; // workaround for #2317
+ var list = (t.currentItem || t.element).find(":data(droppable)").andSelf();
+
+ droppablesLoop: for (var i = 0; i < m.length; i++) {
+
+ if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) continue; //No disabled and non-accepted
+ for (var j=0; j < list.length; j++) { if(list[j] == m[i].element[0]) { m[i].proportions.height = 0; continue droppablesLoop; } }; //Filter out elements in the current dragged item
+ m[i].visible = m[i].element.css("display") != "none"; if(!m[i].visible) continue; //If the element is not visible, continue
+
+ if(type == "mousedown") m[i]._activate.call(m[i], event); //Activate the droppable if used directly from draggables
+
+ m[i].offset = m[i].element.offset();
+ m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
+
+ }
+
+ },
+ drop: function(draggable, event) {
+
+ var dropped = false;
+ $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
+
+ if(!this.options) return;
+ if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance))
+ dropped = dropped || this._drop.call(this, event);
+
+ if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+ this.isout = 1; this.isover = 0;
+ this._deactivate.call(this, event);
+ }
+
+ });
+ return dropped;
+
+ },
+ dragStart: function( draggable, event ) {
+ //Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+ draggable.element.parents( ":not(body,html)" ).bind( "scroll.droppable", function() {
+ if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );
+ });
+ },
+ drag: function(draggable, event) {
+
+ //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+ if(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event);
+
+ //Run through all droppables and check their positions based on specific tolerance options
+ $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
+
+ if(this.options.disabled || this.greedyChild || !this.visible) return;
+ var intersects = $.ui.intersect(draggable, this, this.options.tolerance);
+
+ var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null);
+ if(!c) return;
+
+ var parentInstance;
+ if (this.options.greedy) {
+ var parent = this.element.parents(':data(droppable):eq(0)');
+ if (parent.length) {
+ parentInstance = $.data(parent[0], 'droppable');
+ parentInstance.greedyChild = (c == 'isover' ? 1 : 0);
+ }
+ }
+
+ // we just moved into a greedy child
+ if (parentInstance && c == 'isover') {
+ parentInstance['isover'] = 0;
+ parentInstance['isout'] = 1;
+ parentInstance._out.call(parentInstance, event);
+ }
+
+ this[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0;
+ this[c == "isover" ? "_over" : "_out"].call(this, event);
+
+ // we just moved out of a greedy child
+ if (parentInstance && c == 'isout') {
+ parentInstance['isout'] = 0;
+ parentInstance['isover'] = 1;
+ parentInstance._over.call(parentInstance, event);
+ }
+ });
+
+ },
+ dragStop: function( draggable, event ) {
+ draggable.element.parents( ":not(body,html)" ).unbind( "scroll.droppable" );
+ //Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+ if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );
+ }
+};
+
+})(jQuery);
+/*
+ * jQuery UI Resizable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+$.widget("ui.resizable", $.ui.mouse, {
+ widgetEventPrefix: "resize",
+ options: {
+ alsoResize: false,
+ animate: false,
+ animateDuration: "slow",
+ animateEasing: "swing",
+ aspectRatio: false,
+ autoHide: false,
+ containment: false,
+ ghost: false,
+ grid: false,
+ handles: "e,s,se",
+ helper: false,
+ maxHeight: null,
+ maxWidth: null,
+ minHeight: 10,
+ minWidth: 10,
+ zIndex: 1000
+ },
+ _create: function() {
+
+ var self = this, o = this.options;
+ this.element.addClass("ui-resizable");
+
+ $.extend(this, {
+ _aspectRatio: !!(o.aspectRatio),
+ aspectRatio: o.aspectRatio,
+ originalElement: this.element,
+ _proportionallyResizeElements: [],
+ _helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null
+ });
+
+ //Wrap the element if it cannot hold child nodes
+ if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
+
+ //Opera fix for relative positioning
+ if (/relative/.test(this.element.css('position')) && $.browser.opera)
+ this.element.css({ position: 'relative', top: 'auto', left: 'auto' });
+
+ //Create a wrapper element and set the wrapper to the new current internal element
+ this.element.wrap(
+ $('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({
+ position: this.element.css('position'),
+ width: this.element.outerWidth(),
+ height: this.element.outerHeight(),
+ top: this.element.css('top'),
+ left: this.element.css('left')
+ })
+ );
+
+ //Overwrite the original this.element
+ this.element = this.element.parent().data(
+ "resizable", this.element.data('resizable')
+ );
+
+ this.elementIsWrapper = true;
+
+ //Move margins to the wrapper
+ this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
+ this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
+
+ //Prevent Safari textarea resize
+ this.originalResizeStyle = this.originalElement.css('resize');
+ this.originalElement.css('resize', 'none');
+
+ //Push the actual element to our proportionallyResize internal array
+ this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' }));
+
+ // avoid IE jump (hard set the margin)
+ this.originalElement.css({ margin: this.originalElement.css('margin') });
+
+ // fix handlers offset
+ this._proportionallyResize();
+
+ }
+
+ this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' });
+ if(this.handles.constructor == String) {
+
+ if(this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw';
+ var n = this.handles.split(","); this.handles = {};
+
+ for(var i = 0; i < n.length; i++) {
+
+ var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle;
+ var axis = $('<div class="ui-resizable-handle ' + hname + '"></div>');
+
+ // increase zIndex of sw, se, ne, nw axis
+ //TODO : this modifies original option
+ if(/sw|se|ne|nw/.test(handle)) axis.css({ zIndex: ++o.zIndex });
+
+ //TODO : What's going on here?
+ if ('se' == handle) {
+ axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se');
+ };
+
+ //Insert into internal handles object and append to element
+ this.handles[handle] = '.ui-resizable-'+handle;
+ this.element.append(axis);
+ }
+
+ }
+
+ this._renderAxis = function(target) {
+
+ target = target || this.element;
+
+ for(var i in this.handles) {
+
+ if(this.handles[i].constructor == String)
+ this.handles[i] = $(this.handles[i], this.element).show();
+
+ //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
+ if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
+
+ var axis = $(this.handles[i], this.element), padWrapper = 0;
+
+ //Checking the correct pad and border
+ padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+
+ //The padding type i have to apply...
+ var padPos = [ 'padding',
+ /ne|nw|n/.test(i) ? 'Top' :
+ /se|sw|s/.test(i) ? 'Bottom' :
+ /^e$/.test(i) ? 'Right' : 'Left' ].join("");
+
+ target.css(padPos, padWrapper);
+
+ this._proportionallyResize();
+
+ }
+
+ //TODO: What's that good for? There's not anything to be executed left
+ if(!$(this.handles[i]).length)
+ continue;
+
+ }
+ };
+
+ //TODO: make renderAxis a prototype function
+ this._renderAxis(this.element);
+
+ this._handles = $('.ui-resizable-handle', this.element)
+ .disableSelection();
+
+ //Matching axis name
+ this._handles.mouseover(function() {
+ if (!self.resizing) {
+ if (this.className)
+ var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+ //Axis, default = se
+ self.axis = axis && axis[1] ? axis[1] : 'se';
+ }
+ });
+
+ //If we want to auto hide the elements
+ if (o.autoHide) {
+ this._handles.hide();
+ $(this.element)
+ .addClass("ui-resizable-autohide")
+ .hover(function() {
+ if (o.disabled) return;
+ $(this).removeClass("ui-resizable-autohide");
+ self._handles.show();
+ },
+ function(){
+ if (o.disabled) return;
+ if (!self.resizing) {
+ $(this).addClass("ui-resizable-autohide");
+ self._handles.hide();
+ }
+ });
+ }
+
+ //Initialize the mouse interaction
+ this._mouseInit();
+
+ },
+
+ destroy: function() {
+
+ this._mouseDestroy();
+
+ var _destroy = function(exp) {
+ $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+ .removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove();
+ };
+
+ //TODO: Unwrap at same DOM position
+ if (this.elementIsWrapper) {
+ _destroy(this.element);
+ var wrapper = this.element;
+ wrapper.after(
+ this.originalElement.css({
+ position: wrapper.css('position'),
+ width: wrapper.outerWidth(),
+ height: wrapper.outerHeight(),
+ top: wrapper.css('top'),
+ left: wrapper.css('left')
+ })
+ ).remove();
+ }
+
+ this.originalElement.css('resize', this.originalResizeStyle);
+ _destroy(this.originalElement);
+
+ return this;
+ },
+
+ _mouseCapture: function(event) {
+ var handle = false;
+ for (var i in this.handles) {
+ if ($(this.handles[i])[0] == event.target) {
+ handle = true;
+ }
+ }
+
+ return !this.options.disabled && handle;
+ },
+
+ _mouseStart: function(event) {
+
+ var o = this.options, iniPos = this.element.position(), el = this.element;
+
+ this.resizing = true;
+ this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() };
+
+ // bugfix for http://dev.jquery.com/ticket/1749
+ if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) {
+ el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left });
+ }
+
+ //Opera fixing relative position
+ if ($.browser.opera && (/relative/).test(el.css('position')))
+ el.css({ position: 'relative', top: 'auto', left: 'auto' });
+
+ this._renderProxy();
+
+ var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top'));
+
+ if (o.containment) {
+ curleft += $(o.containment).scrollLeft() || 0;
+ curtop += $(o.containment).scrollTop() || 0;
+ }
+
+ //Store needed variables
+ this.offset = this.helper.offset();
+ this.position = { left: curleft, top: curtop };
+ this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+ this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+ this.originalPosition = { left: curleft, top: curtop };
+ this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
+ this.originalMousePosition = { left: event.pageX, top: event.pageY };
+
+ //Aspect Ratio
+ this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
+
+ var cursor = $('.ui-resizable-' + this.axis).css('cursor');
+ $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor);
+
+ el.addClass("ui-resizable-resizing");
+ this._propagate("start", event);
+ return true;
+ },
+
+ _mouseDrag: function(event) {
+
+ //Increase performance, avoid regex
+ var el = this.helper, o = this.options, props = {},
+ self = this, smp = this.originalMousePosition, a = this.axis;
+
+ var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0;
+ var trigger = this._change[a];
+ if (!trigger) return false;
+
+ // Calculate the attrs that will be change
+ var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff;
+
+ // Put this in the mouseDrag handler since the user can start pressing shift while resizing
+ this._updateVirtualBoundaries(event.shiftKey);
+ if (this._aspectRatio || event.shiftKey)
+ data = this._updateRatio(data, event);
+
+ data = this._respectSize(data, event);
+
+ // plugins callbacks need to be called first
+ this._propagate("resize", event);
+
+ el.css({
+ top: this.position.top + "px", left: this.position.left + "px",
+ width: this.size.width + "px", height: this.size.height + "px"
+ });
+
+ if (!this._helper && this._proportionallyResizeElements.length)
+ this._proportionallyResize();
+
+ this._updateCache(data);
+
+ // calling the user callback at the end
+ this._trigger('resize', event, this.ui());
+
+ return false;
+ },
+
+ _mouseStop: function(event) {
+
+ this.resizing = false;
+ var o = this.options, self = this;
+
+ if(this._helper) {
+ var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+ soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
+ soffsetw = ista ? 0 : self.sizeDiff.width;
+
+ var s = { width: (self.helper.width() - soffsetw), height: (self.helper.height() - soffseth) },
+ left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
+ top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
+
+ if (!o.animate)
+ this.element.css($.extend(s, { top: top, left: left }));
+
+ self.helper.height(self.size.height);
+ self.helper.width(self.size.width);
+
+ if (this._helper && !o.animate) this._proportionallyResize();
+ }
+
+ $('body').css('cursor', 'auto');
+
+ this.element.removeClass("ui-resizable-resizing");
+
+ this._propagate("stop", event);
+
+ if (this._helper) this.helper.remove();
+ return false;
+
+ },
+
+ _updateVirtualBoundaries: function(forceAspectRatio) {
+ var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b;
+
+ b = {
+ minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
+ maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+ minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
+ maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
+ };
+
+ if(this._aspectRatio || forceAspectRatio) {
+ // We want to create an enclosing box whose aspect ration is the requested one
+ // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
+ pMinWidth = b.minHeight * this.aspectRatio;
+ pMinHeight = b.minWidth / this.aspectRatio;
+ pMaxWidth = b.maxHeight * this.aspectRatio;
+ pMaxHeight = b.maxWidth / this.aspectRatio;
+
+ if(pMinWidth > b.minWidth) b.minWidth = pMinWidth;
+ if(pMinHeight > b.minHeight) b.minHeight = pMinHeight;
+ if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth;
+ if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight;
+ }
+ this._vBoundaries = b;
+ },
+
+ _updateCache: function(data) {
+ var o = this.options;
+ this.offset = this.helper.offset();
+ if (isNumber(data.left)) this.position.left = data.left;
+ if (isNumber(data.top)) this.position.top = data.top;
+ if (isNumber(data.height)) this.size.height = data.height;
+ if (isNumber(data.width)) this.size.width = data.width;
+ },
+
+ _updateRatio: function(data, event) {
+
+ var o = this.options, cpos = this.position, csize = this.size, a = this.axis;
+
+ if (isNumber(data.height)) data.width = (data.height * this.aspectRatio);
+ else if (isNumber(data.width)) data.height = (data.width / this.aspectRatio);
+
+ if (a == 'sw') {
+ data.left = cpos.left + (csize.width - data.width);
+ data.top = null;
+ }
+ if (a == 'nw') {
+ data.top = cpos.top + (csize.height - data.height);
+ data.left = cpos.left + (csize.width - data.width);
+ }
+
+ return data;
+ },
+
+ _respectSize: function(data, event) {
+
+ var el = this.helper, o = this._vBoundaries, pRatio = this._aspectRatio || event.shiftKey, a = this.axis,
+ ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+ isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height);
+
+ if (isminw) data.width = o.minWidth;
+ if (isminh) data.height = o.minHeight;
+ if (ismaxw) data.width = o.maxWidth;
+ if (ismaxh) data.height = o.maxHeight;
+
+ var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height;
+ var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+
+ if (isminw && cw) data.left = dw - o.minWidth;
+ if (ismaxw && cw) data.left = dw - o.maxWidth;
+ if (isminh && ch) data.top = dh - o.minHeight;
+ if (ismaxh && ch) data.top = dh - o.maxHeight;
+
+ // fixing jump error on top/left - bug #2330
+ var isNotwh = !data.width && !data.height;
+ if (isNotwh && !data.left && data.top) data.top = null;
+ else if (isNotwh && !data.top && data.left) data.left = null;
+
+ return data;
+ },
+
+ _proportionallyResize: function() {
+
+ var o = this.options;
+ if (!this._proportionallyResizeElements.length) return;
+ var element = this.helper || this.element;
+
+ for (var i=0; i < this._proportionallyResizeElements.length; i++) {
+
+ var prel = this._proportionallyResizeElements[i];
+
+ if (!this.borderDif) {
+ var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')],
+ p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')];
+
+ this.borderDif = $.map(b, function(v, i) {
+ var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0;
+ return border + padding;
+ });
+ }
+
+ if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length)))
+ continue;
+
+ prel.css({
+ height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
+ width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
+ });
+
+ };
+
+ },
+
+ _renderProxy: function() {
+
+ var el = this.element, o = this.options;
+ this.elementOffset = el.offset();
+
+ if(this._helper) {
+
+ this.helper = this.helper || $('<div style="overflow:hidden;"></div>');
+
+ // fix ie6 offset TODO: This seems broken
+ var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0),
+ pxyoffset = ( ie6 ? 2 : -1 );
+
+ this.helper.addClass(this._helper).css({
+ width: this.element.outerWidth() + pxyoffset,
+ height: this.element.outerHeight() + pxyoffset,
+ position: 'absolute',
+ left: this.elementOffset.left - ie6offset +'px',
+ top: this.elementOffset.top - ie6offset +'px',
+ zIndex: ++o.zIndex //TODO: Don't modify option
+ });
+
+ this.helper
+ .appendTo("body")
+ .disableSelection();
+
+ } else {
+ this.helper = this.element;
+ }
+
+ },
+
+ _change: {
+ e: function(event, dx, dy) {
+ return { width: this.originalSize.width + dx };
+ },
+ w: function(event, dx, dy) {
+ var o = this.options, cs = this.originalSize, sp = this.originalPosition;
+ return { left: sp.left + dx, width: cs.width - dx };
+ },
+ n: function(event, dx, dy) {
+ var o = this.options, cs = this.originalSize, sp = this.originalPosition;
+ return { top: sp.top + dy, height: cs.height - dy };
+ },
+ s: function(event, dx, dy) {
+ return { height: this.originalSize.height + dy };
+ },
+ se: function(event, dx, dy) {
+ return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+ },
+ sw: function(event, dx, dy) {
+ return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+ },
+ ne: function(event, dx, dy) {
+ return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+ },
+ nw: function(event, dx, dy) {
+ return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+ }
+ },
+
+ _propagate: function(n, event) {
+ $.ui.plugin.call(this, n, [event, this.ui()]);
+ (n != "resize" && this._trigger(n, event, this.ui()));
+ },
+
+ plugins: {},
+
+ ui: function() {
+ return {
+ originalElement: this.originalElement,
+ element: this.element,
+ helper: this.helper,
+ position: this.position,
+ size: this.size,
+ originalSize: this.originalSize,
+ originalPosition: this.originalPosition
+ };
+ }
+
+});
+
+$.extend($.ui.resizable, {
+ version: "1.8.16"
+});
+
+/*
+ * Resizable Extensions
+ */
+
+$.ui.plugin.add("resizable", "alsoResize", {
+
+ start: function (event, ui) {
+ var self = $(this).data("resizable"), o = self.options;
+
+ var _store = function (exp) {
+ $(exp).each(function() {
+ var el = $(this);
+ el.data("resizable-alsoresize", {
+ width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+ left: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10),
+ position: el.css('position') // to reset Opera on stop()
+ });
+ });
+ };
+
+ if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) {
+ if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
+ else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
+ }else{
+ _store(o.alsoResize);
+ }
+ },
+
+ resize: function (event, ui) {
+ var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition;
+
+ var delta = {
+ height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0,
+ top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0
+ },
+
+ _alsoResize = function (exp, c) {
+ $(exp).each(function() {
+ var el = $(this), start = $(this).data("resizable-alsoresize"), style = {},
+ css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left'];
+
+ $.each(css, function (i, prop) {
+ var sum = (start[prop]||0) + (delta[prop]||0);
+ if (sum && sum >= 0)
+ style[prop] = sum || null;
+ });
+
+ // Opera fixing relative position
+ if ($.browser.opera && /relative/.test(el.css('position'))) {
+ self._revertToRelativePosition = true;
+ el.css({ position: 'absolute', top: 'auto', left: 'auto' });
+ }
+
+ el.css(style);
+ });
+ };
+
+ if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
+ $.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
+ }else{
+ _alsoResize(o.alsoResize);
+ }
+ },
+
+ stop: function (event, ui) {
+ var self = $(this).data("resizable"), o = self.options;
+
+ var _reset = function (exp) {
+ $(exp).each(function() {
+ var el = $(this);
+ // reset position for Opera - no need to verify it was changed
+ el.css({ position: el.data("resizable-alsoresize").position });
+ });
+ };
+
+ if (self._revertToRelativePosition) {
+ self._revertToRelativePosition = false;
+ if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
+ $.each(o.alsoResize, function (exp) { _reset(exp); });
+ }else{
+ _reset(o.alsoResize);
+ }
+ }
+
+ $(this).removeData("resizable-alsoresize");
+ }
+});
+
+$.ui.plugin.add("resizable", "animate", {
+
+ stop: function(event, ui) {
+ var self = $(this).data("resizable"), o = self.options;
+
+ var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+ soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
+ soffsetw = ista ? 0 : self.sizeDiff.width;
+
+ var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) },
+ left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
+ top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
+
+ self.element.animate(
+ $.extend(style, top && left ? { top: top, left: left } : {}), {
+ duration: o.animateDuration,
+ easing: o.animateEasing,
+ step: function() {
+
+ var data = {
+ width: parseInt(self.element.css('width'), 10),
+ height: parseInt(self.element.css('height'), 10),
+ top: parseInt(self.element.css('top'), 10),
+ left: parseInt(self.element.css('left'), 10)
+ };
+
+ if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height });
+
+ // propagating resize, and updating values for each animation step
+ self._updateCache(data);
+ self._propagate("resize", event);
+
+ }
+ }
+ );
+ }
+
+});
+
+$.ui.plugin.add("resizable", "containment", {
+
+ start: function(event, ui) {
+ var self = $(this).data("resizable"), o = self.options, el = self.element;
+ var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
+ if (!ce) return;
+
+ self.containerElement = $(ce);
+
+ if (/document/.test(oc) || oc == document) {
+ self.containerOffset = { left: 0, top: 0 };
+ self.containerPosition = { left: 0, top: 0 };
+
+ self.parentData = {
+ element: $(document), left: 0, top: 0,
+ width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
+ };
+ }
+
+ // i'm a node, so compute top, left, right, bottom
+ else {
+ var element = $(ce), p = [];
+ $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
+
+ self.containerOffset = element.offset();
+ self.containerPosition = element.position();
+ self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
+
+ var co = self.containerOffset, ch = self.containerSize.height, cw = self.containerSize.width,
+ width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
+
+ self.parentData = {
+ element: ce, left: co.left, top: co.top, width: width, height: height
+ };
+ }
+ },
+
+ resize: function(event, ui) {
+ var self = $(this).data("resizable"), o = self.options,
+ ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position,
+ pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement;
+
+ if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co;
+
+ if (cp.left < (self._helper ? co.left : 0)) {
+ self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left));
+ if (pRatio) self.size.height = self.size.width / o.aspectRatio;
+ self.position.left = o.helper ? co.left : 0;
+ }
+
+ if (cp.top < (self._helper ? co.top : 0)) {
+ self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top);
+ if (pRatio) self.size.width = self.size.height * o.aspectRatio;
+ self.position.top = self._helper ? co.top : 0;
+ }
+
+ self.offset.left = self.parentData.left+self.position.left;
+ self.offset.top = self.parentData.top+self.position.top;
+
+ var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ),
+ hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height );
+
+ var isParent = self.containerElement.get(0) == self.element.parent().get(0),
+ isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position'));
+
+ if(isParent && isOffsetRelative) woset -= self.parentData.left;
+
+ if (woset + self.size.width >= self.parentData.width) {
+ self.size.width = self.parentData.width - woset;
+ if (pRatio) self.size.height = self.size.width / self.aspectRatio;
+ }
+
+ if (hoset + self.size.height >= self.parentData.height) {
+ self.size.height = self.parentData.height - hoset;
+ if (pRatio) self.size.width = self.size.height * self.aspectRatio;
+ }
+ },
+
+ stop: function(event, ui){
+ var self = $(this).data("resizable"), o = self.options, cp = self.position,
+ co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement;
+
+ var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height;
+
+ if (self._helper && !o.animate && (/relative/).test(ce.css('position')))
+ $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+
+ if (self._helper && !o.animate && (/static/).test(ce.css('position')))
+ $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+
+ }
+});
+
+$.ui.plugin.add("resizable", "ghost", {
+
+ start: function(event, ui) {
+
+ var self = $(this).data("resizable"), o = self.options, cs = self.size;
+
+ self.ghost = self.originalElement.clone();
+ self.ghost
+ .css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
+ .addClass('ui-resizable-ghost')
+ .addClass(typeof o.ghost == 'string' ? o.ghost : '');
+
+ self.ghost.appendTo(self.helper);
+
+ },
+
+ resize: function(event, ui){
+ var self = $(this).data("resizable"), o = self.options;
+ if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width });
+ },
+
+ stop: function(event, ui){
+ var self = $(this).data("resizable"), o = self.options;
+ if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0));
+ }
+
+});
+
+$.ui.plugin.add("resizable", "grid", {
+
+ resize: function(event, ui) {
+ var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey;
+ o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid;
+ var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1);
+
+ if (/^(se|s|e)$/.test(a)) {
+ self.size.width = os.width + ox;
+ self.size.height = os.height + oy;
+ }
+ else if (/^(ne)$/.test(a)) {
+ self.size.width = os.width + ox;
+ self.size.height = os.height + oy;
+ self.position.top = op.top - oy;
+ }
+ else if (/^(sw)$/.test(a)) {
+ self.size.width = os.width + ox;
+ self.size.height = os.height + oy;
+ self.position.left = op.left - ox;
+ }
+ else {
+ self.size.width = os.width + ox;
+ self.size.height = os.height + oy;
+ self.position.top = op.top - oy;
+ self.position.left = op.left - ox;
+ }
+ }
+
+});
+
+var num = function(v) {
+ return parseInt(v, 10) || 0;
+};
+
+var isNumber = function(value) {
+ return !isNaN(parseInt(value, 10));
+};
+
+})(jQuery);
+/*
+ * jQuery UI Selectable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+$.widget("ui.selectable", $.ui.mouse, {
+ options: {
+ appendTo: 'body',
+ autoRefresh: true,
+ distance: 0,
+ filter: '*',
+ tolerance: 'touch'
+ },
+ _create: function() {
+ var self = this;
+
+ this.element.addClass("ui-selectable");
+
+ this.dragged = false;
+
+ // cache selectee children based on filter
+ var selectees;
+ this.refresh = function() {
+ selectees = $(self.options.filter, self.element[0]);
+ selectees.each(function() {
+ var $this = $(this);
+ var pos = $this.offset();
+ $.data(this, "selectable-item", {
+ element: this,
+ $element: $this,
+ left: pos.left,
+ top: pos.top,
+ right: pos.left + $this.outerWidth(),
+ bottom: pos.top + $this.outerHeight(),
+ startselected: false,
+ selected: $this.hasClass('ui-selected'),
+ selecting: $this.hasClass('ui-selecting'),
+ unselecting: $this.hasClass('ui-unselecting')
+ });
+ });
+ };
+ this.refresh();
+
+ this.selectees = selectees.addClass("ui-selectee");
+
+ this._mouseInit();
+
+ this.helper = $("<div class='ui-selectable-helper'></div>");
+ },
+
+ destroy: function() {
+ this.selectees
+ .removeClass("ui-selectee")
+ .removeData("selectable-item");
+ this.element
+ .removeClass("ui-selectable ui-selectable-disabled")
+ .removeData("selectable")
+ .unbind(".selectable");
+ this._mouseDestroy();
+
+ return this;
+ },
+
+ _mouseStart: function(event) {
+ var self = this;
+
+ this.opos = [event.pageX, event.pageY];
+
+ if (this.options.disabled)
+ return;
+
+ var options = this.options;
+
+ this.selectees = $(options.filter, this.element[0]);
+
+ this._trigger("start", event);
+
+ $(options.appendTo).append(this.helper);
+ // position helper (lasso)
+ this.helper.css({
+ "left": event.clientX,
+ "top": event.clientY,
+ "width": 0,
+ "height": 0
+ });
+
+ if (options.autoRefresh) {
+ this.refresh();
+ }
+
+ this.selectees.filter('.ui-selected').each(function() {
+ var selectee = $.data(this, "selectable-item");
+ selectee.startselected = true;
+ if (!event.metaKey) {
+ selectee.$element.removeClass('ui-selected');
+ selectee.selected = false;
+ selectee.$element.addClass('ui-unselecting');
+ selectee.unselecting = true;
+ // selectable UNSELECTING callback
+ self._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ });
+
+ $(event.target).parents().andSelf().each(function() {
+ var selectee = $.data(this, "selectable-item");
+ if (selectee) {
+ var doSelect = !event.metaKey || !selectee.$element.hasClass('ui-selected');
+ selectee.$element
+ .removeClass(doSelect ? "ui-unselecting" : "ui-selected")
+ .addClass(doSelect ? "ui-selecting" : "ui-unselecting");
+ selectee.unselecting = !doSelect;
+ selectee.selecting = doSelect;
+ selectee.selected = doSelect;
+ // selectable (UN)SELECTING callback
+ if (doSelect) {
+ self._trigger("selecting", event, {
+ selecting: selectee.element
+ });
+ } else {
+ self._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ return false;
+ }
+ });
+
+ },
+
+ _mouseDrag: function(event) {
+ var self = this;
+ this.dragged = true;
+
+ if (this.options.disabled)
+ return;
+
+ var options = this.options;
+
+ var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY;
+ if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; }
+ if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; }
+ this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
+
+ this.selectees.each(function() {
+ var selectee = $.data(this, "selectable-item");
+ //prevent helper from being selected if appendTo: selectable
+ if (!selectee || selectee.element == self.element[0])
+ return;
+ var hit = false;
+ if (options.tolerance == 'touch') {
+ hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
+ } else if (options.tolerance == 'fit') {
+ hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
+ }
+
+ if (hit) {
+ // SELECT
+ if (selectee.selected) {
+ selectee.$element.removeClass('ui-selected');
+ selectee.selected = false;
+ }
+ if (selectee.unselecting) {
+ selectee.$element.removeClass('ui-unselecting');
+ selectee.unselecting = false;
+ }
+ if (!selectee.selecting) {
+ selectee.$element.addClass('ui-selecting');
+ selectee.selecting = true;
+ // selectable SELECTING callback
+ self._trigger("selecting", event, {
+ selecting: selectee.element
+ });
+ }
+ } else {
+ // UNSELECT
+ if (selectee.selecting) {
+ if (event.metaKey && selectee.startselected) {
+ selectee.$element.removeClass('ui-selecting');
+ selectee.selecting = false;
+ selectee.$element.addClass('ui-selected');
+ selectee.selected = true;
+ } else {
+ selectee.$element.removeClass('ui-selecting');
+ selectee.selecting = false;
+ if (selectee.startselected) {
+ selectee.$element.addClass('ui-unselecting');
+ selectee.unselecting = true;
+ }
+ // selectable UNSELECTING callback
+ self._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ }
+ if (selectee.selected) {
+ if (!event.metaKey && !selectee.startselected) {
+ selectee.$element.removeClass('ui-selected');
+ selectee.selected = false;
+
+ selectee.$element.addClass('ui-unselecting');
+ selectee.unselecting = true;
+ // selectable UNSELECTING callback
+ self._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ }
+ }
+ });
+
+ return false;
+ },
+
+ _mouseStop: function(event) {
+ var self = this;
+
+ this.dragged = false;
+
+ var options = this.options;
+
+ $('.ui-unselecting', this.element[0]).each(function() {
+ var selectee = $.data(this, "selectable-item");
+ selectee.$element.removeClass('ui-unselecting');
+ selectee.unselecting = false;
+ selectee.startselected = false;
+ self._trigger("unselected", event, {
+ unselected: selectee.element
+ });
+ });
+ $('.ui-selecting', this.element[0]).each(function() {
+ var selectee = $.data(this, "selectable-item");
+ selectee.$element.removeClass('ui-selecting').addClass('ui-selected');
+ selectee.selecting = false;
+ selectee.selected = true;
+ selectee.startselected = true;
+ self._trigger("selected", event, {
+ selected: selectee.element
+ });
+ });
+ this._trigger("stop", event);
+
+ this.helper.remove();
+
+ return false;
+ }
+
+});
+
+$.extend($.ui.selectable, {
+ version: "1.8.16"
+});
+
+})(jQuery);
+/*
+ * jQuery UI Sortable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Sortables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+$.widget("ui.sortable", $.ui.mouse, {
+ widgetEventPrefix: "sort",
+ options: {
+ appendTo: "parent",
+ axis: false,
+ connectWith: false,
+ containment: false,
+ cursor: 'auto',
+ cursorAt: false,
+ dropOnEmpty: true,
+ forcePlaceholderSize: false,
+ forceHelperSize: false,
+ grid: false,
+ handle: false,
+ helper: "original",
+ items: '> *',
+ opacity: false,
+ placeholder: false,
+ revert: false,
+ scroll: true,
+ scrollSensitivity: 20,
+ scrollSpeed: 20,
+ scope: "default",
+ tolerance: "intersect",
+ zIndex: 1000
+ },
+ _create: function() {
+
+ var o = this.options;
+ this.containerCache = {};
+ this.element.addClass("ui-sortable");
+
+ //Get the items
+ this.refresh();
+
+ //Let's determine if the items are being displayed horizontally
+ this.floating = this.items.length ? o.axis === 'x' || (/left|right/).test(this.items[0].item.css('float')) || (/inline|table-cell/).test(this.items[0].item.css('display')) : false;
+
+ //Let's determine the parent's offset
+ this.offset = this.element.offset();
+
+ //Initialize mouse events for interaction
+ this._mouseInit();
+
+ },
+
+ destroy: function() {
+ this.element
+ .removeClass("ui-sortable ui-sortable-disabled")
+ .removeData("sortable")
+ .unbind(".sortable");
+ this._mouseDestroy();
+
+ for ( var i = this.items.length - 1; i >= 0; i-- )
+ this.items[i].item.removeData("sortable-item");
+
+ return this;
+ },
+
+ _setOption: function(key, value){
+ if ( key === "disabled" ) {
+ this.options[ key ] = value;
+
+ this.widget()
+ [ value ? "addClass" : "removeClass"]( "ui-sortable-disabled" );
+ } else {
+ // Don't call widget base _setOption for disable as it adds ui-state-disabled class
+ $.Widget.prototype._setOption.apply(this, arguments);
+ }
+ },
+
+ _mouseCapture: function(event, overrideHandle) {
+
+ if (this.reverting) {
+ return false;
+ }
+
+ if(this.options.disabled || this.options.type == 'static') return false;
+
+ //We have to refresh the items data once first
+ this._refreshItems(event);
+
+ //Find out if the clicked node (or one of its parents) is a actual item in this.items
+ var currentItem = null, self = this, nodes = $(event.target).parents().each(function() {
+ if($.data(this, 'sortable-item') == self) {
+ currentItem = $(this);
+ return false;
+ }
+ });
+ if($.data(event.target, 'sortable-item') == self) currentItem = $(event.target);
+
+ if(!currentItem) return false;
+ if(this.options.handle && !overrideHandle) {
+ var validHandle = false;
+
+ $(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; });
+ if(!validHandle) return false;
+ }
+
+ this.currentItem = currentItem;
+ this._removeCurrentsFromItems();
+ return true;
+
+ },
+
+ _mouseStart: function(event, overrideHandle, noActivation) {
+
+ var o = this.options, self = this;
+ this.currentContainer = this;
+
+ //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
+ this.refreshPositions();
+
+ //Create and append the visible helper
+ this.helper = this._createHelper(event);
+
+ //Cache the helper size
+ this._cacheHelperProportions();
+
+ /*
+ * - Position generation -
+ * This block generates everything position related - it's the core of draggables.
+ */
+
+ //Cache the margins of the original element
+ this._cacheMargins();
+
+ //Get the next scrolling parent
+ this.scrollParent = this.helper.scrollParent();
+
+ //The element's absolute position on the page minus margins
+ this.offset = this.currentItem.offset();
+ this.offset = {
+ top: this.offset.top - this.margins.top,
+ left: this.offset.left - this.margins.left
+ };
+
+ // Only after we got the offset, we can change the helper's position to absolute
+ // TODO: Still need to figure out a way to make relative sorting possible
+ this.helper.css("position", "absolute");
+ this.cssPosition = this.helper.css("position");
+
+ $.extend(this.offset, {
+ click: { //Where the click happened, relative to the element
+ left: event.pageX - this.offset.left,
+ top: event.pageY - this.offset.top
+ },
+ parent: this._getParentOffset(),
+ relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+ });
+
+ //Generate the original position
+ this.originalPosition = this._generatePosition(event);
+ this.originalPageX = event.pageX;
+ this.originalPageY = event.pageY;
+
+ //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
+ (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+ //Cache the former DOM position
+ this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
+
+ //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
+ if(this.helper[0] != this.currentItem[0]) {
+ this.currentItem.hide();
+ }
+
+ //Create the placeholder
+ this._createPlaceholder();
+
+ //Set a containment if given in the options
+ if(o.containment)
+ this._setContainment();
+
+ if(o.cursor) { // cursor option
+ if ($('body').css("cursor")) this._storedCursor = $('body').css("cursor");
+ $('body').css("cursor", o.cursor);
+ }
+
+ if(o.opacity) { // opacity option
+ if (this.helper.css("opacity")) this._storedOpacity = this.helper.css("opacity");
+ this.helper.css("opacity", o.opacity);
+ }
+
+ if(o.zIndex) { // zIndex option
+ if (this.helper.css("zIndex")) this._storedZIndex = this.helper.css("zIndex");
+ this.helper.css("zIndex", o.zIndex);
+ }
+
+ //Prepare scrolling
+ if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML')
+ this.overflowOffset = this.scrollParent.offset();
+
+ //Call callbacks
+ this._trigger("start", event, this._uiHash());
+
+ //Recache the helper size
+ if(!this._preserveHelperProportions)
+ this._cacheHelperProportions();
+
+
+ //Post 'activate' events to possible containers
+ if(!noActivation) {
+ for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, self._uiHash(this)); }
+ }
+
+ //Prepare possible droppables
+ if($.ui.ddmanager)
+ $.ui.ddmanager.current = this;
+
+ if ($.ui.ddmanager && !o.dropBehaviour)
+ $.ui.ddmanager.prepareOffsets(this, event);
+
+ this.dragging = true;
+
+ this.helper.addClass("ui-sortable-helper");
+ this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+ return true;
+
+ },
+
+ _mouseDrag: function(event) {
+
+ //Compute the helpers position
+ this.position = this._generatePosition(event);
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ if (!this.lastPositionAbs) {
+ this.lastPositionAbs = this.positionAbs;
+ }
+
+ //Do scrolling
+ if(this.options.scroll) {
+ var o = this.options, scrolled = false;
+ if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') {
+
+ if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+ else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity)
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+
+ if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+ else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity)
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+
+ } else {
+
+ if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
+ scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+ else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
+ scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+
+ if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
+ scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+ else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
+ scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+
+ }
+
+ if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+
+ //Regenerate the absolute position used for position checks
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ //Set the helper position
+ if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
+ if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
+
+ //Rearrange
+ for (var i = this.items.length - 1; i >= 0; i--) {
+
+ //Cache variables and intersection, continue if no intersection
+ var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item);
+ if (!intersection) continue;
+
+ if(itemElement != this.currentItem[0] //cannot intersect with itself
+ && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before
+ && !$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked
+ && (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true)
+ //&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container
+ ) {
+
+ this.direction = intersection == 1 ? "down" : "up";
+
+ if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) {
+ this._rearrange(event, item);
+ } else {
+ break;
+ }
+
+ this._trigger("change", event, this._uiHash());
+ break;
+ }
+ }
+
+ //Post events to containers
+ this._contactContainers(event);
+
+ //Interconnect with droppables
+ if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
+
+ //Call callbacks
+ this._trigger('sort', event, this._uiHash());
+
+ this.lastPositionAbs = this.positionAbs;
+ return false;
+
+ },
+
+ _mouseStop: function(event, noPropagation) {
+
+ if(!event) return;
+
+ //If we are using droppables, inform the manager about the drop
+ if ($.ui.ddmanager && !this.options.dropBehaviour)
+ $.ui.ddmanager.drop(this, event);
+
+ if(this.options.revert) {
+ var self = this;
+ var cur = self.placeholder.offset();
+
+ self.reverting = true;
+
+ $(this.helper).animate({
+ left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft),
+ top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop)
+ }, parseInt(this.options.revert, 10) || 500, function() {
+ self._clear(event);
+ });
+ } else {
+ this._clear(event, noPropagation);
+ }
+
+ return false;
+
+ },
+
+ cancel: function() {
+
+ var self = this;
+
+ if(this.dragging) {
+
+ this._mouseUp({ target: null });
+
+ if(this.options.helper == "original")
+ this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+ else
+ this.currentItem.show();
+
+ //Post deactivating events to containers
+ for (var i = this.containers.length - 1; i >= 0; i--){
+ this.containers[i]._trigger("deactivate", null, self._uiHash(this));
+ if(this.containers[i].containerCache.over) {
+ this.containers[i]._trigger("out", null, self._uiHash(this));
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ }
+
+ if (this.placeholder) {
+ //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+ if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+ if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove();
+
+ $.extend(this, {
+ helper: null,
+ dragging: false,
+ reverting: false,
+ _noFinalSort: null
+ });
+
+ if(this.domPosition.prev) {
+ $(this.domPosition.prev).after(this.currentItem);
+ } else {
+ $(this.domPosition.parent).prepend(this.currentItem);
+ }
+ }
+
+ return this;
+
+ },
+
+ serialize: function(o) {
+
+ var items = this._getItemsAsjQuery(o && o.connected);
+ var str = []; o = o || {};
+
+ $(items).each(function() {
+ var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
+ if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2]));
+ });
+
+ if(!str.length && o.key) {
+ str.push(o.key + '=');
+ }
+
+ return str.join('&');
+
+ },
+
+ toArray: function(o) {
+
+ var items = this._getItemsAsjQuery(o && o.connected);
+ var ret = []; o = o || {};
+
+ items.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); });
+ return ret;
+
+ },
+
+ /* Be careful with the following core functions */
+ _intersectsWith: function(item) {
+
+ var x1 = this.positionAbs.left,
+ x2 = x1 + this.helperProportions.width,
+ y1 = this.positionAbs.top,
+ y2 = y1 + this.helperProportions.height;
+
+ var l = item.left,
+ r = l + item.width,
+ t = item.top,
+ b = t + item.height;
+
+ var dyClick = this.offset.click.top,
+ dxClick = this.offset.click.left;
+
+ var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r;
+
+ if( this.options.tolerance == "pointer"
+ || this.options.forcePointerForContainers
+ || (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])
+ ) {
+ return isOverElement;
+ } else {
+
+ return (l < x1 + (this.helperProportions.width / 2) // Right Half
+ && x2 - (this.helperProportions.width / 2) < r // Left Half
+ && t < y1 + (this.helperProportions.height / 2) // Bottom Half
+ && y2 - (this.helperProportions.height / 2) < b ); // Top Half
+
+ }
+ },
+
+ _intersectsWithPointer: function(item) {
+
+ var isOverElementHeight = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+ isOverElementWidth = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+ isOverElement = isOverElementHeight && isOverElementWidth,
+ verticalDirection = this._getDragVerticalDirection(),
+ horizontalDirection = this._getDragHorizontalDirection();
+
+ if (!isOverElement)
+ return false;
+
+ return this.floating ?
+ ( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 )
+ : ( verticalDirection && (verticalDirection == "down" ? 2 : 1) );
+
+ },
+
+ _intersectsWithSides: function(item) {
+
+ var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
+ isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
+ verticalDirection = this._getDragVerticalDirection(),
+ horizontalDirection = this._getDragHorizontalDirection();
+
+ if (this.floating && horizontalDirection) {
+ return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf));
+ } else {
+ return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf));
+ }
+
+ },
+
+ _getDragVerticalDirection: function() {
+ var delta = this.positionAbs.top - this.lastPositionAbs.top;
+ return delta != 0 && (delta > 0 ? "down" : "up");
+ },
+
+ _getDragHorizontalDirection: function() {
+ var delta = this.positionAbs.left - this.lastPositionAbs.left;
+ return delta != 0 && (delta > 0 ? "right" : "left");
+ },
+
+ refresh: function(event) {
+ this._refreshItems(event);
+ this.refreshPositions();
+ return this;
+ },
+
+ _connectWith: function() {
+ var options = this.options;
+ return options.connectWith.constructor == String
+ ? [options.connectWith]
+ : options.connectWith;
+ },
+
+ _getItemsAsjQuery: function(connected) {
+
+ var self = this;
+ var items = [];
+ var queries = [];
+ var connectWith = this._connectWith();
+
+ if(connectWith && connected) {
+ for (var i = connectWith.length - 1; i >= 0; i--){
+ var cur = $(connectWith[i]);
+ for (var j = cur.length - 1; j >= 0; j--){
+ var inst = $.data(cur[j], 'sortable');
+ if(inst && inst != this && !inst.options.disabled) {
+ queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), inst]);
+ }
+ };
+ };
+ }
+
+ queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), this]);
+
+ for (var i = queries.length - 1; i >= 0; i--){
+ queries[i][0].each(function() {
+ items.push(this);
+ });
+ };
+
+ return $(items);
+
+ },
+
+ _removeCurrentsFromItems: function() {
+
+ var list = this.currentItem.find(":data(sortable-item)");
+
+ for (var i=0; i < this.items.length; i++) {
+
+ for (var j=0; j < list.length; j++) {
+ if(list[j] == this.items[i].item[0])
+ this.items.splice(i,1);
+ };
+
+ };
+
+ },
+
+ _refreshItems: function(event) {
+
+ this.items = [];
+ this.containers = [this];
+ var items = this.items;
+ var self = this;
+ var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]];
+ var connectWith = this._connectWith();
+
+ if(connectWith) {
+ for (var i = connectWith.length - 1; i >= 0; i--){
+ var cur = $(connectWith[i]);
+ for (var j = cur.length - 1; j >= 0; j--){
+ var inst = $.data(cur[j], 'sortable');
+ if(inst && inst != this && !inst.options.disabled) {
+ queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
+ this.containers.push(inst);
+ }
+ };
+ };
+ }
+
+ for (var i = queries.length - 1; i >= 0; i--) {
+ var targetData = queries[i][1];
+ var _queries = queries[i][0];
+
+ for (var j=0, queriesLength = _queries.length; j < queriesLength; j++) {
+ var item = $(_queries[j]);
+
+ item.data('sortable-item', targetData); // Data for target checking (mouse manager)
+
+ items.push({
+ item: item,
+ instance: targetData,
+ width: 0, height: 0,
+ left: 0, top: 0
+ });
+ };
+ };
+
+ },
+
+ refreshPositions: function(fast) {
+
+ //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
+ if(this.offsetParent && this.helper) {
+ this.offset.parent = this._getParentOffset();
+ }
+
+ for (var i = this.items.length - 1; i >= 0; i--){
+ var item = this.items[i];
+
+ //We ignore calculating positions of all connected containers when we're not over them
+ if(item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0])
+ continue;
+
+ var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
+
+ if (!fast) {
+ item.width = t.outerWidth();
+ item.height = t.outerHeight();
+ }
+
+ var p = t.offset();
+ item.left = p.left;
+ item.top = p.top;
+ };
+
+ if(this.options.custom && this.options.custom.refreshContainers) {
+ this.options.custom.refreshContainers.call(this);
+ } else {
+ for (var i = this.containers.length - 1; i >= 0; i--){
+ var p = this.containers[i].element.offset();
+ this.containers[i].containerCache.left = p.left;
+ this.containers[i].containerCache.top = p.top;
+ this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
+ this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+ };
+ }
+
+ return this;
+ },
+
+ _createPlaceholder: function(that) {
+
+ var self = that || this, o = self.options;
+
+ if(!o.placeholder || o.placeholder.constructor == String) {
+ var className = o.placeholder;
+ o.placeholder = {
+ element: function() {
+
+ var el = $(document.createElement(self.currentItem[0].nodeName))
+ .addClass(className || self.currentItem[0].className+" ui-sortable-placeholder")
+ .removeClass("ui-sortable-helper")[0];
+
+ if(!className)
+ el.style.visibility = "hidden";
+
+ return el;
+ },
+ update: function(container, p) {
+
+ // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
+ // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
+ if(className && !o.forcePlaceholderSize) return;
+
+ //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
+ if(!p.height()) { p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10)); };
+ if(!p.width()) { p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10)); };
+ }
+ };
+ }
+
+ //Create the placeholder
+ self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem));
+
+ //Append it after the actual current item
+ self.currentItem.after(self.placeholder);
+
+ //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+ o.placeholder.update(self, self.placeholder);
+
+ },
+
+ _contactContainers: function(event) {
+
+ // get innermost container that intersects with item
+ var innermostContainer = null, innermostIndex = null;
+
+
+ for (var i = this.containers.length - 1; i >= 0; i--){
+
+ // never consider a container that's located within the item itself
+ if($.ui.contains(this.currentItem[0], this.containers[i].element[0]))
+ continue;
+
+ if(this._intersectsWith(this.containers[i].containerCache)) {
+
+ // if we've already found a container and it's more "inner" than this, then continue
+ if(innermostContainer && $.ui.contains(this.containers[i].element[0], innermostContainer.element[0]))
+ continue;
+
+ innermostContainer = this.containers[i];
+ innermostIndex = i;
+
+ } else {
+ // container doesn't intersect. trigger "out" event if necessary
+ if(this.containers[i].containerCache.over) {
+ this.containers[i]._trigger("out", event, this._uiHash(this));
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ }
+
+ // if no intersecting containers found, return
+ if(!innermostContainer) return;
+
+ // move the item into the container if it's not there already
+ if(this.containers.length === 1) {
+ this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+ this.containers[innermostIndex].containerCache.over = 1;
+ } else if(this.currentContainer != this.containers[innermostIndex]) {
+
+ //When entering a new container, we will find the item with the least distance and append our item near it
+ var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[innermostIndex].floating ? 'left' : 'top'];
+ for (var j = this.items.length - 1; j >= 0; j--) {
+ if(!$.ui.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) continue;
+ var cur = this.items[j][this.containers[innermostIndex].floating ? 'left' : 'top'];
+ if(Math.abs(cur - base) < dist) {
+ dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
+ }
+ }
+
+ if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled
+ return;
+
+ this.currentContainer = this.containers[innermostIndex];
+ itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
+ this._trigger("change", event, this._uiHash());
+ this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
+
+ //Update the placeholder
+ this.options.placeholder.update(this.currentContainer, this.placeholder);
+
+ this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+ this.containers[innermostIndex].containerCache.over = 1;
+ }
+
+
+ },
+
+ _createHelper: function(event) {
+
+ var o = this.options;
+ var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem);
+
+ if(!helper.parents('body').length) //Add the helper to the DOM if that didn't happen already
+ $(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
+
+ if(helper[0] == this.currentItem[0])
+ this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
+
+ if(helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width());
+ if(helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height());
+
+ return helper;
+
+ },
+
+ _adjustOffsetFromHelper: function(obj) {
+ if (typeof obj == 'string') {
+ obj = obj.split(' ');
+ }
+ if ($.isArray(obj)) {
+ obj = {left: +obj[0], top: +obj[1] || 0};
+ }
+ if ('left' in obj) {
+ this.offset.click.left = obj.left + this.margins.left;
+ }
+ if ('right' in obj) {
+ this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+ }
+ if ('top' in obj) {
+ this.offset.click.top = obj.top + this.margins.top;
+ }
+ if ('bottom' in obj) {
+ this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+ }
+ },
+
+ _getParentOffset: function() {
+
+
+ //Get the offsetParent and cache its position
+ this.offsetParent = this.helper.offsetParent();
+ var po = this.offsetParent.offset();
+
+ // This is a special case where we need to modify a offset calculated on start, since the following happened:
+ // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+ // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+ // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+ if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
+ po.left += this.scrollParent.scrollLeft();
+ po.top += this.scrollParent.scrollTop();
+ }
+
+ if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
+ || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
+ po = { top: 0, left: 0 };
+
+ return {
+ top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+ left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+ };
+
+ },
+
+ _getRelativeOffset: function() {
+
+ if(this.cssPosition == "relative") {
+ var p = this.currentItem.position();
+ return {
+ top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+ left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+ };
+ } else {
+ return { top: 0, left: 0 };
+ }
+
+ },
+
+ _cacheMargins: function() {
+ this.margins = {
+ left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
+ top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
+ };
+ },
+
+ _cacheHelperProportions: function() {
+ this.helperProportions = {
+ width: this.helper.outerWidth(),
+ height: this.helper.outerHeight()
+ };
+ },
+
+ _setContainment: function() {
+
+ var o = this.options;
+ if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
+ if(o.containment == 'document' || o.containment == 'window') this.containment = [
+ 0 - this.offset.relative.left - this.offset.parent.left,
+ 0 - this.offset.relative.top - this.offset.parent.top,
+ $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
+ ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+ ];
+
+ if(!(/^(document|window|parent)$/).test(o.containment)) {
+ var ce = $(o.containment)[0];
+ var co = $(o.containment).offset();
+ var over = ($(ce).css("overflow") != 'hidden');
+
+ this.containment = [
+ co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
+ co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
+ co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
+ co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
+ ];
+ }
+
+ },
+
+ _convertPositionTo: function(d, pos) {
+
+ if(!pos) pos = this.position;
+ var mod = d == "absolute" ? 1 : -1;
+ var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+ return {
+ top: (
+ pos.top // The absolute mouse position
+ + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent
+ + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border)
+ - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+ ),
+ left: (
+ pos.left // The absolute mouse position
+ + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent
+ + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border)
+ - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+ )
+ };
+
+ },
+
+ _generatePosition: function(event) {
+
+ var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+ // This is another very weird special case that only happens for relative elements:
+ // 1. If the css position is relative
+ // 2. and the scroll parent is the document or similar to the offset parent
+ // we have to refresh the relative offset during the scroll so there are no jumps
+ if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) {
+ this.offset.relative = this._getRelativeOffset();
+ }
+
+ var pageX = event.pageX;
+ var pageY = event.pageY;
+
+ /*
+ * - Position constraining -
+ * Constrain the position to a mix of grid, containment.
+ */
+
+ if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+
+ if(this.containment) {
+ if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;
+ if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;
+ if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;
+ if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;
+ }
+
+ if(o.grid) {
+ var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+ pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+ var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+ pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+ }
+
+ }
+
+ return {
+ top: (
+ pageY // The absolute mouse position
+ - this.offset.click.top // Click offset (relative to the element)
+ - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent
+ - this.offset.parent.top // The offsetParent's offset without borders (offset + border)
+ + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+ ),
+ left: (
+ pageX // The absolute mouse position
+ - this.offset.click.left // Click offset (relative to the element)
+ - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent
+ - this.offset.parent.left // The offsetParent's offset without borders (offset + border)
+ + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+ )
+ };
+
+ },
+
+ _rearrange: function(event, i, a, hardRefresh) {
+
+ a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling));
+
+ //Various things done here to improve the performance:
+ // 1. we create a setTimeout, that calls refreshPositions
+ // 2. on the instance, we have a counter variable, that get's higher after every append
+ // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
+ // 4. this lets only the last addition to the timeout stack through
+ this.counter = this.counter ? ++this.counter : 1;
+ var self = this, counter = this.counter;
+
+ window.setTimeout(function() {
+ if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+ },0);
+
+ },
+
+ _clear: function(event, noPropagation) {
+
+ this.reverting = false;
+ // We delay all events that have to be triggered to after the point where the placeholder has been removed and
+ // everything else normalized again
+ var delayedTriggers = [], self = this;
+
+ // We first have to update the dom position of the actual currentItem
+ // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
+ if(!this._noFinalSort && this.currentItem.parent().length) this.placeholder.before(this.currentItem);
+ this._noFinalSort = null;
+
+ if(this.helper[0] == this.currentItem[0]) {
+ for(var i in this._storedCSS) {
+ if(this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = '';
+ }
+ this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+ } else {
+ this.currentItem.show();
+ }
+
+ if(this.fromOutside && !noPropagation) delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
+ if((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
+ if(!$.ui.contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element
+ if(!noPropagation) delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
+ for (var i = this.containers.length - 1; i >= 0; i--){
+ if($.ui.contains(this.containers[i].element[0], this.currentItem[0]) && !noPropagation) {
+ delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.containers[i]));
+ delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.containers[i]));
+ }
+ };
+ };
+
+ //Post events to containers
+ for (var i = this.containers.length - 1; i >= 0; i--){
+ if(!noPropagation) delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); }; }).call(this, this.containers[i]));
+ if(this.containers[i].containerCache.over) {
+ delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); }; }).call(this, this.containers[i]));
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ //Do what was originally in plugins
+ if(this._storedCursor) $('body').css("cursor", this._storedCursor); //Reset cursor
+ if(this._storedOpacity) this.helper.css("opacity", this._storedOpacity); //Reset opacity
+ if(this._storedZIndex) this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex); //Reset z-index
+
+ this.dragging = false;
+ if(this.cancelHelperRemoval) {
+ if(!noPropagation) {
+ this._trigger("beforeStop", event, this._uiHash());
+ for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
+ this._trigger("stop", event, this._uiHash());
+ }
+ return false;
+ }
+
+ if(!noPropagation) this._trigger("beforeStop", event, this._uiHash());
+
+ //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+ this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+
+ if(this.helper[0] != this.currentItem[0]) this.helper.remove(); this.helper = null;
+
+ if(!noPropagation) {
+ for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
+ this._trigger("stop", event, this._uiHash());
+ }
+
+ this.fromOutside = false;
+ return true;
+
+ },
+
+ _trigger: function() {
+ if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
+ this.cancel();
+ }
+ },
+
+ _uiHash: function(inst) {
+ var self = inst || this;
+ return {
+ helper: self.helper,
+ placeholder: self.placeholder || $([]),
+ position: self.position,
+ originalPosition: self.originalPosition,
+ offset: self.positionAbs,
+ item: self.currentItem,
+ sender: inst ? inst.element : null
+ };
+ }
+
+});
+
+$.extend($.ui.sortable, {
+ version: "1.8.16"
+});
+
+})(jQuery);
+/*
+ * jQuery UI Effects 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/
+ */
+;jQuery.effects || (function($, undefined) {
+
+$.effects = {};
+
+
+
+/******************************************************************************/
+/****************************** COLOR ANIMATIONS ******************************/
+/******************************************************************************/
+
+// override the animation for color styles
+$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor',
+ 'borderRightColor', 'borderTopColor', 'borderColor', 'color', 'outlineColor'],
+function(i, attr) {
+ $.fx.step[attr] = function(fx) {
+ if (!fx.colorInit) {
+ fx.start = getColor(fx.elem, attr);
+ fx.end = getRGB(fx.end);
+ fx.colorInit = true;
+ }
+
+ fx.elem.style[attr] = 'rgb(' +
+ Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' +
+ Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' +
+ Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')';
+ };
+});
+
+// Color Conversion functions from highlightFade
+// By Blair Mitchelmore
+// http://jquery.offput.ca/highlightFade/
+
+// Parse strings looking for color tuples [255,255,255]
+function getRGB(color) {
+ var result;
+
+ // Check if we're already dealing with an array of colors
+ if ( color && color.constructor == Array && color.length == 3 )
+ return color;
+
+ // Look for rgb(num,num,num)
+ if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
+ return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)];
+
+ // Look for rgb(num%,num%,num%)
+ if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
+ return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];
+
+ // Look for #a0b1c2
+ if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
+ return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];
+
+ // Look for #fff
+ if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
+ return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];
+
+ // Look for rgba(0, 0, 0, 0) == transparent in Safari 3
+ if (result = /rgba\(0, 0, 0, 0\)/.exec(color))
+ return colors['transparent'];
+
+ // Otherwise, we're most likely dealing with a named color
+ return colors[$.trim(color).toLowerCase()];
+}
+
+function getColor(elem, attr) {
+ var color;
+
+ do {
+ color = $.curCSS(elem, attr);
+
+ // Keep going until we find an element that has color, or we hit the body
+ if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") )
+ break;
+
+ attr = "backgroundColor";
+ } while ( elem = elem.parentNode );
+
+ return getRGB(color);
+};
+
+// Some named colors to work with
+// From Interface by Stefan Petre
+// http://interface.eyecon.ro/
+
+var colors = {
+ aqua:[0,255,255],
+ azure:[240,255,255],
+ beige:[245,245,220],
+ black:[0,0,0],
+ blue:[0,0,255],
+ brown:[165,42,42],
+ cyan:[0,255,255],
+ darkblue:[0,0,139],
+ darkcyan:[0,139,139],
+ darkgrey:[169,169,169],
+ darkgreen:[0,100,0],
+ darkkhaki:[189,183,107],
+ darkmagenta:[139,0,139],
+ darkolivegreen:[85,107,47],
+ darkorange:[255,140,0],
+ darkorchid:[153,50,204],
+ darkred:[139,0,0],
+ darksalmon:[233,150,122],
+ darkviolet:[148,0,211],
+ fuchsia:[255,0,255],
+ gold:[255,215,0],
+ green:[0,128,0],
+ indigo:[75,0,130],
+ khaki:[240,230,140],
+ lightblue:[173,216,230],
+ lightcyan:[224,255,255],
+ lightgreen:[144,238,144],
+ lightgrey:[211,211,211],
+ lightpink:[255,182,193],
+ lightyellow:[255,255,224],
+ lime:[0,255,0],
+ magenta:[255,0,255],
+ maroon:[128,0,0],
+ navy:[0,0,128],
+ olive:[128,128,0],
+ orange:[255,165,0],
+ pink:[255,192,203],
+ purple:[128,0,128],
+ violet:[128,0,128],
+ red:[255,0,0],
+ silver:[192,192,192],
+ white:[255,255,255],
+ yellow:[255,255,0],
+ transparent: [255,255,255]
+};
+
+
+
+/******************************************************************************/
+/****************************** CLASS ANIMATIONS ******************************/
+/******************************************************************************/
+
+var classAnimationActions = ['add', 'remove', 'toggle'],
+ shorthandStyles = {
+ border: 1,
+ borderBottom: 1,
+ borderColor: 1,
+ borderLeft: 1,
+ borderRight: 1,
+ borderTop: 1,
+ borderWidth: 1,
+ margin: 1,
+ padding: 1
+ };
+
+function getElementStyles() {
+ var style = document.defaultView
+ ? document.defaultView.getComputedStyle(this, null)
+ : this.currentStyle,
+ newStyle = {},
+ key,
+ camelCase;
+
+ // webkit enumerates style porperties
+ if (style && style.length && style[0] && style[style[0]]) {
+ var len = style.length;
+ while (len--) {
+ key = style[len];
+ if (typeof style[key] == 'string') {
+ camelCase = key.replace(/\-(\w)/g, function(all, letter){
+ return letter.toUpperCase();
+ });
+ newStyle[camelCase] = style[key];
+ }
+ }
+ } else {
+ for (key in style) {
+ if (typeof style[key] === 'string') {
+ newStyle[key] = style[key];
+ }
+ }
+ }
+
+ return newStyle;
+}
+
+function filterStyles(styles) {
+ var name, value;
+ for (name in styles) {
+ value = styles[name];
+ if (
+ // ignore null and undefined values
+ value == null ||
+ // ignore functions (when does this occur?)
+ $.isFunction(value) ||
+ // shorthand styles that need to be expanded
+ name in shorthandStyles ||
+ // ignore scrollbars (break in IE)
+ (/scrollbar/).test(name) ||
+
+ // only colors or values that can be converted to numbers
+ (!(/color/i).test(name) && isNaN(parseFloat(value)))
+ ) {
+ delete styles[name];
+ }
+ }
+
+ return styles;
+}
+
+function styleDifference(oldStyle, newStyle) {
+ var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459
+ name;
+
+ for (name in newStyle) {
+ if (oldStyle[name] != newStyle[name]) {
+ diff[name] = newStyle[name];
+ }
+ }
+
+ return diff;
+}
+
+$.effects.animateClass = function(value, duration, easing, callback) {
+ if ($.isFunction(easing)) {
+ callback = easing;
+ easing = null;
+ }
+
+ return this.queue(function() {
+ var that = $(this),
+ originalStyleAttr = that.attr('style') || ' ',
+ originalStyle = filterStyles(getElementStyles.call(this)),
+ newStyle,
+ className = that.attr('class');
+
+ $.each(classAnimationActions, function(i, action) {
+ if (value[action]) {
+ that[action + 'Class'](value[action]);
+ }
+ });
+ newStyle = filterStyles(getElementStyles.call(this));
+ that.attr('class', className);
+
+ that.animate(styleDifference(originalStyle, newStyle), {
+ queue: false,
+ duration: duration,
+ easing: easing,
+ complete: function() {
+ $.each(classAnimationActions, function(i, action) {
+ if (value[action]) { that[action + 'Class'](value[action]); }
+ });
+ // work around bug in IE by clearing the cssText before setting it
+ if (typeof that.attr('style') == 'object') {
+ that.attr('style').cssText = '';
+ that.attr('style').cssText = originalStyleAttr;
+ } else {
+ that.attr('style', originalStyleAttr);
+ }
+ if (callback) { callback.apply(this, arguments); }
+ $.dequeue( this );
+ }
+ });
+ });
+};
+
+$.fn.extend({
+ _addClass: $.fn.addClass,
+ addClass: function(classNames, speed, easing, callback) {
+ return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames);
+ },
+
+ _removeClass: $.fn.removeClass,
+ removeClass: function(classNames,speed,easing,callback) {
+ return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames);
+ },
+
+ _toggleClass: $.fn.toggleClass,
+ toggleClass: function(classNames, force, speed, easing, callback) {
+ if ( typeof force == "boolean" || force === undefined ) {
+ if ( !speed ) {
+ // without speed parameter;
+ return this._toggleClass(classNames, force);
+ } else {
+ return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]);
+ }
+ } else {
+ // without switch parameter;
+ return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]);
+ }
+ },
+
+ switchClass: function(remove,add,speed,easing,callback) {
+ return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]);
+ }
+});
+
+
+
+/******************************************************************************/
+/*********************************** EFFECTS **********************************/
+/******************************************************************************/
+
+$.extend($.effects, {
+ version: "1.8.16",
+
+ // Saves a set of properties in a data storage
+ save: function(element, set) {
+ for(var i=0; i < set.length; i++) {
+ if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]);
+ }
+ },
+
+ // Restores a set of previously saved properties from a data storage
+ restore: function(element, set) {
+ for(var i=0; i < set.length; i++) {
+ if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i]));
+ }
+ },
+
+ setMode: function(el, mode) {
+ if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle
+ return mode;
+ },
+
+ getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value
+ // this should be a little more flexible in the future to handle a string & hash
+ var y, x;
+ switch (origin[0]) {
+ case 'top': y = 0; break;
+ case 'middle': y = 0.5; break;
+ case 'bottom': y = 1; break;
+ default: y = origin[0] / original.height;
+ };
+ switch (origin[1]) {
+ case 'left': x = 0; break;
+ case 'center': x = 0.5; break;
+ case 'right': x = 1; break;
+ default: x = origin[1] / original.width;
+ };
+ return {x: x, y: y};
+ },
+
+ // Wraps the element around a wrapper that copies position properties
+ createWrapper: function(element) {
+
+ // if the element is already wrapped, return it
+ if (element.parent().is('.ui-effects-wrapper')) {
+ return element.parent();
+ }
+
+ // wrap the element
+ var props = {
+ width: element.outerWidth(true),
+ height: element.outerHeight(true),
+ 'float': element.css('float')
+ },
+ wrapper = $('<div></div>')
+ .addClass('ui-effects-wrapper')
+ .css({
+ fontSize: '100%',
+ background: 'transparent',
+ border: 'none',
+ margin: 0,
+ padding: 0
+ }),
+ active = document.activeElement;
+
+ element.wrap(wrapper);
+
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+ $( active ).focus();
+ }
+
+ wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element
+
+ // transfer positioning properties to the wrapper
+ if (element.css('position') == 'static') {
+ wrapper.css({ position: 'relative' });
+ element.css({ position: 'relative' });
+ } else {
+ $.extend(props, {
+ position: element.css('position'),
+ zIndex: element.css('z-index')
+ });
+ $.each(['top', 'left', 'bottom', 'right'], function(i, pos) {
+ props[pos] = element.css(pos);
+ if (isNaN(parseInt(props[pos], 10))) {
+ props[pos] = 'auto';
+ }
+ });
+ element.css({position: 'relative', top: 0, left: 0, right: 'auto', bottom: 'auto' });
+ }
+
+ return wrapper.css(props).show();
+ },
+
+ removeWrapper: function(element) {
+ var parent,
+ active = document.activeElement;
+
+ if (element.parent().is('.ui-effects-wrapper')) {
+ parent = element.parent().replaceWith(element);
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+ $( active ).focus();
+ }
+ return parent;
+ }
+
+ return element;
+ },
+
+ setTransition: function(element, list, factor, value) {
+ value = value || {};
+ $.each(list, function(i, x){
+ unit = element.cssUnit(x);
+ if (unit[0] > 0) value[x] = unit[0] * factor + unit[1];
+ });
+ return value;
+ }
+});
+
+
+function _normalizeArguments(effect, options, speed, callback) {
+ // shift params for method overloading
+ if (typeof effect == 'object') {
+ callback = options;
+ speed = null;
+ options = effect;
+ effect = options.effect;
+ }
+ if ($.isFunction(options)) {
+ callback = options;
+ speed = null;
+ options = {};
+ }
+ if (typeof options == 'number' || $.fx.speeds[options]) {
+ callback = speed;
+ speed = options;
+ options = {};
+ }
+ if ($.isFunction(speed)) {
+ callback = speed;
+ speed = null;
+ }
+
+ options = options || {};
+
+ speed = speed || options.duration;
+ speed = $.fx.off ? 0 : typeof speed == 'number'
+ ? speed : speed in $.fx.speeds ? $.fx.speeds[speed] : $.fx.speeds._default;
+
+ callback = callback || options.complete;
+
+ return [effect, options, speed, callback];
+}
+
+function standardSpeed( speed ) {
+ // valid standard speeds
+ if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) {
+ return true;
+ }
+
+ // invalid strings - treat as "normal" speed
+ if ( typeof speed === "string" && !$.effects[ speed ] ) {
+ return true;
+ }
+
+ return false;
+}
+
+$.fn.extend({
+ effect: function(effect, options, speed, callback) {
+ var args = _normalizeArguments.apply(this, arguments),
+ // TODO: make effects take actual parameters instead of a hash
+ args2 = {
+ options: args[1],
+ duration: args[2],
+ callback: args[3]
+ },
+ mode = args2.options.mode,
+ effectMethod = $.effects[effect];
+
+ if ( $.fx.off || !effectMethod ) {
+ // delegate to the original method (e.g., .show()) if possible
+ if ( mode ) {
+ return this[ mode ]( args2.duration, args2.callback );
+ } else {
+ return this.each(function() {
+ if ( args2.callback ) {
+ args2.callback.call( this );
+ }
+ });
+ }
+ }
+
+ return effectMethod.call(this, args2);
+ },
+
+ _show: $.fn.show,
+ show: function(speed) {
+ if ( standardSpeed( speed ) ) {
+ return this._show.apply(this, arguments);
+ } else {
+ var args = _normalizeArguments.apply(this, arguments);
+ args[1].mode = 'show';
+ return this.effect.apply(this, args);
+ }
+ },
+
+ _hide: $.fn.hide,
+ hide: function(speed) {
+ if ( standardSpeed( speed ) ) {
+ return this._hide.apply(this, arguments);
+ } else {
+ var args = _normalizeArguments.apply(this, arguments);
+ args[1].mode = 'hide';
+ return this.effect.apply(this, args);
+ }
+ },
+
+ // jQuery core overloads toggle and creates _toggle
+ __toggle: $.fn.toggle,
+ toggle: function(speed) {
+ if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) {
+ return this.__toggle.apply(this, arguments);
+ } else {
+ var args = _normalizeArguments.apply(this, arguments);
+ args[1].mode = 'toggle';
+ return this.effect.apply(this, args);
+ }
+ },
+
+ // helper functions
+ cssUnit: function(key) {
+ var style = this.css(key), val = [];
+ $.each( ['em','px','%','pt'], function(i, unit){
+ if(style.indexOf(unit) > 0)
+ val = [parseFloat(style), unit];
+ });
+ return val;
+ }
+});
+
+
+
+/******************************************************************************/
+/*********************************** EASING ***********************************/
+/******************************************************************************/
+
+/*
+ * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
+ *
+ * Uses the built in easing capabilities added In jQuery 1.1
+ * to offer multiple easing options
+ *
+ * TERMS OF USE - jQuery Easing
+ *
+ * Open source under the BSD License.
+ *
+ * Copyright 2008 George McGinley Smith
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * Neither the name of the author nor the names of contributors may be used to endorse
+ * or promote products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+*/
+
+// t: current time, b: begInnIng value, c: change In value, d: duration
+$.easing.jswing = $.easing.swing;
+
+$.extend($.easing,
+{
+ def: 'easeOutQuad',
+ swing: function (x, t, b, c, d) {
+ //alert($.easing.default);
+ return $.easing[$.easing.def](x, t, b, c, d);
+ },
+ easeInQuad: function (x, t, b, c, d) {
+ return c*(t/=d)*t + b;
+ },
+ easeOutQuad: function (x, t, b, c, d) {
+ return -c *(t/=d)*(t-2) + b;
+ },
+ easeInOutQuad: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t + b;
+ return -c/2 * ((--t)*(t-2) - 1) + b;
+ },
+ easeInCubic: function (x, t, b, c, d) {
+ return c*(t/=d)*t*t + b;
+ },
+ easeOutCubic: function (x, t, b, c, d) {
+ return c*((t=t/d-1)*t*t + 1) + b;
+ },
+ easeInOutCubic: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t + b;
+ return c/2*((t-=2)*t*t + 2) + b;
+ },
+ easeInQuart: function (x, t, b, c, d) {
+ return c*(t/=d)*t*t*t + b;
+ },
+ easeOutQuart: function (x, t, b, c, d) {
+ return -c * ((t=t/d-1)*t*t*t - 1) + b;
+ },
+ easeInOutQuart: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
+ return -c/2 * ((t-=2)*t*t*t - 2) + b;
+ },
+ easeInQuint: function (x, t, b, c, d) {
+ return c*(t/=d)*t*t*t*t + b;
+ },
+ easeOutQuint: function (x, t, b, c, d) {
+ return c*((t=t/d-1)*t*t*t*t + 1) + b;
+ },
+ easeInOutQuint: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
+ return c/2*((t-=2)*t*t*t*t + 2) + b;
+ },
+ easeInSine: function (x, t, b, c, d) {
+ return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
+ },
+ easeOutSine: function (x, t, b, c, d) {
+ return c * Math.sin(t/d * (Math.PI/2)) + b;
+ },
+ easeInOutSine: function (x, t, b, c, d) {
+ return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
+ },
+ easeInExpo: function (x, t, b, c, d) {
+ return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
+ },
+ easeOutExpo: function (x, t, b, c, d) {
+ return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
+ },
+ easeInOutExpo: function (x, t, b, c, d) {
+ if (t==0) return b;
+ if (t==d) return b+c;
+ if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
+ return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
+ },
+ easeInCirc: function (x, t, b, c, d) {
+ return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
+ },
+ easeOutCirc: function (x, t, b, c, d) {
+ return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
+ },
+ easeInOutCirc: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
+ return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
+ },
+ easeInElastic: function (x, t, b, c, d) {
+ var s=1.70158;var p=0;var a=c;
+ if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
+ return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+ },
+ easeOutElastic: function (x, t, b, c, d) {
+ var s=1.70158;var p=0;var a=c;
+ if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
+ return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
+ },
+ easeInOutElastic: function (x, t, b, c, d) {
+ var s=1.70158;var p=0;var a=c;
+ if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
+ if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+ return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
+ },
+ easeInBack: function (x, t, b, c, d, s) {
+ if (s == undefined) s = 1.70158;
+ return c*(t/=d)*t*((s+1)*t - s) + b;
+ },
+ easeOutBack: function (x, t, b, c, d, s) {
+ if (s == undefined) s = 1.70158;
+ return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
+ },
+ easeInOutBack: function (x, t, b, c, d, s) {
+ if (s == undefined) s = 1.70158;
+ if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
+ return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
+ },
+ easeInBounce: function (x, t, b, c, d) {
+ return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b;
+ },
+ easeOutBounce: function (x, t, b, c, d) {
+ if ((t/=d) < (1/2.75)) {
+ return c*(7.5625*t*t) + b;
+ } else if (t < (2/2.75)) {
+ return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
+ } else if (t < (2.5/2.75)) {
+ return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
+ } else {
+ return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
+ }
+ },
+ easeInOutBounce: function (x, t, b, c, d) {
+ if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
+ return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
+ }
+});
+
+/*
+ *
+ * TERMS OF USE - EASING EQUATIONS
+ *
+ * Open source under the BSD License.
+ *
+ * Copyright 2001 Robert Penner
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * Neither the name of the author nor the names of contributors may be used to endorse
+ * or promote products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+})(jQuery);
+/*
+ * jQuery UI Effects Blind 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Blind
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function( $, undefined ) {
+
+$.effects.blind = function(o) {
+
+ return this.queue(function() {
+
+ // Create element
+ var el = $(this), props = ['position','top','bottom','left','right'];
+
+ // Set options
+ var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
+ var direction = o.options.direction || 'vertical'; // Default direction
+
+ // Adjust
+ $.effects.save(el, props); el.show(); // Save & Show
+ var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
+ var ref = (direction == 'vertical') ? 'height' : 'width';
+ var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width();
+ if(mode == 'show') wrapper.css(ref, 0); // Shift
+
+ // Animation
+ var animation = {};
+ animation[ref] = mode == 'show' ? distance : 0;
+
+ // Animate
+ wrapper.animate(animation, o.duration, o.options.easing, function() {
+ if(mode == 'hide') el.hide(); // Hide
+ $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+ if(o.callback) o.callback.apply(el[0], arguments); // Callback
+ el.dequeue();
+ });
+
+ });
+
+};
+
+})(jQuery);
+/*
+ * jQuery UI Effects Bounce 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Bounce
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function( $, undefined ) {
+
+$.effects.bounce = function(o) {
+
+ return this.queue(function() {
+
+ // Create element
+ var el = $(this), props = ['position','top','bottom','left','right'];
+
+ // Set options
+ var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
+ var direction = o.options.direction || 'up'; // Default direction
+ var distance = o.options.distance || 20; // Default distance
+ var times = o.options.times || 5; // Default # of times
+ var speed = o.duration || 250; // Default speed per bounce
+ if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE
+
+ // Adjust
+ $.effects.save(el, props); el.show(); // Save & Show
+ $.effects.createWrapper(el); // Create Wrapper
+ var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
+ var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
+ var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3);
+ if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
+ if (mode == 'hide') distance = distance / (times * 2);
+ if (mode != 'hide') times--;
+
+ // Animate
+ if (mode == 'show') { // Show Bounce
+ var animation = {opacity: 1};
+ animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
+ el.animate(animation, speed / 2, o.options.easing);
+ distance = distance / 2;
+ times--;
+ };
+ for (var i = 0; i < times; i++) { // Bounces
+ var animation1 = {}, animation2 = {};
+ animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
+ animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
+ el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing);
+ distance = (mode == 'hide') ? distance * 2 : distance / 2;
+ };
+ if (mode == 'hide') { // Last Bounce
+ var animation = {opacity: 0};
+ animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
+ el.animate(animation, speed / 2, o.options.easing, function(){
+ el.hide(); // Hide
+ $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+ if(o.callback) o.callback.apply(this, arguments); // Callback
+ });
+ } else {
+ var animation1 = {}, animation2 = {};
+ animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
+ animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
+ el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){
+ $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+ if(o.callback) o.callback.apply(this, arguments); // Callback
+ });
+ };
+ el.queue('fx', function() { el.dequeue(); });
+ el.dequeue();
+ });
+
+};
+
+})(jQuery);
+/*
+ * jQuery UI Effects Clip 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Clip
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function( $, undefined ) {
+
+$.effects.clip = function(o) {
+
+ return this.queue(function() {
+
+ // Create element
+ var el = $(this), props = ['position','top','bottom','left','right','height','width'];
+
+ // Set options
+ var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
+ var direction = o.options.direction || 'vertical'; // Default direction
+
+ // Adjust
+ $.effects.save(el, props); el.show(); // Save & Show
+ var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
+ var animate = el[0].tagName == 'IMG' ? wrapper : el;
+ var ref = {
+ size: (direction == 'vertical') ? 'height' : 'width',
+ position: (direction == 'vertical') ? 'top' : 'left'
+ };
+ var distance = (direction == 'vertical') ? animate.height() : animate.width();
+ if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift
+
+ // Animation
+ var animation = {};
+ animation[ref.size] = mode == 'show' ? distance : 0;
+ animation[ref.position] = mode == 'show' ? 0 : distance / 2;
+
+ // Animate
+ animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
+ if(mode == 'hide') el.hide(); // Hide
+ $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+ if(o.callback) o.callback.apply(el[0], arguments); // Callback
+ el.dequeue();
+ }});
+
+ });
+
+};
+
+})(jQuery);
+/*
+ * jQuery UI Effects Drop 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Drop
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function( $, undefined ) {
+
+$.effects.drop = function(o) {
+
+ return this.queue(function() {
+
+ // Create element
+ var el = $(this), props = ['position','top','bottom','left','right','opacity'];
+
+ // Set options
+ var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
+ var direction = o.options.direction || 'left'; // Default Direction
+
+ // Adjust
+ $.effects.save(el, props); el.show(); // Save & Show
+ $.effects.createWrapper(el); // Create Wrapper
+ var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
+ var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
+ var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2);
+ if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
+
+ // Animation
+ var animation = {opacity: mode == 'show' ? 1 : 0};
+ animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
+
+ // Animate
+ el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
+ if(mode == 'hide') el.hide(); // Hide
+ $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+ if(o.callback) o.callback.apply(this, arguments); // Callback
+ el.dequeue();
+ }});
+
+ });
+
+};
+
+})(jQuery);
+/*
+ * jQuery UI Effects Explode 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Explode
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function( $, undefined ) {
+
+$.effects.explode = function(o) {
+
+ return this.queue(function() {
+
+ var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
+ var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
+
+ o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode;
+ var el = $(this).show().css('visibility', 'hidden');
+ var offset = el.offset();
+
+ //Substract the margins - not fixing the problem yet.
+ offset.top -= parseInt(el.css("marginTop"),10) || 0;
+ offset.left -= parseInt(el.css("marginLeft"),10) || 0;
+
+ var width = el.outerWidth(true);
+ var height = el.outerHeight(true);
+
+ for(var i=0;i<rows;i++) { // =
+ for(var j=0;j<cells;j++) { // ||
+ el
+ .clone()
+ .appendTo('body')
+ .wrap('<div></div>')
+ .css({
+ position: 'absolute',
+ visibility: 'visible',
+ left: -j*(width/cells),
+ top: -i*(height/rows)
+ })
+ .parent()
+ .addClass('ui-effects-explode')
+ .css({
+ position: 'absolute',
+ overflow: 'hidden',
+ width: width/cells,
+ height: height/rows,
+ left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0),
+ top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0),
+ opacity: o.options.mode == 'show' ? 0 : 1
+ }).animate({
+ left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)),
+ top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)),
+ opacity: o.options.mode == 'show' ? 1 : 0
+ }, o.duration || 500);
+ }
+ }
+
+ // Set a timeout, to call the callback approx. when the other animations have finished
+ setTimeout(function() {
+
+ o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide();
+ if(o.callback) o.callback.apply(el[0]); // Callback
+ el.dequeue();
+
+ $('div.ui-effects-explode').remove();
+
+ }, o.duration || 500);
+
+
+ });
+
+};
+
+})(jQuery);
+/*
+ * jQuery UI Effects Fade 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Fade
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function( $, undefined ) {
+
+$.effects.fade = function(o) {
+ return this.queue(function() {
+ var elem = $(this),
+ mode = $.effects.setMode(elem, o.options.mode || 'hide');
+
+ elem.animate({ opacity: mode }, {
+ queue: false,
+ duration: o.duration,
+ easing: o.options.easing,
+ complete: function() {
+ (o.callback && o.callback.apply(this, arguments));
+ elem.dequeue();
+ }
+ });
+ });
+};
+
+})(jQuery);
+/*
+ * jQuery UI Effects Fold 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Fold
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function( $, undefined ) {
+
+$.effects.fold = function(o) {
+
+ return this.queue(function() {
+
+ // Create element
+ var el = $(this), props = ['position','top','bottom','left','right'];
+
+ // Set options
+ var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
+ var size = o.options.size || 15; // Default fold size
+ var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value
+ var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2;
+
+ // Adjust
+ $.effects.save(el, props); el.show(); // Save & Show
+ var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
+ var widthFirst = ((mode == 'show') != horizFirst);
+ var ref = widthFirst ? ['width', 'height'] : ['height', 'width'];
+ var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()];
+ var percent = /([0-9]+)%/.exec(size);
+ if(percent) size = parseInt(percent[1],10) / 100 * distance[mode == 'hide' ? 0 : 1];
+ if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift
+
+ // Animation
+ var animation1 = {}, animation2 = {};
+ animation1[ref[0]] = mode == 'show' ? distance[0] : size;
+ animation2[ref[1]] = mode == 'show' ? distance[1] : 0;
+
+ // Animate
+ wrapper.animate(animation1, duration, o.options.easing)
+ .animate(animation2, duration, o.options.easing, function() {
+ if(mode == 'hide') el.hide(); // Hide
+ $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+ if(o.callback) o.callback.apply(el[0], arguments); // Callback
+ el.dequeue();
+ });
+
+ });
+
+};
+
+})(jQuery);
+/*
+ * jQuery UI Effects Highlight 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Highlight
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function( $, undefined ) {
+
+$.effects.highlight = function(o) {
+ return this.queue(function() {
+ var elem = $(this),
+ props = ['backgroundImage', 'backgroundColor', 'opacity'],
+ mode = $.effects.setMode(elem, o.options.mode || 'show'),
+ animation = {
+ backgroundColor: elem.css('backgroundColor')
+ };
+
+ if (mode == 'hide') {
+ animation.opacity = 0;
+ }
+
+ $.effects.save(elem, props);
+ elem
+ .show()
+ .css({
+ backgroundImage: 'none',
+ backgroundColor: o.options.color || '#ffff99'
+ })
+ .animate(animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.options.easing,
+ complete: function() {
+ (mode == 'hide' && elem.hide());
+ $.effects.restore(elem, props);
+ (mode == 'show' && !$.support.opacity && this.style.removeAttribute('filter'));
+ (o.callback && o.callback.apply(this, arguments));
+ elem.dequeue();
+ }
+ });
+ });
+};
+
+})(jQuery);
+/*
+ * jQuery UI Effects Pulsate 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Pulsate
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function( $, undefined ) {
+
+$.effects.pulsate = function(o) {
+ return this.queue(function() {
+ var elem = $(this),
+ mode = $.effects.setMode(elem, o.options.mode || 'show');
+ times = ((o.options.times || 5) * 2) - 1;
+ duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2,
+ isVisible = elem.is(':visible'),
+ animateTo = 0;
+
+ if (!isVisible) {
+ elem.css('opacity', 0).show();
+ animateTo = 1;
+ }
+
+ if ((mode == 'hide' && isVisible) || (mode == 'show' && !isVisible)) {
+ times--;
+ }
+
+ for (var i = 0; i < times; i++) {
+ elem.animate({ opacity: animateTo }, duration, o.options.easing);
+ animateTo = (animateTo + 1) % 2;
+ }
+
+ elem.animate({ opacity: animateTo }, duration, o.options.easing, function() {
+ if (animateTo == 0) {
+ elem.hide();
+ }
+ (o.callback && o.callback.apply(this, arguments));
+ });
+
+ elem
+ .queue('fx', function() { elem.dequeue(); })
+ .dequeue();
+ });
+};
+
+})(jQuery);
+/*
+ * jQuery UI Effects Scale 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Scale
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function( $, undefined ) {
+
+$.effects.puff = function(o) {
+ return this.queue(function() {
+ var elem = $(this),
+ mode = $.effects.setMode(elem, o.options.mode || 'hide'),
+ percent = parseInt(o.options.percent, 10) || 150,
+ factor = percent / 100,
+ original = { height: elem.height(), width: elem.width() };
+
+ $.extend(o.options, {
+ fade: true,
+ mode: mode,
+ percent: mode == 'hide' ? percent : 100,
+ from: mode == 'hide'
+ ? original
+ : {
+ height: original.height * factor,
+ width: original.width * factor
+ }
+ });
+
+ elem.effect('scale', o.options, o.duration, o.callback);
+ elem.dequeue();
+ });
+};
+
+$.effects.scale = function(o) {
+
+ return this.queue(function() {
+
+ // Create element
+ var el = $(this);
+
+ // Set options
+ var options = $.extend(true, {}, o.options);
+ var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
+ var percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent
+ var direction = o.options.direction || 'both'; // Set default axis
+ var origin = o.options.origin; // The origin of the scaling
+ if (mode != 'effect') { // Set default origin and restore for show/hide
+ options.origin = origin || ['middle','center'];
+ options.restore = true;
+ }
+ var original = {height: el.height(), width: el.width()}; // Save original
+ el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state
+
+ // Adjust
+ var factor = { // Set scaling factor
+ y: direction != 'horizontal' ? (percent / 100) : 1,
+ x: direction != 'vertical' ? (percent / 100) : 1
+ };
+ el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state
+
+ if (o.options.fade) { // Fade option to support puff
+ if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;};
+ if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;};
+ };
+
+ // Animation
+ options.from = el.from; options.to = el.to; options.mode = mode;
+
+ // Animate
+ el.effect('size', options, o.duration, o.callback);
+ el.dequeue();
+ });
+
+};
+
+$.effects.size = function(o) {
+
+ return this.queue(function() {
+
+ // Create element
+ var el = $(this), props = ['position','top','bottom','left','right','width','height','overflow','opacity'];
+ var props1 = ['position','top','bottom','left','right','overflow','opacity']; // Always restore
+ var props2 = ['width','height','overflow']; // Copy for children
+ var cProps = ['fontSize'];
+ var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];
+ var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight'];
+
+ // Set options
+ var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
+ var restore = o.options.restore || false; // Default restore
+ var scale = o.options.scale || 'both'; // Default scale mode
+ var origin = o.options.origin; // The origin of the sizing
+ var original = {height: el.height(), width: el.width()}; // Save original
+ el.from = o.options.from || original; // Default from state
+ el.to = o.options.to || original; // Default to state
+ // Adjust
+ if (origin) { // Calculate baseline shifts
+ var baseline = $.effects.getBaseline(origin, original);
+ el.from.top = (original.height - el.from.height) * baseline.y;
+ el.from.left = (original.width - el.from.width) * baseline.x;
+ el.to.top = (original.height - el.to.height) * baseline.y;
+ el.to.left = (original.width - el.to.width) * baseline.x;
+ };
+ var factor = { // Set scaling factor
+ from: {y: el.from.height / original.height, x: el.from.width / original.width},
+ to: {y: el.to.height / original.height, x: el.to.width / original.width}
+ };
+ if (scale == 'box' || scale == 'both') { // Scale the css box
+ if (factor.from.y != factor.to.y) { // Vertical props scaling
+ props = props.concat(vProps);
+ el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from);
+ el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to);
+ };
+ if (factor.from.x != factor.to.x) { // Horizontal props scaling
+ props = props.concat(hProps);
+ el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from);
+ el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to);
+ };
+ };
+ if (scale == 'content' || scale == 'both') { // Scale the content
+ if (factor.from.y != factor.to.y) { // Vertical props scaling
+ props = props.concat(cProps);
+ el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from);
+ el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to);
+ };
+ };
+ $.effects.save(el, restore ? props : props1); el.show(); // Save & Show
+ $.effects.createWrapper(el); // Create Wrapper
+ el.css('overflow','hidden').css(el.from); // Shift
+
+ // Animate
+ if (scale == 'content' || scale == 'both') { // Scale the children
+ vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size
+ hProps = hProps.concat(['marginLeft','marginRight']); // Add margins
+ props2 = props.concat(vProps).concat(hProps); // Concat
+ el.find("*[width]").each(function(){
+ child = $(this);
+ if (restore) $.effects.save(child, props2);
+ var c_original = {height: child.height(), width: child.width()}; // Save original
+ child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x};
+ child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x};
+ if (factor.from.y != factor.to.y) { // Vertical props scaling
+ child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from);
+ child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to);
+ };
+ if (factor.from.x != factor.to.x) { // Horizontal props scaling
+ child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from);
+ child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to);
+ };
+ child.css(child.from); // Shift children
+ child.animate(child.to, o.duration, o.options.easing, function(){
+ if (restore) $.effects.restore(child, props2); // Restore children
+ }); // Animate children
+ });
+ };
+
+ // Animate
+ el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
+ if (el.to.opacity === 0) {
+ el.css('opacity', el.from.opacity);
+ }
+ if(mode == 'hide') el.hide(); // Hide
+ $.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore
+ if(o.callback) o.callback.apply(this, arguments); // Callback
+ el.dequeue();
+ }});
+
+ });
+
+};
+
+})(jQuery);
+/*
+ * jQuery UI Effects Shake 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Shake
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function( $, undefined ) {
+
+$.effects.shake = function(o) {
+
+ return this.queue(function() {
+
+ // Create element
+ var el = $(this), props = ['position','top','bottom','left','right'];
+
+ // Set options
+ var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
+ var direction = o.options.direction || 'left'; // Default direction
+ var distance = o.options.distance || 20; // Default distance
+ var times = o.options.times || 3; // Default # of times
+ var speed = o.duration || o.options.duration || 140; // Default speed per shake
+
+ // Adjust
+ $.effects.save(el, props); el.show(); // Save & Show
+ $.effects.createWrapper(el); // Create Wrapper
+ var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
+ var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
+
+ // Animation
+ var animation = {}, animation1 = {}, animation2 = {};
+ animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
+ animation1[ref] = (motion == 'pos' ? '+=' : '-=') + distance * 2;
+ animation2[ref] = (motion == 'pos' ? '-=' : '+=') + distance * 2;
+
+ // Animate
+ el.animate(animation, speed, o.options.easing);
+ for (var i = 1; i < times; i++) { // Shakes
+ el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing);
+ };
+ el.animate(animation1, speed, o.options.easing).
+ animate(animation, speed / 2, o.options.easing, function(){ // Last shake
+ $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+ if(o.callback) o.callback.apply(this, arguments); // Callback
+ });
+ el.queue('fx', function() { el.dequeue(); });
+ el.dequeue();
+ });
+
+};
+
+})(jQuery);
+/*
+ * jQuery UI Effects Slide 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Slide
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function( $, undefined ) {
+
+$.effects.slide = function(o) {
+
+ return this.queue(function() {
+
+ // Create element
+ var el = $(this), props = ['position','top','bottom','left','right'];
+
+ // Set options
+ var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode
+ var direction = o.options.direction || 'left'; // Default Direction
+
+ // Adjust
+ $.effects.save(el, props); el.show(); // Save & Show
+ $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
+ var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
+ var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
+ var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true}));
+ if (mode == 'show') el.css(ref, motion == 'pos' ? (isNaN(distance) ? "-" + distance : -distance) : distance); // Shift
+
+ // Animation
+ var animation = {};
+ animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
+
+ // Animate
+ el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
+ if(mode == 'hide') el.hide(); // Hide
+ $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+ if(o.callback) o.callback.apply(this, arguments); // Callback
+ el.dequeue();
+ }});
+
+ });
+
+};
+
+})(jQuery);
+/*
+ * jQuery UI Effects Transfer 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Transfer
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function( $, undefined ) {
+
+$.effects.transfer = function(o) {
+ return this.queue(function() {
+ var elem = $(this),
+ target = $(o.options.to),
+ endPosition = target.offset(),
+ animation = {
+ top: endPosition.top,
+ left: endPosition.left,
+ height: target.innerHeight(),
+ width: target.innerWidth()
+ },
+ startPosition = elem.offset(),
+ transfer = $('<div class="ui-effects-transfer"></div>')
+ .appendTo(document.body)
+ .addClass(o.options.className)
+ .css({
+ top: startPosition.top,
+ left: startPosition.left,
+ height: elem.innerHeight(),
+ width: elem.innerWidth(),
+ position: 'absolute'
+ })
+ .animate(animation, o.duration, o.options.easing, function() {
+ transfer.remove();
+ (o.callback && o.callback.apply(elem[0], arguments));
+ elem.dequeue();
+ });
+ });
+};
+
+})(jQuery);
+/*
+ * jQuery UI Accordion 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+$.widget( "ui.accordion", {
+ options: {
+ active: 0,
+ animated: "slide",
+ autoHeight: true,
+ clearStyle: false,
+ collapsible: false,
+ event: "click",
+ fillSpace: false,
+ header: "> li > :first-child,> :not(li):even",
+ icons: {
+ header: "ui-icon-triangle-1-e",
+ headerSelected: "ui-icon-triangle-1-s"
+ },
+ navigation: false,
+ navigationFilter: function() {
+ return this.href.toLowerCase() === location.href.toLowerCase();
+ }
+ },
+
+ _create: function() {
+ var self = this,
+ options = self.options;
+
+ self.running = 0;
+
+ self.element
+ .addClass( "ui-accordion ui-widget ui-helper-reset" )
+ // in lack of child-selectors in CSS
+ // we need to mark top-LIs in a UL-accordion for some IE-fix
+ .children( "li" )
+ .addClass( "ui-accordion-li-fix" );
+
+ self.headers = self.element.find( options.header )
+ .addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" )
+ .bind( "mouseenter.accordion", function() {
+ if ( options.disabled ) {
+ return;
+ }
+ $( this ).addClass( "ui-state-hover" );
+ })
+ .bind( "mouseleave.accordion", function() {
+ if ( options.disabled ) {
+ return;
+ }
+ $( this ).removeClass( "ui-state-hover" );
+ })
+ .bind( "focus.accordion", function() {
+ if ( options.disabled ) {
+ return;
+ }
+ $( this ).addClass( "ui-state-focus" );
+ })
+ .bind( "blur.accordion", function() {
+ if ( options.disabled ) {
+ return;
+ }
+ $( this ).removeClass( "ui-state-focus" );
+ });
+
+ self.headers.next()
+ .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" );
+
+ if ( options.navigation ) {
+ var current = self.element.find( "a" ).filter( options.navigationFilter ).eq( 0 );
+ if ( current.length ) {
+ var header = current.closest( ".ui-accordion-header" );
+ if ( header.length ) {
+ // anchor within header
+ self.active = header;
+ } else {
+ // anchor within content
+ self.active = current.closest( ".ui-accordion-content" ).prev();
+ }
+ }
+ }
+
+ self.active = self._findActive( self.active || options.active )
+ .addClass( "ui-state-default ui-state-active" )
+ .toggleClass( "ui-corner-all" )
+ .toggleClass( "ui-corner-top" );
+ self.active.next().addClass( "ui-accordion-content-active" );
+
+ self._createIcons();
+ self.resize();
+
+ // ARIA
+ self.element.attr( "role", "tablist" );
+
+ self.headers
+ .attr( "role", "tab" )
+ .bind( "keydown.accordion", function( event ) {
+ return self._keydown( event );
+ })
+ .next()
+ .attr( "role", "tabpanel" );
+
+ self.headers
+ .not( self.active || "" )
+ .attr({
+ "aria-expanded": "false",
+ "aria-selected": "false",
+ tabIndex: -1
+ })
+ .next()
+ .hide();
+
+ // make sure at least one header is in the tab order
+ if ( !self.active.length ) {
+ self.headers.eq( 0 ).attr( "tabIndex", 0 );
+ } else {
+ self.active
+ .attr({
+ "aria-expanded": "true",
+ "aria-selected": "true",
+ tabIndex: 0
+ });
+ }
+
+ // only need links in tab order for Safari
+ if ( !$.browser.safari ) {
+ self.headers.find( "a" ).attr( "tabIndex", -1 );
+ }
+
+ if ( options.event ) {
+ self.headers.bind( options.event.split(" ").join(".accordion ") + ".accordion", function(event) {
+ self._clickHandler.call( self, event, this );
+ event.preventDefault();
+ });
+ }
+ },
+
+ _createIcons: function() {
+ var options = this.options;
+ if ( options.icons ) {
+ $( "<span></span>" )
+ .addClass( "ui-icon " + options.icons.header )
+ .prependTo( this.headers );
+ this.active.children( ".ui-icon" )
+ .toggleClass(options.icons.header)
+ .toggleClass(options.icons.headerSelected);
+ this.element.addClass( "ui-accordion-icons" );
+ }
+ },
+
+ _destroyIcons: function() {
+ this.headers.children( ".ui-icon" ).remove();
+ this.element.removeClass( "ui-accordion-icons" );
+ },
+
+ destroy: function() {
+ var options = this.options;
+
+ this.element
+ .removeClass( "ui-accordion ui-widget ui-helper-reset" )
+ .removeAttr( "role" );
+
+ this.headers
+ .unbind( ".accordion" )
+ .removeClass( "ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-expanded" )
+ .removeAttr( "aria-selected" )
+ .removeAttr( "tabIndex" );
+
+ this.headers.find( "a" ).removeAttr( "tabIndex" );
+ this._destroyIcons();
+ var contents = this.headers.next()
+ .css( "display", "" )
+ .removeAttr( "role" )
+ .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled" );
+ if ( options.autoHeight || options.fillHeight ) {
+ contents.css( "height", "" );
+ }
+
+ return $.Widget.prototype.destroy.call( this );
+ },
+
+ _setOption: function( key, value ) {
+ $.Widget.prototype._setOption.apply( this, arguments );
+
+ if ( key == "active" ) {
+ this.activate( value );
+ }
+ if ( key == "icons" ) {
+ this._destroyIcons();
+ if ( value ) {
+ this._createIcons();
+ }
+ }
+ // #5332 - opacity doesn't cascade to positioned elements in IE
+ // so we need to add the disabled class to the headers and panels
+ if ( key == "disabled" ) {
+ this.headers.add(this.headers.next())
+ [ value ? "addClass" : "removeClass" ](
+ "ui-accordion-disabled ui-state-disabled" );
+ }
+ },
+
+ _keydown: function( event ) {
+ if ( this.options.disabled || event.altKey || event.ctrlKey ) {
+ return;
+ }
+
+ var keyCode = $.ui.keyCode,
+ length = this.headers.length,
+ currentIndex = this.headers.index( event.target ),
+ toFocus = false;
+
+ switch ( event.keyCode ) {
+ case keyCode.RIGHT:
+ case keyCode.DOWN:
+ toFocus = this.headers[ ( currentIndex + 1 ) % length ];
+ break;
+ case keyCode.LEFT:
+ case keyCode.UP:
+ toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
+ break;
+ case keyCode.SPACE:
+ case keyCode.ENTER:
+ this._clickHandler( { target: event.target }, event.target );
+ event.preventDefault();
+ }
+
+ if ( toFocus ) {
+ $( event.target ).attr( "tabIndex", -1 );
+ $( toFocus ).attr( "tabIndex", 0 );
+ toFocus.focus();
+ return false;
+ }
+
+ return true;
+ },
+
+ resize: function() {
+ var options = this.options,
+ maxHeight;
+
+ if ( options.fillSpace ) {
+ if ( $.browser.msie ) {
+ var defOverflow = this.element.parent().css( "overflow" );
+ this.element.parent().css( "overflow", "hidden");
+ }
+ maxHeight = this.element.parent().height();
+ if ($.browser.msie) {
+ this.element.parent().css( "overflow", defOverflow );
+ }
+
+ this.headers.each(function() {
+ maxHeight -= $( this ).outerHeight( true );
+ });
+
+ this.headers.next()
+ .each(function() {
+ $( this ).height( Math.max( 0, maxHeight -
+ $( this ).innerHeight() + $( this ).height() ) );
+ })
+ .css( "overflow", "auto" );
+ } else if ( options.autoHeight ) {
+ maxHeight = 0;
+ this.headers.next()
+ .each(function() {
+ maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+ })
+ .height( maxHeight );
+ }
+
+ return this;
+ },
+
+ activate: function( index ) {
+ // TODO this gets called on init, changing the option without an explicit call for that
+ this.options.active = index;
+ // call clickHandler with custom event
+ var active = this._findActive( index )[ 0 ];
+ this._clickHandler( { target: active }, active );
+
+ return this;
+ },
+
+ _findActive: function( selector ) {
+ return selector
+ ? typeof selector === "number"
+ ? this.headers.filter( ":eq(" + selector + ")" )
+ : this.headers.not( this.headers.not( selector ) )
+ : selector === false
+ ? $( [] )
+ : this.headers.filter( ":eq(0)" );
+ },
+
+ // TODO isn't event.target enough? why the separate target argument?
+ _clickHandler: function( event, target ) {
+ var options = this.options;
+ if ( options.disabled ) {
+ return;
+ }
+
+ // called only when using activate(false) to close all parts programmatically
+ if ( !event.target ) {
+ if ( !options.collapsible ) {
+ return;
+ }
+ this.active
+ .removeClass( "ui-state-active ui-corner-top" )
+ .addClass( "ui-state-default ui-corner-all" )
+ .children( ".ui-icon" )
+ .removeClass( options.icons.headerSelected )
+ .addClass( options.icons.header );
+ this.active.next().addClass( "ui-accordion-content-active" );
+ var toHide = this.active.next(),
+ data = {
+ options: options,
+ newHeader: $( [] ),
+ oldHeader: options.active,
+ newContent: $( [] ),
+ oldContent: toHide
+ },
+ toShow = ( this.active = $( [] ) );
+ this._toggle( toShow, toHide, data );
+ return;
+ }
+
+ // get the click target
+ var clicked = $( event.currentTarget || target ),
+ clickedIsActive = clicked[0] === this.active[0];
+
+ // TODO the option is changed, is that correct?
+ // TODO if it is correct, shouldn't that happen after determining that the click is valid?
+ options.active = options.collapsible && clickedIsActive ?
+ false :
+ this.headers.index( clicked );
+
+ // if animations are still active, or the active header is the target, ignore click
+ if ( this.running || ( !options.collapsible && clickedIsActive ) ) {
+ return;
+ }
+
+ // find elements to show and hide
+ var active = this.active,
+ toShow = clicked.next(),
+ toHide = this.active.next(),
+ data = {
+ options: options,
+ newHeader: clickedIsActive && options.collapsible ? $([]) : clicked,
+ oldHeader: this.active,
+ newContent: clickedIsActive && options.collapsible ? $([]) : toShow,
+ oldContent: toHide
+ },
+ down = this.headers.index( this.active[0] ) > this.headers.index( clicked[0] );
+
+ // when the call to ._toggle() comes after the class changes
+ // it causes a very odd bug in IE 8 (see #6720)
+ this.active = clickedIsActive ? $([]) : clicked;
+ this._toggle( toShow, toHide, data, clickedIsActive, down );
+
+ // switch classes
+ active
+ .removeClass( "ui-state-active ui-corner-top" )
+ .addClass( "ui-state-default ui-corner-all" )
+ .children( ".ui-icon" )
+ .removeClass( options.icons.headerSelected )
+ .addClass( options.icons.header );
+ if ( !clickedIsActive ) {
+ clicked
+ .removeClass( "ui-state-default ui-corner-all" )
+ .addClass( "ui-state-active ui-corner-top" )
+ .children( ".ui-icon" )
+ .removeClass( options.icons.header )
+ .addClass( options.icons.headerSelected );
+ clicked
+ .next()
+ .addClass( "ui-accordion-content-active" );
+ }
+
+ return;
+ },
+
+ _toggle: function( toShow, toHide, data, clickedIsActive, down ) {
+ var self = this,
+ options = self.options;
+
+ self.toShow = toShow;
+ self.toHide = toHide;
+ self.data = data;
+
+ var complete = function() {
+ if ( !self ) {
+ return;
+ }
+ return self._completed.apply( self, arguments );
+ };
+
+ // trigger changestart event
+ self._trigger( "changestart", null, self.data );
+
+ // count elements to animate
+ self.running = toHide.size() === 0 ? toShow.size() : toHide.size();
+
+ if ( options.animated ) {
+ var animOptions = {};
+
+ if ( options.collapsible && clickedIsActive ) {
+ animOptions = {
+ toShow: $( [] ),
+ toHide: toHide,
+ complete: complete,
+ down: down,
+ autoHeight: options.autoHeight || options.fillSpace
+ };
+ } else {
+ animOptions = {
+ toShow: toShow,
+ toHide: toHide,
+ complete: complete,
+ down: down,
+ autoHeight: options.autoHeight || options.fillSpace
+ };
+ }
+
+ if ( !options.proxied ) {
+ options.proxied = options.animated;
+ }
+
+ if ( !options.proxiedDuration ) {
+ options.proxiedDuration = options.duration;
+ }
+
+ options.animated = $.isFunction( options.proxied ) ?
+ options.proxied( animOptions ) :
+ options.proxied;
+
+ options.duration = $.isFunction( options.proxiedDuration ) ?
+ options.proxiedDuration( animOptions ) :
+ options.proxiedDuration;
+
+ var animations = $.ui.accordion.animations,
+ duration = options.duration,
+ easing = options.animated;
+
+ if ( easing && !animations[ easing ] && !$.easing[ easing ] ) {
+ easing = "slide";
+ }
+ if ( !animations[ easing ] ) {
+ animations[ easing ] = function( options ) {
+ this.slide( options, {
+ easing: easing,
+ duration: duration || 700
+ });
+ };
+ }
+
+ animations[ easing ]( animOptions );
+ } else {
+ if ( options.collapsible && clickedIsActive ) {
+ toShow.toggle();
+ } else {
+ toHide.hide();
+ toShow.show();
+ }
+
+ complete( true );
+ }
+
+ // TODO assert that the blur and focus triggers are really necessary, remove otherwise
+ toHide.prev()
+ .attr({
+ "aria-expanded": "false",
+ "aria-selected": "false",
+ tabIndex: -1
+ })
+ .blur();
+ toShow.prev()
+ .attr({
+ "aria-expanded": "true",
+ "aria-selected": "true",
+ tabIndex: 0
+ })
+ .focus();
+ },
+
+ _completed: function( cancel ) {
+ this.running = cancel ? 0 : --this.running;
+ if ( this.running ) {
+ return;
+ }
+
+ if ( this.options.clearStyle ) {
+ this.toShow.add( this.toHide ).css({
+ height: "",
+ overflow: ""
+ });
+ }
+
+ // other classes are removed before the animation; this one needs to stay until completed
+ this.toHide.removeClass( "ui-accordion-content-active" );
+ // Work around for rendering bug in IE (#5421)
+ if ( this.toHide.length ) {
+ this.toHide.parent()[0].className = this.toHide.parent()[0].className;
+ }
+
+ this._trigger( "change", null, this.data );
+ }
+});
+
+$.extend( $.ui.accordion, {
+ version: "1.8.16",
+ animations: {
+ slide: function( options, additions ) {
+ options = $.extend({
+ easing: "swing",
+ duration: 300
+ }, options, additions );
+ if ( !options.toHide.size() ) {
+ options.toShow.animate({
+ height: "show",
+ paddingTop: "show",
+ paddingBottom: "show"
+ }, options );
+ return;
+ }
+ if ( !options.toShow.size() ) {
+ options.toHide.animate({
+ height: "hide",
+ paddingTop: "hide",
+ paddingBottom: "hide"
+ }, options );
+ return;
+ }
+ var overflow = options.toShow.css( "overflow" ),
+ percentDone = 0,
+ showProps = {},
+ hideProps = {},
+ fxAttrs = [ "height", "paddingTop", "paddingBottom" ],
+ originalWidth;
+ // fix width before calculating height of hidden element
+ var s = options.toShow;
+ originalWidth = s[0].style.width;
+ s.width( parseInt( s.parent().width(), 10 )
+ - parseInt( s.css( "paddingLeft" ), 10 )
+ - parseInt( s.css( "paddingRight" ), 10 )
+ - ( parseInt( s.css( "borderLeftWidth" ), 10 ) || 0 )
+ - ( parseInt( s.css( "borderRightWidth" ), 10) || 0 ) );
+
+ $.each( fxAttrs, function( i, prop ) {
+ hideProps[ prop ] = "hide";
+
+ var parts = ( "" + $.css( options.toShow[0], prop ) ).match( /^([\d+-.]+)(.*)$/ );
+ showProps[ prop ] = {
+ value: parts[ 1 ],
+ unit: parts[ 2 ] || "px"
+ };
+ });
+ options.toShow.css({ height: 0, overflow: "hidden" }).show();
+ options.toHide
+ .filter( ":hidden" )
+ .each( options.complete )
+ .end()
+ .filter( ":visible" )
+ .animate( hideProps, {
+ step: function( now, settings ) {
+ // only calculate the percent when animating height
+ // IE gets very inconsistent results when animating elements
+ // with small values, which is common for padding
+ if ( settings.prop == "height" ) {
+ percentDone = ( settings.end - settings.start === 0 ) ? 0 :
+ ( settings.now - settings.start ) / ( settings.end - settings.start );
+ }
+
+ options.toShow[ 0 ].style[ settings.prop ] =
+ ( percentDone * showProps[ settings.prop ].value )
+ + showProps[ settings.prop ].unit;
+ },
+ duration: options.duration,
+ easing: options.easing,
+ complete: function() {
+ if ( !options.autoHeight ) {
+ options.toShow.css( "height", "" );
+ }
+ options.toShow.css({
+ width: originalWidth,
+ overflow: overflow
+ });
+ options.complete();
+ }
+ });
+ },
+ bounceslide: function( options ) {
+ this.slide( options, {
+ easing: options.down ? "easeOutBounce" : "swing",
+ duration: options.down ? 1000 : 200
+ });
+ }
+ }
+});
+
+})( jQuery );
+/*
+ * jQuery UI Autocomplete 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.position.js
+ */
+(function( $, undefined ) {
+
+// used to prevent race conditions with remote data sources
+var requestIndex = 0;
+
+$.widget( "ui.autocomplete", {
+ options: {
+ appendTo: "body",
+ autoFocus: false,
+ delay: 300,
+ minLength: 1,
+ position: {
+ my: "left top",
+ at: "left bottom",
+ collision: "none"
+ },
+ source: null
+ },
+
+ pending: 0,
+
+ _create: function() {
+ var self = this,
+ doc = this.element[ 0 ].ownerDocument,
+ suppressKeyPress;
+
+ this.element
+ .addClass( "ui-autocomplete-input" )
+ .attr( "autocomplete", "off" )
+ // TODO verify these actually work as intended
+ .attr({
+ role: "textbox",
+ "aria-autocomplete": "list",
+ "aria-haspopup": "true"
+ })
+ .bind( "keydown.autocomplete", function( event ) {
+ if ( self.options.disabled || self.element.propAttr( "readOnly" ) ) {
+ return;
+ }
+
+ suppressKeyPress = false;
+ var keyCode = $.ui.keyCode;
+ switch( event.keyCode ) {
+ case keyCode.PAGE_UP:
+ self._move( "previousPage", event );
+ break;
+ case keyCode.PAGE_DOWN:
+ self._move( "nextPage", event );
+ break;
+ case keyCode.UP:
+ self._move( "previous", event );
+ // prevent moving cursor to beginning of text field in some browsers
+ event.preventDefault();
+ break;
+ case keyCode.DOWN:
+ self._move( "next", event );
+ // prevent moving cursor to end of text field in some browsers
+ event.preventDefault();
+ break;
+ case keyCode.ENTER:
+ case keyCode.NUMPAD_ENTER:
+ // when menu is open and has focus
+ if ( self.menu.active ) {
+ // #6055 - Opera still allows the keypress to occur
+ // which causes forms to submit
+ suppressKeyPress = true;
+ event.preventDefault();
+ }
+ //passthrough - ENTER and TAB both select the current element
+ case keyCode.TAB:
+ if ( !self.menu.active ) {
+ return;
+ }
+ self.menu.select( event );
+ break;
+ case keyCode.ESCAPE:
+ self.element.val( self.term );
+ self.close( event );
+ break;
+ default:
+ // keypress is triggered before the input value is changed
+ clearTimeout( self.searching );
+ self.searching = setTimeout(function() {
+ // only search if the value has changed
+ if ( self.term != self.element.val() ) {
+ self.selectedItem = null;
+ self.search( null, event );
+ }
+ }, self.options.delay );
+ break;
+ }
+ })
+ .bind( "keypress.autocomplete", function( event ) {
+ if ( suppressKeyPress ) {
+ suppressKeyPress = false;
+ event.preventDefault();
+ }
+ })
+ .bind( "focus.autocomplete", function() {
+ if ( self.options.disabled ) {
+ return;
+ }
+
+ self.selectedItem = null;
+ self.previous = self.element.val();
+ })
+ .bind( "blur.autocomplete", function( event ) {
+ if ( self.options.disabled ) {
+ return;
+ }
+
+ clearTimeout( self.searching );
+ // clicks on the menu (or a button to trigger a search) will cause a blur event
+ self.closing = setTimeout(function() {
+ self.close( event );
+ self._change( event );
+ }, 150 );
+ });
+ this._initSource();
+ this.response = function() {
+ return self._response.apply( self, arguments );
+ };
+ this.menu = $( "<ul></ul>" )
+ .addClass( "ui-autocomplete" )
+ .appendTo( $( this.options.appendTo || "body", doc )[0] )
+ // prevent the close-on-blur in case of a "slow" click on the menu (long mousedown)
+ .mousedown(function( event ) {
+ // clicking on the scrollbar causes focus to shift to the body
+ // but we can't detect a mouseup or a click immediately afterward
+ // so we have to track the next mousedown and close the menu if
+ // the user clicks somewhere outside of the autocomplete
+ var menuElement = self.menu.element[ 0 ];
+ if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
+ setTimeout(function() {
+ $( document ).one( 'mousedown', function( event ) {
+ if ( event.target !== self.element[ 0 ] &&
+ event.target !== menuElement &&
+ !$.ui.contains( menuElement, event.target ) ) {
+ self.close();
+ }
+ });
+ }, 1 );
+ }
+
+ // use another timeout to make sure the blur-event-handler on the input was already triggered
+ setTimeout(function() {
+ clearTimeout( self.closing );
+ }, 13);
+ })
+ .menu({
+ focus: function( event, ui ) {
+ var item = ui.item.data( "item.autocomplete" );
+ if ( false !== self._trigger( "focus", event, { item: item } ) ) {
+ // use value to match what will end up in the input, if it was a key event
+ if ( /^key/.test(event.originalEvent.type) ) {
+ self.element.val( item.value );
+ }
+ }
+ },
+ selected: function( event, ui ) {
+ var item = ui.item.data( "item.autocomplete" ),
+ previous = self.previous;
+
+ // only trigger when focus was lost (click on menu)
+ if ( self.element[0] !== doc.activeElement ) {
+ self.element.focus();
+ self.previous = previous;
+ // #6109 - IE triggers two focus events and the second
+ // is asynchronous, so we need to reset the previous
+ // term synchronously and asynchronously :-(
+ setTimeout(function() {
+ self.previous = previous;
+ self.selectedItem = item;
+ }, 1);
+ }
+
+ if ( false !== self._trigger( "select", event, { item: item } ) ) {
+ self.element.val( item.value );
+ }
+ // reset the term after the select event
+ // this allows custom select handling to work properly
+ self.term = self.element.val();
+
+ self.close( event );
+ self.selectedItem = item;
+ },
+ blur: function( event, ui ) {
+ // don't set the value of the text field if it's already correct
+ // this prevents moving the cursor unnecessarily
+ if ( self.menu.element.is(":visible") &&
+ ( self.element.val() !== self.term ) ) {
+ self.element.val( self.term );
+ }
+ }
+ })
+ .zIndex( this.element.zIndex() + 1 )
+ // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781
+ .css({ top: 0, left: 0 })
+ .hide()
+ .data( "menu" );
+ if ( $.fn.bgiframe ) {
+ this.menu.element.bgiframe();
+ }
+ },
+
+ destroy: function() {
+ this.element
+ .removeClass( "ui-autocomplete-input" )
+ .removeAttr( "autocomplete" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-autocomplete" )
+ .removeAttr( "aria-haspopup" );
+ this.menu.element.remove();
+ $.Widget.prototype.destroy.call( this );
+ },
+
+ _setOption: function( key, value ) {
+ $.Widget.prototype._setOption.apply( this, arguments );
+ if ( key === "source" ) {
+ this._initSource();
+ }
+ if ( key === "appendTo" ) {
+ this.menu.element.appendTo( $( value || "body", this.element[0].ownerDocument )[0] )
+ }
+ if ( key === "disabled" && value && this.xhr ) {
+ this.xhr.abort();
+ }
+ },
+
+ _initSource: function() {
+ var self = this,
+ array,
+ url;
+ if ( $.isArray(this.options.source) ) {
+ array = this.options.source;
+ this.source = function( request, response ) {
+ response( $.ui.autocomplete.filter(array, request.term) );
+ };
+ } else if ( typeof this.options.source === "string" ) {
+ url = this.options.source;
+ this.source = function( request, response ) {
+ if ( self.xhr ) {
+ self.xhr.abort();
+ }
+ self.xhr = $.ajax({
+ url: url,
+ data: request,
+ dataType: "json",
+ autocompleteRequest: ++requestIndex,
+ success: function( data, status ) {
+ if ( this.autocompleteRequest === requestIndex ) {
+ response( data );
+ }
+ },
+ error: function() {
+ if ( this.autocompleteRequest === requestIndex ) {
+ response( [] );
+ }
+ }
+ });
+ };
+ } else {
+ this.source = this.options.source;
+ }
+ },
+
+ search: function( value, event ) {
+ value = value != null ? value : this.element.val();
+
+ // always save the actual value, not the one passed as an argument
+ this.term = this.element.val();
+
+ if ( value.length < this.options.minLength ) {
+ return this.close( event );
+ }
+
+ clearTimeout( this.closing );
+ if ( this._trigger( "search", event ) === false ) {
+ return;
+ }
+
+ return this._search( value );
+ },
+
+ _search: function( value ) {
+ this.pending++;
+ this.element.addClass( "ui-autocomplete-loading" );
+
+ this.source( { term: value }, this.response );
+ },
+
+ _response: function( content ) {
+ if ( !this.options.disabled && content && content.length ) {
+ content = this._normalize( content );
+ this._suggest( content );
+ this._trigger( "open" );
+ } else {
+ this.close();
+ }
+ this.pending--;
+ if ( !this.pending ) {
+ this.element.removeClass( "ui-autocomplete-loading" );
+ }
+ },
+
+ close: function( event ) {
+ clearTimeout( this.closing );
+ if ( this.menu.element.is(":visible") ) {
+ this.menu.element.hide();
+ this.menu.deactivate();
+ this._trigger( "close", event );
+ }
+ },
+
+ _change: function( event ) {
+ if ( this.previous !== this.element.val() ) {
+ this._trigger( "change", event, { item: this.selectedItem } );
+ }
+ },
+
+ _normalize: function( items ) {
+ // assume all items have the right format when the first item is complete
+ if ( items.length && items[0].label && items[0].value ) {
+ return items;
+ }
+ return $.map( items, function(item) {
+ if ( typeof item === "string" ) {
+ return {
+ label: item,
+ value: item
+ };
+ }
+ return $.extend({
+ label: item.label || item.value,
+ value: item.value || item.label
+ }, item );
+ });
+ },
+
+ _suggest: function( items ) {
+ var ul = this.menu.element
+ .empty()
+ .zIndex( this.element.zIndex() + 1 );
+ this._renderMenu( ul, items );
+ // TODO refresh should check if the active item is still in the dom, removing the need for a manual deactivate
+ this.menu.deactivate();
+ this.menu.refresh();
+
+ // size and position menu
+ ul.show();
+ this._resizeMenu();
+ ul.position( $.extend({
+ of: this.element
+ }, this.options.position ));
+
+ if ( this.options.autoFocus ) {
+ this.menu.next( new $.Event("mouseover") );
+ }
+ },
+
+ _resizeMenu: function() {
+ var ul = this.menu.element;
+ ul.outerWidth( Math.max(
+ ul.width( "" ).outerWidth(),
+ this.element.outerWidth()
+ ) );
+ },
+
+ _renderMenu: function( ul, items ) {
+ var self = this;
+ $.each( items, function( index, item ) {
+ self._renderItem( ul, item );
+ });
+ },
+
+ _renderItem: function( ul, item) {
+ return $( "<li></li>" )
+ .data( "item.autocomplete", item )
+ .append( $( "<a></a>" ).text( item.label ) )
+ .appendTo( ul );
+ },
+
+ _move: function( direction, event ) {
+ if ( !this.menu.element.is(":visible") ) {
+ this.search( null, event );
+ return;
+ }
+ if ( this.menu.first() && /^previous/.test(direction) ||
+ this.menu.last() && /^next/.test(direction) ) {
+ this.element.val( this.term );
+ this.menu.deactivate();
+ return;
+ }
+ this.menu[ direction ]( event );
+ },
+
+ widget: function() {
+ return this.menu.element;
+ }
+});
+
+$.extend( $.ui.autocomplete, {
+ escapeRegex: function( value ) {
+ return value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
+ },
+ filter: function(array, term) {
+ var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
+ return $.grep( array, function(value) {
+ return matcher.test( value.label || value.value || value );
+ });
+ }
+});
+
+}( jQuery ));
+
+/*
+ * jQuery UI Menu (not officially released)
+ *
+ * This widget isn't yet finished and the API is subject to change. We plan to finish
+ * it for the next release. You're welcome to give it a try anyway and give us feedback,
+ * as long as you're okay with migrating your code later on. We can help with that, too.
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Menu
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function($) {
+
+$.widget("ui.menu", {
+ _create: function() {
+ var self = this;
+ this.element
+ .addClass("ui-menu ui-widget ui-widget-content ui-corner-all")
+ .attr({
+ role: "listbox",
+ "aria-activedescendant": "ui-active-menuitem"
+ })
+ .click(function( event ) {
+ if ( !$( event.target ).closest( ".ui-menu-item a" ).length ) {
+ return;
+ }
+ // temporary
+ event.preventDefault();
+ self.select( event );
+ });
+ this.refresh();
+ },
+
+ refresh: function() {
+ var self = this;
+
+ // don't refresh list items that are already adapted
+ var items = this.element.children("li:not(.ui-menu-item):has(a)")
+ .addClass("ui-menu-item")
+ .attr("role", "menuitem");
+
+ items.children("a")
+ .addClass("ui-corner-all")
+ .attr("tabindex", -1)
+ // mouseenter doesn't work with event delegation
+ .mouseenter(function( event ) {
+ self.activate( event, $(this).parent() );
+ })
+ .mouseleave(function() {
+ self.deactivate();
+ });
+ },
+
+ activate: function( event, item ) {
+ this.deactivate();
+ if (this.hasScroll()) {
+ var offset = item.offset().top - this.element.offset().top,
+ scroll = this.element.scrollTop(),
+ elementHeight = this.element.height();
+ if (offset < 0) {
+ this.element.scrollTop( scroll + offset);
+ } else if (offset >= elementHeight) {
+ this.element.scrollTop( scroll + offset - elementHeight + item.height());
+ }
+ }
+ this.active = item.eq(0)
+ .children("a")
+ .addClass("ui-state-hover")
+ .attr("id", "ui-active-menuitem")
+ .end();
+ this._trigger("focus", event, { item: item });
+ },
+
+ deactivate: function() {
+ if (!this.active) { return; }
+
+ this.active.children("a")
+ .removeClass("ui-state-hover")
+ .removeAttr("id");
+ this._trigger("blur");
+ this.active = null;
+ },
+
+ next: function(event) {
+ this.move("next", ".ui-menu-item:first", event);
+ },
+
+ previous: function(event) {
+ this.move("prev", ".ui-menu-item:last", event);
+ },
+
+ first: function() {
+ return this.active && !this.active.prevAll(".ui-menu-item").length;
+ },
+
+ last: function() {
+ return this.active && !this.active.nextAll(".ui-menu-item").length;
+ },
+
+ move: function(direction, edge, event) {
+ if (!this.active) {
+ this.activate(event, this.element.children(edge));
+ return;
+ }
+ var next = this.active[direction + "All"](".ui-menu-item").eq(0);
+ if (next.length) {
+ this.activate(event, next);
+ } else {
+ this.activate(event, this.element.children(edge));
+ }
+ },
+
+ // TODO merge with previousPage
+ nextPage: function(event) {
+ if (this.hasScroll()) {
+ // TODO merge with no-scroll-else
+ if (!this.active || this.last()) {
+ this.activate(event, this.element.children(".ui-menu-item:first"));
+ return;
+ }
+ var base = this.active.offset().top,
+ height = this.element.height(),
+ result = this.element.children(".ui-menu-item").filter(function() {
+ var close = $(this).offset().top - base - height + $(this).height();
+ // TODO improve approximation
+ return close < 10 && close > -10;
+ });
+
+ // TODO try to catch this earlier when scrollTop indicates the last page anyway
+ if (!result.length) {
+ result = this.element.children(".ui-menu-item:last");
+ }
+ this.activate(event, result);
+ } else {
+ this.activate(event, this.element.children(".ui-menu-item")
+ .filter(!this.active || this.last() ? ":first" : ":last"));
+ }
+ },
+
+ // TODO merge with nextPage
+ previousPage: function(event) {
+ if (this.hasScroll()) {
+ // TODO merge with no-scroll-else
+ if (!this.active || this.first()) {
+ this.activate(event, this.element.children(".ui-menu-item:last"));
+ return;
+ }
+
+ var base = this.active.offset().top,
+ height = this.element.height();
+ result = this.element.children(".ui-menu-item").filter(function() {
+ var close = $(this).offset().top - base + height - $(this).height();
+ // TODO improve approximation
+ return close < 10 && close > -10;
+ });
+
+ // TODO try to catch this earlier when scrollTop indicates the last page anyway
+ if (!result.length) {
+ result = this.element.children(".ui-menu-item:first");
+ }
+ this.activate(event, result);
+ } else {
+ this.activate(event, this.element.children(".ui-menu-item")
+ .filter(!this.active || this.first() ? ":last" : ":first"));
+ }
+ },
+
+ hasScroll: function() {
+ return this.element.height() < this.element[ $.fn.prop ? "prop" : "attr" ]("scrollHeight");
+ },
+
+ select: function( event ) {
+ this._trigger("selected", event, { item: this.active });
+ }
+});
+
+}(jQuery));
+/*
+ * jQuery UI Button 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+var lastActive, startXPos, startYPos, clickDragged,
+ baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
+ stateClasses = "ui-state-hover ui-state-active ",
+ typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+ formResetHandler = function() {
+ var buttons = $( this ).find( ":ui-button" );
+ setTimeout(function() {
+ buttons.button( "refresh" );
+ }, 1 );
+ },
+ radioGroup = function( radio ) {
+ var name = radio.name,
+ form = radio.form,
+ radios = $( [] );
+ if ( name ) {
+ if ( form ) {
+ radios = $( form ).find( "[name='" + name + "']" );
+ } else {
+ radios = $( "[name='" + name + "']", radio.ownerDocument )
+ .filter(function() {
+ return !this.form;
+ });
+ }
+ }
+ return radios;
+ };
+
+$.widget( "ui.button", {
+ options: {
+ disabled: null,
+ text: true,
+ label: null,
+ icons: {
+ primary: null,
+ secondary: null
+ }
+ },
+ _create: function() {
+ this.element.closest( "form" )
+ .unbind( "reset.button" )
+ .bind( "reset.button", formResetHandler );
+
+ if ( typeof this.options.disabled !== "boolean" ) {
+ this.options.disabled = this.element.propAttr( "disabled" );
+ }
+
+ this._determineButtonType();
+ this.hasTitle = !!this.buttonElement.attr( "title" );
+
+ var self = this,
+ options = this.options,
+ toggleButton = this.type === "checkbox" || this.type === "radio",
+ hoverClass = "ui-state-hover" + ( !toggleButton ? " ui-state-active" : "" ),
+ focusClass = "ui-state-focus";
+
+ if ( options.label === null ) {
+ options.label = this.buttonElement.html();
+ }
+
+ if ( this.element.is( ":disabled" ) ) {
+ options.disabled = true;
+ }
+
+ this.buttonElement
+ .addClass( baseClasses )
+ .attr( "role", "button" )
+ .bind( "mouseenter.button", function() {
+ if ( options.disabled ) {
+ return;
+ }
+ $( this ).addClass( "ui-state-hover" );
+ if ( this === lastActive ) {
+ $( this ).addClass( "ui-state-active" );
+ }
+ })
+ .bind( "mouseleave.button", function() {
+ if ( options.disabled ) {
+ return;
+ }
+ $( this ).removeClass( hoverClass );
+ })
+ .bind( "click.button", function( event ) {
+ if ( options.disabled ) {
+ event.preventDefault();
+ event.stopImmediatePropagation();
+ }
+ });
+
+ this.element
+ .bind( "focus.button", function() {
+ // no need to check disabled, focus won't be triggered anyway
+ self.buttonElement.addClass( focusClass );
+ })
+ .bind( "blur.button", function() {
+ self.buttonElement.removeClass( focusClass );
+ });
+
+ if ( toggleButton ) {
+ this.element.bind( "change.button", function() {
+ if ( clickDragged ) {
+ return;
+ }
+ self.refresh();
+ });
+ // if mouse moves between mousedown and mouseup (drag) set clickDragged flag
+ // prevents issue where button state changes but checkbox/radio checked state
+ // does not in Firefox (see ticket #6970)
+ this.buttonElement
+ .bind( "mousedown.button", function( event ) {
+ if ( options.disabled ) {
+ return;
+ }
+ clickDragged = false;
+ startXPos = event.pageX;
+ startYPos = event.pageY;
+ })
+ .bind( "mouseup.button", function( event ) {
+ if ( options.disabled ) {
+ return;
+ }
+ if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
+ clickDragged = true;
+ }
+ });
+ }
+
+ if ( this.type === "checkbox" ) {
+ this.buttonElement.bind( "click.button", function() {
+ if ( options.disabled || clickDragged ) {
+ return false;
+ }
+ $( this ).toggleClass( "ui-state-active" );
+ self.buttonElement.attr( "aria-pressed", self.element[0].checked );
+ });
+ } else if ( this.type === "radio" ) {
+ this.buttonElement.bind( "click.button", function() {
+ if ( options.disabled || clickDragged ) {
+ return false;
+ }
+ $( this ).addClass( "ui-state-active" );
+ self.buttonElement.attr( "aria-pressed", "true" );
+
+ var radio = self.element[ 0 ];
+ radioGroup( radio )
+ .not( radio )
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ });
+ } else {
+ this.buttonElement
+ .bind( "mousedown.button", function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).addClass( "ui-state-active" );
+ lastActive = this;
+ $( document ).one( "mouseup", function() {
+ lastActive = null;
+ });
+ })
+ .bind( "mouseup.button", function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).removeClass( "ui-state-active" );
+ })
+ .bind( "keydown.button", function(event) {
+ if ( options.disabled ) {
+ return false;
+ }
+ if ( event.keyCode == $.ui.keyCode.SPACE || event.keyCode == $.ui.keyCode.ENTER ) {
+ $( this ).addClass( "ui-state-active" );
+ }
+ })
+ .bind( "keyup.button", function() {
+ $( this ).removeClass( "ui-state-active" );
+ });
+
+ if ( this.buttonElement.is("a") ) {
+ this.buttonElement.keyup(function(event) {
+ if ( event.keyCode === $.ui.keyCode.SPACE ) {
+ // TODO pass through original event correctly (just as 2nd argument doesn't work)
+ $( this ).click();
+ }
+ });
+ }
+ }
+
+ // TODO: pull out $.Widget's handling for the disabled option into
+ // $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
+ // be overridden by individual plugins
+ this._setOption( "disabled", options.disabled );
+ this._resetButton();
+ },
+
+ _determineButtonType: function() {
+
+ if ( this.element.is(":checkbox") ) {
+ this.type = "checkbox";
+ } else if ( this.element.is(":radio") ) {
+ this.type = "radio";
+ } else if ( this.element.is("input") ) {
+ this.type = "input";
+ } else {
+ this.type = "button";
+ }
+
+ if ( this.type === "checkbox" || this.type === "radio" ) {
+ // we don't search against the document in case the element
+ // is disconnected from the DOM
+ var ancestor = this.element.parents().filter(":last"),
+ labelSelector = "label[for='" + this.element.attr("id") + "']";
+ this.buttonElement = ancestor.find( labelSelector );
+ if ( !this.buttonElement.length ) {
+ ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+ this.buttonElement = ancestor.filter( labelSelector );
+ if ( !this.buttonElement.length ) {
+ this.buttonElement = ancestor.find( labelSelector );
+ }
+ }
+ this.element.addClass( "ui-helper-hidden-accessible" );
+
+ var checked = this.element.is( ":checked" );
+ if ( checked ) {
+ this.buttonElement.addClass( "ui-state-active" );
+ }
+ this.buttonElement.attr( "aria-pressed", checked );
+ } else {
+ this.buttonElement = this.element;
+ }
+ },
+
+ widget: function() {
+ return this.buttonElement;
+ },
+
+ destroy: function() {
+ this.element
+ .removeClass( "ui-helper-hidden-accessible" );
+ this.buttonElement
+ .removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
+ .removeAttr( "role" )
+ .removeAttr( "aria-pressed" )
+ .html( this.buttonElement.find(".ui-button-text").html() );
+
+ if ( !this.hasTitle ) {
+ this.buttonElement.removeAttr( "title" );
+ }
+
+ $.Widget.prototype.destroy.call( this );
+ },
+
+ _setOption: function( key, value ) {
+ $.Widget.prototype._setOption.apply( this, arguments );
+ if ( key === "disabled" ) {
+ if ( value ) {
+ this.element.propAttr( "disabled", true );
+ } else {
+ this.element.propAttr( "disabled", false );
+ }
+ return;
+ }
+ this._resetButton();
+ },
+
+ refresh: function() {
+ var isDisabled = this.element.is( ":disabled" );
+ if ( isDisabled !== this.options.disabled ) {
+ this._setOption( "disabled", isDisabled );
+ }
+ if ( this.type === "radio" ) {
+ radioGroup( this.element[0] ).each(function() {
+ if ( $( this ).is( ":checked" ) ) {
+ $( this ).button( "widget" )
+ .addClass( "ui-state-active" )
+ .attr( "aria-pressed", "true" );
+ } else {
+ $( this ).button( "widget" )
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ }
+ });
+ } else if ( this.type === "checkbox" ) {
+ if ( this.element.is( ":checked" ) ) {
+ this.buttonElement
+ .addClass( "ui-state-active" )
+ .attr( "aria-pressed", "true" );
+ } else {
+ this.buttonElement
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ }
+ }
+ },
+
+ _resetButton: function() {
+ if ( this.type === "input" ) {
+ if ( this.options.label ) {
+ this.element.val( this.options.label );
+ }
+ return;
+ }
+ var buttonElement = this.buttonElement.removeClass( typeClasses ),
+ buttonText = $( "<span></span>" )
+ .addClass( "ui-button-text" )
+ .html( this.options.label )
+ .appendTo( buttonElement.empty() )
+ .text(),
+ icons = this.options.icons,
+ multipleIcons = icons.primary && icons.secondary,
+ buttonClasses = [];
+
+ if ( icons.primary || icons.secondary ) {
+ if ( this.options.text ) {
+ buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
+ }
+
+ if ( icons.primary ) {
+ buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
+ }
+
+ if ( icons.secondary ) {
+ buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
+ }
+
+ if ( !this.options.text ) {
+ buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
+
+ if ( !this.hasTitle ) {
+ buttonElement.attr( "title", buttonText );
+ }
+ }
+ } else {
+ buttonClasses.push( "ui-button-text-only" );
+ }
+ buttonElement.addClass( buttonClasses.join( " " ) );
+ }
+});
+
+$.widget( "ui.buttonset", {
+ options: {
+ items: ":button, :submit, :reset, :checkbox, :radio, a, :data(button)"
+ },
+
+ _create: function() {
+ this.element.addClass( "ui-buttonset" );
+ },
+
+ _init: function() {
+ this.refresh();
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "disabled" ) {
+ this.buttons.button( "option", key, value );
+ }
+
+ $.Widget.prototype._setOption.apply( this, arguments );
+ },
+
+ refresh: function() {
+ var ltr = this.element.css( "direction" ) === "ltr";
+
+ this.buttons = this.element.find( this.options.items )
+ .filter( ":ui-button" )
+ .button( "refresh" )
+ .end()
+ .not( ":ui-button" )
+ .button()
+ .end()
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
+ .filter( ":first" )
+ .addClass( ltr ? "ui-corner-left" : "ui-corner-right" )
+ .end()
+ .filter( ":last" )
+ .addClass( ltr ? "ui-corner-right" : "ui-corner-left" )
+ .end()
+ .end();
+ },
+
+ destroy: function() {
+ this.element.removeClass( "ui-buttonset" );
+ this.buttons
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-corner-left ui-corner-right" )
+ .end()
+ .button( "destroy" );
+
+ $.Widget.prototype.destroy.call( this );
+ }
+});
+
+}( jQuery ) );
+/*
+ * jQuery UI Datepicker 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker
+ *
+ * Depends:
+ * jquery.ui.core.js
+ */
+(function( $, undefined ) {
+
+$.extend($.ui, { datepicker: { version: "1.8.16" } });
+
+var PROP_NAME = 'datepicker';
+var dpuuid = new Date().getTime();
+var instActive;
+
+/* Date picker manager.
+ Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+ Settings for (groups of) date pickers are maintained in an instance object,
+ allowing multiple different settings on the same page. */
+
+function Datepicker() {
+ this.debug = false; // Change this to true to start debugging
+ this._curInst = null; // The current instance in use
+ this._keyEvent = false; // If the last event was a key event
+ this._disabledInputs = []; // List of date picker inputs that have been disabled
+ this._datepickerShowing = false; // True if the popup picker is showing , false if not
+ this._inDialog = false; // True if showing within a "dialog", false if not
+ this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division
+ this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class
+ this._appendClass = 'ui-datepicker-append'; // The name of the append marker class
+ this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class
+ this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class
+ this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class
+ this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class
+ this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class
+ this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class
+ this.regional = []; // Available regional settings, indexed by language code
+ this.regional[''] = { // Default regional settings
+ closeText: 'Done', // Display text for close link
+ prevText: 'Prev', // Display text for previous month link
+ nextText: 'Next', // Display text for next month link
+ currentText: 'Today', // Display text for current month link
+ monthNames: ['January','February','March','April','May','June',
+ 'July','August','September','October','November','December'], // Names of months for drop-down and formatting
+ monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting
+ dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting
+ dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday
+ weekHeader: 'Wk', // Column header for week of the year
+ dateFormat: 'mm/dd/yy', // See format options on parseDate
+ firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+ isRTL: false, // True if right-to-left language, false if left-to-right
+ showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+ yearSuffix: '' // Additional text to append to the year in the month headers
+ };
+ this._defaults = { // Global defaults for all the date picker instances
+ showOn: 'focus', // 'focus' for popup on focus,
+ // 'button' for trigger button, or 'both' for either
+ showAnim: 'fadeIn', // Name of jQuery animation for popup
+ showOptions: {}, // Options for enhanced animations
+ defaultDate: null, // Used when field is blank: actual date,
+ // +/-number for offset from today, null for today
+ appendText: '', // Display text following the input box, e.g. showing the format
+ buttonText: '...', // Text for trigger button
+ buttonImage: '', // URL for trigger button image
+ buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+ hideIfNoPrevNext: false, // True to hide next/previous month links
+ // if not applicable, false to just disable them
+ navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+ gotoCurrent: false, // True if today link goes back to current selection instead
+ changeMonth: false, // True if month can be selected directly, false if only prev/next
+ changeYear: false, // True if year can be selected directly, false if only prev/next
+ yearRange: 'c-10:c+10', // Range of years to display in drop-down,
+ // either relative to today's year (-nn:+nn), relative to currently displayed year
+ // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+ showOtherMonths: false, // True to show dates in other months, false to leave blank
+ selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+ showWeek: false, // True to show week of the year, false to not show it
+ calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+ // takes a Date and returns the number of the week for it
+ shortYearCutoff: '+10', // Short year values < this are in the current century,
+ // > this are in the previous century,
+ // string value starting with '+' for current year + value
+ minDate: null, // The earliest selectable date, or null for no limit
+ maxDate: null, // The latest selectable date, or null for no limit
+ duration: 'fast', // Duration of display/closure
+ beforeShowDay: null, // Function that takes a date and returns an array with
+ // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '',
+ // [2] = cell title (optional), e.g. $.datepicker.noWeekends
+ beforeShow: null, // Function that takes an input field and
+ // returns a set of custom settings for the date picker
+ onSelect: null, // Define a callback function when a date is selected
+ onChangeMonthYear: null, // Define a callback function when the month or year is changed
+ onClose: null, // Define a callback function when the datepicker is closed
+ numberOfMonths: 1, // Number of months to show at a time
+ showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+ stepMonths: 1, // Number of months to step back/forward
+ stepBigMonths: 12, // Number of months to step back/forward for the big links
+ altField: '', // Selector for an alternate field to store selected dates into
+ altFormat: '', // The date format to use for the alternate field
+ constrainInput: true, // The input is constrained by the current date format
+ showButtonPanel: false, // True to show button panel, false to not show it
+ autoSize: false, // True to size the input for the date format, false to leave as is
+ disabled: false // The initial disabled state
+ };
+ $.extend(this._defaults, this.regional['']);
+ this.dpDiv = bindHover($('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'));
+}
+
+$.extend(Datepicker.prototype, {
+ /* Class name added to elements to indicate already configured with a date picker. */
+ markerClassName: 'hasDatepicker',
+
+ //Keep track of the maximum number of rows displayed (see #7043)
+ maxRows: 4,
+
+ /* Debug logging (if enabled). */
+ log: function () {
+ if (this.debug)
+ console.log.apply('', arguments);
+ },
+
+ // TODO rename to "widget" when switching to widget factory
+ _widgetDatepicker: function() {
+ return this.dpDiv;
+ },
+
+ /* Override the default settings for all instances of the date picker.
+ @param settings object - the new settings to use as defaults (anonymous object)
+ @return the manager object */
+ setDefaults: function(settings) {
+ extendRemove(this._defaults, settings || {});
+ return this;
+ },
+
+ /* Attach the date picker to a jQuery selection.
+ @param target element - the target input field or division or span
+ @param settings object - the new settings to use for this date picker instance (anonymous) */
+ _attachDatepicker: function(target, settings) {
+ // check for settings on the control itself - in namespace 'date:'
+ var inlineSettings = null;
+ for (var attrName in this._defaults) {
+ var attrValue = target.getAttribute('date:' + attrName);
+ if (attrValue) {
+ inlineSettings = inlineSettings || {};
+ try {
+ inlineSettings[attrName] = eval(attrValue);
+ } catch (err) {
+ inlineSettings[attrName] = attrValue;
+ }
+ }
+ }
+ var nodeName = target.nodeName.toLowerCase();
+ var inline = (nodeName == 'div' || nodeName == 'span');
+ if (!target.id) {
+ this.uuid += 1;
+ target.id = 'dp' + this.uuid;
+ }
+ var inst = this._newInst($(target), inline);
+ inst.settings = $.extend({}, settings || {}, inlineSettings || {});
+ if (nodeName == 'input') {
+ this._connectDatepicker(target, inst);
+ } else if (inline) {
+ this._inlineDatepicker(target, inst);
+ }
+ },
+
+ /* Create a new instance object. */
+ _newInst: function(target, inline) {
+ var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1'); // escape jQuery meta chars
+ return {id: id, input: target, // associated target
+ selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+ drawMonth: 0, drawYear: 0, // month being drawn
+ inline: inline, // is datepicker inline or not
+ dpDiv: (!inline ? this.dpDiv : // presentation div
+ bindHover($('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')))};
+ },
+
+ /* Attach the date picker to an input field. */
+ _connectDatepicker: function(target, inst) {
+ var input = $(target);
+ inst.append = $([]);
+ inst.trigger = $([]);
+ if (input.hasClass(this.markerClassName))
+ return;
+ this._attachments(input, inst);
+ input.addClass(this.markerClassName).keydown(this._doKeyDown).
+ keypress(this._doKeyPress).keyup(this._doKeyUp).
+ bind("setData.datepicker", function(event, key, value) {
+ inst.settings[key] = value;
+ }).bind("getData.datepicker", function(event, key) {
+ return this._get(inst, key);
+ });
+ this._autoSize(inst);
+ $.data(target, PROP_NAME, inst);
+ //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+ if( inst.settings.disabled ) {
+ this._disableDatepicker( target );
+ }
+ },
+
+ /* Make attachments based on settings. */
+ _attachments: function(input, inst) {
+ var appendText = this._get(inst, 'appendText');
+ var isRTL = this._get(inst, 'isRTL');
+ if (inst.append)
+ inst.append.remove();
+ if (appendText) {
+ inst.append = $('<span class="' + this._appendClass + '">' + appendText + '</span>');
+ input[isRTL ? 'before' : 'after'](inst.append);
+ }
+ input.unbind('focus', this._showDatepicker);
+ if (inst.trigger)
+ inst.trigger.remove();
+ var showOn = this._get(inst, 'showOn');
+ if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field
+ input.focus(this._showDatepicker);
+ if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked
+ var buttonText = this._get(inst, 'buttonText');
+ var buttonImage = this._get(inst, 'buttonImage');
+ inst.trigger = $(this._get(inst, 'buttonImageOnly') ?
+ $('<img/>').addClass(this._triggerClass).
+ attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
+ $('<button type="button"></button>').addClass(this._triggerClass).
+ html(buttonImage == '' ? buttonText : $('<img/>').attr(
+ { src:buttonImage, alt:buttonText, title:buttonText })));
+ input[isRTL ? 'before' : 'after'](inst.trigger);
+ inst.trigger.click(function() {
+ if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0])
+ $.datepicker._hideDatepicker();
+ else
+ $.datepicker._showDatepicker(input[0]);
+ return false;
+ });
+ }
+ },
+
+ /* Apply the maximum length for the date format. */
+ _autoSize: function(inst) {
+ if (this._get(inst, 'autoSize') && !inst.inline) {
+ var date = new Date(2009, 12 - 1, 20); // Ensure double digits
+ var dateFormat = this._get(inst, 'dateFormat');
+ if (dateFormat.match(/[DM]/)) {
+ var findMax = function(names) {
+ var max = 0;
+ var maxI = 0;
+ for (var i = 0; i < names.length; i++) {
+ if (names[i].length > max) {
+ max = names[i].length;
+ maxI = i;
+ }
+ }
+ return maxI;
+ };
+ date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
+ 'monthNames' : 'monthNamesShort'))));
+ date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
+ 'dayNames' : 'dayNamesShort'))) + 20 - date.getDay());
+ }
+ inst.input.attr('size', this._formatDate(inst, date).length);
+ }
+ },
+
+ /* Attach an inline date picker to a div. */
+ _inlineDatepicker: function(target, inst) {
+ var divSpan = $(target);
+ if (divSpan.hasClass(this.markerClassName))
+ return;
+ divSpan.addClass(this.markerClassName).append(inst.dpDiv).
+ bind("setData.datepicker", function(event, key, value){
+ inst.settings[key] = value;
+ }).bind("getData.datepicker", function(event, key){
+ return this._get(inst, key);
+ });
+ $.data(target, PROP_NAME, inst);
+ this._setDate(inst, this._getDefaultDate(inst), true);
+ this._updateDatepicker(inst);
+ this._updateAlternate(inst);
+ //If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+ if( inst.settings.disabled ) {
+ this._disableDatepicker( target );
+ }
+ // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+ // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+ inst.dpDiv.css( "display", "block" );
+ },
+
+ /* Pop-up the date picker in a "dialog" box.
+ @param input element - ignored
+ @param date string or Date - the initial date to display
+ @param onSelect function - the function to call when a date is selected
+ @param settings object - update the dialog date picker instance's settings (anonymous object)
+ @param pos int[2] - coordinates for the dialog's position within the screen or
+ event - with x/y coordinates or
+ leave empty for default (screen centre)
+ @return the manager object */
+ _dialogDatepicker: function(input, date, onSelect, settings, pos) {
+ var inst = this._dialogInst; // internal instance
+ if (!inst) {
+ this.uuid += 1;
+ var id = 'dp' + this.uuid;
+ this._dialogInput = $('<input type="text" id="' + id +
+ '" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');
+ this._dialogInput.keydown(this._doKeyDown);
+ $('body').append(this._dialogInput);
+ inst = this._dialogInst = this._newInst(this._dialogInput, false);
+ inst.settings = {};
+ $.data(this._dialogInput[0], PROP_NAME, inst);
+ }
+ extendRemove(inst.settings, settings || {});
+ date = (date && date.constructor == Date ? this._formatDate(inst, date) : date);
+ this._dialogInput.val(date);
+
+ this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+ if (!this._pos) {
+ var browserWidth = document.documentElement.clientWidth;
+ var browserHeight = document.documentElement.clientHeight;
+ var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+ var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+ this._pos = // should use actual width/height below
+ [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+ }
+
+ // move input on screen for focus, but hidden behind dialog
+ this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px');
+ inst.settings.onSelect = onSelect;
+ this._inDialog = true;
+ this.dpDiv.addClass(this._dialogClass);
+ this._showDatepicker(this._dialogInput[0]);
+ if ($.blockUI)
+ $.blockUI(this.dpDiv);
+ $.data(this._dialogInput[0], PROP_NAME, inst);
+ return this;
+ },
+
+ /* Detach a datepicker from its control.
+ @param target element - the target input field or division or span */
+ _destroyDatepicker: function(target) {
+ var $target = $(target);
+ var inst = $.data(target, PROP_NAME);
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+ var nodeName = target.nodeName.toLowerCase();
+ $.removeData(target, PROP_NAME);
+ if (nodeName == 'input') {
+ inst.append.remove();
+ inst.trigger.remove();
+ $target.removeClass(this.markerClassName).
+ unbind('focus', this._showDatepicker).
+ unbind('keydown', this._doKeyDown).
+ unbind('keypress', this._doKeyPress).
+ unbind('keyup', this._doKeyUp);
+ } else if (nodeName == 'div' || nodeName == 'span')
+ $target.removeClass(this.markerClassName).empty();
+ },
+
+ /* Enable the date picker to a jQuery selection.
+ @param target element - the target input field or division or span */
+ _enableDatepicker: function(target) {
+ var $target = $(target);
+ var inst = $.data(target, PROP_NAME);
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+ var nodeName = target.nodeName.toLowerCase();
+ if (nodeName == 'input') {
+ target.disabled = false;
+ inst.trigger.filter('button').
+ each(function() { this.disabled = false; }).end().
+ filter('img').css({opacity: '1.0', cursor: ''});
+ }
+ else if (nodeName == 'div' || nodeName == 'span') {
+ var inline = $target.children('.' + this._inlineClass);
+ inline.children().removeClass('ui-state-disabled');
+ inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+ removeAttr("disabled");
+ }
+ this._disabledInputs = $.map(this._disabledInputs,
+ function(value) { return (value == target ? null : value); }); // delete entry
+ },
+
+ /* Disable the date picker to a jQuery selection.
+ @param target element - the target input field or division or span */
+ _disableDatepicker: function(target) {
+ var $target = $(target);
+ var inst = $.data(target, PROP_NAME);
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+ var nodeName = target.nodeName.toLowerCase();
+ if (nodeName == 'input') {
+ target.disabled = true;
+ inst.trigger.filter('button').
+ each(function() { this.disabled = true; }).end().
+ filter('img').css({opacity: '0.5', cursor: 'default'});
+ }
+ else if (nodeName == 'div' || nodeName == 'span') {
+ var inline = $target.children('.' + this._inlineClass);
+ inline.children().addClass('ui-state-disabled');
+ inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+ attr("disabled", "disabled");
+ }
+ this._disabledInputs = $.map(this._disabledInputs,
+ function(value) { return (value == target ? null : value); }); // delete entry
+ this._disabledInputs[this._disabledInputs.length] = target;
+ },
+
+ /* Is the first field in a jQuery collection disabled as a datepicker?
+ @param target element - the target input field or division or span
+ @return boolean - true if disabled, false if enabled */
+ _isDisabledDatepicker: function(target) {
+ if (!target) {
+ return false;
+ }
+ for (var i = 0; i < this._disabledInputs.length; i++) {
+ if (this._disabledInputs[i] == target)
+ return true;
+ }
+ return false;
+ },
+
+ /* Retrieve the instance data for the target control.
+ @param target element - the target input field or division or span
+ @return object - the associated instance data
+ @throws error if a jQuery problem getting data */
+ _getInst: function(target) {
+ try {
+ return $.data(target, PROP_NAME);
+ }
+ catch (err) {
+ throw 'Missing instance data for this datepicker';
+ }
+ },
+
+ /* Update or retrieve the settings for a date picker attached to an input field or division.
+ @param target element - the target input field or division or span
+ @param name object - the new settings to update or
+ string - the name of the setting to change or retrieve,
+ when retrieving also 'all' for all instance settings or
+ 'defaults' for all global defaults
+ @param value any - the new value for the setting
+ (omit if above is an object or to retrieve a value) */
+ _optionDatepicker: function(target, name, value) {
+ var inst = this._getInst(target);
+ if (arguments.length == 2 && typeof name == 'string') {
+ return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) :
+ (inst ? (name == 'all' ? $.extend({}, inst.settings) :
+ this._get(inst, name)) : null));
+ }
+ var settings = name || {};
+ if (typeof name == 'string') {
+ settings = {};
+ settings[name] = value;
+ }
+ if (inst) {
+ if (this._curInst == inst) {
+ this._hideDatepicker();
+ }
+ var date = this._getDateDatepicker(target, true);
+ var minDate = this._getMinMaxDate(inst, 'min');
+ var maxDate = this._getMinMaxDate(inst, 'max');
+ extendRemove(inst.settings, settings);
+ // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+ if (minDate !== null && settings['dateFormat'] !== undefined && settings['minDate'] === undefined)
+ inst.settings.minDate = this._formatDate(inst, minDate);
+ if (maxDate !== null && settings['dateFormat'] !== undefined && settings['maxDate'] === undefined)
+ inst.settings.maxDate = this._formatDate(inst, maxDate);
+ this._attachments($(target), inst);
+ this._autoSize(inst);
+ this._setDate(inst, date);
+ this._updateAlternate(inst);
+ this._updateDatepicker(inst);
+ }
+ },
+
+ // change method deprecated
+ _changeDatepicker: function(target, name, value) {
+ this._optionDatepicker(target, name, value);
+ },
+
+ /* Redraw the date picker attached to an input field or division.
+ @param target element - the target input field or division or span */
+ _refreshDatepicker: function(target) {
+ var inst = this._getInst(target);
+ if (inst) {
+ this._updateDatepicker(inst);
+ }
+ },
+
+ /* Set the dates for a jQuery selection.
+ @param target element - the target input field or division or span
+ @param date Date - the new date */
+ _setDateDatepicker: function(target, date) {
+ var inst = this._getInst(target);
+ if (inst) {
+ this._setDate(inst, date);
+ this._updateDatepicker(inst);
+ this._updateAlternate(inst);
+ }
+ },
+
+ /* Get the date(s) for the first entry in a jQuery selection.
+ @param target element - the target input field or division or span
+ @param noDefault boolean - true if no default date is to be used
+ @return Date - the current date */
+ _getDateDatepicker: function(target, noDefault) {
+ var inst = this._getInst(target);
+ if (inst && !inst.inline)
+ this._setDateFromField(inst, noDefault);
+ return (inst ? this._getDate(inst) : null);
+ },
+
+ /* Handle keystrokes. */
+ _doKeyDown: function(event) {
+ var inst = $.datepicker._getInst(event.target);
+ var handled = true;
+ var isRTL = inst.dpDiv.is('.ui-datepicker-rtl');
+ inst._keyEvent = true;
+ if ($.datepicker._datepickerShowing)
+ switch (event.keyCode) {
+ case 9: $.datepicker._hideDatepicker();
+ handled = false;
+ break; // hide on tab out
+ case 13: var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' +
+ $.datepicker._currentClass + ')', inst.dpDiv);
+ if (sel[0])
+ $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+ var onSelect = $.datepicker._get(inst, 'onSelect');
+ if (onSelect) {
+ var dateStr = $.datepicker._formatDate(inst);
+
+ // trigger custom callback
+ onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+ }
+ else
+ $.datepicker._hideDatepicker();
+ return false; // don't submit the form
+ break; // select the value on enter
+ case 27: $.datepicker._hideDatepicker();
+ break; // hide on escape
+ case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ -$.datepicker._get(inst, 'stepBigMonths') :
+ -$.datepicker._get(inst, 'stepMonths')), 'M');
+ break; // previous month/year on page up/+ ctrl
+ case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ +$.datepicker._get(inst, 'stepBigMonths') :
+ +$.datepicker._get(inst, 'stepMonths')), 'M');
+ break; // next month/year on page down/+ ctrl
+ case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target);
+ handled = event.ctrlKey || event.metaKey;
+ break; // clear on ctrl or command +end
+ case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target);
+ handled = event.ctrlKey || event.metaKey;
+ break; // current on ctrl or command +home
+ case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D');
+ handled = event.ctrlKey || event.metaKey;
+ // -1 day on ctrl or command +left
+ if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ -$.datepicker._get(inst, 'stepBigMonths') :
+ -$.datepicker._get(inst, 'stepMonths')), 'M');
+ // next month/year on alt +left on Mac
+ break;
+ case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D');
+ handled = event.ctrlKey || event.metaKey;
+ break; // -1 week on ctrl or command +up
+ case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D');
+ handled = event.ctrlKey || event.metaKey;
+ // +1 day on ctrl or command +right
+ if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ +$.datepicker._get(inst, 'stepBigMonths') :
+ +$.datepicker._get(inst, 'stepMonths')), 'M');
+ // next month/year on alt +right
+ break;
+ case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D');
+ handled = event.ctrlKey || event.metaKey;
+ break; // +1 week on ctrl or command +down
+ default: handled = false;
+ }
+ else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home
+ $.datepicker._showDatepicker(this);
+ else {
+ handled = false;
+ }
+ if (handled) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ },
+
+ /* Filter entered characters - based on date format. */
+ _doKeyPress: function(event) {
+ var inst = $.datepicker._getInst(event.target);
+ if ($.datepicker._get(inst, 'constrainInput')) {
+ var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat'));
+ var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode);
+ return event.ctrlKey || event.metaKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1);
+ }
+ },
+
+ /* Synchronise manual entry and field/alternate field. */
+ _doKeyUp: function(event) {
+ var inst = $.datepicker._getInst(event.target);
+ if (inst.input.val() != inst.lastVal) {
+ try {
+ var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'),
+ (inst.input ? inst.input.val() : null),
+ $.datepicker._getFormatConfig(inst));
+ if (date) { // only if valid
+ $.datepicker._setDateFromField(inst);
+ $.datepicker._updateAlternate(inst);
+ $.datepicker._updateDatepicker(inst);
+ }
+ }
+ catch (event) {
+ $.datepicker.log(event);
+ }
+ }
+ return true;
+ },
+
+ /* Pop-up the date picker for a given input field.
+ If false returned from beforeShow event handler do not show.
+ @param input element - the input field attached to the date picker or
+ event - if triggered by focus */
+ _showDatepicker: function(input) {
+ input = input.target || input;
+ if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger
+ input = $('input', input.parentNode)[0];
+ if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here
+ return;
+ var inst = $.datepicker._getInst(input);
+ if ($.datepicker._curInst && $.datepicker._curInst != inst) {
+ if ( $.datepicker._datepickerShowing ) {
+ $.datepicker._triggerOnClose($.datepicker._curInst);
+ }
+ $.datepicker._curInst.dpDiv.stop(true, true);
+ }
+ var beforeShow = $.datepicker._get(inst, 'beforeShow');
+ var beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
+ if(beforeShowSettings === false){
+ //false
+ return;
+ }
+ extendRemove(inst.settings, beforeShowSettings);
+ inst.lastVal = null;
+ $.datepicker._lastInput = input;
+ $.datepicker._setDateFromField(inst);
+ if ($.datepicker._inDialog) // hide cursor
+ input.value = '';
+ if (!$.datepicker._pos) { // position below input
+ $.datepicker._pos = $.datepicker._findPos(input);
+ $.datepicker._pos[1] += input.offsetHeight; // add the height
+ }
+ var isFixed = false;
+ $(input).parents().each(function() {
+ isFixed |= $(this).css('position') == 'fixed';
+ return !isFixed;
+ });
+ if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled
+ $.datepicker._pos[0] -= document.documentElement.scrollLeft;
+ $.datepicker._pos[1] -= document.documentElement.scrollTop;
+ }
+ var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+ $.datepicker._pos = null;
+ //to avoid flashes on Firefox
+ inst.dpDiv.empty();
+ // determine sizing offscreen
+ inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'});
+ $.datepicker._updateDatepicker(inst);
+ // fix width for dynamic number of date pickers
+ // and adjust position before showing
+ offset = $.datepicker._checkOffset(inst, offset, isFixed);
+ inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
+ 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none',
+ left: offset.left + 'px', top: offset.top + 'px'});
+ if (!inst.inline) {
+ var showAnim = $.datepicker._get(inst, 'showAnim');
+ var duration = $.datepicker._get(inst, 'duration');
+ var postProcess = function() {
+ var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only
+ if( !! cover.length ){
+ var borders = $.datepicker._getBorders(inst.dpDiv);
+ cover.css({left: -borders[0], top: -borders[1],
+ width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()});
+ }
+ };
+ inst.dpDiv.zIndex($(input).zIndex()+1);
+ $.datepicker._datepickerShowing = true;
+ if ($.effects && $.effects[showAnim])
+ inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
+ else
+ inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess);
+ if (!showAnim || !duration)
+ postProcess();
+ if (inst.input.is(':visible') && !inst.input.is(':disabled'))
+ inst.input.focus();
+ $.datepicker._curInst = inst;
+ }
+ },
+
+ /* Generate the date picker content. */
+ _updateDatepicker: function(inst) {
+ var self = this;
+ self.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+ var borders = $.datepicker._getBorders(inst.dpDiv);
+ instActive = inst; // for delegate hover events
+ inst.dpDiv.empty().append(this._generateHTML(inst));
+ var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only
+ if( !!cover.length ){ //avoid call to outerXXXX() when not in IE6
+ cover.css({left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()})
+ }
+ inst.dpDiv.find('.' + this._dayOverClass + ' a').mouseover();
+ var numMonths = this._getNumberOfMonths(inst);
+ var cols = numMonths[1];
+ var width = 17;
+ inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('');
+ if (cols > 1)
+ inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em');
+ inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') +
+ 'Class']('ui-datepicker-multi');
+ inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') +
+ 'Class']('ui-datepicker-rtl');
+ if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input &&
+ // #6694 - don't focus the input if it's already focused
+ // this breaks the change event in IE
+ inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement)
+ inst.input.focus();
+ // deffered render of the years select (to avoid flashes on Firefox)
+ if( inst.yearshtml ){
+ var origyearshtml = inst.yearshtml;
+ setTimeout(function(){
+ //assure that inst.yearshtml didn't change.
+ if( origyearshtml === inst.yearshtml && inst.yearshtml ){
+ inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml);
+ }
+ origyearshtml = inst.yearshtml = null;
+ }, 0);
+ }
+ },
+
+ /* Retrieve the size of left and top borders for an element.
+ @param elem (jQuery object) the element of interest
+ @return (number[2]) the left and top borders */
+ _getBorders: function(elem) {
+ var convert = function(value) {
+ return {thin: 1, medium: 2, thick: 3}[value] || value;
+ };
+ return [parseFloat(convert(elem.css('border-left-width'))),
+ parseFloat(convert(elem.css('border-top-width')))];
+ },
+
+ /* Check positioning to remain on screen. */
+ _checkOffset: function(inst, offset, isFixed) {
+ var dpWidth = inst.dpDiv.outerWidth();
+ var dpHeight = inst.dpDiv.outerHeight();
+ var inputWidth = inst.input ? inst.input.outerWidth() : 0;
+ var inputHeight = inst.input ? inst.input.outerHeight() : 0;
+ var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft();
+ var viewHeight = document.documentElement.clientHeight + $(document).scrollTop();
+
+ offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0);
+ offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0;
+ offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+
+ // now check if datepicker is showing outside window viewport - move to a better place if so.
+ offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
+ Math.abs(offset.left + dpWidth - viewWidth) : 0);
+ offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
+ Math.abs(dpHeight + inputHeight) : 0);
+
+ return offset;
+ },
+
+ /* Find an object's position on the screen. */
+ _findPos: function(obj) {
+ var inst = this._getInst(obj);
+ var isRTL = this._get(inst, 'isRTL');
+ while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.filters.hidden(obj))) {
+ obj = obj[isRTL ? 'previousSibling' : 'nextSibling'];
+ }
+ var position = $(obj).offset();
+ return [position.left, position.top];
+ },
+
+ /* Trigger custom callback of onClose. */
+ _triggerOnClose: function(inst) {
+ var onClose = this._get(inst, 'onClose');
+ if (onClose)
+ onClose.apply((inst.input ? inst.input[0] : null),
+ [(inst.input ? inst.input.val() : ''), inst]);
+ },
+
+ /* Hide the date picker from view.
+ @param input element - the input field attached to the date picker */
+ _hideDatepicker: function(input) {
+ var inst = this._curInst;
+ if (!inst || (input && inst != $.data(input, PROP_NAME)))
+ return;
+ if (this._datepickerShowing) {
+ var showAnim = this._get(inst, 'showAnim');
+ var duration = this._get(inst, 'duration');
+ var postProcess = function() {
+ $.datepicker._tidyDialog(inst);
+ this._curInst = null;
+ };
+ if ($.effects && $.effects[showAnim])
+ inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
+ else
+ inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' :
+ (showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess);
+ if (!showAnim)
+ postProcess();
+ $.datepicker._triggerOnClose(inst);
+ this._datepickerShowing = false;
+ this._lastInput = null;
+ if (this._inDialog) {
+ this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' });
+ if ($.blockUI) {
+ $.unblockUI();
+ $('body').append(this.dpDiv);
+ }
+ }
+ this._inDialog = false;
+ }
+ },
+
+ /* Tidy up after a dialog display. */
+ _tidyDialog: function(inst) {
+ inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar');
+ },
+
+ /* Close date picker if clicked elsewhere. */
+ _checkExternalClick: function(event) {
+ if (!$.datepicker._curInst)
+ return;
+ var $target = $(event.target);
+ if ($target[0].id != $.datepicker._mainDivId &&
+ $target.parents('#' + $.datepicker._mainDivId).length == 0 &&
+ !$target.hasClass($.datepicker.markerClassName) &&
+ !$target.hasClass($.datepicker._triggerClass) &&
+ $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI))
+ $.datepicker._hideDatepicker();
+ },
+
+ /* Adjust one of the date sub-fields. */
+ _adjustDate: function(id, offset, period) {
+ var target = $(id);
+ var inst = this._getInst(target[0]);
+ if (this._isDisabledDatepicker(target[0])) {
+ return;
+ }
+ this._adjustInstDate(inst, offset +
+ (period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning
+ period);
+ this._updateDatepicker(inst);
+ },
+
+ /* Action for current link. */
+ _gotoToday: function(id) {
+ var target = $(id);
+ var inst = this._getInst(target[0]);
+ if (this._get(inst, 'gotoCurrent') && inst.currentDay) {
+ inst.selectedDay = inst.currentDay;
+ inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+ inst.drawYear = inst.selectedYear = inst.currentYear;
+ }
+ else {
+ var date = new Date();
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ }
+ this._notifyChange(inst);
+ this._adjustDate(target);
+ },
+
+ /* Action for selecting a new month/year. */
+ _selectMonthYear: function(id, select, period) {
+ var target = $(id);
+ var inst = this._getInst(target[0]);
+ inst['selected' + (period == 'M' ? 'Month' : 'Year')] =
+ inst['draw' + (period == 'M' ? 'Month' : 'Year')] =
+ parseInt(select.options[select.selectedIndex].value,10);
+ this._notifyChange(inst);
+ this._adjustDate(target);
+ },
+
+ /* Action for selecting a day. */
+ _selectDay: function(id, month, year, td) {
+ var target = $(id);
+ if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+ return;
+ }
+ var inst = this._getInst(target[0]);
+ inst.selectedDay = inst.currentDay = $('a', td).html();
+ inst.selectedMonth = inst.currentMonth = month;
+ inst.selectedYear = inst.currentYear = year;
+ this._selectDate(id, this._formatDate(inst,
+ inst.currentDay, inst.currentMonth, inst.currentYear));
+ },
+
+ /* Erase the input field and hide the date picker. */
+ _clearDate: function(id) {
+ var target = $(id);
+ var inst = this._getInst(target[0]);
+ this._selectDate(target, '');
+ },
+
+ /* Update the input field with the selected date. */
+ _selectDate: function(id, dateStr) {
+ var target = $(id);
+ var inst = this._getInst(target[0]);
+ dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+ if (inst.input)
+ inst.input.val(dateStr);
+ this._updateAlternate(inst);
+ var onSelect = this._get(inst, 'onSelect');
+ if (onSelect)
+ onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback
+ else if (inst.input)
+ inst.input.trigger('change'); // fire the change event
+ if (inst.inline)
+ this._updateDatepicker(inst);
+ else {
+ this._hideDatepicker();
+ this._lastInput = inst.input[0];
+ if (typeof(inst.input[0]) != 'object')
+ inst.input.focus(); // restore focus
+ this._lastInput = null;
+ }
+ },
+
+ /* Update any alternate field to synchronise with the main field. */
+ _updateAlternate: function(inst) {
+ var altField = this._get(inst, 'altField');
+ if (altField) { // update alternate field too
+ var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat');
+ var date = this._getDate(inst);
+ var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+ $(altField).each(function() { $(this).val(dateStr); });
+ }
+ },
+
+ /* Set as beforeShowDay function to prevent selection of weekends.
+ @param date Date - the date to customise
+ @return [boolean, string] - is this date selectable?, what is its CSS class? */
+ noWeekends: function(date) {
+ var day = date.getDay();
+ return [(day > 0 && day < 6), ''];
+ },
+
+ /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+ @param date Date - the date to get the week for
+ @return number - the number of the week within the year that contains this date */
+ iso8601Week: function(date) {
+ var checkDate = new Date(date.getTime());
+ // Find Thursday of this week starting on Monday
+ checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
+ var time = checkDate.getTime();
+ checkDate.setMonth(0); // Compare with Jan 1
+ checkDate.setDate(1);
+ return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+ },
+
+ /* Parse a string value into a date object.
+ See formatDate below for the possible formats.
+
+ @param format string - the expected format of the date
+ @param value string - the date in the above format
+ @param settings Object - attributes include:
+ shortYearCutoff number - the cutoff year for determining the century (optional)
+ dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
+ dayNames string[7] - names of the days from Sunday (optional)
+ monthNamesShort string[12] - abbreviated names of the months (optional)
+ monthNames string[12] - names of the months (optional)
+ @return Date - the extracted date value or null if value is blank */
+ parseDate: function (format, value, settings) {
+ if (format == null || value == null)
+ throw 'Invalid arguments';
+ value = (typeof value == 'object' ? value.toString() : value + '');
+ if (value == '')
+ return null;
+ var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff;
+ shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
+ new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+ var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
+ var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
+ var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
+ var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
+ var year = -1;
+ var month = -1;
+ var day = -1;
+ var doy = -1;
+ var literal = false;
+ // Check whether a format character is doubled
+ var lookAhead = function(match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
+ if (matches)
+ iFormat++;
+ return matches;
+ };
+ // Extract a number from the string value
+ var getNumber = function(match) {
+ var isDoubled = lookAhead(match);
+ var size = (match == '@' ? 14 : (match == '!' ? 20 :
+ (match == 'y' && isDoubled ? 4 : (match == 'o' ? 3 : 2))));
+ var digits = new RegExp('^\\d{1,' + size + '}');
+ var num = value.substring(iValue).match(digits);
+ if (!num)
+ throw 'Missing number at position ' + iValue;
+ iValue += num[0].length;
+ return parseInt(num[0], 10);
+ };
+ // Extract a name from the string value and convert to an index
+ var getName = function(match, shortNames, longNames) {
+ var names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
+ return [ [k, v] ];
+ }).sort(function (a, b) {
+ return -(a[1].length - b[1].length);
+ });
+ var index = -1;
+ $.each(names, function (i, pair) {
+ var name = pair[1];
+ if (value.substr(iValue, name.length).toLowerCase() == name.toLowerCase()) {
+ index = pair[0];
+ iValue += name.length;
+ return false;
+ }
+ });
+ if (index != -1)
+ return index + 1;
+ else
+ throw 'Unknown name at position ' + iValue;
+ };
+ // Confirm that a literal character matches the string value
+ var checkLiteral = function() {
+ if (value.charAt(iValue) != format.charAt(iFormat))
+ throw 'Unexpected literal at position ' + iValue;
+ iValue++;
+ };
+ var iValue = 0;
+ for (var iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal)
+ if (format.charAt(iFormat) == "'" && !lookAhead("'"))
+ literal = false;
+ else
+ checkLiteral();
+ else
+ switch (format.charAt(iFormat)) {
+ case 'd':
+ day = getNumber('d');
+ break;
+ case 'D':
+ getName('D', dayNamesShort, dayNames);
+ break;
+ case 'o':
+ doy = getNumber('o');
+ break;
+ case 'm':
+ month = getNumber('m');
+ break;
+ case 'M':
+ month = getName('M', monthNamesShort, monthNames);
+ break;
+ case 'y':
+ year = getNumber('y');
+ break;
+ case '@':
+ var date = new Date(getNumber('@'));
+ year = date.getFullYear();
+ month = date.getMonth() + 1;
+ day = date.getDate();
+ break;
+ case '!':
+ var date = new Date((getNumber('!') - this._ticksTo1970) / 10000);
+ year = date.getFullYear();
+ month = date.getMonth() + 1;
+ day = date.getDate();
+ break;
+ case "'":
+ if (lookAhead("'"))
+ checkLiteral();
+ else
+ literal = true;
+ break;
+ default:
+ checkLiteral();
+ }
+ }
+ if (iValue < value.length){
+ throw "Extra/unparsed characters found in date: " + value.substring(iValue);
+ }
+ if (year == -1)
+ year = new Date().getFullYear();
+ else if (year < 100)
+ year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+ (year <= shortYearCutoff ? 0 : -100);
+ if (doy > -1) {
+ month = 1;
+ day = doy;
+ do {
+ var dim = this._getDaysInMonth(year, month - 1);
+ if (day <= dim)
+ break;
+ month++;
+ day -= dim;
+ } while (true);
+ }
+ var date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+ if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day)
+ throw 'Invalid date'; // E.g. 31/02/00
+ return date;
+ },
+
+ /* Standard date formats. */
+ ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601)
+ COOKIE: 'D, dd M yy',
+ ISO_8601: 'yy-mm-dd',
+ RFC_822: 'D, d M y',
+ RFC_850: 'DD, dd-M-y',
+ RFC_1036: 'D, d M y',
+ RFC_1123: 'D, d M yy',
+ RFC_2822: 'D, d M yy',
+ RSS: 'D, d M y', // RFC 822
+ TICKS: '!',
+ TIMESTAMP: '@',
+ W3C: 'yy-mm-dd', // ISO 8601
+
+ _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
+ Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
+
+ /* Format a date object into a string value.
+ The format can be combinations of the following:
+ d - day of month (no leading zero)
+ dd - day of month (two digit)
+ o - day of year (no leading zeros)
+ oo - day of year (three digit)
+ D - day name short
+ DD - day name long
+ m - month of year (no leading zero)
+ mm - month of year (two digit)
+ M - month name short
+ MM - month name long
+ y - year (two digit)
+ yy - year (four digit)
+ @ - Unix timestamp (ms since 01/01/1970)
+ ! - Windows ticks (100ns since 01/01/0001)
+ '...' - literal text
+ '' - single quote
+
+ @param format string - the desired format of the date
+ @param date Date - the date value to format
+ @param settings Object - attributes include:
+ dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
+ dayNames string[7] - names of the days from Sunday (optional)
+ monthNamesShort string[12] - abbreviated names of the months (optional)
+ monthNames string[12] - names of the months (optional)
+ @return string - the date in the above format */
+ formatDate: function (format, date, settings) {
+ if (!date)
+ return '';
+ var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
+ var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
+ var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
+ var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
+ // Check whether a format character is doubled
+ var lookAhead = function(match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
+ if (matches)
+ iFormat++;
+ return matches;
+ };
+ // Format a number, with leading zero if necessary
+ var formatNumber = function(match, value, len) {
+ var num = '' + value;
+ if (lookAhead(match))
+ while (num.length < len)
+ num = '0' + num;
+ return num;
+ };
+ // Format a name, short or long as requested
+ var formatName = function(match, value, shortNames, longNames) {
+ return (lookAhead(match) ? longNames[value] : shortNames[value]);
+ };
+ var output = '';
+ var literal = false;
+ if (date)
+ for (var iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal)
+ if (format.charAt(iFormat) == "'" && !lookAhead("'"))
+ literal = false;
+ else
+ output += format.charAt(iFormat);
+ else
+ switch (format.charAt(iFormat)) {
+ case 'd':
+ output += formatNumber('d', date.getDate(), 2);
+ break;
+ case 'D':
+ output += formatName('D', date.getDay(), dayNamesShort, dayNames);
+ break;
+ case 'o':
+ output += formatNumber('o',
+ Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
+ break;
+ case 'm':
+ output += formatNumber('m', date.getMonth() + 1, 2);
+ break;
+ case 'M':
+ output += formatName('M', date.getMonth(), monthNamesShort, monthNames);
+ break;
+ case 'y':
+ output += (lookAhead('y') ? date.getFullYear() :
+ (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100);
+ break;
+ case '@':
+ output += date.getTime();
+ break;
+ case '!':
+ output += date.getTime() * 10000 + this._ticksTo1970;
+ break;
+ case "'":
+ if (lookAhead("'"))
+ output += "'";
+ else
+ literal = true;
+ break;
+ default:
+ output += format.charAt(iFormat);
+ }
+ }
+ return output;
+ },
+
+ /* Extract all possible characters from the date format. */
+ _possibleChars: function (format) {
+ var chars = '';
+ var literal = false;
+ // Check whether a format character is doubled
+ var lookAhead = function(match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
+ if (matches)
+ iFormat++;
+ return matches;
+ };
+ for (var iFormat = 0; iFormat < format.length; iFormat++)
+ if (literal)
+ if (format.charAt(iFormat) == "'" && !lookAhead("'"))
+ literal = false;
+ else
+ chars += format.charAt(iFormat);
+ else
+ switch (format.charAt(iFormat)) {
+ case 'd': case 'm': case 'y': case '@':
+ chars += '0123456789';
+ break;
+ case 'D': case 'M':
+ return null; // Accept anything
+ case "'":
+ if (lookAhead("'"))
+ chars += "'";
+ else
+ literal = true;
+ break;
+ default:
+ chars += format.charAt(iFormat);
+ }
+ return chars;
+ },
+
+ /* Get a setting value, defaulting if necessary. */
+ _get: function(inst, name) {
+ return inst.settings[name] !== undefined ?
+ inst.settings[name] : this._defaults[name];
+ },
+
+ /* Parse existing date and initialise date picker. */
+ _setDateFromField: function(inst, noDefault) {
+ if (inst.input.val() == inst.lastVal) {
+ return;
+ }
+ var dateFormat = this._get(inst, 'dateFormat');
+ var dates = inst.lastVal = inst.input ? inst.input.val() : null;
+ var date, defaultDate;
+ date = defaultDate = this._getDefaultDate(inst);
+ var settings = this._getFormatConfig(inst);
+ try {
+ date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+ } catch (event) {
+ this.log(event);
+ dates = (noDefault ? '' : dates);
+ }
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ inst.currentDay = (dates ? date.getDate() : 0);
+ inst.currentMonth = (dates ? date.getMonth() : 0);
+ inst.currentYear = (dates ? date.getFullYear() : 0);
+ this._adjustInstDate(inst);
+ },
+
+ /* Retrieve the default date shown on opening. */
+ _getDefaultDate: function(inst) {
+ return this._restrictMinMax(inst,
+ this._determineDate(inst, this._get(inst, 'defaultDate'), new Date()));
+ },
+
+ /* A date may be specified as an exact value or a relative one. */
+ _determineDate: function(inst, date, defaultDate) {
+ var offsetNumeric = function(offset) {
+ var date = new Date();
+ date.setDate(date.getDate() + offset);
+ return date;
+ };
+ var offsetString = function(offset) {
+ try {
+ return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'),
+ offset, $.datepicker._getFormatConfig(inst));
+ }
+ catch (e) {
+ // Ignore
+ }
+ var date = (offset.toLowerCase().match(/^c/) ?
+ $.datepicker._getDate(inst) : null) || new Date();
+ var year = date.getFullYear();
+ var month = date.getMonth();
+ var day = date.getDate();
+ var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;
+ var matches = pattern.exec(offset);
+ while (matches) {
+ switch (matches[2] || 'd') {
+ case 'd' : case 'D' :
+ day += parseInt(matches[1],10); break;
+ case 'w' : case 'W' :
+ day += parseInt(matches[1],10) * 7; break;
+ case 'm' : case 'M' :
+ month += parseInt(matches[1],10);
+ day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+ break;
+ case 'y': case 'Y' :
+ year += parseInt(matches[1],10);
+ day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+ break;
+ }
+ matches = pattern.exec(offset);
+ }
+ return new Date(year, month, day);
+ };
+ var newDate = (date == null || date === '' ? defaultDate : (typeof date == 'string' ? offsetString(date) :
+ (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
+ newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate);
+ if (newDate) {
+ newDate.setHours(0);
+ newDate.setMinutes(0);
+ newDate.setSeconds(0);
+ newDate.setMilliseconds(0);
+ }
+ return this._daylightSavingAdjust(newDate);
+ },
+
+ /* Handle switch to/from daylight saving.
+ Hours may be non-zero on daylight saving cut-over:
+ > 12 when midnight changeover, but then cannot generate
+ midnight datetime, so jump to 1AM, otherwise reset.
+ @param date (Date) the date to check
+ @return (Date) the corrected date */
+ _daylightSavingAdjust: function(date) {
+ if (!date) return null;
+ date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+ return date;
+ },
+
+ /* Set the date(s) directly. */
+ _setDate: function(inst, date, noChange) {
+ var clear = !date;
+ var origMonth = inst.selectedMonth;
+ var origYear = inst.selectedYear;
+ var newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
+ inst.selectedDay = inst.currentDay = newDate.getDate();
+ inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+ inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+ if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange)
+ this._notifyChange(inst);
+ this._adjustInstDate(inst);
+ if (inst.input) {
+ inst.input.val(clear ? '' : this._formatDate(inst));
+ }
+ },
+
+ /* Retrieve the date(s) directly. */
+ _getDate: function(inst) {
+ var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null :
+ this._daylightSavingAdjust(new Date(
+ inst.currentYear, inst.currentMonth, inst.currentDay)));
+ return startDate;
+ },
+
+ /* Generate the HTML for the current state of the date picker. */
+ _generateHTML: function(inst) {
+ var today = new Date();
+ today = this._daylightSavingAdjust(
+ new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time
+ var isRTL = this._get(inst, 'isRTL');
+ var showButtonPanel = this._get(inst, 'showButtonPanel');
+ var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext');
+ var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat');
+ var numMonths = this._getNumberOfMonths(inst);
+ var showCurrentAtPos = this._get(inst, 'showCurrentAtPos');
+ var stepMonths = this._get(inst, 'stepMonths');
+ var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1);
+ var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+ new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+ var minDate = this._getMinMaxDate(inst, 'min');
+ var maxDate = this._getMinMaxDate(inst, 'max');
+ var drawMonth = inst.drawMonth - showCurrentAtPos;
+ var drawYear = inst.drawYear;
+ if (drawMonth < 0) {
+ drawMonth += 12;
+ drawYear--;
+ }
+ if (maxDate) {
+ var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+ maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
+ maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+ while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+ drawMonth--;
+ if (drawMonth < 0) {
+ drawMonth = 11;
+ drawYear--;
+ }
+ }
+ }
+ inst.drawMonth = drawMonth;
+ inst.drawYear = drawYear;
+ var prevText = this._get(inst, 'prevText');
+ prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+ this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+ this._getFormatConfig(inst)));
+ var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+ '<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_' + dpuuid +
+ '.datepicker._adjustDate(\'#' + inst.id + '\', -' + stepMonths + ', \'M\');"' +
+ ' title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>' :
+ (hideIfNoPrevNext ? '' : '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+ prevText +'"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>'));
+ var nextText = this._get(inst, 'nextText');
+ nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+ this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+ this._getFormatConfig(inst)));
+ var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+ '<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_' + dpuuid +
+ '.datepicker._adjustDate(\'#' + inst.id + '\', +' + stepMonths + ', \'M\');"' +
+ ' title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>' :
+ (hideIfNoPrevNext ? '' : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+ nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>'));
+ var currentText = this._get(inst, 'currentText');
+ var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today);
+ currentText = (!navigationAsDateFormat ? currentText :
+ this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+ var controls = (!inst.inline ? '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_' + dpuuid +
+ '.datepicker._hideDatepicker();">' + this._get(inst, 'closeText') + '</button>' : '');
+ var buttonPanel = (showButtonPanel) ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (isRTL ? controls : '') +
+ (this._isInRange(inst, gotoDate) ? '<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_' + dpuuid +
+ '.datepicker._gotoToday(\'#' + inst.id + '\');"' +
+ '>' + currentText + '</button>' : '') + (isRTL ? '' : controls) + '</div>' : '';
+ var firstDay = parseInt(this._get(inst, 'firstDay'),10);
+ firstDay = (isNaN(firstDay) ? 0 : firstDay);
+ var showWeek = this._get(inst, 'showWeek');
+ var dayNames = this._get(inst, 'dayNames');
+ var dayNamesShort = this._get(inst, 'dayNamesShort');
+ var dayNamesMin = this._get(inst, 'dayNamesMin');
+ var monthNames = this._get(inst, 'monthNames');
+ var monthNamesShort = this._get(inst, 'monthNamesShort');
+ var beforeShowDay = this._get(inst, 'beforeShowDay');
+ var showOtherMonths = this._get(inst, 'showOtherMonths');
+ var selectOtherMonths = this._get(inst, 'selectOtherMonths');
+ var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week;
+ var defaultDate = this._getDefaultDate(inst);
+ var html = '';
+ for (var row = 0; row < numMonths[0]; row++) {
+ var group = '';
+ this.maxRows = 4;
+ for (var col = 0; col < numMonths[1]; col++) {
+ var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+ var cornerClass = ' ui-corner-all';
+ var calender = '';
+ if (isMultiMonth) {
+ calender += '<div class="ui-datepicker-group';
+ if (numMonths[1] > 1)
+ switch (col) {
+ case 0: calender += ' ui-datepicker-group-first';
+ cornerClass = ' ui-corner-' + (isRTL ? 'right' : 'left'); break;
+ case numMonths[1]-1: calender += ' ui-datepicker-group-last';
+ cornerClass = ' ui-corner-' + (isRTL ? 'left' : 'right'); break;
+ default: calender += ' ui-datepicker-group-middle'; cornerClass = ''; break;
+ }
+ calender += '">';
+ }
+ calender += '<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix' + cornerClass + '">' +
+ (/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') +
+ (/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') +
+ this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+ row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+ '</div><table class="ui-datepicker-calendar"><thead>' +
+ '<tr>';
+ var thead = (showWeek ? '<th class="ui-datepicker-week-col">' + this._get(inst, 'weekHeader') + '</th>' : '');
+ for (var dow = 0; dow < 7; dow++) { // days of the week
+ var day = (dow + firstDay) % 7;
+ thead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' +
+ '<span title="' + dayNames[day] + '">' + dayNamesMin[day] + '</span></th>';
+ }
+ calender += thead + '</tr></thead><tbody>';
+ var daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+ if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth)
+ inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+ var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+ var curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
+ var numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
+ this.maxRows = numRows;
+ var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+ for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+ calender += '<tr>';
+ var tbody = (!showWeek ? '' : '<td class="ui-datepicker-week-col">' +
+ this._get(inst, 'calculateWeek')(printDate) + '</td>');
+ for (var dow = 0; dow < 7; dow++) { // create date picker days
+ var daySettings = (beforeShowDay ?
+ beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']);
+ var otherMonth = (printDate.getMonth() != drawMonth);
+ var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
+ (minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+ tbody += '<td class="' +
+ ((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end' : '') + // highlight weekends
+ (otherMonth ? ' ui-datepicker-other-month' : '') + // highlight days from other months
+ ((printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth && inst._keyEvent) || // user pressed key
+ (defaultDate.getTime() == printDate.getTime() && defaultDate.getTime() == selectedDate.getTime()) ?
+ // or defaultDate is current printedDate and defaultDate is selectedDate
+ ' ' + this._dayOverClass : '') + // highlight selected day
+ (unselectable ? ' ' + this._unselectableClass + ' ui-state-disabled': '') + // highlight unselectable days
+ (otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + // highlight custom dates
+ (printDate.getTime() == currentDate.getTime() ? ' ' + this._currentClass : '') + // highlight selected day
+ (printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + // highlight today (if different)
+ ((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + // cell title
+ (unselectable ? '' : ' onclick="DP_jQuery_' + dpuuid + '.datepicker._selectDay(\'#' +
+ inst.id + '\',' + printDate.getMonth() + ',' + printDate.getFullYear() + ', this);return false;"') + '>' + // actions
+ (otherMonth && !showOtherMonths ? '&#xa0;' : // display for other months
+ (unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' +
+ (printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') +
+ (printDate.getTime() == currentDate.getTime() ? ' ui-state-active' : '') + // highlight selected day
+ (otherMonth ? ' ui-priority-secondary' : '') + // distinguish dates from other months
+ '" href="#">' + printDate.getDate() + '</a>')) + '</td>'; // display selectable date
+ printDate.setDate(printDate.getDate() + 1);
+ printDate = this._daylightSavingAdjust(printDate);
+ }
+ calender += tbody + '</tr>';
+ }
+ drawMonth++;
+ if (drawMonth > 11) {
+ drawMonth = 0;
+ drawYear++;
+ }
+ calender += '</tbody></table>' + (isMultiMonth ? '</div>' +
+ ((numMonths[0] > 0 && col == numMonths[1]-1) ? '<div class="ui-datepicker-row-break"></div>' : '') : '');
+ group += calender;
+ }
+ html += group;
+ }
+ html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ?
+ '<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : '');
+ inst._keyEvent = false;
+ return html;
+ },
+
+ /* Generate the month and year header. */
+ _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
+ secondary, monthNames, monthNamesShort) {
+ var changeMonth = this._get(inst, 'changeMonth');
+ var changeYear = this._get(inst, 'changeYear');
+ var showMonthAfterYear = this._get(inst, 'showMonthAfterYear');
+ var html = '<div class="ui-datepicker-title">';
+ var monthHtml = '';
+ // month selection
+ if (secondary || !changeMonth)
+ monthHtml += '<span class="ui-datepicker-month">' + monthNames[drawMonth] + '</span>';
+ else {
+ var inMinYear = (minDate && minDate.getFullYear() == drawYear);
+ var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);
+ monthHtml += '<select class="ui-datepicker-month" ' +
+ 'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'M\');" ' +
+ '>';
+ for (var month = 0; month < 12; month++) {
+ if ((!inMinYear || month >= minDate.getMonth()) &&
+ (!inMaxYear || month <= maxDate.getMonth()))
+ monthHtml += '<option value="' + month + '"' +
+ (month == drawMonth ? ' selected="selected"' : '') +
+ '>' + monthNamesShort[month] + '</option>';
+ }
+ monthHtml += '</select>';
+ }
+ if (!showMonthAfterYear)
+ html += monthHtml + (secondary || !(changeMonth && changeYear) ? '&#xa0;' : '');
+ // year selection
+ if ( !inst.yearshtml ) {
+ inst.yearshtml = '';
+ if (secondary || !changeYear)
+ html += '<span class="ui-datepicker-year">' + drawYear + '</span>';
+ else {
+ // determine range of years to display
+ var years = this._get(inst, 'yearRange').split(':');
+ var thisYear = new Date().getFullYear();
+ var determineYear = function(value) {
+ var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) :
+ (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) :
+ parseInt(value, 10)));
+ return (isNaN(year) ? thisYear : year);
+ };
+ var year = determineYear(years[0]);
+ var endYear = Math.max(year, determineYear(years[1] || ''));
+ year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+ endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+ inst.yearshtml += '<select class="ui-datepicker-year" ' +
+ 'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' +
+ '>';
+ for (; year <= endYear; year++) {
+ inst.yearshtml += '<option value="' + year + '"' +
+ (year == drawYear ? ' selected="selected"' : '') +
+ '>' + year + '</option>';
+ }
+ inst.yearshtml += '</select>';
+
+ html += inst.yearshtml;
+ inst.yearshtml = null;
+ }
+ }
+ html += this._get(inst, 'yearSuffix');
+ if (showMonthAfterYear)
+ html += (secondary || !(changeMonth && changeYear) ? '&#xa0;' : '') + monthHtml;
+ html += '</div>'; // Close datepicker_header
+ return html;
+ },
+
+ /* Adjust one of the date sub-fields. */
+ _adjustInstDate: function(inst, offset, period) {
+ var year = inst.drawYear + (period == 'Y' ? offset : 0);
+ var month = inst.drawMonth + (period == 'M' ? offset : 0);
+ var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) +
+ (period == 'D' ? offset : 0);
+ var date = this._restrictMinMax(inst,
+ this._daylightSavingAdjust(new Date(year, month, day)));
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ if (period == 'M' || period == 'Y')
+ this._notifyChange(inst);
+ },
+
+ /* Ensure a date is within any min/max bounds. */
+ _restrictMinMax: function(inst, date) {
+ var minDate = this._getMinMaxDate(inst, 'min');
+ var maxDate = this._getMinMaxDate(inst, 'max');
+ var newDate = (minDate && date < minDate ? minDate : date);
+ newDate = (maxDate && newDate > maxDate ? maxDate : newDate);
+ return newDate;
+ },
+
+ /* Notify change of month/year. */
+ _notifyChange: function(inst) {
+ var onChange = this._get(inst, 'onChangeMonthYear');
+ if (onChange)
+ onChange.apply((inst.input ? inst.input[0] : null),
+ [inst.selectedYear, inst.selectedMonth + 1, inst]);
+ },
+
+ /* Determine the number of months to show. */
+ _getNumberOfMonths: function(inst) {
+ var numMonths = this._get(inst, 'numberOfMonths');
+ return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths));
+ },
+
+ /* Determine the current maximum date - ensure no time components are set. */
+ _getMinMaxDate: function(inst, minMax) {
+ return this._determineDate(inst, this._get(inst, minMax + 'Date'), null);
+ },
+
+ /* Find the number of days in a given month. */
+ _getDaysInMonth: function(year, month) {
+ return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
+ },
+
+ /* Find the day of the week of the first of a month. */
+ _getFirstDayOfMonth: function(year, month) {
+ return new Date(year, month, 1).getDay();
+ },
+
+ /* Determines if we should allow a "next/prev" month display change. */
+ _canAdjustMonth: function(inst, offset, curYear, curMonth) {
+ var numMonths = this._getNumberOfMonths(inst);
+ var date = this._daylightSavingAdjust(new Date(curYear,
+ curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
+ if (offset < 0)
+ date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+ return this._isInRange(inst, date);
+ },
+
+ /* Is the given date in the accepted range? */
+ _isInRange: function(inst, date) {
+ var minDate = this._getMinMaxDate(inst, 'min');
+ var maxDate = this._getMinMaxDate(inst, 'max');
+ return ((!minDate || date.getTime() >= minDate.getTime()) &&
+ (!maxDate || date.getTime() <= maxDate.getTime()));
+ },
+
+ /* Provide the configuration settings for formatting/parsing. */
+ _getFormatConfig: function(inst) {
+ var shortYearCutoff = this._get(inst, 'shortYearCutoff');
+ shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
+ new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+ return {shortYearCutoff: shortYearCutoff,
+ dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'),
+ monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')};
+ },
+
+ /* Format the given date for display. */
+ _formatDate: function(inst, day, month, year) {
+ if (!day) {
+ inst.currentDay = inst.selectedDay;
+ inst.currentMonth = inst.selectedMonth;
+ inst.currentYear = inst.selectedYear;
+ }
+ var date = (day ? (typeof day == 'object' ? day :
+ this._daylightSavingAdjust(new Date(year, month, day))) :
+ this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+ return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst));
+ }
+});
+
+/*
+ * Bind hover events for datepicker elements.
+ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+ * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+ */
+function bindHover(dpDiv) {
+ var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a';
+ return dpDiv.bind('mouseout', function(event) {
+ var elem = $( event.target ).closest( selector );
+ if ( !elem.length ) {
+ return;
+ }
+ elem.removeClass( "ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover" );
+ })
+ .bind('mouseover', function(event) {
+ var elem = $( event.target ).closest( selector );
+ if ($.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0]) ||
+ !elem.length ) {
+ return;
+ }
+ elem.parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');
+ elem.addClass('ui-state-hover');
+ if (elem.hasClass('ui-datepicker-prev')) elem.addClass('ui-datepicker-prev-hover');
+ if (elem.hasClass('ui-datepicker-next')) elem.addClass('ui-datepicker-next-hover');
+ });
+}
+
+/* jQuery extend now ignores nulls! */
+function extendRemove(target, props) {
+ $.extend(target, props);
+ for (var name in props)
+ if (props[name] == null || props[name] == undefined)
+ target[name] = props[name];
+ return target;
+};
+
+/* Determine whether an object is an array. */
+function isArray(a) {
+ return (a && (($.browser.safari && typeof a == 'object' && a.length) ||
+ (a.constructor && a.constructor.toString().match(/\Array\(\)/))));
+};
+
+/* Invoke the datepicker functionality.
+ @param options string - a command, optionally followed by additional parameters or
+ Object - settings for attaching new datepicker functionality
+ @return jQuery object */
+$.fn.datepicker = function(options){
+
+ /* Verify an empty collection wasn't passed - Fixes #6976 */
+ if ( !this.length ) {
+ return this;
+ }
+
+ /* Initialise the date picker. */
+ if (!$.datepicker.initialized) {
+ $(document).mousedown($.datepicker._checkExternalClick).
+ find('body').append($.datepicker.dpDiv);
+ $.datepicker.initialized = true;
+ }
+
+ var otherArgs = Array.prototype.slice.call(arguments, 1);
+ if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget'))
+ return $.datepicker['_' + options + 'Datepicker'].
+ apply($.datepicker, [this[0]].concat(otherArgs));
+ if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string')
+ return $.datepicker['_' + options + 'Datepicker'].
+ apply($.datepicker, [this[0]].concat(otherArgs));
+ return this.each(function() {
+ typeof options == 'string' ?
+ $.datepicker['_' + options + 'Datepicker'].
+ apply($.datepicker, [this].concat(otherArgs)) :
+ $.datepicker._attachDatepicker(this, options);
+ });
+};
+
+$.datepicker = new Datepicker(); // singleton instance
+$.datepicker.initialized = false;
+$.datepicker.uuid = new Date().getTime();
+$.datepicker.version = "1.8.16";
+
+// Workaround for #4055
+// Add another global to avoid noConflict issues with inline event handlers
+window['DP_jQuery_' + dpuuid] = $;
+
+})(jQuery);
+/*
+ * jQuery UI Dialog 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.button.js
+ * jquery.ui.draggable.js
+ * jquery.ui.mouse.js
+ * jquery.ui.position.js
+ * jquery.ui.resizable.js
+ */
+(function( $, undefined ) {
+
+var uiDialogClasses =
+ 'ui-dialog ' +
+ 'ui-widget ' +
+ 'ui-widget-content ' +
+ 'ui-corner-all ',
+ sizeRelatedOptions = {
+ buttons: true,
+ height: true,
+ maxHeight: true,
+ maxWidth: true,
+ minHeight: true,
+ minWidth: true,
+ width: true
+ },
+ resizableRelatedOptions = {
+ maxHeight: true,
+ maxWidth: true,
+ minHeight: true,
+ minWidth: true
+ },
+ // support for jQuery 1.3.2 - handle common attrFn methods for dialog
+ attrFn = $.attrFn || {
+ val: true,
+ css: true,
+ html: true,
+ text: true,
+ data: true,
+ width: true,
+ height: true,
+ offset: true,
+ click: true
+ };
+
+$.widget("ui.dialog", {
+ options: {
+ autoOpen: true,
+ buttons: {},
+ closeOnEscape: true,
+ closeText: 'close',
+ dialogClass: '',
+ draggable: true,
+ hide: null,
+ height: 'auto',
+ maxHeight: false,
+ maxWidth: false,
+ minHeight: 150,
+ minWidth: 150,
+ modal: false,
+ position: {
+ my: 'center',
+ at: 'center',
+ collision: 'fit',
+ // ensure that the titlebar is never outside the document
+ using: function(pos) {
+ var topOffset = $(this).css(pos).offset().top;
+ if (topOffset < 0) {
+ $(this).css('top', pos.top - topOffset);
+ }
+ }
+ },
+ resizable: true,
+ show: null,
+ stack: true,
+ title: '',
+ width: 300,
+ zIndex: 1000
+ },
+
+ _create: function() {
+ this.originalTitle = this.element.attr('title');
+ // #5742 - .attr() might return a DOMElement
+ if ( typeof this.originalTitle !== "string" ) {
+ this.originalTitle = "";
+ }
+
+ this.options.title = this.options.title || this.originalTitle;
+ var self = this,
+ options = self.options,
+
+ title = options.title || '&#160;',
+ titleId = $.ui.dialog.getTitleId(self.element),
+
+ uiDialog = (self.uiDialog = $('<div></div>'))
+ .appendTo(document.body)
+ .hide()
+ .addClass(uiDialogClasses + options.dialogClass)
+ .css({
+ zIndex: options.zIndex
+ })
+ // setting tabIndex makes the div focusable
+ // setting outline to 0 prevents a border on focus in Mozilla
+ .attr('tabIndex', -1).css('outline', 0).keydown(function(event) {
+ if (options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+ event.keyCode === $.ui.keyCode.ESCAPE) {
+
+ self.close(event);
+ event.preventDefault();
+ }
+ })
+ .attr({
+ role: 'dialog',
+ 'aria-labelledby': titleId
+ })
+ .mousedown(function(event) {
+ self.moveToTop(false, event);
+ }),
+
+ uiDialogContent = self.element
+ .show()
+ .removeAttr('title')
+ .addClass(
+ 'ui-dialog-content ' +
+ 'ui-widget-content')
+ .appendTo(uiDialog),
+
+ uiDialogTitlebar = (self.uiDialogTitlebar = $('<div></div>'))
+ .addClass(
+ 'ui-dialog-titlebar ' +
+ 'ui-widget-header ' +
+ 'ui-corner-all ' +
+ 'ui-helper-clearfix'
+ )
+ .prependTo(uiDialog),
+
+ uiDialogTitlebarClose = $('<a href="#"></a>')
+ .addClass(
+ 'ui-dialog-titlebar-close ' +
+ 'ui-corner-all'
+ )
+ .attr('role', 'button')
+ .hover(
+ function() {
+ uiDialogTitlebarClose.addClass('ui-state-hover');
+ },
+ function() {
+ uiDialogTitlebarClose.removeClass('ui-state-hover');
+ }
+ )
+ .focus(function() {
+ uiDialogTitlebarClose.addClass('ui-state-focus');
+ })
+ .blur(function() {
+ uiDialogTitlebarClose.removeClass('ui-state-focus');
+ })
+ .click(function(event) {
+ self.close(event);
+ return false;
+ })
+ .appendTo(uiDialogTitlebar),
+
+ uiDialogTitlebarCloseText = (self.uiDialogTitlebarCloseText = $('<span></span>'))
+ .addClass(
+ 'ui-icon ' +
+ 'ui-icon-closethick'
+ )
+ .text(options.closeText)
+ .appendTo(uiDialogTitlebarClose),
+
+ uiDialogTitle = $('<span></span>')
+ .addClass('ui-dialog-title')
+ .attr('id', titleId)
+ .html(title)
+ .prependTo(uiDialogTitlebar);
+
+ //handling of deprecated beforeclose (vs beforeClose) option
+ //Ticket #4669 http://dev.jqueryui.com/ticket/4669
+ //TODO: remove in 1.9pre
+ if ($.isFunction(options.beforeclose) && !$.isFunction(options.beforeClose)) {
+ options.beforeClose = options.beforeclose;
+ }
+
+ uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection();
+
+ if (options.draggable && $.fn.draggable) {
+ self._makeDraggable();
+ }
+ if (options.resizable && $.fn.resizable) {
+ self._makeResizable();
+ }
+
+ self._createButtons(options.buttons);
+ self._isOpen = false;
+
+ if ($.fn.bgiframe) {
+ uiDialog.bgiframe();
+ }
+ },
+
+ _init: function() {
+ if ( this.options.autoOpen ) {
+ this.open();
+ }
+ },
+
+ destroy: function() {
+ var self = this;
+
+ if (self.overlay) {
+ self.overlay.destroy();
+ }
+ self.uiDialog.hide();
+ self.element
+ .unbind('.dialog')
+ .removeData('dialog')
+ .removeClass('ui-dialog-content ui-widget-content')
+ .hide().appendTo('body');
+ self.uiDialog.remove();
+
+ if (self.originalTitle) {
+ self.element.attr('title', self.originalTitle);
+ }
+
+ return self;
+ },
+
+ widget: function() {
+ return this.uiDialog;
+ },
+
+ close: function(event) {
+ var self = this,
+ maxZ, thisZ;
+
+ if (false === self._trigger('beforeClose', event)) {
+ return;
+ }
+
+ if (self.overlay) {
+ self.overlay.destroy();
+ }
+ self.uiDialog.unbind('keypress.ui-dialog');
+
+ self._isOpen = false;
+
+ if (self.options.hide) {
+ self.uiDialog.hide(self.options.hide, function() {
+ self._trigger('close', event);
+ });
+ } else {
+ self.uiDialog.hide();
+ self._trigger('close', event);
+ }
+
+ $.ui.dialog.overlay.resize();
+
+ // adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
+ if (self.options.modal) {
+ maxZ = 0;
+ $('.ui-dialog').each(function() {
+ if (this !== self.uiDialog[0]) {
+ thisZ = $(this).css('z-index');
+ if(!isNaN(thisZ)) {
+ maxZ = Math.max(maxZ, thisZ);
+ }
+ }
+ });
+ $.ui.dialog.maxZ = maxZ;
+ }
+
+ return self;
+ },
+
+ isOpen: function() {
+ return this._isOpen;
+ },
+
+ // the force parameter allows us to move modal dialogs to their correct
+ // position on open
+ moveToTop: function(force, event) {
+ var self = this,
+ options = self.options,
+ saveScroll;
+
+ if ((options.modal && !force) ||
+ (!options.stack && !options.modal)) {
+ return self._trigger('focus', event);
+ }
+
+ if (options.zIndex > $.ui.dialog.maxZ) {
+ $.ui.dialog.maxZ = options.zIndex;
+ }
+ if (self.overlay) {
+ $.ui.dialog.maxZ += 1;
+ self.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ);
+ }
+
+ //Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed.
+ // http://ui.jquery.com/bugs/ticket/3193
+ saveScroll = { scrollTop: self.element.scrollTop(), scrollLeft: self.element.scrollLeft() };
+ $.ui.dialog.maxZ += 1;
+ self.uiDialog.css('z-index', $.ui.dialog.maxZ);
+ self.element.attr(saveScroll);
+ self._trigger('focus', event);
+
+ return self;
+ },
+
+ open: function() {
+ if (this._isOpen) { return; }
+
+ var self = this,
+ options = self.options,
+ uiDialog = self.uiDialog;
+
+ self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null;
+ self._size();
+ self._position(options.position);
+ uiDialog.show(options.show);
+ self.moveToTop(true);
+
+ // prevent tabbing out of modal dialogs
+ if (options.modal) {
+ uiDialog.bind('keypress.ui-dialog', function(event) {
+ if (event.keyCode !== $.ui.keyCode.TAB) {
+ return;
+ }
+
+ var tabbables = $(':tabbable', this),
+ first = tabbables.filter(':first'),
+ last = tabbables.filter(':last');
+
+ if (event.target === last[0] && !event.shiftKey) {
+ first.focus(1);
+ return false;
+ } else if (event.target === first[0] && event.shiftKey) {
+ last.focus(1);
+ return false;
+ }
+ });
+ }
+
+ // set focus to the first tabbable element in the content area or the first button
+ // if there are no tabbable elements, set focus on the dialog itself
+ $(self.element.find(':tabbable').get().concat(
+ uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat(
+ uiDialog.get()))).eq(0).focus();
+
+ self._isOpen = true;
+ self._trigger('open');
+
+ return self;
+ },
+
+ _createButtons: function(buttons) {
+ var self = this,
+ hasButtons = false,
+ uiDialogButtonPane = $('<div></div>')
+ .addClass(
+ 'ui-dialog-buttonpane ' +
+ 'ui-widget-content ' +
+ 'ui-helper-clearfix'
+ ),
+ uiButtonSet = $( "<div></div>" )
+ .addClass( "ui-dialog-buttonset" )
+ .appendTo( uiDialogButtonPane );
+
+ // if we already have a button pane, remove it
+ self.uiDialog.find('.ui-dialog-buttonpane').remove();
+
+ if (typeof buttons === 'object' && buttons !== null) {
+ $.each(buttons, function() {
+ return !(hasButtons = true);
+ });
+ }
+ if (hasButtons) {
+ $.each(buttons, function(name, props) {
+ props = $.isFunction( props ) ?
+ { click: props, text: name } :
+ props;
+ var button = $('<button type="button"></button>')
+ .click(function() {
+ props.click.apply(self.element[0], arguments);
+ })
+ .appendTo(uiButtonSet);
+ // can't use .attr( props, true ) with jQuery 1.3.2.
+ $.each( props, function( key, value ) {
+ if ( key === "click" ) {
+ return;
+ }
+ if ( key in attrFn ) {
+ button[ key ]( value );
+ } else {
+ button.attr( key, value );
+ }
+ });
+ if ($.fn.button) {
+ button.button();
+ }
+ });
+ uiDialogButtonPane.appendTo(self.uiDialog);
+ }
+ },
+
+ _makeDraggable: function() {
+ var self = this,
+ options = self.options,
+ doc = $(document),
+ heightBeforeDrag;
+
+ function filteredUi(ui) {
+ return {
+ position: ui.position,
+ offset: ui.offset
+ };
+ }
+
+ self.uiDialog.draggable({
+ cancel: '.ui-dialog-content, .ui-dialog-titlebar-close',
+ handle: '.ui-dialog-titlebar',
+ containment: 'document',
+ start: function(event, ui) {
+ heightBeforeDrag = options.height === "auto" ? "auto" : $(this).height();
+ $(this).height($(this).height()).addClass("ui-dialog-dragging");
+ self._trigger('dragStart', event, filteredUi(ui));
+ },
+ drag: function(event, ui) {
+ self._trigger('drag', event, filteredUi(ui));
+ },
+ stop: function(event, ui) {
+ options.position = [ui.position.left - doc.scrollLeft(),
+ ui.position.top - doc.scrollTop()];
+ $(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag);
+ self._trigger('dragStop', event, filteredUi(ui));
+ $.ui.dialog.overlay.resize();
+ }
+ });
+ },
+
+ _makeResizable: function(handles) {
+ handles = (handles === undefined ? this.options.resizable : handles);
+ var self = this,
+ options = self.options,
+ // .ui-resizable has position: relative defined in the stylesheet
+ // but dialogs have to use absolute or fixed positioning
+ position = self.uiDialog.css('position'),
+ resizeHandles = (typeof handles === 'string' ?
+ handles :
+ 'n,e,s,w,se,sw,ne,nw'
+ );
+
+ function filteredUi(ui) {
+ return {
+ originalPosition: ui.originalPosition,
+ originalSize: ui.originalSize,
+ position: ui.position,
+ size: ui.size
+ };
+ }
+
+ self.uiDialog.resizable({
+ cancel: '.ui-dialog-content',
+ containment: 'document',
+ alsoResize: self.element,
+ maxWidth: options.maxWidth,
+ maxHeight: options.maxHeight,
+ minWidth: options.minWidth,
+ minHeight: self._minHeight(),
+ handles: resizeHandles,
+ start: function(event, ui) {
+ $(this).addClass("ui-dialog-resizing");
+ self._trigger('resizeStart', event, filteredUi(ui));
+ },
+ resize: function(event, ui) {
+ self._trigger('resize', event, filteredUi(ui));
+ },
+ stop: function(event, ui) {
+ $(this).removeClass("ui-dialog-resizing");
+ options.height = $(this).height();
+ options.width = $(this).width();
+ self._trigger('resizeStop', event, filteredUi(ui));
+ $.ui.dialog.overlay.resize();
+ }
+ })
+ .css('position', position)
+ .find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se');
+ },
+
+ _minHeight: function() {
+ var options = this.options;
+
+ if (options.height === 'auto') {
+ return options.minHeight;
+ } else {
+ return Math.min(options.minHeight, options.height);
+ }
+ },
+
+ _position: function(position) {
+ var myAt = [],
+ offset = [0, 0],
+ isVisible;
+
+ if (position) {
+ // deep extending converts arrays to objects in jQuery <= 1.3.2 :-(
+ // if (typeof position == 'string' || $.isArray(position)) {
+ // myAt = $.isArray(position) ? position : position.split(' ');
+
+ if (typeof position === 'string' || (typeof position === 'object' && '0' in position)) {
+ myAt = position.split ? position.split(' ') : [position[0], position[1]];
+ if (myAt.length === 1) {
+ myAt[1] = myAt[0];
+ }
+
+ $.each(['left', 'top'], function(i, offsetPosition) {
+ if (+myAt[i] === myAt[i]) {
+ offset[i] = myAt[i];
+ myAt[i] = offsetPosition;
+ }
+ });
+
+ position = {
+ my: myAt.join(" "),
+ at: myAt.join(" "),
+ offset: offset.join(" ")
+ };
+ }
+
+ position = $.extend({}, $.ui.dialog.prototype.options.position, position);
+ } else {
+ position = $.ui.dialog.prototype.options.position;
+ }
+
+ // need to show the dialog to get the actual offset in the position plugin
+ isVisible = this.uiDialog.is(':visible');
+ if (!isVisible) {
+ this.uiDialog.show();
+ }
+ this.uiDialog
+ // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781
+ .css({ top: 0, left: 0 })
+ .position($.extend({ of: window }, position));
+ if (!isVisible) {
+ this.uiDialog.hide();
+ }
+ },
+
+ _setOptions: function( options ) {
+ var self = this,
+ resizableOptions = {},
+ resize = false;
+
+ $.each( options, function( key, value ) {
+ self._setOption( key, value );
+
+ if ( key in sizeRelatedOptions ) {
+ resize = true;
+ }
+ if ( key in resizableRelatedOptions ) {
+ resizableOptions[ key ] = value;
+ }
+ });
+
+ if ( resize ) {
+ this._size();
+ }
+ if ( this.uiDialog.is( ":data(resizable)" ) ) {
+ this.uiDialog.resizable( "option", resizableOptions );
+ }
+ },
+
+ _setOption: function(key, value){
+ var self = this,
+ uiDialog = self.uiDialog;
+
+ switch (key) {
+ //handling of deprecated beforeclose (vs beforeClose) option
+ //Ticket #4669 http://dev.jqueryui.com/ticket/4669
+ //TODO: remove in 1.9pre
+ case "beforeclose":
+ key = "beforeClose";
+ break;
+ case "buttons":
+ self._createButtons(value);
+ break;
+ case "closeText":
+ // ensure that we always pass a string
+ self.uiDialogTitlebarCloseText.text("" + value);
+ break;
+ case "dialogClass":
+ uiDialog
+ .removeClass(self.options.dialogClass)
+ .addClass(uiDialogClasses + value);
+ break;
+ case "disabled":
+ if (value) {
+ uiDialog.addClass('ui-dialog-disabled');
+ } else {
+ uiDialog.removeClass('ui-dialog-disabled');
+ }
+ break;
+ case "draggable":
+ var isDraggable = uiDialog.is( ":data(draggable)" );
+ if ( isDraggable && !value ) {
+ uiDialog.draggable( "destroy" );
+ }
+
+ if ( !isDraggable && value ) {
+ self._makeDraggable();
+ }
+ break;
+ case "position":
+ self._position(value);
+ break;
+ case "resizable":
+ // currently resizable, becoming non-resizable
+ var isResizable = uiDialog.is( ":data(resizable)" );
+ if (isResizable && !value) {
+ uiDialog.resizable('destroy');
+ }
+
+ // currently resizable, changing handles
+ if (isResizable && typeof value === 'string') {
+ uiDialog.resizable('option', 'handles', value);
+ }
+
+ // currently non-resizable, becoming resizable
+ if (!isResizable && value !== false) {
+ self._makeResizable(value);
+ }
+ break;
+ case "title":
+ // convert whatever was passed in o a string, for html() to not throw up
+ $(".ui-dialog-title", self.uiDialogTitlebar).html("" + (value || '&#160;'));
+ break;
+ }
+
+ $.Widget.prototype._setOption.apply(self, arguments);
+ },
+
+ _size: function() {
+ /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+ * divs will both have width and height set, so we need to reset them
+ */
+ var options = this.options,
+ nonContentHeight,
+ minContentHeight,
+ isVisible = this.uiDialog.is( ":visible" );
+
+ // reset content sizing
+ this.element.show().css({
+ width: 'auto',
+ minHeight: 0,
+ height: 0
+ });
+
+ if (options.minWidth > options.width) {
+ options.width = options.minWidth;
+ }
+
+ // reset wrapper sizing
+ // determine the height of all the non-content elements
+ nonContentHeight = this.uiDialog.css({
+ height: 'auto',
+ width: options.width
+ })
+ .height();
+ minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+
+ if ( options.height === "auto" ) {
+ // only needed for IE6 support
+ if ( $.support.minHeight ) {
+ this.element.css({
+ minHeight: minContentHeight,
+ height: "auto"
+ });
+ } else {
+ this.uiDialog.show();
+ var autoHeight = this.element.css( "height", "auto" ).height();
+ if ( !isVisible ) {
+ this.uiDialog.hide();
+ }
+ this.element.height( Math.max( autoHeight, minContentHeight ) );
+ }
+ } else {
+ this.element.height( Math.max( options.height - nonContentHeight, 0 ) );
+ }
+
+ if (this.uiDialog.is(':data(resizable)')) {
+ this.uiDialog.resizable('option', 'minHeight', this._minHeight());
+ }
+ }
+});
+
+$.extend($.ui.dialog, {
+ version: "1.8.16",
+
+ uuid: 0,
+ maxZ: 0,
+
+ getTitleId: function($el) {
+ var id = $el.attr('id');
+ if (!id) {
+ this.uuid += 1;
+ id = this.uuid;
+ }
+ return 'ui-dialog-title-' + id;
+ },
+
+ overlay: function(dialog) {
+ this.$el = $.ui.dialog.overlay.create(dialog);
+ }
+});
+
+$.extend($.ui.dialog.overlay, {
+ instances: [],
+ // reuse old instances due to IE memory leak with alpha transparency (see #5185)
+ oldInstances: [],
+ maxZ: 0,
+ events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),
+ function(event) { return event + '.dialog-overlay'; }).join(' '),
+ create: function(dialog) {
+ if (this.instances.length === 0) {
+ // prevent use of anchors and inputs
+ // we use a setTimeout in case the overlay is created from an
+ // event that we're going to be cancelling (see #2804)
+ setTimeout(function() {
+ // handle $(el).dialog().dialog('close') (see #4065)
+ if ($.ui.dialog.overlay.instances.length) {
+ $(document).bind($.ui.dialog.overlay.events, function(event) {
+ // stop events if the z-index of the target is < the z-index of the overlay
+ // we cannot return true when we don't want to cancel the event (#3523)
+ if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) {
+ return false;
+ }
+ });
+ }
+ }, 1);
+
+ // allow closing by pressing the escape key
+ $(document).bind('keydown.dialog-overlay', function(event) {
+ if (dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+ event.keyCode === $.ui.keyCode.ESCAPE) {
+
+ dialog.close(event);
+ event.preventDefault();
+ }
+ });
+
+ // handle window resize
+ $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize);
+ }
+
+ var $el = (this.oldInstances.pop() || $('<div></div>').addClass('ui-widget-overlay'))
+ .appendTo(document.body)
+ .css({
+ width: this.width(),
+ height: this.height()
+ });
+
+ if ($.fn.bgiframe) {
+ $el.bgiframe();
+ }
+
+ this.instances.push($el);
+ return $el;
+ },
+
+ destroy: function($el) {
+ var indexOf = $.inArray($el, this.instances);
+ if (indexOf != -1){
+ this.oldInstances.push(this.instances.splice(indexOf, 1)[0]);
+ }
+
+ if (this.instances.length === 0) {
+ $([document, window]).unbind('.dialog-overlay');
+ }
+
+ $el.remove();
+
+ // adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
+ var maxZ = 0;
+ $.each(this.instances, function() {
+ maxZ = Math.max(maxZ, this.css('z-index'));
+ });
+ this.maxZ = maxZ;
+ },
+
+ height: function() {
+ var scrollHeight,
+ offsetHeight;
+ // handle IE 6
+ if ($.browser.msie && $.browser.version < 7) {
+ scrollHeight = Math.max(
+ document.documentElement.scrollHeight,
+ document.body.scrollHeight
+ );
+ offsetHeight = Math.max(
+ document.documentElement.offsetHeight,
+ document.body.offsetHeight
+ );
+
+ if (scrollHeight < offsetHeight) {
+ return $(window).height() + 'px';
+ } else {
+ return scrollHeight + 'px';
+ }
+ // handle "good" browsers
+ } else {
+ return $(document).height() + 'px';
+ }
+ },
+
+ width: function() {
+ var scrollWidth,
+ offsetWidth;
+ // handle IE
+ if ( $.browser.msie ) {
+ scrollWidth = Math.max(
+ document.documentElement.scrollWidth,
+ document.body.scrollWidth
+ );
+ offsetWidth = Math.max(
+ document.documentElement.offsetWidth,
+ document.body.offsetWidth
+ );
+
+ if (scrollWidth < offsetWidth) {
+ return $(window).width() + 'px';
+ } else {
+ return scrollWidth + 'px';
+ }
+ // handle "good" browsers
+ } else {
+ return $(document).width() + 'px';
+ }
+ },
+
+ resize: function() {
+ /* If the dialog is draggable and the user drags it past the
+ * right edge of the window, the document becomes wider so we
+ * need to stretch the overlay. If the user then drags the
+ * dialog back to the left, the document will become narrower,
+ * so we need to shrink the overlay to the appropriate size.
+ * This is handled by shrinking the overlay before setting it
+ * to the full document size.
+ */
+ var $overlays = $([]);
+ $.each($.ui.dialog.overlay.instances, function() {
+ $overlays = $overlays.add(this);
+ });
+
+ $overlays.css({
+ width: 0,
+ height: 0
+ }).css({
+ width: $.ui.dialog.overlay.width(),
+ height: $.ui.dialog.overlay.height()
+ });
+ }
+});
+
+$.extend($.ui.dialog.overlay.prototype, {
+ destroy: function() {
+ $.ui.dialog.overlay.destroy(this.$el);
+ }
+});
+
+}(jQuery));
+/*
+ * jQuery UI Position 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Position
+ */
+(function( $, undefined ) {
+
+$.ui = $.ui || {};
+
+var horizontalPositions = /left|center|right/,
+ verticalPositions = /top|center|bottom/,
+ center = "center",
+ _position = $.fn.position,
+ _offset = $.fn.offset;
+
+$.fn.position = function( options ) {
+ if ( !options || !options.of ) {
+ return _position.apply( this, arguments );
+ }
+
+ // make a copy, we don't want to modify arguments
+ options = $.extend( {}, options );
+
+ var target = $( options.of ),
+ targetElem = target[0],
+ collision = ( options.collision || "flip" ).split( " " ),
+ offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ],
+ targetWidth,
+ targetHeight,
+ basePosition;
+
+ if ( targetElem.nodeType === 9 ) {
+ targetWidth = target.width();
+ targetHeight = target.height();
+ basePosition = { top: 0, left: 0 };
+ // TODO: use $.isWindow() in 1.9
+ } else if ( targetElem.setTimeout ) {
+ targetWidth = target.width();
+ targetHeight = target.height();
+ basePosition = { top: target.scrollTop(), left: target.scrollLeft() };
+ } else if ( targetElem.preventDefault ) {
+ // force left top to allow flipping
+ options.at = "left top";
+ targetWidth = targetHeight = 0;
+ basePosition = { top: options.of.pageY, left: options.of.pageX };
+ } else {
+ targetWidth = target.outerWidth();
+ targetHeight = target.outerHeight();
+ basePosition = target.offset();
+ }
+
+ // force my and at to have valid horizontal and veritcal positions
+ // if a value is missing or invalid, it will be converted to center
+ $.each( [ "my", "at" ], function() {
+ var pos = ( options[this] || "" ).split( " " );
+ if ( pos.length === 1) {
+ pos = horizontalPositions.test( pos[0] ) ?
+ pos.concat( [center] ) :
+ verticalPositions.test( pos[0] ) ?
+ [ center ].concat( pos ) :
+ [ center, center ];
+ }
+ pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center;
+ pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center;
+ options[ this ] = pos;
+ });
+
+ // normalize collision option
+ if ( collision.length === 1 ) {
+ collision[ 1 ] = collision[ 0 ];
+ }
+
+ // normalize offset option
+ offset[ 0 ] = parseInt( offset[0], 10 ) || 0;
+ if ( offset.length === 1 ) {
+ offset[ 1 ] = offset[ 0 ];
+ }
+ offset[ 1 ] = parseInt( offset[1], 10 ) || 0;
+
+ if ( options.at[0] === "right" ) {
+ basePosition.left += targetWidth;
+ } else if ( options.at[0] === center ) {
+ basePosition.left += targetWidth / 2;
+ }
+
+ if ( options.at[1] === "bottom" ) {
+ basePosition.top += targetHeight;
+ } else if ( options.at[1] === center ) {
+ basePosition.top += targetHeight / 2;
+ }
+
+ basePosition.left += offset[ 0 ];
+ basePosition.top += offset[ 1 ];
+
+ return this.each(function() {
+ var elem = $( this ),
+ elemWidth = elem.outerWidth(),
+ elemHeight = elem.outerHeight(),
+ marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0,
+ marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0,
+ collisionWidth = elemWidth + marginLeft +
+ ( parseInt( $.curCSS( this, "marginRight", true ) ) || 0 ),
+ collisionHeight = elemHeight + marginTop +
+ ( parseInt( $.curCSS( this, "marginBottom", true ) ) || 0 ),
+ position = $.extend( {}, basePosition ),
+ collisionPosition;
+
+ if ( options.my[0] === "right" ) {
+ position.left -= elemWidth;
+ } else if ( options.my[0] === center ) {
+ position.left -= elemWidth / 2;
+ }
+
+ if ( options.my[1] === "bottom" ) {
+ position.top -= elemHeight;
+ } else if ( options.my[1] === center ) {
+ position.top -= elemHeight / 2;
+ }
+
+ // prevent fractions (see #5280)
+ position.left = Math.round( position.left );
+ position.top = Math.round( position.top );
+
+ collisionPosition = {
+ left: position.left - marginLeft,
+ top: position.top - marginTop
+ };
+
+ $.each( [ "left", "top" ], function( i, dir ) {
+ if ( $.ui.position[ collision[i] ] ) {
+ $.ui.position[ collision[i] ][ dir ]( position, {
+ targetWidth: targetWidth,
+ targetHeight: targetHeight,
+ elemWidth: elemWidth,
+ elemHeight: elemHeight,
+ collisionPosition: collisionPosition,
+ collisionWidth: collisionWidth,
+ collisionHeight: collisionHeight,
+ offset: offset,
+ my: options.my,
+ at: options.at
+ });
+ }
+ });
+
+ if ( $.fn.bgiframe ) {
+ elem.bgiframe();
+ }
+ elem.offset( $.extend( position, { using: options.using } ) );
+ });
+};
+
+$.ui.position = {
+ fit: {
+ left: function( position, data ) {
+ var win = $( window ),
+ over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft();
+ position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left );
+ },
+ top: function( position, data ) {
+ var win = $( window ),
+ over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop();
+ position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top );
+ }
+ },
+
+ flip: {
+ left: function( position, data ) {
+ if ( data.at[0] === center ) {
+ return;
+ }
+ var win = $( window ),
+ over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(),
+ myOffset = data.my[ 0 ] === "left" ?
+ -data.elemWidth :
+ data.my[ 0 ] === "right" ?
+ data.elemWidth :
+ 0,
+ atOffset = data.at[ 0 ] === "left" ?
+ data.targetWidth :
+ -data.targetWidth,
+ offset = -2 * data.offset[ 0 ];
+ position.left += data.collisionPosition.left < 0 ?
+ myOffset + atOffset + offset :
+ over > 0 ?
+ myOffset + atOffset + offset :
+ 0;
+ },
+ top: function( position, data ) {
+ if ( data.at[1] === center ) {
+ return;
+ }
+ var win = $( window ),
+ over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(),
+ myOffset = data.my[ 1 ] === "top" ?
+ -data.elemHeight :
+ data.my[ 1 ] === "bottom" ?
+ data.elemHeight :
+ 0,
+ atOffset = data.at[ 1 ] === "top" ?
+ data.targetHeight :
+ -data.targetHeight,
+ offset = -2 * data.offset[ 1 ];
+ position.top += data.collisionPosition.top < 0 ?
+ myOffset + atOffset + offset :
+ over > 0 ?
+ myOffset + atOffset + offset :
+ 0;
+ }
+ }
+};
+
+// offset setter from jQuery 1.4
+if ( !$.offset.setOffset ) {
+ $.offset.setOffset = function( elem, options ) {
+ // set position first, in-case top/left are set even on static elem
+ if ( /static/.test( $.curCSS( elem, "position" ) ) ) {
+ elem.style.position = "relative";
+ }
+ var curElem = $( elem ),
+ curOffset = curElem.offset(),
+ curTop = parseInt( $.curCSS( elem, "top", true ), 10 ) || 0,
+ curLeft = parseInt( $.curCSS( elem, "left", true ), 10) || 0,
+ props = {
+ top: (options.top - curOffset.top) + curTop,
+ left: (options.left - curOffset.left) + curLeft
+ };
+
+ if ( 'using' in options ) {
+ options.using.call( elem, props );
+ } else {
+ curElem.css( props );
+ }
+ };
+
+ $.fn.offset = function( options ) {
+ var elem = this[ 0 ];
+ if ( !elem || !elem.ownerDocument ) { return null; }
+ if ( options ) {
+ return this.each(function() {
+ $.offset.setOffset( this, options );
+ });
+ }
+ return _offset.call( this );
+ };
+}
+
+}( jQuery ));
+/*
+ * jQuery UI Progressbar 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+$.widget( "ui.progressbar", {
+ options: {
+ value: 0,
+ max: 100
+ },
+
+ min: 0,
+
+ _create: function() {
+ this.element
+ .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+ .attr({
+ role: "progressbar",
+ "aria-valuemin": this.min,
+ "aria-valuemax": this.options.max,
+ "aria-valuenow": this._value()
+ });
+
+ this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
+ .appendTo( this.element );
+
+ this.oldValue = this._value();
+ this._refreshValue();
+ },
+
+ destroy: function() {
+ this.element
+ .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-valuemin" )
+ .removeAttr( "aria-valuemax" )
+ .removeAttr( "aria-valuenow" );
+
+ this.valueDiv.remove();
+
+ $.Widget.prototype.destroy.apply( this, arguments );
+ },
+
+ value: function( newValue ) {
+ if ( newValue === undefined ) {
+ return this._value();
+ }
+
+ this._setOption( "value", newValue );
+ return this;
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "value" ) {
+ this.options.value = value;
+ this._refreshValue();
+ if ( this._value() === this.options.max ) {
+ this._trigger( "complete" );
+ }
+ }
+
+ $.Widget.prototype._setOption.apply( this, arguments );
+ },
+
+ _value: function() {
+ var val = this.options.value;
+ // normalize invalid value
+ if ( typeof val !== "number" ) {
+ val = 0;
+ }
+ return Math.min( this.options.max, Math.max( this.min, val ) );
+ },
+
+ _percentage: function() {
+ return 100 * this._value() / this.options.max;
+ },
+
+ _refreshValue: function() {
+ var value = this.value();
+ var percentage = this._percentage();
+
+ if ( this.oldValue !== value ) {
+ this.oldValue = value;
+ this._trigger( "change" );
+ }
+
+ this.valueDiv
+ .toggle( value > this.min )
+ .toggleClass( "ui-corner-right", value === this.options.max )
+ .width( percentage.toFixed(0) + "%" );
+ this.element.attr( "aria-valuenow", value );
+ }
+});
+
+$.extend( $.ui.progressbar, {
+ version: "1.8.16"
+});
+
+})( jQuery );
+/*
+ * jQuery UI Slider 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+// number of pages in a slider
+// (how many times can you page up/down to go through the whole range)
+var numPages = 5;
+
+$.widget( "ui.slider", $.ui.mouse, {
+
+ widgetEventPrefix: "slide",
+
+ options: {
+ animate: false,
+ distance: 0,
+ max: 100,
+ min: 0,
+ orientation: "horizontal",
+ range: false,
+ step: 1,
+ value: 0,
+ values: null
+ },
+
+ _create: function() {
+ var self = this,
+ o = this.options,
+ existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
+ handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
+ handleCount = ( o.values && o.values.length ) || 1,
+ handles = [];
+
+ this._keySliding = false;
+ this._mouseSliding = false;
+ this._animateOff = true;
+ this._handleIndex = null;
+ this._detectOrientation();
+ this._mouseInit();
+
+ this.element
+ .addClass( "ui-slider" +
+ " ui-slider-" + this.orientation +
+ " ui-widget" +
+ " ui-widget-content" +
+ " ui-corner-all" +
+ ( o.disabled ? " ui-slider-disabled ui-disabled" : "" ) );
+
+ this.range = $([]);
+
+ if ( o.range ) {
+ if ( o.range === true ) {
+ if ( !o.values ) {
+ o.values = [ this._valueMin(), this._valueMin() ];
+ }
+ if ( o.values.length && o.values.length !== 2 ) {
+ o.values = [ o.values[0], o.values[0] ];
+ }
+ }
+
+ this.range = $( "<div></div>" )
+ .appendTo( this.element )
+ .addClass( "ui-slider-range" +
+ // note: this isn't the most fittingly semantic framework class for this element,
+ // but worked best visually with a variety of themes
+ " ui-widget-header" +
+ ( ( o.range === "min" || o.range === "max" ) ? " ui-slider-range-" + o.range : "" ) );
+ }
+
+ for ( var i = existingHandles.length; i < handleCount; i += 1 ) {
+ handles.push( handle );
+ }
+
+ this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( self.element ) );
+
+ this.handle = this.handles.eq( 0 );
+
+ this.handles.add( this.range ).filter( "a" )
+ .click(function( event ) {
+ event.preventDefault();
+ })
+ .hover(function() {
+ if ( !o.disabled ) {
+ $( this ).addClass( "ui-state-hover" );
+ }
+ }, function() {
+ $( this ).removeClass( "ui-state-hover" );
+ })
+ .focus(function() {
+ if ( !o.disabled ) {
+ $( ".ui-slider .ui-state-focus" ).removeClass( "ui-state-focus" );
+ $( this ).addClass( "ui-state-focus" );
+ } else {
+ $( this ).blur();
+ }
+ })
+ .blur(function() {
+ $( this ).removeClass( "ui-state-focus" );
+ });
+
+ this.handles.each(function( i ) {
+ $( this ).data( "index.ui-slider-handle", i );
+ });
+
+ this.handles
+ .keydown(function( event ) {
+ var ret = true,
+ index = $( this ).data( "index.ui-slider-handle" ),
+ allowed,
+ curVal,
+ newVal,
+ step;
+
+ if ( self.options.disabled ) {
+ return;
+ }
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.HOME:
+ case $.ui.keyCode.END:
+ case $.ui.keyCode.PAGE_UP:
+ case $.ui.keyCode.PAGE_DOWN:
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.RIGHT:
+ case $.ui.keyCode.DOWN:
+ case $.ui.keyCode.LEFT:
+ ret = false;
+ if ( !self._keySliding ) {
+ self._keySliding = true;
+ $( this ).addClass( "ui-state-active" );
+ allowed = self._start( event, index );
+ if ( allowed === false ) {
+ return;
+ }
+ }
+ break;
+ }
+
+ step = self.options.step;
+ if ( self.options.values && self.options.values.length ) {
+ curVal = newVal = self.values( index );
+ } else {
+ curVal = newVal = self.value();
+ }
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.HOME:
+ newVal = self._valueMin();
+ break;
+ case $.ui.keyCode.END:
+ newVal = self._valueMax();
+ break;
+ case $.ui.keyCode.PAGE_UP:
+ newVal = self._trimAlignValue( curVal + ( (self._valueMax() - self._valueMin()) / numPages ) );
+ break;
+ case $.ui.keyCode.PAGE_DOWN:
+ newVal = self._trimAlignValue( curVal - ( (self._valueMax() - self._valueMin()) / numPages ) );
+ break;
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.RIGHT:
+ if ( curVal === self._valueMax() ) {
+ return;
+ }
+ newVal = self._trimAlignValue( curVal + step );
+ break;
+ case $.ui.keyCode.DOWN:
+ case $.ui.keyCode.LEFT:
+ if ( curVal === self._valueMin() ) {
+ return;
+ }
+ newVal = self._trimAlignValue( curVal - step );
+ break;
+ }
+
+ self._slide( event, index, newVal );
+
+ return ret;
+
+ })
+ .keyup(function( event ) {
+ var index = $( this ).data( "index.ui-slider-handle" );
+
+ if ( self._keySliding ) {
+ self._keySliding = false;
+ self._stop( event, index );
+ self._change( event, index );
+ $( this ).removeClass( "ui-state-active" );
+ }
+
+ });
+
+ this._refreshValue();
+
+ this._animateOff = false;
+ },
+
+ destroy: function() {
+ this.handles.remove();
+ this.range.remove();
+
+ this.element
+ .removeClass( "ui-slider" +
+ " ui-slider-horizontal" +
+ " ui-slider-vertical" +
+ " ui-slider-disabled" +
+ " ui-widget" +
+ " ui-widget-content" +
+ " ui-corner-all" )
+ .removeData( "slider" )
+ .unbind( ".slider" );
+
+ this._mouseDestroy();
+
+ return this;
+ },
+
+ _mouseCapture: function( event ) {
+ var o = this.options,
+ position,
+ normValue,
+ distance,
+ closestHandle,
+ self,
+ index,
+ allowed,
+ offset,
+ mouseOverHandle;
+
+ if ( o.disabled ) {
+ return false;
+ }
+
+ this.elementSize = {
+ width: this.element.outerWidth(),
+ height: this.element.outerHeight()
+ };
+ this.elementOffset = this.element.offset();
+
+ position = { x: event.pageX, y: event.pageY };
+ normValue = this._normValueFromMouse( position );
+ distance = this._valueMax() - this._valueMin() + 1;
+ self = this;
+ this.handles.each(function( i ) {
+ var thisDistance = Math.abs( normValue - self.values(i) );
+ if ( distance > thisDistance ) {
+ distance = thisDistance;
+ closestHandle = $( this );
+ index = i;
+ }
+ });
+
+ // workaround for bug #3736 (if both handles of a range are at 0,
+ // the first is always used as the one with least distance,
+ // and moving it is obviously prevented by preventing negative ranges)
+ if( o.range === true && this.values(1) === o.min ) {
+ index += 1;
+ closestHandle = $( this.handles[index] );
+ }
+
+ allowed = this._start( event, index );
+ if ( allowed === false ) {
+ return false;
+ }
+ this._mouseSliding = true;
+
+ self._handleIndex = index;
+
+ closestHandle
+ .addClass( "ui-state-active" )
+ .focus();
+
+ offset = closestHandle.offset();
+ mouseOverHandle = !$( event.target ).parents().andSelf().is( ".ui-slider-handle" );
+ this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+ left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+ top: event.pageY - offset.top -
+ ( closestHandle.height() / 2 ) -
+ ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
+ ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
+ ( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
+ };
+
+ if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+ this._slide( event, index, normValue );
+ }
+ this._animateOff = true;
+ return true;
+ },
+
+ _mouseStart: function( event ) {
+ return true;
+ },
+
+ _mouseDrag: function( event ) {
+ var position = { x: event.pageX, y: event.pageY },
+ normValue = this._normValueFromMouse( position );
+
+ this._slide( event, this._handleIndex, normValue );
+
+ return false;
+ },
+
+ _mouseStop: function( event ) {
+ this.handles.removeClass( "ui-state-active" );
+ this._mouseSliding = false;
+
+ this._stop( event, this._handleIndex );
+ this._change( event, this._handleIndex );
+
+ this._handleIndex = null;
+ this._clickOffset = null;
+ this._animateOff = false;
+
+ return false;
+ },
+
+ _detectOrientation: function() {
+ this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+ },
+
+ _normValueFromMouse: function( position ) {
+ var pixelTotal,
+ pixelMouse,
+ percentMouse,
+ valueTotal,
+ valueMouse;
+
+ if ( this.orientation === "horizontal" ) {
+ pixelTotal = this.elementSize.width;
+ pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
+ } else {
+ pixelTotal = this.elementSize.height;
+ pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
+ }
+
+ percentMouse = ( pixelMouse / pixelTotal );
+ if ( percentMouse > 1 ) {
+ percentMouse = 1;
+ }
+ if ( percentMouse < 0 ) {
+ percentMouse = 0;
+ }
+ if ( this.orientation === "vertical" ) {
+ percentMouse = 1 - percentMouse;
+ }
+
+ valueTotal = this._valueMax() - this._valueMin();
+ valueMouse = this._valueMin() + percentMouse * valueTotal;
+
+ return this._trimAlignValue( valueMouse );
+ },
+
+ _start: function( event, index ) {
+ var uiHash = {
+ handle: this.handles[ index ],
+ value: this.value()
+ };
+ if ( this.options.values && this.options.values.length ) {
+ uiHash.value = this.values( index );
+ uiHash.values = this.values();
+ }
+ return this._trigger( "start", event, uiHash );
+ },
+
+ _slide: function( event, index, newVal ) {
+ var otherVal,
+ newValues,
+ allowed;
+
+ if ( this.options.values && this.options.values.length ) {
+ otherVal = this.values( index ? 0 : 1 );
+
+ if ( ( this.options.values.length === 2 && this.options.range === true ) &&
+ ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
+ ) {
+ newVal = otherVal;
+ }
+
+ if ( newVal !== this.values( index ) ) {
+ newValues = this.values();
+ newValues[ index ] = newVal;
+ // A slide can be canceled by returning false from the slide callback
+ allowed = this._trigger( "slide", event, {
+ handle: this.handles[ index ],
+ value: newVal,
+ values: newValues
+ } );
+ otherVal = this.values( index ? 0 : 1 );
+ if ( allowed !== false ) {
+ this.values( index, newVal, true );
+ }
+ }
+ } else {
+ if ( newVal !== this.value() ) {
+ // A slide can be canceled by returning false from the slide callback
+ allowed = this._trigger( "slide", event, {
+ handle: this.handles[ index ],
+ value: newVal
+ } );
+ if ( allowed !== false ) {
+ this.value( newVal );
+ }
+ }
+ }
+ },
+
+ _stop: function( event, index ) {
+ var uiHash = {
+ handle: this.handles[ index ],
+ value: this.value()
+ };
+ if ( this.options.values && this.options.values.length ) {
+ uiHash.value = this.values( index );
+ uiHash.values = this.values();
+ }
+
+ this._trigger( "stop", event, uiHash );
+ },
+
+ _change: function( event, index ) {
+ if ( !this._keySliding && !this._mouseSliding ) {
+ var uiHash = {
+ handle: this.handles[ index ],
+ value: this.value()
+ };
+ if ( this.options.values && this.options.values.length ) {
+ uiHash.value = this.values( index );
+ uiHash.values = this.values();
+ }
+
+ this._trigger( "change", event, uiHash );
+ }
+ },
+
+ value: function( newValue ) {
+ if ( arguments.length ) {
+ this.options.value = this._trimAlignValue( newValue );
+ this._refreshValue();
+ this._change( null, 0 );
+ return;
+ }
+
+ return this._value();
+ },
+
+ values: function( index, newValue ) {
+ var vals,
+ newValues,
+ i;
+
+ if ( arguments.length > 1 ) {
+ this.options.values[ index ] = this._trimAlignValue( newValue );
+ this._refreshValue();
+ this._change( null, index );
+ return;
+ }
+
+ if ( arguments.length ) {
+ if ( $.isArray( arguments[ 0 ] ) ) {
+ vals = this.options.values;
+ newValues = arguments[ 0 ];
+ for ( i = 0; i < vals.length; i += 1 ) {
+ vals[ i ] = this._trimAlignValue( newValues[ i ] );
+ this._change( null, i );
+ }
+ this._refreshValue();
+ } else {
+ if ( this.options.values && this.options.values.length ) {
+ return this._values( index );
+ } else {
+ return this.value();
+ }
+ }
+ } else {
+ return this._values();
+ }
+ },
+
+ _setOption: function( key, value ) {
+ var i,
+ valsLength = 0;
+
+ if ( $.isArray( this.options.values ) ) {
+ valsLength = this.options.values.length;
+ }
+
+ $.Widget.prototype._setOption.apply( this, arguments );
+
+ switch ( key ) {
+ case "disabled":
+ if ( value ) {
+ this.handles.filter( ".ui-state-focus" ).blur();
+ this.handles.removeClass( "ui-state-hover" );
+ this.handles.propAttr( "disabled", true );
+ this.element.addClass( "ui-disabled" );
+ } else {
+ this.handles.propAttr( "disabled", false );
+ this.element.removeClass( "ui-disabled" );
+ }
+ break;
+ case "orientation":
+ this._detectOrientation();
+ this.element
+ .removeClass( "ui-slider-horizontal ui-slider-vertical" )
+ .addClass( "ui-slider-" + this.orientation );
+ this._refreshValue();
+ break;
+ case "value":
+ this._animateOff = true;
+ this._refreshValue();
+ this._change( null, 0 );
+ this._animateOff = false;
+ break;
+ case "values":
+ this._animateOff = true;
+ this._refreshValue();
+ for ( i = 0; i < valsLength; i += 1 ) {
+ this._change( null, i );
+ }
+ this._animateOff = false;
+ break;
+ }
+ },
+
+ //internal value getter
+ // _value() returns value trimmed by min and max, aligned by step
+ _value: function() {
+ var val = this.options.value;
+ val = this._trimAlignValue( val );
+
+ return val;
+ },
+
+ //internal values getter
+ // _values() returns array of values trimmed by min and max, aligned by step
+ // _values( index ) returns single value trimmed by min and max, aligned by step
+ _values: function( index ) {
+ var val,
+ vals,
+ i;
+
+ if ( arguments.length ) {
+ val = this.options.values[ index ];
+ val = this._trimAlignValue( val );
+
+ return val;
+ } else {
+ // .slice() creates a copy of the array
+ // this copy gets trimmed by min and max and then returned
+ vals = this.options.values.slice();
+ for ( i = 0; i < vals.length; i+= 1) {
+ vals[ i ] = this._trimAlignValue( vals[ i ] );
+ }
+
+ return vals;
+ }
+ },
+
+ // returns the step-aligned value that val is closest to, between (inclusive) min and max
+ _trimAlignValue: function( val ) {
+ if ( val <= this._valueMin() ) {
+ return this._valueMin();
+ }
+ if ( val >= this._valueMax() ) {
+ return this._valueMax();
+ }
+ var step = ( this.options.step > 0 ) ? this.options.step : 1,
+ valModStep = (val - this._valueMin()) % step,
+ alignValue = val - valModStep;
+
+ if ( Math.abs(valModStep) * 2 >= step ) {
+ alignValue += ( valModStep > 0 ) ? step : ( -step );
+ }
+
+ // Since JavaScript has problems with large floats, round
+ // the final value to 5 digits after the decimal point (see #4124)
+ return parseFloat( alignValue.toFixed(5) );
+ },
+
+ _valueMin: function() {
+ return this.options.min;
+ },
+
+ _valueMax: function() {
+ return this.options.max;
+ },
+
+ _refreshValue: function() {
+ var oRange = this.options.range,
+ o = this.options,
+ self = this,
+ animate = ( !this._animateOff ) ? o.animate : false,
+ valPercent,
+ _set = {},
+ lastValPercent,
+ value,
+ valueMin,
+ valueMax;
+
+ if ( this.options.values && this.options.values.length ) {
+ this.handles.each(function( i, j ) {
+ valPercent = ( self.values(i) - self._valueMin() ) / ( self._valueMax() - self._valueMin() ) * 100;
+ _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+ $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+ if ( self.options.range === true ) {
+ if ( self.orientation === "horizontal" ) {
+ if ( i === 0 ) {
+ self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
+ }
+ if ( i === 1 ) {
+ self.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ } else {
+ if ( i === 0 ) {
+ self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
+ }
+ if ( i === 1 ) {
+ self.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ }
+ }
+ lastValPercent = valPercent;
+ });
+ } else {
+ value = this.value();
+ valueMin = this._valueMin();
+ valueMax = this._valueMax();
+ valPercent = ( valueMax !== valueMin ) ?
+ ( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+ 0;
+ _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+ this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+
+ if ( oRange === "min" && this.orientation === "horizontal" ) {
+ this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
+ }
+ if ( oRange === "max" && this.orientation === "horizontal" ) {
+ this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ if ( oRange === "min" && this.orientation === "vertical" ) {
+ this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
+ }
+ if ( oRange === "max" && this.orientation === "vertical" ) {
+ this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ }
+ }
+
+});
+
+$.extend( $.ui.slider, {
+ version: "1.8.16"
+});
+
+}(jQuery));
+/*
+ * jQuery UI Tabs 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+var tabId = 0,
+ listId = 0;
+
+function getNextTabId() {
+ return ++tabId;
+}
+
+function getNextListId() {
+ return ++listId;
+}
+
+$.widget( "ui.tabs", {
+ options: {
+ add: null,
+ ajaxOptions: null,
+ cache: false,
+ cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true }
+ collapsible: false,
+ disable: null,
+ disabled: [],
+ enable: null,
+ event: "click",
+ fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 }
+ idPrefix: "ui-tabs-",
+ load: null,
+ panelTemplate: "<div></div>",
+ remove: null,
+ select: null,
+ show: null,
+ spinner: "<em>Loading&#8230;</em>",
+ tabTemplate: "<li><a href='#{href}'><span>#{label}</span></a></li>"
+ },
+
+ _create: function() {
+ this._tabify( true );
+ },
+
+ _setOption: function( key, value ) {
+ if ( key == "selected" ) {
+ if (this.options.collapsible && value == this.options.selected ) {
+ return;
+ }
+ this.select( value );
+ } else {
+ this.options[ key ] = value;
+ this._tabify();
+ }
+ },
+
+ _tabId: function( a ) {
+ return a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF-]/g, "" ) ||
+ this.options.idPrefix + getNextTabId();
+ },
+
+ _sanitizeSelector: function( hash ) {
+ // we need this because an id may contain a ":"
+ return hash.replace( /:/g, "\\:" );
+ },
+
+ _cookie: function() {
+ var cookie = this.cookie ||
+ ( this.cookie = this.options.cookie.name || "ui-tabs-" + getNextListId() );
+ return $.cookie.apply( null, [ cookie ].concat( $.makeArray( arguments ) ) );
+ },
+
+ _ui: function( tab, panel ) {
+ return {
+ tab: tab,
+ panel: panel,
+ index: this.anchors.index( tab )
+ };
+ },
+
+ _cleanup: function() {
+ // restore all former loading tabs labels
+ this.lis.filter( ".ui-state-processing" )
+ .removeClass( "ui-state-processing" )
+ .find( "span:data(label.tabs)" )
+ .each(function() {
+ var el = $( this );
+ el.html( el.data( "label.tabs" ) ).removeData( "label.tabs" );
+ });
+ },
+
+ _tabify: function( init ) {
+ var self = this,
+ o = this.options,
+ fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash
+
+ this.list = this.element.find( "ol,ul" ).eq( 0 );
+ this.lis = $( " > li:has(a[href])", this.list );
+ this.anchors = this.lis.map(function() {
+ return $( "a", this )[ 0 ];
+ });
+ this.panels = $( [] );
+
+ this.anchors.each(function( i, a ) {
+ var href = $( a ).attr( "href" );
+ // For dynamically created HTML that contains a hash as href IE < 8 expands
+ // such href to the full page url with hash and then misinterprets tab as ajax.
+ // Same consideration applies for an added tab with a fragment identifier
+ // since a[href=#fragment-identifier] does unexpectedly not match.
+ // Thus normalize href attribute...
+ var hrefBase = href.split( "#" )[ 0 ],
+ baseEl;
+ if ( hrefBase && ( hrefBase === location.toString().split( "#" )[ 0 ] ||
+ ( baseEl = $( "base" )[ 0 ]) && hrefBase === baseEl.href ) ) {
+ href = a.hash;
+ a.href = href;
+ }
+
+ // inline tab
+ if ( fragmentId.test( href ) ) {
+ self.panels = self.panels.add( self.element.find( self._sanitizeSelector( href ) ) );
+ // remote tab
+ // prevent loading the page itself if href is just "#"
+ } else if ( href && href !== "#" ) {
+ // required for restore on destroy
+ $.data( a, "href.tabs", href );
+
+ // TODO until #3808 is fixed strip fragment identifier from url
+ // (IE fails to load from such url)
+ $.data( a, "load.tabs", href.replace( /#.*$/, "" ) );
+
+ var id = self._tabId( a );
+ a.href = "#" + id;
+ var $panel = self.element.find( "#" + id );
+ if ( !$panel.length ) {
+ $panel = $( o.panelTemplate )
+ .attr( "id", id )
+ .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+ .insertAfter( self.panels[ i - 1 ] || self.list );
+ $panel.data( "destroy.tabs", true );
+ }
+ self.panels = self.panels.add( $panel );
+ // invalid tab href
+ } else {
+ o.disabled.push( i );
+ }
+ });
+
+ // initialization from scratch
+ if ( init ) {
+ // attach necessary classes for styling
+ this.element.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" );
+ this.list.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" );
+ this.lis.addClass( "ui-state-default ui-corner-top" );
+ this.panels.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" );
+
+ // Selected tab
+ // use "selected" option or try to retrieve:
+ // 1. from fragment identifier in url
+ // 2. from cookie
+ // 3. from selected class attribute on <li>
+ if ( o.selected === undefined ) {
+ if ( location.hash ) {
+ this.anchors.each(function( i, a ) {
+ if ( a.hash == location.hash ) {
+ o.selected = i;
+ return false;
+ }
+ });
+ }
+ if ( typeof o.selected !== "number" && o.cookie ) {
+ o.selected = parseInt( self._cookie(), 10 );
+ }
+ if ( typeof o.selected !== "number" && this.lis.filter( ".ui-tabs-selected" ).length ) {
+ o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) );
+ }
+ o.selected = o.selected || ( this.lis.length ? 0 : -1 );
+ } else if ( o.selected === null ) { // usage of null is deprecated, TODO remove in next release
+ o.selected = -1;
+ }
+
+ // sanity check - default to first tab...
+ o.selected = ( ( o.selected >= 0 && this.anchors[ o.selected ] ) || o.selected < 0 )
+ ? o.selected
+ : 0;
+
+ // Take disabling tabs via class attribute from HTML
+ // into account and update option properly.
+ // A selected tab cannot become disabled.
+ o.disabled = $.unique( o.disabled.concat(
+ $.map( this.lis.filter( ".ui-state-disabled" ), function( n, i ) {
+ return self.lis.index( n );
+ })
+ ) ).sort();
+
+ if ( $.inArray( o.selected, o.disabled ) != -1 ) {
+ o.disabled.splice( $.inArray( o.selected, o.disabled ), 1 );
+ }
+
+ // highlight selected tab
+ this.panels.addClass( "ui-tabs-hide" );
+ this.lis.removeClass( "ui-tabs-selected ui-state-active" );
+ // check for length avoids error when initializing empty list
+ if ( o.selected >= 0 && this.anchors.length ) {
+ self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ).removeClass( "ui-tabs-hide" );
+ this.lis.eq( o.selected ).addClass( "ui-tabs-selected ui-state-active" );
+
+ // seems to be expected behavior that the show callback is fired
+ self.element.queue( "tabs", function() {
+ self._trigger( "show", null,
+ self._ui( self.anchors[ o.selected ], self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) )[ 0 ] ) );
+ });
+
+ this.load( o.selected );
+ }
+
+ // clean up to avoid memory leaks in certain versions of IE 6
+ // TODO: namespace this event
+ $( window ).bind( "unload", function() {
+ self.lis.add( self.anchors ).unbind( ".tabs" );
+ self.lis = self.anchors = self.panels = null;
+ });
+ // update selected after add/remove
+ } else {
+ o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) );
+ }
+
+ // update collapsible
+ // TODO: use .toggleClass()
+ this.element[ o.collapsible ? "addClass" : "removeClass" ]( "ui-tabs-collapsible" );
+
+ // set or update cookie after init and add/remove respectively
+ if ( o.cookie ) {
+ this._cookie( o.selected, o.cookie );
+ }
+
+ // disable tabs
+ for ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) {
+ $( li )[ $.inArray( i, o.disabled ) != -1 &&
+ // TODO: use .toggleClass()
+ !$( li ).hasClass( "ui-tabs-selected" ) ? "addClass" : "removeClass" ]( "ui-state-disabled" );
+ }
+
+ // reset cache if switching from cached to not cached
+ if ( o.cache === false ) {
+ this.anchors.removeData( "cache.tabs" );
+ }
+
+ // remove all handlers before, tabify may run on existing tabs after add or option change
+ this.lis.add( this.anchors ).unbind( ".tabs" );
+
+ if ( o.event !== "mouseover" ) {
+ var addState = function( state, el ) {
+ if ( el.is( ":not(.ui-state-disabled)" ) ) {
+ el.addClass( "ui-state-" + state );
+ }
+ };
+ var removeState = function( state, el ) {
+ el.removeClass( "ui-state-" + state );
+ };
+ this.lis.bind( "mouseover.tabs" , function() {
+ addState( "hover", $( this ) );
+ });
+ this.lis.bind( "mouseout.tabs", function() {
+ removeState( "hover", $( this ) );
+ });
+ this.anchors.bind( "focus.tabs", function() {
+ addState( "focus", $( this ).closest( "li" ) );
+ });
+ this.anchors.bind( "blur.tabs", function() {
+ removeState( "focus", $( this ).closest( "li" ) );
+ });
+ }
+
+ // set up animations
+ var hideFx, showFx;
+ if ( o.fx ) {
+ if ( $.isArray( o.fx ) ) {
+ hideFx = o.fx[ 0 ];
+ showFx = o.fx[ 1 ];
+ } else {
+ hideFx = showFx = o.fx;
+ }
+ }
+
+ // Reset certain styles left over from animation
+ // and prevent IE's ClearType bug...
+ function resetStyle( $el, fx ) {
+ $el.css( "display", "" );
+ if ( !$.support.opacity && fx.opacity ) {
+ $el[ 0 ].style.removeAttribute( "filter" );
+ }
+ }
+
+ // Show a tab...
+ var showTab = showFx
+ ? function( clicked, $show ) {
+ $( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" );
+ $show.hide().removeClass( "ui-tabs-hide" ) // avoid flicker that way
+ .animate( showFx, showFx.duration || "normal", function() {
+ resetStyle( $show, showFx );
+ self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) );
+ });
+ }
+ : function( clicked, $show ) {
+ $( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" );
+ $show.removeClass( "ui-tabs-hide" );
+ self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) );
+ };
+
+ // Hide a tab, $show is optional...
+ var hideTab = hideFx
+ ? function( clicked, $hide ) {
+ $hide.animate( hideFx, hideFx.duration || "normal", function() {
+ self.lis.removeClass( "ui-tabs-selected ui-state-active" );
+ $hide.addClass( "ui-tabs-hide" );
+ resetStyle( $hide, hideFx );
+ self.element.dequeue( "tabs" );
+ });
+ }
+ : function( clicked, $hide, $show ) {
+ self.lis.removeClass( "ui-tabs-selected ui-state-active" );
+ $hide.addClass( "ui-tabs-hide" );
+ self.element.dequeue( "tabs" );
+ };
+
+ // attach tab event handler, unbind to avoid duplicates from former tabifying...
+ this.anchors.bind( o.event + ".tabs", function() {
+ var el = this,
+ $li = $(el).closest( "li" ),
+ $hide = self.panels.filter( ":not(.ui-tabs-hide)" ),
+ $show = self.element.find( self._sanitizeSelector( el.hash ) );
+
+ // If tab is already selected and not collapsible or tab disabled or
+ // or is already loading or click callback returns false stop here.
+ // Check if click handler returns false last so that it is not executed
+ // for a disabled or loading tab!
+ if ( ( $li.hasClass( "ui-tabs-selected" ) && !o.collapsible) ||
+ $li.hasClass( "ui-state-disabled" ) ||
+ $li.hasClass( "ui-state-processing" ) ||
+ self.panels.filter( ":animated" ).length ||
+ self._trigger( "select", null, self._ui( this, $show[ 0 ] ) ) === false ) {
+ this.blur();
+ return false;
+ }
+
+ o.selected = self.anchors.index( this );
+
+ self.abort();
+
+ // if tab may be closed
+ if ( o.collapsible ) {
+ if ( $li.hasClass( "ui-tabs-selected" ) ) {
+ o.selected = -1;
+
+ if ( o.cookie ) {
+ self._cookie( o.selected, o.cookie );
+ }
+
+ self.element.queue( "tabs", function() {
+ hideTab( el, $hide );
+ }).dequeue( "tabs" );
+
+ this.blur();
+ return false;
+ } else if ( !$hide.length ) {
+ if ( o.cookie ) {
+ self._cookie( o.selected, o.cookie );
+ }
+
+ self.element.queue( "tabs", function() {
+ showTab( el, $show );
+ });
+
+ // TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171
+ self.load( self.anchors.index( this ) );
+
+ this.blur();
+ return false;
+ }
+ }
+
+ if ( o.cookie ) {
+ self._cookie( o.selected, o.cookie );
+ }
+
+ // show new tab
+ if ( $show.length ) {
+ if ( $hide.length ) {
+ self.element.queue( "tabs", function() {
+ hideTab( el, $hide );
+ });
+ }
+ self.element.queue( "tabs", function() {
+ showTab( el, $show );
+ });
+
+ self.load( self.anchors.index( this ) );
+ } else {
+ throw "jQuery UI Tabs: Mismatching fragment identifier.";
+ }
+
+ // Prevent IE from keeping other link focussed when using the back button
+ // and remove dotted border from clicked link. This is controlled via CSS
+ // in modern browsers; blur() removes focus from address bar in Firefox
+ // which can become a usability and annoying problem with tabs('rotate').
+ if ( $.browser.msie ) {
+ this.blur();
+ }
+ });
+
+ // disable click in any case
+ this.anchors.bind( "click.tabs", function(){
+ return false;
+ });
+ },
+
+ _getIndex: function( index ) {
+ // meta-function to give users option to provide a href string instead of a numerical index.
+ // also sanitizes numerical indexes to valid values.
+ if ( typeof index == "string" ) {
+ index = this.anchors.index( this.anchors.filter( "[href$=" + index + "]" ) );
+ }
+
+ return index;
+ },
+
+ destroy: function() {
+ var o = this.options;
+
+ this.abort();
+
+ this.element
+ .unbind( ".tabs" )
+ .removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" )
+ .removeData( "tabs" );
+
+ this.list.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" );
+
+ this.anchors.each(function() {
+ var href = $.data( this, "href.tabs" );
+ if ( href ) {
+ this.href = href;
+ }
+ var $this = $( this ).unbind( ".tabs" );
+ $.each( [ "href", "load", "cache" ], function( i, prefix ) {
+ $this.removeData( prefix + ".tabs" );
+ });
+ });
+
+ this.lis.unbind( ".tabs" ).add( this.panels ).each(function() {
+ if ( $.data( this, "destroy.tabs" ) ) {
+ $( this ).remove();
+ } else {
+ $( this ).removeClass([
+ "ui-state-default",
+ "ui-corner-top",
+ "ui-tabs-selected",
+ "ui-state-active",
+ "ui-state-hover",
+ "ui-state-focus",
+ "ui-state-disabled",
+ "ui-tabs-panel",
+ "ui-widget-content",
+ "ui-corner-bottom",
+ "ui-tabs-hide"
+ ].join( " " ) );
+ }
+ });
+
+ if ( o.cookie ) {
+ this._cookie( null, o.cookie );
+ }
+
+ return this;
+ },
+
+ add: function( url, label, index ) {
+ if ( index === undefined ) {
+ index = this.anchors.length;
+ }
+
+ var self = this,
+ o = this.options,
+ $li = $( o.tabTemplate.replace( /#\{href\}/g, url ).replace( /#\{label\}/g, label ) ),
+ id = !url.indexOf( "#" ) ? url.replace( "#", "" ) : this._tabId( $( "a", $li )[ 0 ] );
+
+ $li.addClass( "ui-state-default ui-corner-top" ).data( "destroy.tabs", true );
+
+ // try to find an existing element before creating a new one
+ var $panel = self.element.find( "#" + id );
+ if ( !$panel.length ) {
+ $panel = $( o.panelTemplate )
+ .attr( "id", id )
+ .data( "destroy.tabs", true );
+ }
+ $panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" );
+
+ if ( index >= this.lis.length ) {
+ $li.appendTo( this.list );
+ $panel.appendTo( this.list[ 0 ].parentNode );
+ } else {
+ $li.insertBefore( this.lis[ index ] );
+ $panel.insertBefore( this.panels[ index ] );
+ }
+
+ o.disabled = $.map( o.disabled, function( n, i ) {
+ return n >= index ? ++n : n;
+ });
+
+ this._tabify();
+
+ if ( this.anchors.length == 1 ) {
+ o.selected = 0;
+ $li.addClass( "ui-tabs-selected ui-state-active" );
+ $panel.removeClass( "ui-tabs-hide" );
+ this.element.queue( "tabs", function() {
+ self._trigger( "show", null, self._ui( self.anchors[ 0 ], self.panels[ 0 ] ) );
+ });
+
+ this.load( 0 );
+ }
+
+ this._trigger( "add", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
+ return this;
+ },
+
+ remove: function( index ) {
+ index = this._getIndex( index );
+ var o = this.options,
+ $li = this.lis.eq( index ).remove(),
+ $panel = this.panels.eq( index ).remove();
+
+ // If selected tab was removed focus tab to the right or
+ // in case the last tab was removed the tab to the left.
+ if ( $li.hasClass( "ui-tabs-selected" ) && this.anchors.length > 1) {
+ this.select( index + ( index + 1 < this.anchors.length ? 1 : -1 ) );
+ }
+
+ o.disabled = $.map(
+ $.grep( o.disabled, function(n, i) {
+ return n != index;
+ }),
+ function( n, i ) {
+ return n >= index ? --n : n;
+ });
+
+ this._tabify();
+
+ this._trigger( "remove", null, this._ui( $li.find( "a" )[ 0 ], $panel[ 0 ] ) );
+ return this;
+ },
+
+ enable: function( index ) {
+ index = this._getIndex( index );
+ var o = this.options;
+ if ( $.inArray( index, o.disabled ) == -1 ) {
+ return;
+ }
+
+ this.lis.eq( index ).removeClass( "ui-state-disabled" );
+ o.disabled = $.grep( o.disabled, function( n, i ) {
+ return n != index;
+ });
+
+ this._trigger( "enable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
+ return this;
+ },
+
+ disable: function( index ) {
+ index = this._getIndex( index );
+ var self = this, o = this.options;
+ // cannot disable already selected tab
+ if ( index != o.selected ) {
+ this.lis.eq( index ).addClass( "ui-state-disabled" );
+
+ o.disabled.push( index );
+ o.disabled.sort();
+
+ this._trigger( "disable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
+ }
+
+ return this;
+ },
+
+ select: function( index ) {
+ index = this._getIndex( index );
+ if ( index == -1 ) {
+ if ( this.options.collapsible && this.options.selected != -1 ) {
+ index = this.options.selected;
+ } else {
+ return this;
+ }
+ }
+ this.anchors.eq( index ).trigger( this.options.event + ".tabs" );
+ return this;
+ },
+
+ load: function( index ) {
+ index = this._getIndex( index );
+ var self = this,
+ o = this.options,
+ a = this.anchors.eq( index )[ 0 ],
+ url = $.data( a, "load.tabs" );
+
+ this.abort();
+
+ // not remote or from cache
+ if ( !url || this.element.queue( "tabs" ).length !== 0 && $.data( a, "cache.tabs" ) ) {
+ this.element.dequeue( "tabs" );
+ return;
+ }
+
+ // load remote from here on
+ this.lis.eq( index ).addClass( "ui-state-processing" );
+
+ if ( o.spinner ) {
+ var span = $( "span", a );
+ span.data( "label.tabs", span.html() ).html( o.spinner );
+ }
+
+ this.xhr = $.ajax( $.extend( {}, o.ajaxOptions, {
+ url: url,
+ success: function( r, s ) {
+ self.element.find( self._sanitizeSelector( a.hash ) ).html( r );
+
+ // take care of tab labels
+ self._cleanup();
+
+ if ( o.cache ) {
+ $.data( a, "cache.tabs", true );
+ }
+
+ self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) );
+ try {
+ o.ajaxOptions.success( r, s );
+ }
+ catch ( e ) {}
+ },
+ error: function( xhr, s, e ) {
+ // take care of tab labels
+ self._cleanup();
+
+ self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) );
+ try {
+ // Passing index avoid a race condition when this method is
+ // called after the user has selected another tab.
+ // Pass the anchor that initiated this request allows
+ // loadError to manipulate the tab content panel via $(a.hash)
+ o.ajaxOptions.error( xhr, s, index, a );
+ }
+ catch ( e ) {}
+ }
+ } ) );
+
+ // last, so that load event is fired before show...
+ self.element.dequeue( "tabs" );
+
+ return this;
+ },
+
+ abort: function() {
+ // stop possibly running animations
+ this.element.queue( [] );
+ this.panels.stop( false, true );
+
+ // "tabs" queue must not contain more than two elements,
+ // which are the callbacks for the latest clicked tab...
+ this.element.queue( "tabs", this.element.queue( "tabs" ).splice( -2, 2 ) );
+
+ // terminate pending requests from other tabs
+ if ( this.xhr ) {
+ this.xhr.abort();
+ delete this.xhr;
+ }
+
+ // take care of tab labels
+ this._cleanup();
+ return this;
+ },
+
+ url: function( index, url ) {
+ this.anchors.eq( index ).removeData( "cache.tabs" ).data( "load.tabs", url );
+ return this;
+ },
+
+ length: function() {
+ return this.anchors.length;
+ }
+});
+
+$.extend( $.ui.tabs, {
+ version: "1.8.16"
+});
+
+/*
+ * Tabs Extensions
+ */
+
+/*
+ * Rotate
+ */
+$.extend( $.ui.tabs.prototype, {
+ rotation: null,
+ rotate: function( ms, continuing ) {
+ var self = this,
+ o = this.options;
+
+ var rotate = self._rotate || ( self._rotate = function( e ) {
+ clearTimeout( self.rotation );
+ self.rotation = setTimeout(function() {
+ var t = o.selected;
+ self.select( ++t < self.anchors.length ? t : 0 );
+ }, ms );
+
+ if ( e ) {
+ e.stopPropagation();
+ }
+ });
+
+ var stop = self._unrotate || ( self._unrotate = !continuing
+ ? function(e) {
+ if (e.clientX) { // in case of a true click
+ self.rotate(null);
+ }
+ }
+ : function( e ) {
+ t = o.selected;
+ rotate();
+ });
+
+ // start rotation
+ if ( ms ) {
+ this.element.bind( "tabsshow", rotate );
+ this.anchors.bind( o.event + ".tabs", stop );
+ rotate();
+ // stop rotation
+ } else {
+ clearTimeout( self.rotation );
+ this.element.unbind( "tabsshow", rotate );
+ this.anchors.unbind( o.event + ".tabs", stop );
+ delete this._rotate;
+ delete this._unrotate;
+ }
+
+ return this;
+ }
+});
+
+})( jQuery );
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery-ui.min.js b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery-ui.min.js
new file mode 100644
index 00000000..14c9064f
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery-ui.min.js
@@ -0,0 +1,791 @@
+/*!
+ * jQuery UI 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.16",
+keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({propAttr:c.fn.prop||c.fn.attr,_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=
+this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,
+"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":
+"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,
+outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,
+"tabindex"),d=isNaN(b);return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&
+a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&
+c.ui.isOverAxis(b,e,i)}})}})(jQuery);
+;/*!
+ * jQuery UI Widget 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)try{b(d).triggerHandler("remove")}catch(e){}k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(d){}});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=
+function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):
+d;if(e&&d.charAt(0)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=
+b.extend(true,{},this.options,this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+
+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",
+c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
+;/*!
+ * jQuery UI Mouse 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ */
+(function(b){var d=false;b(document).mouseup(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
+this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"&&a.target.nodeName?b(a.target).closest(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
+this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&&
+!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
+false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
+;/*
+ * jQuery UI Position 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Position
+ */
+(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
+left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
+k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
+m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
+d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
+a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
+g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
+;/*
+ * jQuery UI Draggable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
+"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
+this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;if(b.iframeFix)d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options;
+this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
+this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);d.ui.ddmanager&&d.ui.ddmanager.dragStart(this,a);return true},
+_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=
+false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,
+10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});d.ui.ddmanager&&d.ui.ddmanager.dragStop(this,a);return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||
+!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&
+a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=
+this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
+10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),
+10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[a.containment=="document"?0:d(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,a.containment=="document"?0:d(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,
+(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!=
+"hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),
+10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+
+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&
+!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.left<g[0])e=g[0]+this.offset.click.left;
+if(a.pageY-this.offset.click.top<g[1])h=g[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>g[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=b.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1]:this.originalPageY;h=g?!(h-this.offset.click.top<g[1]||h-this.offset.click.top>g[3])?h:!(h-this.offset.click.top<g[1])?h-b.grid[1]:h+b.grid[1]:h;e=b.grid[0]?this.originalPageX+Math.round((e-this.originalPageX)/
+b.grid[0])*b.grid[0]:this.originalPageX;e=g?!(e-this.offset.click.left<g[0]||e-this.offset.click.left>g[2])?e:!(e-this.offset.click.left<g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<
+526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,
+c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.16"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert});
+h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=
+false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);
+this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;
+c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&
+this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=
+a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!=
+"x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left<
+c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-
+c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,
+width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,h=b.offset.left,g=h+c.helperProportions.width,n=b.offset.top,o=n+c.helperProportions.height,i=c.snapElements.length-1;i>=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e<h&&h<l+e&&k-e<n&&n<m+e||j-e<h&&h<l+e&&k-e<o&&o<m+e||j-e<g&&g<l+e&&k-e<n&&n<m+e||j-e<g&&g<l+e&&k-e<o&&
+o<m+e){if(f.snapMode!="inner"){var p=Math.abs(k-o)<=e,q=Math.abs(m-n)<=e,r=Math.abs(j-g)<=e,s=Math.abs(l-h)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l}).left-c.margins.left}var t=
+p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(k-n)<=e;q=Math.abs(m-o)<=e;r=Math.abs(j-h)<=e;s=Math.abs(l-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[i].snapping&&
+(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=p||q||r||s||t}else{c.snapElements[i].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),
+10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
+;/*
+ * jQuery UI Droppable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Droppables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.mouse.js
+ * jquery.ui.draggable.js
+ */
+(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
+a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
+this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
+this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
+d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
+a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.16"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
+switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
+i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
+"none";if(c[f].visible){e=="mousedown"&&c[f]._activate.call(c[f],b);c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight}}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
+a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},dragStart:function(a,b){a.element.parents(":not(body,html)").bind("scroll.droppable",function(){a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)})},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);
+if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})},dragStop:function(a,b){a.element.parents(":not(body,html)").unbind("scroll.droppable");
+a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)}}})(jQuery);
+;/*
+ * jQuery UI Resizable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
+_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
+top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
+this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
+nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
+String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),l=0;l=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,l);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
+this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){e(this).removeClass("ui-resizable-autohide");b._handles.show()}},function(){if(!a.disabled)if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
+var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=
+false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});
+this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff=
+{width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];
+if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},
+_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,
+{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(b){var a=this.options,c,d,f;a={minWidth:k(a.minWidth)?a.minWidth:0,maxWidth:k(a.maxWidth)?a.maxWidth:Infinity,minHeight:k(a.minHeight)?a.minHeight:0,maxHeight:k(a.maxHeight)?a.maxHeight:
+Infinity};if(this._aspectRatio||b){b=a.minHeight*this.aspectRatio;d=a.minWidth/this.aspectRatio;c=a.maxHeight*this.aspectRatio;f=a.maxWidth/this.aspectRatio;if(b>a.minWidth)a.minWidth=b;if(d>a.minHeight)a.minHeight=d;if(c<a.maxWidth)a.maxWidth=c;if(f<a.maxHeight)a.maxHeight=f}this._vBoundaries=a},_updateCache:function(b){this.offset=this.helper.offset();if(k(b.left))this.position.left=b.left;if(k(b.top))this.position.top=b.top;if(k(b.height))this.size.height=b.height;if(k(b.width))this.size.width=
+b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(k(b.height))b.width=b.height*this.aspectRatio;else if(k(b.width))b.height=b.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this._vBoundaries,c=this.axis,d=k(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=k(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=k(b.width)&&a.minWidth&&
+a.minWidth>b.width,h=k(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,l=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&l)b.left=i-a.minWidth;if(d&&l)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=
+null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||
+0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+
+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+
+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);
+b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.16"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),
+10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-
+f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var l=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:l.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(l.css("position"))){c._revertToRelativePosition=true;l.css({position:"absolute",top:"auto",left:"auto"})}l.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?
+e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=
+e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,
+step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=
+e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;
+var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:
+a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-
+d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,
+f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,
+display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=
+e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=
+d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
+;/*
+ * jQuery UI Selectable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
+selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
+c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
+c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
+this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
+a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
+!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
+e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.16"})})(jQuery);
+;/*
+ * jQuery UI Sortable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Sortables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var a=this.options;this.containerCache={};this.element.addClass("ui-sortable");
+this.refresh();this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a===
+"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&
+!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
+left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
+this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=
+document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);
+return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<
+b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-
+b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,
+a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],
+e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();
+c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
+this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,
+dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},
+toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
+this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();
+var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},
+_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();
+if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
+this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),
+this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&
+this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=
+this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=
+d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||
+0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",
+a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-
+f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=
+this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==
+""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=
+this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a=
+{top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
+10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?
+document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),
+10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=
+this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&
+this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
+var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-
+this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-
+this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],
+this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]=
+"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",
+f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,
+this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",
+a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
+_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.16"})})(jQuery);
+;/*
+ * jQuery UI Accordion 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function(c){c.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");
+a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
+if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion",
+function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a=
+this.options;if(a.icons){c("<span></span>").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex");
+this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons();
+b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target);
+a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+
+c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options;
+if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);
+if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(),
+e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight||
+e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false",
+"aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.16",
+animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/);
+f[i]={value:j[1],unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",
+paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery);
+;/*
+ * jQuery UI Autocomplete 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.position.js
+ */
+(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.propAttr("readOnly"))){g=
+false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=
+a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};
+this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&&
+a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
+d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&&
+b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source=
+this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();
+this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label||
+b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new d.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this;
+d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
+"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery);
+(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
+-1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
+this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b,
+this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
+this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
+this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery);
+;/*
+ * jQuery UI Button 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function(b){var h,i,j,g,l=function(){var a=b(this).find(":ui-button");setTimeout(function(){a.button("refresh")},1)},k=function(a){var c=a.name,e=a.form,f=b([]);if(c)f=e?b(e).find("[name='"+c+"']"):b("[name='"+c+"']",a.ownerDocument).filter(function(){return!this.form});return f};b.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",l);if(typeof this.options.disabled!==
+"boolean")this.options.disabled=this.element.propAttr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var a=this,c=this.options,e=this.type==="checkbox"||this.type==="radio",f="ui-state-hover"+(!e?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!c.disabled){b(this).addClass("ui-state-hover");
+this===h&&b(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){c.disabled||b(this).removeClass(f)}).bind("click.button",function(d){if(c.disabled){d.preventDefault();d.stopImmediatePropagation()}});this.element.bind("focus.button",function(){a.buttonElement.addClass("ui-state-focus")}).bind("blur.button",function(){a.buttonElement.removeClass("ui-state-focus")});if(e){this.element.bind("change.button",function(){g||a.refresh()});this.buttonElement.bind("mousedown.button",function(d){if(!c.disabled){g=
+false;i=d.pageX;j=d.pageY}}).bind("mouseup.button",function(d){if(!c.disabled)if(i!==d.pageX||j!==d.pageY)g=true})}if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(c.disabled||g)return false;b(this).toggleClass("ui-state-active");a.buttonElement.attr("aria-pressed",a.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled||g)return false;b(this).addClass("ui-state-active");a.buttonElement.attr("aria-pressed","true");
+var d=a.element[0];k(d).not(d).map(function(){return b(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")});else{this.buttonElement.bind("mousedown.button",function(){if(c.disabled)return false;b(this).addClass("ui-state-active");h=this;b(document).one("mouseup",function(){h=null})}).bind("mouseup.button",function(){if(c.disabled)return false;b(this).removeClass("ui-state-active")}).bind("keydown.button",function(d){if(c.disabled)return false;if(d.keyCode==b.ui.keyCode.SPACE||
+d.keyCode==b.ui.keyCode.ENTER)b(this).addClass("ui-state-active")}).bind("keyup.button",function(){b(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(d){d.keyCode===b.ui.keyCode.SPACE&&b(this).click()})}this._setOption("disabled",c.disabled);this._resetButton()},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type===
+"radio"){var a=this.element.parents().filter(":last"),c="label[for='"+this.element.attr("id")+"']";this.buttonElement=a.find(c);if(!this.buttonElement.length){a=a.length?a.siblings():this.element.siblings();this.buttonElement=a.filter(c);if(!this.buttonElement.length)this.buttonElement=a.find(c)}this.element.addClass("ui-helper-hidden-accessible");(a=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",a)}else this.buttonElement=this.element},
+widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||this.buttonElement.removeAttr("title");
+b.Widget.prototype.destroy.call(this)},_setOption:function(a,c){b.Widget.prototype._setOption.apply(this,arguments);if(a==="disabled")c?this.element.propAttr("disabled",true):this.element.propAttr("disabled",false);else this._resetButton()},refresh:function(){var a=this.element.is(":disabled");a!==this.options.disabled&&this._setOption("disabled",a);if(this.type==="radio")k(this.element[0]).each(function(){b(this).is(":checked")?b(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
+"true"):b(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false")},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var a=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
+c=b("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(a.empty()).text(),e=this.options.icons,f=e.primary&&e.secondary,d=[];if(e.primary||e.secondary){if(this.options.text)d.push("ui-button-text-icon"+(f?"s":e.primary?"-primary":"-secondary"));e.primary&&a.prepend("<span class='ui-button-icon-primary ui-icon "+e.primary+"'></span>");e.secondary&&a.append("<span class='ui-button-icon-secondary ui-icon "+e.secondary+"'></span>");if(!this.options.text){d.push(f?"ui-button-icons-only":
+"ui-button-icon-only");this.hasTitle||a.attr("title",c)}}else d.push("ui-button-text-only");a.addClass(d.join(" "))}}});b.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(a,c){a==="disabled"&&this.buttons.button("option",a,c);b.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var a=this.element.css("direction")===
+"ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(a?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(a?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");
+b.Widget.prototype.destroy.call(this)}})})(jQuery);
+;/*
+ * jQuery UI Dialog 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.button.js
+ * jquery.ui.draggable.js
+ * jquery.ui.mouse.js
+ * jquery.ui.position.js
+ * jquery.ui.resizable.js
+ */
+(function(c,l){var m={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},n={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},o=c.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,
+position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||"&#160;",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&!i.isDefaultPrevented()&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),
+h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",
+e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");
+a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==
+b.uiDialog[0]){e=c(this).css("z-index");isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.scrollTop(),scrollLeft:d.element.scrollLeft()};c.ui.dialog.maxZ+=1;
+d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===
+f[0]&&e.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,
+function(){return!(d=true)});if(d){c.each(a,function(f,h){h=c.isFunction(h)?{click:h,text:f}:h;var i=c('<button type="button"></button>').click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.each(h,function(j,k){if(j!=="click")j in o?i[j](k):i.attr(j,k)});c.fn.button&&i.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",
+handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,
+originalSize:f.originalSize,position:f.position,size:f.size}}a=a===l?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",
+f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):
+[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f);
+if(g in m)e=true;if(g in n)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):
+e.removeClass("ui-dialog-disabled");break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||"&#160;"));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a=
+this.options,b,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height-
+b,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.16",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),
+create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&!d.isDefaultPrevented()&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||
+c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&
+c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+
+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
+;/*
+ * jQuery UI Slider 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var a=this,b=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f=b.values&&b.values.length||1,e=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
+this.orientation+" ui-widget ui-widget-content ui-corner-all"+(b.disabled?" ui-slider-disabled ui-disabled":""));this.range=d([]);if(b.range){if(b.range===true){if(!b.values)b.values=[this._valueMin(),this._valueMin()];if(b.values.length&&b.values.length!==2)b.values=[b.values[0],b.values[0]]}this.range=d("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(b.range==="min"||b.range==="max"?" ui-slider-range-"+b.range:""))}for(var j=c.length;j<f;j+=1)e.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
+this.handles=c.add(d(e.join("")).appendTo(a.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){b.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(b.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle",
+g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!a.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!a._keySliding){a._keySliding=true;d(this).addClass("ui-state-active");i=a._start(g,l);if(i===false)return}break}m=a.options.step;i=a.options.values&&a.options.values.length?
+(h=a.values(l)):(h=a.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=a._valueMin();break;case d.ui.keyCode.END:h=a._valueMax();break;case d.ui.keyCode.PAGE_UP:h=a._trimAlignValue(i+(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=a._trimAlignValue(i-(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===a._valueMax())return;h=a._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===a._valueMin())return;h=a._trimAlignValue(i-
+m);break}a._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(a._keySliding){a._keySliding=false;a._stop(g,k);a._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
+return this},_mouseCapture:function(a){var b=this.options,c,f,e,j,g;if(b.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:a.pageX,y:a.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(b.range===true&&this.values(1)===b.min){g+=1;e=d(this.handles[g])}if(this._start(a,g)===false)return false;
+this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();b=e.offset();this._clickOffset=!d(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-b.left-e.width()/2,top:a.pageY-b.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(a,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(a){var b=
+this._normValueFromMouse({x:a.pageX,y:a.pageY});this._slide(a,this._handleIndex,b);return false},_mouseStop:function(a){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(a,this._handleIndex);this._change(a,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b;if(this.orientation==="horizontal"){b=
+this.elementSize.width;a=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{b=this.elementSize.height;a=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}b=a/b;if(b>1)b=1;if(b<0)b=0;if(this.orientation==="vertical")b=1-b;a=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+b*a)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);
+c.values=this.values()}return this._trigger("start",a,c)},_slide:function(a,b,c){var f;if(this.options.values&&this.options.values.length){f=this.values(b?0:1);if(this.options.values.length===2&&this.options.range===true&&(b===0&&c>f||b===1&&c<f))c=f;if(c!==this.values(b)){f=this.values();f[b]=c;a=this._trigger("slide",a,{handle:this.handles[b],value:c,values:f});this.values(b?0:1);a!==false&&this.values(b,c,true)}}else if(c!==this.value()){a=this._trigger("slide",a,{handle:this.handles[b],value:c});
+a!==false&&this.value(c)}},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value=
+this._trimAlignValue(a);this._refreshValue();this._change(null,0)}else return this._value()},values:function(a,b){var c,f,e;if(arguments.length>1){this.options.values[a]=this._trimAlignValue(b);this._refreshValue();this._change(null,a)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e<c.length;e+=1){c[e]=this._trimAlignValue(f[e]);this._change(null,e)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(a):
+this.value();else return this._values()},_setOption:function(a,b){var c,f=0;if(d.isArray(this.options.values))f=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(a){case "disabled":if(b){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.propAttr("disabled",true);this.element.addClass("ui-disabled")}else{this.handles.propAttr("disabled",false);this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
+this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a)},_values:function(a){var b,c;if(arguments.length){b=this.options.values[a];
+return b=this._trimAlignValue(b)}else{b=this.options.values.slice();for(c=0;c<b.length;c+=1)b[c]=this._trimAlignValue(b[c]);return b}},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b;a=a-c;if(Math.abs(c)*2>=b)a+=c>0?b:-b;return parseFloat(a.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a=
+this.options.range,b=this.options,c=this,f=!this._animateOff?b.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,b.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({width:e-
+g+"%"},{queue:false,duration:b.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:b.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,b.animate);if(a==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[f?"animate":"css"]({width:e+"%"},
+b.animate);if(a==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:b.animate});if(a==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},b.animate);if(a==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:b.animate})}}});d.extend(d.ui.slider,{version:"1.8.16"})})(jQuery);
+;/*
+ * jQuery UI Tabs 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&&
+e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=
+d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
+(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
+this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
+this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
+if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
+this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+
+g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",
+function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};
+this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=
+-1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
+d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=
+d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b,
+e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);
+j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();
+if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null,
+this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
+load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,
+"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
+url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.16"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&
+a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
+;/*
+ * jQuery UI Datepicker 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker
+ *
+ * Depends:
+ * jquery.ui.core.js
+ */
+(function(d,C){function M(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
+"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
+"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
+minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false,disabled:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=N(d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function N(a){return a.bind("mouseout",
+function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");b.length&&b.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])||!b.length)){b.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+b.addClass("ui-state-hover");b.hasClass("ui-datepicker-prev")&&b.addClass("ui-datepicker-prev-hover");b.hasClass("ui-datepicker-next")&&b.addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==C)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.16"}});var B=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},
+setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,
+"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",
+function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b);b.settings.disabled&&this._disableDatepicker(a)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c==
+"focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():
+d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,
+b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.settings.disabled&&this._disableDatepicker(a);b.dpDiv.css("display","block")}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=
+1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/
+2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=
+d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=
+a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,
+"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==
+a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?
+d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&this._hideDatepicker();var h=this._getDateDatepicker(a,true),i=this._getMinMaxDate(e,"min"),g=this._getMinMaxDate(e,"max");H(e.settings,f);if(i!==null&&f.dateFormat!==C&&f.minDate===C)e.settings.minDate=this._formatDate(e,i);if(g!==null&&f.dateFormat!==C&&f.maxDate===C)e.settings.maxDate=this._formatDate(e,g);this._attachments(d(a),e);this._autoSize(e);this._setDate(e,h);this._updateAlternate(e);
+this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");
+b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);c[0]&&d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]);if(a=d.datepicker._get(b,"onSelect")){c=d.datepicker._formatDate(b);a.apply(b.input?b.input[0]:null,[c,b])}else d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,
+a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=
+a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,
+"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==C?a.keyCode:a.charCode);
+return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",
+a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);if(d.datepicker._curInst&&d.datepicker._curInst!=b){d.datepicker._datepickerShowing&&d.datepicker._triggerOnClose(d.datepicker._curInst);d.datepicker._curInst.dpDiv.stop(true,true)}var c=d.datepicker._get(b,"beforeShow");c=c?c.apply(a,[a,b]):{};if(c!==false){H(b.settings,c);b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value=
+"";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);
+c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=
+true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}}},_updateDatepicker:function(a){this.maxRows=4;var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});
+a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&
+!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),
+h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=
+this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_triggerOnClose:function(a){var b=this._get(a,"onClose");if(b)b.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a])},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);
+this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();d.datepicker._triggerOnClose(b);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
+_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):
+0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e["selected"+(c=="M"?
+"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);
+this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");
+if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?
+b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1<a.length&&a.charAt(A+1)==p)&&A++;return p},m=function(p){var D=
+o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"&&D?4:p=="o"?3:2)+"}");p=b.substring(q).match(p);if(!p)throw"Missing number at position "+q;q+=p[0].length;return parseInt(p[0],10)},n=function(p,D,K){p=d.map(o(p)?K:D,function(w,x){return[[x,w]]}).sort(function(w,x){return-(w[1].length-x[1].length)});var E=-1;d.each(p,function(w,x){w=x[1];if(b.substr(q,w.length).toLowerCase()==w.toLowerCase()){E=x[0];q+=w.length;return false}});if(E!=-1)return E+1;else throw"Unknown name at position "+q;},s=
+function(){if(b.charAt(q)!=a.charAt(A))throw"Unexpected literal at position "+q;q++},q=0,A=0;A<a.length;A++)if(k)if(a.charAt(A)=="'"&&!o("'"))k=false;else s();else switch(a.charAt(A)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=new Date(m("@"));c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();j=v.getMonth()+
+1;l=v.getDate();break;case "'":if(o("'"))s();else k=true;break;default:s()}if(q<b.length)throw"Extra/unparsed characters found in date: "+b.substring(q);if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",
+COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:
+null)||this._defaults.monthNames;var i=function(o){(o=k+1<a.length&&a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},j=function(o,m,n,s){return i(o)?s[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;case "o":l+=g("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-
+(new Date(b.getFullYear(),0,0)).getTime())/864E5),3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+1)==h)&&f++;return h},f=
+0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==C?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,f,h;f=h=this._getDefaultDate(a);
+var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var e=function(h){var i=new Date;
+i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=parseInt(k[1],10);g=
+Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>
+12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&
+a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?
+new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));
+n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+B+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var s=this._get(a,"nextText");s=!h?s:this.formatDate(s,this._daylightSavingAdjust(new Date(m,
+g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+B+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>";j=this._get(a,"currentText");s=this._get(a,"gotoCurrent")&&
+a.currentDay?u:b;j=!h?j:this.formatDate(j,s,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+B+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,s)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
+B+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");s=this._get(a,"dayNames");this._get(a,"dayNamesShort");var q=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),D=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x<i[0];x++){var O=
+"";this.maxRows=4;for(var G=0;G<i[1];G++){var P=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",y="";if(l){y+='<div class="ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&
+x==0?c?f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var z=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var r=(t+h)%7;z+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+s[r]+'">'+q[r]+"</span></th>"}y+=z+"</tr></thead><tbody>";z=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,
+z);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;z=Math.ceil((t+z)/7);this.maxRows=z=l?this.maxRows>z?this.maxRows:z:z;r=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q<z;Q++){y+="<tr>";var R=!j?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(r)+"</td>";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[r]):[true,""],F=r.getMonth()!=g,L=F&&!K||!I[0]||k&&r<k||o&&r>o;R+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(r.getTime()==
+P.getTime()&&g==a.selectedMonth&&a._keyEvent||E.getTime()==r.getTime()&&E.getTime()==P.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!D?"":" "+I[1]+(r.getTime()==u.getTime()?" "+this._currentClass:"")+(r.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!F||D)&&I[2]?' title="'+I[2]+'"':"")+(L?"":' onclick="DP_jQuery_'+B+".datepicker._selectDay('#"+a.id+"',"+r.getMonth()+","+r.getFullYear()+', this);return false;"')+">"+(F&&!D?"&#xa0;":L?'<span class="ui-state-default">'+
+r.getDate()+"</span>":'<a class="ui-state-default'+(r.getTime()==b.getTime()?" ui-state-highlight":"")+(r.getTime()==u.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+'" href="#">'+r.getDate()+"</a>")+"</td>";r.setDate(r.getDate()+1);r=this._daylightSavingAdjust(r)}y+=R+"</tr>"}g++;if(g>11){g=0;m++}y+="</tbody></table>"+(l?"</div>"+(i[0]>0&&G==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
+"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='<div class="ui-datepicker-title">',o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+B+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" >";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&
+(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&l)?"&#xa0;":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var s=(new Date).getFullYear();i=function(q){q=q.match(/c[+-].*/)?c+parseInt(q.substring(1),10):q.match(/[+-].*/)?s+parseInt(q,10):parseInt(q,10);return isNaN(q)?s:q};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,
+e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+B+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" >";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?"&#xa0;":"")+o;k+="</div>";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+
+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input?
+a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c,
+e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,
+"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this;
+if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a==
+"string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.16";window["DP_jQuery_"+B]=d})(jQuery);
+;/*
+ * jQuery UI Progressbar 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
+this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
+this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.16"})})(jQuery);
+;/*
+ * jQuery UI Effects 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/
+ */
+jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
+16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
+a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
+a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
+"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
+0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
+211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,
+d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easing:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})};
+f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,
+[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.16",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b=
+0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),
+d=document.activeElement;c.wrap(b);if(c[0]===d||f.contains(c[0],d))f(d).focus();b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(e,g){a[g]=c.css(g);if(isNaN(parseInt(a[g],10)))a[g]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){var a,b=document.activeElement;
+if(c.parent().is(".ui-effects-wrapper")){a=c.parent().replaceWith(c);if(c[0]===b||f.contains(c[0],b))f(b).focus();return a}return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});
+return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,
+arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/
+2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,
+d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,
+a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,
+d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=
+0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;
+if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,
+a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
+;/*
+ * jQuery UI Effects Blind 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Blind
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","bottom","left","right"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a,
+g);b.effects.removeWrapper(a);c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery);
+;/*
+ * jQuery UI Effects Bounce 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Bounce
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","bottom","left","right"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/
+3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a);
+b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery);
+;/*
+ * jQuery UI Effects Clip 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Clip
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","bottom","left","right","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position,
+c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Drop 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Drop
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e==
+"show"?1:0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Explode 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Explode
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f=
+0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
+e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
+;/*
+ * jQuery UI Effects Fade 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Fade
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Fold 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Fold
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],
+10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
+;/*
+ * jQuery UI Effects Highlight 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Highlight
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
+this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Pulsate 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Pulsate
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration,
+a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery);
+;/*
+ * jQuery UI Effects Scale 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Scale
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a,
+b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity=
+1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],g=["position","top","bottom","left","right","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
+p=c.effects.setMode(a,b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}};
+if(m=="box"||m=="both"){if(d.from.y!=d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a);
+a.css("overflow","hidden").css(a.from);if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from);
+child.to=c.effects.setTransition(child,f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a,
+n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Shake 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Shake
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","bottom","left","right"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]=
+(h=="pos"?"-=":"+=")+e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery);
+;/*
+ * jQuery UI Effects Slide 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Slide
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right"],f=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var g=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var e=d.options.distance||(g=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(f=="show")a.css(g,b=="pos"?isNaN(e)?"-"+e:-e:e);
+var i={};i[g]=(f=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+e;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){f=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Transfer 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Transfer
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments);
+b.dequeue()})})}})(jQuery);
+; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery.effects.blind.js b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery.effects.blind.js
new file mode 100644
index 00000000..d75b4f3c
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery.effects.blind.js
@@ -0,0 +1,80 @@
+/*
+ * jQuery UI Effects Blind 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Blind
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function( $, undefined ) {
+
+var rvertical = /up|down|vertical/,
+ rpositivemotion = /up|left|vertical|horizontal/;
+
+$.effects.effect.blind = function( o, done ) {
+ // Create element
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ direction = o.direction || "up",
+ vertical = rvertical.test( direction ),
+ ref = vertical ? "height" : "width",
+ ref2 = vertical ? "top" : "left",
+ motion = rpositivemotion.test( direction ),
+ animation = {},
+ show = mode === "show",
+ wrapper, distance, top;
+
+ // if already wrapped, the wrapper's properties are my property. #6245
+ if ( el.parent().is( ".ui-effects-wrapper" ) ) {
+ $.effects.save( el.parent(), props );
+ } else {
+ $.effects.save( el, props );
+ }
+ el.show();
+ top = parseInt(el.css('top'), 10);
+ wrapper = $.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+
+ distance = vertical ? wrapper[ ref ]() + top : wrapper[ ref ]();
+
+ animation[ ref ] = show ? distance : 0;
+ if ( !motion ) {
+ el
+ .css( vertical ? "bottom" : "right", 0 )
+ .css( vertical ? "top" : "left", "" )
+ .css({ position: "absolute" });
+ animation[ ref2 ] = show ? 0 : distance;
+ }
+
+ // start at 0 if we are showing
+ if ( show ) {
+ wrapper.css( ref, 0 );
+ if ( ! motion ) {
+ wrapper.css( ref2, distance );
+ }
+ }
+
+ // Animate
+ wrapper.animate( animation, {
+ duration: o.duration,
+ easing: o.easing,
+ queue: false,
+ complete: function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+
+};
+
+})(jQuery);
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery.effects.blind.min.js b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery.effects.blind.min.js
new file mode 100644
index 00000000..101c15d4
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery.effects.blind.min.js
@@ -0,0 +1,14 @@
+/*
+ * jQuery UI Effects Blind 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Blind
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(b){var n=/up|down|vertical/,o=/up|left|vertical|horizontal/;b.effects.effect.blind=function(g,p){var a=b(this),i=["position","top","bottom","left","right","height","width"],l=b.effects.setMode(a,g.mode||"hide"),e=g.direction||"up",f=n.test(e),h=f?"height":"width",m=f?"top":"left";e=o.test(e);var j={},k=l==="show",c,d;a.parent().is(".ui-effects-wrapper")?b.effects.save(a.parent(),i):b.effects.save(a,i);a.show();d=parseInt(a.css("top"),10);c=b.effects.createWrapper(a).css({overflow:"hidden"});
+d=f?c[h]()+d:c[h]();j[h]=k?d:0;if(!e){a.css(f?"bottom":"right",0).css(f?"top":"left","").css({position:"absolute"});j[m]=k?0:d}if(k){c.css(h,0);e||c.css(m,d)}c.animate(j,{duration:g.duration,easing:g.easing,queue:false,complete:function(){l==="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);p()}})}})(jQuery);
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery.effects.core.js b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery.effects.core.js
new file mode 100644
index 00000000..ab9349a8
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery.effects.core.js
@@ -0,0 +1,890 @@
+/*
+ * jQuery UI Effects 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/
+ */
+;jQuery.effects || (function($, undefined) {
+
+var backCompat = $.uiBackCompat !== false;
+
+$.effects = {
+ effect: {}
+};
+
+/******************************************************************************/
+/****************************** COLOR ANIMATIONS ******************************/
+/******************************************************************************/
+
+// override the animation for color styles
+$.each(["backgroundColor", "borderBottomColor", "borderLeftColor",
+ "borderRightColor", "borderTopColor", "borderColor", "color", "outlineColor"],
+function(i, attr) {
+ $.fx.step[attr] = function(fx) {
+ if (!fx.colorInit) {
+ fx.start = getColor(fx.elem, attr);
+ fx.end = getRGB(fx.end);
+ fx.colorInit = true;
+ }
+
+ fx.elem.style[attr] = "rgb(" +
+ Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + "," +
+ Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + "," +
+ Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ")";
+ };
+});
+
+// Color Conversion functions from highlightFade
+// By Blair Mitchelmore
+// http://jquery.offput.ca/highlightFade/
+
+// Parse strings looking for color tuples [255,255,255]
+function getRGB(color) {
+ var result;
+
+ // Check if we're already dealing with an array of colors
+ if ( color && color.constructor === Array && color.length === 3 )
+ return color;
+
+ // Look for rgb(num,num,num)
+ if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
+ return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)];
+
+ // Look for rgb(num%,num%,num%)
+ if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
+ return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];
+
+ // Look for #a0b1c2
+ if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
+ return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];
+
+ // Look for #fff
+ if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
+ return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];
+
+ // Look for rgba(0, 0, 0, 0) == transparent in Safari 3
+ if (result = /rgba\(0, 0, 0, 0\)/.exec(color))
+ return colors["transparent"];
+
+ // Otherwise, we're most likely dealing with a named color
+ return colors[$.trim(color).toLowerCase()];
+}
+
+function getColor(elem, attr) {
+ var color;
+
+ do {
+ color = $.curCSS(elem, attr);
+
+ // Keep going until we find an element that has color, or we hit the body
+ if ( color != "" && color !== "transparent" || $.nodeName(elem, "body") )
+ break;
+
+ attr = "backgroundColor";
+ } while ( elem = elem.parentNode );
+
+ return getRGB(color);
+};
+
+// Some named colors to work with
+// From Interface by Stefan Petre
+// http://interface.eyecon.ro/
+
+var colors = {
+ aqua:[0,255,255],
+ azure:[240,255,255],
+ beige:[245,245,220],
+ black:[0,0,0],
+ blue:[0,0,255],
+ brown:[165,42,42],
+ cyan:[0,255,255],
+ darkblue:[0,0,139],
+ darkcyan:[0,139,139],
+ darkgrey:[169,169,169],
+ darkgreen:[0,100,0],
+ darkkhaki:[189,183,107],
+ darkmagenta:[139,0,139],
+ darkolivegreen:[85,107,47],
+ darkorange:[255,140,0],
+ darkorchid:[153,50,204],
+ darkred:[139,0,0],
+ darksalmon:[233,150,122],
+ darkviolet:[148,0,211],
+ fuchsia:[255,0,255],
+ gold:[255,215,0],
+ green:[0,128,0],
+ indigo:[75,0,130],
+ khaki:[240,230,140],
+ lightblue:[173,216,230],
+ lightcyan:[224,255,255],
+ lightgreen:[144,238,144],
+ lightgrey:[211,211,211],
+ lightpink:[255,182,193],
+ lightyellow:[255,255,224],
+ lime:[0,255,0],
+ magenta:[255,0,255],
+ maroon:[128,0,0],
+ navy:[0,0,128],
+ olive:[128,128,0],
+ orange:[255,165,0],
+ pink:[255,192,203],
+ purple:[128,0,128],
+ violet:[128,0,128],
+ red:[255,0,0],
+ silver:[192,192,192],
+ white:[255,255,255],
+ yellow:[255,255,0],
+ transparent: [255,255,255]
+};
+
+
+
+/******************************************************************************/
+/****************************** CLASS ANIMATIONS ******************************/
+/******************************************************************************/
+
+var classAnimationActions = [ "add", "remove", "toggle" ],
+ shorthandStyles = {
+ border: 1,
+ borderBottom: 1,
+ borderColor: 1,
+ borderLeft: 1,
+ borderRight: 1,
+ borderTop: 1,
+ borderWidth: 1,
+ margin: 1,
+ padding: 1
+ },
+ // prefix used for storing data on .data()
+ dataSpace = "ec.storage.";
+
+$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
+ $.fx.step[ prop ] = function( fx ) {
+ if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
+ jQuery.style( fx.elem, prop, fx.end );
+ fx.setAttr = true;
+ }
+ };
+});
+
+function getElementStyles() {
+ var style = this.ownerDocument.defaultView
+ ? this.ownerDocument.defaultView.getComputedStyle( this, null )
+ : this.currentStyle,
+ newStyle = {},
+ key,
+ camelCase,
+ len;
+
+ // webkit enumerates style porperties
+ if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
+ len = style.length;
+ while ( len-- ) {
+ key = style[ len ];
+ if ( typeof style[ key ] === "string" ) {
+ newStyle[ $.camelCase( key ) ] = style[ key ];
+ }
+ }
+ } else {
+ for ( key in style ) {
+ if ( typeof style[ key ] === "string" ) {
+ newStyle[ key ] = style[ key ];
+ }
+ }
+ }
+
+ return newStyle;
+}
+
+
+function styleDifference( oldStyle, newStyle ) {
+ var diff = {},
+ name, value;
+
+ for ( name in newStyle ) {
+ value = newStyle[ name ];
+ if ( oldStyle[ name ] != value ) {
+ if ( !shorthandStyles[ name ] ) {
+ if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
+ diff[ name ] = value;
+ }
+ }
+ }
+ }
+
+ return diff;
+}
+
+$.effects.animateClass = function( value, duration, easing, callback ) {
+ var o = $.speed( duration, easing, callback );
+
+ return this.queue( function() {
+ var animated = $( this ),
+ baseClass = animated.attr( "class" ) || "",
+ finalClass,
+ allAnimations = o.children ? animated.find( "*" ).andSelf() : animated;
+
+ // map the animated objects to store the original styles.
+ allAnimations = allAnimations.map(function() {
+ var el = $( this );
+ return {
+ el: el,
+ originalStyleAttr: el.attr( "style" ) || " ",
+ start: getElementStyles.call( this )
+ };
+ });
+
+ // apply class change
+ $.each( classAnimationActions, function(i, action) {
+ if ( value[ action ] ) {
+ animated[ action + "Class" ]( value[ action ] );
+ }
+ });
+ finalClass = animated.attr( "class" );
+
+ // map all animated objects again - calculate new styles and diff
+ allAnimations = allAnimations.map(function() {
+ this.end = getElementStyles.call( this.el[ 0 ] );
+ this.diff = styleDifference( this.start, this.end );
+ return this;
+ });
+
+ // apply original class
+ animated.attr( "class", baseClass );
+
+ // map all animated objects again - this time collecting a promise
+ allAnimations = allAnimations.map(function() {
+ var styleInfo = this,
+ dfd = $.Deferred();
+
+ this.el.animate( this.diff, {
+ duration: o.duration,
+ easing: o.easing,
+ queue: false,
+ complete: function() {
+ dfd.resolve( styleInfo );
+ }
+ });
+ return dfd.promise();
+ });
+
+ // once all animations have completed:
+ $.when.apply( $, allAnimations.get() ).done(function() {
+
+ // set the final class
+ animated.attr( "class", finalClass );
+
+ // for each animated element
+ $.each( arguments, function() {
+ if ( typeof this.el.attr( "style" ) === "object" ) {
+ this.el.attr( "style" ).cssText = "";
+ this.el.attr( "style" ).cssText = this.originalStyleAttr;
+ } else {
+ this.el.attr( "style", this.originalStyleAttr );
+ }
+ });
+
+ // this is guarnteed to be there if you use jQuery.speed()
+ // it also handles dequeuing the next anim...
+ o.complete.call( animated[ 0 ] );
+ });
+ });
+};
+
+$.fn.extend({
+ _addClass: $.fn.addClass,
+ addClass: function( classNames, speed, easing, callback ) {
+ return speed ?
+ $.effects.animateClass.apply( this, [{ add: classNames }, speed, easing, callback ]) :
+ this._addClass(classNames);
+ },
+
+ _removeClass: $.fn.removeClass,
+ removeClass: function( classNames, speed, easing, callback ) {
+ return speed ?
+ $.effects.animateClass.apply( this, [{ remove: classNames }, speed, easing, callback ]) :
+ this._removeClass(classNames);
+ },
+
+ _toggleClass: $.fn.toggleClass,
+ toggleClass: function( classNames, force, speed, easing, callback ) {
+ if ( typeof force === "boolean" || force === undefined ) {
+ if ( !speed ) {
+ // without speed parameter;
+ return this._toggleClass( classNames, force );
+ } else {
+ return $.effects.animateClass.apply( this, [( force ? { add:classNames } : { remove:classNames }), speed, easing, callback ]);
+ }
+ } else {
+ // without force parameter;
+ return $.effects.animateClass.apply( this, [{ toggle: classNames }, force, speed, easing ]);
+ }
+ },
+
+ switchClass: function( remove, add, speed, easing, callback) {
+ return $.effects.animateClass.apply( this, [{
+ add: add,
+ remove: remove
+ }, speed, easing, callback ]);
+ }
+});
+
+
+
+/******************************************************************************/
+/*********************************** EFFECTS **********************************/
+/******************************************************************************/
+
+$.extend( $.effects, {
+ version: "1.9pre",
+
+ // Saves a set of properties in a data storage
+ save: function( element, set ) {
+ for( var i=0; i < set.length; i++ ) {
+ if ( set[ i ] !== null ) {
+ element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
+ }
+ }
+ },
+
+ // Restores a set of previously saved properties from a data storage
+ restore: function( element, set ) {
+ for( var i=0; i < set.length; i++ ) {
+ if ( set[ i ] !== null ) {
+ element.css( set[ i ], element.data( dataSpace + set[ i ] ) );
+ }
+ }
+ },
+
+ setMode: function( el, mode ) {
+ if (mode === "toggle") {
+ mode = el.is( ":hidden" ) ? "show" : "hide";
+ }
+ return mode;
+ },
+
+ // Translates a [top,left] array into a baseline value
+ // this should be a little more flexible in the future to handle a string & hash
+ getBaseline: function( origin, original ) {
+ var y, x;
+ switch ( origin[ 0 ] ) {
+ case "top": y = 0; break;
+ case "middle": y = 0.5; break;
+ case "bottom": y = 1; break;
+ default: y = origin[ 0 ] / original.height;
+ };
+ switch ( origin[ 1 ] ) {
+ case "left": x = 0; break;
+ case "center": x = 0.5; break;
+ case "right": x = 1; break;
+ default: x = origin[ 1 ] / original.width;
+ };
+ return {
+ x: x,
+ y: y
+ };
+ },
+
+ // Wraps the element around a wrapper that copies position properties
+ createWrapper: function( element ) {
+
+ // if the element is already wrapped, return it
+ if ( element.parent().is( ".ui-effects-wrapper" )) {
+ return element.parent();
+ }
+
+ // wrap the element
+ var props = {
+ width: element.outerWidth(true),
+ height: element.outerHeight(true),
+ "float": element.css( "float" )
+ },
+ wrapper = $( "<div></div>" )
+ .addClass( "ui-effects-wrapper" )
+ .css({
+ fontSize: "100%",
+ background: "transparent",
+ border: "none",
+ margin: 0,
+ padding: 0
+ }),
+ // Store the size in case width/height are defined in % - Fixes #5245
+ size = {
+ width: element.width(),
+ height: element.height()
+ },
+ active = document.activeElement;
+
+ element.wrap( wrapper );
+
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+ $( active ).focus();
+ }
+
+ wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element
+
+ // transfer positioning properties to the wrapper
+ if ( element.css( "position" ) === "static" ) {
+ wrapper.css({ position: "relative" });
+ element.css({ position: "relative" });
+ } else {
+ $.extend( props, {
+ position: element.css( "position" ),
+ zIndex: element.css( "z-index" )
+ });
+ $.each([ "top", "left", "bottom", "right" ], function(i, pos) {
+ props[ pos ] = element.css( pos );
+ if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
+ props[ pos ] = "auto";
+ }
+ });
+ element.css({
+ position: "relative",
+ top: 0,
+ left: 0,
+ right: "auto",
+ bottom: "auto"
+ });
+ }
+ element.css(size);
+
+ return wrapper.css( props ).show();
+ },
+
+ removeWrapper: function( element ) {
+ var active = document.activeElement;
+
+ if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+ element.parent().replaceWith( element );
+
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+ $( active ).focus();
+ }
+ }
+
+
+ return element;
+ },
+
+ setTransition: function( element, list, factor, value ) {
+ value = value || {};
+ $.each( list, function(i, x){
+ var unit = element.cssUnit( x );
+ if ( unit[ 0 ] > 0 ) value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
+ });
+ return value;
+ }
+});
+
+// return an effect options object for the given parameters:
+function _normalizeArguments( effect, options, speed, callback ) {
+
+ // short path for passing an effect options object:
+ if ( $.isPlainObject( effect ) ) {
+ return effect;
+ }
+
+ // convert to an object
+ effect = { effect: effect };
+
+ // catch (effect)
+ if ( options === undefined ) {
+ options = {};
+ }
+
+ // catch (effect, callback)
+ if ( $.isFunction( options ) ) {
+ callback = options;
+ speed = null;
+ options = {};
+ }
+
+ // catch (effect, speed, ?)
+ if ( $.type( options ) === "number" || $.fx.speeds[ options ]) {
+ callback = speed;
+ speed = options;
+ options = {};
+ }
+
+ // catch (effect, options, callback)
+ if ( $.isFunction( speed ) ) {
+ callback = speed;
+ speed = null;
+ }
+
+ // add options to effect
+ if ( options ) {
+ $.extend( effect, options );
+ }
+
+ speed = speed || options.duration;
+ effect.duration = $.fx.off ? 0 : typeof speed === "number"
+ ? speed : speed in $.fx.speeds ? $.fx.speeds[ speed ] : $.fx.speeds._default;
+
+ effect.complete = callback || options.complete;
+
+ return effect;
+}
+
+function standardSpeed( speed ) {
+ // valid standard speeds
+ if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) {
+ return true;
+ }
+
+ // invalid strings - treat as "normal" speed
+ if ( typeof speed === "string" && !$.effects.effect[ speed ] ) {
+ // TODO: remove in 2.0 (#7115)
+ if ( backCompat && $.effects[ speed ] ) {
+ return false;
+ }
+ return true;
+ }
+
+ return false;
+}
+
+$.fn.extend({
+ effect: function( effect, options, speed, callback ) {
+ var args = _normalizeArguments.apply( this, arguments ),
+ mode = args.mode,
+ queue = args.queue,
+ effectMethod = $.effects.effect[ args.effect ],
+
+ // DEPRECATED: remove in 2.0 (#7115)
+ oldEffectMethod = !effectMethod && backCompat && $.effects[ args.effect ];
+
+ if ( $.fx.off || !( effectMethod || oldEffectMethod ) ) {
+ // delegate to the original method (e.g., .show()) if possible
+ if ( mode ) {
+ return this[ mode ]( args.duration, args.complete );
+ } else {
+ return this.each( function() {
+ if ( args.complete ) {
+ args.complete.call( this );
+ }
+ });
+ }
+ }
+
+ function run( next ) {
+ var elem = $( this ),
+ complete = args.complete,
+ mode = args.mode;
+
+ function done() {
+ if ( $.isFunction( complete ) ) {
+ complete.call( elem[0] );
+ }
+ if ( $.isFunction( next ) ) {
+ next();
+ }
+ }
+
+ // if the element is hiddden and mode is hide,
+ // or element is visible and mode is show
+ if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+ done();
+ } else {
+ effectMethod.call( elem[0], args, done );
+ }
+ }
+
+ // TODO: remove this check in 2.0, effectMethod will always be true
+ if ( effectMethod ) {
+ return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
+ } else {
+ // DEPRECATED: remove in 2.0 (#7115)
+ return oldEffectMethod.call(this, {
+ options: args,
+ duration: args.duration,
+ callback: args.complete,
+ mode: args.mode
+ });
+ }
+ },
+
+ _show: $.fn.show,
+ show: function( speed ) {
+ if ( standardSpeed( speed ) ) {
+ return this._show.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "show";
+ return this.effect.call( this, args );
+ }
+ },
+
+ _hide: $.fn.hide,
+ hide: function( speed ) {
+ if ( standardSpeed( speed ) ) {
+ return this._hide.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "hide";
+ return this.effect.call( this, args );
+ }
+ },
+
+ // jQuery core overloads toggle and creates _toggle
+ __toggle: $.fn.toggle,
+ toggle: function( speed ) {
+ if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) {
+ return this.__toggle.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "toggle";
+ return this.effect.call( this, args );
+ }
+ },
+
+ // helper functions
+ cssUnit: function(key) {
+ var style = this.css( key ),
+ val = [];
+
+ $.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
+ if ( style.indexOf( unit ) > 0 )
+ val = [ parseFloat( style ), unit ];
+ });
+ return val;
+ }
+});
+
+
+
+/******************************************************************************/
+/*********************************** EASING ***********************************/
+/******************************************************************************/
+
+/*
+ * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
+ *
+ * Uses the built in easing capabilities added In jQuery 1.1
+ * to offer multiple easing options
+ *
+ * TERMS OF USE - jQuery Easing
+ *
+ * Open source under the BSD License.
+ *
+ * Copyright 2008 George McGinley Smith
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * Neither the name of the author nor the names of contributors may be used to endorse
+ * or promote products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+*/
+
+// t: current time, b: begInnIng value, c: change In value, d: duration
+$.easing.jswing = $.easing.swing;
+
+$.extend( $.easing, {
+ def: "easeOutQuad",
+ swing: function ( x, t, b, c, d ) {
+ return $.easing[ $.easing.def ]( x, t, b, c, d );
+ },
+ easeInQuad: function ( x, t, b, c, d ) {
+ return c * ( t /= d ) * t + b;
+ },
+ easeOutQuad: function ( x, t, b, c, d ) {
+ return -c * ( t /= d ) * ( t - 2 ) + b;
+ },
+ easeInOutQuad: function ( x, t, b, c, d ) {
+ if ( ( t /= d / 2 ) < 1 ) return c / 2 * t * t + b;
+ return -c / 2 * ( ( --t ) * ( t-2 ) - 1) + b;
+ },
+ easeInCubic: function ( x, t, b, c, d ) {
+ return c * ( t /= d ) * t * t + b;
+ },
+ easeOutCubic: function ( x, t, b, c, d ) {
+ return c * ( ( t = t / d - 1 ) * t * t + 1 ) + b;
+ },
+ easeInOutCubic: function ( x, t, b, c, d ) {
+ if ( ( t /= d / 2 ) < 1 ) return c / 2 * t * t * t + b;
+ return c / 2 * ( ( t -= 2 ) * t * t + 2) + b;
+ },
+ easeInQuart: function ( x, t, b, c, d ) {
+ return c * ( t /= d ) * t * t * t + b;
+ },
+ easeOutQuart: function ( x, t, b, c, d ) {
+ return -c * ( ( t = t / d - 1 ) * t * t * t - 1) + b;
+ },
+ easeInOutQuart: function ( x, t, b, c, d ) {
+ if ( (t /= d / 2 ) < 1 ) return c / 2 * t * t * t * t + b;
+ return -c / 2 * ( ( t -= 2 ) * t * t * t - 2) + b;
+ },
+ easeInQuint: function ( x, t, b, c, d ) {
+ return c * ( t /= d ) * t * t * t * t + b;
+ },
+ easeOutQuint: function ( x, t, b, c, d ) {
+ return c * ( ( t = t / d - 1 ) * t * t * t * t + 1) + b;
+ },
+ easeInOutQuint: function ( x, t, b, c, d ) {
+ if ( ( t /= d / 2 ) < 1 ) return c / 2 * t * t * t * t * t + b;
+ return c / 2 * ( ( t -= 2 ) * t * t * t * t + 2) + b;
+ },
+ easeInSine: function ( x, t, b, c, d ) {
+ return -c * Math.cos( t / d * ( Math.PI / 2 ) ) + c + b;
+ },
+ easeOutSine: function ( x, t, b, c, d ) {
+ return c * Math.sin( t / d * ( Math.PI /2 ) ) + b;
+ },
+ easeInOutSine: function ( x, t, b, c, d ) {
+ return -c / 2 * ( Math.cos( Math.PI * t / d ) - 1 ) + b;
+ },
+ easeInExpo: function ( x, t, b, c, d ) {
+ return ( t==0 ) ? b : c * Math.pow( 2, 10 * ( t / d - 1) ) + b;
+ },
+ easeOutExpo: function ( x, t, b, c, d ) {
+ return ( t==d ) ? b + c : c * ( -Math.pow( 2, -10 * t / d) + 1) + b;
+ },
+ easeInOutExpo: function ( x, t, b, c, d ) {
+ if ( t==0 ) return b;
+ if ( t==d ) return b + c;
+ if ( ( t /= d / 2) < 1) return c / 2 * Math.pow( 2, 10 * (t - 1) ) + b;
+ return c / 2 * ( -Math.pow( 2, -10 * --t ) + 2 ) + b;
+ },
+ easeInCirc: function ( x, t, b, c, d ) {
+ return -c * ( Math.sqrt( 1 - ( t /= d ) * t ) - 1 ) + b;
+ },
+ easeOutCirc: function ( x, t, b, c, d ) {
+ return c * Math.sqrt( 1 - ( t = t / d - 1 ) * t ) + b;
+ },
+ easeInOutCirc: function ( x, t, b, c, d ) {
+ if ( ( t /= d / 2) < 1 ) return -c / 2 * ( Math.sqrt( 1 - t * t ) - 1 ) + b;
+ return c / 2 * ( Math.sqrt( 1 - ( t -= 2 ) * t ) + 1 ) + b;
+ },
+ easeInElastic: function ( x, t, b, c, d ) {
+ var s = 1.70158,
+ p = d * 0.3,
+ a = c;
+ if ( t == 0 ) return b;
+ if ( ( t /= d ) == 1 ) return b+c;
+ if ( a < Math.abs( c ) ) {
+ a = c;
+ s = p / 4;
+ } else {
+ s = p / ( 2 * Math.PI ) * Math.asin( c / a );
+ }
+ return - ( a * Math.pow( 2, 10 * ( t -= 1 ) ) * Math.sin( ( t * d - s) * ( 2 * Math.PI ) / p ) ) + b;
+ },
+ easeOutElastic: function ( x, t, b, c, d ) {
+ var s = 1.70158,
+ p = d * 0.3,
+ a = c;
+ if ( t == 0 ) return b;
+ if ( ( t /= d ) == 1 ) return b+c;
+ if ( a < Math.abs( c ) ) {
+ a = c;
+ s = p / 4;
+ } else {
+ s = p / ( 2 * Math.PI ) * Math.asin( c / a );
+ }
+ return a * Math.pow( 2, -10 * t ) * Math.sin( ( t * d - s ) * ( 2 * Math.PI ) / p ) + c + b;
+ },
+ easeInOutElastic: function ( x, t, b, c, d ) {
+ var s = 1.70158,
+ p = d * ( 0.3 * 1.5 ),
+ a = c;
+ if ( t == 0 ) return b;
+ if ( ( t /= d / 2 ) == 2 ) return b+c;
+ if ( a < Math.abs( c ) ) {
+ a = c;
+ s = p / 4;
+ } else {
+ s = p / ( 2 * Math.PI ) * Math.asin( c / a );
+ }
+ if ( t < 1 ) return -.5 * ( a * Math.pow( 2, 10 * ( t -= 1 ) ) * Math.sin( ( t * d - s ) * ( 2 * Math.PI ) / p ) ) + b;
+ return a * Math.pow( 2, -10 * ( t -= 1 ) ) * Math.sin( ( t * d - s ) * ( 2 * Math.PI ) / p ) *.5 + c + b;
+ },
+ easeInBack: function ( x, t, b, c, d, s ) {
+ if ( s == undefined ) s = 1.70158;
+ return c * ( t /= d ) * t * ( ( s+1 ) * t - s ) + b;
+ },
+ easeOutBack: function ( x, t, b, c, d, s ) {
+ if ( s == undefined ) s = 1.70158;
+ return c * ( ( t = t / d - 1 ) * t * ( ( s + 1 ) * t + s) + 1) + b;
+ },
+ easeInOutBack: function ( x, t, b, c, d, s ) {
+ if ( s == undefined ) s = 1.70158;
+ if ( ( t /= d / 2 ) < 1 ) return c / 2 * ( t * t * ( ( ( s *= 1.525 ) + 1 ) * t - s ) ) + b;
+ return c / 2 * ( ( t -= 2 ) * t * ( ( ( s *= 1.525 ) + 1 ) * t + s) + 2) + b;
+ },
+ easeInBounce: function ( x, t, b, c, d ) {
+ return c - $.easing.easeOutBounce( x, d - t, 0, c, d ) + b;
+ },
+ easeOutBounce: function ( x, t, b, c, d ) {
+ if ( ( t /= d ) < ( 1 / 2.75 ) ) {
+ return c * ( 7.5625 * t * t ) + b;
+ } else if ( t < ( 2 / 2.75 ) ) {
+ return c * ( 7.5625 * ( t -= ( 1.5 / 2.75 ) ) * t + .75 ) + b;
+ } else if ( t < ( 2.5 / 2.75 ) ) {
+ return c * ( 7.5625 * ( t -= ( 2.25/ 2.75 ) ) * t + .9375 ) + b;
+ } else {
+ return c * ( 7.5625 * ( t -= ( 2.625 / 2.75 ) ) * t + .984375 ) + b;
+ }
+ },
+ easeInOutBounce: function ( x, t, b, c, d ) {
+ if ( t < d / 2 ) return $.easing.easeInBounce( x, t * 2, 0, c, d ) * .5 + b;
+ return $.easing.easeOutBounce( x, t * 2 - d, 0, c, d ) * .5 + c * .5 + b;
+ }
+});
+
+/*
+ *
+ * TERMS OF USE - EASING EQUATIONS
+ *
+ * Open source under the BSD License.
+ *
+ * Copyright 2001 Robert Penner
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * Neither the name of the author nor the names of contributors may be used to endorse
+ * or promote products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+})(jQuery);
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery.effects.core.min.js b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery.effects.core.min.js
new file mode 100644
index 00000000..9e92123a
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/jquery.effects.core.min.js
@@ -0,0 +1,32 @@
+/*
+ * jQuery UI Effects 1.9pre
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/
+ */
+jQuery.effects||function(f,m){function r(c){var a;if(c&&c.constructor===Array&&c.length===3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
+16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return s.transparent;return s[f.trim(c).toLowerCase()]}function t(){var c=this.ownerDocument.defaultView?this.ownerDocument.defaultView.getComputedStyle(this,null):this.currentStyle,a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(d=c.length;d--;){b=c[d];if(typeof c[b]==="string")a[f.camelCase(b)]=c[b]}else for(b in c)if(typeof c[b]===
+"string")a[b]=c[b];return a}function o(c,a,b,d){if(f.isPlainObject(c))return c;c={effect:c};if(a===m)a={};if(f.isFunction(a)){d=a;b=null;a={}}if(f.type(a)==="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a&&f.extend(c,a);b=b||a.duration;c.duration=f.fx.off?0:typeof b==="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;c.complete=d||a.complete;return c}function q(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects.effect[c]){if(u&&
+f.effects[c])return false;return true}return false}var u=f.uiBackCompat!==false;f.effects={effect:{}};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){var d;d=b.elem;var e=a,g;do{g=f.curCSS(d,e);if(g!=""&&g!=="transparent"||f.nodeName(d,"body"))break;e="backgroundColor"}while(d=d.parentNode);d=r(g);b.start=d;b.end=r(b.end);b.colorInit=true}b.elem.style[a]=
+"rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var s={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,
+0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,
+203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},w=["add","remove","toggle"],x={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(c,a){f.fx.step[a]=function(b){if(b.end!=="none"&&!b.setAttr||b.pos===1&&!b.setAttr){jQuery.style(b.elem,a,b.end);b.setAttr=
+true}}});f.effects.animateClass=function(c,a,b,d){var e=f.speed(a,b,d);return this.queue(function(){var g=f(this),h=g.attr("class")||"",n,j=e.children?g.find("*").andSelf():g;j=j.map(function(){var k=f(this);return{el:k,originalStyleAttr:k.attr("style")||" ",start:t.call(this)}});f.each(w,function(k,i){if(c[i])g[i+"Class"](c[i])});n=g.attr("class");j=j.map(function(){this.end=t.call(this.el[0]);var k=this.start,i=this.end,v={},l,p;for(l in i){p=i[l];if(k[l]!=p)if(!x[l])if(f.fx.step[l]||!isNaN(parseFloat(p)))v[l]=
+p}this.diff=v;return this});g.attr("class",h);j=j.map(function(){var k=this,i=f.Deferred();this.el.animate(this.diff,{duration:e.duration,easing:e.easing,queue:false,complete:function(){i.resolve(k)}});return i.promise()});f.when.apply(f,j.get()).done(function(){g.attr("class",n);f.each(arguments,function(){if(typeof this.el.attr("style")==="object"){this.el.attr("style").cssText="";this.el.attr("style").cssText=this.originalStyleAttr}else this.el.attr("style",this.originalStyleAttr)});e.complete.call(g[0])})})};
+f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a==="boolean"||a===m?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,
+[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.9pre",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a==="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b,d;switch(c[0]){case "top":b=
+0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":d=0;break;case "center":d=0.5;break;case "right":d=1;break;default:d=c[1]/a.width}return{x:d,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),
+d={width:c.width(),height:c.height()},e=document.activeElement;c.wrap(b);if(c[0]===e||f.contains(c[0],e))f(e).focus();b=c.parent();if(c.css("position")==="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(g,h){a[h]=c.css(h);if(isNaN(parseInt(a[h],10)))a[h]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}c.css(d);return b.css(a).show()},
+removeWrapper:function(c){var a=document.activeElement;if(c.parent().is(".ui-effects-wrapper")){c.parent().replaceWith(c);if(c[0]===a||f.contains(c[0],a))f(a).focus()}return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){var h=c.cssUnit(g);if(h[0]>0)d[g]=h[0]*b+h[1]});return d}});f.fn.extend({effect:function(){function c(h){function n(){f.isFunction(k)&&k.call(j[0]);f.isFunction(h)&&h()}var j=f(this),k=a.complete,i=a.mode;(j.is(":hidden")?i==="hide":i==="show")?n():e.call(j[0],
+a,n)}var a=o.apply(this,arguments),b=a.mode,d=a.queue,e=f.effects.effect[a.effect],g=!e&&u&&f.effects[a.effect];if(f.fx.off||!(e||g))return b?this[b](a.duration,a.complete):this.each(function(){a.complete&&a.complete.call(this)});return e?d===false?this.each(c):this.queue(d||"fx",c):g.call(this,{options:a,duration:a.duration,callback:a.complete,mode:a.mode})},_show:f.fn.show,show:function(c){if(q(c))return this._show.apply(this,arguments);else{var a=o.apply(this,arguments);a.mode="show";return this.effect.call(this,
+a)}},_hide:f.fn.hide,hide:function(c){if(q(c))return this._hide.apply(this,arguments);else{var a=o.apply(this,arguments);a.mode="hide";return this.effect.call(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(q(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=o.apply(this,arguments);a.mode="toggle";return this.effect.call(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),
+e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,
+b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*
+((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+
+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=e*0.3,h=d;if(a==0)return b;if((a/=e)==1)return b+d;if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*
+e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=e*0.3,h=d;if(a==0)return b;if((a/=e)==1)return b+d;if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=e*0.3*1.5,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*
+Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==m)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==m)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==m)g=1.70158;if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,e-a,0,d,e)+b},easeOutBounce:function(c,a,b,
+d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery.print.js b/wqflask/wqflask/static/packages/jqplot/examples/jquery.print.js
new file mode 100644
index 00000000..0569bd4d
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery.print.js
@@ -0,0 +1,103 @@
+// <--- --------------------------------------------------------------------------------------- ----
+
+// Blog Entry:
+// Ask Ben: Print Part Of A Web Page With jQuery
+
+// Author:
+// Ben Nadel / Kinky Solutions
+
+// Link:
+// http://www.bennadel.com/index.cfm?event=blog.view&id=1591
+
+// Date Posted:
+// May 21, 2009 at 9:10 PM
+
+// ---- --------------------------------------------------------------------------------------- --->
+
+
+// Create a jquery plugin that prints the given element.
+jQuery.fn.print = function(){
+ // NOTE: We are trimming the jQuery collection down to the
+ // first element in the collection.
+ if (this.size() > 1){
+ this.eq( 0 ).print();
+ return;
+ } else if (!this.size()){
+ return;
+ }
+
+ var chart = $(this).closest('div.quintile-outer-container').find('div.jqplot-target');
+ var imgelem = chart.jqplotToImageElem();
+ console.log(imgelem);
+
+ // ASSERT: At this point, we know that the current jQuery
+ // collection (as defined by THIS), contains only one
+ // printable element.
+
+ // Create a random name for the print frame.
+ var strFrameName = ("printer-" + (new Date()).getTime());
+
+ // Create an iFrame with the new name.
+ var jFrame = $( "<iframe name='" + strFrameName + "'>" );
+
+ // Hide the frame (sort of) and attach to the body.
+ jFrame
+ .css( "width", "1px" )
+ .css( "height", "1px" )
+ .css( "position", "absolute" )
+ .css( "left", "-9999px" )
+ .appendTo( $( "body:first" ) )
+ ;
+
+ // Get a FRAMES reference to the new frame.
+ var objFrame = window.frames[ strFrameName ];
+
+ // Get a reference to the DOM in the new frame.
+ var objDoc = objFrame.document;
+
+ // Grab all the style tags and copy to the new
+ // document so that we capture look and feel of
+ // the current document.
+
+ // Create a temp document DIV to hold the style tags.
+ // This is the only way I could find to get the style
+ // tags into IE.
+ var jStyleDiv = $( "<div>" ).append(
+ $( "style" ).clone()
+ );
+
+ // Write the HTML for the document. In this, we will
+ // write out the HTML of the current element.
+ objDoc.open();
+ objDoc.write( "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" );
+ objDoc.write( "<html>" );
+ objDoc.write( "<body>" );
+ objDoc.write( "<head>" );
+ objDoc.write( "<title>" );
+ objDoc.write( document.title );
+ objDoc.write( "</title>" );
+ objDoc.write( jStyleDiv.html() );
+ objDoc.write( "</head>" );
+ if ($.jqplot.use_excanvas) {
+ objDoc.write( this.html() );
+ }
+ else {
+ objDoc.write( '<img src="' + imgelem.src + '">' );
+ }
+ objDoc.write( "</body>" );
+ objDoc.write( "</html>" );
+ objDoc.close();
+
+ // Print the document.
+ objFrame.focus();
+ objFrame.print();
+
+ // Have the frame remove itself in about a minute so that
+ // we don't build up too many of these frames.
+ setTimeout(
+ function(){
+ jFrame.remove();
+ },
+ (60 * 1000)
+ );
+} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jquery.printElement.min.js b/wqflask/wqflask/static/packages/jqplot/examples/jquery.printElement.min.js
new file mode 100644
index 00000000..27c8d8d2
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jquery.printElement.min.js
@@ -0,0 +1,28 @@
+/// <reference path="http://code.jquery.com/jquery-1.4.1-vsdoc.js" />
+/*
+* Print Element Plugin 1.2
+*
+* Copyright (c) 2010 Erik Zaadi
+*
+* Inspired by PrintArea (http://plugins.jquery.com/project/PrintArea) and
+* http://stackoverflow.com/questions/472951/how-do-i-print-an-iframe-from-javascript-in-safari-chrome
+*
+* Home Page : http://projects.erikzaadi/jQueryPlugins/jQuery.printElement
+* Issues (bug reporting) : http://github.com/erikzaadi/jQueryPlugins/issues/labels/printElement
+* jQuery plugin page : http://plugins.jquery.com/project/printElement
+*
+* Thanks to David B (http://github.com/ungenio) and icgJohn (http://www.blogger.com/profile/11881116857076484100)
+* For their great contributions!
+*
+* Dual licensed under the MIT and GPL licenses:
+* http://www.opensource.org/licenses/mit-license.php
+* http://www.gnu.org/licenses/gpl.html
+*
+* Note, Iframe Printing is not supported in Opera and Chrome 3.0, a popup window will be shown instead
+*/
+;(function(g){function k(c){c&&c.printPage?c.printPage():setTimeout(function(){k(c)},50)}function l(c){c=a(c);a(":checked",c).each(function(){this.setAttribute("checked","checked")});a("input[type='text']",c).each(function(){this.setAttribute("value",a(this).val())});a("select",c).each(function(){var b=a(this);a("option",b).each(function(){b.val()==a(this).val()&&this.setAttribute("selected","selected")})});a("textarea",c).each(function(){var b=a(this).attr("value");if(a.browser.b&&this.firstChild)this.firstChild.textContent=
+b;else this.innerHTML=b});return a("<div></div>").append(c.clone()).html()}function m(c,b){var i=a(c);c=l(c);var d=[];d.push("<html><head><title>"+b.pageTitle+"</title>");if(b.overrideElementCSS){if(b.overrideElementCSS.length>0)for(var f=0;f<b.overrideElementCSS.length;f++){var e=b.overrideElementCSS[f];typeof e=="string"?d.push('<link type="text/css" rel="stylesheet" href="'+e+'" >'):d.push('<link type="text/css" rel="stylesheet" href="'+e.href+'" media="'+e.media+'" >')}}else a("link",j).filter(function(){return a(this).attr("rel").toLowerCase()==
+"stylesheet"}).each(function(){d.push('<link type="text/css" rel="stylesheet" href="'+a(this).attr("href")+'" media="'+a(this).attr("media")+'" >')});d.push('<base href="'+(g.location.protocol+"//"+g.location.hostname+(g.location.port?":"+g.location.port:"")+g.location.pathname)+'" />');d.push('</head><body style="'+b.printBodyOptions.styleToAdd+'" class="'+b.printBodyOptions.classNameToAdd+'">');d.push('<div class="'+i.attr("class")+'">'+c+"</div>");d.push('<script type="text/javascript">function printPage(){focus();print();'+
+(!a.browser.opera&&!b.leaveOpen&&b.printMode.toLowerCase()=="popup"?"close();":"")+"}<\/script>");d.push("</body></html>");return d.join("")}var j=g.document,a=g.jQuery;a.fn.printElement=function(c){var b=a.extend({},a.fn.printElement.defaults,c);if(b.printMode=="iframe")if(a.browser.opera||/chrome/.test(navigator.userAgent.toLowerCase()))b.printMode="popup";a("[id^='printElement_']").remove();return this.each(function(){var i=a.a?a.extend({},b,a(this).data()):b,d=a(this);d=m(d,i);var f=null,e=null;
+if(i.printMode.toLowerCase()=="popup"){f=g.open("about:blank","printElementWindow","width=650,height=440,scrollbars=yes");e=f.document}else{f="printElement_"+Math.round(Math.random()*99999).toString();var h=j.createElement("IFRAME");a(h).attr({style:i.iframeElementOptions.styleToAdd,id:f,className:i.iframeElementOptions.classNameToAdd,frameBorder:0,scrolling:"no",src:"about:blank"});j.body.appendChild(h);e=h.contentWindow||h.contentDocument;if(e.document)e=e.document;h=j.frames?j.frames[f]:j.getElementById(f);
+f=h.contentWindow||h}focus();e.open();e.write(d);e.close();k(f)})};a.fn.printElement.defaults={printMode:"iframe",pageTitle:"",overrideElementCSS:null,printBodyOptions:{styleToAdd:"padding:10px;margin:10px;",classNameToAdd:""},leaveOpen:false,iframeElementOptions:{styleToAdd:"border:none;position:absolute;width:0px;height:0px;bottom:0px;left:0px;",classNameToAdd:""}};a.fn.printElement.cssElement={href:"",media:""}})(window); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/jsondata.txt b/wqflask/wqflask/static/packages/jqplot/examples/jsondata.txt
new file mode 100644
index 00000000..b6a0cffa
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/jsondata.txt
@@ -0,0 +1 @@
+[[1, 3, 2, 4, 6, 9]] \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/kcp.print.js b/wqflask/wqflask/static/packages/jqplot/examples/kcp.print.js
new file mode 100644
index 00000000..0f1d3719
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/kcp.print.js
@@ -0,0 +1,136 @@
+// <--- --------------------------------------------------------------------------------------- ----
+
+// Blog Entry:
+// Ask Ben: Print Part Of A Web Page With jQuery
+
+// Author:
+// Ben Nadel / Kinky Solutions
+
+// Link:
+// http://www.bennadel.com/index.cfm?event=blog.view&id=1591
+
+// Date Posted:
+// May 21, 2009 at 9:10 PM
+
+// ---- --------------------------------------------------------------------------------------- --->
+
+
+// Create a jquery plugin that prints the given element.
+jQuery.fn.print = function(){
+ // NOTE: We are trimming the jQuery collection down to the
+ // first element in the collection.
+ if (this.size() > 1){
+ this.eq( 0 ).print();
+ return;
+ } else if (!this.size()){
+ return;
+ }
+
+ var chart = $(this).closest('div.quintile-outer-container').find('div.jqplot-target');
+ // var imgelem = chart.jqplotToImageElem();
+ var imageElemStr = chart.jqplotToImageElemStr();
+ // var statsrows = $(this).closest('div.quintile-outer-container').find('table.stats-table tr');
+ var statsTable = $('<div></div>').append($(this).closest('div.quintile-outer-container').find('table.stats-table').clone());
+ // var rowstyles = window.getComputedStyle(statsrows.get(0), '');
+
+ // ASSERT: At this point, we know that the current jQuery
+ // collection (as defined by THIS), contains only one
+ // printable element.
+
+ // Create a random name for the print frame.
+ var strFrameName = ("printer-" + (new Date()).getTime());
+
+ // Create an iFrame with the new name.
+ var jFrame = $( "<iframe name='" + strFrameName + "'>" );
+
+ // Hide the frame (sort of) and attach to the body.
+ jFrame
+ .css( "width", "1px" )
+ .css( "height", "1px" )
+ .css( "position", "absolute" )
+ .css( "left", "-9999px" )
+ .appendTo( $( "body:first" ) )
+ ;
+
+ // Get a FRAMES reference to the new frame.
+ var objFrame = window.frames[ strFrameName ];
+
+ // Get a reference to the DOM in the new frame.
+ var objDoc = objFrame.document;
+
+ // Grab all the style tags and copy to the new
+ // document so that we capture look and feel of
+ // the current document.
+
+ // Create a temp document DIV to hold the style tags.
+ // This is the only way I could find to get the style
+ // tags into IE.
+ var jStyleDiv = $( "<div>" ).append(
+ $( "style" ).clone()
+ );
+
+ // Write the HTML for the document. In this, we will
+ // write out the HTML of the current element.
+ objDoc.open();
+ objDoc.write( "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" );
+ objDoc.write( "<html>" );
+ objDoc.write( "<body>" );
+ objDoc.write( "<head>" );
+ objDoc.write( "<title>" );
+ objDoc.write( document.title );
+ objDoc.write( "</title>" );
+ objDoc.write( jStyleDiv.html() );
+ objDoc.write( "</head>" );
+
+ // Typically, would just write out the html.
+ // objDoc.write( this.html() );
+
+ // We need to do specific manipulation for kcp quintiles.
+ objDoc.write( '<div class="quintile-outer-container ui-widget ui-corner-all"> \
+ <div class="quintile-content ui-widget-content ui-corner-bottom"> \
+ <table class="quintile-display"> \
+ <tr> \
+ <td class="chart-cell">');
+
+ objDoc.write(imageElemStr);
+
+ objDoc.write('</td> <td class="stats-cell">');
+
+ objDoc.write(statsTable.html());
+
+ objDoc.write('</td></tr></table></div></div>');
+
+ objDoc.write( "</body>" );
+ objDoc.write( "</html>" );
+ objDoc.close();
+
+ //
+ // When the iframe is completely loaded, print it.
+ // This seemed worked in IE 9, but caused problems in FF.
+ //
+ // $(objFrame).load(function() {
+ // objFrame.focus();
+ // objFrame.print();
+ // });
+
+ //
+ // This works in all supported browsers.
+ // Note, might have to adjust time.
+ //
+ setTimeout(
+ function() {
+ objFrame.focus();
+ objFrame.print();
+ }, 750);
+
+
+ // Have the frame remove itself in about a minute so that
+ // we don't build up too many of these frames.
+ setTimeout(
+ function(){
+ jFrame.empty();
+ jFrame.remove();
+ },
+ (60 * 1000)
+ );
+} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/kcp_area.html b/wqflask/wqflask/static/packages/jqplot/examples/kcp_area.html
new file mode 100644
index 00000000..58a33198
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/kcp_area.html
@@ -0,0 +1,284 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Area Chart</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="index.html">Previous</a> <a href="./">Examples</a> <a href="kcp_area2.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+
+ <link class="include" type="text/css" href="jquery-ui/css/smoothness/jquery-ui.min.css" rel="Stylesheet" />
+
+ <style type="text/css">
+
+ .chart-container {
+ border: 1px solid darkblue;
+ padding: 30px 0px 30px 30px;
+ width: 900px;
+ height: 400px;
+
+ }
+
+ table.jqplot-table-legend {
+ font-size: 0.65em;
+ line-height: 1em;
+ margin: 0px 0px 10px 15px;
+ border-collapse: collapse;
+ }
+
+ td.jqplot-table-legend-label {
+ width: 20em;
+ }
+
+ div.jqplot-table-legend-swatch {
+ border-width: 2px 6px;
+ }
+
+ div.jqplot-table-legend-swatch-outline {
+ border: none;
+ }
+
+ tr.jqplot-table-legend td {
+ padding: 2px;
+ }
+
+ .legend-row-highlighted {
+ background-color: #666666;
+ }
+
+ .legend-text-highlighted {
+ color: #ffffff;
+ }
+
+ #chart1 {
+ width: 96%;
+ height: 96%;
+ }
+
+ .jqplot-datestamp {
+ font-size: 0.8em;
+ color: #777;
+/* margin-top: 1em;
+ text-align: right;*/
+ font-style: italic;
+ position: absolute;
+ bottom: 15px;
+ right: 15px;
+ }
+
+ td.controls li {
+ list-style-type: none;
+ }
+
+ td.controls ul {
+ margin-top: 0.5em;
+ padding-left: 0.2em;
+ }
+
+ pre.code {
+ margin-top: 45px;
+ clear: both;
+ }
+
+ </style>
+
+ <div class="chart-container">
+ <div id="chart1"></div>
+ <div class="jqplot-datestamp"></div>
+ </div>
+
+ <pre class="code brush:js"></pre>
+
+ <script class="code" type="text/javascript">
+$(document).ready(function(){
+
+ ///////////
+ // Function to parse a csv file.
+ // Note, this IS NOT a complete parser. It does not handle quoted text.
+ // It is implemented to demonstrate functionality from within JavaScript.
+ // If a full csv parser is needed, check out:
+ // http://www.bennadel.com/blog/1504-Ask-Ben-Parsing-CSV-Strings-With-Javascript-Exec-Regular-Expression-Command.htm
+ ///////////
+ var parseCSVFile = function(url) {
+ var ret = null;
+ var labels = [];
+ var ticks = [];
+ var values = [];
+ var temp;
+ $.ajax({
+ // have to use synchronous here, else returns before data is fetched
+ async: false,
+ url: url,
+ dataType:'text',
+ success: function(data) {
+ // parse csv data
+ var lines = data.split('\n');
+ var line;
+ for (var i=0, l=lines.length; i<l; i++) {
+ line = lines[i].replace('\r', '').split(',');
+ // console.log(line);
+ if (line.length > 1) {
+ if (i === 0) {
+ ticks = line.slice(1, line.length);
+ for (var n=0, nl=ticks.length; n<nl; n++) {
+ ticks[n] = [n+1, ticks[n]];
+ }
+ }
+ else {
+ labels.push(line[0]);
+ values.push(line.slice(1, line.length));
+ temp = values[values.length-1];
+ // make a copy of temp
+ temp = temp.slice(0, temp.length);
+ for (var n=0, nl=temp.length; n<nl; n++) {
+ values[values.length-1][n] = parseFloat(temp[n]);
+ }
+ }
+ }
+ }
+ ret = [values, labels, ticks];
+ }
+ });
+ return ret;
+ };
+
+ var jsonurl = "./KCPsample4.csv";
+
+ var infos = parseCSVFile(jsonurl);
+
+ // area plots are made with all series except last 2
+ data = infos[0].slice(0, infos[0].length-2);
+ labels = infos[1].slice(0, infos[1].length-2);
+ ticks = infos[2];
+
+ // make the plot
+
+ plot1 = $.jqplot('chart1', data, {
+ title: 'Area Plot',
+ stackSeries: true,
+ seriesDefaults: {
+ showMarker: false,
+ fill: true,
+ fillAndStroke: true
+ },
+ legend: {
+ show: true,
+ placement: 'outsideGrid',
+ labels: labels,
+ location: 'ne',
+ rowSpacing: '0px'
+ },
+ axesDefaults: {
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer
+ },
+ axes: {
+ xaxis: {
+ pad: 0,
+ ticks: ticks,
+ label: 'Population Vingtile',
+ tickOptions: {
+ showGridline: false
+ }
+ },
+ yaxis: {
+ min: 0,
+ max: 100,
+ label: 'Share of Item in Total Expenditure (%)',
+ tickOptions: {
+ showGridline: false,
+ suffix: '%'
+ }
+ }
+ },
+ grid: {
+ drawBorder: false,
+ shadow: false,
+ // background: 'rgba(0,0,0,0)' works to make transparent.
+ background: 'white'
+ }
+ });
+
+ // add a date at the bottom.
+
+ var d = new $.jsDate();
+ $('div.jqplot-datestamp').html('Generated on '+d.strftime('%v'));
+
+ // make it resizable.
+
+ $("div.chart-container").resizable({delay:20});
+
+ $('div.chart-container').bind('resize', function(event, ui) {
+ plot1.replot();
+ });
+
+ $('#chart1').bind('jqplotDataHighlight', function(ev, seriesIndex, pointIndex, data) {
+ var idx = 21 - seriesIndex
+ $('tr.jqplot-table-legend').removeClass('legend-row-highlighted');
+ $('tr.jqplot-table-legend').children('.jqplot-table-legend-label').removeClass('legend-text-highlighted');
+ $('tr.jqplot-table-legend').eq(idx).addClass('legend-row-highlighted');
+ $('tr.jqplot-table-legend').eq(idx).children('.jqplot-table-legend-label').addClass('legend-text-highlighted');
+ });
+
+ $('#chart1').bind('jqplotDataUnhighlight', function(ev, seriesIndex, pointIndex, data) {
+ $('tr.jqplot-table-legend').removeClass('legend-row-highlighted');
+ $('tr.jqplot-table-legend').children('.jqplot-table-legend-label').removeClass('legend-text-highlighted');
+ });
+});
+
+</script>
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="jquery-ui/js/jquery-ui.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/kcp_area2.html b/wqflask/wqflask/static/packages/jqplot/examples/kcp_area2.html
new file mode 100644
index 00000000..9550b2ca
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/kcp_area2.html
@@ -0,0 +1,217 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Area Chart 2</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="kcp_area.html">Previous</a> <a href="./">Examples</a> <a href="kcp_cdf.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+
+ <link class="include" type="text/css" href="jquery-ui/css/smoothness/jquery-ui.min.css" rel="Stylesheet" />
+
+ <style type="text/css">
+
+ .chart-container {
+ border: 1px solid darkblue;
+ padding: 30px 0px 30px 30px;
+ width: 900px;
+ height: 400px;
+
+ }
+
+ table.jqplot-table-legend {
+ border: 0px;
+ }
+
+ td.jqplot-table-legend-label {
+ padding: 0.25em;
+ }
+
+ td.jqplot-table-legend-label + td.jqplot-table-legend-swatch {
+ padding-left: 1.5em;
+ }
+
+ div.jqplot-table-legend-swatch {
+ border-width: 4px 6px;
+ }
+
+ div.jqplot-table-legend-swatch-outline {
+ border: none;
+ }
+
+ #chart1 {
+ width: 96%;
+ height: 96%;
+ }
+
+ .jqplot-datestamp {
+ font-size: 0.8em;
+ color: #777;
+/* margin-top: 1em;
+ text-align: right;*/
+ font-style: italic;
+ position: absolute;
+ bottom: 15px;
+ right: 15px;
+ }
+
+ td.controls li {
+ list-style-type: none;
+ }
+
+ td.controls ul {
+ margin-top: 0.5em;
+ padding-left: 0.2em;
+ }
+
+ pre.code {
+ margin-top: 45px;
+ clear: both;
+ }
+
+ </style>
+
+ <div class="chart-container">
+ <div id="chart1"></div>
+ <div class="jqplot-datestamp"></div>
+ </div>
+
+ <pre class="code brush:js"></pre>
+
+ <script class="code" type="text/javascript">
+$(document).ready(function(){
+
+ var labels = ['Rural', 'Urban'];
+
+ // make the plot
+
+ var makePlot = function (data, textStatus, jqXHR) {
+ plot1 = $.jqplot('chart1', [data.rural, data.urban], {
+ title: 'Contribution of Urban and Rural Population to National Percentiles (edited data)',
+ stackSeries: true,
+ seriesColors: ['#77933C', '#B9CDE5'],
+ seriesDefaults: {
+ showMarker: false,
+ fill: true,
+ fillAndStroke: true
+ },
+ legend: {
+ show: true,
+ renderer: $.jqplot.EnhancedLegendRenderer,
+ rendererOptions: {
+ numberRows: 1
+ },
+ placement: 'outsideGrid',
+ labels: labels,
+ location: 's'
+ },
+ axes: {
+ xaxis: {
+ pad: 0,
+ min: 1,
+ max: 100,
+ label: 'Population Percentile',
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ tickInterval: 3,
+ tickOptions: {
+ showGridline: false
+ }
+ },
+ yaxis: {
+ min: 0,
+ max: 1,
+ label: 'Percentage of Population',
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ tickOptions: {
+ formatter: $.jqplot.PercentTickFormatter,
+ showGridline: false,
+ formatString: '%d%%'
+ }
+ }
+ },
+ grid: {
+ drawBorder: false,
+ shadow: false,
+ // background: 'rgba(0,0,0,0)' works to make transparent.
+ background: 'white'
+ }
+ });
+ };
+
+ // data is in json format in plain file.
+ // Each series is represented by a 1-D array of y values.
+ // X values will be added by jqPlot and will start 1 by default.
+ $.getJSON('kcp_area2.json', '', makePlot);
+
+ // add a date at the bottom.
+
+ var d = new $.jsDate();
+ $('div.jqplot-datestamp').html('Generated on '+d.strftime('%v'));
+
+ // make it resizable.
+
+ $("div.chart-container").resizable({delay:20});
+
+ $('div.chart-container').bind('resize', function(event, ui) {
+ plot1.replot();
+ });
+});
+
+</script>
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.enhancedLegendRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="jquery-ui/js/jquery-ui.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/kcp_area2.json b/wqflask/wqflask/static/packages/jqplot/examples/kcp_area2.json
new file mode 100644
index 00000000..167454a3
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/kcp_area2.json
@@ -0,0 +1,2 @@
+{"rural": [0.9176, 0.9296, 0.927, 0.9251, 0.9241, 0.9225, 0.9197, 0.9164, 0.9131, 0.9098, 0.9064, 0.9028, 0.8991, 0.8957, 0.8925, 0.8896, 0.8869, 0.8844, 0.882, 0.8797, 0.8776, 0.8755, 0.8735, 0.8715, 0.8696, 0.8677, 0.8658, 0.8637, 0.8616, 0.8594, 0.8572, 0.8548, 0.8524, 0.8499, 0.8473, 0.8446, 0.8418, 0.8389, 0.8359, 0.8328, 0.8295, 0.8262, 0.8227, 0.8191, 0.8155, 0.8119, 0.8083, 0.8048, 0.8013, 0.7979, 0.7945, 0.7912, 0.7879, 0.7846, 0.7813, 0.778, 0.7747, 0.7714, 0.768, 0.7647, 0.7612, 0.7577, 0.7538, 0.7496, 0.7449, 0.7398, 0.7342, 0.7279, 0.721, 0.7137, 0.7059, 0.6977, 0.6889, 0.6797, 0.6698, 0.6593, 0.6482, 0.6367, 0.6247, 0.6121, 0.5989, 0.5852, 0.571, 0.5561, 0.5402, 0.5232, 0.505, 0.4855, 0.4643, 0.4414, 0.4166, 0.3893, 0.3577, 0.3204, 0.2764, 0.2272, 0.1774, 0.1231, 0.0855, 0.0849],
+"urban": [0.0824, 0.0704, 0.073, 0.0749, 0.0759, 0.0775, 0.0803, 0.0836, 0.0869, 0.0902, 0.0936, 0.0972, 0.1009, 0.1043, 0.1075, 0.1104, 0.1131, 0.1156, 0.118, 0.1203, 0.1224, 0.1245, 0.1265, 0.1285, 0.1304, 0.1323, 0.1342, 0.1363, 0.1384, 0.1406, 0.1428, 0.1452, 0.1476, 0.1501, 0.1527, 0.1554, 0.1582, 0.1611, 0.1641, 0.1672, 0.1705, 0.1738, 0.1773, 0.1809, 0.1845, 0.1881, 0.1917, 0.1952, 0.1987, 0.2021, 0.2055, 0.2088, 0.2121, 0.2154, 0.2187, 0.222, 0.2253, 0.2286, 0.232, 0.2353, 0.2388, 0.2423, 0.2462, 0.2504, 0.2551, 0.2602, 0.2658, 0.2721, 0.279, 0.2863, 0.2941, 0.3023, 0.3111, 0.3203, 0.3302, 0.3407, 0.3518, 0.3633, 0.3753, 0.3879, 0.4011, 0.4148, 0.429, 0.4439, 0.4598, 0.4768, 0.495, 0.5145, 0.5357, 0.5586, 0.5834, 0.6107, 0.6423, 0.6796, 0.7236, 0.7728, 0.8226, 0.8769, 0.9145, 0.9151]} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/kcp_cdf.html b/wqflask/wqflask/static/packages/jqplot/examples/kcp_cdf.html
new file mode 100644
index 00000000..7fc9c654
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/kcp_cdf.html
@@ -0,0 +1,351 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Cumulative Density Function Chart</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="kcp_area2.html">Previous</a> <a href="./">Examples</a> <a href="kcp_engel.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+
+ <link class="include" type="text/css" href="jquery-ui/css/smoothness/jquery-ui.min.css" rel="Stylesheet" />
+
+ <style type="text/css">
+
+ .chart-container {
+ border: 1px solid darkblue;
+ padding: 30px;
+ width: 500px;
+ height: 400px;
+
+ }
+
+ #chart1 {
+ width: 96%;
+ height: 96%;
+ }
+
+ .jqplot-datestamp {
+ font-size: 0.8em;
+ color: #777;
+/* margin-top: 1em;
+ text-align: right;*/
+ font-style: italic;
+ position: absolute;
+ bottom: 15px;
+ right: 15px;
+ }
+
+ td.controls li {
+ list-style-type: none;
+ }
+
+ td.controls ul {
+ margin-top: 0.5em;
+ padding-left: 0.2em;
+ }
+
+ pre.code {
+ margin-top: 45px;
+ clear: both;
+ }
+
+ </style>
+
+ <table class="app">
+ <td class="controls">
+
+ <div>
+ Data Series:
+ <ul>
+ <li><input name="dataSeries" value="national" type="radio" checked />National</li>
+ <li><input name="dataSeries" value="urban" type="radio" />Urban</li>
+ <li><input name="dataSeries" value="rural" type="radio" />Rural</li>
+ </ul>
+ </div>
+
+ <div>
+ Background Color:
+ <ul>
+ <li><input name="backgroundColor" value="white" type="radio" checked />Default</li>
+ <li><input name="backgroundColor" value="#efefef" type="radio" />Gray</li>
+ </ul>
+ </div>
+
+ <div>
+ Line Width:
+ <ul>
+ <li><input name="lineWidth" value="2.5" type="radio" checked />Thin</li>
+ <li><input name="lineWidth" value="5" type="radio" />Thick</li>
+ </ul>
+ </div>
+
+ <div>
+ Grids:
+ <ul>
+ <li><input name="gridsVertical" value="vertical" type="checkbox" checked />Vertical</li>
+ <li><input name="gridsHorizontal" value="horizontal" type="checkbox" checked />Horizontal</li>
+ </ul>
+ </div>
+
+ <div>
+ Set lines at:
+ <ul>
+ <li><input name="userLine1" value="8250" type="text" size="8" /> and </li>
+ <li><input name="userLine2" value="60000" type="text" size="8" /></li>
+ </ul>
+ </div>
+ </td>
+
+ <td class="chart">
+ <div class="chart-container">
+ <div id="chart1"></div>
+ <div class="jqplot-datestamp"></div>
+ </div>
+ </td>
+
+ </table>
+
+ <pre class="code brush:js"></pre>
+
+ <script class="code" type="text/javascript">
+$(document).ready(function(){
+ var dataSets = {
+ national: [[1521.3938, 0.034259], [1626.3757, 0.036908], [1738.6018, 0.039957], [1858.5719, 0.043623], [1986.8205, 0.048008], [2123.9187, 0.053278], [2270.4772, 0.059665], [2427.1488, 0.067405], [2594.6313, 0.076951], [2773.6707, 0.088909], [2965.0643, 0.103706], [3169.6651, 0.121406], [3388.384, 0.142376], [3622.1955, 0.167456], [3872.1408, 0.198392], [4139.3332, 0.237371], [4424.963, 0.287096], [4730.3023, 0.350664], [5056.7112, 0.43322], [5405.6431, 0.546538], [5778.6531, 0.703419], [6177.4022, 0.921534], [6603.6665, 1.225405], [7059.3446, 1.658248], [7546.4664, 2.286919], [8067.2013, 3.168531], [8623.869, 4.338121], [9218.9488, 5.828025], [9855.0905, 7.674282], [10535.1293, 9.856185], [11262.0934, 12.427952], [12039.2208, 15.374906], [12869.973, 18.559853], [13758.0502, 21.938501], [14707.4081, 25.480211], [15722.2754, 29.195872], [16807.1724, 33.040813], [17966.9296, 36.929108], [19206.7162, 40.883239], [20532.0529, 44.934876], [21948.8429, 48.979949], [23463.3991, 52.874709], [25082.4581, 56.569122], [26813.238, 60.143349], [28663.448, 63.632698], [30641.3597, 67.019887], [32755.7239, 70.272329], [35015.9867, 73.31569], [37432.2159, 76.137996], [40015.1736, 78.734309], [42776.4074, 81.144203], [45728.1335, 83.364771], [48883.5393, 85.40072], [52256.6796, 87.276365], [55862.5786, 88.994984], [59717.3573, 90.547773], [63838.07, 91.930153], [68243.1267, 93.143588], [72952.1481, 94.19365], [77986.109, 95.093093], [83367.4313, 95.863261], [89120.1733, 96.518119], [95269.7861, 97.07861], [101843.7444, 97.555507], [108871.3294, 97.958887], [116383.8431, 98.29631], [124414.8718, 98.57645], [132999.9458, 98.805892], [142177.421, 98.994988], [151988.1749, 99.15183], [162475.9062, 99.279882], [173687.5023, 99.384116], [185672.5653, 99.470272], [198484.6408, 99.541871], [212180.7957, 99.601871], [226822.0345, 99.653556], [242473.814, 99.698334], [259205.3802, 99.737113], [277091.4846, 99.770733], [296211.7947, 99.800151], [316651.475, 99.826487], [338501.5668, 99.85018], [361859.7555, 99.871291], [386829.3815, 99.889939], [413522.0015, 99.906286], [442056.5084, 99.92045], [472559.9991, 99.932702], [505168.8456, 99.9433], [540027.3147, 99.952485], [577291.1437, 99.960528], [617126.311, 99.96755], [659710.2484, 99.9736], [705233.3359, 99.978742], [753896.9752, 99.983126], [805918.5808, 99.986929], [861529.8645, 99.990275], [920978.5269, 99.993221], [984529.3611, 99.995794], [1052466.484, 99.998031], [1125090.461, 100]],
+
+ urban: [[2918.1368, 0.022476], [3099.059, 0.026364], [3291.1983, 0.031079], [3495.2501, 0.03683], [3711.9529, 0.043812], [3942.0911, 0.052123], [4186.4977, 0.061977], [4446.0574, 0.07392], [4721.7095, 0.08836], [5014.4519, 0.105627], [5325.3441, 0.126649], [5655.5113, 0.152991], [6006.1487, 0.186685], [6378.5253, 0.230466], [6773.9889, 0.288337], [7193.971, 0.364009], [7639.9917, 0.462362], [8113.6654, 0.591815], [8616.7064, 0.763717], [9150.9356, 0.990265], [9718.2865, 1.291577], [10320.8128, 1.689361], [10960.6953, 2.197829], [11640.25, 2.833156], [12361.9366, 3.607935], [13128.3672, 4.531058], [13942.3158, 5.612064], [14806.7287, 6.829389], [15724.7345, 8.150496], [16699.656, 9.587093], [17735.0219, 11.139531], [18834.5796, 12.843232], [20002.3091, 14.744], [21242.4369, 16.882944], [22559.4426, 19.274088], [23958.1299, 21.898373], [25443.5105, 24.70402], [27020.9832, 27.725078], [28696.2577, 31.02485], [30475.3976, 34.577391], [32364.8747, 38.361881], [34371.4652, 42.220399], [36502.4624, 46.204947], [38765.5793, 50.279452], [41169.0072, 54.284933], [43721.489, 58.020934], [46432.1785, 61.527083], [49310.9281, 65.059633], [52368.1573, 68.631977], [55614.9317, 72.134933], [59063.062, 75.35901], [62724.914, 78.289798], [66613.7972, 80.980675], [70743.7873, 83.426691], [75129.8328, 85.63051], [79787.8886, 87.600439], [84734.6595, 89.324337], [89988.1253, 90.82494], [95567.3009, 92.132382], [101492.3799, 93.28344], [107784.9158, 94.291515], [114467.4749, 95.165628], [121564.3462, 95.917569], [129101.2165, 96.566309], [137105.3654, 97.111687], [145605.9093, 97.557321], [154633.333, 97.923776], [164220.4481, 98.224115], [174401.955, 98.472073], [185214.7052, 98.683427], [196698.0321, 98.864412], [208893.1174, 99.018636], [221844.2859, 99.150765], [235598.4142, 99.266909], [250205.285, 99.369967], [265718.0332, 99.460335], [282192.2909, 99.538693], [299687.9363, 99.60658], [318268.2947, 99.665149], [338000.617, 99.716006], [358956.683, 99.76009], [381211.6455, 99.798168], [404846.394, 99.830962], [429946.4736, 99.858805], [456602.7336, 99.881656], [484912.1405, 99.900176], [514976.218, 99.91564], [546904.2389, 99.928971], [580811.7657, 99.940546], [616821.5259, 99.950572], [655064.5111, 99.959091], [695677.8688, 99.966315], [738809.2149, 99.97239], [784614.6621, 99.97761], [833260.0023, 99.982252], [884922.1907, 99.986425], [939786.4993, 99.990223], [998052.3412, 99.993742], [1059930.608, 99.996997], [1125645.267, 100]],
+
+ rural: [[1522.3755, 0.044856], [1621.4335, 0.048153], [1726.937, 0.051764], [1839.3056, 0.055907], [1958.9857, 0.060801], [2086.4531, 0.066762], [2222.2145, 0.073899], [2366.8099, 0.082612], [2520.8136, 0.093168], [2684.8381, 0.106164], [2859.5353, 0.122508], [3045.6, 0.142886], [3243.7713, 0.16758], [3454.8371, 0.19669], [3679.6367, 0.23118], [3919.0639, 0.273098], [4174.0698, 0.325019], [4445.6684, 0.390807], [4734.9398, 0.474177], [5043.0332, 0.579565], [5371.1735, 0.719638], [5720.6654, 0.911325], [6092.8986, 1.175054], [6489.3516, 1.537895], [6911.6011, 2.041596], [7361.3256, 2.758826], [7840.3135, 3.776691], [8350.4675, 5.133703], [8893.8162, 6.852621], [9472.5195, 8.948744], [10088.8789, 11.417648], [10745.3427, 14.293846], [11444.5212, 17.634387], [12189.194, 21.360828], [12982.3225, 25.29956], [13827.0569, 29.428878], [14726.7567, 33.707138], [15684.9997, 38.129755], [16705.5921, 42.671778], [17792.5925, 47.229102], [18950.322, 51.800588], [20183.3846, 56.383771], [21496.6782, 60.886558], [22895.4161, 65.12792], [24385.1837, 69.030354], [25971.888, 72.617033], [27661.8365, 75.986887], [29461.7179, 79.112304], [31378.744, 81.975561], [33420.5079, 84.537139], [35595.0905, 86.782817], [37911.2052, 88.71901], [40378.0258, 90.413815], [43005.3584, 91.908817], [45803.6014, 93.228911], [48783.9674, 94.381653], [51958.2609, 95.359352], [55339.1005, 96.170082], [58939.867, 96.837248], [62774.9884, 97.378991], [66859.655, 97.8273], [71210.033, 98.200135], [75843.5542, 98.506646], [80778.5711, 98.752685], [86034.7015, 98.949784], [91632.7482, 99.10766], [97595.1423, 99.232528], [103945.4998, 99.334335], [110709.0646, 99.42121], [117912.6058, 99.497035], [125584.9876, 99.563629], [133756.5988, 99.621726], [142459.781, 99.672192], [151729.4076, 99.715746], [161602.1937, 99.752893], [172117.386, 99.784601], [183316.6015, 99.811139], [195244.7151, 99.833203], [207948.9717, 99.852181], [221479.8735, 99.868723], [235890.9734, 99.883153], [251240.0159, 99.89576], [267587.7958, 99.906951], [284999.0141, 99.917064], [303543.4372, 99.926265], [323294.5157, 99.9346], [344330.7648, 99.942191], [366735.4418, 99.949086], [390598.3214, 99.955426], [416013.9199, 99.961279], [443083.2701, 99.966677], [471913.507, 99.971673], [502620.1526, 99.976302], [535324.8297, 99.980575], [570156.9769, 99.984496], [607256.1655, 99.988063], [646769.3381, 99.991314], [688853.5686, 99.994366], [733675.418, 99.997264], [781414.486, 100]]
+ };
+
+ // Initial values for the user lines.
+ var userLine1Val = 8250;
+ var userLine2Val = 60000;
+
+
+
+ plot1 = $.jqplot("chart1", [dataSets.national], {
+ title: "Cumulative Density Function",
+ cursor: {
+ show: false
+ },
+ highlighter: {
+ show: true,
+ showMarker: false,
+ useAxesFormatters: false,
+ formatString: '%d, %.1f'
+ },
+ axesDefaults: {
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer
+ },
+ seriesDefaults: {
+ showMarker: false
+ },
+ axes: {
+ xaxis: {
+ label: "Per Capita Expenditure (local currency)",
+ renderer: $.jqplot.LogAxisRenderer,
+ pad:0,
+ ticks: [700, 7000, 70000, 700000, {value:1000000, showLabel:false, showMark:false, showGridline:false}],
+ tickOptions: {
+ formatString: "%d"
+ }
+ },
+ yaxis: {
+ label: "Population Share (%)",
+ forceTickAt0: true,
+ pad: 0
+ }
+ },
+ grid: {
+ drawBorder: false,
+ shadow: false,
+ // background: 'rgba(0,0,0,0)' works.
+ background: "white"
+ },
+ canvasOverlay: {
+ show: true,
+ objects: [
+ {verticalLine: {
+ name: "line1",
+ x: userLine1Val,
+ color: "#d4c35D",
+ yOffset: 0,
+ shadow: false,
+ showTooltip: true,
+ tooltipFormatString: "PCE=%'d",
+ showTooltipPrecision: 0.5
+ }},
+ {verticalLine: {
+ name: "line2",
+ x: userLine2Val,
+ color: "#d4c35D",
+ yOffset: 0,
+ shadow: false,
+ showTooltip: true,
+ tooltipFormatString: "PCE=%'d",
+ showTooltipPrecision: 0.5
+ }}
+ ]
+ }
+ });
+
+ // add a date at the bottom.
+
+ var d = new $.jsDate();
+ $("div.jqplot-datestamp").html("Generated on "+d.strftime("%v"));
+
+ // initialize form elements
+ // set these before attaching event handlers.
+
+ $("input[type=radio][name=dataSeries]").attr("checked", false);
+ $("input[type=radio][name=dataSeries][value=national]").attr("checked", true);
+
+ $("input[type=radio][name=backgroundColor]").attr("checked", false);
+ $("input[type=radio][name=backgroundColor][value=white]").attr("checked", true);
+
+ $("input[type=radio][name=lineWidth]").attr("checked", false);
+ $('input[type=radio][name=lineWidth][value="2.5"]').attr("checked", true);
+
+ $("input[type=text][name=userLine1]").val(userLine1Val);
+ $("input[type=text][name=userLine2]").val(userLine2Val);
+
+ $("input[type=checkbox][name=gridsVertical]").attr("checked", true);
+ $("input[type=checkbox][name=gridsHorizontal]").attr("checked", true);
+
+ $("input[type=radio][name=backgroundColor]").change(function(){
+ plot1.grid.background = $(this).val();
+ plot1.replot();
+ });
+
+ $("input[type=radio][name=dataSeries]").change(function(){
+ var val = $(this).val();
+ plot1.series[0].data = dataSets[val];
+
+ switch (val) {
+ case "national":
+ plot1.series[0].renderer.shapeRenderer.strokeStyle = "#4bb2c5";
+ break;
+ case "urban":
+ plot1.series[0].renderer.shapeRenderer.strokeStyle = "#c54b62";
+ break;
+ case "rural":
+ plot1.series[0].renderer.shapeRenderer.strokeStyle = "#b2c54b";
+ break;
+ default:
+ plot1.series[0].renderer.shapeRenderer.strokeStyle = "#4bb2c5";
+ break;
+ }
+ // hack to make sure plot auto computes a new format string if needed.
+ plot1.axes.yaxis.tickOptions.formatString = ''
+ plot1.replot({resetAxes:["yaxis"]});
+ });
+
+ $("input[type=checkbox][name=gridsVertical]").change(function(){
+ plot1.axes.xaxis.tickOptions.showGridline = this.checked;
+ plot1.replot();
+ });
+
+ $("input[type=checkbox][name=gridsHorizontal]").change(function(){
+ plot1.axes.yaxis.tickOptions.showGridline = this.checked;
+ plot1.replot();
+ });
+
+ $("input[type=text][name=userLine1]").keyup(function(){
+ var val = parseFloat($(this).val());
+ plot1.plugins.canvasOverlay.get("line1").options.x = val;
+ plot1.replot();
+ });
+
+ $("input[type=text][name=userLine2]").keyup(function(){
+ var val = parseFloat($(this).val());
+ plot1.plugins.canvasOverlay.get("line2").options.x = val;
+ plot1.replot();
+ });
+
+ $("input[type=radio][name=lineWidth]").change(function(){
+ var val = parseFloat($(this).val()), shadowOffset;
+ plot1.series[0].renderer.shapeRenderer.lineWidth = val;
+ plot1.series[0].renderer.shadowRenderer.lineWidth = val;
+ // for thick lines, scale shadow offset.
+ if (val > 2.5) {
+ shadowOffset = 1.25 * (1 + (Math.atan((val/2.5))/0.785398163 - 1)*0.6);
+ // var shadow_offset = this.shadowOffset;
+ }
+ // for skinny lines, don't make such a big shadow.
+ else {
+ shadowOffset = 1.25*Math.atan((val/2.5))/0.785398163;
+ }
+ plot1.series[0].renderer.shadowRenderer.offset = shadowOffset;
+ plot1.plugins.canvasOverlay.get("line1").options.lineWidth = val;
+ plot1.plugins.canvasOverlay.get("line2").options.lineWidth = val;
+ plot1.replot();
+ });
+
+
+ $("div.chart-container").resizable({delay:20});
+
+ $("div.chart-container").bind("resize", function(event, ui) {
+ plot1.replot();
+ });
+});
+
+</script>
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+ <script class="include" type="text/javascript" src="../plugins/jqplot.logAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.cursor.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.highlighter.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasOverlay.min.js"></script>
+ <script class="include" type="text/javascript" src="jquery-ui/js/jquery-ui.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/kcp_engel.html b/wqflask/wqflask/static/packages/jqplot/examples/kcp_engel.html
new file mode 100644
index 00000000..940c2d5a
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/kcp_engel.html
@@ -0,0 +1,256 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Engel Curves</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="kcp_cdf.html">Previous</a> <a href="./">Examples</a> <a href="kcp_lorenz.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+
+ <link class="include" type="text/css" href="jquery-ui/css/smoothness/jquery-ui.min.css" rel="Stylesheet" />
+
+ <style type="text/css">
+
+ .chart-container {
+ border: 1px solid darkblue;
+ padding: 30px 0px 30px 30px;
+ width: 900px;
+ height: 400px;
+
+ }
+
+ table.jqplot-table-legend {
+ font-size: 0.65em;
+ line-height: 1em;
+ margin: 0px 0px 10px 15px;
+ }
+
+ td.jqplot-table-legend-label {
+ width: 20em;
+ }
+
+ div.jqplot-table-legend-swatch {
+ border-width: 1.5px 6px;
+ }
+
+ div.jqplot-table-legend-swatch-outline {
+ border: none;
+ }
+
+ #chart1 {
+ width: 96%;
+ height: 96%;
+ }
+
+ .jqplot-datestamp {
+ font-size: 0.8em;
+ color: #777;
+/* margin-top: 1em;
+ text-align: right;*/
+ font-style: italic;
+ position: absolute;
+ bottom: 15px;
+ right: 15px;
+ }
+
+ td.controls li {
+ list-style-type: none;
+ }
+
+ td.controls ul {
+ margin-top: 0.5em;
+ padding-left: 0.2em;
+ }
+
+ pre.code {
+ margin-top: 45px;
+ clear: both;
+ }
+
+ </style>
+
+ <div class="chart-container">
+ <div id="chart1"></div>
+ <div class="jqplot-datestamp"></div>
+ </div>
+
+ <pre class="code brush:js"></pre>
+
+ <script class="code" type="text/javascript">
+$(document).ready(function(){
+
+ ///////////
+ // This is NOT a full csv parser.
+ // It does not handle quoated text.
+ // It is for demonstration only.
+ // For a full featured csv parser, look at:
+ //
+ // http://www.bennadel.com/blog/1504-Ask-Ben-Parsing-CSV-Strings-With-Javascript-Exec-Regular-Expression-Command.htm
+ ///////////
+
+ var parseCSVFile = function(url) {
+ var ret = null;
+ var labels = [];
+ var ticks = [];
+ var values = [];
+ var temp;
+ $.ajax({
+ // have to use synchronous here, else returns before data is fetched
+ async: false,
+ url: url,
+ dataType:"text",
+ success: function(data) {
+ // parse csv data
+ var lines = data.split('\n');
+ var line;
+ for (var i=0, l=lines.length; i<l; i++) {
+ line = lines[i].replace('\r', '').split(',');
+ // console.log(line);
+ if (line.length > 1) {
+ if (i === 0) {
+ ticks = line.slice(1, line.length);
+ }
+ else {
+ labels.push(line[0]);
+ values.push(line.slice(1, line.length));
+ temp = values[values.length-1];
+ for (n in temp) {
+ values[values.length-1][n] = parseFloat(temp[n]);
+ }
+ }
+ }
+ }
+ ret = [values, labels, ticks];
+ }
+ });
+ return ret;
+ };
+
+ var jsonurl = "./KCPsample4.csv";
+
+ var infos = parseCSVFile(jsonurl);
+ var data = infos[0];
+ var labels = infos[1];
+ var ticks = infos[2];
+
+ // make the plot
+
+ plot1 = $.jqplot("chart1", data, {
+ title: "Engel Curves",
+ animate: true,
+ axesDefaults: {
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer
+ },
+ seriesDefaults: {
+ showMarker: false
+ },
+ legend: {
+ show: true,
+ renderer: $.jqplot.EnhancedLegendRenderer,
+ placement: "outsideGrid",
+ labels: labels,
+ location: "ne",
+ rowSpacing: "0px",
+ rendererOptions: {
+ // set to true to replot when toggling series on/off
+ // set to an options object to pass in replot options.
+ seriesToggle: 'normal',
+ seriesToggleReplot: {resetAxes: true}
+ }
+ },
+ axes: {
+ xaxis: {
+ label: 'Population Percentile',
+ pad: 1.01,
+ tickOptions: {
+ showGridline: false
+ }
+ },
+ yaxis: {
+ label: 'Share in Total Expenditure (%)',
+ tickOptions: {
+ suffix: '%'
+ },
+ padMin: 0,
+ padMax: 1.05
+ }
+ },
+ grid: {
+ drawBorder: false,
+ shadow: false,
+ // background: 'rgba(0,0,0,0)' works to make transparent.
+ background: "white"
+ }
+ });
+
+ // add a date at the bottom.
+
+ var d = new $.jsDate();
+ $("div.jqplot-datestamp").html("Generated on "+d.strftime("%v"));
+
+ // make it resizable.
+
+ $("div.chart-container").resizable({delay:20});
+
+ $("div.chart-container").bind("resize", function(event, ui) {
+ plot1.replot();
+ });
+});
+
+</script>
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.enhancedLegendRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="jquery-ui/js/jquery-ui.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/kcp_lorenz.html b/wqflask/wqflask/static/packages/jqplot/examples/kcp_lorenz.html
new file mode 100644
index 00000000..2fcf661d
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/kcp_lorenz.html
@@ -0,0 +1,528 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Lorenz Curves</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="kcp_engel.html">Previous</a> <a href="./">Examples</a> <a href="kcp_pdf.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+
+ <link class="include" type="text/css" href="jquery-ui/css/smoothness/jquery-ui.min.css" rel="Stylesheet" />
+
+ <style type="text/css">
+
+ .chart-container {
+ border: 1px solid darkblue;
+ padding: 30px;
+ width: 500px;
+ height: 400px;
+
+ }
+
+ #chart1 {
+ width: 96%;
+ height: 96%;
+ }
+
+ .jqplot-datestamp {
+ font-size: 0.8em;
+ color: #777;
+/* margin-top: 1em;
+ text-align: right;*/
+ font-style: italic;
+ position: absolute;
+ bottom: 15px;
+ right: 15px;
+ }
+
+ td.controls li {
+ list-style-type: none;
+ }
+
+ td.controls ul {
+ margin-top: 0.5em;
+ padding-left: 0.2em;
+ }
+
+ pre.code {
+ margin-top: 45px;
+ clear: both;
+ }
+
+ </style>
+
+ <table class="app">
+ <td class="controls">
+
+ <div>
+ Data Series:
+ <ul>
+ <li><input class="dataSeries-checkbox" name="dataSeries_national" value="national" type="checkbox" checked />National</li>
+ <li><input class="dataSeries-checkbox" name="dataSeries_urban" value="urban" type="checkbox" />Urban</li>
+ <li><input class="dataSeries-checkbox" name="dataSeries_rural" value="rural" type="checkbox" />Rural</li>
+ </ul>
+ </div>
+
+ <div>
+ Background Color:
+ <ul>
+ <li><input name="backgroundColor" value="white" type="radio" checked />Default</li>
+ <li><input name="backgroundColor" value="#efefef" type="radio" />Gray</li>
+ </ul>
+ </div>
+
+ <div>
+ Line Width:
+ <ul>
+ <li><input name="lineWidth" value="2.5" type="radio" checked />Thin</li>
+ <li><input name="lineWidth" value="5" type="radio" />Thick</li>
+ </ul>
+ </div>
+
+ <div>
+ Grids:
+ <ul>
+ <li><input name="gridsVertical" value="vertical" type="checkbox" checked />Vertical</li>
+ <li><input name="gridsHorizontal" value="horizontal" type="checkbox" checked />Horizontal</li>
+ </ul>
+ </div>
+
+ <div>
+ Cutoff Lines:
+ <ul>
+ <li><input name="cutoffLines" value="showCutoffLines" type="checkbox" checked />Show</li>
+ <li>Low:&nbsp;&nbsp;<input name="userLine1" value="42" type="text" size="6" /></li>
+ <li>High:&nbsp;<input name="userLine2" value="75" type="text" size="6" /></li>
+ </ul>
+ </div>
+ </td>
+
+ <td class="chart">
+ <div class="chart-container">
+ <div id="chart1"></div>
+ <div class="jqplot-datestamp"></div>
+ </div>
+ </td>
+
+ </table>
+
+ <pre class="code brush:js"></pre>
+
+
+
+ <script class="code" type="text/javascript">
+$(document).ready(function(){
+ var dataSets = {
+ national: [[0, 0], [0.034259, 0.000122], [0.036908, 0.000271], [0.039957, 0.000457], [0.043623, 0.000699], [0.048008, 0.001005], [0.053278, 0.001404], [0.059665, 0.001916], [0.067405, 0.002587], [0.076951, 0.003482], [0.088909, 0.004676], [0.103706, 0.006234], [0.121406, 0.008198], [0.142376, 0.010698], [0.167456, 0.013945], [0.198392, 0.018266], [0.237371, 0.024152], [0.287096, 0.03217], [0.350664, 0.043128], [0.43322, 0.058856], [0.546538, 0.08196], [0.703419, 0.116382], [0.921534, 0.167573], [1.225405, 0.244101], [1.658248, 0.362099], [2.286919, 0.545089], [3.168531, 0.811148], [4.338121, 1.180312], [5.828025, 1.677699], [7.674282, 2.317937], [9.856185, 3.124879], [12.427952, 4.135038], [15.374906, 5.337835], [18.559853, 6.704187], [21.938501, 8.240167], [25.480211, 9.968066], [29.195872, 11.896316], [33.040813, 13.995922], [36.929108, 16.268393], [40.883239, 18.753271], [44.934876, 21.456742], [48.979949, 24.281483], [52.874709, 27.163823], [56.569122, 30.090586], [60.143349, 33.155912], [63.632698, 36.332609], [67.019887, 39.647977], [70.272329, 42.982924], [73.31569, 46.301522], [76.137996, 49.580067], [78.734309, 52.80729], [81.144203, 56.013671], [83.364771, 59.154237], [85.40072, 62.237023], [87.276365, 65.274088], [88.994984, 68.231226], [90.547773, 71.063226], [91.930153, 73.740825], [93.143588, 76.235257], [94.19365, 78.526502], [95.093093, 80.626967], [95.863261, 82.534767], [96.518119, 84.276606], [97.07861, 85.871008], [97.555507, 87.313822], [97.958887, 88.612275], [98.29631, 89.76839], [98.57645, 90.788966], [98.805892, 91.680096], [98.994988, 92.471419], [99.15183, 93.168954], [99.279882, 93.771844], [99.384116, 94.303287], [99.470272, 94.773123], [99.541871, 95.191639], [99.601871, 95.572501], [99.653556, 95.924822], [99.698334, 96.25129], [99.737113, 96.553878], [99.770733, 96.834228], [99.800151, 97.099569], [99.826487, 97.355328], [99.85018, 97.600349], [99.871291, 97.832168], [99.889939, 98.050737], [99.906286, 98.254414], [99.92045, 98.442305], [99.932702, 98.616245], [99.9433, 98.776877], [99.952485, 98.926517], [99.960528, 99.066855], [99.96755, 99.196967], [99.9736, 99.316087], [99.978742, 99.423943], [99.983126, 99.523155], [99.986929, 99.615949], [99.990275, 99.703425], [99.993221, 99.785398], [99.995794, 99.861721], [99.998031, 99.932812], [100, 100]],
+
+ urban: [[0, 0], [0.022476, 0.000211], [0.026364, 0.000483], [0.031079, 0.000832], [0.03683, 0.001286], [0.043812, 0.001867], [0.052123, 0.002596], [0.061977, 0.003523], [0.07392, 0.00472], [0.08836, 0.006245], [0.105627, 0.008192], [0.126649, 0.010745], [0.152991, 0.014185], [0.186685, 0.01887], [0.230466, 0.025421], [0.288337, 0.034602], [0.364009, 0.047302], [0.462362, 0.064833], [0.591815, 0.0896], [0.763717, 0.124292], [0.990265, 0.173076], [1.291577, 0.242086], [1.689361, 0.337485], [2.197829, 0.465168], [2.833156, 0.632983], [3.607935, 0.847553], [4.531058, 1.117227], [5.612064, 1.448077], [6.829389, 1.832426], [8.150496, 2.276607], [9.587093, 2.787319], [11.139531, 3.375891], [12.843232, 4.068491], [14.744, 4.894875], [16.882944, 5.879821], [19.274088, 7.043989], [21.898373, 8.377077], [24.70402, 9.889069], [27.725078, 11.639484], [31.02485, 13.647365], [34.577391, 15.957918], [38.361881, 18.496115], [42.220399, 21.242326], [46.204947, 24.281703], [50.279452, 27.501128], [54.284933, 30.800251], [58.020934, 34.003512], [61.527083, 37.314968], [65.059633, 40.928214], [68.631977, 44.751812], [72.134933, 48.615769], [75.35901, 52.332308], [78.289798, 55.927374], [80.980675, 59.439449], [83.426691, 62.80086], [85.63051, 66.024375], [87.600439, 69.040545], [89.324337, 71.839628], [90.82494, 74.405703], [92.132382, 76.808559], [93.28344, 79.051197], [94.291515, 81.128944], [95.165628, 83.025406], [95.917569, 84.765777], [96.566309, 86.346045], [97.111687, 87.728898], [97.557321, 88.935715], [97.923776, 89.98232], [98.224115, 90.896808], [98.472073, 91.712405], [98.683427, 92.454973], [98.864412, 93.127257], [99.018636, 93.73762], [99.150765, 94.298112], [99.266909, 94.826197], [99.369967, 95.321988], [99.460335, 95.779249], [99.538693, 96.200706], [99.60658, 96.587402], [99.665149, 96.942925], [99.716006, 97.27086], [99.76009, 97.572073], [99.798168, 97.847633], [99.830962, 98.099393], [99.858805, 98.322381], [99.881656, 98.513678], [99.900176, 98.68098], [99.91564, 98.83196], [99.928971, 98.970904], [99.940546, 99.098968], [99.950572, 99.216266], [99.959091, 99.321169], [99.966315, 99.415471], [99.97239, 99.500041], [99.97761, 99.578707], [99.982252, 99.653757], [99.986425, 99.725788], [99.990223, 99.796075], [99.993742, 99.865362], [99.996997, 99.933105], [100, 100]],
+
+ rural: [[0, 0], [0.044856, 0.00021], [0.048153, 0.000449], [0.051764, 0.000737], [0.055907, 0.001092], [0.060801, 0.00155], [0.066762, 0.002138], [0.073899, 0.002894], [0.082612, 0.003876], [0.093168, 0.005148], [0.106164, 0.006835], [0.122508, 0.009095], [0.142886, 0.012069], [0.16758, 0.015833], [0.19669, 0.020566], [0.23118, 0.026579], [0.273098, 0.034447], [0.325019, 0.044958], [0.390807, 0.059161], [0.474177, 0.078318], [0.579565, 0.104359], [0.719638, 0.14226], [0.911325, 0.197784], [1.175054, 0.278915], [1.537895, 0.397967], [2.041596, 0.57646], [2.758826, 0.848809], [3.776691, 1.250019], [5.133703, 1.8048], [6.852621, 2.537016], [8.948744, 3.478047], [11.417648, 4.640509], [14.293846, 6.085098], [17.634387, 7.851123], [21.360828, 9.886831], [25.29956, 12.160142], [29.428878, 14.674388], [33.707138, 17.452533], [38.129755, 20.506174], [42.671778, 23.796002], [47.229102, 27.303349], [51.800588, 31.060857], [56.383771, 35.053496], [60.886558, 39.145526], [65.12792, 43.181575], [69.030354, 47.116849], [72.617033, 51.025646], [75.986887, 54.923636], [79.112304, 58.743632], [81.975561, 62.443223], [84.537139, 65.922443], [86.782817, 69.135506], [88.71901, 72.103335], [90.413815, 74.878966], [91.908817, 77.500639], [93.228911, 79.953304], [94.381653, 82.20716], [95.359352, 84.209133], [96.170082, 85.973719], [96.837248, 87.5051], [97.378991, 88.838761], [97.8273, 90.020506], [98.200135, 91.065991], [98.506646, 91.96714], [98.752685, 92.735267], [98.949784, 93.390185], [99.10766, 93.94721], [99.232528, 94.417506], [99.334335, 94.838423], [99.42121, 95.226477], [99.497035, 95.589049], [99.563629, 95.927413], [99.621726, 96.240868], [99.672192, 96.530566], [99.715746, 96.794464], [99.752893, 97.034788], [99.784601, 97.251679], [99.811139, 97.442528], [99.833203, 97.614678], [99.852181, 97.774104], [99.868723, 97.92227], [99.883153, 98.05955], [99.89576, 98.188276], [99.906951, 98.310902], [99.917064, 98.429897], [99.926265, 98.545001], [99.9346, 98.656238], [99.942191, 98.76409], [99.949086, 98.868769], [99.955426, 98.971691], [99.961279, 99.072938], [99.966677, 99.172455], [99.971673, 99.270765], [99.976302, 99.367541], [99.980575, 99.462525], [99.984496, 99.554946], [99.988063, 99.644199], [99.991314, 99.731953], [99.994366, 99.820708], [99.997264, 99.910225], [100, 100]]
+ }
+
+ // Initial values for the user lines.
+ var userLine1Val = 42;
+ var userLine2Val = 75;
+
+ // find the index of the data point with the closest y value.
+ // assumes y values are monotonically increasing.
+ var findXValue = function (y, data) {
+ var l = data.length;
+ var temp;
+ var d;
+ var idx;
+ var mid = Math.round(l/2);
+ var interval = mid;
+ var prevInterval = mid;
+ var dist = null;
+ var absDist = null;
+ var hold = null;
+ var ret = null;
+ var x, x0, x1, y0, y1, lowidx, hiidx;
+
+ // check to see if we're in range
+ if (y > data[l-1][1]) {
+ return [l-1, data[l-1]];
+ }
+ else if (y < data[0][1]) {
+ return [0, data[0]];
+ }
+
+ for (var i=0; i<l; i++) {
+ d = data[mid][1];
+ dist = d - y;
+ absDist = Math.abs(dist);
+ interval = Math.round(interval/2);
+
+ if (absDist < hold || hold === null) {
+ hold = absDist;
+ idx = mid;
+ }
+
+ // if we're right on the pont, get out of here
+ if (dist === 0) {
+ ret = [idx, data[idx]];
+ break;
+ }
+
+ // if we've narrowed it down to an interval,
+ // interpolate and get out of here
+ else if (prevInterval === 1) {
+ // to the right, interpolate -1 to here
+ if (dist > 0) {
+ lowidx = idx - 1;
+ hiidx = idx;
+ }
+ else {
+ lowidx = idx;
+ hiidx = idx + 1;
+ }
+
+ x0 = data[lowidx][0];
+ x1 = data[hiidx][0];
+ y0 = data[lowidx][1];
+ y1 = data[hiidx][1];
+
+ x = x0 + (y - y0) / (y1 - y0) * (x1 - x0);
+
+ ret = [idx, [x, y]];
+ break;
+ }
+ // to the right, go left and reduce
+ else if (dist > 0) {
+ mid -= interval;
+ }
+ // to the left go right and increase
+ else if (dist < 0) {
+ mid += interval;
+ }
+
+ prevInterval = interval;
+ }
+ return ret;
+ }
+
+ // determine initial values for horizontal and vertical overlay lines.
+
+ var line1x = findXValue(userLine1Val, dataSets.national)[1][0];
+ var line2x = findXValue(userLine2Val, dataSets.national)[1][0];;
+ var line3y = userLine1Val;
+ var line4y = userLine2Val;
+
+ // make the plot
+
+ plot1 = $.jqplot("chart1", [dataSets.national, dataSets.urban, dataSets.rural], {
+ title: "Lorenz Curve",
+ // To control the size of the grid, can set the gridPadding option,
+
+ // gridPadding: {top: 40, bottom: 60, left: 70, right: 50},
+
+ // but must know size of container ahead of time and figure out what paddings
+ // you want to get a square grid.
+ // Alternatively, can use the gridDimensions option.
+ // gridDimensions doesn't get reapplied on replot() because plots
+ // _gridPadding attribute is set the first time it is drawn and it
+ // won't be overwritten.
+
+ gridDimensions: {height: 290, width: 290},
+ seriesColors: ["#4bb2c5", "#c54b62", "#b2c54b"],
+ cursor: {
+ show: false
+ },
+ highlighter: {
+ show: true,
+ showMarker: false,
+ useAxesFormatters: false,
+ formatString: '%d, %.1f'
+ },
+ axesDefaults: {
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer
+ },
+ seriesDefaults: {
+ showMarker: false
+ },
+ series: [
+ {show: true},
+ {show: false},
+ {show: false}
+ ],
+ axes: {
+ xaxis: {
+ label: '% of Population',
+ pad:0
+ },
+ yaxis: {
+ label: '% of Expenditure',
+ pad: 0
+ }
+ },
+ grid: {
+ drawBorder: false,
+ shadow: false,
+ // background: 'rgba(0,0,0,0)' works.
+ background: "white"
+ },
+ canvasOverlay: {
+ show: true,
+ objects: [,
+ {line: {
+ name: "line5",
+ start: [0,0],
+ stop: [100,100],
+ color: "#666666",
+ shadow: false,
+ showTooltip: false,
+ lineWidth: 3
+ }},
+ {horizontalLine: {
+ name: "line1",
+ y: userLine1Val,
+ color: "#d4c35D",
+ xmin: 0,
+ xmax: line1x,
+ shadow: false,
+ showTooltip: true,
+ tooltipFormatString: "%nPS=%'d",
+ showTooltipPrecision: 0.5
+ }},
+ {horizontalLine: {
+ name: "line2",
+ y: userLine2Val,
+ color: "#d4c35D",
+ xmin: 0,
+ xmax: line2x,
+ shadow: false,
+ showTooltip: true,
+ tooltipFormatString: "%nPS=%'d",
+ showTooltipPrecision: 0.5
+ }},
+ {verticalLine: {
+ name: "line3",
+ x: line1x,
+ color: "#d4c35D",
+ ymin: 0,
+ ymax: line3y,
+ shadow: false,
+ showTooltip: true,
+ tooltipFormatString: "PCE=%'d",
+ showTooltipPrecision: 0.5
+ }},
+ {verticalLine: {
+ name: "line4",
+ x: line2x,
+ color: "#d4c35D",
+ ymin: 0,
+ ymax: line4y,
+ shadow: false,
+ showTooltip: true,
+ tooltipFormatString: "PCE=%'d",
+ showTooltipPrecision: 0.5
+ }}
+ ]
+ }
+ });
+
+ // add a date at the bottom.
+
+ var d = new $.jsDate();
+ $("div.jqplot-datestamp").html("Generated on "+d.strftime("%v"));
+
+ // initialize form elements
+ // set these before attaching event handlers.
+
+ $("input.dataSeries-checkbox").attr("checked", false);
+ $("input.dataSeries-checkbox[name=dataSeries_national]").attr("checked", true);
+
+ $("input[type=radio][name=backgroundColor]").attr("checked", false);
+ $("input[type=radio][name=backgroundColor][value=white]").attr("checked", true);
+
+ $("input[type=radio][name=lineWidth]").attr("checked", false);
+ $('input[type=radio][name=lineWidth][value="2.5"]').attr("checked", true);
+
+ $("input[type=text][name=userLine1]").val(userLine1Val);
+ $("input[type=text][name=userLine2]").val(userLine2Val);
+
+ $("input[type=checkbox][name=gridsVertical]").attr("checked", true);
+ $("input[type=checkbox][name=gridsHorizontal]").attr("checked", true);
+ $("input[type=checkbox][name=cutoffLines]").attr("checked", true);
+
+
+ // attach event handlers to form elements
+
+ $("input[type=radio][name=backgroundColor]").change(function(){
+ plot1.grid.background = $(this).val();
+ plot1.replot();
+ });
+
+ $("input.dataSeries-checkbox").change(function(){
+
+ plot1.series[0].show = false;
+ plot1.series[1].show = false;
+ plot1.series[2].show = false;
+
+ if ($('input[name=dataSeries_national]').get(0).checked === true) {
+ plot1.series[0].show = true;
+ }
+
+ if ($('input[name=dataSeries_urban]').get(0).checked === true) {
+ plot1.series[1].show = true;
+ }
+
+ if ($('input[name=dataSeries_rural]').get(0).checked === true) {
+ plot1.series[2].show = true;
+ }
+
+ // var co = plot1.plugins.canvasOverlay;
+ // var x1max = findXValue($("input[type=text][name=userLine1]").val(), dataSets[val])[1][0];
+ // co.get("line1").options.xmax = co.get("line3").options.x = x1max;
+ // var x2max = findXValue($("input[type=text][name=userLine2]").val(), dataSets[val])[1][0];
+ // co.get("line2").options.xmax = co.get("line4").options.x = x2max;
+
+ plot1.replot();
+ });
+
+ $("input[type=checkbox][name=gridsVertical]").change(function(){
+ plot1.axes.xaxis.tickOptions.showGridline = this.checked;
+ plot1.replot();
+ });
+
+ $("input[type=checkbox][name=gridsHorizontal]").change(function(){
+ plot1.axes.yaxis.tickOptions.showGridline = this.checked;
+ plot1.replot();
+ });
+
+ $("input[type=checkbox][name=cutoffLines]").change(function(){
+ var co = plot1.plugins.canvasOverlay;
+ if (this.checked) {
+ co.get('line1').options.show = true;
+ co.get('line2').options.show = true;
+ co.get('line3').options.show = true;
+ co.get('line4').options.show = true;
+ }
+ else {
+ co.get('line1').options.show = false;
+ co.get('line2').options.show = false;
+ co.get('line3').options.show = false;
+ co.get('line4').options.show = false;
+ }
+ plot1.replot();
+ });
+
+ $("input[type=text][name=userLine1]").keyup(function(){
+ var val = parseFloat($(this).val());
+
+ var co = plot1.plugins.canvasOverlay;
+
+ co.get("line1").options.y = val;
+ co.get("line3").options.ymax = val;
+
+ var xx = findXValue(val, plot1.series[0].data)[1][0];
+ co.get("line1").options.xmax = co.get("line3").options.x = xx;
+
+ plot1.replot();
+ });
+
+ $("input[type=text][name=userLine2]").keyup(function(){
+ var val = parseFloat($(this).val());
+
+ var co = plot1.plugins.canvasOverlay;
+
+ co.get("line2").options.y = val;
+ co.get("line4").options.ymax = val;
+
+ var xx = findXValue(val, plot1.series[0].data)[1][0];
+ co.get("line2").options.xmax = co.get("line4").options.x = xx;
+
+ plot1.replot();
+ });
+
+ $("input[type=radio][name=lineWidth]").change(function(){
+ var val = parseFloat($(this).val()), shadowOffset;
+ plot1.series[0].renderer.shapeRenderer.lineWidth = val;
+ plot1.series[0].renderer.shadowRenderer.lineWidth = val;
+ // for thick lines, scale shadow offset.
+ if (val > 2.5) {
+ shadowOffset = 1.25 * (1 + (Math.atan((val/2.5))/0.785398163 - 1)*0.6);
+ // var shadow_offset = this.shadowOffset;
+ }
+ // for skinny lines, don't make such a big shadow.
+ else {
+ shadowOffset = 1.25*Math.atan((val/2.5))/0.785398163;
+ }
+ plot1.series[0].renderer.shadowRenderer.offset = shadowOffset;
+ for (var i=0, l=plot1.plugins.canvasOverlay.objects.length; i<l; i++) {
+ plot1.plugins.canvasOverlay.objects[i].options.lineWidth = val;
+ }
+ plot1.replot();
+ });
+
+
+ $("div.chart-container").resizable({delay:20, aspectRatio: true});
+
+ $("div.chart-container").bind("resize", function(event, ui) {
+ plot1.replot();
+ });
+
+ $(".jqplot-target").mouseleave(function(){ $('.jqplot-canvasOverlay-tooltip, .jqplot-highlighter-tooltip, .jqpot-cursor-tooltip').hide(); });
+});
+
+</script>
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.logAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.cursor.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.highlighter.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasOverlay.min.js"></script>
+ <script class="include" type="text/javascript" src="jquery-ui/js/jquery-ui.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/kcp_pdf.html b/wqflask/wqflask/static/packages/jqplot/examples/kcp_pdf.html
new file mode 100644
index 00000000..161ae911
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/kcp_pdf.html
@@ -0,0 +1,387 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Probability Density Function Chart</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="kcp_lorenz.html">Previous</a> <a href="./">Examples</a> <a href="kcp_pyramid.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+
+ <link class="include" type="text/css" href="jquery-ui/css/smoothness/jquery-ui.min.css" rel="Stylesheet" />
+
+ <style type="text/css">
+
+ .chart-container {
+ border: 1px solid darkblue;
+ padding: 30px;
+ width: 500px;
+ height: 400px;
+
+ }
+
+ #chart1 {
+ width: 96%;
+ height: 96%;
+ }
+
+ .jqplot-datestamp {
+ font-size: 0.8em;
+ color: #777;
+/* margin-top: 1em;
+ text-align: right;*/
+ font-style: italic;
+ position: absolute;
+ bottom: 15px;
+ right: 15px;
+ }
+
+ td.controls li {
+ list-style-type: none;
+ }
+
+ td.controls ul {
+ margin-top: 0.5em;
+ padding-left: 0.2em;
+ }
+
+ pre.code {
+ margin-top: 45px;
+ clear: both;
+ }
+
+
+ </style>
+
+ <table class="app">
+ <td class="controls">
+
+ <div>
+ Data Series:
+ <ul>
+ <li><input name="dataSeries" value="national" type="radio" checked />National</li>
+ <li><input name="dataSeries" value="urban" type="radio" />Urban</li>
+ <li><input name="dataSeries" value="rural" type="radio" />Rural</li>
+ </ul>
+ </div>
+
+ <div>
+ Background Color:
+ <ul>
+ <li><input name="backgroundColor" value="white" type="radio" checked />Default</li>
+ <li><input name="backgroundColor" value="#efefef" type="radio" />Gray</li>
+ </ul>
+ </div>
+
+ <div>
+ Line Width:
+ <ul>
+ <li><input name="lineWidth" value="2.5" type="radio" checked />Thin</li>
+ <li><input name="lineWidth" value="5" type="radio" />Thick</li>
+ </ul>
+ </div>
+
+ <div>
+ Grids:
+ <ul>
+ <li><input name="gridsVertical" value="vertical" type="checkbox" checked />Vertical</li>
+ <li><input name="gridsHorizontal" value="horizontal" type="checkbox" checked />Horizontal</li>
+ </ul>
+ </div>
+
+ <div>
+ Set lines at:
+ <ul>
+ <li><input name="userLine1" value="8250" type="text" size="8" /> and </li>
+ <li><input name="userLine2" value="60000" type="text" size="8" /></li>
+ </ul>
+ </div>
+ </td>
+
+ <td class="chart">
+ <div class="chart-container">
+ <div id="chart1"></div>
+ <div class="jqplot-datestamp"></div>
+ </div>
+ </td>
+
+ </table>
+
+ <pre class="code brush:js"></pre>
+
+
+
+ <script class="code" type="text/javascript">
+$(document).ready(function(){
+ var dataSets = {
+ national: [[1521.3938, 0.03708],[1626.3757, 0.042449],[1738.6018, 0.049646],[1858.5719, 0.060338],[1986.8205, 0.071497],
+ [2123.9187, 0.087044],[2270.4772, 0.104666],[2427.1488, 0.128184],[2594.6313, 0.159819],[2773.6707, 0.199611],
+ [2965.0643, 0.243673],[3169.6651, 0.287224],[3388.384, 0.342159],[3622.1955, 0.415635],[3872.1408, 0.517318],
+ [4139.3332, 0.659341],[4424.963, 0.840113],[4730.3023, 1.074108],[5056.7112, 1.442097],[5405.6431, 1.981591],
+ [5778.6531, 2.7619],[6177.4022, 3.842131],[6603.6665, 5.373085],[7059.3446, 7.749981],[7546.4664, 11.242774],
+ [8067.2013, 15.291262],[8623.869, 19.8475],[9218.9488, 25.015106],[9855.0905, 30.121086],[10535.1293, 35.513309],
+ [11262.0934, 41.587183],[12039.2208, 46.321554],[12869.973, 49.223654],[13758.0502, 51.762768],[14707.4081, 54.47173],
+ [15722.2754, 56.863937],[16807.1724, 57.920473],[17966.9296, 58.642722],[19206.7162, 59.984755],[20532.0529, 61.048963],
+ [21948.8429, 59.669989],[23463.3991, 56.956409],[25082.4581, 54.101304],[26813.238, 53.0051],[28663.448, 51.385158],
+ [30641.3597, 50.165756],[32755.7239, 47.205435],[35015.9867, 43.941876],[37432.2159, 40.609332],[40015.1736, 37.393368],
+ [42776.4074, 34.753172],[45728.1335, 31.843056],[48883.5393, 29.239575],[52256.6796, 26.946508],[55862.5786, 24.54375],
+ [59717.3573, 21.987525],[63838.07, 19.447158],[68243.1267, 16.947396],[72952.1481, 14.562087],[77986.109, 12.487872],
+ [83367.4313, 10.610279],[89120.1733, 9.061827],[95269.7861, 7.759485],[101843.7444, 6.5685],[108871.3294, 5.529717],
+ [116383.8431, 4.605731],[124414.8718, 3.803268],[132999.9458, 3.106561],[142177.421, 2.580555],[151988.1749, 2.127878],
+ [162475.9062, 1.720439],[173687.5023, 1.418638],[185672.5653, 1.173246],[198484.6408, 0.977631],[212180.7957, 0.832246],
+ [226822.0345, 0.720185],[242473.814, 0.624252],[259205.3802, 0.54125],[277091.4846, 0.469102],[296211.7947, 0.415329],
+ [316651.475, 0.374489],[338501.5668, 0.335609],[361859.7555, 0.297025],[386829.3815, 0.261974],[413522.0015, 0.228367],
+ [442056.5084, 0.19707],[472559.9991, 0.17066],[505168.8456, 0.147428],[540027.3147, 0.128476],[577291.1437, 0.112712],
+ [617126.311, 0.097754],[659710.2484, 0.083718],[705233.3359, 0.070908],[753896.9752, 0.061016],[805918.5808, 0.053385],
+ [861529.8645, 0.047077],[920978.5269, 0.041268],[984529.3611, 0.035943],[1052466.484, 0.031318],[1125090.461, 0.027688]],
+
+ urban: [[2918.1368, 0.0059], [3099.059, 0.0071], [3291.1983, 0.0086], [3495.2501, 0.0105], [3711.9529, 0.0127],
+ [3942.0911, 0.015], [4186.4977, 0.018], [4446.0574, 0.0218], [4721.7095, 0.0262], [5014.4519, 0.0315],
+ [5325.3441, 0.03890], [5655.5113, 0.0493], [6006.1487, 0.0633], [6378.5253, 0.0833], [6773.9889, 0.1099],
+ [7193.971, 0.1432], [7639.9917, 0.18610], [8113.6654, 0.2476], [8616.7064, 0.3266], [9150.9356, 0.432399],
+ [9718.2865, 0.5759], [10320.8128, 0.7497], [10960.6953, 0.9448], [11640.25, 1.1693], [12361.9366, 1.4078],
+ [13128.3672, 1.6660], [13942.3158, 1.9247], [14806.7287, 2.10529], [15724.7345, 2.291], [16699.656, 2.4804],
+ [17735.0219, 2.6917], [18834.5796, 2.9825], [20002.3091, 3.350899], [21242.4369, 3.7607], [22559.4426, 4.1855],
+ [23958.1299, 4.5129], [25443.5105, 4.8198], [27020.9832, 5.254099], [28696.2577, 5.6751], [30475.3976, 6.1493],
+ [32364.8747, 6.3607], [34371.4652, 6.4803], [36502.4624, 6.7534], [38765.5793, 6.7358], [41169.0072, 6.4996],
+ [43721.489, 5.9422], [46432.1785, 5.7844], [49310.9281, 5.943099], [52368.1573, 5.9219], [55614.9317, 5.635099],
+ [59063.062, 5.1036], [62724.914, 4.6486], [66613.7972, 4.2762], [70743.7873, 3.8538], [75129.8328, 3.4799],
+ [79787.8886, 3.066], [84734.6595, 2.6792], [89988.1253, 2.312799], [95567.3009, 2.0393], [101492.3799, 1.7922],
+ [107784.9158, 1.5635], [114467.4749, 1.3438], [121564.3462, 1.1612], [129101.2165, 0.992799], [137105.3654, 0.818],
+ [145605.9093, 0.6722], [154633.333, 0.549], [164220.4481, 0.4517], [174401.955, 0.379299], [185214.7052, 0.3252],
+ [196698.0321, 0.2772], [208893.1174, 0.23700], [221844.2859, 0.2049], [235598.4142, 0.1818], [250205.285, 0.1607],
+ [265718.0332, 0.1396], [282192.2909, 0.1211], [299687.9363, 0.1047], [318268.2947, 0.0906], [338000.617, 0.0787],
+ [358956.683, 0.0681], [381211.6455, 0.0586], [404846.394, 0.0504], [429946.4736, 0.0421], [456602.7336, 0.034],
+ [484912.1405, 0.02799], [514976.218, 0.0238], [546904.2389, 0.0206], [580811.7657, 0.0179], [616821.5259, 0.0154],
+ [655064.5111, 0.013], [695677.8688, 0.011], [738809.2149, 0.0093], [784614.6621, 0.0081], [833260.0023, 0.0073],
+ [884922.1907, 0.0066], [939786.4993, 0.0061], [998052.3412, 0.0056], [1059930.608, 0.0052], [1125645.267, 0.0048]],
+
+ rural: [[1522.3755, 0.005], [1621.4335, 0.005], [1726.937, 0.006], [1839.3056, 0.00699], [1958.9857, 0.009],
+ [2086.4531, 0.01], [2222.2145, 0.012], [2366.8099, 0.015], [2520.8136, 0.018], [2684.8381, 0.023], [2859.5353, 0.029],
+ [3045.6, 0.036], [3243.7713, 0.043], [3454.8371, 0.05], [3679.6367, 0.06], [3919.0639, 0.074], [4174.0698, 0.092],
+ [4445.6684, 0.117], [4734.9398, 0.148], [5043.0332, 0.189], [5371.1735, 0.258], [5720.6654, 0.356],
+ [6092.8986, 0.488], [6489.3516, 0.672], [6911.6011, 0.946], [7361.3256, 1.355], [7840.3135, 1.87399],
+ [8350.4675, 2.434], [8893.8162, 3.016], [9472.5195, 3.639], [10088.8789, 4.22], [10745.3427, 4.92399],
+ [11444.5212, 5.652], [12189.194, 6.117], [12982.3225, 6.414], [13827.0569, 6.66], [14726.7567, 6.9099],
+ [15684.9997, 7.131], [16705.5921, 7.213], [17792.5925, 7.22], [18950.322, 7.263], [20183.3846, 7.2459],
+ [21496.6782, 6.973], [22895.4161, 6.457], [24385.1837, 5.9110], [25971.888, 5.513], [27661.8365, 5.162],
+ [29461.7179, 4.749], [31378.744, 4.319], [33420.5079, 3.81299], [35595.0905, 3.306], [37911.2052, 2.867],
+ [40378.0258, 2.518], [43005.3584, 2.233], [45803.6014, 1.96099], [48783.9674, 1.692], [51958.2609, 1.411],
+ [55339.1005, 1.168],[58939.867, 0.9520], [62774.9884, 0.77799], [66859.655, 0.647], [71210.033, 0.538],
+ [75843.5542, 0.4349], [80778.5711, 0.348], [86034.7015, 0.2789999], [91632.7482, 0.22300], [97595.1423, 0.177],
+ [103945.4998, 0.148], [110709.0646, 0.128], [117912.6058, 0.112999], [125584.9876, 0.099], [133756.5988, 0.086],
+ [142459.781, 0.074], [151729.4076, 0.064], [161602.1937, 0.054], [172117.386, 0.046], [183316.6015, 0.038],
+ [195244.7151, 0.032], [207948.9717, 0.02799], [221479.8735, 0.025], [235890.9734, 0.021], [251240.0159, 0.019],
+ [267587.7958, 0.017], [284999.0141, 0.015], [303543.4372, 0.013999], [323294.5157, 0.013], [344330.7648, 0.011],
+ [366735.4418, 0.01], [390598.3214, 0.01], [416013.9199, 0.009], [443083.2701, 0.008], [471913.507, 0.008],
+ [502620.1526, 0.00699], [535324.8297, 0.006], [570156.9769, 0.006], [607256.1655, 0.005], [646769.3381, 0.005],
+ [688853.5686, 0.005], [733675.418, 0.004], [781414.486, 0.004]]
+ }
+
+
+
+ plot1 = $.jqplot("chart1", [dataSets.national], {
+ title: "Probability Density Function",
+ cursor: {
+ show: false
+ },
+ highlighter: {
+ show: true,
+ showMarker: false,
+ useAxesFormatters: false,
+ formatString: '%d, %.1f'
+ },
+ axesDefaults: {
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer
+ },
+ seriesDefaults: {
+ showMarker: false
+ },
+ axes: {
+ xaxis: {
+ label: 'Per Capita Expenditure (local currency)',
+ renderer: $.jqplot.LogAxisRenderer,
+ pad:0,
+ ticks: [700, 7000, 70000, 700000, {value:1000000, showLabel:false, showMark:false, showGridline:false}],
+ tickOptions: {
+ formatString: "%d"
+ }
+ },
+ yaxis: {
+ label: 'Population Share (%)',
+ forceTickAt0: true,
+ pad: 0
+ }
+ },
+ grid: {
+ drawBorder: false,
+ shadow: false,
+ // background: 'rgba(0,0,0,0)' works.
+ background: "white"
+ },
+ canvasOverlay: {
+ show: true,
+ objects: [
+ {verticalLine: {
+ name: "line1",
+ x: 8250,
+ color: "#d4c35D",
+ yOffset: 0,
+ shadow: false,
+ showTooltip: true,
+ tooltipFormatString: "PCE=%'d",
+ showTooltipPrecision: 0.5
+ }},
+ {verticalLine: {
+ name: "line2",
+ x: 60000,
+ color: "#d4c35D",
+ yOffset: 0,
+ shadow: false,
+ showTooltip: true,
+ tooltipFormatString: "PCE=%'d",
+ showTooltipPrecision: 0.5
+ }}
+ ]
+ }
+ });
+
+ var d = new $.jsDate();
+ $("div.jqplot-datestamp").html("Generated on "+d.strftime("%v"));
+
+ $("input[type=radio][name=backgroundColor]").change(function(){
+ plot1.grid.background = $(this).val();
+ plot1.replot();
+ });
+
+ $("input[type=radio][name=dataSeries]").change(function(){
+ var val = $(this).val();
+ plot1.series[0].data = dataSets[val];
+
+ switch (val) {
+ case "national":
+ plot1.series[0].renderer.shapeRenderer.strokeStyle = "#4bb2c5";
+ break;
+ case "urban":
+ plot1.series[0].renderer.shapeRenderer.strokeStyle = "#c54b62";
+ break;
+ case "rural":
+ plot1.series[0].renderer.shapeRenderer.strokeStyle = "#b2c54b";
+ break;
+ default:
+ plot1.series[0].renderer.shapeRenderer.strokeStyle = "#4bb2c5";
+ break;
+ }
+ // hack to make sure plot auto computes a new format string if needed.
+ plot1.axes.yaxis.tickOptions.formatString = ''
+ plot1.replot({resetAxes:["yaxis"]});
+ });
+
+ $("input[type=checkbox][name=gridsVertical]").change(function(){
+ plot1.axes.xaxis.tickOptions.showGridline = this.checked;
+ plot1.replot();
+ });
+
+ $("input[type=checkbox][name=gridsHorizontal]").change(function(){
+ plot1.axes.yaxis.tickOptions.showGridline = this.checked;
+ plot1.replot();
+ });
+
+ $("input[type=text][name=userLine1]").keyup(function(){
+ var val = parseFloat($(this).val());
+ plot1.plugins.canvasOverlay.get("line1").options.x = val;
+ plot1.replot();
+ });
+
+ $("input[type=text][name=userLine2]").keyup(function(){
+ var val = parseFloat($(this).val());
+ plot1.plugins.canvasOverlay.get("line2").options.x = val;
+ plot1.replot();
+ });
+
+ $("input[type=radio][name=lineWidth]").change(function(){
+ var val = parseFloat($(this).val()), shadowOffset;
+ plot1.series[0].renderer.shapeRenderer.lineWidth = val;
+ plot1.series[0].renderer.shadowRenderer.lineWidth = val;
+ // for thick lines, scale shadow offset.
+ if (val > 2.5) {
+ shadowOffset = 1.25 * (1 + (Math.atan((val/2.5))/0.785398163 - 1)*0.6);
+ // var shadow_offset = this.shadowOffset;
+ }
+ // for skinny lines, don't make such a big shadow.
+ else {
+ shadowOffset = 1.25*Math.atan((val/2.5))/0.785398163;
+ }
+ plot1.series[0].renderer.shadowRenderer.offset = shadowOffset;
+ plot1.plugins.canvasOverlay.get("line1").options.lineWidth = val;
+ plot1.plugins.canvasOverlay.get("line2").options.lineWidth = val;
+ plot1.replot();
+ });
+
+
+ $("div.chart-container").resizable({delay:20});
+
+ $("div.chart-container").bind("resize", function(event, ui) {
+ plot1.replot();
+ });
+});
+
+</script>
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.logAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.cursor.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.highlighter.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasOverlay.min.js"></script>
+ <script class="include" type="text/javascript" src="jquery-ui/js/jquery-ui.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/kcp_pyramid.html b/wqflask/wqflask/static/packages/jqplot/examples/kcp_pyramid.html
new file mode 100644
index 00000000..ed048869
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/kcp_pyramid.html
@@ -0,0 +1,590 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Pyramid Charts</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="kcp_pdf.html">Previous</a> <a href="./">Examples</a> <a href="kcp_pyramid2.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+
+ <link class="include" type="text/css" href="jquery-ui/css/smoothness/jquery-ui.min.css" rel="Stylesheet" />
+
+
+ <style type="text/css">
+ .chart-container {
+ border: 1px solid darkblue;
+ padding: 30px;
+ width: 600px;
+ height: 700px;
+ }
+
+ #chart1 {
+ width: 96%;
+ height: 96%;
+ }
+
+ .jqplot-datestamp {
+ font-size: 0.8em;
+ color: #777;
+ /* margin-top: 1em;
+ text-align: right;*/
+ font-style: italic;
+ position: absolute;
+ bottom: 15px;
+ right: 15px;
+ }
+
+ td.controls li {
+ list-style-type: none;
+ }
+
+ td.controls ul {
+ margin-top: 0.5em;
+ padding-left: 0.2em;
+ }
+
+ pre.code {
+ margin-top: 45px;
+ clear: both;
+ }
+
+ div.tooltip {
+ border: 1px solid #aaa;
+ margin-right: 10px;
+ }
+
+ </style>
+
+ <table class="app">
+ <td class="controls">
+
+ <div style="margin-bottom: 15px;">
+ Axes:
+ <select name="axisPosition">
+ <option value="both">Left &amp; Right</option>
+ <option value = "left">Left</option>
+ <option value = "right">Right</option>
+ <option value = "mid">Mid</option>
+ </select>
+ </div>
+
+ <div>
+ Background Color:
+ <ul>
+ <li><input name="backgroundColor" value="white" type="radio" checked />Default</li>
+ <li><input name="backgroundColor" value="#efefef" type="radio" />Gray</li>
+ </ul>
+ </div>
+
+ <div>
+ Pyramid Color:
+ <ul>
+ <li><input name="seriesColor" value="green" type="radio" checked />Green</li>
+ <li><input name="seriesColor" value="blue" type="radio" />Blue</li>
+ </ul>
+ </div>
+
+ <div>
+ Grids:
+ <ul>
+ <li><input name="gridsVertical" value="vertical" type="checkbox" checked />Vertical</li>
+ <li><input name="gridsHorizontal" value="horizontal" type="checkbox" checked />Horizontal</li>
+ <li><input name="showMinorTicks" value="true" type="checkbox" />Only major</li>
+ <li><input name="plotBands" value="true" type="checkbox" />Plot Bands</li>
+ </ul>
+ </div>
+
+ <div>
+ <ul>
+ <li><input name="barPadding" value="2" type="checkbox" checked />Gap between bars</li>
+ <!-- value for showContour is speed at which to fade lines in/out -->
+ <li><input name="showContour" value="500" type="checkbox" checked />Comparison Line</li>
+ </ul>
+ </div>
+
+ <div class="tooltip">
+ <table>
+ <tr>
+ <td>Age: </td><td><div class="tooltip-item" id="tooltipAge">&nbsp;</div></td>
+ </tr>
+ <tr>
+ <td>Male: </td><td><div class="tooltip-item" id="tooltipMale">&nbsp;</div></td>
+ </tr>
+ <tr>
+ <td>Female: </td><td><div class="tooltip-item" id="tooltipFemale">&nbsp;</div></td>
+ </tr>
+ <tr>
+ <td>Ratio: </td><td><div class="tooltip-item" id="tooltipRatio">&nbsp;</div></td>
+ </tr>
+ </table>
+ </div>
+ </td>
+
+ <td class="chart">
+ <div class="chart-container">
+ <div id="chart1"></div>
+ <div class="jqplot-datestamp"></div>
+ </div>
+ </td>
+
+ </table>
+
+ <pre class="code brush:js"></pre>
+
+
+
+ <script class="code" type="text/javascript" language="javascript">
+ $(document).ready(function(){
+
+ // the "x" values from the data will go into the ticks array.
+ // ticks should be strings for this case where we have values like "75+"
+ var ticks = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75+", ""];
+
+ // The "y" values of the data are put into seperate series arrays.
+ var male = [0.635441, 1.066868, 0.889602, 0.816883, 1.016458, 0.916705, 0.79569, 0.970443, 1.046451, 1.335686, 0.926962, 0.936646, 0.919405, 0.722027, 0.896342, 0.993397, 0.613794, 0.916921, 0.828748, 0.43487, 0.391652, 0.517303, 0.507104, 0.336168, 0.554176, 0.691826, 0.66553, 0.686232, 0.7097, 0.356915, 0.756028, 0.430155, 0.420597, 0.608589, 0.609348, 0.83607, 0.79871, 0.63388, 0.866719, 0.711042, 1.160429, 0.439268, 0.659694, 0.468406, 0.340002, 0.996662, 0.371047, 0.638918, 0.462334, 0.467053, 0.545638, 0.463275, 0.480992, 0.515747, 0.499415, 0.287639, 0.520332, 0.443779, 0.334986, 0.43161, 0.474405, 0.179186, 0.620127, 0.219074, 0.411669, 0.495684, 0.315231, 0.275056, 0.157341, 0.113926, 0.24991, 0.128113, 0.175297, 0.103093, 0.253292, 0.988836];
+ var female = [0.767078, 0.679554, 1.064493, 0.915063, 0.860792, 0.785728, 0.892471, 0.687886, 1.055313, 0.921839, 0.659624, 1.14516, 0.910735, 1.279864, 0.714669, 0.873929, 0.928453, 0.595752, 1.093534, 0.501142, 0.52829, 0.411606, 0.633309, 0.616121, 0.621781, 0.621598, 0.638378, 0.703724, 0.742589, 0.48523, 0.735727, 0.898816, 0.740614, 0.991105, 1.48909, 1.226996, 1.020624, 0.737742, 0.946817, 0.69129, 0.933744, 0.957472, 0.793112, 0.581121, 0.767528, 1.031739, 1.202133, 0.626926, 0.959522, 0.594303, 1.202145, 0.611707, 0.480779, 0.383338, 0.532876, 0.849878, 0.52453, 0.660183, 0.25419, 0.137567, 0.762322, 0.490294, 0.463194, 0.566921, 0.353006, 0.730591, 0.34669, 0.271638, 0.309785, 0.152756, 0.478111, 0.177234, 0.269302, 0.396318, 0.194934, 1.683044];
+ var male2 = [0.230476, 0.175917, 0.225027, 0.40564, 0.408617, 0.495873, 0.441314, 0.282774, 0.47483, 0.393433, 0.580612, 0.220204, 0.514281, 0.32985, 0.514933, 0.507871, 0.398236, 0.362535, 0.603625, 0.528885, 0.550904, 0.87645, 0.857331, 0.713371, 0.703566, 0.703473, 0.858118, 0.751679, 0.832039, 0.752134, 1.202689, 1.069239, 1.051431, 0.732728, 0.992696, 0.828825, 0.723044, 0.857868, 1.088298, 0.86951, 0.914989, 0.549574, 0.672405, 0.637425, 0.530195, 0.706179, 0.941525, 0.576152, 0.913033, 0.647477, 0.734785, 0.441276, 0.583452, 0.537074, 0.7625, 0.662768, 0.307013, 0.384606, 0.470416, 0.22771, 0.470173, 0.152773, 0.338433, 0.348797, 0.10273, 0.285215, 0.139796, 0.186955, 0.143478, 0.178882, 0.141022, 0.1435, 0.146959, 0.056583, 0.05317, 0.784258];
+ var female2 = [0.203297, 0.298698, 0.452947, 0.783013, 0.50033, 0.53629, 0.451817, 0.69927, 0.741356, 0.545433, 0.559643, 0.334842, 0.443899, 0.437309, 0.584658, 0.451757, 0.509258, 0.73483, 0.640501, 0.698825, 0.803701, 1.018148, 1.504918, 0.701318, 0.781324, 1.792142, 0.968484, 1.3288, 1.059729, 1.079985, 2.245553, 1.080526, 1.122927, 1.512428, 1.296163, 1.047212, 0.988065, 1.239462, 1.521174, 1.05187, 1.253013, 0.983437, 1.181799, 1.090029, 0.718064, 1.578813, 1.121987, 1.010202, 1.438581, 1.051654, 1.656156, 0.732428, 0.719311, 0.742441, 0.623806, 0.643911, 0.579092, 0.472909, 0.683453, 0.39008, 0.437458, 0.464595, 0.385552, 0.520029, 0.240536, 0.457316, 0.339587, 0.203276, 0.282141, 0.19517, 0.283663, 0.12404, 0.147211, 0.141153, 0.177653, 1.193951];
+
+ // Custom color arrays are set up for each series to get the look that is desired.
+ // Two color arrays are created for the default and optional color which the user can pick.
+ var greenColors = ["#526D2C", "#77933C", "#C57225", "#C57225"];
+ var blueColors = ["#3F7492", "#4F9AB8", "#C57225", "#C57225"];
+
+ // To accomodate changing y axis, need to keep track of plot options, so they are defined separately
+ // changing axes will require recreating the plot, so need to keep
+ // track of state changes.
+ var plotOptions = {
+ // We set up a customized title which acts as labels for the left and right sides of the pyramid.
+ title: '<div style="float:left;width:50%;text-align:center">Male</div><div style="float:right;width:50%;text-align:center">Female</div>',
+
+ // by default, the series will use the green color scheme.
+ seriesColors: greenColors,
+
+ grid: {
+ drawBorder: false,
+ shadow: false,
+ background: 'white',
+ rendererOptions: {
+ // plotBands is an option of the pyramidGridRenderer.
+ // it will put banding at starting at a specified value
+ // along the y axis with an adjustable interval.
+ plotBands: {
+ show: false
+ }
+ }
+ },
+
+ // This makes the effective starting value of the axes 0 instead of 1.
+ // For display, the y axis will use the ticks we supplied.
+ defaultAxisStart: 0,
+ seriesDefaults: {
+ renderer: $.jqplot.PyramidRenderer,
+ rendererOptions: {
+ barPadding: 2,
+ offsetBars: true
+ },
+ yaxis: 'yaxis',
+ shadow: false
+ },
+
+ // We have 4 series, the left and right pyramid bars and
+ // the left and rigt overlay lines.
+ series: [
+ // For pyramid plots, the default side is right.
+ // We want to override here to put first set of bars
+ // on left.
+ {
+ rendererOptions:{
+ side: 'left',
+ synchronizeHighlight: 1
+ }
+ },
+ {
+ yaxis: 'y2axis',
+ rendererOptions:{
+ synchronizeHighlight: 0
+ }
+ },
+ // Pyramid series are filled bars by default.
+ // The overlay series will be unfilled lines.
+ {
+ rendererOptions: {
+ fill: false,
+ side: 'left'
+ }
+ },
+ {
+ yaxis: 'y2axis',
+ rendererOptions: {
+ fill: false
+ }
+ }
+ ],
+
+ // Set up all the y axes, since users are allowed to switch between them.
+ // The only axis that will show is the one that the series are "attached" to.
+ // We need the appropriate options for the others for when the user switches.
+ axes: {
+ xaxis: {
+ tickOptions: {},
+ rendererOptions: {
+ baselineWidth: 2
+ }
+ },
+ yaxis: {
+ label: 'Age',
+ // Use canvas label renderer to get rotated labels.
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ // include empty tick options, they will be used
+ // as users set options with plot controls.
+ tickOptions: {},
+ tickInterval: 5,
+ showMinorTicks: true,
+ ticks: ticks,
+ rendererOptions: {
+ category: false,
+ baselineWidth: 2
+ }
+ },
+ yMidAxis: {
+ label: 'Age',
+ // include empty tick options, they will be used
+ // as users set options with plot controls.
+ tickOptions: {},
+ tickInterval: 5,
+ showMinorTicks: true,
+ ticks: ticks,
+ rendererOptions: {
+ category: false,
+ baselineWidth: 2
+ }
+ },
+ y2axis: {
+ label: 'Age',
+ // Use canvas label renderer to get rotated labels.
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ // include empty tick options, they will be used
+ // as users set options with plot controls.
+ tickOptions: {},
+ tickInterval: 5,
+ showMinorTicks: true,
+ ticks: ticks,
+ rendererOptions: {
+ category: false,
+ baselineWidth: 2
+ }
+ }
+ }
+ };
+
+ // initialize form elements
+ // set these before attaching event handlers.
+
+ $('input[type=checkbox][name=gridsVertical]').attr('checked', true);
+ $('input[type=checkbox][name=gridsHorizontal]').attr('checked', true);
+ $('input[type=checkbox][name=showMinorTicks]').attr('checked', false);
+ $('input[type=checkbox][name=plotBands]').attr('checked', false);
+ $('input[type=checkbox][name=showContour]').attr('checked', true);
+ $('input[type=checkbox][name=barPadding]').attr('checked', true);
+ $('select[name=axisPosition]').val('both');
+ $('input[type=radio][name=backgroundColor]').attr('checked', false);
+ $('input[type=radio][name=backgroundColor][value=white]').attr('checked', true);
+ $('input[type=radio][name=backgroundColor]').attr('checked', false);
+ $('input[type=radio][name=backgroundColor][value=white]').attr('checked', true);
+ $('input[type=radio][name=seriesColor]').attr('checked', false);
+ $('input[type=radio][name=seriesColor][value=green]').attr('checked', true);
+
+ plot1 = $.jqplot('chart1', [male, female, male2, female2], plotOptions);
+
+
+ // After plot creation, check to see if contours should be displayed
+ checkContour();
+
+ //////
+ // The followng functions use verbose css selectors to make
+ // it clear exactly which elements they are binging to/operating on
+ //////
+
+ //////
+ // Function which checkes if the countour lines checkbox is checked.
+ // If not, hide the contour lines by hiding the canvases they are
+ // drawn on.
+ //////
+ function checkContour() {
+ if (!$('input[type=checkbox][name=showContour]').get(0).checked) {
+ plot1.series[2].canvas._elem.addClass('jqplot-series-hidden');
+ plot1.series[2].canvas._elem.hide();
+ plot1.series[3].canvas._elem.addClass('jqplot-series-hidden');
+ plot1.series[3].canvas._elem.hide();
+ }
+ }
+
+ $('select[name=axisPosition]').change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+
+ switch ($(this).val()) {
+ case 'both':
+ plotOptions.series[0].yaxis = 'yaxis';
+ plotOptions.series[1].yaxis = 'y2axis';
+ plotOptions.series[2].yaxis = 'yaxis';
+ plotOptions.series[3].yaxis = 'y2axis';
+ break;
+ case 'left':
+ plotOptions.series[0].yaxis = 'yaxis';
+ plotOptions.series[1].yaxis = 'yaxis';
+ plotOptions.series[2].yaxis = 'yaxis';
+ plotOptions.series[3].yaxis = 'yaxis';
+ break;
+ case 'right':
+ plotOptions.series[0].yaxis = 'y2axis';
+ plotOptions.series[1].yaxis = 'y2axis';
+ plotOptions.series[2].yaxis = 'y2axis';
+ plotOptions.series[3].yaxis = 'y2axis';
+ break;
+ case 'mid':
+ plotOptions.series[0].yaxis = 'yMidAxis';
+ plotOptions.series[1].yaxis = 'yMidAxis';
+ plotOptions.series[2].yaxis = 'yMidAxis';
+ plotOptions.series[3].yaxis = 'yMidAxis';
+ break;
+ default:
+ break;
+
+ }
+
+ plot1.destroy();
+ plot1 = $.jqplot('chart1', [male, female, male2, female2], plotOptions);
+ // Finally, check to see if we need to hide contour lines.
+ checkContour();
+ });
+
+ $('input[type=radio][name=backgroundColor]').change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ plot1.grid.background = $(this).val();
+ plotOptions.grid.background = $(this).val();
+ plot1.replot();
+ // Finally, check to see if we need to hide contour lines.
+ checkContour();
+ });
+
+ $('input[type=radio][name=seriesColor]').change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ if ($(this).val() === 'blue') {
+ // reset highlight colors so they will be recalculated.
+ plot1.series[0].highlightColors = [];
+ plot1.series[1].highlightColors = [];
+ // reset series color to properly calculate highlight color.
+ plot1.series[0].color = blueColors[0];
+ plot1.series[1].color = blueColors[1];
+ // to actually draw a new color, have to set the color on the shaperenderer.
+ plot1.series[0].renderer.shapeRenderer.fillStyle = blueColors[0];
+ plot1.series[1].renderer.shapeRenderer.fillStyle = blueColors[1];
+ // update plot options state.
+ plotOptions.seriesColors = blueColors;
+ }
+ else if ($(this).val() === 'green') {
+ // reset highlight colors so they will be recalculated.
+ plot1.series[0].highlightColors = [];
+ plot1.series[1].highlightColors = [];
+ // reset series color to properly calculate highlight color.
+ plot1.series[0].color = greenColors[0];
+ plot1.series[1].color = greenColors[1];
+ // to actually draw a new color, have to set the color on the shaperenderer.
+ plot1.series[0].renderer.shapeRenderer.fillStyle = greenColors[0];
+ plot1.series[1].renderer.shapeRenderer.fillStyle = greenColors[1];
+ // update plot options state.
+ plotOptions.seriesColors = blueColors;
+ }
+ plot1.replot();
+ // Finally, check to see if we need to hide contour lines.
+ checkContour();
+ });
+
+ $('input[type=checkbox][name=gridsVertical]').change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ plot1.axes.xaxis.tickOptions.showGridline = this.checked;
+ plotOptions.axes.xaxis.tickOptions.showGridline = this.checked;
+ plot1.replot();
+ // Finally, check to see if we need to hide contour lines.
+ checkContour();
+ });
+
+ $('input[type=checkbox][name=gridsHorizontal]').change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ plot1.axes.yaxis.tickOptions.showGridline = this.checked;
+ plot1.axes.y2axis.tickOptions.showGridline = this.checked;
+ plot1.axes.yMidAxis.tickOptions.showGridline = this.checked;
+ plotOptions.axes.yaxis.tickOptions.showGridline = this.checked;
+ plotOptions.axes.y2axis.tickOptions.showGridline = this.checked;
+ plotOptions.axes.yMidAxis.tickOptions.showGridline = this.checked;
+ plot1.replot();
+ // Finally, check to see if we need to hide contour lines.
+ checkContour();
+ });
+
+ $('input[type=checkbox][name=showMinorTicks]').change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ plot1.axes.yaxis.showMinorTicks = !this.checked;
+ plot1.axes.y2axis.showMinorTicks = !this.checked;
+ plot1.axes.yMidAxis.showMinorTicks = !this.checked;
+ plotOptions.axes.yaxis.showMinorTicks = !this.checked;
+ plotOptions.axes.y2axis.showMinorTicks = !this.checked;
+ plotOptions.axes.yMidAxis.showMinorTicks = !this.checked;
+ plot1.replot();
+ // Finally, check to see if we need to hide contour lines.
+ checkContour();
+ });
+
+ $('input[type=checkbox][name=plotBands]').change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ plot1.grid.plotBands.show = this.checked;
+ plotOptions.grid.rendererOptions.plotBands.show = this.checked;
+ plot1.replot();
+ // Finally, check to see if we need to hide contour lines.
+ checkContour();
+ });
+
+ $('input[type=checkbox][name=showContour]').change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ var speed = $(this).val();
+ if (this.checked) {
+ plot1.series[2].canvas._elem.removeClass('jqplot-series-hidden');
+ plot1.series[2].canvas._elem.fadeIn(speed);
+ plot1.series[3].canvas._elem.removeClass('jqplot-series-hidden');
+ plot1.series[3].canvas._elem.fadeIn(speed);
+ }
+ else {
+ plot1.series[2].canvas._elem.addClass('jqplot-series-hidden');
+ plot1.series[2].canvas._elem.fadeOut(speed);
+ plot1.series[3].canvas._elem.addClass('jqplot-series-hidden');
+ plot1.series[3].canvas._elem.fadeOut(speed);
+ }
+ });
+
+ $('input[type=checkbox][name=barPadding]').change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ if (this.checked) {
+ var val = parseFloat($(this).val());
+ plot1.series[0].barPadding = val;
+ plot1.series[1].barPadding = val;
+ plotOptions.seriesDefaults.rendererOptions.barPadding = val;
+ }
+ else {
+ plot1.series[0].barPadding = 0;
+ plot1.series[1].barPadding = 0;
+ plotOptions.seriesDefaults.rendererOptions.barPadding = 0;
+ }
+ plot1.replot();
+ // Finally, check to see if we need to hide contour lines.
+ checkContour();
+ });
+
+ // bind to the data highlighting event to make custom tooltip:
+ $('.jqplot-target').bind('jqplotDataHighlight', function(evt, seriesIndex, pointIndex, data) {
+ // Here, assume first series is male poulation and second series is female population.
+ // Adjust series indices as appropriate.
+ var malePopulation = Math.abs(plot1.series[0].data[pointIndex][1]);
+ var femalePopulation = Math.abs(plot1.series[1].data[pointIndex][1]);
+ var ratio = femalePopulation / malePopulation * 100;
+
+ $('#tooltipMale').stop(true, true).fadeIn(250).html(malePopulation.toPrecision(4));
+ $('#tooltipFemale').stop(true, true).fadeIn(250).html(femalePopulation.toPrecision(4));
+ $('#tooltipRatio').stop(true, true).fadeIn(250).html(ratio.toPrecision(4));
+
+ // Since we don't know which axis is rendererd and acive with out a little extra work,
+ // just use the supplied ticks array to get the age label.
+ $('#tooltipAge').stop(true, true).fadeIn(250).html(ticks[pointIndex]);
+ });
+
+ // bind to the data highlighting event to make custom tooltip:
+ $('.jqplot-target').bind('jqplotDataUnhighlight', function(evt, seriesIndex, pointIndex, data) {
+ // clear out all the tooltips.
+ $('.tooltip-item').stop(true, true).fadeOut(200).html('');
+ });
+
+ // add a date at the bottom.
+
+ var d = new $.jsDate();
+ $('div.jqplot-datestamp').html('Generated on '+d.strftime('%v'));
+
+ $("div.chart-container").resizable({delay:20});
+
+ $("div.chart-container").bind("resize", function(event, ui) {
+ plot1.replot();
+ });
+
+ });
+ </script>
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+
+ <!-- load the pyramidAxis and Grid renderers in production. pyramidRenderer will try to load via ajax if not present, but that is not optimal and depends on paths being set. -->
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidGridRenderer.min.js"></script>
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="jquery-ui/js/jquery-ui.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/kcp_pyramid2.html b/wqflask/wqflask/static/packages/jqplot/examples/kcp_pyramid2.html
new file mode 100644
index 00000000..3714fd0c
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/kcp_pyramid2.html
@@ -0,0 +1,578 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Pyramid Charts 2</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="kcp_pyramid.html">Previous</a> <a href="./">Examples</a> <a href="kcp_pyramid_by_age.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <link class="include" type="text/css" href="jquery-ui/css/smoothness/jquery-ui.min.css" rel="Stylesheet" />
+
+ <style type="text/css">
+ .chart-container {
+ border: 1px solid darkblue;
+ padding: 30px;
+ width: 600px;
+ height: 700px;
+ }
+
+ #chart1 {
+ width: 96%;
+ height: 96%;
+ }
+
+ .jqplot-datestamp {
+ font-size: 0.8em;
+ color: #777;
+ /* margin-top: 1em;
+ text-align: right;*/
+ font-style: italic;
+ position: absolute;
+ bottom: 15px;
+ right: 15px;
+ }
+
+ td.controls li {
+ list-style-type: none;
+ }
+
+ td.controls ul {
+ margin-top: 0.5em;
+ padding-left: 0.2em;
+ }
+
+ pre.code {
+ margin-top: 45px;
+ clear: both;
+ }
+
+ </style>
+
+ <table class="app">
+ <td class="controls">
+
+ <div style="margin-bottom: 15px;">
+ Axes:
+ <select name="axisPosition">
+ <option value="both">Left &amp; Right</option>
+ <option value = "left">Left</option>
+ <option value = "right">Right</option>
+ <option value = "mid">Mid</option>
+ </select>
+ </div>
+
+ <div>
+ Background Color:
+ <ul>
+ <li><input name="backgroundColor" value="white" type="radio" checked />Default</li>
+ <li><input name="backgroundColor" value="#efefef" type="radio" />Gray</li>
+ </ul>
+ </div>
+
+ <div>
+ Pyramid Color:
+ <ul>
+ <li><input name="seriesColor" value="green" type="radio" checked />Green</li>
+ <li><input name="seriesColor" value="blue" type="radio" />Blue</li>
+ </ul>
+ </div>
+
+ <div>
+ Grids:
+ <ul>
+ <li><input name="gridsVertical" value="vertical" type="checkbox" checked />Vertical</li>
+ <li><input name="gridsHorizontal" value="horizontal" type="checkbox" checked />Horizontal</li>
+ <li><input name="showMinorTicks" value="true" type="checkbox" />Only major</li>
+ <li><input name="plotBands" value="true" type="checkbox" />Plot Bands</li>
+ </ul>
+ </div>
+
+ <div>
+ <ul>
+ <li><input name="barPadding" value="4" type="checkbox" checked />Gap between bars</li>
+ <!-- value for showContour is speed at which to fade lines in/out -->
+ <li><input name="showContour" value="500" type="checkbox" />Comparison Line</li>
+ </ul>
+ </div>
+
+ <div class="tooltip">
+ <table>
+ <tr>
+ <td>Age: </td><td><div class="tooltip-item" id="tooltipAge">&nbsp;</div></td>
+ </tr>
+ <tr>
+ <td>Male: </td><td><div class="tooltip-item" id="tooltipMale">&nbsp;</div></td>
+ </tr>
+ <tr>
+ <td>Female: </td><td><div class="tooltip-item" id="tooltipFemale">&nbsp;</div></td>
+ </tr>
+ <tr>
+ <td>Ratio: </td><td><div class="tooltip-item" id="tooltipRatio">&nbsp;</div></td>
+ </tr>
+ </table>
+ </div>
+ </td>
+
+ <td class="chart">
+ <div class="chart-container">
+ <div id="chart1"></div>
+ <div class="jqplot-datestamp"></div>
+ </div>
+ </td>
+
+ </table>
+
+ <pre class="code brush:js"></pre>
+
+
+
+ <script class="code" type="text/javascript" language="javascript">
+ $(document).ready(function(){
+
+ // the "x" values from the data will go into the ticks array.
+ // ticks should be strings for this case where we have values like "75+"
+ var ticks = ["0-4", "5-9", "10-14", "15-19", "20-24", "25-29", "30-34", "35-39", "40-44", "45-49", "50-54", "55-59", "60-64", "65-69", "70-74", "75+"];
+
+ // The "y" values of the data are put into seperate series arrays.
+ var male = [4.425251, 5.064975, 4.401382, 3.787731, 2.306403, 3.110203, 2.824716, 3.846422, 3.067799, 2.936013, 2.505067, 2.018346, 1.90446, 1.357237, 0.909704, 0.988836];
+ var female = [4.28698, 4.343237, 4.710053, 3.99281, 2.811107, 3.191518, 4.855351, 4.62347, 4.032976, 4.414623, 3.210845, 2.426347, 2.635736, 1.811459, 1.515899, 1.683044];
+ var male2 = [1.445677, 2.088224, 2.159879, 2.401152, 3.701622, 3.897444, 5.048783, 4.367545, 3.304588, 3.784367, 3.059088, 2.052513, 1.412907, 0.934326, 0.541234, 0.784258];
+ var female2 =[2.238284, 2.974165, 2.360351, 3.03517, 4.80941, 6.229139, 7.257596, 5.847782, 5.226342, 6.201237, 4.474141, 2.769444, 2.048169, 1.47749, 0.87372, 1.193951];
+
+ // Custom color arrays are set up for each series to get the look that is desired.
+ // Two color arrays are created for the default and optional color which the user can pick.
+ var greenColors = ["#526D2C", "#77933C", "#C57225", "#C57225"];
+ var blueColors = ["#3F7492", "#4F9AB8", "#C57225", "#C57225"];
+
+ // To accomodate changing y axis, need to keep track of plot options.
+ // changing axes will require recreating the plot, so need to keep
+ // track of state changes.
+ var plotOptions = {
+ // We set up a customized title which acts as labels for the left and right sides of the pyramid.
+ title: '<div style="float:left;width:50%;text-align:center">Male</div><div style="float:right;width:50%;text-align:center">Female</div>',
+
+ // by default, the series will use the green color scheme.
+ seriesColors: greenColors,
+
+ grid: {
+ drawBorder: false,
+ shadow: false,
+ background: "white",
+ rendererOptions: {
+ // plotBands is an option of the pyramidGridRenderer.
+ // it will put banding at starting at a specified value
+ // along the y axis with an adjustable interval.
+ plotBands: {
+ show: false,
+ interval: 2
+ }
+ },
+ },
+
+ // This makes the effective starting value of the axes 0 instead of 1.
+ // For display, the y axis will use the ticks we supplied.
+ defaultAxisStart: 0,
+ seriesDefaults: {
+ renderer: $.jqplot.PyramidRenderer,
+ rendererOptions: {
+ barPadding: 4
+ },
+ yaxis: "yaxis",
+ shadow: false
+ },
+
+ // We have 4 series, the left and right pyramid bars and
+ // the left and rigt overlay lines.
+ series: [
+ // For pyramid plots, the default side is right.
+ // We want to override here to put first set of bars
+ // on left.
+ {
+ rendererOptions:{
+ side: 'left',
+ synchronizeHighlight: 1
+ }
+ },
+ {
+ yaxis: "y2axis",
+ rendererOptions:{
+ synchronizeHighlight: 0
+ }
+ },
+ // Pyramid series are filled bars by default.
+ // The overlay series will be unfilled lines.
+ {
+ rendererOptions: {
+ fill: false,
+ side: "left"
+ }
+ },
+ {
+ yaxis: "y2axis",
+ rendererOptions: {
+ fill: false
+ }
+ }
+ ],
+
+ // Set up all the y axes, since users are allowed to switch between them.
+ // The only axis that will show is the one that the series are "attached" to.
+ // We need the appropriate options for the others for when the user switches.
+ axes: {
+ xaxis: {
+ tickOptions: {},
+ rendererOptions: {
+ baselineWidth: 2
+ }
+ },
+ yaxis: {
+ label: "Age",
+ // Use canvas label renderer to get rotated labels.
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ // include empty tick options, they will be used
+ // as users set options with plot controls.
+ tickOptions: {},
+ showMinorTicks: true,
+ ticks: ticks,
+ rendererOptions: {
+ category: true,
+ baselineWidth: 2
+ }
+ },
+ yMidAxis: {
+ label: "Age",
+ // include empty tick options, they will be used
+ // as users set options with plot controls.
+ tickOptions: {},
+ showMinorTicks: true,
+ ticks: ticks,
+ rendererOptions: {
+ category: true,
+ baselineWidth: 2
+ }
+ },
+ y2axis: {
+ label: "Age",
+ // Use canvas label renderer to get rotated labels.
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ // include empty tick options, they will be used
+ // as users set options with plot controls.
+ tickOptions: {},
+ showMinorTicks: true,
+ ticks: ticks,
+ rendererOptions: {
+ category: true,
+ baselineWidth: 2
+ }
+ }
+ }
+ };
+
+ // initialize form elements
+ // set these before attaching event handlers.
+
+ $("input[type=checkbox][name=gridsVertical]").attr("checked", true);
+ $("input[type=checkbox][name=gridsHorizontal]").attr("checked", true);
+ $("input[type=checkbox][name=showMinorTicks]").attr("checked", false);
+ $("input[type=checkbox][name=plotBands]").attr("checked", false);
+ $("input[type=checkbox][name=showContour]").attr("checked", true);
+ $("input[type=checkbox][name=barPadding]").attr("checked", true);
+ $("select[name=axisPosition]").val("both");
+ $("input[type=radio][name=backgroundColor]").attr("checked", false);
+ $("input[type=radio][name=backgroundColor][value=white]").attr("checked", true);
+ $("input[type=radio][name=backgroundColor]").attr("checked", false);
+ $("input[type=radio][name=backgroundColor][value=white]").attr("checked", true);
+ $("input[type=radio][name=seriesColor]").attr("checked", false);
+ $("input[type=radio][name=seriesColor][value=green]").attr("checked", true);
+
+ plot1 = $.jqplot("chart1", [male, female, male2, female2], plotOptions);
+
+ // After plot creation, check to see if contours should be displayed
+ checkContour();
+
+ //////
+ // The followng functions use verbose css selectors to make
+ // it clear exactly which elements they are binging to/operating on
+ //////
+
+ //////
+ // Function which checkes if the countour lines checkbox is checked.
+ // If not, hide the contour lines.
+ //////
+ function checkContour() {
+ if (!$("input[type=checkbox][name=showContour]").get(0).checked) {
+ plot1.series[2].canvas._elem.addClass("jqplot-series-hidden");
+ plot1.series[2].canvas._elem.hide();
+ plot1.series[3].canvas._elem.addClass("jqplot-series-hidden");
+ plot1.series[3].canvas._elem.hide();
+ }
+ }
+
+ $("select[name=axisPosition]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+
+ switch ($(this).val()) {
+ case "both":
+ plotOptions.series[0].yaxis = "yaxis";
+ plotOptions.series[1].yaxis = "y2axis";
+ plotOptions.series[2].yaxis = "yaxis";
+ plotOptions.series[3].yaxis = "y2axis";
+ break;
+ case "left":
+ plotOptions.series[0].yaxis = "yaxis";
+ plotOptions.series[1].yaxis = "yaxis";
+ plotOptions.series[2].yaxis = "yaxis";
+ plotOptions.series[3].yaxis = "yaxis";
+ break;
+ case "right":
+ plotOptions.series[0].yaxis = "y2axis";
+ plotOptions.series[1].yaxis = "y2axis";
+ plotOptions.series[2].yaxis = "y2axis";
+ plotOptions.series[3].yaxis = "y2axis";
+ break;
+ case "mid":
+ plotOptions.series[0].yaxis = "yMidAxis";
+ plotOptions.series[1].yaxis = "yMidAxis";
+ plotOptions.series[2].yaxis = "yMidAxis";
+ plotOptions.series[3].yaxis = "yMidAxis";
+ break;
+ default:
+ break;
+
+ }
+
+ plot1.destroy();
+ plot1 = $.jqplot("chart1", [male, female, male2, female2], plotOptions);
+ // Finally, check to see if we need to hide contour lines.
+ checkContour();
+ });
+
+ $("input[type=radio][name=backgroundColor]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ plot1.grid.background = $(this).val();
+ plotOptions.grid.background = $(this).val();
+ plot1.replot();
+ // Finally, check to see if we need to hide contour lines.
+ checkContour();
+ });
+
+ $("input[type=radio][name=seriesColor]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ if ($(this).val() === "blue") {
+ // reset highlight colors so they will be recalculated.
+ plot1.series[0].highlightColors = [];
+ plot1.series[1].highlightColors = [];
+ // reset series color to properly calculate highlight color.
+ plot1.series[0].color = blueColors[0];
+ plot1.series[1].color = blueColors[1];
+ // to actually draw a new color, have to set the color on the shaperenderer.
+ plot1.series[0].renderer.shapeRenderer.fillStyle = blueColors[0];
+ plot1.series[1].renderer.shapeRenderer.fillStyle = blueColors[1];
+ // update plot options state.
+ plotOptions.seriesColors = blueColors;
+ }
+ else if ($(this).val() === "green") {
+ // reset highlight colors so they will be recalculated.
+ plot1.series[0].highlightColors = [];
+ plot1.series[1].highlightColors = [];
+ // reset series color to properly calculate highlight color.
+ plot1.series[0].color = greenColors[0];
+ plot1.series[1].color = greenColors[1];
+ // to actually draw a new color, have to set the color on the shaperenderer.
+ plot1.series[0].renderer.shapeRenderer.fillStyle = greenColors[0];
+ plot1.series[1].renderer.shapeRenderer.fillStyle = greenColors[1];
+ // update plot options state.
+ plotOptions.seriesColors = blueColors;
+ }
+ plot1.replot();
+ // Finally, check to see if we need to hide contour lines.
+ checkContour();
+ });
+
+
+ $("input[type=checkbox][name=gridsVertical]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ plot1.axes.xaxis.tickOptions.showGridline = this.checked;
+ plotOptions.axes.xaxis.tickOptions.showGridline = this.checked;
+ plot1.replot();
+ // Finally, check to see if we need to hide contour lines.
+ checkContour();
+ });
+
+ $("input[type=checkbox][name=gridsHorizontal]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ plot1.axes.yaxis.tickOptions.showGridline = this.checked;
+ plot1.axes.y2axis.tickOptions.showGridline = this.checked;
+ plot1.axes.yMidAxis.tickOptions.showGridline = this.checked;
+ plotOptions.axes.yaxis.tickOptions.showGridline = this.checked;
+ plotOptions.axes.y2axis.tickOptions.showGridline = this.checked;
+ plotOptions.axes.yMidAxis.tickOptions.showGridline = this.checked;
+ plot1.replot();
+ // Finally, check to see if we need to hide contour lines.
+ checkContour();
+ });
+
+ $("input[type=checkbox][name=showMinorTicks]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ plot1.axes.yaxis.showMinorTicks = !this.checked;
+ plot1.axes.y2axis.showMinorTicks = !this.checked;
+ plot1.axes.yMidAxis.showMinorTicks = !this.checked;
+ plotOptions.axes.yaxis.showMinorTicks = !this.checked;
+ plotOptions.axes.y2axis.showMinorTicks = !this.checked;
+ plotOptions.axes.yMidAxis.showMinorTicks = !this.checked;
+ plot1.replot();
+ // Finally, check to see if we need to hide contour lines.
+ checkContour();
+ });
+
+ $("input[type=checkbox][name=plotBands]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ plot1.grid.plotBands.show = this.checked;
+ plotOptions.grid.rendererOptions.plotBands.show = this.checked;
+ plot1.replot();
+ // Finally, check to see if we need to hide contour lines.
+ checkContour();
+ });
+
+ $("input[type=checkbox][name=showContour]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ var speed = $(this).val();
+ if (this.checked) {
+ plot1.series[2].canvas._elem.removeClass("jqplot-series-hidden");
+ plot1.series[2].canvas._elem.fadeIn(speed);
+ plot1.series[3].canvas._elem.removeClass("jqplot-series-hidden");
+ plot1.series[3].canvas._elem.fadeIn(speed);
+ }
+ else {
+ plot1.series[2].canvas._elem.addClass("jqplot-series-hidden");
+ plot1.series[2].canvas._elem.fadeOut(speed);
+ plot1.series[3].canvas._elem.addClass("jqplot-series-hidden");
+ plot1.series[3].canvas._elem.fadeOut(speed);
+ }
+ });
+
+ $("input[type=checkbox][name=barPadding]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ if (this.checked) {
+ var val = parseFloat($(this).val());
+ plot1.series[0].barPadding = val;
+ plot1.series[1].barPadding = val;
+ plotOptions.seriesDefaults.rendererOptions.barPadding = val;
+ }
+ else {
+ plot1.series[0].barPadding = 0;
+ plot1.series[1].barPadding = 0;
+ plotOptions.seriesDefaults.rendererOptions.barPadding = 0;
+ }
+ plot1.replot();
+ // Finally, check to see if we need to hide contour lines.
+ checkContour();
+ });
+
+ // bind to the data highlighting event to make custom tooltip:
+ $(".jqplot-target").bind("jqplotDataHighlight", function(evt, seriesIndex, pointIndex, data) {
+ // Here, assume first series is male poulation and second series is female population.
+ // Adjust series indices as appropriate.
+ var malePopulation = Math.abs(plot1.series[0].data[pointIndex][1]);
+ var femalePopulation = Math.abs(plot1.series[1].data[pointIndex][1]);
+ var ratio = femalePopulation / malePopulation * 100;
+
+ $("#tooltipMale").stop(true, true).fadeIn(250).html(malePopulation.toPrecision(4));
+ $("#tooltipFemale").stop(true, true).fadeIn(250).html(femalePopulation.toPrecision(4));
+ $("#tooltipRatio").stop(true, true).fadeIn(250).html(ratio.toPrecision(4));
+
+ // Since we don't know which axis is rendererd and acive with out a little extra work,
+ // just use the supplied ticks array to get the age label.
+ $("#tooltipAge").stop(true, true).fadeIn(250).html(ticks[pointIndex]);
+ });
+
+ // bind to the data highlighting event to make custom tooltip:
+ $(".jqplot-target").bind("jqplotDataUnhighlight", function(evt, seriesIndex, pointIndex, data) {
+ // clear out all the tooltips.
+ $(".tooltip-item").stop(true, true).fadeOut(200).html('');
+ });
+
+ // add a date at the bottom.
+
+ var d = new $.jsDate();
+ $("div.jqplot-datestamp").html("Generated on "+d.strftime("%v"));
+
+ $("div.chart-container").resizable({delay:20});
+
+ $("div.chart-container").bind("resize", function(event, ui) {
+ plot1.replot();
+ });
+
+ });
+ </script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+
+ <!-- load the pyramidAxis and Grid renderers in production. pyramidRenderer will try to load via ajax if not present, but that is not optimal and depends on paths being set. -->
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidGridRenderer.min.js"></script>
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="jquery-ui/js/jquery-ui.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/kcp_pyramid_by_age.html b/wqflask/wqflask/static/packages/jqplot/examples/kcp_pyramid_by_age.html
new file mode 100644
index 00000000..7fbf935e
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/kcp_pyramid_by_age.html
@@ -0,0 +1,859 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Pyramid Chart By Age</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+ <link class="include" type="text/css" href="jquery-ui/css/smoothness/jquery-ui.min.css" rel="Stylesheet" />
+ <link href="colorpicker/jquery.colorpicker.css" rel="stylesheet" type="text/css"/>
+
+ <style type="text/css">
+
+ html {
+ width: 100%;
+ height: 100%;
+ }
+
+ body {
+ width: 98%;
+ height: 97%;
+ margin: 6px;
+ }
+
+ .quintile-outer-container {
+ width: 97%;
+ height: 97%;
+ margin: auto;
+ }
+
+ .jqplot-chart {
+/* width: 400px;
+ height: 400px;*/
+ }
+
+ .quintile-toolbar .ui-icon {
+ float: right;
+ margin: 3px 5px;
+ }
+
+ table.stats-table td, table.highlighted-stats-table td {
+ background-color: rgb(230, 230, 230);
+ padding: 0.5em;
+ }
+
+ col.label {
+ width: 14em;
+ }
+
+ col.value {
+ width: 7em;
+ }
+
+ td.quintile-value {
+ width: 7em;
+ text-align: right;
+ }
+
+ table.stats-table td.tooltip-header, table.highlighted-stats-table td.tooltip-header {
+ background-color: rgb(200, 200, 200);
+ }
+
+ table.stats-table, table.highlighted-stats-table, td.contour-cell {
+ font-size: 0.7em;
+ }
+
+ td.contour-cell {
+ height: 1.5em;
+ padding-left: 20px;
+ padding-bottom: 1.5em;
+ }
+
+ table.highlighted-stats-table {
+ margin-top: 15px;
+ }
+
+ div.stats-cell div.input {
+ font-size: 0.7em;
+ margin-top: 1.5em;
+ }
+
+ div.content-container {
+ padding-left: 230px; /* LC width */
+ padding-right: 300px; /* RC width */
+ height: 100%;
+ }
+
+ div.content-container .column {
+ position: relative;
+ float: left;
+ }
+
+ div.controls {
+ width: 170px; /* LC width */
+ right: 230px; /* LC width */
+ padding-left: 30px;
+ padding-right: 30px;
+ margin-left: -100%;
+ margin-top: 30px;
+ }
+
+ div.chart-cell {
+ width: 100%;
+ height: 100%;
+ }
+
+ div.stats-cell {
+ width: 270px; /* RC width */
+ margin-right: -300px; /* RC width */
+ padding-right: 30px;
+ margin-top: 30px;
+ }
+
+ div.controls, div.controls select {
+ font-size: 0.8em;
+ }
+
+ div.controls li {
+ list-style-type: none;
+ }
+
+ div.controls ul {
+ margin-top: 0.5em;
+ padding-left: 0.2em;
+ }
+
+ div.overlay-chart-container {
+ display: none;
+ z-index: 11;
+ position: fixed;
+ width: 800px;
+ left: 50%;
+ margin-left: -400px;
+ background-color: white;
+ }
+
+ div.overlay-chart-container div.ui-icon {
+ float: right;
+ margin: 3px 5px;
+ }
+
+ div.overlay-shadow {
+ display: none;
+ z-index: 10;
+ background-color: rgba(0, 0, 0, 0.8);
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ width: 100%;
+ height: 100%;
+ }
+
+ div.ui-colorpicker div.ui-dialog-titlebar {
+ padding: 0.1em 0.3em;
+ }
+
+ input.color {
+ display: none;
+ }
+
+ div.colorpicker-container span {
+ padding: 3px;
+ }
+
+ div.quintile-content {
+ width: 100%;
+ height: 100%;
+ }
+
+
+ @media print {
+ div.stats-cell {
+ vertical-align: top;
+ padding-top: 35px;
+ }
+
+ table.stats-table, table.stats-table td {
+ color: #aaaaaa;
+ border: 1px solid #bbbbbb;
+ border-collapse: collapse;
+ }
+
+ table.stats-table tr {
+ font-family: Verdana,Arial,sans-serif;
+ /*font-size: 0.7em;*/
+ }
+ }
+
+ </style>
+
+
+</head>
+<body>
+
+<!-- Example scripts go here -->
+
+
+ <div class="overlay-shadow"></div>
+
+ <div class="overlay-chart-container ui-corner-all">
+ <div class="overlay-chart-container-header ui-widget-header ui-corner-top">Right click the image to Copy or Save As...<div class="ui-icon ui-icon-closethick"></div></div>
+ <div class="overlay-chart-container-content ui-corner-bottom"></div>
+ </div>
+
+ <div class="quintile-outer-container ui-widget ui-corner-all">
+ <div class="quintile-toolbar ui-widget-header ui-corner-top">
+ <span class="quintile-title">Income Level:</span>
+ </div>
+ <div class="quintile-content ui-widget-content ui-corner-bottom">
+
+ <div class="content-container">
+
+
+ <div class="chart-cell column">
+ <div id="agesChart" class="jqplot-chart"></div>
+ </div>
+
+ <div class="controls column">
+ <table>
+ <tr>
+ <td>
+ Axes:
+ </td>
+ <td>
+ <select name="axisPosition">
+ <option value="both">Left &amp; Right</option>
+ <option value = "left">Left</option>
+ <option value = "right">Right</option>
+ <option value = "mid">Mid</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Colors:
+ </td>
+ <td>
+ <ul>
+ <li><input class="color" type="color" id="colorMale" /> Male</li>
+ <li><input class="color" type="color" id="colorFemale" /> Female</li>
+ <li><input class="color" type="color" id="colorBackground" /> Background</li>
+ <li><input class="color" type="color" id="colorPlotBands" /> Plot Bands</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Grids:
+ </td>
+ <td>
+ <ul>
+ <li><input name="gridsVertical" value="vertical" type="checkbox" />Vertical</li>
+ <li><input name="gridsHorizontal" value="horizontal" type="checkbox" />Horizontal</li>
+ <li><input name="showMinorTicks" value="true" type="checkbox" checked />Only major</li>
+ <li><input name="plotBands" value="true" type="checkbox" checked />Plot Bands</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <ul>
+ <li><input name="barPadding" value="2" type="checkbox" checked />Gap between bars</li>
+ <!-- value for showContour is speed at which to fade lines in/out -->
+ <li><input name="showContour" value="500" type="checkbox" />Comparison Line</li>
+ </ul>
+ </td>
+ </tr>
+ </table>
+ </div>
+
+ <div class="stats-cell column">
+ <table class="stats-table">
+ <colgroup>
+ <col class="label">
+ <col class="value">
+ </colgroup>
+ <tbody>
+ <tr>
+ <td class="ui-corner-tl">Mean Age:</td>
+ <td class="quintile-value summary-meanAge ui-corner-tr"></td>
+ </tr>
+ <tr>
+ <td>Sex Ratio:</td>
+ <td class="quintile-value summary-sexRatio"></td>
+ </tr>
+ <tr>
+ <td>Age Dependency Ratio:</td>
+ <td class="quintile-value summary-ageDependencyRatio"></td>
+ </tr>
+ <tr>
+ <td>Population, Total:</td>
+ <td class="quintile-value summary-populationTotal"></td>
+ </tr>
+ <tr>
+ <td>Population, Male:</td>
+ <td class="quintile-value summary-populationMale"></td>
+ </tr>
+ <tr>
+ <td class="ui-corner-bl">Population, Female:</td>
+ <td class="quintile-value summary-populationFemale ui-corner-br"></td>
+ </tr>
+ </tbody>
+ </table>
+ <table class="highlighted-stats-table">
+ <colgroup>
+ <col class="label">
+ <col class="value">
+ </colgroup>
+ <tbody>
+ <tr class="tooltip-header">
+ <td class="tooltip-header ui-corner-top" colspan="2">Highlighted Age: <span class="tooltip-item tooltipAge">&nbsp;</span></td>
+ </tr>
+ <tr>
+ <td>Population, Male: </td>
+ <td class="quintile-value"><span class="tooltip-item tooltipMale">&nbsp;</span></td>
+ </tr>
+ <tr>
+ <td>Population, Female: </td>
+ <td class="quintile-value"><span class="tooltip-item tooltipFemale">&nbsp;</span></td>
+ </tr>
+ <tr>
+ <td class="ui-corner-bl">Sex Ratio: </td>
+ <td class="quintile-value ui-corner-br"><span class="tooltip-item tooltipRatio">&nbsp;</span></td>
+ </tr>
+ <tbody>
+ </table>
+ </div>
+
+ </div>
+
+ </div>
+ </div>
+
+
+
+ <script class="code" type="text/javascript">
+ $(document).ready(function(){
+
+ // if browser supports canvas, show additional toolbar icons
+ if (!$.jqplot.use_excanvas) {
+ $('div.quintile-toolbar').append('<div class="ui-icon ui-icon-image"></div><div class="ui-icon ui-icon-print"></div>');
+ }
+
+ // for this demo, all data is same for each quintile.
+ // could do something like this to get the index of the quintile.
+ // <!-- var quintileIndex = parseInt(< ? php echo $_GET["qidx"]; ? >); -->
+
+ var male;
+ var female;
+ var summaryTable;
+ var sexRatios;
+ jsondata = [];
+
+ $.ajax({
+ type: "GET",
+ dataType: 'json',
+ async: false,
+ url: "ages.json",
+ contentType: "application/json",
+ success: function (retdata) {
+ // array of arrays of data for each quintile
+ // each quintile array has data for following:
+ // 0: summary table
+ // 1: male data
+ // 2: female data
+ // 3: ratios
+ jsondata = retdata;
+ },
+ error: function (xhr) { console.log("ERROR: ", xhr.statusText) }
+ });
+
+
+ // the "x" values from the data will go into the ticks array.
+ // ticks should be strings for this case where we have values like "75+"
+ var ticks = jsondata[4];
+
+ $('td.summary-meanAge').each(function(index) {
+ $(this).html($.jqplot.sprintf('%5.2f', jsondata[0][3]));
+ });
+
+ $('td.summary-sexRatio').each(function(index) {
+ $(this).html($.jqplot.sprintf('%5.2f', jsondata[3][0]));
+ });
+
+ $('td.summary-ageDependencyRatio').each(function(index) {
+ $(this).html($.jqplot.sprintf('%5.2f', jsondata[0][6]));
+ });
+
+ $('td.summary-populationTotal').each(function(index) {
+ $(this).html($.jqplot.sprintf("%'d", jsondata[0][0]));
+ });
+
+ $('td.summary-populationMale').each(function(index) {
+ $(this).html($.jqplot.sprintf("%'d", jsondata[0][1]));
+ });
+
+ $('td.summary-populationFemale').each(function(index) {
+ $(this).html($.jqplot.sprintf("%'d", jsondata[0][2]));
+ });
+
+ // These two variables should be removed outside of the jqplot.com example environment.
+ $.jqplot._noToImageButton = true;
+ $.jqplot._noCodeBlock = true;
+
+ // Custom color arrays are set up for each series to get the look that is desired.
+ // Two color arrays are created for the default and optional color which the user can pick.
+ var greenColors = ["#526D2C", "#77933C", "#C57225", "#C57225"];
+ var blueColors = ["#3F7492", "#4F9AB8", "#C57225", "#C57225"];
+
+ // To accomodate changing y axis, need to keep track of plot options.
+ // changing axes will require recreating the plot, so need to keep
+ // track of state changes.
+ var plotOptions = {
+ // We set up a customized title which acts as labels for the left and right sides of the pyramid.
+ title: {
+ text: '<span style="margin-left:25%;">Male</span><span style="margin-left:33%;">Female</span>',
+ textAlign: 'left'
+ },
+ // by default, the series will use the green color scheme.
+ seriesColors: greenColors,
+
+ grid: {
+ drawBorder: false,
+ shadow: false,
+ background: "#ffffff",
+ rendererOptions: {
+ // plotBands is an option of the pyramidGridRenderer.
+ // it will put banding at starting at a specified value
+ // along the y axis with an adjustable interval.
+ plotBands: {
+ show: true,
+ interval: 10,
+ color: 'rgb(245, 235, 215)'
+ }
+ }
+ },
+
+ // This makes the effective starting value of the axes 0 instead of 1.
+ // For display, the y axis will use the ticks we supplied.
+ defaultAxisStart: 0,
+ seriesDefaults: {
+ renderer: $.jqplot.PyramidRenderer,
+ rendererOptions: {
+ barPadding: 1.5,
+ offsetBars: true
+ },
+ yaxis: "yaxis",
+ shadow: false
+ },
+
+ // We have 4 series, the left and right pyramid bars and
+ // the left and rigt overlay lines.
+ series: [
+ // For pyramid plots, the default side is right.
+ // We want to override here to put first set of bars
+ // on left.
+ {
+ rendererOptions:{
+ side: "left",
+ synchronizeHighlight: 1
+ }
+ },
+ {
+ yaxis: "y2axis",
+ rendererOptions: {
+ synchronizeHighlight: 0
+ }
+ },
+ {
+ rendererOptions: {
+ fill: false,
+ side: 'left'
+ }
+ },
+ {
+ yaxis: 'y2axis',
+ rendererOptions: {
+ fill: false
+ }
+ }
+ ],
+ axesDefaults: {
+ tickOptions: {
+ showGridline: false
+ },
+ pad: 0,
+ rendererOptions: {
+ baselineWidth: 2
+ }
+ },
+
+ // Set up all the y axes, since users are allowed to switch between them.
+ // The only axis that will show is the one that the series are "attached" to.
+ // We need the appropriate options for the others for when the user switches.
+ axes: {
+ xaxis: {
+ tickOptions: {
+ formatter: $.jqplot.PercentTickFormatter,
+ formatString: '%.1f%%'
+ }
+ },
+ yaxis: {
+ label: "Age",
+ // Use canvas label renderer to get rotated labels.
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ // include empty tick options, they will be used
+ // as users set options with plot controls.
+ tickOptions: {},
+ showMinorTicks: false,
+ tickInterval: 5,
+ ticks: ticks,
+ rendererOptions: {
+ tickSpacingFactor: 15,
+ category: false
+ }
+ },
+ yMidAxis: {
+ label: "Age",
+ // include empty tick options, they will be used
+ // as users set options with plot controls.
+ tickOptions: {},
+ showMinorTicks: false,
+ tickInterval: 5,
+ ticks: ticks,
+ rendererOptions: {
+ tickSpacingFactor: 15,
+ category: false
+ }
+ },
+ y2axis: {
+ label: "Age",
+ // Use canvas label renderer to get rotated labels.
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ // include empty tick options, they will be used
+ // as users set options with plot controls.
+ tickOptions: {},
+ showMinorTicks: false,
+ tickInterval: 5,
+ ticks: ticks,
+ rendererOptions: {
+ tickSpacingFactor: 15,
+ category: false
+ }
+ }
+ }
+ };
+
+ // resize the chart container to fill the space
+ $('#agesChart').height($('div.chart-cell').height()*0.96);
+ $('#agesChart').width($('div.chart-cell').width()*0.97);
+
+ // $('#agesChart').jqplot([jsondata[1], jsondata[2]], plotOptions);
+ $.jqplot.config.addDomReference = true;
+ var plot1 = $.jqplot('agesChart', [jsondata[1], jsondata[2]], plotOptions);
+
+ $(window).resize (function(event, ui) {
+ // pass in resetAxes: true option to get rid of old ticks and axis properties
+ // which should be recomputed based on new plot size.
+ $('#agesChart').height($('div.chart-cell').height()*0.96);
+ $('#agesChart').width($('div.chart-cell').width()*0.97);
+ plot1.replot( { resetAxes: true } );
+ });
+
+ // initialize form elements
+ // set these before attaching event handlers.
+
+ $("input[type=checkbox][name=gridsVertical]").attr("checked", false);
+ $("input[type=checkbox][name=gridsHorizontal]").attr("checked", false);
+ $("input[type=checkbox][name=showMinorTicks]").attr("checked", true);
+ $("input[type=checkbox][name=plotBands]").attr("checked", true);
+ $("input[type=checkbox][name=showContour]").attr("checked", true);
+ $("input[type=checkbox][name=barPadding]").attr("checked", true);
+ $("select[name=axisPosition]").val("both");
+
+ //////
+ // The followng functions use verbose css selectors to make
+ // it clear exactly which elements they are binging to/operating on
+ //////
+
+ $("select[name=axisPosition]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+
+ var opts = {series:[{}, {}, {}, {}]};
+
+ switch ($(this).val()) {
+ case "both":
+ opts.series[0].yaxis = "yaxis";
+ opts.series[1].yaxis = "y2axis";
+ opts.series[2].yaxis = "yaxis";
+ opts.series[3].yaxis = "y2axis";
+ break;
+ case "left":
+ opts.series[0].yaxis = "yaxis";
+ opts.series[1].yaxis = "yaxis";
+ opts.series[2].yaxis = "yaxis";
+ opts.series[3].yaxis = "yaxis";
+ break;
+ case "right":
+ opts.series[0].yaxis = "y2axis";
+ opts.series[1].yaxis = "y2axis";
+ opts.series[2].yaxis = "y2axis";
+ opts.series[3].yaxis = "y2axis";
+ break;
+ case "mid":
+ opts.series[0].yaxis = "yMidAxis";
+ opts.series[1].yaxis = "yMidAxis";
+ opts.series[2].yaxis = "yMidAxis";
+ opts.series[3].yaxis = "yMidAxis";
+ break;
+ default:
+ break;
+
+ }
+
+ plot1.replot(opts);
+ });
+
+ // bind to the data highlighting event to make custom tooltip:
+ $(".jqplot-target").each(function(index){
+ $(this).bind("jqplotDataHighlight", function(evt, seriesIndex, pointIndex, data) {
+ // Here, assume first series is male poulation and second series is female population.
+ // Adjust series indices as appropriate.
+ var plot = $(this).data('jqplot');
+ var malePopulation = Math.abs(plot.series[0].data[pointIndex][1]) * jsondata[0][1];
+ var femalePopulation = Math.abs(plot.series[1].data[pointIndex][1]) * jsondata[0][2];
+ var malePopulation = jsondata[1][pointIndex] * jsondata[0][1];
+ var femalePopulation = jsondata[2][pointIndex] * jsondata[0][2];
+ // var ratio = femalePopulation / malePopulation * 100;
+ var ratio = jsondata[3][pointIndex];
+
+ $('.tooltipMale').stop(true, true).fadeIn(350).html($.jqplot.sprintf("%'d", malePopulation));
+ $('.tooltipFemale').stop(true, true).fadeIn(350).html($.jqplot.sprintf("%'d", femalePopulation));
+ $('.tooltipRatio').stop(true, true).fadeIn(350).html($.jqplot.sprintf('%5.2f', ratio));
+
+ // Since we don't know which axis is rendererd and acive with out a little extra work,
+ // just use the supplied ticks array to get the age label.
+ $('.tooltipAge').stop(true, true).fadeIn(350).html(ticks[pointIndex]);
+ });
+ });
+
+ // bind to the data highlighting event to make custom tooltip:
+ $(".jqplot-target").each(function() {
+ $(this).bind("jqplotDataUnhighlight", function(evt, seriesIndex, pointIndex, data) {
+ // clear out all the tooltips.
+ $(".tooltip-item").fadeOut(250);
+ });
+ });
+
+ $('.ui-icon-print').click(function(){
+ $(this).parent().next().print();
+ });
+
+
+ $("input[type=checkbox][name=gridsVertical]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ var opts = {axes: {xaxis: {tickOptions: {showGridline: this.checked}}}};
+ plot1.replot(opts);
+ });
+
+
+ $("input[type=checkbox][name=gridsHorizontal]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ var opts = {
+ axes: {
+ yaxis: {
+ tickOptions: {showGridline: this.checked}
+ },
+ y2axis: {
+ tickOptions: {showGridline: this.checked}
+ },
+ yMidAxis: {
+ tickOptions: {showGridline: this.checked}
+ }
+ }
+ };
+ plot1.replot(opts);
+ });
+
+ $("input[type=checkbox][name=plotBands]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ var opts = {grid:{ rendererOptions: {plotBands: { show: this.checked}}}};
+ plot1.replot(opts);
+ });
+
+ ////
+ // To-Do
+ //
+ // initialize form elements on reload.
+ // figure out what overlay line would be.
+ // have to adjust ticks to do show minor.
+ // make like kcp_pyramid.php
+ ////
+ $("input[type=checkbox][name=showMinorTicks]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ var opts = {
+ axes: {
+ yaxis: {
+ showMinorTicks: !this.checked
+ },
+ y2axis: {
+ showMinorTicks: !this.checked
+ },
+ yMidAxis: {
+ showMinorTicks: !this.checked
+ }
+ }
+ };
+ plot1.replot(opts);
+ });
+
+ $("input[type=checkbox][name=barPadding]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ if (this.checked) {
+ var val = parseFloat($(this).val());
+ var opts = {
+ seriesDefaults: {
+ rendererOptions: {
+ barPadding: val
+ }
+ }
+ };
+ }
+ else {
+ var opts = {
+ seriesDefaults: {
+ rendererOptions: {
+ barPadding: 0
+ }
+ }
+ };
+ }
+ plot1.replot(opts);
+ });
+
+
+ $('.ui-icon-image').each(function() {
+ $(this).bind('click', function(evt) {
+ var chart = $(this).closest('div.quintile-outer-container').find('div.jqplot-target');
+ var imgelem = chart.jqplotToImageElem();
+ var div = $('div.overlay-chart-container-content');
+ div.empty();
+ div.append(imgelem);
+ $('div.overlay-shadow').fadeIn(600);
+ div.parent().fadeIn(1000);
+ div = null;
+ });
+ });
+
+ $('div.overlay-chart-container-header div.ui-icon-closethick').click(function(){
+ var div = $('div.overlay-chart-container-content');
+ div.parent().fadeOut(600);
+ $('div.overlay-shadow').fadeOut(1000);
+ });
+
+ function applyColors () {
+ var opts = {series:[{}, {}], grid:{rendererOptions:{plotBands:{}}}};
+ opts.series[0].color = $('#colorMale').data('colorpicker').color.toCSS();
+ opts.series[1].color = $('#colorFemale').data('colorpicker').color.toCSS();
+ opts.grid.background = $('#colorBackground').data('colorpicker').color.toCSS();
+ opts.grid.rendererOptions.plotBands.color = $('#colorPlotBands').data('colorpicker').color.toCSS();
+
+ plot1.replot(opts);
+
+ };
+
+ // $('#colorMale').val(plot1.series[0].color);
+
+ $('#colorMale').colorpicker({
+ showOn: 'button',
+ showHeader: true,
+ showSwatches: true,
+ buttonColorize: true,
+ buttonImageOnly: true,
+ parts: 'full',
+ color: plot1.series[0].color,
+ onClose: applyColors
+
+ });
+
+ $('#colorFemale').colorpicker({
+ showOn: 'button',
+ showHeader: true,
+ showSwatches: true,
+ buttonColorize: true,
+ buttonImageOnly: true,
+ parts: 'full',
+ color: plot1.series[1].color,
+ onClose: applyColors
+
+ });
+
+ $('#colorBackground').colorpicker({
+ showOn: 'button',
+ showHeader: true,
+ showSwatches: true,
+ buttonColorize: true,
+ buttonImageOnly: true,
+ parts: 'full',
+ color: plot1.grid.background,
+ onClose: applyColors
+
+ });
+
+ $('#colorPlotBands').colorpicker({
+ showOn: 'button',
+ showHeader: true,
+ showSwatches: true,
+ buttonColorize: true,
+ buttonImageOnly: true,
+ parts: 'full',
+ color: plot1.grid.plotBands.color,
+ onClose: applyColors
+
+ });
+
+ });
+ </script>
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+
+ <!-- load the pyramidAxis and Grid renderers in production. pyramidRenderer will try to load via ajax if not present, but that is not optimal and depends on paths being set. -->
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidGridRenderer.min.js"></script>
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.json2.min.js"></script>
+ <script class="include" type="text/javascript" src="jquery-ui/js/jquery-ui.min.js"></script>
+ <script class="include" type="text/javascript" src="kcp.print.js"></script>
+
+ <script src="colorpicker/jquery.colorpicker.js"></script>
+
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/kcp_pyramid_by_age.php b/wqflask/wqflask/static/packages/jqplot/examples/kcp_pyramid_by_age.php
new file mode 100644
index 00000000..6e6bb3ba
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/kcp_pyramid_by_age.php
@@ -0,0 +1,862 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+<?php
+ $title = "Pyramid Chart By Age";
+?>
+
+ <title><?php print $title ?></title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
+ <link rel="stylesheet" type="text/css" href="examples.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+ <link class="include" type="text/css" href="jquery-ui/css/smoothness/jquery-ui.min.css" rel="Stylesheet" />
+ <link href="colorpicker/jquery.colorpicker.css" rel="stylesheet" type="text/css"/>
+
+ <style type="text/css">
+
+ html {
+ width: 100%;
+ height: 100%;
+ }
+
+ body {
+ width: 98%;
+ height: 97%;
+ margin: 6px;
+ }
+
+ .quintile-outer-container {
+ width: 97%;
+ height: 97%;
+ margin: auto;
+ }
+
+ .jqplot-chart {
+/* width: 400px;
+ height: 400px;*/
+ }
+
+ .quintile-toolbar .ui-icon {
+ float: right;
+ margin: 3px 5px;
+ }
+
+ table.stats-table td, table.highlighted-stats-table td {
+ background-color: rgb(230, 230, 230);
+ padding: 0.5em;
+ }
+
+ col.label {
+ width: 14em;
+ }
+
+ col.value {
+ width: 7em;
+ }
+
+ td.quintile-value {
+ width: 7em;
+ text-align: right;
+ }
+
+ table.stats-table td.tooltip-header, table.highlighted-stats-table td.tooltip-header {
+ background-color: rgb(200, 200, 200);
+ }
+
+ table.stats-table, table.highlighted-stats-table, td.contour-cell {
+ font-size: 0.7em;
+ }
+
+ td.contour-cell {
+ height: 1.5em;
+ padding-left: 20px;
+ padding-bottom: 1.5em;
+ }
+
+ table.highlighted-stats-table {
+ margin-top: 15px;
+ }
+
+ div.stats-cell div.input {
+ font-size: 0.7em;
+ margin-top: 1.5em;
+ }
+
+ div.content-container {
+ padding-left: 230px; /* LC width */
+ padding-right: 300px; /* RC width */
+ height: 100%;
+ }
+
+ div.content-container .column {
+ position: relative;
+ float: left;
+ }
+
+ div.controls {
+ width: 170px; /* LC width */
+ right: 230px; /* LC width */
+ padding-left: 30px;
+ padding-right: 30px;
+ margin-left: -100%;
+ margin-top: 30px;
+ }
+
+ div.chart-cell {
+ width: 100%;
+ height: 100%;
+ }
+
+ div.stats-cell {
+ width: 270px; /* RC width */
+ margin-right: -300px; /* RC width */
+ padding-right: 30px;
+ margin-top: 30px;
+ }
+
+ div.controls, div.controls select {
+ font-size: 0.8em;
+ }
+
+ div.controls li {
+ list-style-type: none;
+ }
+
+ div.controls ul {
+ margin-top: 0.5em;
+ padding-left: 0.2em;
+ }
+
+ div.overlay-chart-container {
+ display: none;
+ z-index: 11;
+ position: fixed;
+ width: 800px;
+ left: 50%;
+ margin-left: -400px;
+ background-color: white;
+ }
+
+ div.overlay-chart-container div.ui-icon {
+ float: right;
+ margin: 3px 5px;
+ }
+
+ div.overlay-shadow {
+ display: none;
+ z-index: 10;
+ background-color: rgba(0, 0, 0, 0.8);
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ width: 100%;
+ height: 100%;
+ }
+
+ div.ui-colorpicker div.ui-dialog-titlebar {
+ padding: 0.1em 0.3em;
+ }
+
+ input.color {
+ display: none;
+ }
+
+ div.colorpicker-container span {
+ padding: 3px;
+ }
+
+ div.quintile-content {
+ width: 100%;
+ height: 100%;
+ }
+
+
+ @media print {
+ div.stats-cell {
+ vertical-align: top;
+ padding-top: 35px;
+ }
+
+ table.stats-table, table.stats-table td {
+ color: #aaaaaa;
+ border: 1px solid #bbbbbb;
+ border-collapse: collapse;
+ }
+
+ table.stats-table tr {
+ font-family: Verdana,Arial,sans-serif;
+ /*font-size: 0.7em;*/
+ }
+ }
+
+ </style>
+
+
+</head>
+<body>
+
+<!-- Example scripts go here -->
+
+
+ <div class="overlay-shadow"></div>
+
+ <div class="overlay-chart-container ui-corner-all">
+ <div class="overlay-chart-container-header ui-widget-header ui-corner-top">Right click the image to Copy or Save As...<div class="ui-icon ui-icon-closethick"></div></div>
+ <div class="overlay-chart-container-content ui-corner-bottom"></div>
+ </div>
+
+ <div class="quintile-outer-container ui-widget ui-corner-all">
+ <div class="quintile-toolbar ui-widget-header ui-corner-top">
+ <span class="quintile-title">Income Level:</span>
+ </div>
+ <div class="quintile-content ui-widget-content ui-corner-bottom">
+
+ <div class="content-container">
+
+
+ <div class="chart-cell column">
+ <div id="agesChart" class="jqplot-chart"></div>
+ </div>
+
+ <div class="controls column">
+ <table>
+ <tr>
+ <td>
+ Axes:
+ </td>
+ <td>
+ <select name="axisPosition">
+ <option value="both">Left &amp; Right</option>
+ <option value = "left">Left</option>
+ <option value = "right">Right</option>
+ <option value = "mid">Mid</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Colors:
+ </td>
+ <td>
+ <ul>
+ <li><input class="color" type="color" id="colorMale" /> Male</li>
+ <li><input class="color" type="color" id="colorFemale" /> Female</li>
+ <li><input class="color" type="color" id="colorBackground" /> Background</li>
+ <li><input class="color" type="color" id="colorPlotBands" /> Plot Bands</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Grids:
+ </td>
+ <td>
+ <ul>
+ <li><input name="gridsVertical" value="vertical" type="checkbox" />Vertical</li>
+ <li><input name="gridsHorizontal" value="horizontal" type="checkbox" />Horizontal</li>
+ <li><input name="showMinorTicks" value="true" type="checkbox" checked />Only major</li>
+ <li><input name="plotBands" value="true" type="checkbox" checked />Plot Bands</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <ul>
+ <li><input name="barPadding" value="2" type="checkbox" checked />Gap between bars</li>
+ <!-- value for showContour is speed at which to fade lines in/out -->
+ <li><input name="showContour" value="500" type="checkbox" />Comparison Line</li>
+ </ul>
+ </td>
+ </tr>
+ </table>
+ </div>
+
+ <div class="stats-cell column">
+ <table class="stats-table">
+ <colgroup>
+ <col class="label">
+ <col class="value">
+ </colgroup>
+ <tbody>
+ <tr>
+ <td class="ui-corner-tl">Mean Age:</td>
+ <td class="quintile-value summary-meanAge ui-corner-tr"></td>
+ </tr>
+ <tr>
+ <td>Sex Ratio:</td>
+ <td class="quintile-value summary-sexRatio"></td>
+ </tr>
+ <tr>
+ <td>Age Dependency Ratio:</td>
+ <td class="quintile-value summary-ageDependencyRatio"></td>
+ </tr>
+ <tr>
+ <td>Population, Total:</td>
+ <td class="quintile-value summary-populationTotal"></td>
+ </tr>
+ <tr>
+ <td>Population, Male:</td>
+ <td class="quintile-value summary-populationMale"></td>
+ </tr>
+ <tr>
+ <td class="ui-corner-bl">Population, Female:</td>
+ <td class="quintile-value summary-populationFemale ui-corner-br"></td>
+ </tr>
+ </tbody>
+ </table>
+ <table class="highlighted-stats-table">
+ <colgroup>
+ <col class="label">
+ <col class="value">
+ </colgroup>
+ <tbody>
+ <tr class="tooltip-header">
+ <td class="tooltip-header ui-corner-top" colspan="2">Highlighted Age: <span class="tooltip-item tooltipAge">&nbsp;</span></td>
+ </tr>
+ <tr>
+ <td>Population, Male: </td>
+ <td class="quintile-value"><span class="tooltip-item tooltipMale">&nbsp;</span></td>
+ </tr>
+ <tr>
+ <td>Population, Female: </td>
+ <td class="quintile-value"><span class="tooltip-item tooltipFemale">&nbsp;</span></td>
+ </tr>
+ <tr>
+ <td class="ui-corner-bl">Sex Ratio: </td>
+ <td class="quintile-value ui-corner-br"><span class="tooltip-item tooltipRatio">&nbsp;</span></td>
+ </tr>
+ <tbody>
+ </table>
+ </div>
+
+ </div>
+
+ </div>
+ </div>
+
+
+
+ <script class="code" type="text/javascript">
+ $(document).ready(function(){
+
+ // if browser supports canvas, show additional toolbar icons
+ if (!$.jqplot.use_excanvas) {
+ $('div.quintile-toolbar').append('<div class="ui-icon ui-icon-image"></div><div class="ui-icon ui-icon-print"></div>');
+ }
+
+ // for this demo, all data is same for each quintile.
+ // could do something like this to get the index of the quintile.
+ // <!-- var quintileIndex = parseInt(< ? php echo $_GET["qidx"]; ? >); -->
+
+ var male;
+ var female;
+ var summaryTable;
+ var sexRatios;
+ jsondata = [];
+
+ $.ajax({
+ type: "GET",
+ dataType: 'json',
+ async: false,
+ url: "ages.json",
+ contentType: "application/json",
+ success: function (retdata) {
+ // array of arrays of data for each quintile
+ // each quintile array has data for following:
+ // 0: summary table
+ // 1: male data
+ // 2: female data
+ // 3: ratios
+ jsondata = retdata;
+ },
+ error: function (xhr) { console.log("ERROR: ", xhr.statusText) }
+ });
+
+
+ // the "x" values from the data will go into the ticks array.
+ // ticks should be strings for this case where we have values like "75+"
+ var ticks = jsondata[4];
+
+ $('td.summary-meanAge').each(function(index) {
+ $(this).html($.jqplot.sprintf('%5.2f', jsondata[0][3]));
+ });
+
+ $('td.summary-sexRatio').each(function(index) {
+ $(this).html($.jqplot.sprintf('%5.2f', jsondata[3][0]));
+ });
+
+ $('td.summary-ageDependencyRatio').each(function(index) {
+ $(this).html($.jqplot.sprintf('%5.2f', jsondata[0][6]));
+ });
+
+ $('td.summary-populationTotal').each(function(index) {
+ $(this).html($.jqplot.sprintf("%'d", jsondata[0][0]));
+ });
+
+ $('td.summary-populationMale').each(function(index) {
+ $(this).html($.jqplot.sprintf("%'d", jsondata[0][1]));
+ });
+
+ $('td.summary-populationFemale').each(function(index) {
+ $(this).html($.jqplot.sprintf("%'d", jsondata[0][2]));
+ });
+
+ // These two variables should be removed outside of the jqplot.com example environment.
+ $.jqplot._noToImageButton = true;
+ $.jqplot._noCodeBlock = true;
+
+ // Custom color arrays are set up for each series to get the look that is desired.
+ // Two color arrays are created for the default and optional color which the user can pick.
+ var greenColors = ["#526D2C", "#77933C", "#C57225", "#C57225"];
+ var blueColors = ["#3F7492", "#4F9AB8", "#C57225", "#C57225"];
+
+ // To accomodate changing y axis, need to keep track of plot options.
+ // changing axes will require recreating the plot, so need to keep
+ // track of state changes.
+ var plotOptions = {
+ // We set up a customized title which acts as labels for the left and right sides of the pyramid.
+ title: {
+ text: '<span style="margin-left:25%;">Male</span><span style="margin-left:33%;">Female</span>',
+ textAlign: 'left'
+ },
+ // by default, the series will use the green color scheme.
+ seriesColors: greenColors,
+
+ grid: {
+ drawBorder: false,
+ shadow: false,
+ background: "#ffffff",
+ rendererOptions: {
+ // plotBands is an option of the pyramidGridRenderer.
+ // it will put banding at starting at a specified value
+ // along the y axis with an adjustable interval.
+ plotBands: {
+ show: true,
+ interval: 10,
+ color: 'rgb(245, 235, 215)'
+ }
+ }
+ },
+
+ // This makes the effective starting value of the axes 0 instead of 1.
+ // For display, the y axis will use the ticks we supplied.
+ defaultAxisStart: 0,
+ seriesDefaults: {
+ renderer: $.jqplot.PyramidRenderer,
+ rendererOptions: {
+ barPadding: 1.5,
+ offsetBars: true
+ },
+ yaxis: "yaxis",
+ shadow: false
+ },
+
+ // We have 4 series, the left and right pyramid bars and
+ // the left and rigt overlay lines.
+ series: [
+ // For pyramid plots, the default side is right.
+ // We want to override here to put first set of bars
+ // on left.
+ {
+ rendererOptions:{
+ side: "left",
+ synchronizeHighlight: 1
+ }
+ },
+ {
+ yaxis: "y2axis",
+ rendererOptions: {
+ synchronizeHighlight: 0
+ }
+ },
+ {
+ rendererOptions: {
+ fill: false,
+ side: 'left'
+ }
+ },
+ {
+ yaxis: 'y2axis',
+ rendererOptions: {
+ fill: false
+ }
+ }
+ ],
+ axesDefaults: {
+ tickOptions: {
+ showGridline: false
+ },
+ pad: 0,
+ rendererOptions: {
+ baselineWidth: 2
+ }
+ },
+
+ // Set up all the y axes, since users are allowed to switch between them.
+ // The only axis that will show is the one that the series are "attached" to.
+ // We need the appropriate options for the others for when the user switches.
+ axes: {
+ xaxis: {
+ tickOptions: {
+ formatter: $.jqplot.PercentTickFormatter,
+ formatString: '%.1f%%'
+ }
+ },
+ yaxis: {
+ label: "Age",
+ // Use canvas label renderer to get rotated labels.
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ // include empty tick options, they will be used
+ // as users set options with plot controls.
+ tickOptions: {},
+ showMinorTicks: false,
+ tickInterval: 5,
+ ticks: ticks,
+ rendererOptions: {
+ tickSpacingFactor: 15,
+ category: false
+ }
+ },
+ yMidAxis: {
+ label: "Age",
+ // include empty tick options, they will be used
+ // as users set options with plot controls.
+ tickOptions: {},
+ showMinorTicks: false,
+ tickInterval: 5,
+ ticks: ticks,
+ rendererOptions: {
+ tickSpacingFactor: 15,
+ category: false
+ }
+ },
+ y2axis: {
+ label: "Age",
+ // Use canvas label renderer to get rotated labels.
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ // include empty tick options, they will be used
+ // as users set options with plot controls.
+ tickOptions: {},
+ showMinorTicks: false,
+ tickInterval: 5,
+ ticks: ticks,
+ rendererOptions: {
+ tickSpacingFactor: 15,
+ category: false
+ }
+ }
+ }
+ };
+
+ // resize the chart container to fill the space
+ $('#agesChart').height($('div.chart-cell').height()*0.96);
+ $('#agesChart').width($('div.chart-cell').width()*0.97);
+
+ // $('#agesChart').jqplot([jsondata[1], jsondata[2]], plotOptions);
+ $.jqplot.config.addDomReference = true;
+ var plot1 = $.jqplot('agesChart', [jsondata[1], jsondata[2]], plotOptions);
+
+ $(window).resize (function(event, ui) {
+ // pass in resetAxes: true option to get rid of old ticks and axis properties
+ // which should be recomputed based on new plot size.
+ $('#agesChart').height($('div.chart-cell').height()*0.96);
+ $('#agesChart').width($('div.chart-cell').width()*0.97);
+ plot1.replot( { resetAxes: true } );
+ });
+
+ // initialize form elements
+ // set these before attaching event handlers.
+
+ $("input[type=checkbox][name=gridsVertical]").attr("checked", false);
+ $("input[type=checkbox][name=gridsHorizontal]").attr("checked", false);
+ $("input[type=checkbox][name=showMinorTicks]").attr("checked", true);
+ $("input[type=checkbox][name=plotBands]").attr("checked", true);
+ $("input[type=checkbox][name=showContour]").attr("checked", true);
+ $("input[type=checkbox][name=barPadding]").attr("checked", true);
+ $("select[name=axisPosition]").val("both");
+
+ //////
+ // The followng functions use verbose css selectors to make
+ // it clear exactly which elements they are binging to/operating on
+ //////
+
+ $("select[name=axisPosition]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+
+ var opts = {series:[{}, {}, {}, {}]};
+
+ switch ($(this).val()) {
+ case "both":
+ opts.series[0].yaxis = "yaxis";
+ opts.series[1].yaxis = "y2axis";
+ opts.series[2].yaxis = "yaxis";
+ opts.series[3].yaxis = "y2axis";
+ break;
+ case "left":
+ opts.series[0].yaxis = "yaxis";
+ opts.series[1].yaxis = "yaxis";
+ opts.series[2].yaxis = "yaxis";
+ opts.series[3].yaxis = "yaxis";
+ break;
+ case "right":
+ opts.series[0].yaxis = "y2axis";
+ opts.series[1].yaxis = "y2axis";
+ opts.series[2].yaxis = "y2axis";
+ opts.series[3].yaxis = "y2axis";
+ break;
+ case "mid":
+ opts.series[0].yaxis = "yMidAxis";
+ opts.series[1].yaxis = "yMidAxis";
+ opts.series[2].yaxis = "yMidAxis";
+ opts.series[3].yaxis = "yMidAxis";
+ break;
+ default:
+ break;
+
+ }
+
+ plot1.replot(opts);
+ });
+
+ // bind to the data highlighting event to make custom tooltip:
+ $(".jqplot-target").each(function(index){
+ $(this).bind("jqplotDataHighlight", function(evt, seriesIndex, pointIndex, data) {
+ // Here, assume first series is male poulation and second series is female population.
+ // Adjust series indices as appropriate.
+ var plot = $(this).data('jqplot');
+ var malePopulation = Math.abs(plot.series[0].data[pointIndex][1]) * jsondata[0][1];
+ var femalePopulation = Math.abs(plot.series[1].data[pointIndex][1]) * jsondata[0][2];
+ var malePopulation = jsondata[1][pointIndex] * jsondata[0][1];
+ var femalePopulation = jsondata[2][pointIndex] * jsondata[0][2];
+ // var ratio = femalePopulation / malePopulation * 100;
+ var ratio = jsondata[3][pointIndex];
+
+ $('.tooltipMale').stop(true, true).fadeIn(350).html($.jqplot.sprintf("%'d", malePopulation));
+ $('.tooltipFemale').stop(true, true).fadeIn(350).html($.jqplot.sprintf("%'d", femalePopulation));
+ $('.tooltipRatio').stop(true, true).fadeIn(350).html($.jqplot.sprintf('%5.2f', ratio));
+
+ // Since we don't know which axis is rendererd and acive with out a little extra work,
+ // just use the supplied ticks array to get the age label.
+ $('.tooltipAge').stop(true, true).fadeIn(350).html(ticks[pointIndex]);
+ });
+ });
+
+ // bind to the data highlighting event to make custom tooltip:
+ $(".jqplot-target").each(function() {
+ $(this).bind("jqplotDataUnhighlight", function(evt, seriesIndex, pointIndex, data) {
+ // clear out all the tooltips.
+ $(".tooltip-item").fadeOut(250);
+ });
+ });
+
+ $('.ui-icon-print').click(function(){
+ $(this).parent().next().print();
+ });
+
+
+ $("input[type=checkbox][name=gridsVertical]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ var opts = {axes: {xaxis: {tickOptions: {showGridline: this.checked}}}};
+ plot1.replot(opts);
+ });
+
+
+ $("input[type=checkbox][name=gridsHorizontal]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ var opts = {
+ axes: {
+ yaxis: {
+ tickOptions: {showGridline: this.checked}
+ },
+ y2axis: {
+ tickOptions: {showGridline: this.checked}
+ },
+ yMidAxis: {
+ tickOptions: {showGridline: this.checked}
+ }
+ }
+ };
+ plot1.replot(opts);
+ });
+
+ $("input[type=checkbox][name=plotBands]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ var opts = {grid:{ rendererOptions: {plotBands: { show: this.checked}}}};
+ plot1.replot(opts);
+ });
+
+ ////
+ // To-Do
+ //
+ // initialize form elements on reload.
+ // figure out what overlay line would be.
+ // have to adjust ticks to do show minor.
+ // make like kcp_pyramid.php
+ ////
+ $("input[type=checkbox][name=showMinorTicks]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ var opts = {
+ axes: {
+ yaxis: {
+ showMinorTicks: !this.checked
+ },
+ y2axis: {
+ showMinorTicks: !this.checked
+ },
+ yMidAxis: {
+ showMinorTicks: !this.checked
+ }
+ }
+ };
+ plot1.replot(opts);
+ });
+
+ $("input[type=checkbox][name=barPadding]").change(function(){
+ // this refers to the html element we are binding to.
+ // $(this) is jQuery object on that element.
+ if (this.checked) {
+ var val = parseFloat($(this).val());
+ var opts = {
+ seriesDefaults: {
+ rendererOptions: {
+ barPadding: val
+ }
+ }
+ };
+ }
+ else {
+ var opts = {
+ seriesDefaults: {
+ rendererOptions: {
+ barPadding: 0
+ }
+ }
+ };
+ }
+ plot1.replot(opts);
+ });
+
+
+ $('.ui-icon-image').each(function() {
+ $(this).bind('click', function(evt) {
+ var chart = $(this).closest('div.quintile-outer-container').find('div.jqplot-target');
+ var imgelem = chart.jqplotToImageElem();
+ var div = $('div.overlay-chart-container-content');
+ div.empty();
+ div.append(imgelem);
+ $('div.overlay-shadow').fadeIn(600);
+ div.parent().fadeIn(1000);
+ div = null;
+ });
+ });
+
+ $('div.overlay-chart-container-header div.ui-icon-closethick').click(function(){
+ var div = $('div.overlay-chart-container-content');
+ div.parent().fadeOut(600);
+ $('div.overlay-shadow').fadeOut(1000);
+ });
+
+ function applyColors () {
+ var opts = {series:[{}, {}], grid:{rendererOptions:{plotBands:{}}}};
+ opts.series[0].color = $('#colorMale').data('colorpicker').color.toCSS();
+ opts.series[1].color = $('#colorFemale').data('colorpicker').color.toCSS();
+ opts.grid.background = $('#colorBackground').data('colorpicker').color.toCSS();
+ opts.grid.rendererOptions.plotBands.color = $('#colorPlotBands').data('colorpicker').color.toCSS();
+
+ plot1.replot(opts);
+
+ };
+
+ // $('#colorMale').val(plot1.series[0].color);
+
+ $('#colorMale').colorpicker({
+ showOn: 'button',
+ showHeader: true,
+ showSwatches: true,
+ buttonColorize: true,
+ buttonImageOnly: true,
+ parts: 'full',
+ color: plot1.series[0].color,
+ onClose: applyColors
+
+ });
+
+ $('#colorFemale').colorpicker({
+ showOn: 'button',
+ showHeader: true,
+ showSwatches: true,
+ buttonColorize: true,
+ buttonImageOnly: true,
+ parts: 'full',
+ color: plot1.series[1].color,
+ onClose: applyColors
+
+ });
+
+ $('#colorBackground').colorpicker({
+ showOn: 'button',
+ showHeader: true,
+ showSwatches: true,
+ buttonColorize: true,
+ buttonImageOnly: true,
+ parts: 'full',
+ color: plot1.grid.background,
+ onClose: applyColors
+
+ });
+
+ $('#colorPlotBands').colorpicker({
+ showOn: 'button',
+ showHeader: true,
+ showSwatches: true,
+ buttonColorize: true,
+ buttonImageOnly: true,
+ parts: 'full',
+ color: plot1.grid.plotBands.color,
+ onClose: applyColors
+
+ });
+
+ });
+ </script>
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
+
+ <!-- load the pyramidAxis and Grid renderers in production. pyramidRenderer will try to load via ajax if not present, but that is not optimal and depends on paths being set. -->
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidAxisRenderer.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidGridRenderer.js"></script>
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidRenderer.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.json2.js"></script>
+ <script class="include" type="text/javascript" src="jquery-ui/js/jquery-ui.min.js"></script>
+ <script class="include" type="text/javascript" src="kcp.print.js"></script>
+
+ <script src="colorpicker/jquery.colorpicker.js"></script>
+
+ <script type="text/javascript" src="example.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/kcp_quintiles.html b/wqflask/wqflask/static/packages/jqplot/examples/kcp_quintiles.html
new file mode 100644
index 00000000..72077554
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/kcp_quintiles.html
@@ -0,0 +1,663 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Quintile Pyramid Charts</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="kcp_pyramid_by_age.html">Previous</a> <a href="./">Examples</a> <a href="line-charts.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <link class="include" type="text/css" href="jquery-ui/css/smoothness/jquery-ui.min.css" rel="Stylesheet" />
+
+ <style type="text/css">
+
+ .quintile-outer-container {
+ width: 900px;
+ margin-bottom: 25px;
+ }
+
+ .jqplot-chart {
+ width: 500px;
+ height: 400px;
+ }
+
+ pre.code {
+ margin-top: 45px;
+ clear: both;
+ }
+
+ .quintile-toolbar .ui-icon {
+ float: right;
+ margin: 3px 5px;
+ }
+
+ table.stats-table td, table.highlighted-stats-table td {
+ background-color: rgb(230, 230, 230);
+ padding: 0.5em;
+ }
+
+ col.label {
+ width: 14em;
+ }
+
+ col.value {
+ width: 7em;
+ }
+
+ td.quintile-value {
+ width: 7em;
+ text-align: right;
+ }
+
+ table.stats-table td.tooltip-header, table.highlighted-stats-table td.tooltip-header {
+ background-color: rgb(200, 200, 200);
+ }
+
+ table.stats-table, table.highlighted-stats-table, td.contour-cell {
+ font-size: 0.7em;
+ }
+
+ td.contour-cell {
+ height: 1.5em;
+ padding-left: 20px;
+ padding-bottom: 1.5em;
+ }
+
+ table.highlighted-stats-table {
+ margin-top: 15px;
+ }
+
+ td.stats-cell {
+ padding-left: 20px;
+ padding-top: 20px;
+ vertical-align: top;
+
+ }
+
+ td.stats-cell div.input {
+ font-size: 0.7em;
+ margin-top: 1.5em;
+ }
+
+ div.overlay-chart-container {
+ display: none;
+ z-index: 11;
+ position: fixed;
+ width: 588px;
+ left: 50%;
+ margin-left: -294px;
+ background-color: white;
+ }
+
+ div.overlay-chart-container .ui-icon {
+ float: right;
+ margin: 3px 5px;
+ }
+
+ div.overlay-shadow {
+ display: none;
+ z-index: 10;
+ background-color: rgba(0, 0, 0, 0.8);
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ width: 100%;
+ height: 100%;
+ }
+
+ @media print {
+ td.stats-cell {
+ vertical-align: top;
+ padding-top: 35px;
+ }
+
+ table.stats-table, table.stats-table td {
+ color: #aaaaaa;
+ border: 1px solid #bbbbbb;
+ border-collapse: collapse;
+ }
+
+ table.stats-table tr {
+ font-family: Verdana,Arial,sans-serif;
+ /*font-size: 0.7em;*/
+ }
+ }
+
+ </style>
+
+ <div class="overlay-shadow"></div>
+
+ <div class="overlay-chart-container ui-corner-all">
+ <div class="overlay-chart-container-header ui-widget-header ui-corner-top">Right click the image to Copy or Save As...<div class="ui-icon ui-icon-closethick"></div></div>
+ <div class="overlay-chart-container-content ui-corner-bottom"></div>
+ </div>
+
+ <div class="quintile-outer-container ui-widget ui-corner-all">
+ <div class="quintile-toolbar ui-widget-header ui-corner-top">
+ <span class="quintile-title">Income Level: First Quintile</span>
+ <div class="quintile-toggle ui-icon ui-icon-arrowthickstop-1-n"></div>
+ <div class="ui-icon ui-icon-newwin"></div>
+ </div>
+ <div class="quintile-content ui-widget-content ui-corner-bottom">
+ <table class="quintile-display">
+ <tr>
+ <td class="chart-cell" rowspan="2">
+ <div class="jqplot-chart"></div>
+ </td>
+ <td class="stats-cell">
+ <table class="stats-table">
+ <colgroup>
+ <col class="label">
+ <col class="value">
+ </colgroup>
+ <tbody>
+ <tr>
+ <td class="ui-corner-tl">Mean Age:</td>
+ <td class="quintile-value summary-meanAge ui-corner-tr"></td>
+ </tr>
+ <tr>
+ <td>Sex Ratio:</td>
+ <td class="quintile-value summary-sexRatio"></td>
+ </tr>
+ <tr>
+ <td>Age Dependency Ratio:</td>
+ <td class="quintile-value summary-ageDependencyRatio"></td>
+ </tr>
+ <tr>
+ <td>Population, Total:</td>
+ <td class="quintile-value summary-populationTotal"></td>
+ </tr>
+ <tr>
+ <td>Population, Male:</td>
+ <td class="quintile-value summary-populationMale"></td>
+ </tr>
+ <tr>
+ <td class="ui-corner-bl">Population, Female:</td>
+ <td class="quintile-value summary-populationFemale ui-corner-br"></td>
+ </tr>
+ </tbody>
+ </table>
+ <table class="highlighted-stats-table">
+ <colgroup>
+ <col class="label">
+ <col class="value">
+ </colgroup>
+ <tbody>
+ <tr class="tooltip-header">
+ <td class="tooltip-header ui-corner-top" colspan="2">Highlighted Range: <span class="tooltip-item tooltipAge">&nbsp;</span></td>
+ </tr>
+ <tr>
+ <td>Population, Male: </td>
+ <td class="quintile-value"><span class="tooltip-item tooltipMale">&nbsp;</span></td>
+ </tr>
+ <tr>
+ <td>Population, Female: </td>
+ <td class="quintile-value"><span class="tooltip-item tooltipFemale">&nbsp;</span></td>
+ </tr>
+ <tr>
+ <td class="ui-corner-bl">Sex Ratio: </td>
+ <td class="quintile-value ui-corner-br"><span class="tooltip-item tooltipRatio">&nbsp;</span></td>
+ </tr>
+ <tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td class="contour-cell">
+ <input name="showContour" type="checkbox" /> Use as overlay on other charts?
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
+
+
+
+ <script class="code" type="text/javascript" language="javascript">
+ $(document).ready(function(){
+
+ // if browser supports canvas, show additional toolbar icons
+ if (!$.jqplot.use_excanvas) {
+ $('div.quintile-toolbar').append('<div class="ui-icon ui-icon-image"></div><div class="ui-icon ui-icon-print"></div>');
+ }
+
+ var quintHash = {0: 'First Quintile', 1: 'Second Quintile', 2: 'Third Quintile', 3: 'Fourth Quintile', 4: 'Fifth Quintile'}
+
+ // Add the needed containers:
+ for (var i=1; i<5; i++) {
+ var el = $('div.quintile-outer-container:last')
+ var clone = el.clone();
+ clone.find('span.quintile-title').html('Income Level: ' + quintHash[i]);
+ clone.insertAfter(el);
+ }
+
+ var male;
+ var female;
+ var summaryTable;
+ var sexRatios;
+ var quintiles;
+
+ $.ajax({
+ type: "GET",
+ dataType: 'json',
+ async: false,
+ url: "quintiles.json",
+ contentType: "application/json",
+ success: function (retdata) {
+ // array of arrays of data for each quintile
+ // each quintile array has data for following:
+ // 0: summary table
+ // 1: male data
+ // 2: female data
+ // 3: ratios
+ quintiles = retdata;
+ },
+ error: function (xhr) { console.log(xhr.statusText) }
+ });
+
+ $('td.summary-meanAge').each(function(index) {
+ $(this).html($.jqplot.sprintf('%5.2f', quintiles[index][0][3]));
+ });
+
+ $('td.summary-sexRatio').each(function(index) {
+ $(this).html($.jqplot.sprintf('%5.2f', quintiles[index][3][0]));
+ });
+
+ $('td.summary-ageDependencyRatio').each(function(index) {
+ $(this).html($.jqplot.sprintf('%5.2f', quintiles[index][0][6]));
+ });
+
+ $('td.summary-populationTotal').each(function(index) {
+ $(this).html($.jqplot.sprintf("%'d", quintiles[index][0][0]));
+ });
+
+ $('td.summary-populationMale').each(function(index) {
+ $(this).html($.jqplot.sprintf("%'d", quintiles[index][0][1]));
+ });
+
+ $('td.summary-populationFemale').each(function(index) {
+ $(this).html($.jqplot.sprintf("%'d", quintiles[index][0][2]));
+ });
+
+ // These two variables should be removed outside of the jqplot.com example environment.
+ $.jqplot._noToImageButton = true;
+ $.jqplot._noCodeBlock = true;
+
+ // the "x" values from the data will go into the ticks array.
+ // ticks should be strings for this case where we have values like "75+"
+ var ticks = ["0-4", "5-9", "10-14", "15-19", "20-24", "25-29", "30-34", "35-39", "40-44", "45-49", "50-54", "55-59", "60-64", "65-69", "70-74", "75-79", "80-84", "85-90", "90-94", "95+"];
+
+ // Custom color arrays are set up for each series to get the look that is desired.
+ // Two color arrays are created for the default and optional color which the user can pick.
+ var greenColors = ["#526D2C", "#77933C"];
+
+ // These options are common to all plots.
+ var plotOptions = {
+ // We set up a customized title which acts as labels for the left and right sides of the pyramid.
+ title: {
+ text: '<span style="position:relative;left:25%;">Male</span><span style="position:relative;left:50%;">Female</span>',
+ textAlign: 'left'
+ },
+ // by default, the series will use the green color scheme.
+ seriesColors: greenColors,
+
+ grid: {
+ drawBorder: false,
+ shadow: false,
+ background: "white",
+ rendererOptions: {
+ // plotBands is an option of the pyramidGridRenderer.
+ // it will put banding at starting at a specified value
+ // along the y axis with an adjustable interval.
+ plotBands: {
+ show: true,
+ interval: 2,
+ color: 'rgb(250, 240, 225)'
+ }
+ }
+ },
+
+ // This makes the effective starting value of the axes 0 instead of 1.
+ // For display, the y axis will use the ticks we supplied.
+ defaultAxisStart: 0,
+ seriesDefaults: {
+ renderer: $.jqplot.PyramidRenderer,
+ rendererOptions: {
+ barPadding: 4,
+ fill: false
+ },
+ yaxis: "yaxis",
+ shadow: false,
+ show: false
+ },
+
+ // We have 10 series, but only 2 will be shown at a time unless an overlay is turned on.
+ // Set up options for all series now, so when turned on they will look right.
+ series: [
+ // For pyramid plots, the default side is right.
+ // We want to override here to put first set of bars
+ // on left.
+ {
+ rendererOptions:{
+ side: "left"
+ }
+ },
+ {
+ yaxis: "y2axis"
+ },
+ {
+ rendererOptions: {
+ side: 'left'
+ }
+ },
+ {
+ yaxis: 'y2axis'
+ },
+ {
+ rendererOptions: {
+ side: 'left'
+ }
+ },
+ {
+ yaxis: 'y2axis'
+ },
+ {
+ rendererOptions: {
+ side: 'left'
+ }
+ },
+ {
+ yaxis: 'y2axis'
+ },
+ {
+ rendererOptions: {
+ side: 'left'
+ }
+ },
+ {
+ yaxis: 'y2axis'
+ }
+ ],
+ axesDefaults: {
+ tickOptions: {
+ showGridline: false
+ },
+ pad: 0,
+ rendererOptions: {
+ baselineWidth: 2
+ },
+ scaleToHiddenSeries: true
+ },
+
+ // Set up all the y axes, since users are allowed to switch between them.
+ // The only axis that will show is the one that the series are "attached" to.
+ // We need the appropriate options for the others for when the user switches.
+ axes: {
+ xaxis: {
+ tickOptions: {
+ formatter: $.jqplot.PercentTickFormatter,
+ formatString: '%d%%'
+ }
+ },
+ yaxis: {
+ label: "Age",
+ // Use canvas label renderer to get rotated labels.
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ // include empty tick options, they will be used
+ // as users set options with plot controls.
+ tickOptions: {},
+ showMinorTicks: true,
+ ticks: ticks,
+ rendererOptions: {
+ category: true
+ }
+ },
+ y2axis: {
+ label: "Age",
+ // Use canvas label renderer to get rotated labels.
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ // include empty tick options, they will be used
+ // as users set options with plot controls.
+ tickOptions: {},
+ showMinorTicks: true,
+ ticks: ticks,
+ rendererOptions: {
+ category: true
+ }
+ }
+ }
+ };
+
+ // These options are different for each series.
+ // sopts are common options for the overlay series in each plot.
+ var sopts = {color: '#C57225'};
+
+ // An array of 5 elements, one for each plot.
+ var plotOptsArr = [];
+
+ // Options for each individual plot
+ plotOptsArr[0] = $.extend(true, {}, plotOptions, {series:[{show: true, rendererOptions:{synchronizeHighlight: 1, fill: true}}, {show: true, rendererOptions: {synchronizeHighlight: 0, fill: true}}, sopts, sopts, sopts, sopts, sopts, sopts, sopts, sopts]});
+
+ plotOptsArr[1] = $.extend(true, {}, plotOptions, {series:[sopts, sopts, {show: true, rendererOptions:{synchronizeHighlight: 3, fill: true}}, {show: true, rendererOptions: {synchronizeHighlight: 2, fill: true}}, sopts, sopts, sopts, sopts, sopts, sopts]});
+
+ plotOptsArr[2] = $.extend(true, {}, plotOptions, {series:[sopts, sopts, sopts, sopts, {show: true, rendererOptions:{synchronizeHighlight: 5, fill: true}}, {show: true, rendererOptions: {synchronizeHighlight: 4, fill: true}}, sopts, sopts, sopts, sopts]});
+
+ plotOptsArr[3] = $.extend(true, {}, plotOptions, {series:[sopts, sopts, sopts, sopts, sopts, sopts, {show: true, rendererOptions:{synchronizeHighlight: 7, fill: true}}, {show: true, rendererOptions: {synchronizeHighlight: 6, fill: true}}, sopts, sopts]});
+
+ plotOptsArr[4] = $.extend(true, {}, plotOptions, {series:[sopts, sopts, sopts, sopts, sopts, sopts, sopts, sopts, {show: true, rendererOptions:{synchronizeHighlight: 9, fill: true}}, {show: true, rendererOptions: {synchronizeHighlight: 8, fill: true}}]});
+
+
+ // Create all the plots at one time.
+ // Use jQuery selecctor syntax to select all the plot targets. Here, no id's were specified on the targets, so they are auto generated.
+ // You can get a reference to the individual plot object by:
+ // var plot = $('div.jqplot-chart').eq(0).data('jqplot');
+ //
+ $('div.jqplot-chart').jqplot([quintiles[0][1], quintiles[0][2], quintiles[1][1], quintiles[1][2], quintiles[2][1], quintiles[2][2], quintiles[3][1], quintiles[3][2], quintiles[4][1], quintiles[4][2]], plotOptsArr[0], plotOptsArr[1], plotOptsArr[2], plotOptsArr[3], plotOptsArr[4]);
+
+ //////
+ // The followng functions use verbose css selectors to make
+ // it clear exactly which elements they are binging to/operating on
+ //////
+
+ // bind to the data highlighting event to make custom tooltip:
+ $(".jqplot-target").each(function(index){
+ $(this).bind("jqplotDataHighlight", function(evt, seriesIndex, pointIndex, data) {
+ // Here, assume first series is male poulation and second series is female population.
+ // Adjust series indices as appropriate.
+ var plot = $(this).data('jqplot');
+ var malePopulation = Math.abs(plot.series[0].data[pointIndex][1]) * quintiles[index][0][1];
+ var femalePopulation = Math.abs(plot.series[1].data[pointIndex][1]) * quintiles[index][0][2];
+ var malePopulation = quintiles[index][1][pointIndex] * quintiles[index][0][1];
+ var femalePopulation = quintiles[index][2][pointIndex] * quintiles[index][0][2];
+ // var ratio = femalePopulation / malePopulation * 100;
+ var ratio = quintiles[index][3][pointIndex+1];
+
+ $(this).closest('table').find('.tooltipMale').stop(true, true).fadeIn(350).html($.jqplot.sprintf("%'d", malePopulation));
+ $(this).closest('table').find('.tooltipFemale').stop(true, true).fadeIn(350).html($.jqplot.sprintf("%'d", femalePopulation));
+ $(this).closest('table').find('.tooltipRatio').stop(true, true).fadeIn(350).html($.jqplot.sprintf('%5.2f', ratio));
+
+ // Since we don't know which axis is rendererd and acive with out a little extra work,
+ // just use the supplied ticks array to get the age label.
+ $(this).closest('table').find('.tooltipAge').stop(true, true).fadeIn(350).html(ticks[pointIndex]);
+ });
+ });
+
+ // bind to the data highlighting event to make custom tooltip:
+ $(".jqplot-target").each(function() {
+ $(this).bind("jqplotDataUnhighlight", function(evt, seriesIndex, pointIndex, data) {
+ // clear out all the tooltips.
+ $(this).closest('table').find(".tooltip-item").fadeOut(250);
+ });
+ });
+
+ // Open and close the plot container.
+ $('.quintile-toggle').each(function() {
+ $(this).click(function(e) {
+ if ($(this).hasClass('ui-icon-arrowthickstop-1-n')) {
+ $(this).parent().next('.quintile-content').effect('blind', {mode:'hide'}, 600);
+ // $('.quintile-content').jqplotEffect('blind', {mode: 'hide'}, 600);
+ $(this).removeClass('ui-icon-arrowthickstop-1-n');
+ $(this).addClass('ui-icon-arrowthickstop-1-s');
+ }
+ else if ($(this).hasClass('ui-icon-arrowthickstop-1-s')) {
+ $(this).parent().next('.quintile-content').effect('blind', {mode:'show'}, 600, function() {
+ $(this).find('div.jqplot-chart').data('jqplot').replot();
+ });
+ // $('.quintile-content').jqplotEffect('blind', {mode: 'show'}, 150);
+ $(this).removeClass('ui-icon-arrowthickstop-1-s');
+ $(this).addClass('ui-icon-arrowthickstop-1-n');
+ }
+ });
+ });
+
+ // Handle each of the checkboxes to display overlays.
+ $('input[type=checkbox][name=showContour]').each(function(index) {
+ // on load/reload, clear all the check boxes.
+ $(this).get(0).checked = false;
+
+ // bind to change event event on the checkbox.
+ $(this).change(function(evt){
+
+ // if check box is checked.
+ if (this.checked) {
+ // uncheck all other check boxes.
+ $('input[type=checkbox][name=showContour]').each(function(cidx) {
+ if (cidx !== index) {
+ this.checked = false;
+ }
+ });
+
+ // On each chart, show the checked plot's overlay and
+ // show the original plot.
+ $('div.jqplot-chart').each(function(pidx) {
+ var plot = $(this).data('jqplot');
+
+ // Set up options to hide all series.
+ var seriesOpts = [{show: false}, {show: false}, {show: false}, {show: false}, {show: false}, {show: false}, {show: false}, {show: false}, {show: false}, {show: false}];
+
+ // Show series for this particular plot (pidx) and for the checked plot (index).
+ seriesOpts[2 * pidx].show = true;
+ seriesOpts[2 * pidx + 1].show = true;
+ seriesOpts[2 * index].show = true;
+ seriesOpts[2 * index + 1].show = true;
+
+ // replot with the new options.
+ plot.replot({series: seriesOpts});
+
+ });
+ }
+
+ // if check box is not checked.
+ else {
+ $('div.jqplot-chart').each(function(pidx) {
+ // Set up options to hide all series.
+ var seriesOpts = [{show: false}, {show: false}, {show: false}, {show: false}, {show: false}, {show: false}, {show: false}, {show: false}, {show: false}, {show: false}];
+ var plot = $(this).data('jqplot');
+
+ // Here showing only the series for this particular plot (pidx).
+ seriesOpts[2 * pidx].show = true;
+ seriesOpts[2 * pidx + 1].show = true;
+
+ // replot with the new options.
+ plot.replot({series: seriesOpts});
+ });
+ }
+ })
+ });
+
+ $('.ui-icon-print').click(function(){
+ $(this).parent().next().print();
+ });
+
+
+ $('.ui-icon-image').each(function() {
+ $(this).bind('click', function(evt) {
+ var chart = $(this).closest('div.quintile-outer-container').find('div.jqplot-target');
+ var imgelem = chart.jqplotToImageElem();
+ var div = $('div.overlay-chart-container-content');
+ div.empty();
+ div.append(imgelem);
+ $('div.overlay-shadow').fadeIn(600);
+ div.parent().fadeIn(1000);
+ div = null;
+ });
+ });
+
+
+ $('.ui-icon-newwin').each(function(index) {
+ $(this).bind('click', function(evt) {
+ var url = 'kcp_pyramid_by_age.html?qidx='+index;
+ window.open(url);
+ });
+ });
+
+ $('div.overlay-chart-container-header div.ui-icon-closethick').click(function(){
+ var div = $('div.overlay-chart-container-content');
+ div.parent().fadeOut(600);
+ $('div.overlay-shadow').fadeOut(1000);
+ });
+
+ });
+ </script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+
+ <!-- load the pyramidAxis and Grid renderers in production. pyramidRenderer will try to load via ajax if not present, but that is not optimal and depends on paths being set. -->
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidGridRenderer.min.js"></script>
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="jquery-ui/js/jquery-ui.js"></script>
+ <script class="include" type="text/javascript" src="kcp.print.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/line-charts.html b/wqflask/wqflask/static/packages/jqplot/examples/line-charts.html
new file mode 100644
index 00000000..0151bb23
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/line-charts.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Line Charts and Options</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="kcp_quintiles.html">Previous</a> <a href="./">Examples</a> <a href="mekkoCharts.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+<p>The most basic jqPlot chart takes a series of data and plots a line. No options need to be supplied. Data is passed in as an array of series. A series can be either an array of y values or an array of [x,y] data pairs. If y values only, x values are assigned like 1, 2, 3, ... Note, for this plot you don't need any plugins.</p>
+
+<div id="chart1" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+<p>The following plot uses a number of options to set the title, add axis labels, and shows how to use the canvasAxisLabelRenderer plugin to provide rotated axis labels.</p>
+
+<div id="chart2" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+<p>There are numerous line style options to control how the lines and markers are displayed.</p>
+
+<div id="chart3" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var plot1 = $.jqplot ('chart1', [[3,7,9,1,5,3,8,2,5]]);
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var plot2 = $.jqplot ('chart2', [[3,7,9,1,5,3,8,2,5]], {
+ // Give the plot a title.
+ title: 'Plot With Options',
+ // You can specify options for all axes on the plot at once with
+ // the axesDefaults object. Here, we're using a canvas renderer
+ // to draw the axis label which allows rotated text.
+ axesDefaults: {
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer
+ },
+ // Likewise, seriesDefaults specifies default options for all
+ // series in a plot. Options specified in seriesDefaults or
+ // axesDefaults can be overridden by individual series or
+ // axes options.
+ // Here we turn on smoothing for the line.
+ seriesDefaults: {
+ rendererOptions: {
+ smooth: true
+ }
+ },
+ // An axes object holds options for all axes.
+ // Allowable axes are xaxis, x2axis, yaxis, y2axis, y3axis, ...
+ // Up to 9 y axes are supported.
+ axes: {
+ // options for each axis are specified in seperate option objects.
+ xaxis: {
+ label: "X Axis",
+ // Turn off "padding". This will allow data point to lie on the
+ // edges of the grid. Default padding is 1.2 and will keep all
+ // points inside the bounds of the grid.
+ pad: 0
+ },
+ yaxis: {
+ label: "Y Axis"
+ }
+ }
+ });
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ // Some simple loops to build up data arrays.
+ var cosPoints = [];
+ for (var i=0; i<2*Math.PI; i+=1){
+ cosPoints.push([i, Math.cos(i)]);
+ }
+
+ var sinPoints = [];
+ for (var i=0; i<2*Math.PI; i+=0.4){
+ sinPoints.push([i, 2*Math.sin(i-.8)]);
+ }
+
+ var powPoints1 = [];
+ for (var i=0; i<2*Math.PI; i+=1) {
+ powPoints1.push([i, 2.5 + Math.pow(i/4, 2)]);
+ }
+
+ var powPoints2 = [];
+ for (var i=0; i<2*Math.PI; i+=1) {
+ powPoints2.push([i, -2.5 - Math.pow(i/4, 2)]);
+ }
+
+ var plot3 = $.jqplot('chart3', [cosPoints, sinPoints, powPoints1, powPoints2],
+ {
+ title:'Line Style Options',
+ // Set default options on all series, turn on smoothing.
+ seriesDefaults: {
+ rendererOptions: {
+ smooth: true
+ }
+ },
+ // Series options are specified as an array of objects, one object
+ // for each series.
+ series:[
+ {
+ // Change our line width and use a diamond shaped marker.
+ lineWidth:2,
+ markerOptions: { style:'dimaond' }
+ },
+ {
+ // Don't show a line, just show markers.
+ // Make the markers 7 pixels with an 'x' style
+ showLine:false,
+ markerOptions: { size: 7, style:"x" }
+ },
+ {
+ // Use (open) circlular markers.
+ markerOptions: { style:"circle" }
+ },
+ {
+ // Use a thicker, 5 pixel line and 10 pixel
+ // filled square markers.
+ lineWidth:5,
+ markerOptions: { style:"filledSquare", size:10 }
+ }
+ ]
+ }
+ );
+
+});
+</script>
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/mekkoCharts.html b/wqflask/wqflask/static/packages/jqplot/examples/mekkoCharts.html
new file mode 100644
index 00000000..91b3395b
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/mekkoCharts.html
@@ -0,0 +1,269 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Mekko Charts</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="line-charts.html">Previous</a> <a href="./">Examples</a> <a href="meritOrder.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+ <style type="text/css" media="screen">
+ body {
+ margin: 15px;
+ font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
+ }
+
+ p {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ }
+
+ .jqplot-target {
+ margin: 60px;
+ }
+
+ pre {
+ padding: 10px;
+ background-color: #efead9;
+ margin: 10px;
+ }
+ .jqplot-axis {
+ font-size: 0.8em;
+ }
+
+ .jqplot-mekko-barLabel {
+ font-size: 1em;
+ }
+
+ #chart2 .jqplot-axis {
+ font-size: 0.7em;
+ }
+
+ #chart3 .jqplot-title {
+ padding-bottom: 40px;
+ }
+ </style>
+<p>Data is specified per bar in the chart. You can specify data as an array of y values, or as an array of [label, value] pairs. Note that labels are used only on the first series. Labels on subsequent series are ignored:</p>
+<pre>
+bar1 = [['shirts', 8],['hats', 14],['shoes', 6],['gloves', 16],['dolls', 12]];
+bar2 = [15,6,9,13,6];
+bar3 = [['grumpy',4],['sneezy',2],['happy',7],['sleepy',9],['doc',7]];
+</pre>
+
+ <p>If you want to place labels for each bar under the axis, you use the barLabels option on the axes. The bar labels can be styled with the ".jqplot-mekko-barLabel" css class.</p>
+<pre>
+barLabels = ['Mickey Mouse', 'Donald Duck', 'Goofy'];
+axes:{xaxis:{barLabels:barLabels}}
+</pre>
+
+ <div id="chart1" style="width:500px; height:300px;"></div>
+
+ <p>You can add a secondary x axes, and the tick spacing of the axes can be separately controlled with the "tickMode" option. "bar" will produce tics at bar boundaries, "even" will produce evenly spaced ticks. If you set the axes max greater than the sum of the data range (the maximum x value), the plot will be padded. Note that you should set the max on both axes to the same value.</p>
+
+<pre>
+axes:{
+ xaxis:{
+ barLabels:barLabels,
+ max: 175
+ },
+ x2axis:{
+ show:true,
+ tickMode:'even',
+ max: 175
+ }
+}
+</pre>
+
+ <p>Here the borders between chart areas have been given a custom color using the "borderColor" option on the series renderer.</p>
+
+<pre>
+ seriesDefaults:{renderer:$.jqplot.MekkoRenderer, rendererOptions: {borderColor: '#dddddd'}}
+</pre>
+
+ <p>Additionally, the legend can be placed "outside" (the default for a mekko chart) or "inside" of the grid area with the "placement" option on the legend renderer.</p>
+
+<pre>
+legend:{
+ show:true,
+ rendererOptions:{placement: "insideGrid"},
+ location:'e'
+},
+</pre>
+
+ <div id="chart2" style="width:500px; height:300px;"></div>
+
+ <p>Legend labels can be specified independently of the series with the "labels" option on the legend. These will override any labels specified with the series. There are also options to control the number of rows and number of columns in the legend as well as placement.</p>
+
+ <p>Here the legend is positioned to the "north" and set to render 1 row tall (number of columns determined automatically). Note that an extra css specification was added to pad the bottom of the title of this chart to give room for the legend above the plot.</p>
+
+<pre>
+legendLabels = ['hotels', 'rides', 'buses', 'instruments', 'totes'];
+
+legend:{
+ show:true,
+ location: 'n',
+ labels: legendLabels,
+ rendererOptions:{numberRows: 1, placement: "outside"}
+},
+</pre>
+
+ <p>Also, the borders between the chart areas have been turned off with the "showBorders: false" option.</p>
+
+<pre>
+ seriesDefaults:{renderer:$.jqplot.MekkoRenderer, rendererOptions: {showBorders: false}}
+</pre>
+
+ <div id="chart3" style="width:500px; height:300px;"></div>
+
+<script type="text/javascript" class="code">
+$(document).ready(function(){
+ var bar1 = [['shirts', 8],['hats', 14],['shoes', 6],['gloves', 16],['dolls', 12]];
+ var bar2 = [15,6,9,13,6];
+ var bar3 = [['grumpy',4],['sneezy',2],['happy',7],['sleepy',9],['doc',7]];
+ var barLabels = ['Mickey Mouse', 'Donald Duck', 'Goofy'];
+
+ var plot1 = $.jqplot('chart1', [bar1, bar2, bar3], {
+ title: 'Revenue Breakdown per Character',
+ seriesDefaults:{renderer:$.jqplot.MekkoRenderer},
+ legend:{show:true},
+ axesDefaults:{
+ renderer:$.jqplot.MekkoAxisRenderer
+ },
+ axes:{
+ xaxis:{
+ barLabels:barLabels,
+ tickOptions:{formatString:'$%dM'}
+ }
+ }
+ });
+});
+</script>
+
+<script type="text/javascript" class="code">
+$(document).ready(function(){
+ var bar1 = [['shirts', 8],['hats', 14],['shoes', 6],['gloves', 16],['dolls', 12]];
+ var bar2 = [15,6,9,13,6];
+ var bar3 = [['grumpy',4],['sneezy',2],['happy',7],['sleepy',9],['doc',7]];
+ var barLabels = ['Mickey Mouse', 'Donald Duck', 'Goofy'];
+
+ var plot2 = $.jqplot('chart2', [bar1, bar2, bar3], {
+ title: 'Revenue Breakdown per Character',
+ seriesDefaults:{renderer:$.jqplot.MekkoRenderer, rendererOptions: {borderColor: '#dddddd'}},
+ legend:{
+ show:true,
+ rendererOptions:{placement: "insideGrid"},
+ location:'e'
+ },
+ axesDefaults:{
+ renderer:$.jqplot.MekkoAxisRenderer,
+ tickOptions:{}
+ },
+ axes:{
+ xaxis:{
+ barLabels:barLabels,
+ rendererOptions: {
+ barLabelOptions: {
+ angle: -35
+ },
+ barLabelRenderer: $.jqplot.CanvasAxisLabelRenderer
+ },
+ max: 175,
+ tickOptions:{formatString:'$%dM'}
+ },
+ x2axis:{
+ show:true,
+ tickMode:'even',
+ max: 175,
+ tickOptions:{formatString:'$%dM'}
+ }
+ }
+ });
+});
+</script>
+
+<script type="text/javascript" class="code">
+$(document).ready(function(){
+ var bar1 = [['shirts', 8],['hats', 14],['shoes', 6],['gloves', 16],['dolls', 12]];
+ var bar2 = [15,6,9,13,6];
+ var bar3 = [['grumpy',4],['sneezy',2],['happy',7],['sleepy',9],['doc',7]];
+ var barLabels = ['Mickey Mouse', 'Donald Duck', 'Goofy'];
+
+ var legendLabels = ['hotels', 'rides', 'buses', 'instruments', 'totes'];
+
+ var plot3 = $.jqplot('chart3', [bar1, bar2, bar3], {
+ title: 'Revenue Breakdown per Character',
+ seriesDefaults:{renderer:$.jqplot.MekkoRenderer, rendererOptions: {showBorders: false}},
+ legend:{
+ show:true,
+ location: 'n',
+ labels: legendLabels,
+ rendererOptions:{numberRows: 1, placement: "outside"}
+ },
+ axesDefaults:{
+ renderer:$.jqplot.MekkoAxisRenderer,
+ tickOptions:{showGridline:false}
+ },
+ axes:{
+ xaxis:{
+ tickMode:"bar",
+ tickOptions:{formatString:'$%dM'}
+ }
+ }
+ });
+});
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.mekkoRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.mekkoAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/meritOrder.html b/wqflask/wqflask/static/packages/jqplot/examples/meritOrder.html
new file mode 100644
index 00000000..67191726
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/meritOrder.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Merit Order Charts</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="mekkoCharts.html">Previous</a> <a href="./">Examples</a> <a href="meterGauge.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+ <style type="text/css" media="screen">
+ body {
+ margin: 15px;
+ font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
+ }
+
+ p {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ }
+
+ .jqplot-target {
+ margin: 60px;
+ }
+
+ pre {
+ padding: 10px;
+ background-color: #efead9;
+ margin: 10px;
+ }
+
+ #chart3 .jqplot-title {
+ padding-bottom: 40px;
+ }
+ </style>
+
+ <div id="chart1" style="width:500px; height:300px;"></div>
+
+<script type="text/javascript" class="code">
+$(document).ready(function(){
+ var data = [[473.34, 5.89], [232.35, 25.45], [2387.56, 28.55], [1484.8, 31.98], [0, 32.52], [0, 33.31], [0, 37.63], [3675.31, 47.98], [0, 61.06], [0, 61.6], [3035.76, 65.05], [3437.74, 70.62], [192.53, 75.32], [426.12, 84.5], [0, 117.45], [0, 139.08]];
+
+ plot1 = $.jqplot('chart1', [[data[0]], [data[1]], [data[2]], [data[3]]], {
+ seriesDefaults:{renderer:$.jqplot.MeritOrderRenderer},
+ legend:{show:false},
+ axesDefaults:{
+ renderer:$.jqplot.MeritOrderAxisRenderer
+ }
+ });
+});
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+ <script class="include" type="text/javascript" src="../plugins/jqplot.meritOrderRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.meritOrderAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/meterGauge.html b/wqflask/wqflask/static/packages/jqplot/examples/meterGauge.html
new file mode 100644
index 00000000..bbb278ef
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/meterGauge.html
@@ -0,0 +1,179 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Meter Gauge</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="meritOrder.html">Previous</a> <a href="./">Examples</a> <a href="multipleBarColors.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+
+<style type="text/css">
+
+.plot {
+ margin-bottom: 30px;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+#chart0 .jqplot-meterGauge-label {
+ font-size: 10pt;
+}
+
+#chart1 .jqplot-meterGauge-tick {
+ font-size: 6pt;
+}
+
+#chart2 .jqplot-meterGauge-tick {
+ font-size: 8pt;
+}
+
+#chart3 .jqplot-meterGauge-tick, #chart0 .jqplot-meterGauge-tic {
+ font-size: 10pt;
+}
+
+#chart4 .jqplot-meterGauge-tick, #chart4 .jqplot-meterGauge-label {
+ font-size: 12pt;
+}
+</style>
+
+
+<p>A meter gauge plot shows a data value in a speedometer style gauge. The "series" in consists of a single data value that positions the needle on the gauge. The span of the gauge will be automatically determined, or can be set with the "min" and "max" values in the "rendererOptions" of the series. The plot below also specifies a chart title and a "label" for the gauge.</p>
+
+<div id="chart0" class="plot" style="width:250px;height:170px;"></div>
+
+<p>For small gauges, it can be desirable to turn off the tick labels by setting the "showTickLabels" option in the rendererOptions to false. Also, colored interval bands can be specified. The interval ranges are specified as an array of values the "intervals" option and custom colors for each interval can be specified with the "intervalColors" option.</p>
+
+<div id="chart1" class="plot" style="width:120px;height:80px;"></div>
+
+<p>The inner and outer radii of the interval band will automatically adjust when tick Labels are turned on. Also, the gauge minimum and maximum can be specified with the "min" and "max" options in the rendererOptions.</p>
+
+<div id="chart3" class="plot" style="width:300px;height:180px;"></div>
+
+<p>The inner and outer radii of the interval band can also be specified with the "intervalInnerRadius" and "intervalOuterRadius" options. In the plot below, the "labelPosition" option was set to "bottom" to put the gauge label below the plot. The "labelHeightAdjust" option was set to -5 to raise the label slightly (5 pixels) to place it closer to the gauge.</p>
+<p>The gauge automatically resizes to best fit the container. The font size of the tick labels and gauge labels do not size to the container, however. The font size of the tick labels can be controlled by styling the css ".jqplot-meterGauge-ticks" class and the gauge label by the "jqplot-meterGauge-label" class.</p>
+<div id="chart4" class="plot" style="width:500px;height:300px;"></div>
+
+
+<script type="text/javascript" class="code">
+$(document).ready(function(){
+ s1 = [1];
+
+ plot0 = $.jqplot('chart0',[s1],{
+ title: 'Network Speed',
+ seriesDefaults: {
+ renderer: $.jqplot.MeterGaugeRenderer,
+ rendererOptions: {
+ label: 'MB/s'
+ }
+ }
+ });
+});
+</script>
+
+<script type="text/javascript" class="code">
+$(document).ready(function(){
+ s1 = [1];
+
+ plot1 = $.jqplot('chart1',[s1],{
+ seriesDefaults: {
+ renderer: $.jqplot.MeterGaugeRenderer,
+ rendererOptions: {
+ showTickLabels: false,
+ intervals:[2,3,4],
+ intervalColors:['#66cc66', '#E7E658', '#cc6666']
+ }
+ }
+ });
+});
+</script>
+
+<script type="text/javascript" class="code">
+$(document).ready(function(){
+ s1 = [322];
+
+ plot3 = $.jqplot('chart3',[s1],{
+ seriesDefaults: {
+ renderer: $.jqplot.MeterGaugeRenderer,
+ rendererOptions: {
+ min: 100,
+ max: 500,
+ intervals:[200, 300, 400, 500],
+ intervalColors:['#66cc66', '#93b75f', '#E7E658', '#cc6666']
+ }
+ }
+ });
+});
+</script>
+
+<script type="text/javascript" class="code">
+$(document).ready(function(){
+ s1 = [52200];
+
+ plot4 = $.jqplot('chart4',[s1],{
+ seriesDefaults: {
+ renderer: $.jqplot.MeterGaugeRenderer,
+ rendererOptions: {
+ label: 'Metric Tons per Year',
+ labelPosition: 'bottom',
+ labelHeightAdjust: -5,
+ intervalOuterRadius: 85,
+ ticks: [10000, 30000, 50000, 70000],
+ intervals:[22000, 55000, 70000],
+ intervalColors:['#66cc66', '#E7E658', '#cc6666']
+ }
+ }
+ });
+});
+</script>
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.meterGaugeRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/multipleBarColors.html b/wqflask/wqflask/static/packages/jqplot/examples/multipleBarColors.html
new file mode 100644
index 00000000..0b64f86b
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/multipleBarColors.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Bar Colors Example</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="meterGauge.html">Previous</a> <a href="./">Examples</a> <a href="openerNoHeader.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+<div id="chart1" class="example-chart" style="height:300px;width:500px"></div>
+<div id="chart2" class="example-chart" style="height:300px;width:500px"></div>
+<div id="chart3" class="example-chart" style="height:300px;width:500px"></div>
+
+<script type="text/javascript" class="code">
+$(document).ready(function(){
+ // A Bar chart from a single series will have all the bar colors the same.
+ var line1 = [['Nissan', 4],['Porche', 6],['Acura', 2],['Aston Martin', 5],['Rolls Royce', 6]];
+
+ $('#chart1').jqplot([line1], {
+ title:'Default Bar Chart',
+ seriesDefaults:{
+ renderer:$.jqplot.BarRenderer,
+ },
+ axes:{
+ xaxis:{
+ renderer: $.jqplot.CategoryAxisRenderer
+ }
+ }
+ });
+});
+</script>
+
+<script type="text/javascript" class="code">
+$(document).ready(function(){
+ var line1 = [['Nissan', 4],['Porche', 6],['Acura', 2],['Aston Martin', 5],['Rolls Royce', 6]];
+
+ $('#chart2').jqplot([line1], {
+ title:'Bar Chart with Varying Colors',
+ seriesDefaults:{
+ renderer:$.jqplot.BarRenderer,
+ rendererOptions: {
+ // Set the varyBarColor option to true to use different colors for each bar.
+ // The default series colors are used.
+ varyBarColor: true
+ }
+ },
+ axes:{
+ xaxis:{
+ renderer: $.jqplot.CategoryAxisRenderer
+ }
+ }
+ });
+});
+</script>
+
+<script type="text/javascript" class="code">
+$(document).ready(function(){
+ var line1 = [['Nissan', 4],['Porche', 6],['Acura', 2],['Aston Martin', 5],['Rolls Royce', 6]];
+
+ $('#chart3').jqplot([line1], {
+ title:'Bar Chart with Custom Colors',
+ // Provide a custom seriesColors array to override the default colors.
+ seriesColors:['#85802b', '#00749F', '#73C774', '#C7754C', '#17BDB8'],
+ seriesDefaults:{
+ renderer:$.jqplot.BarRenderer,
+ rendererOptions: {
+ // Set varyBarColor to tru to use the custom colors on the bars.
+ varyBarColor: true
+ }
+ },
+ axes:{
+ xaxis:{
+ renderer: $.jqplot.CategoryAxisRenderer
+ }
+ }
+ });
+});
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/nav.inc b/wqflask/wqflask/static/packages/jqplot/examples/nav.inc
new file mode 100644
index 00000000..d54a4bf9
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/nav.inc
@@ -0,0 +1,40 @@
+<div class="example-nav">
+ <?php
+ $tmpnames = scandir('./');
+ $skip = array('opener.php', 'bodyOpener.php', 'nav.php', 'closer.html', 'commonScripts.html', 'topbanner.html');
+
+ foreach( $tmpnames as $value) {
+ if (preg_match('/^[a-z0-9][a-z0-9_\-]+\.(html|php)$/i', $value)) {
+ if (! in_array($value, $skip)) {
+ $files[] = $value;
+ }
+ }
+ }
+ $fcount = count($files);
+ $parts = explode("/", $_SERVER['SCRIPT_NAME']);
+ $curfile = end($parts);
+ $prevfile = '';
+ $nextfile = '';
+ // print_r($files);
+
+ for ($i=0; $i<$fcount; $i++) {
+ if ($curfile == $files[$i]) {
+ if ($i == 0) {
+ $prevfile = $files[$fcount-1];
+ $nextfile = $files[1];
+ }
+ elseif ($i == $fcount-1) {
+ $prevfile = $files[$i-1];
+ $nextfile = $files[0];
+ }
+ else {
+ $prevfile = $files[$i-1];
+ $nextfile = $files[$i+1];
+ }
+ }
+ }
+
+ echo '<a href="'.$prevfile.'">Previous</a> <a href="./">Examples</a> <a href="'.$nextfile.'">Next</a>';
+
+ ?>
+</div>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/pie-donut-charts.html b/wqflask/wqflask/static/packages/jqplot/examples/pie-donut-charts.html
new file mode 100644
index 00000000..ddae1477
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/pie-donut-charts.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Pie and Donut Charts</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="openerNoHeader.html">Previous</a> <a href="./">Examples</a> <a href="pieTest.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+ <style type="text/css">
+
+ .jqplot-data-label {
+ /*color: #444;*/
+/* font-size: 1.1em;*/
+ }
+ </style>
+
+<p>jqPlot bakes up the best pie and donut charts you've ever tasted! Like bar and filled line plots, pie and donut slices highlight when you mouse over.</p>
+
+<div id="chart1" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+<p>Too many calories in that pie? Get all the taste without the filling! Highlighting and data labels are still supported. You can even cut out the slices!</p>
+
+<div id="chart2" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+<p>Coming straight from the same bakery, donut plots have nearly identical options as pie charts.</p>
+
+<div id="chart3" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var data = [
+ ['Heavy Industry', 12],['Retail', 9], ['Light Industry', 14],
+ ['Out of home', 16],['Commuting', 7], ['Orientation', 9]
+ ];
+ var plot1 = jQuery.jqplot ('chart1', [data],
+ {
+ seriesDefaults: {
+ // Make this a pie chart.
+ renderer: jQuery.jqplot.PieRenderer,
+ rendererOptions: {
+ // Put data labels on the pie slices.
+ // By default, labels show the percentage of the slice.
+ showDataLabels: true
+ }
+ },
+ legend: { show:true, location: 'e' }
+ }
+ );
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var data = [
+ ['Heavy Industry', 12],['Retail', 9], ['Light Industry', 14],
+ ['Out of home', 16],['Commuting', 7], ['Orientation', 9]
+ ];
+ var plot2 = jQuery.jqplot ('chart2', [data],
+ {
+ seriesDefaults: {
+ renderer: jQuery.jqplot.PieRenderer,
+ rendererOptions: {
+ // Turn off filling of slices.
+ fill: false,
+ showDataLabels: true,
+ // Add a margin to seperate the slices.
+ sliceMargin: 4,
+ // stroke the slices with a little thicker line.
+ lineWidth: 5
+ }
+ },
+ legend: { show:true, location: 'e' }
+ }
+ );
+});
+</script>
+
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var s1 = [['a',6], ['b',8], ['c',14], ['d',20]];
+ var s2 = [['a', 8], ['b', 12], ['c', 6], ['d', 9]];
+
+ var plot3 = $.jqplot('chart3', [s1, s2], {
+ seriesDefaults: {
+ // make this a donut chart.
+ renderer:$.jqplot.DonutRenderer,
+ rendererOptions:{
+ // Donut's can be cut into slices like pies.
+ sliceMargin: 3,
+ // Pies and donuts can start at any arbitrary angle.
+ startAngle: -90,
+ showDataLabels: true,
+ // By default, data labels show the percentage of the donut/pie.
+ // You can show the data 'value' or data 'label' instead.
+ dataLabels: 'value'
+ }
+ }
+ });
+});
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.pieRenderer.min.js"></script>
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.donutRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/pieTest.html b/wqflask/wqflask/static/packages/jqplot/examples/pieTest.html
new file mode 100644
index 00000000..43a11f13
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/pieTest.html
@@ -0,0 +1,187 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Pie Charts and Options</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="pie-donut-charts.html">Previous</a> <a href="./">Examples</a> <a href="pieTest4.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+
+ <div id="pie1" style="margin-top:20px; margin-left:20px; width:200px; height:200px;"></div>
+
+ <div id="pie2" style="margin-top:20px; margin-left:20px; width:200px; height:200px;"></div>
+
+ <div id="pie3" style="margin-top:20px; margin-left:20px; width:200px; height:200px;"></div>
+
+ <div id="pie4" style="margin-top:20px; margin-left:20px; width:200px; height:200px;"></div>
+
+ <div id="pie5" style="margin-top:20px; margin-left:20px; width:400px; height:240px;"></div>
+
+ <div id="pie6" style="margin-top:20px; margin-left:20px; width:400px; height:240px;"></div>
+
+ <div id="pie7" style="margin-top:20px; margin-left:20px; width:400px; height:240px;"></div>
+
+ <div id="pie8" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
+
+
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ var plot1 = $.jqplot('pie1', [[['a',25],['b',14],['c',7]]], {
+ gridPadding: {top:0, bottom:38, left:0, right:0},
+ seriesDefaults:{
+ renderer:$.jqplot.PieRenderer,
+ trendline:{ show:false },
+ rendererOptions: { padding: 8, showDataLabels: true }
+ },
+ legend:{
+ show:true,
+ placement: 'outside',
+ rendererOptions: {
+ numberRows: 1
+ },
+ location:'s',
+ marginTop: '15px'
+ }
+ });
+});</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ var plot2 = $.jqplot('pie2', [[['a',25],['b',14],['c',7]]], {
+ seriesDefaults:{ renderer:$.jqplot.PieRenderer, trendline:{ show: true } },
+ legend:{ show: true }
+ });
+});</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ var plot3 = $.jqplot('pie3', [[['a',1],['b',9],['c',1]]], {
+ seriesDefaults:{
+ shadow: false,
+ renderer:$.jqplot.PieRenderer,
+ rendererOptions:{
+ sliceMargin: 4,
+ // rotate the starting position of the pie around to 12 o'clock.
+ startAngle: -90
+ }
+ },
+ legend:{ show: true }
+ });
+});</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ var plot4 = $.jqplot('pie4', [[["a",0],["b",1],["c",.01]]], {
+ seriesDefaults:{
+ renderer:$.jqplot.PieRenderer,
+ rendererOptions:{ sliceMargin: 0 }
+ },
+ legend:{ show: true }
+ });
+});</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ var plot5 = $.jqplot('pie5', [[["none",23],["error",0],["click",5],["impression",25]]], {
+ seriesDefaults:{ renderer: $.jqplot.PieRenderer },
+ legend:{ show:true }
+ });
+});</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ var plot6 = $.jqplot('pie6', [[["none",0],["error",0],["click",0],["impression",0]]], {
+ seriesDefaults:{ renderer: $.jqplot.PieRenderer },
+ legend:{ show:true }
+ });
+});</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ var plot7 = $.jqplot('pie7', [[["all", 10]]], {
+ seriesDefaults:{
+ renderer:$.jqplot.PieRenderer,
+ rendererOptions: {
+ showDataLabels: true
+ }
+ },
+ legend:{show:true}
+ });
+});</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ var s1 = [['Sony',7], ['Samsumg',13.3], ['LG',14.7], ['Vizio',5.2], ['Insignia', 1.2]];
+
+ var plot8 = $.jqplot('pie8', [s1], {
+ grid: {
+ drawBorder: false,
+ drawGridlines: false,
+ background: '#ffffff',
+ shadow:false
+ },
+ axesDefaults: {
+
+ },
+ seriesDefaults:{
+ renderer:$.jqplot.PieRenderer,
+ rendererOptions: {
+ showDataLabels: true
+ }
+ },
+ legend: {
+ show: true,
+ rendererOptions: {
+ numberRows: 1
+ },
+ location: 's'
+ }
+ });
+});</script>
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pieRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/pieTest2.js b/wqflask/wqflask/static/packages/jqplot/examples/pieTest2.js
new file mode 100644
index 00000000..91073fe6
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/pieTest2.js
@@ -0,0 +1,80 @@
+$(document).ready(function(){
+
+ $.jqplot.config.enablePlugins = true;
+
+ s1 = [['a',2], ['b',6], ['c',7], ['d',10]];
+ s2 = [['a', 4], ['b', 7], ['c', 6], ['d', 3]];
+ s3 = [['a', 2], ['b', 1], ['c', 3], ['d', 3]];
+ s4 = [['a', 4], ['b', 3], ['c', 2], ['d', 1]];
+
+ s5 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
+
+ plot1 = $.jqplot('chart1', [s1], {
+ seriesDefaults:{
+ renderer:$.jqplot.PieRenderer
+ },
+ legend: {show:true}
+ });
+
+ plot2 = $.jqplot('chart2', [s2], {
+ seriesDefaults: {
+ renderer:$.jqplot.PieRenderer,
+ rendererOptions:{
+ sliceMargin: 4,
+ startAngle: -90
+ }
+ }
+ });
+
+ plot3 = $.jqplot('chart3', [s3], {
+ captureRightClick: true,
+ seriesDefaults:{
+ renderer:$.jqplot.PieRenderer,
+ shadow: false,
+ rendererOptions:{
+ startAngle: 90,
+ sliceMargin: 4,
+ highlightMouseDown: true
+ }
+ },
+ legend: {
+ show: true,
+ location: 'e',
+ placement: 'outside'
+ }
+ });
+
+ plot5 = $.jqplot('chart5', [s5], {
+ seriesDefaults:{
+ renderer:$.jqplot.PieRenderer
+ }
+ });
+
+ plot6 = $.jqplot('chart6', [[1,2,3,4]]);
+
+ $('#chart1').bind('jqplotDataClick',
+ function (ev, seriesIndex, pointIndex, data) {
+ $('#info1').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
+ }
+ );
+
+ $('#chart2').bind('jqplotDataHighlight',
+ function (ev, seriesIndex, pointIndex, data) {
+ $('#info2').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
+ }
+ );
+
+ $('#chart2').bind('jqplotDataUnhighlight',
+ function (ev) {
+ $('#info2').html('Nothing');
+ }
+ );
+
+ $('#chart3').bind('jqplotDataRightClick',
+ function (ev, seriesIndex, pointIndex, data) {
+ $('#info3').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
+ }
+ );
+
+ $(document).unload(function() {$('*').unbind(); });
+}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/pieTest4.html b/wqflask/wqflask/static/packages/jqplot/examples/pieTest4.html
new file mode 100644
index 00000000..ba8832c7
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/pieTest4.html
@@ -0,0 +1,258 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Pie Charts and Options 2</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="pieTest.html">Previous</a> <a href="./">Examples</a> <a href="point-labels.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <div id="chart1" style="margin-top:20px; margin-left:20px; width:460px; height:300px;"></div>
+
+ <pre class="code brush:js"></pre>
+
+ <div id="chart2" style="margin-top:20px; margin-left:20px; width:460px; height:300px;"></div>
+
+ <pre class="code brush:js"></pre>
+
+ <div id="chart3" style="margin-top:20px; margin-left:20px; width:460px; height:300px;"></div>
+ <pre class="code brush:js"></pre>
+
+ <div id="chart4" style="margin-top:20px; margin-left:20px; width:460px; height:300px;"></div>
+ <pre class="code brush:js"></pre>
+
+ <div id="chart5" style="margin-top:20px; margin-left:20px; width:460px; height:300px;"></div>
+ <pre class="code brush:js"></pre>
+
+ <div id="chart6" style="margin-top:20px; margin-left:20px; width:460px; height:300px;"></div>
+ <pre class="code brush:js"></pre>
+
+ <div id="chart7" style="margin-top:20px; margin-left:20px; width:460px; height:300px;"></div>
+ <pre class="code brush:js"></pre>
+
+ <div id="chart8" style="margin-top:20px; margin-left:20px; width:460px; height:300px;"></div>
+ <pre class="code brush:js"></pre>
+
+ <div id="chart9" style="margin-top:20px; margin-left:20px; width:460px; height:300px;"></div>
+ <pre class="code brush:js"></pre>
+
+ <div id="chart10" style="margin-top:20px; margin-left:20px; width:460px; height:300px;"></div>
+ <pre class="code brush:js"></pre>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ jQuery.jqplot.config.enablePlugins = true;
+ plot1 = jQuery.jqplot('chart1',
+ [[['Verwerkende FruedenStunde Companaziert Eine industrie', 9],['Retail', 8], ['Primaire producent', 7],
+ ['Out of home', 6],['Groothandel', 5], ['Grondstof', 4], ['Consument', 3], ['Bewerkende industrie', 2]]],
+ {
+ title: ' ',
+ seriesDefaults: {
+ shadow: false,
+ renderer: jQuery.jqplot.PieRenderer,
+ rendererOptions: { padding: 2, sliceMargin: 2, showDataLabels: false }
+ },
+ legend: { show:true, location: 'e' }
+ }
+ );
+});
+</script>
+
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ plot2 = jQuery.jqplot('chart2',
+ [[['Verwerkende industrie', 9],['Retail', 0], ['Primaire producent', 0],
+ ['Out of home', 0],['Groothandel', 0], ['Grondstof', 0], ['Consument', 3], ['Bewerkende industrie', 2]]],
+ {
+ title: ' ',
+ seriesDefaults: {
+ shadow: false,
+ renderer: jQuery.jqplot.PieRenderer,
+ rendererOptions: {
+ startAngle: 180,
+ sliceMargin: 4,
+ showDataLabels: true }
+ },
+ legend: { show:true, location: 'w' }
+ }
+ );
+});
+</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ plot3 = jQuery.jqplot('chart3',
+ [[['Verwerkende industrie', 9],['Retail', 0], ['Primaire producent', 0],
+ ['Out of home', 0],['Groothandel', 0], ['Grondstof', 0], ['Consument', 0], ['Bewerkende industrie', 2]]],
+ {
+ title: ' ',
+ seriesDefaults: {
+ shadow: false,
+ renderer: jQuery.jqplot.PieRenderer,
+ rendererOptions: {
+ sliceMargin: 4,
+ showDataLabels: true
+ }
+ },
+ legend: { show:true, location: 'e' }
+ }
+ );
+
+
+});
+</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ plot4 = jQuery.jqplot('chart4',
+ [[['Verwerkende industrie', 30],['Retail', 0], ['Primaire producent', 0],
+ ['Out of home', 0],['Groothandel', 0], ['Grondstof', 0], ['Consument', 0], ['Bewerkende industrie', 1]]],
+ {
+ title: ' ',
+ seriesDefaults: {shadow: false, renderer: jQuery.jqplot.PieRenderer, rendererOptions: { sliceMargin: 4, showDataLabels: true } },
+ legend: { show:true, location: 'e' }
+ }
+ );
+
+
+});
+</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ plot5 = jQuery.jqplot('chart5',
+ [[['Verwerkende industrie', 100],['Retail', 0], ['Primaire producent', 0],
+ ['Out of home', 0],['Groothandel', 0], ['Grondstof', 0], ['Consument', 0], ['Bewerkende industrie', 1]]],
+ {
+ title: ' ',
+ seriesDefaults: {shadow: false, renderer: jQuery.jqplot.PieRenderer, rendererOptions: { sliceMargin: 4, showDataLabels: true } },
+ legend: { show:true }
+ }
+ );
+});
+</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ plot6 = jQuery.jqplot('chart6',
+ [[['Verwerkende industrie', 100]]],
+ {
+ title: ' ',
+ seriesDefaults: {shadow: false, renderer: jQuery.jqplot.PieRenderer, rendererOptions: { sliceMargin: 4, showDataLabels: true } },
+ legend: { show:true }
+ }
+ );
+});
+</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ jQuery.jqplot.config.enablePlugins = true;
+ plot7 = jQuery.jqplot('chart7',
+ [[['Verwerkende industrie', 9],['Retail', 8], ['Primaire producent', 7],
+ ['Out of home', 6],['Groothandel', 5], ['Grondstof', 4], ['Consument', 3], ['Bewerkende industrie', 2]]],
+ {
+ title: ' ',
+ seriesDefaults: {shadow: true, renderer: jQuery.jqplot.PieRenderer, rendererOptions: { showDataLabels: true } },
+ legend: { show:true }
+ }
+ );
+});
+</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ plot8 = jQuery.jqplot('chart8',
+ [[['Verwerkende industrie', 100],['Retail', 0], ['Primaire producent', 0],
+ ['Out of home', 0],['Groothandel', 0], ['Grondstof', 0], ['Consument', 0], ['Bewerkende industrie', 1]]],
+ {
+ title: ' ',
+ seriesDefaults: {shadow: true, renderer: jQuery.jqplot.PieRenderer, rendererOptions: { showDataLabels: true } },
+ legend: { show:true }
+ }
+ );
+});
+</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ jQuery.jqplot.config.enablePlugins = true;
+ plot9 = jQuery.jqplot('chart9',
+ [[['Verwerkende industrie', 9],['Retail', 8], ['Primaire producent', 7],
+ ['Out of home', 6],['Groothandel', 5], ['Grondstof', 4], ['Consument', 3], ['Bewerkende industrie', 2]]],
+ {
+ title: ' ',
+ seriesDefaults: {shadow: true, renderer: jQuery.jqplot.PieRenderer, rendererOptions: {
+ fill: false,
+ sliceMargin: 4,
+ showDataLabels: true
+ }
+ },
+ legend: { show:true }
+ }
+ );
+});
+</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ plot10 = jQuery.jqplot('chart10',
+ [[['Verwerkende industrie', 100],['Retail', 0], ['Primaire producent', 0],
+ ['Out of home', 0],['Groothandel', 0], ['Grondstof', 0], ['Consument', 0], ['Bewerkende industrie', 1]]],
+ {
+ title: ' ',
+ seriesDefaults: {shadow: true, renderer: jQuery.jqplot.PieRenderer, rendererOptions: {
+ fill: false,
+ sliceMargin: 4,
+ showDataLabels: true
+ }
+ },
+ legend: { show:true }
+ }
+ );
+});
+</script>
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pieRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/point-labels.html b/wqflask/wqflask/static/packages/jqplot/examples/point-labels.html
new file mode 100644
index 00000000..c21e1bc0
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/point-labels.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Data Point labels</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="pieTest4.html">Previous</a> <a href="./">Examples</a> <a href="resizablePlot.html">Next</a></div>
+
+
+<style type="text/css">
+#chart3 .jqplot-point-label {
+ border: 1.5px solid #aaaaaa;
+ padding: 1px 3px;
+ background-color: #eeccdd;
+}
+</style>
+
+<!-- Example scripts go here -->
+<P>The pointLabels plugin places labels on the plot at the data point locations. Labeles can use the series data array or a separate labels array. If using the series data, the last value in the data point array is used as the label by default.</p>
+
+<div id="chart1" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+<P>Additional data can be added to the series and it will be used for labels. If additional data is provided, each data point must have a value for the label, even if it is "null".</p>
+
+<div id="chart2" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+<P>Labels work with Bar charts as well. Here, the Labels have been supplied through the "labels" array on the "pointLabels" option to the series. Also, additional css styling has been provided to the labels.</p>
+
+<div id="chart3" style="height:300px; width:500px;"></div>
+
+<pre class="prettyprint brush: html">
+<style type="text/css">
+#chart3 .jqplot-point-label {
+ border: 1.5px solid #aaaaaa;
+ padding: 1px 3px;
+ background-color: #eeccdd;
+}
+</style>
+</pre>
+<pre class="code prettyprint brush: js"></pre>
+
+<P>Point labels can be used on stacked bar charts. If no labels array is specified, they will use data from the chart. Values can be displayed individually for each series (stackedValue option is false, the default), or cumulative values for all series can be displayed (stackedValue option is true).</p>
+
+<div id="chart4" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+<P>Data point labels have an "edgeTolerance" option. This options controls how close the data point label can be to an axis edge and still be drawn. The default of 0 allows labels to touch the axis. Positive values will increase the required distance between the axis and label, negative values will allow labels to overlap axes.</p>
+
+<div id="chart5" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var line1 = [14, 32, 41, 44, 40, 47, 53, 67];
+ var plot1 = $.jqplot('chart1', [line1], {
+ title: 'Chart with Point Labels',
+ seriesDefaults: {
+ showMarker:false,
+ pointLabels: { show:true }
+ }
+ });
+});
+</script>
+
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var line1 = [[-12, 7, null], [-3, 14, null], [2, -1, '(low)'],
+ [7, -1, '(low)'], [11, 11, null], [13, -1, '(low)']];
+ var plot2 = $.jqplot('chart2', [line1], {
+ title: 'Point Labels From Extra Series Data',
+ seriesDefaults: {
+ showMarker:false,
+ pointLabels:{ show:true, location:'s', ypadding:3 }
+ },
+ axes:{ yaxis:{ pad: 1.3 } }
+ });
+});
+</script>
+
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var line1 = [14, 32, 41, 44, 40];
+ var plot3 = $.jqplot('chart3', [line1], {
+ title: 'Bar Chart with Point Labels',
+ seriesDefaults: {renderer: $.jqplot.BarRenderer},
+ series:[
+ {pointLabels:{
+ show: true,
+ labels:['fourteen', 'thirty two', 'fourty one', 'fourty four', 'fourty']
+ }}],
+ axes: {
+ xaxis:{renderer:$.jqplot.CategoryAxisRenderer},
+ yaxis:{padMax:1.3}}
+ });
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var line1 = [14, 32, 41, 44, 40, 37, 29];
+ var line2 = [7, 12, 15, 17, 20, 27, 39];
+ var plot4 = $.jqplot('chart4', [line1, line2], {
+ title: 'Stacked Bar Chart with Cumulative Point Labels',
+ stackSeries: true,
+ seriesDefaults: {
+ renderer: $.jqplot.BarRenderer,
+ rendererOptions:{barMargin: 25},
+ pointLabels:{show:true, stackedValue: true}
+ },
+ axes: {
+ xaxis:{renderer:$.jqplot.CategoryAxisRenderer}
+ }
+ });
+});
+</script>
+
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var line1 = [14, 32, 41, 44, 40, 47, 53, 67];
+ var plot5 = $.jqplot('chart5', [line1], {
+ title: 'Chart with Point Labels',
+ seriesDefaults: {
+ showMarker:false,
+ pointLabels: {
+ show: true,
+ edgeTolerance: 5
+ }},
+ axes:{
+ xaxis:{min:3}
+ }
+ });
+});
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.min.js"></script>
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.pointLabels.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/quintiles.json b/wqflask/wqflask/static/packages/jqplot/examples/quintiles.json
new file mode 100644
index 00000000..a46a169f
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/quintiles.json
@@ -0,0 +1,348 @@
+[
+ [
+ [27777522,
+ 13657657,
+ 14119865,
+ 22.96185242727780,
+ 22.92340104876670,
+ 22.99840039165770,
+ 95.15435452471940],
+ [0.16814981778556500,
+ 0.16938884829023600,
+ 0.13029899959403300,
+ 0.08445061806046640,
+ 0.05811840452702920,
+ 0.05631028061504850,
+ 0.06512242137179920,
+ 0.06861163659177230,
+ 0.06020567860988050,
+ 0.04355880225459750,
+ 0.02803499342457000,
+ 0.01912758869230340,
+ 0.01515038483762410,
+ 0.01223701332240520,
+ 0.00869244058559189,
+ 0.00529469386492945,
+ 0.00328609724536106,
+ 0.00194751964322071,
+ 0.00114713861262733,
+ 0.00086662207093871],
+ [0.15777933298339800,
+ 0.15671077815250300,
+ 0.12447815070139100,
+ 0.08939377850853680,
+ 0.07830223837100820,
+ 0.08053563812713150,
+ 0.07682071635522590,
+ 0.06269916689630620,
+ 0.04365876627610810,
+ 0.03084162032257200,
+ 0.02432244409407740,
+ 0.02120157090634930,
+ 0.01791380814933710,
+ 0.01326354596024400,
+ 0.00968643784396050,
+ 0.00633359323592785,
+ 0.00349435421488265,
+ 0.00158514030722019,
+ 0.00062587894057936,
+ 0.00035303965324001],
+ [0.96726540940724300,
+ 1.03084161446685000,
+ 1.04551821911720000,
+ 1.01249668698901000,
+ 0.91377904610163700,
+ 0.71793506186340200,
+ 0.67630912102504800,
+ 0.81996977584158100,
+ 1.05847758500203000,
+ 1.33386431492214000,
+ 1.36610600401065000,
+ 1.11490766666616000,
+ 0.87264547467534200,
+ 0.81805292713174800,
+ 0.89240386671080400,
+ 0.86800712885521700,
+ 0.80860485322858600,
+ 0.90961820179781800,
+ 1.18839220506104000,
+ 1.77284683642290000,
+ 2.37438923518884000]
+ ],[
+ [27749565,
+ 13838477,
+ 13911088,
+ 24.59760821726010,
+ 24.93140692365050,
+ 24.25806641635340,
+ 77.89121151531350],
+ [0.13460476947529500,
+ 0.14372006850062500,
+ 0.12847108657610600,
+ 0.09875785820893480,
+ 0.07155805029015120,
+ 0.06299959058572970,
+ 0.06669930695548060,
+ 0.06620210601954020,
+ 0.05883374707069510,
+ 0.04833706700819440,
+ 0.03521801565126300,
+ 0.02559536412958920,
+ 0.02062306586521670,
+ 0.01576211515574400,
+ 0.01023801649094930,
+ 0.00572503164287636,
+ 0.00307516687772024,
+ 0.00165330051290922,
+ 0.00104697926747485,
+ 0.00087929371550523],
+ [0.13970508453303800,
+ 0.13975442365362800,
+ 0.11681679473806300,
+ 0.09435373241811580,
+ 0.08802952295423720,
+ 0.08580953135424240,
+ 0.07740975573970180,
+ 0.06538018068005290,
+ 0.04960049471620990,
+ 0.03735678030431880,
+ 0.02976493031984740,
+ 0.02384624281925690,
+ 0.01786909883056510,
+ 0.01280223896627530,
+ 0.00854305561048803,
+ 0.00534781144388522,
+ 0.00336845668342047,
+ 0.00201559921183726,
+ 0.00124722944598909,
+ 0.00097903557682698],
+ [0.99478035075329800,
+ 0.95846318148882600,
+ 1.02300804808641000,
+ 1.09402516010135000,
+ 1.04121346671673000,
+ 0.80864396372867400,
+ 0.73034724501018900,
+ 0.85714209189972800,
+ 1.00728620755889000,
+ 1.17996112502462000,
+ 1.28717635944761000,
+ 1.17702912743046000,
+ 1.06774746443199000,
+ 1.14809486978252000,
+ 1.22477345443636000,
+ 1.19214694369792000,
+ 1.06494947429125000,
+ 0.90816533289574900,
+ 0.81597117843348200,
+ 0.83506239070880300,
+ 0.89343444858290900]
+ ],[
+ [27773083,
+ 14068521,
+ 13704562,
+ 26.03124974398200,
+ 26.46223974345070,
+ 25.59233340000260,
+ 66.99286359589060],
+ [0.11075465721807600,
+ 0.12531352270434800,
+ 0.12461977157255700,
+ 0.11125959454297800,
+ 0.08638877858554280,
+ 0.06731675090789110,
+ 0.06187750302195390,
+ 0.06283663484842800,
+ 0.05868334457568110,
+ 0.05026814063111530,
+ 0.04079416969542070,
+ 0.03139012243581270,
+ 0.02388339994025160,
+ 0.01756428234835730,
+ 0.01203845901370310,
+ 0.00701750790134651,
+ 0.00386618590184589,
+ 0.00206610447696370,
+ 0.00117506121489637,
+ 0.00088600846283140],
+ [0.11432537302481000,
+ 0.12667609073231400,
+ 0.11974891524623500,
+ 0.10506132545858400,
+ 0.09301444384053810,
+ 0.08267846594852100,
+ 0.07221670745205490,
+ 0.06493541188927070,
+ 0.05720135869997910,
+ 0.04682451198762990,
+ 0.03485427327295350,
+ 0.02629070404866000,
+ 0.01998999845792230,
+ 0.01428519039077750,
+ 0.00980039073555805,
+ 0.00599266397652053,
+ 0.00331791767499821,
+ 0.00156650907345305,
+ 0.00072094415435746,
+ 0.00049880393486330],
+ [1.02655750690901000,
+ 0.99449511323857500,
+ 1.01551553024478000,
+ 1.06831332671397000,
+ 1.08712098857701000,
+ 0.95343309606544400,
+ 0.83582242597784900,
+ 0.87958614394243600,
+ 0.99337814815975000,
+ 1.05315379343805000,
+ 1.10205392288684000,
+ 1.20150435531963000,
+ 1.22567146812179000,
+ 1.22649751828565000,
+ 1.26219850103057000,
+ 1.26098752647638000,
+ 1.20211569414631000,
+ 1.19619066818704000,
+ 1.35395006440030000,
+ 1.67317801793479000,
+ 1.82343918147671000]
+ ],[
+ [27763227,
+ 14197178,
+ 13566049,
+ 27.18018253648030,
+ 27.20726467467510,
+ 27.15223055717600,
+ 58.62068064918010],
+ [0.09684619409307840,
+ 0.11118728522535100,
+ 0.12478646127724500,
+ 0.11986149426641600,
+ 0.09520840637648180,
+ 0.07266436962641580,
+ 0.06157942773922730,
+ 0.05776990145557140,
+ 0.05595079146694350,
+ 0.05422906155293650,
+ 0.04606394160905190,
+ 0.03460401579477880,
+ 0.02431694855838520,
+ 0.01695117276859440,
+ 0.01211661291564830,
+ 0.00784551008485565,
+ 0.00430794264393258,
+ 0.00206401896375649,
+ 0.00099084255721430,
+ 0.00065560102411584],
+ [0.09693358901304290,
+ 0.10652960384957600,
+ 0.11580433409088400,
+ 0.11321777793810400,
+ 0.09912292067710200,
+ 0.08131783917502760,
+ 0.07048109387720830,
+ 0.06833459006738460,
+ 0.06313644652192900,
+ 0.05255568033191890,
+ 0.03903863379099840,
+ 0.02910689297792140,
+ 0.02269025908501970,
+ 0.01651322011205660,
+ 0.01126491285383100,
+ 0.00657328507941835,
+ 0.00372023325715849,
+ 0.00195236631466226,
+ 0.00099341991698984,
+ 0.00071290106976617],
+ [1.04652268320717000,
+ 1.04557914271650000,
+ 1.09227868937597000,
+ 1.12769408251422000,
+ 1.10793353197135000,
+ 1.00519391705143000,
+ 0.93515656400210500,
+ 0.91434829403035100,
+ 0.88472781091218400,
+ 0.92741634411137500,
+ 1.07984413189527000,
+ 1.23485263418514000,
+ 1.24416877771066000,
+ 1.12154903817441000,
+ 1.07427786276195000,
+ 1.12564654732811000,
+ 1.24907168423899000,
+ 1.21184866195041000,
+ 1.10637161065473000,
+ 1.04380755195023000,
+ 0.96240750921599800]
+ ],[
+ [27754352,
+ 14075999,
+ 13678353,
+ 29.11682279982730,
+ 29.25251358929000,
+ 28.97478042663600,
+ 50.90167162031000],
+ [0.07773301902264660,
+ 0.09756477612918870,
+ 0.11769211568808000,
+ 0.11953094319783700,
+ 0.10070874902748300,
+ 0.07710380627667010,
+ 0.06107481209270700,
+ 0.05557245339785060,
+ 0.05625960991605260,
+ 0.05655944052572760,
+ 0.05050018273054490,
+ 0.03998167380585820,
+ 0.03018284824156070,
+ 0.02178128532719260,
+ 0.01546004923447120,
+ 0.01053184010191340,
+ 0.00618324070639374,
+ 0.00309253762350306,
+ 0.00148564380196157,
+ 0.00100097315235749],
+ [0.07414870947175290,
+ 0.08945795766137910,
+ 0.11321883781048900,
+ 0.11651658562245200,
+ 0.09931926283967810,
+ 0.08029240511352740,
+ 0.07198971835798040,
+ 0.07305219001114050,
+ 0.06968907391161920,
+ 0.06031073521142600,
+ 0.04701710534217110,
+ 0.03436632086919040,
+ 0.02578058253156860,
+ 0.01918327371957260,
+ 0.01236986721101920,
+ 0.00632468067099160,
+ 0.00324813634215291,
+ 0.00173308253350124,
+ 0.00107597562154257,
+ 0.00090549914684498],
+ [1.02907119007676000,
+ 1.07881594924275000,
+ 1.12232721275485000,
+ 1.06972980730035000,
+ 1.05569391096106000,
+ 1.04346799653703000,
+ 0.98820437091643300,
+ 0.87304591541007500,
+ 0.78283773210481600,
+ 0.83076356851850300,
+ 0.96506352588551000,
+ 1.10530588311237000,
+ 1.19721831153422000,
+ 1.20479432618776000,
+ 1.16843941971104000,
+ 1.28614891275391000,
+ 1.71360639234849000,
+ 1.95896791328722000,
+ 1.83628956559048000,
+ 1.42088092397757000,
+ 1.13757438283678000]
+ ]
+] \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/resizablePlot.html b/wqflask/wqflask/static/packages/jqplot/examples/resizablePlot.html
new file mode 100644
index 00000000..082b623a
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/resizablePlot.html
@@ -0,0 +1,196 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Resizable Plots</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="point-labels.html">Previous</a> <a href="./">Examples</a> <a href="rotated-tick-labels.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <style type="text/css">
+ body {
+ font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
+ }
+
+ p, pre {
+ margin: 1.5em;
+ }
+
+ body table {
+ margin: 2em;
+ }
+
+ #resizable1, #resizable2 {
+ width: 440px;
+ height: 330px;
+ margin-top: 2em;
+ margin-bottom: 2em;
+ padding: 1.2em;
+ }
+
+
+ .jqplot-target {
+ font-size: 16px;
+ }
+
+ .ui-resizable-helper {
+ border: 2px solid gray;
+ }
+ </style>
+
+<p>Plot targets can be placed inside of resizable containers for dynamic plot sizing. The examples here use the jQuery UI package for resizing functionality.</p>
+
+ <table><tr>
+ <td>
+<div id="resizable1" class="ui-widget-content">
+ <div id="chart1" style="height:96%; width:96%;"></div>
+</div>
+</td>
+<td>
+
+<p>The first plot has good resize performance in Firefox, Safari and other canvas enabled browsers. The plot will resize dynamically with the container. IE performance will be slow since IE doesn't natively support the canvas element.</p>
+
+<p>Resizing is handled by binding a handler to the 'resize' event. The handler function replots the plot during resize. Here, the plot targets's height and width must be specified as a percentage of the container and the container must be visible.</p>
+
+<p>The event handler looks like:</p>
+<pre>
+ $('#resizable1').bind('resize', function(event, ui) {
+ plot1.replot( { resetAxes: true } );
+ });
+</pre>
+</td>
+</tr></table>
+<table><tr>
+ <td>
+
+<div id="resizable2" class="ui-widget-content">
+ <div id="chart2" style="height:96%; width:96%;"></div>
+</div>
+</td>
+<td>
+<p>The second plot uses an alternative sizing method that is more responsive in all browsers, especially IE. The differnece? First, the plot target is given a static height and width that will fit inside the resizable container. Then, instead of resizing dynamically with the container, the plots replot() method is called at the end of the resize. When resizing is done, the plot targets hieght and width are set to a percentage of the container's and then the replot method is called.</p>
+
+<p>Also, an options object is passed into the replot method. It contains a single option, resetAxes, which, if true, resets all axes so the min, max, numberTicks and tickInterval are recalculated.</p>
+<pre>
+ $('#resizable2').bind('resizestop', function(event, ui) {
+ $('#chart2').height($('#resizable2').height()*0.96);
+ $('#chart2').width($('#resizable2').width()*0.96);
+ plot2.replot({resetAxes:true});
+ });
+</pre>
+
+<p>You can also pass in option objects to reset specific axes like:</p>
+
+<pre>
+ {resetAxes:['yaxis', 'y2axis']};
+
+ or
+
+ {resetAxes:{yaxis:true, y2axis:true}};
+</pre>
+
+</td></tr></table>
+
+<pre class="code brush:js"></pre>
+
+
+ <script type="text/javascript" class="code">
+
+ $(document).ready(function(){
+
+ $.jqplot._noToImageButton = true;
+
+ var l1 = [18, 36, 41, 93, 100, 115, 133, 129, 119, 107, 91, 146, 169];
+ var l2 = [[8, 66], [13, 46], [22,14]];
+ var l3 = [[3.3, 7], [9.5, 22], [12.1, 37], [18.6, 95], [24, 102]];
+
+ var options = {
+ title: "Lines",
+ legend:{show:true, location:'se'},
+ seriesDefaults:{trendline:{show:true, type:"exp"}},
+ axes:{
+ yaxis:{
+ renderer:$.jqplot.LogAxisRenderer
+ }
+ }
+ };
+
+ $("#resizable1").resizable({delay:20});
+ $("#resizable2").resizable({delay:20, helper:'ui-resizable-helper'});
+
+ $('#resizable1').bind('resize', function(event, ui) {
+ // pass in resetAxes: true option to get rid of old ticks and axis properties
+ // which should be recomputed based on new plot size.
+ plot1.replot( { resetAxes: true } );
+ });
+
+ $('#resizable2').bind('resizestop', function(event, ui) {
+ $('#chart2').height($('#resizable2').height()*0.96);
+ $('#chart2').width($('#resizable2').width()*0.96);
+ // pass in resetAxes: true option to get rid of old ticks and axis properties
+ // which should be recomputed based on new plot size.
+ plot2.replot( { resetAxes:true } );
+ });
+
+ var plot1 = $.jqplot('chart1', [l1, l3], options);
+ var plot2 = $.jqplot('chart2', [l1, l3], options);
+
+ });
+
+ </script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.logAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.trendline.min.js"></script>
+
+ <link class="include" type="text/css" href="jquery-ui/css/smoothness/jquery-ui.min.css" rel="Stylesheet" />
+ <script class="include" type="text/javascript" src="jquery-ui/js/jquery-ui.min.js"></script>
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/rotated-tick-labels.html b/wqflask/wqflask/static/packages/jqplot/examples/rotated-tick-labels.html
new file mode 100644
index 00000000..e80830ad
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/rotated-tick-labels.html
@@ -0,0 +1,216 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Rotated Labels and Font Styling</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="resizablePlot.html">Previous</a> <a href="./">Examples</a> <a href="rotatedTickLabelsZoom.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+<p>Rotated axis tick labels are possible through the "jqplot.canvasTextRenderer.min.js" and "jqplot.canvasAxisTickRenderer.min.js" plugins. Native canvas font rendering capabilities are used in supported browsers. This includes most recent browsers (including IE 9). In browsers which don't support native canvas font text, text is rendered in the Hershey font.</p>
+
+<div id="chart1" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+
+<p>For comparison, here is the same graph with the "fontFamily" and "fontSize" set. If you have a supported browser, you should see a difference in label fonts.</p>
+
+<div id="chart1b" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+<p>The default positioning applies to either primary or secondary axes and accounts for label rotation to ensure that the labels point to the appropriate bar or tick position.</p>
+
+<p>Also note here the use of the "autoscale" option on the y axes. Turning this option on will force the y axes to line up tick marks for consistend grid lines across the grid.</p>
+
+<div id="chart2" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+<p>You can override the default position by specifying a labelPosition of 'start', 'middle' or 'end'. The results probably are not as pleasing as the default 'auto' setting.</p>
+
+<div id="chart3" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var line1 = [['Cup Holder Pinion Bob', 7], ['Generic Fog Lamp', 9], ['HDTV Receiver', 15],
+ ['8 Track Control Module', 12], [' Sludge Pump Fourier Modulator', 3],
+ ['Transcender/Spice Rack', 6], ['Hair Spray Danger Indicator', 18]];
+
+ var plot1 = $.jqplot('chart1', [line1], {
+ title: 'Concern vs. Occurrance',
+ series:[{renderer:$.jqplot.BarRenderer}],
+ axesDefaults: {
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer ,
+ tickOptions: {
+ angle: -30,
+ fontSize: '10pt'
+ }
+ },
+ axes: {
+ xaxis: {
+ renderer: $.jqplot.CategoryAxisRenderer
+ }
+ }
+ });
+});
+</script>
+
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var line1 = [['Cup Holder Pinion Bob', 7], ['Generic Fog Lamp', 9], ['HDTV Receiver', 15],
+ ['8 Track Control Module', 12], [' Sludge Pump Fourier Modulator', 3],
+ ['Transcender/Spice Rack', 6], ['Hair Spray Danger Indicator', 18]];
+ var plot1b = $.jqplot('chart1b', [line1], {
+ title: 'Concern vs. Occurrance',
+ series:[{renderer:$.jqplot.BarRenderer}],
+ axesDefaults: {
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer ,
+ tickOptions: {
+ fontFamily: 'Georgia',
+ fontSize: '10pt',
+ angle: -30
+ }
+ },
+ axes: {
+ xaxis: {
+ renderer: $.jqplot.CategoryAxisRenderer
+ }
+ }
+ });
+});
+</script>
+
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var line1 = [['Cup Holder Pinion Bob', 7], ['Generic Fog Lamp', 9], ['HDTV Receiver', 15],
+ ['8 Track Control Module', 12], [' Sludge Pump Fourier Modulator', 3],
+ ['Transcender/Spice Rack', 6], ['Hair Spray Danger Indicator', 18]];
+ var line2 = [['Nickle', 28], ['Aluminum', 13], ['Xenon', 54], ['Silver', 47],
+ ['Sulfer', 16], ['Silicon', 14], ['Vanadium', 23]];
+
+ var plot2 = $.jqplot('chart2', [line1, line2], {
+ series:[{renderer:$.jqplot.BarRenderer}, {xaxis:'x2axis', yaxis:'y2axis'}],
+ axesDefaults: {
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer ,
+ tickOptions: {
+ angle: 30
+ }
+ },
+ axes: {
+ xaxis: {
+ renderer: $.jqplot.CategoryAxisRenderer
+ },
+ x2axis: {
+ renderer: $.jqplot.CategoryAxisRenderer
+ },
+ yaxis: {
+ autoscale:true
+ },
+ y2axis: {
+ autoscale:true
+ }
+ }
+ });
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var line1 = [['Cup Holder Pinion Bob', 7], ['Generic Fog Lamp', 9], ['HDTV Receiver', 15],
+ ['8 Track Control Module', 12], [' Sludge Pump Fourier Modulator', 3],
+ ['Transcender/Spice Rack', 6], ['Hair Spray Danger Indicator', 18]];
+ var plot3 = $.jqplot('chart3', [line1], {
+ title: 'Concern vs. Occurrance',
+ series:[{renderer:$.jqplot.BarRenderer}],
+ axesDefaults: {
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ angle: -30
+ }
+ },
+ axes: {
+ xaxis: {
+ renderer: $.jqplot.CategoryAxisRenderer,
+ tickOptions: {
+ labelPosition: 'middle'
+ }
+ },
+ yaxis: {
+ autoscale:true,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ labelPosition: 'start'
+ }
+ }
+ }
+ });
+});
+</script>
+
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.min.js"></script>
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/rotatedTickLabelsZoom.html b/wqflask/wqflask/static/packages/jqplot/examples/rotatedTickLabelsZoom.html
new file mode 100644
index 00000000..902b021b
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/rotatedTickLabelsZoom.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Date Axes, Rotated Labels and Zooming</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="rotated-tick-labels.html">Previous</a> <a href="./">Examples</a> <a href="selectorSyntax.html">Next</a></div>
+
+ <div class="example-plot" id="chart" style="width: 600px; height: 400px;"></div>
+
+<!-- Example scripts go here -->
+
+<style type="text/css">
+ .jqplot-target: {
+ margin-left: 70px;
+ }
+</style>
+
+<script type="text/javascript" class="code">
+
+$(document).ready(function(){
+ // Enable plugins like highlighter and cursor by default.
+ // Otherwise, must specify show: true option for those plugins.
+ $.jqplot.config.enablePlugins = true;
+
+ var line1=[['2008-09-30', 4], ['2008-10-30', 6.5], ['2008-11-30', 5.7], ['2008-12-30', 9],
+ ['2009-01-30', 8.2], ['2009-02-28', 7.6], ['2009-03-30', 11.4], ['2009-04-30', 16.2],
+ ['2009-05-30', 21.8], ['2009-06-30', 19.3], ['2009-07-30', 29.7], ['2009-08-30', 36.7],
+ ['2009-09-30', 38.7], ['2009-10-30', 33.7], ['2009-11-30', 49.7], ['2009-12-30', 62.7]];
+
+ var plot1 = $.jqplot('chart', [line1], {
+ title:'Rotated Axis Text',
+ axes:{
+ xaxis:{
+ renderer:$.jqplot.DateAxisRenderer,
+ rendererOptions:{
+ tickRenderer:$.jqplot.CanvasAxisTickRenderer
+ },
+ tickOptions:{
+ fontSize:'10pt',
+ fontFamily:'Tahoma',
+ angle:-40
+ }
+ },
+ yaxis:{
+ rendererOptions:{
+ tickRenderer:$.jqplot.CanvasAxisTickRenderer},
+ tickOptions:{
+ fontSize:'10pt',
+ fontFamily:'Tahoma',
+ angle:30
+ }
+ }
+ },
+ series:[{ lineWidth:4, markerOptions:{ style:'square' } }],
+ cursor:{
+ zoom:true,
+ looseZoom: true
+ }
+ });
+
+});
+</script>
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <!-- to render rotated axis ticks, include both the canvasText and canvasAxisTick renderers -->
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.min.js"></script>
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/selectorSyntax.html b/wqflask/wqflask/static/packages/jqplot/examples/selectorSyntax.html
new file mode 100644
index 00000000..3dad914e
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/selectorSyntax.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Plot Creation with jQuery Selectors</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="rotatedTickLabelsZoom.html">Previous</a> <a href="./">Examples</a> <a href="smoothedLine.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+<div id="chart1" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+<div class="chart2" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+<div class="jqplot" style="height:300px; width:500px;"></div>
+
+<div class="jqplot" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ // Use jQuery selector for a specific element ID.
+ $('#chart1').jqplot([[3,7,9,1,5,3,8,2,5]]);
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ // jQuery selector for elements with a specific class attribute.
+ // Here, there is one div with the class "chart2"
+ $(".chart2").jqplot ([[3,7,9,1,5,3,8,2,5]], {
+ title: "Plot With Options",
+ axesDefaults: {
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer
+ },
+ seriesDefaults: {
+ rendererOptions: {
+ smooth: true
+ }
+ },
+ axes: {
+ xaxis: {
+ label: "X Axis",
+ pad: 0
+ },
+ yaxis: {
+ label: "Y Axis"
+ }
+ }
+ });
+});
+
+// the jqPlot plot object can be accessed through the jQuery "data" method:
+//
+// >>> $('.chart2').data('jqplot').series[0].data
+// [[1, 3], [2, 7], [3, 9], [4, 1], [5, 5], [6, 3], [7, 8], [8, 2], [9, 5]]
+
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ // Some simple loops to build up data arrays.
+ var cosPoints = [];
+ for (var i=0; i<2*Math.PI; i+=1){
+ cosPoints.push([i, Math.cos(i)]);
+ }
+
+ var sinPoints = [];
+ for (var i=0; i<2*Math.PI; i+=0.4){
+ sinPoints.push([i, 2*Math.sin(i-.8)]);
+ }
+
+ var powPoints1 = [];
+ for (var i=0; i<2*Math.PI; i+=1) {
+ powPoints1.push([i, 2.5 + Math.pow(i/4, 2)]);
+ }
+
+ var powPoints2 = [];
+ for (var i=0; i<2*Math.PI; i+=1) {
+ powPoints2.push([i, -2.5 - Math.pow(i/4, 2)]);
+ }
+
+ // jQuery selector for all divs with a class of "jqplot".
+ // Here, there are two divs that match. By supplying 2 seperate
+ // arrays of data, each plot will have it's own independent series.
+ // Only one options array is supplied, so it will be used for both
+ // plots.
+ $("div.jqplot").jqplot([cosPoints, sinPoints], [powPoints1, powPoints2], {
+ title: "One Selector, Multiple Plots",
+ seriesDefaults: {
+ rendererOptions: {
+ smooth: true
+ }
+ }
+ });
+
+});
+</script>
+
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/smoothedLine.html b/wqflask/wqflask/static/packages/jqplot/examples/smoothedLine.html
new file mode 100644
index 00000000..782a44d4
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/smoothedLine.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Smoothed Lines</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="selectorSyntax.html">Previous</a> <a href="./">Examples</a> <a href="theming.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <style type="text/css">
+ body {
+ background-color: #f3f3f3;
+ }
+ </style>
+
+
+ <div id="chart1" style="height:400px; width:600px;"></div>
+
+ <pre class="code brush:js"></pre>
+
+ <script type="text/javascript" class="code">
+ $(document).ready(function(){
+
+ var d1 = [[0, -10.3], [1, 7.0], [2, 15.7], [3, 0.5], [4, -10.4], [5, 1.1], [6, 13.2],
+ [7, 1.8], [8, -4.5], [9, -1.8], [10, 2.0], [11, 3.0], [12, -3.5], [13, -7.4], [14, -11.3]];
+ var d2 = [[0, 1.3], [1, 12.8], [2, -8.2], [3, -5.2], [4, 16.4], [5, -5.3], [6, 8.1],
+ [7, 15.1], [8, -4.4], [9, 7.8], [10, -1.4], [11, 0.2], [12, 1.3], [13, 11.7], [14, -9.7]];
+
+ var plot1 = $.jqplot('chart1', [d1, d2], {
+ grid: {
+ drawBorder: false,
+ shadow: false,
+ background: 'rgba(0,0,0,0)'
+ },
+ highlighter: { show: true },
+ seriesDefaults: {
+ shadowAlpha: 0.1,
+ shadowDepth: 2,
+ fillToZero: true
+ },
+ series: [
+ {
+ color: 'rgba(198,88,88,.6)',
+ negativeColor: 'rgba(100,50,50,.6)',
+ showMarker: true,
+ showLine: true,
+ fill: true,
+ fillAndStroke: true,
+ markerOptions: {
+ style: 'filledCircle',
+ size: 8
+ },
+ rendererOptions: {
+ smooth: true
+ }
+ },
+ {
+ color: 'rgba(44, 190, 160, 0.7)',
+ showMarker: true,
+ rendererOptions: {
+ smooth: true,
+ },
+ markerOptions: {
+ style: 'filledSquare',
+ size: 8
+ },
+ }
+ ],
+ axes: {
+ xaxis: {
+ // padding of 0 or of 1 produce same results, range
+ // is multiplied by 1x, so it is not padded.
+ pad: 1.0,
+ tickOptions: {
+ showGridline: false
+ }
+ },
+ yaxis: {
+ pad: 1.05
+ }
+ }
+ });
+
+ });
+
+ </script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+ <script class="include" type="text/javascript" src="../plugins/jqplot.highlighter.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/LGPL-LICENSE b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/LGPL-LICENSE
new file mode 100644
index 00000000..3f9959fc
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/LGPL-LICENSE
@@ -0,0 +1,165 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library. \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/MIT-LICENSE b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/MIT-LICENSE
new file mode 100644
index 00000000..e7c70ba1
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/MIT-LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2003, 2004 Jim Weirich
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shAutoloader.js b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shAutoloader.js
new file mode 100644
index 00000000..4e29bdde
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shAutoloader.js
@@ -0,0 +1,17 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(2(){1 h=5;h.I=2(){2 n(c,a){4(1 d=0;d<c.9;d++)i[c[d]]=a}2 o(c){1 a=r.H("J"),d=3;a.K=c;a.M="L/t";a.G="t";a.u=a.v=2(){6(!d&&(!8.7||8.7=="F"||8.7=="z")){d=q;e[c]=q;a:{4(1 p y e)6(e[p]==3)B a;j&&5.C(k)}a.u=a.v=x;a.D.O(a)}};r.N.R(a)}1 f=Q,l=h.P(),i={},e={},j=3,k=x,b;5.T=2(c){k=c;j=q};4(b=0;b<f.9;b++){1 m=f[b].w?f[b]:f[b].S(/\\s+/),g=m.w();n(m,g)}4(b=0;b<l.9;b++)6(g=i[l[b].E.A]){e[g]=3;o(g)}}})();',56,56,'|var|function|false|for|SyntaxHighlighter|if|readyState|this|length|||||||||||||||||true|document||javascript|onload|onreadystatechange|pop|null|in|complete|brush|break|highlight|parentNode|params|loaded|language|createElement|autoloader|script|src|text|type|body|removeChild|findElements|arguments|appendChild|split|all'.split('|'),0,{}))
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shAutoloader.min.js b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shAutoloader.min.js
new file mode 100644
index 00000000..b8df12a1
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shAutoloader.min.js
@@ -0,0 +1 @@
+eval(function(h,b,j,f,g,i){g=function(a){return(a<b?"":g(parseInt(a/b)))+((a=a%b)>35?String.fromCharCode(a+29):a.toString(36))};if(!"".replace(/^/,String)){while(j--){i[g(j)]=f[j]||g(j)}f=[function(a){return i[a]}];g=function(){return"\\w+"};j=1}while(j--){if(f[j]){h=h.replace(new RegExp("\\b"+g(j)+"\\b","g"),f[j])}}return h}('(2(){1 h=5;h.I=2(){2 n(c,a){4(1 d=0;d<c.9;d++)i[c[d]]=a}2 o(c){1 a=r.H("J"),d=3;a.K=c;a.M="L/t";a.G="t";a.u=a.v=2(){6(!d&&(!8.7||8.7=="F"||8.7=="z")){d=q;e[c]=q;a:{4(1 p y e)6(e[p]==3)B a;j&&5.C(k)}a.u=a.v=x;a.D.O(a)}};r.N.R(a)}1 f=Q,l=h.P(),i={},e={},j=3,k=x,b;5.T=2(c){k=c;j=q};4(b=0;b<f.9;b++){1 m=f[b].w?f[b]:f[b].S(/\\s+/),g=m.w();n(m,g)}4(b=0;b<l.9;b++)6(g=i[l[b].E.A]){e[g]=3;o(g)}}})();',56,56,"|var|function|false|for|SyntaxHighlighter|if|readyState|this|length|||||||||||||||||true|document||javascript|onload|onreadystatechange|pop|null|in|complete|brush|break|highlight|parentNode|params|loaded|language|createElement|autoloader|script|src|text|type|body|removeChild|findElements|arguments|appendChild|split|all".split("|"),0,{})); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shBrushJScript.js b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shBrushJScript.js
new file mode 100644
index 00000000..ff98daba
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shBrushJScript.js
@@ -0,0 +1,52 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+;(function()
+{
+ // CommonJS
+ typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;
+
+ function Brush()
+ {
+ var keywords = 'break case catch continue ' +
+ 'default delete do else false ' +
+ 'for function if in instanceof ' +
+ 'new null return super switch ' +
+ 'this throw true try typeof var while with'
+ ;
+
+ var r = SyntaxHighlighter.regexLib;
+
+ this.regexList = [
+ { regex: r.multiLineDoubleQuotedString, css: 'string' }, // double quoted strings
+ { regex: r.multiLineSingleQuotedString, css: 'string' }, // single quoted strings
+ { regex: r.singleLineCComments, css: 'comments' }, // one line comments
+ { regex: r.multiLineCComments, css: 'comments' }, // multiline comments
+ { regex: /\s*#.*/gm, css: 'preprocessor' }, // preprocessor tags like #region and #endregion
+ { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // keywords
+ ];
+
+ this.forHtmlScript(r.scriptScriptTags);
+ };
+
+ Brush.prototype = new SyntaxHighlighter.Highlighter();
+ Brush.aliases = ['js', 'jscript', 'javascript'];
+
+ SyntaxHighlighter.brushes.JScript = Brush;
+
+ // CommonJS
+ typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
+})();
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shBrushJScript.min.js b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shBrushJScript.min.js
new file mode 100644
index 00000000..c9dc5868
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shBrushJScript.min.js
@@ -0,0 +1 @@
+(function(){typeof(require)!="undefined"?SyntaxHighlighter=require("shCore").SyntaxHighlighter:null;function a(){var b="break case catch continue default delete do else false for function if in instanceof new null return super switch this throw true try typeof var while with";var c=SyntaxHighlighter.regexLib;this.regexList=[{regex:c.multiLineDoubleQuotedString,css:"string"},{regex:c.multiLineSingleQuotedString,css:"string"},{regex:c.singleLineCComments,css:"comments"},{regex:c.multiLineCComments,css:"comments"},{regex:/\s*#.*/gm,css:"preprocessor"},{regex:new RegExp(this.getKeywords(b),"gm"),css:"keyword"}];this.forHtmlScript(c.scriptScriptTags)}a.prototype=new SyntaxHighlighter.Highlighter();a.aliases=["js","jscript","javascript"];SyntaxHighlighter.brushes.JScript=a;typeof(exports)!="undefined"?exports.Brush=a:null})(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shBrushXml.js b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shBrushXml.js
new file mode 100644
index 00000000..69d9fd0b
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shBrushXml.js
@@ -0,0 +1,69 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+;(function()
+{
+ // CommonJS
+ typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;
+
+ function Brush()
+ {
+ function process(match, regexInfo)
+ {
+ var constructor = SyntaxHighlighter.Match,
+ code = match[0],
+ tag = new XRegExp('(&lt;|<)[\\s\\/\\?]*(?<name>[:\\w-\\.]+)', 'xg').exec(code),
+ result = []
+ ;
+
+ if (match.attributes != null)
+ {
+ var attributes,
+ regex = new XRegExp('(?<name> [\\w:\\-\\.]+)' +
+ '\\s*=\\s*' +
+ '(?<value> ".*?"|\'.*?\'|\\w+)',
+ 'xg');
+
+ while ((attributes = regex.exec(code)) != null)
+ {
+ result.push(new constructor(attributes.name, match.index + attributes.index, 'color1'));
+ result.push(new constructor(attributes.value, match.index + attributes.index + attributes[0].indexOf(attributes.value), 'string'));
+ }
+ }
+
+ if (tag != null)
+ result.push(
+ new constructor(tag.name, match.index + tag[0].indexOf(tag.name), 'keyword')
+ );
+
+ return result;
+ }
+
+ this.regexList = [
+ { regex: new XRegExp('(\\&lt;|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](\\&gt;|>)', 'gm'), css: 'color2' }, // <![ ... [ ... ]]>
+ { regex: SyntaxHighlighter.regexLib.xmlComments, css: 'comments' }, // <!-- ... -->
+ { regex: new XRegExp('(&lt;|<)[\\s\\/\\?]*(\\w+)(?<attributes>.*?)[\\s\\/\\?]*(&gt;|>)', 'sg'), func: process }
+ ];
+ };
+
+ Brush.prototype = new SyntaxHighlighter.Highlighter();
+ Brush.aliases = ['xml', 'xhtml', 'xslt', 'html'];
+
+ SyntaxHighlighter.brushes.Xml = Brush;
+
+ // CommonJS
+ typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
+})();
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shBrushXml.min.js b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shBrushXml.min.js
new file mode 100644
index 00000000..a1c959c7
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shBrushXml.min.js
@@ -0,0 +1 @@
+(function(){typeof(require)!="undefined"?SyntaxHighlighter=require("shCore").SyntaxHighlighter:null;function a(){function b(f,j){var g=SyntaxHighlighter.Match,i=f[0],d=new XRegExp("(&lt;|<)[\\s\\/\\?]*(?<name>[:\\w-\\.]+)","xg").exec(i),c=[];if(f.attributes!=null){var e,h=new XRegExp("(?<name> [\\w:\\-\\.]+)\\s*=\\s*(?<value> \".*?\"|'.*?'|\\w+)","xg");while((e=h.exec(i))!=null){c.push(new g(e.name,f.index+e.index,"color1"));c.push(new g(e.value,f.index+e.index+e[0].indexOf(e.value),"string"))}}if(d!=null){c.push(new g(d.name,f.index+d[0].indexOf(d.name),"keyword"))}return c}this.regexList=[{regex:new XRegExp("(\\&lt;|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](\\&gt;|>)","gm"),css:"color2"},{regex:SyntaxHighlighter.regexLib.xmlComments,css:"comments"},{regex:new XRegExp("(&lt;|<)[\\s\\/\\?]*(\\w+)(?<attributes>.*?)[\\s\\/\\?]*(&gt;|>)","sg"),func:b}]}a.prototype=new SyntaxHighlighter.Highlighter();a.aliases=["xml","xhtml","xslt","html"];SyntaxHighlighter.brushes.Xml=a;typeof(exports)!="undefined"?exports.Brush=a:null})(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shCore.js b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shCore.js
new file mode 100644
index 00000000..b47b6454
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shCore.js
@@ -0,0 +1,17 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('K M;I(M)1S 2U("2a\'t 4k M 4K 2g 3l 4G 4H");(6(){6 r(f,e){I(!M.1R(f))1S 3m("3s 15 4R");K a=f.1w;f=M(f.1m,t(f)+(e||""));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?"g":"")+(f.4s?"i":"")+(f.4p?"m":"")+(f.4v?"x":"")+(f.3n?"y":"")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a<f.L;a++)I(f[a]===e)H a;H-1}M=6(f,e){K a=[],b=M.1B,c=0,d,h;I(M.1R(f)){I(e!==1d)1S 3m("2a\'t 5r 5I 5F 5B 5C 15 5E 5p");H r(f)}I(v)1S 2U("2a\'t W 3l M 59 5m 5g 5x 5i");e=e||"";O(d={2N:11,19:[],2K:6(g){H e.1i(g)>-1},3d:6(g){e+=g}};c<f.L;)I(h=B(f,c,b,d)){a.U(h.3k);c+=h.1C[0].L||1}Y I(h=n.X.W(z[b],f.1a(c))){a.U(h[0]);c+=h[0].L}Y{h=f.3a(c);I(h==="[")b=M.2I;Y I(h==="]")b=M.1B;a.U(h);c++}a=15(a.1K(""),n.Q.W(e,w,""));a.1w={1m:f,19:d.2N?d.19:N};H a};M.3v="1.5.0";M.2I=1;M.1B=2;K C=/\\$(?:(\\d\\d?|[$&`\'])|{([$\\w]+)})/g,w=/[^5h]+|([\\s\\S])(?=[\\s\\S]*\\1)/g,A=/^(?:[?*+]|{\\d+(?:,\\d*)?})\\??/,v=11,u=[],n={X:15.Z.X,1A:15.Z.1A,1C:1r.Z.1C,Q:1r.Z.Q,1e:1r.Z.1e},x=n.X.W(/()??/,"")[1]===1d,D=6(){K f=/^/g;n.1A.W(f,"");H!f.12}(),y=6(){K f=/x/g;n.Q.W("x",f,"");H!f.12}(),E=15.Z.3n!==1d,z={};z[M.2I]=/^(?:\\\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\\29-26-f]{2}|u[\\29-26-f]{4}|c[A-3o-z]|[\\s\\S]))/;z[M.1B]=/^(?:\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\\d*|x[\\29-26-f]{2}|u[\\29-26-f]{4}|c[A-3o-z]|[\\s\\S])|\\(\\?[:=!]|[?*+]\\?|{\\d+(?:,\\d*)?}\\??)/;M.1h=6(f,e,a,b){u.U({2q:r(f,"g"+(E?"y":"")),2b:e,3r:a||M.1B,2p:b||N})};M.2n=6(f,e){K a=f+"/"+(e||"");H M.2n[a]||(M.2n[a]=M(f,e))};M.3c=6(f){H r(f,"g")};M.5l=6(f){H f.Q(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g,"\\\\$&")};M.5e=6(f,e,a,b){e=r(e,"g"+(b&&E?"y":""));e.12=a=a||0;f=e.X(f);H b?f&&f.P===a?f:N:f};M.3q=6(){M.1h=6(){1S 2U("2a\'t 55 1h 54 3q")}};M.1R=6(f){H 53.Z.1q.W(f)==="[2m 15]"};M.3p=6(f,e,a,b){O(K c=r(e,"g"),d=-1,h;h=c.X(f);){a.W(b,h,++d,f,c);c.12===h.P&&c.12++}I(e.1J)e.12=0};M.57=6(f,e){H 6 a(b,c){K d=e[c].1I?e[c]:{1I:e[c]},h=r(d.1I,"g"),g=[],i;O(i=0;i<b.L;i++)M.3p(b[i],h,6(k){g.U(d.3j?k[d.3j]||"":k[0])});H c===e.L-1||!g.L?g:a(g,c+1)}([f],0)};15.Z.1p=6(f,e){H J.X(e[0])};15.Z.W=6(f,e){H J.X(e)};15.Z.X=6(f){K e=n.X.1p(J,14),a;I(e){I(!x&&e.L>1&&p(e,"")>-1){a=15(J.1m,n.Q.W(t(J),"g",""));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;b<e.L;b++)I(a=J.1w.19[b-1])e[a]=e[b];!D&&J.1J&&!e[0].L&&J.12>e.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()==="3f"&&e.1i("${")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+="";I(1j e==="6")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;d<b.L;d++)I(b[d])14[0][b[d]]=14[d+1]}I(a&&f.1J)f.12=14[14.L-2]+14[0].L;H e.1p(N,14)});Y{c=J+"";c=n.Q.W(c,f,6(){K d=14;H n.Q.W(e,C,6(h,g,i){I(g)5b(g){24"$":H"$";24"&":H d[0];24"`":H d[d.L-1].1a(0,d[d.L-2]);24"\'":H d[d.L-1].1a(d[d.L-2]+d[0].L);5a:i="";g=+g;I(!g)H h;O(;g>d.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||"":"$")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+"",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P<a.L&&3b.Z.U.1p(b,d.1a(1));h=d[0].L;c=f.12;I(b.L>=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,"")||h)b.U("")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\(\\?#[^)]*\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"});M.1h(/\\((?!\\?)/,6(){J.19.U(N);H"("});M.1h(/\\(\\?<([$\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H"("});M.1h(/\\\\k<([\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?"\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?"":"(?:)"):f[0]});M.1h(/\\[\\^?]/,6(f){H f[0]==="[]"?"\\\\b\\\\B":"[\\\\s\\\\S]"});M.1h(/^\\(\\?([5A]+)\\)/,6(f){J.3d(f[1]);H""});M.1h(/(?:\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"},M.1B,6(){H J.2K("x")});M.1h(/\\./,6(){H"[\\\\s\\\\S]"},M.1B,6(){H J.2K("s")})})();1j 2e!="1d"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=" "+b)}6 t(a){H a.1i("3e")==0?a:"3e"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={"#":"1c",".":"1l"}[b.1o(0,1)]||"3h",g,i;g=h!="3h"?b.1o(1):b.5u();I((a[h]||"").1i(g)!=-1)H a;O(a=0;d&&a<d.L&&i==N;a++)i=p(d[a],b,c);H i}6 C(a,b){K c={},d;O(d 2g a)c[d]=a[d];O(d 2g b)c[d]=b[d];H c}6 w(a,b,c,d){6 h(g){g=g||1P.5y;I(!g.1F){g.1F=g.52;g.3N=6(){J.5w=11}}c.W(d||1P,g)}a.3g?a.3g("4U"+b,h):a.4y(b,h,11)}6 A(a,b){K c=e.1Y.2j,d=N;I(c==N){c={};O(K h 2g e.1U){K g=e.1U[h];d=g.4x;I(d!=N){g.1V=h.4w();O(g=0;g<d.L;g++)c[d[g]]=h}}e.1Y.2j=c}d=e.1U[c[a]];d==N&&b!=11&&1P.1X(e.13.1x.1X+(e.13.1x.3E+a));H d}6 v(a,b){O(K c=a.1e("\\n"),d=0;d<c.L;d++)c[d]=b(c[d],d);H c.1K("\\n")}6 u(a,b){I(a==N||a.L==0||a=="\\n")H a;a=a.Q(/</g,"&1y;");a=a.Q(/ {2,}/g,6(c){O(K d="",h=0;h<c.L-1;h++)d+=e.13.1W;H d+" "});I(b!=N)a=v(a,6(c){I(c.L==0)H"";K d="";c=c.Q(/^(&2s;| )+/,6(h){d=h;H""});I(c.L==0)H d;H d+\'<17 1g="\'+b+\'">\'+c+"</17>"});H a}6 n(a,b){a.1e("\\n");O(K c="",d=0;d<50;d++)c+=" ";H a=v(a,6(h){I(h.1i("\\t")==-1)H h;O(K g=0;(g=h.1i("\\t"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\s+|\\s+$/g,"")}6 D(a,b){I(a.P<b.P)H-1;Y I(a.P>b.P)H 1;Y I(a.L<b.L)H-1;Y I(a.L>b.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i=="3f")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d="",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\'<a 2h="\'+c+\'">\'+c+"</a>"+d})}6 z(){O(K a=1E.36("1k"),b=[],c=0;c<a.L;c++)a[c].3s=="20"&&b.U(a[c]);H b}6 f(a){a=a.1F;K b=p(a,".20",R);a=p(a,".3O",R);K c=1E.4i("3t");I(!(!a||!b||p(a,"3t"))){B(b.1c);r(b,"1m");O(K d=a.3G,h=[],g=0;g<d.L;g++)h.U(d[g].4z||d[g].4A);h=h.1K("\\r");c.39(1E.4D(h));a.39(c);c.2C();c.4C();w(c,"4u",6(){c.2G.4E(c);b.1l=b.1l.Q("1m","")})}}I(1j 3F!="1d"&&1j M=="1d")M=3F("M").M;K e={2v:{"1g-27":"","2i-1s":1,"2z-1s-2t":11,1M:N,1t:N,"42-45":R,"43-22":4,1u:R,16:R,"3V-17":R,2l:11,"41-40":R,2k:11,"1z-1k":11},13:{1W:"&2s;",2M:R,46:11,44:11,34:"4n",1x:{21:"4o 1m",2P:"?",1X:"1v\\n\\n",3E:"4r\'t 4t 1D O: ",4g:"4m 4B\'t 51 O 1z-1k 4F: ",37:\'<!4T 1z 4S "-//4V//3H 4W 1.0 4Z//4Y" "1Z://2y.3L.3K/4X/3I/3H/3I-4P.4J"><1z 4I="1Z://2y.3L.3K/4L/5L"><3J><4N 1Z-4M="5G-5M" 6K="2O/1z; 6J=6I-8" /><1t>6L 1v</1t></3J><3B 1L="25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;"><T 1L="2O-3D:3C;3w-32:1.6z;"><T 1L="25-22:6A-6E;">1v</T><T 1L="25-22:.6C;3w-6B:6R;"><T>3v 3.0.76 (72 73 3x)</T><T><a 2h="1Z://3u.2w/1v" 1F="38" 1L="2f:#3y">1Z://3u.2w/1v</a></T><T>70 17 6U 71.</T><T>6T 6X-3x 6Y 6D.</T></T><T>6t 61 60 J 1k, 5Z <a 2h="6u://2y.62.2w/63-66/65?64=5X-5W&5P=5O" 1L="2f:#3y">5R</a> 5V <2R/>5U 5T 5S!</T></T></3B></1z>\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\/\\*[\\s\\S]*?\\*\\//2c,6m:/\\/\\/.*$/2c,6l:/#.*$/2c,6k:/"([^\\\\"\\n]|\\\\.)*"/g,6o:/\'([^\\\\\'\\n]|\\\\.)*\'/g,6p:1f M(\'"([^\\\\\\\\"]|\\\\\\\\.)*"\',"3z"),6s:1f M("\'([^\\\\\\\\\']|\\\\\\\\.)*\'","3z"),6q:/(&1y;|<)!--[\\s\\S]*?--(&1G;|>)/2c,3M:/\\w+:\\/\\/[\\w-.\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\?=?/g,1b:/\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\/\\s*1k\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\'<T 1g="16">\',d=e.16.2x,h=d.2X,g=0;g<h.L;g++)c+=(d[h[g]].1H||b)(a,h[g]);c+="</T>";H c},2o:6(a,b,c){H\'<2W><a 2h="#" 1g="6e 6h\'+b+" "+b+\'">\'+c+"</a></2W>"},2b:6(a){K b=a.1F,c=b.1l||"";b=B(p(b,".20",R).1c);K d=6(h){H(h=15(h+"6f(\\\\w+)").X(c))?h[1]:N}("6g");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:["21","2P"],21:{1H:6(a){I(a.V("2l")!=R)H"";K b=a.V("1t");H e.16.2o(a,"21",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q("47","")}},2P:{2B:6(){K a="68=0";a+=", 18="+(31.30-33)/2+", 32="+(31.2Z-2Y)/2+", 30=33, 2Z=2Y";a=a.Q(/^,/,"");a=1P.6Z("","38",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h<c.L;h++)d.U(c[h]);c=d}c=c;d=[];I(e.13.2M)c=c.1O(z());I(c.L===0)H d;O(h=0;h<c.L;h++){O(K g=c[h],i=a,k=c[h].1l,j=3W 0,l={},m=1f M("^\\\\[(?<2V>(.*?))\\\\]$"),s=1f M("(?<27>[\\\\w-]+)\\\\s*:\\\\s*(?<1T>[\\\\w-%#]+|\\\\[.*?\\\\]|\\".*?\\"|\'.*?\')\\\\s*;?","g");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\'"]|[\'"]$/g,"");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\s*,\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g<c.L;g++){b=c[g];K i=b.1F,k=b.1n,j=k.1D,l;I(j!=N){I(k["1z-1k"]=="R"||e.2v["1z-1k"]==R){d=1f e.4l(j);j="4O"}Y I(d=A(j))d=1f d;Y 6H;l=i.3X;I(h.2M){l=l;K m=x(l),s=11;I(m.1i("<![6G[")==0){m=m.4h(9);s=R}K o=m.L;I(m.1i("]]\\>")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||"")!="")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||"")!="")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,"4k",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;m<j.L;m++)j[m].P+=l}K c=A(a),d,h=1f e.1U.5Y,g=J,i="2F 1H 2Q".1e(" ");I(c!=N){d=1f c;O(K k=0;k<i.L;k++)(6(){K j=i[k];g[j]=6(){H h[j].1p(h,14)}})();d.28==N?1P.1X(e.13.1x.1X+(e.13.1x.4g+a)):h.2J.U({1I:d.28.17,2D:6(j){O(K l=j.17,m=[],s=d.2J,o=j.P+j.18.L,F=d.28,q,G=0;G<s.L;G++){q=y(l,s[G]);b(q,o);m=m.1O(q)}I(F.18!=N&&j.18!=N){q=y(j.18,F.18);b(q,j.P);m=m.1O(q)}I(F.1b!=N&&j.1b!=N){q=y(j.1b,F.1b);b(q,j.P+j[0].5Q(j.1b));m=m.1O(q)}O(j=0;j<m.L;j++)m[j].1V=c.1V;H m}})}};e.4j=6(){};e.4j.Z={V:6(a,b){K c=J.1n[a];c=c==N?b:c;K d={"R":R,"11":11}[c];H d==N?c:d},3Y:6(a){H 1E.4i(a)},4c:6(a,b){K c=[];I(a!=N)O(K d=0;d<a.L;d++)I(1j a[d]=="2m")c=c.1O(y(b,a[d]));H J.4e(c.6b(D))},4e:6(a){O(K b=0;b<a.L;b++)I(a[b]!==N)O(K c=a[b],d=c.P+c.L,h=b+1;h<a.L&&a[b]!==N;h++){K g=a[h];I(g!==N)I(g.P>d)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P<d)a[h]=N}H a},4d:6(a){K b=[],c=2u(J.V("2i-1s"));v(a,6(d,h){b.U(h+c)});H b},3U:6(a){K b=J.V("1M",[]);I(1j b!="2m"&&b.U==N)b=[b];a:{a=a.1q();K c=3W 0;O(c=c=1Q.6c(c||0,0);c<b.L;c++)I(b[c]==a){b=c;1N a}b=-1}H b!=-1},2r:6(a,b,c){a=["1s","6i"+b,"P"+a,"6r"+(b%2==0?1:2).1q()];J.3U(b)&&a.U("67");b==0&&a.U("1N");H\'<T 1g="\'+a.1K(" ")+\'">\'+c+"</T>"},3Q:6(a,b){K c="",d=a.1e("\\n").L,h=2u(J.V("2i-1s")),g=J.V("2z-1s-2t");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i<d;i++){K k=b?b[i]:h+i,j;I(k==0)j=e.13.1W;Y{j=g;O(K l=k.1q();l.L<j;)l="0"+l;j=l}a=j;c+=J.2r(i,k,a)}H c},49:6(a,b){a=x(a);K c=a.1e("\\n");J.V("2z-1s-2t");K d=2u(J.V("2i-1s"));a="";O(K h=J.V("1D"),g=0;g<c.L;g++){K i=c[g],k=/^(&2s;|\\s)+/.X(i),j=N,l=b?b[g]:d+g;I(k!=N){j=k[0].1q();i=i.1o(j.L);j=j.Q(" ",e.13.1W)}i=x(i);I(i.L==0)i=e.13.1W;a+=J.2r(g,l,(j!=N?\'<17 1g="\'+h+\' 5N">\'+j+"</17>":"")+i)}H a},4f:6(a){H a?"<4a>"+a+"</4a>":""},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+" ":""}O(K d=0,h="",g=J.V("1D",""),i=0;i<b.L;i++){K k=b[i],j;I(!(k===N||k.L===0)){j=c(k);h+=u(a.1o(d,k.P-d),j+"48")+u(k.1T,j+k.23);d=k.P+k.L+(k.75||0)}}h+=u(a.1o(d),c()+"48");H h},1H:6(a){K b="",c=["20"],d;I(J.V("2k")==R)J.1n.16=J.1n.1u=11;1l="20";J.V("2l")==R&&c.U("47");I((1u=J.V("1u"))==11)c.U("6S");c.U(J.V("1g-27"));c.U(J.V("1D"));a=a.Q(/^[ ]*[\\n]+|[\\n]*[ ]*$/g,"").Q(/\\r/g," ");b=J.V("43-22");I(J.V("42-45")==R)a=n(a,b);Y{O(K h="",g=0;g<b;g++)h+=" ";a=a.Q(/\\t/g,h)}a=a;a:{b=a=a;h=/<2R\\s*\\/?>|&1y;2R\\s*\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,"\\n");I(e.13.44==R)b=b.Q(h,"");b=b.1e("\\n");h=/^\\s*/;g=4Q;O(K i=0;i<b.L&&g>0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i<b.L;i++)b[i]=b[i].1o(g);a=b.1K("\\n")}I(1u)d=J.4d(a);b=J.4c(J.2J,a);b=J.4b(a,b);b=J.49(b,d);I(J.V("41-40"))b=E(b);1j 2H!="1d"&&2H.3S&&2H.3S.1C(/5s/)&&c.U("5t");H b=\'<T 1c="\'+t(J.1c)+\'" 1g="\'+c.1K(" ")+\'">\'+(J.V("16")?e.16.1H(J):"")+\'<3Z 5z="0" 5H="0" 5J="0">\'+J.4f(J.V("1t"))+"<3T><3P>"+(1u?\'<2d 1g="1u">\'+J.3Q(a)+"</2d>":"")+\'<2d 1g="17"><T 1g="3O">\'+b+"</T></2d></3P></3T></3Z></T>"},2F:6(a){I(a===N)a="";J.17=a;K b=J.3Y("T");b.3X=J.1H(a);J.V("16")&&w(p(b,".16"),"5c",e.16.2b);J.V("3V-17")&&w(p(b,".17"),"56",f);H b},2Q:6(a){J.1c=""+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V("2k")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\s+|\\s+$/g,"").Q(/\\s+/g,"|");H"\\\\b(?:"+a+")\\\\b"},5f:6(a){J.28={18:{1I:a.18,23:"1k"},1b:{1I:a.1b,23:"1k"},17:1f M("(?<18>"+a.18.1m+")(?<17>.*?)(?<1b>"+a.1b.1m+")","5o")}}};H e}();1j 2e!="1d"&&(2e.1v=1v);',62,441,'||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83'.split('|'),0,{}))
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shCore.min.js b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shCore.min.js
new file mode 100644
index 00000000..0ec48344
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/shCore.min.js
@@ -0,0 +1 @@
+eval(function(h,b,j,f,g,i){g=function(a){return(a<b?"":g(parseInt(a/b)))+((a=a%b)>35?String.fromCharCode(a+29):a.toString(36))};if(!"".replace(/^/,String)){while(j--){i[g(j)]=f[j]||g(j)}f=[function(a){return i[a]}];g=function(){return"\\w+"};j=1}while(j--){if(f[j]){h=h.replace(new RegExp("\\b"+g(j)+"\\b","g"),f[j])}}return h}('K M;I(M)1S 2U("2a\'t 4k M 4K 2g 3l 4G 4H");(6(){6 r(f,e){I(!M.1R(f))1S 3m("3s 15 4R");K a=f.1w;f=M(f.1m,t(f)+(e||""));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?"g":"")+(f.4s?"i":"")+(f.4p?"m":"")+(f.4v?"x":"")+(f.3n?"y":"")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a<f.L;a++)I(f[a]===e)H a;H-1}M=6(f,e){K a=[],b=M.1B,c=0,d,h;I(M.1R(f)){I(e!==1d)1S 3m("2a\'t 5r 5I 5F 5B 5C 15 5E 5p");H r(f)}I(v)1S 2U("2a\'t W 3l M 59 5m 5g 5x 5i");e=e||"";O(d={2N:11,19:[],2K:6(g){H e.1i(g)>-1},3d:6(g){e+=g}};c<f.L;)I(h=B(f,c,b,d)){a.U(h.3k);c+=h.1C[0].L||1}Y I(h=n.X.W(z[b],f.1a(c))){a.U(h[0]);c+=h[0].L}Y{h=f.3a(c);I(h==="[")b=M.2I;Y I(h==="]")b=M.1B;a.U(h);c++}a=15(a.1K(""),n.Q.W(e,w,""));a.1w={1m:f,19:d.2N?d.19:N};H a};M.3v="1.5.0";M.2I=1;M.1B=2;K C=/\\$(?:(\\d\\d?|[$&`\'])|{([$\\w]+)})/g,w=/[^5h]+|([\\s\\S])(?=[\\s\\S]*\\1)/g,A=/^(?:[?*+]|{\\d+(?:,\\d*)?})\\??/,v=11,u=[],n={X:15.Z.X,1A:15.Z.1A,1C:1r.Z.1C,Q:1r.Z.Q,1e:1r.Z.1e},x=n.X.W(/()??/,"")[1]===1d,D=6(){K f=/^/g;n.1A.W(f,"");H!f.12}(),y=6(){K f=/x/g;n.Q.W("x",f,"");H!f.12}(),E=15.Z.3n!==1d,z={};z[M.2I]=/^(?:\\\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\\29-26-f]{2}|u[\\29-26-f]{4}|c[A-3o-z]|[\\s\\S]))/;z[M.1B]=/^(?:\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\\d*|x[\\29-26-f]{2}|u[\\29-26-f]{4}|c[A-3o-z]|[\\s\\S])|\\(\\?[:=!]|[?*+]\\?|{\\d+(?:,\\d*)?}\\??)/;M.1h=6(f,e,a,b){u.U({2q:r(f,"g"+(E?"y":"")),2b:e,3r:a||M.1B,2p:b||N})};M.2n=6(f,e){K a=f+"/"+(e||"");H M.2n[a]||(M.2n[a]=M(f,e))};M.3c=6(f){H r(f,"g")};M.5l=6(f){H f.Q(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g,"\\\\$&")};M.5e=6(f,e,a,b){e=r(e,"g"+(b&&E?"y":""));e.12=a=a||0;f=e.X(f);H b?f&&f.P===a?f:N:f};M.3q=6(){M.1h=6(){1S 2U("2a\'t 55 1h 54 3q")}};M.1R=6(f){H 53.Z.1q.W(f)==="[2m 15]"};M.3p=6(f,e,a,b){O(K c=r(e,"g"),d=-1,h;h=c.X(f);){a.W(b,h,++d,f,c);c.12===h.P&&c.12++}I(e.1J)e.12=0};M.57=6(f,e){H 6 a(b,c){K d=e[c].1I?e[c]:{1I:e[c]},h=r(d.1I,"g"),g=[],i;O(i=0;i<b.L;i++)M.3p(b[i],h,6(k){g.U(d.3j?k[d.3j]||"":k[0])});H c===e.L-1||!g.L?g:a(g,c+1)}([f],0)};15.Z.1p=6(f,e){H J.X(e[0])};15.Z.W=6(f,e){H J.X(e)};15.Z.X=6(f){K e=n.X.1p(J,14),a;I(e){I(!x&&e.L>1&&p(e,"")>-1){a=15(J.1m,n.Q.W(t(J),"g",""));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;b<e.L;b++)I(a=J.1w.19[b-1])e[a]=e[b];!D&&J.1J&&!e[0].L&&J.12>e.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()==="3f"&&e.1i("${")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+="";I(1j e==="6")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;d<b.L;d++)I(b[d])14[0][b[d]]=14[d+1]}I(a&&f.1J)f.12=14[14.L-2]+14[0].L;H e.1p(N,14)});Y{c=J+"";c=n.Q.W(c,f,6(){K d=14;H n.Q.W(e,C,6(h,g,i){I(g)5b(g){24"$":H"$";24"&":H d[0];24"`":H d[d.L-1].1a(0,d[d.L-2]);24"\'":H d[d.L-1].1a(d[d.L-2]+d[0].L);5a:i="";g=+g;I(!g)H h;O(;g>d.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||"":"$")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+"",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P<a.L&&3b.Z.U.1p(b,d.1a(1));h=d[0].L;c=f.12;I(b.L>=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,"")||h)b.U("")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\(\\?#[^)]*\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"});M.1h(/\\((?!\\?)/,6(){J.19.U(N);H"("});M.1h(/\\(\\?<([$\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H"("});M.1h(/\\\\k<([\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?"\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?"":"(?:)"):f[0]});M.1h(/\\[\\^?]/,6(f){H f[0]==="[]"?"\\\\b\\\\B":"[\\\\s\\\\S]"});M.1h(/^\\(\\?([5A]+)\\)/,6(f){J.3d(f[1]);H""});M.1h(/(?:\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"},M.1B,6(){H J.2K("x")});M.1h(/\\./,6(){H"[\\\\s\\\\S]"},M.1B,6(){H J.2K("s")})})();1j 2e!="1d"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=" "+b)}6 t(a){H a.1i("3e")==0?a:"3e"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={"#":"1c",".":"1l"}[b.1o(0,1)]||"3h",g,i;g=h!="3h"?b.1o(1):b.5u();I((a[h]||"").1i(g)!=-1)H a;O(a=0;d&&a<d.L&&i==N;a++)i=p(d[a],b,c);H i}6 C(a,b){K c={},d;O(d 2g a)c[d]=a[d];O(d 2g b)c[d]=b[d];H c}6 w(a,b,c,d){6 h(g){g=g||1P.5y;I(!g.1F){g.1F=g.52;g.3N=6(){J.5w=11}}c.W(d||1P,g)}a.3g?a.3g("4U"+b,h):a.4y(b,h,11)}6 A(a,b){K c=e.1Y.2j,d=N;I(c==N){c={};O(K h 2g e.1U){K g=e.1U[h];d=g.4x;I(d!=N){g.1V=h.4w();O(g=0;g<d.L;g++)c[d[g]]=h}}e.1Y.2j=c}d=e.1U[c[a]];d==N&&b!=11&&1P.1X(e.13.1x.1X+(e.13.1x.3E+a));H d}6 v(a,b){O(K c=a.1e("\\n"),d=0;d<c.L;d++)c[d]=b(c[d],d);H c.1K("\\n")}6 u(a,b){I(a==N||a.L==0||a=="\\n")H a;a=a.Q(/</g,"&1y;");a=a.Q(/ {2,}/g,6(c){O(K d="",h=0;h<c.L-1;h++)d+=e.13.1W;H d+" "});I(b!=N)a=v(a,6(c){I(c.L==0)H"";K d="";c=c.Q(/^(&2s;| )+/,6(h){d=h;H""});I(c.L==0)H d;H d+\'<17 1g="\'+b+\'">\'+c+"</17>"});H a}6 n(a,b){a.1e("\\n");O(K c="",d=0;d<50;d++)c+=" ";H a=v(a,6(h){I(h.1i("\\t")==-1)H h;O(K g=0;(g=h.1i("\\t"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\s+|\\s+$/g,"")}6 D(a,b){I(a.P<b.P)H-1;Y I(a.P>b.P)H 1;Y I(a.L<b.L)H-1;Y I(a.L>b.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i=="3f")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d="",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\'<a 2h="\'+c+\'">\'+c+"</a>"+d})}6 z(){O(K a=1E.36("1k"),b=[],c=0;c<a.L;c++)a[c].3s=="20"&&b.U(a[c]);H b}6 f(a){a=a.1F;K b=p(a,".20",R);a=p(a,".3O",R);K c=1E.4i("3t");I(!(!a||!b||p(a,"3t"))){B(b.1c);r(b,"1m");O(K d=a.3G,h=[],g=0;g<d.L;g++)h.U(d[g].4z||d[g].4A);h=h.1K("\\r");c.39(1E.4D(h));a.39(c);c.2C();c.4C();w(c,"4u",6(){c.2G.4E(c);b.1l=b.1l.Q("1m","")})}}I(1j 3F!="1d"&&1j M=="1d")M=3F("M").M;K e={2v:{"1g-27":"","2i-1s":1,"2z-1s-2t":11,1M:N,1t:N,"42-45":R,"43-22":4,1u:R,16:R,"3V-17":R,2l:11,"41-40":R,2k:11,"1z-1k":11},13:{1W:"&2s;",2M:R,46:11,44:11,34:"4n",1x:{21:"4o 1m",2P:"?",1X:"1v\\n\\n",3E:"4r\'t 4t 1D O: ",4g:"4m 4B\'t 51 O 1z-1k 4F: ",37:\'<!4T 1z 4S "-//4V//3H 4W 1.0 4Z//4Y" "1Z://2y.3L.3K/4X/3I/3H/3I-4P.4J"><1z 4I="1Z://2y.3L.3K/4L/5L"><3J><4N 1Z-4M="5G-5M" 6K="2O/1z; 6J=6I-8" /><1t>6L 1v</1t></3J><3B 1L="25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;"><T 1L="2O-3D:3C;3w-32:1.6z;"><T 1L="25-22:6A-6E;">1v</T><T 1L="25-22:.6C;3w-6B:6R;"><T>3v 3.0.76 (72 73 3x)</T><T><a 2h="1Z://3u.2w/1v" 1F="38" 1L="2f:#3y">1Z://3u.2w/1v</a></T><T>70 17 6U 71.</T><T>6T 6X-3x 6Y 6D.</T></T><T>6t 61 60 J 1k, 5Z <a 2h="6u://2y.62.2w/63-66/65?64=5X-5W&5P=5O" 1L="2f:#3y">5R</a> 5V <2R/>5U 5T 5S!</T></T></3B></1z>\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\/\\*[\\s\\S]*?\\*\\//2c,6m:/\\/\\/.*$/2c,6l:/#.*$/2c,6k:/"([^\\\\"\\n]|\\\\.)*"/g,6o:/\'([^\\\\\'\\n]|\\\\.)*\'/g,6p:1f M(\'"([^\\\\\\\\"]|\\\\\\\\.)*"\',"3z"),6s:1f M("\'([^\\\\\\\\\']|\\\\\\\\.)*\'","3z"),6q:/(&1y;|<)!--[\\s\\S]*?--(&1G;|>)/2c,3M:/\\w+:\\/\\/[\\w-.\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\?=?/g,1b:/\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\/\\s*1k\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\'<T 1g="16">\',d=e.16.2x,h=d.2X,g=0;g<h.L;g++)c+=(d[h[g]].1H||b)(a,h[g]);c+="</T>";H c},2o:6(a,b,c){H\'<2W><a 2h="#" 1g="6e 6h\'+b+" "+b+\'">\'+c+"</a></2W>"},2b:6(a){K b=a.1F,c=b.1l||"";b=B(p(b,".20",R).1c);K d=6(h){H(h=15(h+"6f(\\\\w+)").X(c))?h[1]:N}("6g");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:["21","2P"],21:{1H:6(a){I(a.V("2l")!=R)H"";K b=a.V("1t");H e.16.2o(a,"21",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q("47","")}},2P:{2B:6(){K a="68=0";a+=", 18="+(31.30-33)/2+", 32="+(31.2Z-2Y)/2+", 30=33, 2Z=2Y";a=a.Q(/^,/,"");a=1P.6Z("","38",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h<c.L;h++)d.U(c[h]);c=d}c=c;d=[];I(e.13.2M)c=c.1O(z());I(c.L===0)H d;O(h=0;h<c.L;h++){O(K g=c[h],i=a,k=c[h].1l,j=3W 0,l={},m=1f M("^\\\\[(?<2V>(.*?))\\\\]$"),s=1f M("(?<27>[\\\\w-]+)\\\\s*:\\\\s*(?<1T>[\\\\w-%#]+|\\\\[.*?\\\\]|\\".*?\\"|\'.*?\')\\\\s*;?","g");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\'"]|[\'"]$/g,"");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\s*,\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g<c.L;g++){b=c[g];K i=b.1F,k=b.1n,j=k.1D,l;I(j!=N){I(k["1z-1k"]=="R"||e.2v["1z-1k"]==R){d=1f e.4l(j);j="4O"}Y I(d=A(j))d=1f d;Y 6H;l=i.3X;I(h.2M){l=l;K m=x(l),s=11;I(m.1i("<![6G[")==0){m=m.4h(9);s=R}K o=m.L;I(m.1i("]]\\>")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||"")!="")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||"")!="")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,"4k",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;m<j.L;m++)j[m].P+=l}K c=A(a),d,h=1f e.1U.5Y,g=J,i="2F 1H 2Q".1e(" ");I(c!=N){d=1f c;O(K k=0;k<i.L;k++)(6(){K j=i[k];g[j]=6(){H h[j].1p(h,14)}})();d.28==N?1P.1X(e.13.1x.1X+(e.13.1x.4g+a)):h.2J.U({1I:d.28.17,2D:6(j){O(K l=j.17,m=[],s=d.2J,o=j.P+j.18.L,F=d.28,q,G=0;G<s.L;G++){q=y(l,s[G]);b(q,o);m=m.1O(q)}I(F.18!=N&&j.18!=N){q=y(j.18,F.18);b(q,j.P);m=m.1O(q)}I(F.1b!=N&&j.1b!=N){q=y(j.1b,F.1b);b(q,j.P+j[0].5Q(j.1b));m=m.1O(q)}O(j=0;j<m.L;j++)m[j].1V=c.1V;H m}})}};e.4j=6(){};e.4j.Z={V:6(a,b){K c=J.1n[a];c=c==N?b:c;K d={"R":R,"11":11}[c];H d==N?c:d},3Y:6(a){H 1E.4i(a)},4c:6(a,b){K c=[];I(a!=N)O(K d=0;d<a.L;d++)I(1j a[d]=="2m")c=c.1O(y(b,a[d]));H J.4e(c.6b(D))},4e:6(a){O(K b=0;b<a.L;b++)I(a[b]!==N)O(K c=a[b],d=c.P+c.L,h=b+1;h<a.L&&a[b]!==N;h++){K g=a[h];I(g!==N)I(g.P>d)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P<d)a[h]=N}H a},4d:6(a){K b=[],c=2u(J.V("2i-1s"));v(a,6(d,h){b.U(h+c)});H b},3U:6(a){K b=J.V("1M",[]);I(1j b!="2m"&&b.U==N)b=[b];a:{a=a.1q();K c=3W 0;O(c=c=1Q.6c(c||0,0);c<b.L;c++)I(b[c]==a){b=c;1N a}b=-1}H b!=-1},2r:6(a,b,c){a=["1s","6i"+b,"P"+a,"6r"+(b%2==0?1:2).1q()];J.3U(b)&&a.U("67");b==0&&a.U("1N");H\'<T 1g="\'+a.1K(" ")+\'">\'+c+"</T>"},3Q:6(a,b){K c="",d=a.1e("\\n").L,h=2u(J.V("2i-1s")),g=J.V("2z-1s-2t");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i<d;i++){K k=b?b[i]:h+i,j;I(k==0)j=e.13.1W;Y{j=g;O(K l=k.1q();l.L<j;)l="0"+l;j=l}a=j;c+=J.2r(i,k,a)}H c},49:6(a,b){a=x(a);K c=a.1e("\\n");J.V("2z-1s-2t");K d=2u(J.V("2i-1s"));a="";O(K h=J.V("1D"),g=0;g<c.L;g++){K i=c[g],k=/^(&2s;|\\s)+/.X(i),j=N,l=b?b[g]:d+g;I(k!=N){j=k[0].1q();i=i.1o(j.L);j=j.Q(" ",e.13.1W)}i=x(i);I(i.L==0)i=e.13.1W;a+=J.2r(g,l,(j!=N?\'<17 1g="\'+h+\' 5N">\'+j+"</17>":"")+i)}H a},4f:6(a){H a?"<4a>"+a+"</4a>":""},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+" ":""}O(K d=0,h="",g=J.V("1D",""),i=0;i<b.L;i++){K k=b[i],j;I(!(k===N||k.L===0)){j=c(k);h+=u(a.1o(d,k.P-d),j+"48")+u(k.1T,j+k.23);d=k.P+k.L+(k.75||0)}}h+=u(a.1o(d),c()+"48");H h},1H:6(a){K b="",c=["20"],d;I(J.V("2k")==R)J.1n.16=J.1n.1u=11;1l="20";J.V("2l")==R&&c.U("47");I((1u=J.V("1u"))==11)c.U("6S");c.U(J.V("1g-27"));c.U(J.V("1D"));a=a.Q(/^[ ]*[\\n]+|[\\n]*[ ]*$/g,"").Q(/\\r/g," ");b=J.V("43-22");I(J.V("42-45")==R)a=n(a,b);Y{O(K h="",g=0;g<b;g++)h+=" ";a=a.Q(/\\t/g,h)}a=a;a:{b=a=a;h=/<2R\\s*\\/?>|&1y;2R\\s*\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,"\\n");I(e.13.44==R)b=b.Q(h,"");b=b.1e("\\n");h=/^\\s*/;g=4Q;O(K i=0;i<b.L&&g>0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i<b.L;i++)b[i]=b[i].1o(g);a=b.1K("\\n")}I(1u)d=J.4d(a);b=J.4c(J.2J,a);b=J.4b(a,b);b=J.49(b,d);I(J.V("41-40"))b=E(b);1j 2H!="1d"&&2H.3S&&2H.3S.1C(/5s/)&&c.U("5t");H b=\'<T 1c="\'+t(J.1c)+\'" 1g="\'+c.1K(" ")+\'">\'+(J.V("16")?e.16.1H(J):"")+\'<3Z 5z="0" 5H="0" 5J="0">\'+J.4f(J.V("1t"))+"<3T><3P>"+(1u?\'<2d 1g="1u">\'+J.3Q(a)+"</2d>":"")+\'<2d 1g="17"><T 1g="3O">\'+b+"</T></2d></3P></3T></3Z></T>"},2F:6(a){I(a===N)a="";J.17=a;K b=J.3Y("T");b.3X=J.1H(a);J.V("16")&&w(p(b,".16"),"5c",e.16.2b);J.V("3V-17")&&w(p(b,".17"),"56",f);H b},2Q:6(a){J.1c=""+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V("2k")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\s+|\\s+$/g,"").Q(/\\s+/g,"|");H"\\\\b(?:"+a+")\\\\b"},5f:6(a){J.28={18:{1I:a.18,23:"1k"},1b:{1I:a.1b,23:"1k"},17:1f M("(?<18>"+a.18.1m+")(?<17>.*?)(?<1b>"+a.1b.1m+")","5o")}}};H e}();1j 2e!="1d"&&(2e.1v=1v);',62,441,"||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83".split("|"),0,{})); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shCore.css b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shCore.css
new file mode 100644
index 00000000..34f6864a
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shCore.css
@@ -0,0 +1,226 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shCore.min.css b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shCore.min.css
new file mode 100644
index 00000000..a2d3a61f
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shCore.min.css
@@ -0,0 +1 @@
+.syntaxhighlighter a,.syntaxhighlighter div,.syntaxhighlighter code,.syntaxhighlighter table,.syntaxhighlighter table td,.syntaxhighlighter table tr,.syntaxhighlighter table tbody,.syntaxhighlighter table thead,.syntaxhighlighter table caption,.syntaxhighlighter textarea{-moz-border-radius:0 0 0 0!important;-webkit-border-radius:0 0 0 0!important;background:none!important;border:0!important;bottom:auto!important;float:none!important;height:auto!important;left:auto!important;line-height:1.1em!important;margin:0!important;outline:0!important;overflow:visible!important;padding:0!important;position:static!important;right:auto!important;text-align:left!important;top:auto!important;vertical-align:baseline!important;width:auto!important;box-sizing:content-box!important;font-family:"Consolas","Bitstream Vera Sans Mono","Courier New",Courier,monospace!important;font-weight:normal!important;font-style:normal!important;font-size:1em!important;min-height:inherit!important;min-height:auto!important;}.syntaxhighlighter{width:100%!important;margin:1em 0 1em 0!important;position:relative!important;overflow:auto!important;font-size:1em!important;}.syntaxhighlighter.source{overflow:hidden!important;}.syntaxhighlighter .bold{font-weight:bold!important;}.syntaxhighlighter .italic{font-style:italic!important;}.syntaxhighlighter .line{white-space:pre!important;}.syntaxhighlighter table{width:100%!important;}.syntaxhighlighter table caption{text-align:left!important;padding:.5em 0 .5em 1em!important;}.syntaxhighlighter table td.code{width:100%!important;}.syntaxhighlighter table td.code .container{position:relative!important;}.syntaxhighlighter table td.code .container textarea{box-sizing:border-box!important;position:absolute!important;left:0!important;top:0!important;width:100%!important;height:100%!important;border:none!important;background:white!important;padding-left:1em!important;overflow:hidden!important;white-space:pre!important;}.syntaxhighlighter table td.gutter .line{text-align:right!important;padding:0 .5em 0 1em!important;}.syntaxhighlighter table td.code .line{padding:0 1em!important;}.syntaxhighlighter.nogutter td.code .container textarea,.syntaxhighlighter.nogutter td.code .line{padding-left:0!important;}.syntaxhighlighter.show{display:block!important;}.syntaxhighlighter.collapsed table{display:none!important;}.syntaxhighlighter.collapsed .toolbar{padding:.1em .8em 0 .8em!important;font-size:1em!important;position:static!important;width:auto!important;height:auto!important;}.syntaxhighlighter.collapsed .toolbar span{display:inline!important;margin-right:1em!important;}.syntaxhighlighter.collapsed .toolbar span a{padding:0!important;display:none!important;}.syntaxhighlighter.collapsed .toolbar span a.expandSource{display:inline!important;}.syntaxhighlighter .toolbar{position:absolute!important;right:1px!important;top:1px!important;width:11px!important;height:11px!important;font-size:10px!important;z-index:10!important;}.syntaxhighlighter .toolbar span.title{display:inline!important;}.syntaxhighlighter .toolbar a{display:block!important;text-align:center!important;text-decoration:none!important;padding-top:1px!important;}.syntaxhighlighter .toolbar a.expandSource{display:none!important;}.syntaxhighlighter.ie{font-size:.9em!important;padding:1px 0 1px 0!important;}.syntaxhighlighter.ie .toolbar{line-height:8px!important;}.syntaxhighlighter.ie .toolbar a{padding-top:0!important;}.syntaxhighlighter.printing .line.alt1 .content,.syntaxhighlighter.printing .line.alt2 .content,.syntaxhighlighter.printing .line.highlighted .number,.syntaxhighlighter.printing .line.highlighted.alt1 .content,.syntaxhighlighter.printing .line.highlighted.alt2 .content{background:none!important;}.syntaxhighlighter.printing .line .number{color:#bbb!important;}.syntaxhighlighter.printing .line .content{color:black!important;}.syntaxhighlighter.printing .toolbar{display:none!important;}.syntaxhighlighter.printing a{text-decoration:none!important;}.syntaxhighlighter.printing .plain,.syntaxhighlighter.printing .plain a{color:black!important;}.syntaxhighlighter.printing .comments,.syntaxhighlighter.printing .comments a{color:#008200!important;}.syntaxhighlighter.printing .string,.syntaxhighlighter.printing .string a{color:blue!important;}.syntaxhighlighter.printing .keyword{color:#069!important;font-weight:bold!important;}.syntaxhighlighter.printing .preprocessor{color:gray!important;}.syntaxhighlighter.printing .variable{color:#a70!important;}.syntaxhighlighter.printing .value{color:#090!important;}.syntaxhighlighter.printing .functions{color:#ff1493!important;}.syntaxhighlighter.printing .constants{color:#06c!important;}.syntaxhighlighter.printing .script{font-weight:bold!important;}.syntaxhighlighter.printing .color1,.syntaxhighlighter.printing .color1 a{color:gray!important;}.syntaxhighlighter.printing .color2,.syntaxhighlighter.printing .color2 a{color:#ff1493!important;}.syntaxhighlighter.printing .color3,.syntaxhighlighter.printing .color3 a{color:red!important;}.syntaxhighlighter.printing .break,.syntaxhighlighter.printing .break a{color:black!important;} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shCoreDefault.css b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shCoreDefault.css
new file mode 100644
index 00000000..08f9e10e
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shCoreDefault.css
@@ -0,0 +1,328 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
+
+.syntaxhighlighter {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #e0e0e0 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: black !important;
+}
+.syntaxhighlighter table caption {
+ color: black !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #6ce26c !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #6ce26c !important;
+ color: white !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: blue !important;
+ background: white !important;
+ border: 1px solid #6ce26c !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: blue !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: red !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #6ce26c !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: black !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: black !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: blue !important;
+}
+.syntaxhighlighter .keyword {
+ color: #006699 !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #006699 !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: red !important;
+}
+
+.syntaxhighlighter .keyword {
+ font-weight: bold !important;
+}
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shCoreDefault.min.css b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shCoreDefault.min.css
new file mode 100644
index 00000000..0b99c299
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shCoreDefault.min.css
@@ -0,0 +1 @@
+.syntaxhighlighter a,.syntaxhighlighter div,.syntaxhighlighter code,.syntaxhighlighter table,.syntaxhighlighter table td,.syntaxhighlighter table tr,.syntaxhighlighter table tbody,.syntaxhighlighter table thead,.syntaxhighlighter table caption,.syntaxhighlighter textarea{-moz-border-radius:0 0 0 0!important;-webkit-border-radius:0 0 0 0!important;background:none!important;border:0!important;bottom:auto!important;float:none!important;height:auto!important;left:auto!important;line-height:1.1em!important;margin:0!important;outline:0!important;overflow:visible!important;padding:0!important;position:static!important;right:auto!important;text-align:left!important;top:auto!important;vertical-align:baseline!important;width:auto!important;box-sizing:content-box!important;font-family:"Consolas","Bitstream Vera Sans Mono","Courier New",Courier,monospace!important;font-weight:normal!important;font-style:normal!important;font-size:1em!important;min-height:inherit!important;min-height:auto!important;}.syntaxhighlighter{width:100%!important;margin:1em 0 1em 0!important;position:relative!important;overflow:auto!important;font-size:1em!important;}.syntaxhighlighter.source{overflow:hidden!important;}.syntaxhighlighter .bold{font-weight:bold!important;}.syntaxhighlighter .italic{font-style:italic!important;}.syntaxhighlighter .line{white-space:pre!important;}.syntaxhighlighter table{width:100%!important;}.syntaxhighlighter table caption{text-align:left!important;padding:.5em 0 .5em 1em!important;}.syntaxhighlighter table td.code{width:100%!important;}.syntaxhighlighter table td.code .container{position:relative!important;}.syntaxhighlighter table td.code .container textarea{box-sizing:border-box!important;position:absolute!important;left:0!important;top:0!important;width:100%!important;height:100%!important;border:none!important;background:white!important;padding-left:1em!important;overflow:hidden!important;white-space:pre!important;}.syntaxhighlighter table td.gutter .line{text-align:right!important;padding:0 .5em 0 1em!important;}.syntaxhighlighter table td.code .line{padding:0 1em!important;}.syntaxhighlighter.nogutter td.code .container textarea,.syntaxhighlighter.nogutter td.code .line{padding-left:0!important;}.syntaxhighlighter.show{display:block!important;}.syntaxhighlighter.collapsed table{display:none!important;}.syntaxhighlighter.collapsed .toolbar{padding:.1em .8em 0 .8em!important;font-size:1em!important;position:static!important;width:auto!important;height:auto!important;}.syntaxhighlighter.collapsed .toolbar span{display:inline!important;margin-right:1em!important;}.syntaxhighlighter.collapsed .toolbar span a{padding:0!important;display:none!important;}.syntaxhighlighter.collapsed .toolbar span a.expandSource{display:inline!important;}.syntaxhighlighter .toolbar{position:absolute!important;right:1px!important;top:1px!important;width:11px!important;height:11px!important;font-size:10px!important;z-index:10!important;}.syntaxhighlighter .toolbar span.title{display:inline!important;}.syntaxhighlighter .toolbar a{display:block!important;text-align:center!important;text-decoration:none!important;padding-top:1px!important;}.syntaxhighlighter .toolbar a.expandSource{display:none!important;}.syntaxhighlighter.ie{font-size:.9em!important;padding:1px 0 1px 0!important;}.syntaxhighlighter.ie .toolbar{line-height:8px!important;}.syntaxhighlighter.ie .toolbar a{padding-top:0!important;}.syntaxhighlighter.printing .line.alt1 .content,.syntaxhighlighter.printing .line.alt2 .content,.syntaxhighlighter.printing .line.highlighted .number,.syntaxhighlighter.printing .line.highlighted.alt1 .content,.syntaxhighlighter.printing .line.highlighted.alt2 .content{background:none!important;}.syntaxhighlighter.printing .line .number{color:#bbb!important;}.syntaxhighlighter.printing .line .content{color:black!important;}.syntaxhighlighter.printing .toolbar{display:none!important;}.syntaxhighlighter.printing a{text-decoration:none!important;}.syntaxhighlighter.printing .plain,.syntaxhighlighter.printing .plain a{color:black!important;}.syntaxhighlighter.printing .comments,.syntaxhighlighter.printing .comments a{color:#008200!important;}.syntaxhighlighter.printing .string,.syntaxhighlighter.printing .string a{color:blue!important;}.syntaxhighlighter.printing .keyword{color:#069!important;font-weight:bold!important;}.syntaxhighlighter.printing .preprocessor{color:gray!important;}.syntaxhighlighter.printing .variable{color:#a70!important;}.syntaxhighlighter.printing .value{color:#090!important;}.syntaxhighlighter.printing .functions{color:#ff1493!important;}.syntaxhighlighter.printing .constants{color:#06c!important;}.syntaxhighlighter.printing .script{font-weight:bold!important;}.syntaxhighlighter.printing .color1,.syntaxhighlighter.printing .color1 a{color:gray!important;}.syntaxhighlighter.printing .color2,.syntaxhighlighter.printing .color2 a{color:#ff1493!important;}.syntaxhighlighter.printing .color3,.syntaxhighlighter.printing .color3 a{color:red!important;}.syntaxhighlighter.printing .break,.syntaxhighlighter.printing .break a{color:black!important;}.syntaxhighlighter{background-color:white!important;}.syntaxhighlighter .line.alt1{background-color:white!important;}.syntaxhighlighter .line.alt2{background-color:white!important;}.syntaxhighlighter .line.highlighted.alt1,.syntaxhighlighter .line.highlighted.alt2{background-color:#e0e0e0!important;}.syntaxhighlighter .line.highlighted.number{color:black!important;}.syntaxhighlighter table caption{color:black!important;}.syntaxhighlighter .gutter{color:#afafaf!important;}.syntaxhighlighter .gutter .line{border-right:3px solid #6ce26c!important;}.syntaxhighlighter .gutter .line.highlighted{background-color:#6ce26c!important;color:white!important;}.syntaxhighlighter.printing .line .content{border:none!important;}.syntaxhighlighter.collapsed{overflow:visible!important;}.syntaxhighlighter.collapsed .toolbar{color:blue!important;background:white!important;border:1px solid #6ce26c!important;}.syntaxhighlighter.collapsed .toolbar a{color:blue!important;}.syntaxhighlighter.collapsed .toolbar a:hover{color:red!important;}.syntaxhighlighter .toolbar{color:white!important;background:#6ce26c!important;border:none!important;}.syntaxhighlighter .toolbar a{color:white!important;}.syntaxhighlighter .toolbar a:hover{color:black!important;}.syntaxhighlighter .plain,.syntaxhighlighter .plain a{color:black!important;}.syntaxhighlighter .comments,.syntaxhighlighter .comments a{color:#008200!important;}.syntaxhighlighter .string,.syntaxhighlighter .string a{color:blue!important;}.syntaxhighlighter .keyword{color:#069!important;}.syntaxhighlighter .preprocessor{color:gray!important;}.syntaxhighlighter .variable{color:#a70!important;}.syntaxhighlighter .value{color:#090!important;}.syntaxhighlighter .functions{color:#ff1493!important;}.syntaxhighlighter .constants{color:#06c!important;}.syntaxhighlighter .script{font-weight:bold!important;color:#069!important;background-color:none!important;}.syntaxhighlighter .color1,.syntaxhighlighter .color1 a{color:gray!important;}.syntaxhighlighter .color2,.syntaxhighlighter .color2 a{color:#ff1493!important;}.syntaxhighlighter .color3,.syntaxhighlighter .color3 a{color:red!important;}.syntaxhighlighter .keyword{font-weight:bold!important;} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shThemeDefault.css b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shThemeDefault.css
new file mode 100644
index 00000000..13654117
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shThemeDefault.css
@@ -0,0 +1,117 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #e0e0e0 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: black !important;
+}
+.syntaxhighlighter table caption {
+ color: black !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #6ce26c !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #6ce26c !important;
+ color: white !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: blue !important;
+ background: white !important;
+ border: 1px solid #6ce26c !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: blue !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: red !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #6ce26c !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: black !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: black !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: blue !important;
+}
+.syntaxhighlighter .keyword {
+ color: #006699 !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #006699 !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: red !important;
+}
+
+.syntaxhighlighter .keyword {
+ font-weight: bold !important;
+}
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shThemeDefault.min.css b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shThemeDefault.min.css
new file mode 100644
index 00000000..57326f47
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shThemeDefault.min.css
@@ -0,0 +1 @@
+.syntaxhighlighter{background-color:white!important;}.syntaxhighlighter .line.alt1{background-color:white!important;}.syntaxhighlighter .line.alt2{background-color:white!important;}.syntaxhighlighter .line.highlighted.alt1,.syntaxhighlighter .line.highlighted.alt2{background-color:#e0e0e0!important;}.syntaxhighlighter .line.highlighted.number{color:black!important;}.syntaxhighlighter table caption{color:black!important;}.syntaxhighlighter .gutter{color:#afafaf!important;}.syntaxhighlighter .gutter .line{border-right:3px solid #6ce26c!important;}.syntaxhighlighter .gutter .line.highlighted{background-color:#6ce26c!important;color:white!important;}.syntaxhighlighter.printing .line .content{border:none!important;}.syntaxhighlighter.collapsed{overflow:visible!important;}.syntaxhighlighter.collapsed .toolbar{color:blue!important;background:white!important;border:1px solid #6ce26c!important;}.syntaxhighlighter.collapsed .toolbar a{color:blue!important;}.syntaxhighlighter.collapsed .toolbar a:hover{color:red!important;}.syntaxhighlighter .toolbar{color:white!important;background:#6ce26c!important;border:none!important;}.syntaxhighlighter .toolbar a{color:white!important;}.syntaxhighlighter .toolbar a:hover{color:black!important;}.syntaxhighlighter .plain,.syntaxhighlighter .plain a{color:black!important;}.syntaxhighlighter .comments,.syntaxhighlighter .comments a{color:#008200!important;}.syntaxhighlighter .string,.syntaxhighlighter .string a{color:blue!important;}.syntaxhighlighter .keyword{color:#069!important;}.syntaxhighlighter .preprocessor{color:gray!important;}.syntaxhighlighter .variable{color:#a70!important;}.syntaxhighlighter .value{color:#090!important;}.syntaxhighlighter .functions{color:#ff1493!important;}.syntaxhighlighter .constants{color:#06c!important;}.syntaxhighlighter .script{font-weight:bold!important;color:#069!important;background-color:none!important;}.syntaxhighlighter .color1,.syntaxhighlighter .color1 a{color:gray!important;}.syntaxhighlighter .color2,.syntaxhighlighter .color2 a{color:#ff1493!important;}.syntaxhighlighter .color3,.syntaxhighlighter .color3 a{color:red!important;}.syntaxhighlighter .keyword{font-weight:bold!important;} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shThemejqPlot.css b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shThemejqPlot.css
new file mode 100644
index 00000000..9ccf1074
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shThemejqPlot.css
@@ -0,0 +1,138 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: transparent !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: transparent !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: transparent !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #e0e0e0 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: black !important;
+}
+.syntaxhighlighter table caption {
+ color: black !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #6ce26c !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #6ce26c !important;
+ color: white !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: blue !important;
+ background: white !important;
+ border: 1px solid #6ce26c !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: blue !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: red !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #6ce26c !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: black !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: black !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: blue !important;
+}
+.syntaxhighlighter .keyword {
+ color: #006699 !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #006699 !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: red !important;
+}
+
+.syntaxhighlighter .keyword {
+ font-weight: bold !important;
+}
+
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ line-height: 1.3em !important;
+}
+
+div.syntaxhighlighter {
+ font-size: 0.85em !important;
+}
+
+div.include div.syntaxhighlighter table td.code .line {
+ margin-top: 0.1em !important;
+}
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shThemejqPlot.min.css b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shThemejqPlot.min.css
new file mode 100644
index 00000000..20210ff7
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/shThemejqPlot.min.css
@@ -0,0 +1 @@
+.syntaxhighlighter{background-color:transparent!important;}.syntaxhighlighter .line.alt1{background-color:transparent!important;}.syntaxhighlighter .line.alt2{background-color:transparent!important;}.syntaxhighlighter .line.highlighted.alt1,.syntaxhighlighter .line.highlighted.alt2{background-color:#e0e0e0!important;}.syntaxhighlighter .line.highlighted.number{color:black!important;}.syntaxhighlighter table caption{color:black!important;}.syntaxhighlighter .gutter{color:#afafaf!important;}.syntaxhighlighter .gutter .line{border-right:3px solid #6ce26c!important;}.syntaxhighlighter .gutter .line.highlighted{background-color:#6ce26c!important;color:white!important;}.syntaxhighlighter.printing .line .content{border:none!important;}.syntaxhighlighter.collapsed{overflow:visible!important;}.syntaxhighlighter.collapsed .toolbar{color:blue!important;background:white!important;border:1px solid #6ce26c!important;}.syntaxhighlighter.collapsed .toolbar a{color:blue!important;}.syntaxhighlighter.collapsed .toolbar a:hover{color:red!important;}.syntaxhighlighter .toolbar{color:white!important;background:#6ce26c!important;border:none!important;}.syntaxhighlighter .toolbar a{color:white!important;}.syntaxhighlighter .toolbar a:hover{color:black!important;}.syntaxhighlighter .plain,.syntaxhighlighter .plain a{color:black!important;}.syntaxhighlighter .comments,.syntaxhighlighter .comments a{color:#008200!important;}.syntaxhighlighter .string,.syntaxhighlighter .string a{color:blue!important;}.syntaxhighlighter .keyword{color:#069!important;}.syntaxhighlighter .preprocessor{color:gray!important;}.syntaxhighlighter .variable{color:#a70!important;}.syntaxhighlighter .value{color:#090!important;}.syntaxhighlighter .functions{color:#ff1493!important;}.syntaxhighlighter .constants{color:#06c!important;}.syntaxhighlighter .script{font-weight:bold!important;color:#069!important;background-color:none!important;}.syntaxhighlighter .color1,.syntaxhighlighter .color1 a{color:gray!important;}.syntaxhighlighter .color2,.syntaxhighlighter .color2 a{color:#ff1493!important;}.syntaxhighlighter .color3,.syntaxhighlighter .color3 a{color:red!important;}.syntaxhighlighter .keyword{font-weight:bold!important;}.syntaxhighlighter a,.syntaxhighlighter div,.syntaxhighlighter code,.syntaxhighlighter table,.syntaxhighlighter table td,.syntaxhighlighter table tr,.syntaxhighlighter table tbody,.syntaxhighlighter table thead,.syntaxhighlighter table caption,.syntaxhighlighter textarea{line-height:1.3em!important;}div.syntaxhighlighter{font-size:.85em!important;}div.include div.syntaxhighlighter table td.code .line{margin-top:.1em!important;} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/theming.html b/wqflask/wqflask/static/packages/jqplot/examples/theming.html
new file mode 100644
index 00000000..92f397a4
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/theming.html
@@ -0,0 +1,519 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Chart Theming</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="smoothedLine.html">Previous</a> <a href="./">Examples</a> <a href="waterfall.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+<style type="text/css">
+.jqplot-target {
+ margin: 30px;
+}
+</style>
+
+<p>jqPlot has basic theming support for commonly styled atributes of plot elements. Upon creation, each plot will have a "themeEngine" that controls modificaition, adding, removing and activating of plot themes. In addition, each plot will have a "Default" theme which corresponds to the styling of the plot at plot creation.<p>
+
+<p>Creation of new themes is easy. A "style" object is created with properties for the various plot elements to be styles. Attached to each of those is an ojbect with the actual styling properties. A simple style object might look like:</p>
+
+<pre>
+ gabe = {
+ series: [
+ {color: 'rgba(216, 159, 60, 0.4)'},
+ {color: 'rgba(159, 216, 60, 0.4)'},
+ {color: 'rgba(60, 159, 216, 0.4)'},
+ ],
+ grid: {
+ backgroundColor: '#DEA493'
+ }
+ }
+</pre>
+
+<p>This new style would then be added to the plot's themeEngine as a new theme. it can then be activated by calling the plot's <code>activateTheme</code> method.</p>
+<pre>
+ plot1b.themeEngine.newTheme('gabe', gabe);
+ plot1b.activateTheme('gabe');
+</pre>
+
+<div id="chart1b" class="plot" style="width:400px;height:260px;"></div>
+<p>Select Theme for area plot:
+<select id="p1bswitcher" onchange="switch1b();">
+ <option value="Default" selected>Default</option>
+ <option value="gabe">gabe</option>
+</select>
+</p>
+
+<p>Themes can be reused between plots. Here a style object is created and assigned to two different plots. For convenience, the theme is given the same name when added to each plot's themeEngine. Since each plot keeps it's own copy of the theme, the names do not need to be the same. Also note that themes are added as deep copies by value and not by reference. This avoids strange behavior due to the cascading nature of css related styles.</p>
+
+<pre>
+ temp = {
+ seriesStyles: {
+ seriesColors: ['red', 'orange', 'yellow', 'green', 'blue', 'indigo'],
+ highlightColors: ['lightpink', 'lightsalmon', 'lightyellow', 'lightgreen', 'lightblue', 'mediumslateblue']
+ },
+ legend: {
+ fontSize: '8pt'
+ },
+ title: {
+ fontSize: '18pt'
+ },
+ grid: {
+ backgroundColor: 'rgb(211, 233, 195)'
+ }
+ };
+
+ plot3.themeEngine.newTheme('uma', temp);
+ plot5.themeEngine.newTheme('uma', temp);
+</pre>
+
+<p>Select Theme for funnel and pie charts at same time:
+<select id="p35switcher" onchange="switch35();">
+ <option value="Default" selected>Default</option>
+ <option value="uma">uma</option>
+</select>
+</p>
+
+<div id="chart3" class="plot" style="width:400px;height:320px;"></div>
+
+<p>Select Theme for funnel plot:
+<select id="p3switcher" onchange="switch3();">
+ <option value="Default" selected>Default</option>
+ <option value="uma">uma</option>
+</select>
+</p>
+
+<div id="chart5" class="plot" style="width:400px;height:260px;"></div>
+
+<p>Select Theme for pie chart:
+<select id="p5switcher" onchange="switch5();">
+ <option value="Default" selected>Default</option>
+ <option value="uma">uma</option>
+</select>
+</p>
+
+<p>There are various was to create and edit themes for a plot. Below are two different methods for creating additional themes for a line plot and adding them to the plots themeEngine. Here the <code>axesStyles</code> property is used to supply styling to all axes at one time. A similar property, <code>seriesStyles</code>, exists for styling all series of a plot at one time. Note, neither of these methods is as straightforward as using the <code>newTheme()</code> method of the plots themeEngine, but are included for illustrative purposes.</p>
+
+<pre>
+ e1 = plot1.themeEngine;
+ brass = e1.copy('Default', 'brass');
+ brass.title.fontFamily = 'Copperplate, Impact';
+ brass.grid.backgroundColor = "rgb(216, 198, 114)";
+ brass.grid.drawGridlines = false;
+ brass.series[0].lineWidth = 6.5;
+ brass.series[0].markerOptions.show = false;
+ brass.axesStyles.label.fontFamily = "Copperplate, 'Copperplate Gothic Light', Impact";
+ brass.axesStyles.ticks.fontFamily = "Copperplate, 'Copperplate Gothic Light', Impact";
+ brass.axesStyles.label.fontSize = '14pt';
+
+ temp = {
+ grid: {
+ backgroundColor: "#593D2B",
+ gridLineColor: '#E8E8E8',
+ gridLineWidth: 3
+ },
+ title: {
+ fontFamily: '"Comic Sans MS", cursive',
+ fontSize: '18pt',
+ textColor: '#C7CC4E'
+ },
+ seriesStyles: {
+ color: "#DBBCAF",
+ lineWidth: 8,
+ markerOptions: {
+ show: false
+ }
+ },
+ axes: {
+ xaxis: {
+ label: {
+ fontFamily: '"Comic Sans MS", cursive',
+ textColor: '#C7CC4E'
+ }
+ }
+ }
+ };
+
+ chocolate = plot1.themeEngine.copy('Default', 'chocolate', temp);
+</pre>
+
+<div id="chart1" class="plot" style="width:400px;height:260px;"></div>
+
+<p>Select theme for line chart:
+<select id="p1switcher" onchange="switch1();">
+ <option value="Default" selected>Default</option>
+ <option value="brass">brass</option>
+ <option value="chocolate">chocolate</option>
+</select>
+</p>
+
+<p>The example below shows more extensive use of the various styling options to give the chart a rather ugly and dated appearence. Note that, for bar (and funnel, pie and donut charts), <code>highlightColors</code> can be specified as an array of colors which will be applied to each bar individually, as a single string giving a color to apply to all bars, or as an empty array which will force jqPlot to auto calculate highlight colors based on the current bar color.<p>
+
+<pre>
+ oldstyle = {
+ title: {
+ fontFamily: 'Times New Roman',
+ textColor: 'black'
+ },
+ axesStyles: {
+ borderWidth: 0,
+ ticks: {
+ fontSize: '12pt',
+ fontFamily: 'Times New Roman',
+ textColor: 'black'
+ },
+ label: {
+ fontFamily: 'Times New Roman',
+ textColor: 'black'
+ }
+ },
+ grid: {
+ backgroundColor: 'white',
+ borderWidth: 0,
+ gridLineColor: 'black',
+ gridLineWidth: 2,
+ borderColor: 'black'
+ },
+ series: [
+ {color: 'red', highlightColors: ['aqua', 'black', 'blue', 'fuchsia', 'gray', 'green', 'lime', 'maroon', 'navy', 'olive', 'purple', 'red', 'silver', 'teal', 'white', 'yellow']},
+ {color: 'green', highlightColors: []},
+ {color: 'blue', highlightColors: []},
+ {color: 'yellow', highlightColors: 'rgb(255, 245, 185)'}
+ ],
+ legend: {
+ background: 'white',
+ textColor: 'black',
+ fontFamily: 'Times New Roman',
+ border: '1px solid black'
+ }
+ };
+
+ plot2.themeEngine.newTheme('oldstyle', oldstyle);
+</pre>
+
+<div id="chart2" class="plot" style="width:760px;height:360px;"></div>
+
+<p>Select theme for bar chart:
+<select id="p2switcher" onchange="switch2();">
+ <option value="Default" selected>Default</option>
+ <option value="oldstyle">oldstyle</option>
+</select>
+</p>
+
+
+ </div>
+
+
+<script language="javascript" type="text/javascript">
+$(document).ready(function(){
+
+ l1 = [['Seoul', 1], ['Paris', 7], ['Singapore',3], ['Hong Kong',5], ['Chicago', 2], ['New York', 9]];
+ l2 = [11, 9, 5, 12, 14];
+ l3 = [4, 8, 5, 3, 6];
+ l4 = [12, 6, 13, 11, 2];
+ l5 = [4, -3, 3, 6, 2, -2];
+
+ pop1980 = [7071639, 2968528, 3005072, 1595138, 789704, 1688210, 785940, 904599];
+ pop1990 = [7322564, 3485398, 2783726, 1630553, 983403, 1585577, 935933, 1006877];
+ pop2000 = [8008654, 3694644, 2896051, 1974152, 1322025, 1517550, 1160005, 1188603];
+ pop2008 = [8363710, 3833995, 2853114, 2242193, 1567924, 1447395, 1351305, 1279910];
+
+ ticks = ["New York", "Los Angeles", "Chicago", "Houston", "Phoenix", "Philadelphia", "San Antonio", "Dallas"];
+
+ plot1 = $.jqplot('chart1',[l2],{
+ title: 'Line Chart',
+ highlighter: {
+ show:true
+ },
+ cursor: {
+ show: true,
+ zoom: true
+ },
+ axes: {
+ xaxis: {
+ label: 'Sample'
+ }
+ }
+ });
+
+ plot1b = $.jqplot('chart1b',[l2, l3, l4],{
+ stackSeries: true,
+ showMarker: false,
+ seriesDefaults: {
+ fill: true
+ }
+ });
+
+ plot2 = $.jqplot('chart2',[pop1980, pop1990, pop2000, pop2008],{
+ title: 'City Population',
+ legend: {
+ show: true
+ },
+ seriesDefaults: {
+ renderer: $.jqplot.BarRenderer,
+ rendererOptions: {
+ barPadding: 2
+ }
+ },
+ series: [
+ {label: '1980'},
+ {label: '1990'},
+ {label: '2000'},
+ {label: '2008 (est)'}
+ ],
+ axes: {
+ xaxis: {
+ label: 'City',
+ renderer: $.jqplot.CategoryAxisRenderer,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
+ ticks: ticks,
+ tickOptions: {
+ angle: -30
+ }
+ },
+ yaxis: {
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ max: 9000000,
+ min: 0,
+ tickOptions: {
+ formatString: '%d',
+ angle: -30
+ }
+ }
+ }
+ });
+
+ plot3 = $.jqplot('chart3',[l1],{
+ title: 'Global City Index',
+ legend: {
+ show: true,
+ rendererOptions: {
+ // numberColumns: 2,
+ fontSize: '10pt'
+ }
+ },
+ seriesDefaults: {
+ renderer: $.jqplot.FunnelRenderer
+ }
+ });
+
+ plot5 = $.jqplot('chart5',[l1],{
+ title: 'Pie Chart',
+ seriesDefaults: {
+ renderer: $.jqplot.PieRenderer
+ },
+ legend: {
+ show: true
+ }
+ });
+
+ e1 = plot1.themeEngine;
+ brass = e1.copy('Default', 'brass');
+ brass.title.fontFamily = 'Copperplate, Impact';
+ brass.grid.backgroundColor = "rgb(216, 198, 114)";
+ brass.grid.drawGridlines = false;
+ brass.series[0].lineWidth = 6.5;
+ brass.series[0].markerOptions.show = false;
+ // brass.axes.xaxis.ticks.fontFamily = "Copperplate, Impact";
+ brass.axesStyles.label.fontFamily = "Copperplate, 'Copperplate Gothic Light', Impact";
+ brass.axesStyles.ticks.fontFamily = "Copperplate, 'Copperplate Gothic Light', Impact";
+ brass.axesStyles.label.fontSize = '14pt';
+
+ temp = {
+ grid: {
+ backgroundColor: "#593D2B",
+ gridLineColor: '#E8E8E8',
+ gridLineWidth: 3
+ },
+ title: {
+ fontFamily: '"Comic Sans MS", cursive',
+ fontSize: '18pt',
+ textColor: '#C7CC4E'
+ },
+ seriesStyles: {
+ color: "#DBBCAF",
+ lineWidth: 8,
+ markerOptions: {
+ show: false
+ }
+ },
+ axes: {
+ xaxis: {
+ label: {
+ fontFamily: '"Comic Sans MS", cursive',
+ textColor: '#C7CC4E'
+ }
+ }
+ }
+ };
+
+ chocolate = plot1.themeEngine.copy('Default', 'chocolate', temp);
+
+ gabe = {
+ series: [
+ {color: 'rgba(216, 159, 60, 0.6)'},
+ {color: 'rgba(159, 216, 60, 0.6)'},
+ {color: 'rgba(60, 159, 216, 0.6)'},
+ ],
+ grid: {
+ backgroundColor: '#DEA493'
+ }
+ }
+
+ gabe = plot1b.themeEngine.newTheme('gabe', gabe);
+
+ oldstyle = {
+ title: {
+ fontFamily: 'Times New Roman',
+ textColor: 'black'
+ },
+ axesStyles: {
+ borderWidth: 0,
+ ticks: {
+ fontSize: '12pt',
+ fontFamily: 'Times New Roman',
+ textColor: 'black'
+ },
+ label: {
+ fontFamily: 'Times New Roman',
+ textColor: 'black'
+ }
+ },
+ grid: {
+ backgroundColor: 'white',
+ borderWidth: 0,
+ gridLineColor: 'black',
+ gridLineWidth: 2,
+ borderColor: 'black'
+ },
+ series: [
+ {color: 'red', highlightColors: ['aqua', 'black', 'blue', 'fuchsia', 'gray', 'green', 'lime', 'maroon', 'navy', 'olive', 'purple', 'red', 'silver', 'teal', 'white', 'yellow']},
+ {color: 'green', highlightColors: []},
+ {color: 'blue', highlightColors: []},
+ {color: 'yellow', highlightColors: 'rgb(255, 245, 185)'}
+ ],
+ legend: {
+ background: 'white',
+ textColor: 'black',
+ fontFamily: 'Times New Roman',
+ border: '1px solid black'
+ }
+ };
+
+ plot2.themeEngine.newTheme('oldstyle', oldstyle);
+
+ temp = {
+ seriesStyles: {
+ seriesColors: ['red', 'orange', 'yellow', 'green', 'blue', 'indigo'],
+ highlightColors: ['lightpink', 'lightsalmon', 'lightyellow', 'lightgreen', 'lightblue', 'mediumslateblue']
+ },
+ legend: {
+ fontSize: '8pt'
+ },
+ title: {
+ fontSize: '18pt'
+ },
+ grid: {
+ backgroundColor: 'rgb(211, 233, 195)'
+ }
+ };
+
+ plot3.themeEngine.newTheme('uma', temp);
+ plot5.themeEngine.newTheme('uma', temp);
+
+});
+
+function switch1() {
+ var th = $('#p1switcher').val();
+ plot1.activateTheme(th);
+}
+
+function switch1b() {
+ var th = $('#p1bswitcher').val();
+ plot1b.activateTheme(th);
+}
+
+function switch2() {
+ var th = $('#p2switcher').val();
+ plot2.activateTheme(th);
+}
+
+function switch3() {
+ var th = $('#p3switcher').val();
+ plot3.activateTheme(th);
+}
+
+function switch5() {
+ var th = $('#p5switcher').val();
+ plot5.activateTheme(th);
+}
+
+function switch35() {
+ var th = $('#p35switcher').val();
+ plot3.activateTheme(th);
+ plot5.activateTheme(th);
+}
+
+
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.min.js"></script>
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.pieRenderer.min.js"></script>
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.donutRenderer.min.js"></script>
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.highlighter.min.js"></script>
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.min.js"></script>
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.funnelRenderer.min.js"></script>
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
+ <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/topbanner.inc b/wqflask/wqflask/static/packages/jqplot/examples/topbanner.inc
new file mode 100644
index 00000000..6977d1f9
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/topbanner.inc
@@ -0,0 +1,9 @@
+<div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/waterfall.html b/wqflask/wqflask/static/packages/jqplot/examples/waterfall.html
new file mode 100644
index 00000000..639c7c4e
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/waterfall.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Waterfall Charts</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="theming.html">Previous</a> <a href="./">Examples</a> <a href="waterfall2.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <style type="text/css" media="screen">
+ .jqplot-axis {
+ font-size: 0.85em;
+ }
+ .jqplot-title {
+ font-size: 16px;
+ }
+ p {
+ margin: 20px;
+ font-family:Arial,Helvetica,Sans-serif;
+ }
+ </style>
+
+ <p>Waterfall chart using default bar colors.</p>
+ <div id="chart1" style="margin-top:20px; margin-left:20px; width:350px; height:350px;"></div>
+
+ <p>Waterfall chart using custom colors and "useNegativeColors" set to "false".</p>
+ <div id="chart2" style="margin-top:20px; margin-left:20px; width:350px; height:350px;"></div>
+
+
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ var line1 = [14, 3, 4, -3, 5, 2, -3, -7];
+ var ticks = ['2008', 'Apricots', 'Tomatoes', 'Potatoes', 'Rhubarb', 'Squash', 'Grapes', 'Peanuts', '2009'];
+
+
+ var plot1 = $.jqplot('chart1', [line1], {
+ title: 'Crop Yield Charnge, 2008 to 2009',
+ seriesDefaults:{
+ renderer:$.jqplot.BarRenderer,
+ rendererOptions:{
+ waterfall:true,
+ varyBarColor: true
+ },
+ pointLabels: {
+ hideZeros: true
+ },
+ yaxis:'y2axis'
+ },
+ axes:{
+ xaxis:{
+ renderer:$.jqplot.CategoryAxisRenderer,
+ ticks:ticks,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ angle: -90,
+ fontSize: '10pt',
+ showMark: false,
+ showGridline: false
+ }
+ },
+ y2axis: {
+ min: 0,
+ tickInterval: 5
+ }
+ }
+ });
+});</script>
+
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+
+ var line1 = [14, 3, 4, -3, 5, 2, -3, -7];
+ var ticks = ['2008', 'Apricots', 'Tomatoes', 'Potatoes', 'Rhubarb', 'Squash', 'Grapes', 'Peanuts', '2009'];
+ var plot2 = $.jqplot('chart2', [line1], {
+ title: 'Crop Yield Charnge, 2008 to 2009',
+ seriesColors:['#333333', '#999999', '#3EA140', '#3EA140', '#3EA140', '#783F16', '#783F16', '#783F16', '#333333'],
+ seriesDefaults:{
+ renderer:$.jqplot.BarRenderer,
+ rendererOptions:{
+ waterfall:true,
+ varyBarColor: true,
+ useNegativeColors: false
+ },
+ pointLabels: {
+ hideZeros: true
+ },
+ yaxis:'y2axis'
+ },
+ axes:{
+ xaxis:{
+ renderer:$.jqplot.CategoryAxisRenderer,
+ ticks:ticks,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ angle: -90,
+ fontSize: '10pt',
+ showMark: false,
+ showGridline: false
+ }
+ },
+ y2axis: {
+ min: 0,
+ tickInterval: 5
+ }
+ }
+ });
+});</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+ <script class="include" type="text/javascript" src="../plugins/jqplot.barRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pointLabels.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/waterfall2.html b/wqflask/wqflask/static/packages/jqplot/examples/waterfall2.html
new file mode 100644
index 00000000..541f7e33
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/waterfall2.html
@@ -0,0 +1,231 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Waterfall charts 2</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="waterfall.html">Previous</a> <a href="./">Examples</a> <a href="zoom1.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <style type="text/css" media="screen">
+ .jqplot-axis {
+ font-size: 0.85em;
+ }
+ .jqplot-title {
+ font-size: 16px;
+ }
+ p {
+ margin: 20px;
+ font-family:Arial,Helvetica,Sans-serif;
+ }
+ </style>
+
+
+ <div id="chart1" style="margin-top:20px; margin-left:20px; width:350px; height:350px;"></div>
+
+ <div id="chart1b" style="margin-top:20px; margin-left:20px; width:350px; height:350px;"></div>
+
+ <div id="chart1c" style="margin-top:20px; margin-left:20px; width:350px; height:350px;"></div>
+
+ <div id="chart1d" style="margin-top:20px; margin-left:20px; width:350px; height:350px;"></div>
+
+
+
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ var line1 = [14, 4, 3, -23, 5, 2, -3, -7];
+ var ticks = ['2008', 'Apricots', 'Tomatoes', 'Potatoes', 'Rhubarb', 'Squash', 'Grapes', 'Peanuts', '2009'];
+
+
+ plot1 = $.jqplot('chart1', [line1], {
+ title: 'Crop Yield Change, 2008 to 2009',
+ seriesDefaults:{
+ fill: true,
+ fillToZero: true,
+ renderer:$.jqplot.BarRenderer,
+ rendererOptions:{
+ waterfall:true,
+ disableStack: true,
+ varyBarColor: true
+ },
+ pointLabels: {
+ show: true,
+ hideZeros: true
+ },
+ yaxis:'y2axis'
+ },
+ axes:{
+ xaxis:{
+ renderer:$.jqplot.CategoryAxisRenderer,
+ ticks:ticks,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ angle: -90,
+ fontSize: '10pt',
+ showMark: false,
+ showGridline: false
+ }
+ }
+ }
+ });
+});</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ var line1 = [14, 4, 0, -23, 5, 0, -3, -7];
+ var ticks = ['2008', 'Apricots', 'Tomatoes', 'Potatoes', 'Rhubarb', 'Squash', 'Grapes', 'Peanuts', '2009'];
+
+
+ plot1b = $.jqplot('chart1b', [line1], {
+ title: 'Crop Yield Change, 2008 to 2009',
+ seriesDefaults:{
+ renderer:$.jqplot.BarRenderer,
+ rendererOptions:{
+ waterfall:true,
+ varyBarColor: true
+ },
+ pointLabels: {
+ show: true,
+ hideZeros: true
+ },
+ yaxis:'y2axis'
+ },
+ axes:{
+ xaxis:{
+ renderer:$.jqplot.CategoryAxisRenderer,
+ ticks:ticks,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ angle: -90,
+ fontSize: '10pt',
+ showMark: false,
+ showGridline: false
+ }
+ }
+ }
+ });
+});</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ var line1 = [14, 0, 13, 0, -5, -9, 3, 7];
+ var ticks = ['2008', 'Apricots', 'Tomatoes', 'Potatoes', 'Rhubarb', 'Squash', 'Grapes', 'Peanuts', '2009'];
+
+
+ plot1c = $.jqplot('chart1c', [line1], {
+ title: 'Crop Yield Change, 2008 to 2009',
+ seriesDefaults:{
+ renderer:$.jqplot.BarRenderer,
+ rendererOptions:{
+ waterfall:true,
+ varyBarColor: true
+ },
+ pointLabels: {
+ show: true,
+ hideZeros: true
+ },
+ yaxis:'y2axis'
+ },
+ axes:{
+ xaxis:{
+ renderer:$.jqplot.CategoryAxisRenderer,
+ ticks:ticks,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ angle: -90,
+ fontSize: '10pt',
+ showMark: false,
+ showGridline: false
+ }
+ }
+ }
+ });
+});</script>
+
+<script class="code" type="text/javascript">$(document).ready(function(){
+ var line1 = [-14, 0, -13, 0, 5, 9, -3, -7];
+ var ticks = ['2008', 'Apricots', 'Tomatoes', 'Potatoes', 'Rhubarb', 'Squash', 'Grapes', 'Peanuts', '2009'];
+
+
+ plot1d = $.jqplot('chart1d', [line1], {
+ title: 'Crop Yield Change, 2008 to 2009',
+ seriesDefaults:{
+ renderer:$.jqplot.BarRenderer,
+ rendererOptions:{
+ waterfall: true,
+ varyBarColor: true
+ },
+ pointLabels: {
+ show: true,
+ hideZeros: true
+ },
+ yaxis:'y2axis'
+ },
+ axes:{
+ xaxis:{
+ renderer:$.jqplot.CategoryAxisRenderer,
+ ticks:ticks,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ angle: -90,
+ fontSize: '10pt',
+ showMark: false,
+ showGridline: false
+ }
+ }
+ }
+ });
+});</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+ <script class="include" type="text/javascript" src="../plugins/jqplot.barRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.pointLabels.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/yahooData.js b/wqflask/wqflask/static/packages/jqplot/examples/yahooData.js
new file mode 100644
index 00000000..66dcb749
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/yahooData.js
@@ -0,0 +1,1807 @@
+var yahoo=[["2011-10-18",580.19,592.56,577.40,590.51,3800800,590.51],
+["2011-10-17",583.72,591.83,578.00,582.41,4008200,582.41],
+["2011-10-14",599.47,599.60,587.57,591.68,8529900,591.68],
+["2011-10-13",550.03,559.00,548.02,558.99,5639600,558.99],
+["2011-10-12",548.13,555.23,544.63,548.50,3177800,548.50],
+["2011-10-11",533.46,546.80,533.46,543.18,2853400,543.18],
+["2011-10-10",525.18,537.47,523.20,537.17,2322200,537.17],
+["2011-10-07",516.83,520.50,510.30,515.12,2855900,515.12],
+["2011-10-06",507.50,515.23,502.60,514.71,3424300,514.71],
+["2011-10-05",496.35,507.80,480.77,504.70,4534100,504.70],
+["2011-10-04",490.03,503.44,480.60,501.90,4158800,501.90],
+["2011-10-03",509.85,512.00,495.00,495.52,4474400,495.52],
+["2011-09-30",520.21,524.00,514.38,515.04,2723600,515.04],
+["2011-09-29",536.04,537.30,519.41,527.50,2906600,527.50],
+["2011-09-28",541.50,544.02,527.70,528.84,2263300,528.84],
+["2011-09-27",538.20,547.05,536.05,539.34,3010900,539.34],
+["2011-09-26",527.25,532.93,513.25,531.89,2634200,531.89],
+["2011-09-23",516.56,526.42,514.50,525.51,2777300,525.51],
+["2011-09-22",526.25,528.78,514.00,520.66,4400300,520.66],
+["2011-09-21",547.69,555.00,538.86,539.20,2514300,539.20],
+["2011-09-20",549.40,558.52,542.67,546.63,2779100,546.63],
+["2011-09-19",540.35,549.90,535.38,546.67,2468400,546.67],
+["2011-09-16",544.80,546.84,543.14,546.68,3534300,546.68],
+["2011-09-15",535.50,544.98,534.56,542.56,2960800,542.56],
+["2011-09-14",532.59,536.95,525.82,532.07,2694400,532.07],
+["2011-09-13",532.00,533.88,523.40,529.52,2354200,529.52],
+["2011-09-12",517.96,531.99,517.50,530.12,2670400,530.12],
+["2011-09-09",531.40,534.65,521.19,524.85,3268800,524.85],
+["2011-09-08",533.80,539.10,531.90,534.96,2380500,534.96],
+["2011-09-07",530.45,535.94,527.40,534.03,2755800,534.03],
+["2011-09-06",510.80,522.76,510.50,522.18,2715800,522.18],
+["2011-09-02",524.47,527.92,520.73,524.84,2401200,524.84],
+["2011-09-01",540.75,543.83,531.22,532.50,2415500,532.50],
+["2011-08-31",544.74,546.30,536.00,540.96,2693300,540.96],
+["2011-08-30",538.19,542.99,530.81,540.70,2989000,540.70],
+["2011-08-29",534.56,539.45,533.56,539.08,2335800,539.08],
+["2011-08-26",519.99,530.45,513.14,526.86,3596300,526.86],
+["2011-08-25",530.38,537.27,518.30,520.04,3293000,520.04],
+["2011-08-24",519.33,530.00,517.23,523.29,3594500,523.29],
+["2011-08-23",503.50,521.41,499.06,518.82,4346800,518.82],
+["2011-08-22",504.00,507.00,494.53,498.17,4905900,498.17],
+["2011-08-19",499.34,514.87,490.86,490.92,5410000,490.92],
+["2011-08-18",523.47,524.89,500.49,504.88,6290700,504.88],
+["2011-08-17",540.03,543.69,530.77,533.15,4055000,533.15],
+["2011-08-16",552.43,552.44,530.30,539.00,6939400,539.00],
+["2011-08-15",553.43,564.99,546.05,557.23,7144900,557.23],
+["2011-08-12",569.50,570.50,560.40,563.77,3154300,563.77],
+["2011-08-11",553.82,568.50,548.41,562.13,4830600,562.13],
+["2011-08-10",561.38,564.12,547.73,549.01,5369600,549.01],
+["2011-08-09",561.00,574.61,541.01,573.41,6469700,573.41],
+["2011-08-08",562.98,569.00,544.35,546.02,7496600,546.02],
+["2011-08-05",582.54,590.00,562.00,579.04,5929100,579.04],
+["2011-08-04",594.50,598.85,577.47,577.52,4914600,577.52],
+["2011-08-03",594.27,603.00,583.63,601.17,3825700,601.17],
+["2011-08-02",606.00,609.67,591.57,592.40,3200600,592.40],
+["2011-08-01",611.22,615.50,599.18,606.77,3966100,606.77],
+["2011-07-29",604.23,614.96,603.69,603.69,4137400,603.69],
+["2011-07-28",605.19,615.98,603.00,610.94,3108400,610.94],
+["2011-07-27",617.18,620.95,604.75,607.22,3934400,607.22],
+["2011-07-26",618.05,627.50,617.22,622.52,2342900,622.52],
+["2011-07-25",613.36,625.41,613.00,618.98,3131600,618.98],
+["2011-07-22",605.39,619.50,604.27,618.23,3528200,618.23],
+["2011-07-21",594.03,608.06,594.01,606.99,3469500,606.99],
+["2011-07-20",602.18,602.83,595.35,595.35,2227800,595.35],
+["2011-07-19",596.14,604.68,595.53,602.55,2967500,602.55],
+["2011-07-18",592.49,602.05,592.00,594.94,4468300,594.94],
+["2011-07-15",597.50,600.25,588.16,597.62,13732100,597.62],
+["2011-07-14",539.12,542.00,526.73,528.94,6594400,528.94],
+["2011-07-13",537.00,544.00,536.48,538.26,2790200,538.26],
+["2011-07-12",528.16,539.42,526.00,534.01,2841200,534.01],
+["2011-07-11",528.18,535.98,525.50,527.28,2839300,527.28],
+["2011-07-08",532.95,537.65,527.27,531.99,4770200,531.99],
+["2011-07-07",541.00,550.68,535.88,546.60,3935500,546.60],
+["2011-07-06",533.50,538.51,533.04,535.36,2695600,535.36],
+["2011-07-05",525.30,535.40,525.30,532.44,3849200,532.44],
+["2011-07-01",506.74,521.18,506.38,521.03,3636700,521.03],
+["2011-06-30",501.99,506.67,501.50,506.38,2428400,506.38],
+["2011-06-29",496.54,500.25,492.38,497.57,2343000,497.57],
+["2011-06-28",484.02,496.21,484.02,493.65,2715100,493.65],
+["2011-06-27",474.00,488.40,473.60,482.80,3444700,482.80],
+["2011-06-24",480.68,480.75,473.02,474.88,3805600,474.88],
+["2011-06-23",482.13,482.86,473.73,480.22,4801700,480.22],
+["2011-06-22",491.45,492.35,486.73,487.01,2407100,487.01],
+["2011-06-21",487.19,493.94,484.73,493.00,2765400,493.00],
+["2011-06-20",485.00,486.23,479.23,484.58,3028600,484.58],
+["2011-06-17",506.18,506.69,484.80,485.02,5245400,485.02],
+["2011-06-16",502.81,506.57,496.67,500.37,2757000,500.37],
+["2011-06-15",505.03,508.35,500.61,502.95,2073300,502.95],
+["2011-06-14",508.15,514.08,506.99,508.37,2341500,508.37],
+["2011-06-13",510.00,510.20,502.17,504.73,2427300,504.73],
+["2011-06-10",514.08,516.69,509.29,509.51,2439900,509.51],
+["2011-06-09",520.00,520.00,515.64,516.73,1689100,516.73],
+["2011-06-08",516.53,521.24,515.78,519.17,1653400,519.17],
+["2011-06-07",522.89,524.63,518.99,519.03,1907600,519.03],
+["2011-06-06",523.54,526.82,519.25,521.06,1942100,521.06],
+["2011-06-03",522.00,527.60,521.50,523.08,1748500,523.08],
+["2011-06-02",527.57,530.30,522.48,528.06,2204500,528.06],
+["2011-06-01",528.04,533.20,525.31,525.60,2955900,525.60],
+["2011-05-31",525.00,529.05,523.50,529.02,2687300,529.02],
+["2011-05-27",518.48,521.79,516.30,520.90,1745800,520.90],
+["2011-05-26",517.70,522.12,515.00,518.13,2118500,518.13],
+["2011-05-25",517.33,522.77,517.25,519.67,1301600,519.67],
+["2011-05-24",520.37,523.96,518.15,518.26,1888400,518.26],
+["2011-05-23",516.60,520.00,513.40,518.39,2252700,518.39],
+["2011-05-20",531.80,531.99,523.13,524.03,2317500,524.03],
+["2011-05-19",532.73,536.54,529.72,531.25,2468700,531.25],
+["2011-05-18",529.54,530.33,525.70,529.81,1953200,529.81],
+["2011-05-17",515.43,531.22,515.03,530.46,3303600,530.46],
+["2011-05-16",526.31,527.27,516.40,518.42,2958200,518.42],
+["2011-05-13",534.61,535.92,529.05,529.55,2108700,529.55],
+["2011-05-12",535.24,536.94,530.91,535.05,1400000,535.05],
+["2011-05-11",540.14,543.55,533.69,535.45,2338800,535.45],
+["2011-05-10",540.00,544.43,537.54,542.66,2042900,542.66],
+["2011-05-09",535.00,538.49,531.10,537.68,1948700,537.68],
+["2011-05-06",538.15,541.46,535.18,535.30,2056100,535.30],
+["2011-05-05",533.86,539.42,531.50,534.27,1997800,534.27],
+["2011-05-04",535.17,539.00,533.02,535.79,2117000,535.79],
+["2011-05-03",537.13,542.01,529.63,533.89,2081500,533.89],
+["2011-05-02",545.70,545.73,537.12,538.56,2133700,538.56],
+["2011-04-29",540.00,544.10,538.51,544.10,4200000,544.10],
+["2011-04-28",538.06,539.25,534.08,537.97,2037400,537.97],
+["2011-04-27",538.00,538.11,534.35,537.76,2298400,537.76],
+["2011-04-26",526.52,537.44,525.21,532.82,3535400,532.82],
+["2011-04-25",525.25,527.00,522.01,525.05,1630800,525.05],
+["2011-04-21",527.49,528.28,522.39,525.10,2470100,525.10],
+["2011-04-20",525.90,526.82,521.39,525.73,3060000,525.73],
+["2011-04-19",529.95,530.88,520.90,521.53,2684100,521.53],
+["2011-04-18",526.42,527.66,519.00,526.84,5039800,526.84],
+["2011-04-15",545.29,545.75,530.06,530.70,14043700,530.70],
+["2011-04-14",575.19,579.45,572.10,578.51,5456300,578.51],
+["2011-04-13",575.51,577.60,571.75,576.28,2069400,576.28],
+["2011-04-12",575.00,576.91,568.05,570.61,2085600,570.61],
+["2011-04-11",576.20,578.10,573.00,577.37,1858200,577.37],
+["2011-04-08",584.89,584.89,578.06,578.16,1901800,578.16],
+["2011-04-07",575.73,580.64,574.19,580.00,2531500,580.00],
+["2011-04-06",572.18,575.16,568.00,574.18,2668300,574.18],
+["2011-04-05",581.08,581.49,565.68,569.09,6047500,569.09],
+["2011-04-04",593.00,594.74,583.10,587.68,2054500,587.68],
+["2011-04-01",588.76,595.19,588.76,591.80,2613200,591.80],
+["2011-03-31",583.00,588.16,581.74,586.76,2029400,586.76],
+["2011-03-30",584.38,585.50,580.58,581.84,1422300,581.84],
+["2011-03-29",576.00,581.89,573.01,581.73,1604800,581.73],
+["2011-03-28",582.07,584.99,574.71,575.36,2218400,575.36],
+["2011-03-25",586.88,586.91,579.24,579.74,2858400,579.74],
+["2011-03-24",585.43,588.39,578.80,586.89,2098700,586.89],
+["2011-03-23",575.19,582.45,572.00,582.16,1816200,582.16],
+["2011-03-22",577.27,579.23,572.51,577.32,1886900,577.32],
+["2011-03-21",570.22,579.80,569.02,576.50,3020900,576.50],
+["2011-03-18",564.64,567.99,559.74,561.06,3298600,561.06],
+["2011-03-17",564.48,569.00,560.54,561.36,2899300,561.36],
+["2011-03-16",568.01,569.79,551.28,557.10,3798500,557.10],
+["2011-03-15",557.50,571.00,555.50,569.56,4005600,569.56],
+["2011-03-14",572.80,578.29,568.02,569.99,2816100,569.99],
+["2011-03-11",578.22,580.00,573.33,576.71,3032000,576.71],
+["2011-03-10",585.44,586.62,579.45,580.30,3128100,580.30],
+["2011-03-09",591.00,594.51,585.75,591.77,2151000,591.77],
+["2011-03-08",592.93,597.98,590.20,592.31,2284900,592.31],
+["2011-03-07",600.55,603.69,587.00,591.66,3462700,591.66],
+["2011-03-04",608.33,608.98,600.20,600.62,3011000,600.62],
+["2011-03-03",606.38,611.49,605.00,609.56,1945300,609.56],
+["2011-03-02",599.80,606.00,595.19,600.79,2026700,600.79],
+["2011-03-01",617.78,619.22,599.30,600.76,3323200,600.76],
+["2011-02-28",610.00,616.49,608.01,613.40,2281500,613.40],
+["2011-02-25",611.86,614.72,609.50,610.04,1932400,610.04],
+["2011-02-24",611.39,613.09,601.35,608.82,2711700,608.82],
+["2011-02-23",610.33,614.70,604.00,611.32,2889600,611.32],
+["2011-02-22",620.03,624.93,607.77,610.21,3639900,610.21],
+["2011-02-18",626.00,631.18,624.18,630.08,3217900,630.08],
+["2011-02-17",621.25,627.25,620.28,625.26,1478800,625.26],
+["2011-02-16",625.63,626.50,622.10,624.22,1684000,624.22],
+["2011-02-15",627.32,630.09,623.10,624.15,2092000,624.15],
+["2011-02-14",623.34,629.64,620.04,628.15,2128000,628.15],
+["2011-02-11",613.79,625.00,613.00,624.50,2589900,624.50],
+["2011-02-10",613.90,617.50,611.56,616.44,2334400,616.44],
+["2011-02-09",616.87,619.45,612.34,616.50,1842500,616.50],
+["2011-02-08",614.93,619.63,614.51,618.38,1694900,618.38],
+["2011-02-07",610.16,618.39,609.21,614.29,1799600,614.29],
+["2011-02-04",610.15,611.44,606.61,610.98,1550800,610.98],
+["2011-02-03",609.48,611.45,606.13,610.15,1495100,610.15],
+["2011-02-02",611.00,614.34,607.53,612.00,1760700,612.00],
+["2011-02-01",604.49,613.35,603.11,611.04,2745300,611.04],
+["2011-01-31",603.60,604.47,595.55,600.36,2804900,600.36],
+["2011-01-28",619.07,620.36,599.76,600.99,4231100,600.99],
+["2011-01-27",617.89,619.70,613.25,616.79,2019200,616.79],
+["2011-01-26",620.33,622.49,615.28,616.50,2038100,616.50],
+["2011-01-25",608.20,620.69,606.52,619.91,3646800,619.91],
+["2011-01-24",607.57,612.49,601.23,611.08,4599200,611.08],
+["2011-01-21",639.58,641.73,611.36,611.83,8904400,611.83],
+["2011-01-20",632.21,634.08,623.29,626.77,5485800,626.77],
+["2011-01-19",642.12,642.96,629.66,631.75,3406100,631.75],
+["2011-01-18",626.06,641.99,625.27,639.63,3617000,639.63],
+["2011-01-14",617.40,624.27,617.08,624.18,2365600,624.18],
+["2011-01-13",616.97,619.67,614.16,616.69,1334000,616.69],
+["2011-01-12",619.35,619.35,614.77,616.87,1632700,616.87],
+["2011-01-11",617.71,618.80,614.50,616.01,1439300,616.01],
+["2011-01-10",614.80,615.39,608.56,614.21,1579200,614.21],
+["2011-01-07",615.91,618.25,610.13,616.44,2101200,616.44],
+["2011-01-06",610.68,618.43,610.05,613.50,2057800,613.50],
+["2011-01-05",600.07,610.33,600.05,609.07,2532300,609.07],
+["2011-01-04",605.62,606.18,600.12,602.12,1824500,602.12],
+["2011-01-03",596.48,605.59,596.48,604.35,2365200,604.35],
+["2010-12-31",596.74,598.42,592.03,593.97,1539300,593.97],
+["2010-12-30",598.00,601.33,597.39,598.86,989500,598.86],
+["2010-12-29",602.00,602.41,598.92,601.00,1019200,601.00],
+["2010-12-28",602.05,603.87,598.01,598.92,1064800,598.92],
+["2010-12-27",602.74,603.78,599.50,602.38,1208100,602.38],
+["2010-12-23",605.34,606.00,602.03,604.23,1110800,604.23],
+["2010-12-22",604.00,607.00,603.28,605.49,1207500,605.49],
+["2010-12-21",598.57,604.72,597.61,603.07,1879500,603.07],
+["2010-12-20",594.65,597.88,588.66,595.06,1973300,595.06],
+["2010-12-17",591.00,592.56,587.67,590.80,3087100,590.80],
+["2010-12-16",592.85,593.77,588.07,591.71,1596900,591.71],
+["2010-12-15",594.20,596.45,589.15,590.30,2167700,590.30],
+["2010-12-14",597.09,598.29,592.48,594.91,1643300,594.91],
+["2010-12-13",597.12,603.00,594.09,594.62,2398500,594.62],
+["2010-12-10",593.14,593.99,590.29,592.21,1704700,592.21],
+["2010-12-09",593.88,595.58,589.00,591.50,1868900,591.50],
+["2010-12-08",591.97,592.52,583.69,590.54,1756900,590.54],
+["2010-12-07",591.27,593.00,586.00,587.14,3042200,587.14],
+["2010-12-06",580.57,582.00,576.61,578.36,2093800,578.36],
+["2010-12-03",569.45,576.48,568.00,573.00,2631200,573.00],
+["2010-12-02",568.66,573.33,565.35,571.82,2547900,571.82],
+["2010-12-01",563.00,571.57,562.40,564.35,3754100,564.35],
+["2010-11-30",574.32,574.32,553.31,555.71,7117400,555.71],
+["2010-11-29",589.17,589.80,579.95,582.11,2859700,582.11],
+["2010-11-26",590.46,592.98,587.00,590.00,1311100,590.00],
+["2010-11-24",587.31,596.60,587.05,594.97,2396400,594.97],
+["2010-11-23",587.01,589.01,578.20,583.01,2162600,583.01],
+["2010-11-22",587.47,593.44,582.75,591.22,2186600,591.22],
+["2010-11-19",597.00,597.89,590.34,590.83,2297500,590.83],
+["2010-11-18",589.00,599.98,588.56,596.56,2590000,596.56],
+["2010-11-17",585.00,589.50,581.37,583.55,2442500,583.55],
+["2010-11-16",592.76,597.89,583.45,583.72,3307400,583.72],
+["2010-11-15",603.08,604.00,594.05,595.47,3478900,595.47],
+["2010-11-12",613.99,616.90,601.21,603.29,3393000,603.29],
+["2010-11-11",619.70,619.85,614.21,617.19,2261600,617.19],
+["2010-11-10",622.08,623.00,617.51,622.88,2497000,622.88],
+["2010-11-09",630.00,630.85,620.51,624.82,2237200,624.82],
+["2010-11-08",624.02,629.49,623.13,626.77,2101300,626.77],
+["2010-11-05",623.18,625.49,621.11,625.08,1765700,625.08],
+["2010-11-04",624.64,629.92,622.10,624.27,3570800,624.27],
+["2010-11-03",617.50,621.83,613.50,620.18,3380500,620.18],
+["2010-11-02",618.67,620.00,614.58,615.60,1997600,615.60],
+["2010-11-01",615.73,620.66,611.21,615.00,3087100,615.00],
+["2010-10-29",617.07,619.00,612.99,613.70,2278300,613.70],
+["2010-10-28",620.05,621.00,613.30,618.58,2184300,618.58],
+["2010-10-27",615.77,620.00,612.33,616.47,2241900,616.47],
+["2010-10-26",613.10,621.23,611.03,618.60,2512900,618.60],
+["2010-10-25",615.59,624.74,614.97,616.50,3158400,616.50],
+["2010-10-22",611.92,614.82,610.05,612.53,2256100,612.53],
+["2010-10-21",611.51,616.00,606.00,611.99,2920500,611.99],
+["2010-10-20",608.14,617.38,607.50,607.98,3525100,607.98],
+["2010-10-19",608.85,614.82,602.86,607.83,4587900,607.83],
+["2010-10-18",600.55,619.69,600.55,617.71,7098200,617.71],
+["2010-10-15",599.27,601.64,591.60,601.45,14824800,601.45],
+["2010-10-14",544.18,545.25,537.11,540.93,6634100,540.93],
+["2010-10-13",547.00,547.49,542.33,543.30,3055600,543.30],
+["2010-10-12",540.12,545.99,537.79,541.39,3753600,541.39],
+["2010-10-11",538.48,544.60,537.17,538.84,2626300,538.84],
+["2010-10-08",532.77,537.60,527.62,536.35,2859200,536.35],
+["2010-10-07",536.21,537.20,529.14,530.01,2395800,530.01],
+["2010-10-06",539.26,539.95,529.94,534.35,2762300,534.35],
+["2010-10-05",528.38,540.00,526.55,538.23,3507100,538.23],
+["2010-10-04",524.95,528.25,518.85,522.35,1940500,522.35],
+["2010-10-01",530.00,530.62,523.00,525.62,2225000,525.62],
+["2010-09-30",529.16,531.87,518.92,525.79,3244100,525.79],
+["2010-09-29",527.85,532.94,524.71,527.69,2172200,527.69],
+["2010-09-28",533.48,533.59,518.45,527.17,3654700,527.17],
+["2010-09-27",528.85,536.85,528.85,530.41,3107400,530.41],
+["2010-09-24",521.74,527.83,518.26,527.29,3356900,527.29],
+["2010-09-23",514.61,519.69,511.30,513.48,2317400,513.48],
+["2010-09-22",512.86,517.78,511.68,516.00,2537100,516.00],
+["2010-09-21",509.68,519.98,508.91,513.46,4466300,513.46],
+["2010-09-20",492.50,510.41,492.06,508.28,4403500,508.28],
+["2010-09-17",483.75,491.20,481.18,490.15,5641600,490.15],
+["2010-09-16",479.95,482.45,479.41,481.06,1969500,481.06],
+["2010-09-15",479.95,481.89,478.50,480.64,2402800,480.64],
+["2010-09-14",482.01,484.75,480.08,480.43,2216500,480.43],
+["2010-09-13",480.90,484.35,479.53,482.27,2241500,482.27],
+["2010-09-10",479.02,479.79,475.08,476.14,1974300,476.14],
+["2010-09-09",477.83,480.40,470.58,476.18,2430600,476.18],
+["2010-09-08",465.19,472.50,464.51,470.58,2401800,470.58],
+["2010-09-07",464.50,467.59,463.02,464.40,1709900,464.40],
+["2010-09-03",470.52,471.88,467.44,470.30,2540400,470.30],
+["2010-09-02",462.84,464.43,460.31,463.18,1684200,463.18],
+["2010-09-01",454.98,464.94,452.50,460.33,3228300,460.33],
+["2010-08-31",450.11,454.87,448.00,450.02,1946800,450.02],
+["2010-08-30",459.15,459.76,452.42,452.69,1231400,452.69],
+["2010-08-27",452.56,459.99,447.65,458.83,2312400,458.83],
+["2010-08-26",456.06,457.26,450.44,450.98,1777000,450.98],
+["2010-08-25",450.00,457.81,450.00,454.62,2592100,454.62],
+["2010-08-24",457.70,458.37,450.92,451.39,2762700,451.39],
+["2010-08-23",461.50,468.25,457.73,464.07,2986200,464.07],
+["2010-08-20",467.97,471.59,461.02,462.02,3917600,462.02],
+["2010-08-19",481.01,482.51,467.25,467.97,3925000,467.97],
+["2010-08-18",490.44,490.87,481.55,482.15,2686400,482.15],
+["2010-08-17",488.53,494.70,486.03,490.52,1890700,490.52],
+["2010-08-16",483.68,489.87,480.50,485.59,1305000,485.59],
+["2010-08-13",489.00,491.19,486.01,486.35,1934700,486.35],
+["2010-08-12",483.94,494.75,482.51,492.01,2204600,492.01],
+["2010-08-11",497.73,498.00,491.50,491.74,2223000,491.74],
+["2010-08-10",502.35,506.00,498.57,503.71,2074000,503.71],
+["2010-08-09",502.25,505.50,501.36,505.35,1872200,505.35],
+["2010-08-06",505.40,505.74,496.05,500.22,3319500,500.22],
+["2010-08-05",505.89,508.60,503.56,508.10,2420400,508.10],
+["2010-08-04",492.18,507.00,491.05,506.32,3812500,506.32],
+["2010-08-03",490.50,492.46,486.76,489.83,1802300,489.83],
+["2010-08-02",488.99,493.28,486.94,490.41,1858700,490.41],
+["2010-07-30",479.65,487.36,479.14,484.85,2144100,484.85],
+["2010-07-29",485.95,488.88,479.33,484.99,2675500,484.99],
+["2010-07-28",494.94,495.25,482.67,484.35,2496000,484.35],
+["2010-07-27",490.58,497.50,490.17,492.63,2451200,492.63],
+["2010-07-26",489.09,490.75,484.88,488.97,1995200,488.97],
+["2010-07-23",480.77,490.59,480.01,490.06,2264400,490.06],
+["2010-07-22",483.23,488.98,482.48,484.81,2147700,484.81],
+["2010-07-21",484.00,485.70,475.43,477.50,3279600,477.50],
+["2010-07-20",461.03,482.99,460.60,481.59,4054500,481.59],
+["2010-07-19",461.01,469.65,457.52,466.18,4550300,466.18],
+["2010-07-16",469.12,470.56,459.52,459.61,7824800,459.61],
+["2010-07-15",491.73,494.70,482.68,494.02,4858200,494.02],
+["2010-07-14",489.88,493.83,486.46,491.34,3118000,491.34],
+["2010-07-13",482.25,492.99,480.28,489.20,3976300,489.20],
+["2010-07-12",472.37,479.44,471.08,475.83,3334400,475.83],
+["2010-07-09",471.96,473.26,462.78,467.49,4331500,467.49],
+["2010-07-08",453.55,457.33,449.66,456.56,2668900,456.56],
+["2010-07-07",438.31,451.29,435.38,450.20,3129700,450.20],
+["2010-07-06",444.00,447.67,433.63,436.07,2560100,436.07],
+["2010-07-02",441.62,442.28,436.00,436.55,1936000,436.55],
+["2010-07-01",445.29,448.40,433.63,439.49,3513600,439.49],
+["2010-06-30",454.96,457.83,444.72,444.95,3603200,444.95],
+["2010-06-29",463.44,464.55,451.12,454.26,3502100,454.26],
+["2010-06-28",472.59,477.55,469.01,472.08,1762300,472.08],
+["2010-06-25",477.06,477.65,470.56,472.68,2245200,472.68],
+["2010-06-24",479.66,482.75,473.26,475.10,1893600,475.10],
+["2010-06-23",486.89,486.89,478.16,482.05,2029100,482.05],
+["2010-06-22",489.90,496.60,485.73,486.25,2219700,486.25],
+["2010-06-21",499.90,500.97,484.89,488.56,2983500,488.56],
+["2010-06-18",502.51,503.47,498.13,500.03,2872900,500.03],
+["2010-06-17",503.45,505.87,496.69,500.08,1977300,500.08],
+["2010-06-16",496.17,504.00,496.11,501.27,2289300,501.27],
+["2010-06-15",483.08,500.40,482.18,497.99,4259600,497.99],
+["2010-06-14",494.48,494.50,483.19,483.19,2040400,483.19],
+["2010-06-11",482.50,488.71,481.62,488.50,1781700,488.50],
+["2010-06-10",480.37,488.50,475.84,487.01,2577900,487.01],
+["2010-06-09",487.22,488.88,472.00,474.02,2729000,474.02],
+["2010-06-08",487.85,488.84,477.54,484.78,2685100,484.78],
+["2010-06-07",499.06,500.91,483.15,485.52,3632700,485.52],
+["2010-06-04",499.72,509.25,496.70,498.72,3920300,498.72],
+["2010-06-03",495.11,508.00,494.70,505.60,3650700,505.60],
+["2010-06-02",486.68,493.87,481.46,493.37,2540800,493.37],
+["2010-06-01",480.43,491.06,480.12,482.37,2666800,482.37],
+["2010-05-28",492.74,493.45,483.00,485.63,2894800,485.63],
+["2010-05-27",484.95,492.31,481.05,490.46,2809100,490.46],
+["2010-05-26",482.07,489.76,475.00,475.47,3475600,475.47],
+["2010-05-25",468.15,477.45,464.01,477.07,3017400,477.07],
+["2010-05-24",480.73,489.79,476.80,477.16,4345600,477.16],
+["2010-05-21",469.06,485.00,464.40,472.05,9690800,472.05],
+["2010-05-20",485.07,485.58,473.80,475.01,4913300,475.01],
+["2010-05-19",496.26,499.44,487.74,494.43,3445700,494.43],
+["2010-05-18",510.00,510.97,497.07,498.37,2825500,498.37],
+["2010-05-17",506.78,508.36,498.35,507.97,2793800,507.97],
+["2010-05-14",509.77,510.99,496.25,507.53,4116000,507.53],
+["2010-05-13",516.50,522.00,510.37,510.88,3325800,510.88],
+["2010-05-12",512.04,512.04,502.00,505.39,3851800,505.39],
+["2010-05-11",515.67,519.88,508.22,509.05,3322600,509.05],
+["2010-05-10",513.97,522.82,512.60,521.65,4128000,521.65],
+["2010-05-07",499.97,505.32,481.33,493.14,5089000,493.14],
+["2010-05-06",508.75,517.52,460.00,498.67,5000100,498.67],
+["2010-05-05",500.98,515.72,500.47,509.76,4582200,509.76],
+["2010-05-04",526.52,526.74,504.21,506.37,6076300,506.37],
+["2010-05-03",526.50,532.92,525.08,530.60,1857800,530.60],
+["2010-04-30",531.13,537.68,525.44,525.70,2435400,525.70],
+["2010-04-29",533.37,536.50,526.67,532.00,3058900,532.00],
+["2010-04-28",532.10,534.83,521.03,529.19,3406100,529.19],
+["2010-04-27",528.95,538.33,527.23,529.06,3844700,529.06],
+["2010-04-26",544.97,544.99,529.21,531.64,4368800,531.64],
+["2010-04-23",547.25,549.32,542.27,544.99,2089400,544.99],
+["2010-04-22",552.00,552.50,543.35,547.06,3280700,547.06],
+["2010-04-21",556.46,560.25,552.16,554.30,2391500,554.30],
+["2010-04-20",554.17,559.66,551.06,555.04,2977400,555.04],
+["2010-04-19",548.75,553.99,545.00,550.10,3894000,550.10],
+["2010-04-16",563.00,568.81,549.63,550.15,12235500,550.15],
+["2010-04-15",592.17,597.84,588.29,595.30,6761800,595.30],
+["2010-04-14",590.06,592.34,584.01,589.00,3402700,589.00],
+["2010-04-13",572.53,588.88,571.13,586.77,3912300,586.77],
+["2010-04-12",567.35,574.00,566.22,572.73,2352400,572.73],
+["2010-04-09",567.49,568.77,564.00,566.22,2056600,566.22],
+["2010-04-08",563.32,569.85,560.05,567.49,1947500,567.49],
+["2010-04-07",567.30,568.75,561.86,563.54,2581000,563.54],
+["2010-04-06",569.46,570.89,565.40,568.22,2060100,568.22],
+["2010-04-05",570.90,574.88,569.00,571.01,1901500,571.01],
+["2010-04-01",571.35,573.45,565.55,568.80,2102700,568.80],
+["2010-03-31",565.05,569.74,562.81,567.12,3030800,567.12],
+["2010-03-30",562.83,567.63,560.28,566.71,1977900,566.71],
+["2010-03-29",563.00,564.72,560.57,562.45,3104500,562.45],
+["2010-03-26",565.27,567.39,560.02,562.69,2696200,562.69],
+["2010-03-25",559.02,572.00,558.66,562.88,3930900,562.88],
+["2010-03-24",545.51,559.85,539.70,557.33,6565200,557.33],
+["2010-03-23",557.04,558.31,542.00,549.00,5501300,549.00],
+["2010-03-22",556.11,566.85,554.28,557.50,4004800,557.50],
+["2010-03-19",566.23,568.00,557.28,560.00,4792400,560.00],
+["2010-03-18",564.72,568.44,562.96,566.40,1777200,566.40],
+["2010-03-17",568.30,571.45,564.25,565.56,3321600,565.56],
+["2010-03-16",561.83,568.42,560.76,565.20,3431500,565.20],
+["2010-03-15",566.68,569.45,556.00,563.18,4653900,563.18],
+["2010-03-12",588.14,588.28,579.16,579.54,2753400,579.54],
+["2010-03-11",574.26,586.21,574.20,581.14,4233300,581.14],
+["2010-03-10",563.76,578.50,562.21,576.45,5654900,576.45],
+["2010-03-09",559.85,564.66,556.50,560.19,3176600,560.19],
+["2010-03-08",564.78,565.18,561.01,562.48,2386400,562.48],
+["2010-03-05",561.35,567.67,559.90,564.21,3912200,564.21],
+["2010-03-04",546.50,556.13,546.20,554.59,3183800,554.59],
+["2010-03-03",542.36,548.12,539.25,545.32,3089400,545.32],
+["2010-03-02",535.48,545.66,535.01,541.06,4356800,541.06],
+["2010-03-01",529.20,533.29,527.74,532.69,2237900,532.69],
+["2010-02-26",527.42,531.75,523.48,526.80,2049300,526.80],
+["2010-02-25",527.12,528.49,520.00,526.43,3309200,526.43],
+["2010-02-24",533.98,538.44,530.51,531.47,2326600,531.47],
+["2010-02-23",543.00,543.63,532.29,535.07,2872600,535.07],
+["2010-02-22",547.35,547.50,541.00,542.80,2144600,542.80],
+["2010-02-19",540.53,544.03,539.70,540.76,2553100,540.76],
+["2010-02-18",537.54,545.01,536.14,543.22,2336900,543.22],
+["2010-02-17",542.00,543.40,537.61,538.21,2029700,538.21],
+["2010-02-16",536.87,544.13,534.30,541.30,3654400,541.30],
+["2010-02-12",532.97,537.15,530.50,533.12,2279700,533.12],
+["2010-02-11",533.32,540.49,529.50,536.40,2410000,536.40],
+["2010-02-10",534.07,537.79,527.69,534.45,2674500,534.45],
+["2010-02-09",539.54,541.53,535.07,536.44,2819600,536.44],
+["2010-02-08",532.50,542.00,531.53,533.47,2694300,533.47],
+["2010-02-05",528.40,533.50,522.46,531.29,3156000,531.29],
+["2010-02-04",537.00,538.00,525.56,526.78,3377700,526.78],
+["2010-02-03",528.67,542.10,528.23,540.82,2999100,540.82],
+["2010-02-02",534.96,534.96,527.61,531.12,4096200,531.12],
+["2010-02-01",534.60,535.81,530.30,533.02,2250800,533.02],
+["2010-01-29",538.49,540.99,525.61,529.94,4140500,529.94],
+["2010-01-28",544.49,547.00,530.60,534.29,3229100,534.29],
+["2010-01-27",541.27,547.65,535.31,542.10,3964400,542.10],
+["2010-01-26",537.97,549.60,536.29,542.42,4355500,542.42],
+["2010-01-25",546.59,549.88,535.51,540.00,4419900,540.00],
+["2010-01-22",564.50,570.60,534.86,550.01,6800400,550.01],
+["2010-01-21",583.44,586.82,572.25,582.98,6307700,582.98],
+["2010-01-20",585.98,585.98,575.29,580.41,3250700,580.41],
+["2010-01-19",581.20,590.42,576.29,587.62,4316700,587.62],
+["2010-01-15",593.34,593.56,578.04,580.00,5434500,580.00],
+["2010-01-14",583.90,594.20,582.81,589.85,4240100,589.85],
+["2010-01-13",576.49,588.38,573.90,587.09,6496600,587.09],
+["2010-01-12",597.65,598.16,588.00,590.48,4853300,590.48],
+["2010-01-11",604.46,604.46,594.04,601.11,7212900,601.11],
+["2010-01-08",592.00,603.25,589.11,602.02,4724300,602.02],
+["2010-01-07",609.40,610.00,592.65,594.10,6414300,594.10],
+["2010-01-06",625.86,625.86,606.36,608.26,3978700,608.26],
+["2010-01-05",627.18,627.84,621.54,623.99,3004700,623.99],
+["2010-01-04",626.95,629.51,624.24,626.75,1956200,626.75],
+["2009-12-31",624.75,625.40,619.98,619.98,1219800,619.98],
+["2009-12-30",618.50,622.73,618.01,622.73,1465600,622.73],
+["2009-12-29",624.74,624.84,618.29,619.40,1424800,619.40],
+["2009-12-28",621.66,625.99,618.48,622.87,1697900,622.87],
+["2009-12-24",612.93,619.52,612.27,618.48,858700,618.48],
+["2009-12-23",603.50,612.87,602.85,611.68,2072700,611.68],
+["2009-12-22",601.34,601.50,598.85,601.12,1880800,601.12],
+["2009-12-21",597.61,599.84,595.67,598.68,2571200,598.68],
+["2009-12-18",596.03,598.93,595.00,596.42,3531500,596.42],
+["2009-12-17",596.44,597.64,593.76,593.94,2638800,593.94],
+["2009-12-16",598.60,600.37,596.64,597.76,2809400,597.76],
+["2009-12-15",593.30,596.38,590.99,593.14,2280400,593.14],
+["2009-12-14",595.35,597.31,592.61,595.73,1913400,595.73],
+["2009-12-11",594.68,594.75,587.73,590.51,1720000,590.51],
+["2009-12-10",590.44,594.71,590.41,591.50,1668300,591.50],
+["2009-12-09",587.50,589.33,583.58,589.02,1781000,589.02],
+["2009-12-08",583.50,590.66,582.00,587.05,1524000,587.05],
+["2009-12-07",584.21,588.69,581.00,586.25,1636200,586.25],
+["2009-12-04",593.02,594.83,579.18,585.01,2513600,585.01],
+["2009-12-03",589.04,591.45,585.00,585.74,1428700,585.74],
+["2009-12-02",591.00,593.01,586.22,587.51,1663200,587.51],
+["2009-12-01",588.13,591.22,583.00,589.87,2320300,589.87],
+["2009-11-30",580.63,583.67,577.11,583.00,1725100,583.00],
+["2009-11-27",572.00,582.46,570.97,579.76,1384600,579.76],
+["2009-11-25",586.41,587.06,582.69,585.74,1461200,585.74],
+["2009-11-24",582.52,584.29,576.54,583.09,1605200,583.09],
+["2009-11-23",576.49,586.60,575.86,582.35,2547500,582.35],
+["2009-11-20",569.50,571.60,569.40,569.96,2006200,569.96],
+["2009-11-19",573.77,574.00,570.00,572.99,2168000,572.99],
+["2009-11-18",576.65,578.78,572.07,576.65,1549600,576.65],
+["2009-11-17",574.87,577.50,573.72,577.49,1916700,577.49],
+["2009-11-16",575.00,576.99,572.78,576.28,2199200,576.28],
+["2009-11-13",569.29,572.51,566.61,572.05,1666800,572.05],
+["2009-11-12",569.56,572.90,565.50,567.85,1886300,567.85],
+["2009-11-11",570.48,573.50,565.86,570.56,2319700,570.56],
+["2009-11-10",562.73,568.78,562.00,566.76,2230800,566.76],
+["2009-11-09",555.45,562.58,554.23,562.51,2649900,562.51],
+["2009-11-06",547.72,551.78,545.50,551.10,1826700,551.10],
+["2009-11-05",543.49,549.77,542.66,548.65,1847700,548.65],
+["2009-11-04",540.80,545.50,536.42,540.33,2332700,540.33],
+["2009-11-03",530.01,537.50,528.30,537.29,2380200,537.29],
+["2009-11-02",537.08,539.46,528.24,533.99,3202100,533.99],
+["2009-10-30",550.00,550.17,534.24,536.12,3468500,536.12],
+["2009-10-29",543.01,551.83,541.00,551.05,2522600,551.05],
+["2009-10-28",547.87,550.00,538.25,540.30,2567800,540.30],
+["2009-10-27",550.97,554.56,544.16,548.29,3216500,548.29],
+["2009-10-26",555.75,561.64,550.89,554.21,2970400,554.21],
+["2009-10-23",555.25,557.89,551.20,553.69,2392700,553.69],
+["2009-10-22",550.00,555.00,548.00,554.09,2336500,554.09],
+["2009-10-21",549.91,559.35,549.00,551.10,3670600,551.10],
+["2009-10-20",551.64,552.95,540.70,551.72,4043700,551.72],
+["2009-10-19",552.69,553.60,548.73,552.09,3217900,552.09],
+["2009-10-16",547.33,554.75,544.53,549.85,8841900,549.85],
+["2009-10-15",533.75,536.90,527.27,529.91,6100400,529.91],
+["2009-10-14",532.46,535.58,530.00,535.32,3258400,535.32],
+["2009-10-13",524.39,527.46,521.38,526.11,3037400,526.11],
+["2009-10-12",523.42,525.76,519.32,524.04,3322200,524.04],
+["2009-10-09",516.65,521.51,514.50,516.25,2738100,516.25],
+["2009-10-08",519.57,523.25,513.34,514.18,4303800,514.18],
+["2009-10-07",499.00,518.99,497.81,517.54,4874200,517.54],
+["2009-10-06",491.70,499.37,491.70,498.74,2732300,498.74],
+["2009-10-05",487.65,492.43,483.34,488.52,2144600,488.52],
+["2009-10-02",483.74,491.74,482.60,484.58,2600800,484.58],
+["2009-10-01",493.00,496.47,487.00,487.20,2813200,487.20],
+["2009-09-30",500.00,500.14,487.24,495.85,3141700,495.85],
+["2009-09-29",499.53,499.75,493.01,498.53,2099200,498.53],
+["2009-09-28",494.84,501.50,493.30,498.53,1839300,498.53],
+["2009-09-25",494.29,499.93,492.00,492.48,2049600,492.48],
+["2009-09-24",500.47,501.41,493.00,496.77,2527600,496.77],
+["2009-09-23",500.78,507.00,497.71,498.46,2704200,498.46],
+["2009-09-22",500.92,501.99,497.81,499.06,3041200,499.06],
+["2009-09-21",487.74,498.90,486.22,497.00,2116400,497.00],
+["2009-09-18",496.77,496.98,491.23,491.46,3283500,491.46],
+["2009-09-17",490.57,497.37,487.15,491.72,4483100,491.72],
+["2009-09-16",479.80,489.37,478.48,488.29,2585300,488.29],
+["2009-09-15",475.08,478.91,472.71,477.54,2398100,477.54],
+["2009-09-14",470.51,476.80,470.05,475.12,1975700,475.12],
+["2009-09-11",470.40,473.30,467.63,472.14,1902900,472.14],
+["2009-09-10",466.65,470.94,462.00,470.94,2534600,470.94],
+["2009-09-09",459.06,466.27,458.80,463.97,2195400,463.97],
+["2009-09-08",464.29,466.99,455.84,458.62,2656700,458.62],
+["2009-09-04",457.57,462.60,455.78,461.30,1499200,461.30],
+["2009-09-03",455.82,458.25,455.00,457.52,1646200,457.52],
+["2009-09-02",455.82,458.33,452.59,453.01,1804800,453.01],
+["2009-09-01",459.68,466.82,454.42,455.76,2594900,455.76],
+["2009-08-31",459.79,461.86,458.00,461.67,1957900,461.67],
+["2009-08-28",469.26,472.37,463.38,464.75,1771600,464.75],
+["2009-08-27",468.58,468.58,460.73,466.06,1998900,466.06],
+["2009-08-26",472.76,473.00,466.70,468.00,1987800,468.00],
+["2009-08-25",469.13,474.35,468.72,471.37,2341000,471.37],
+["2009-08-24",467.35,470.09,464.42,468.73,2453400,468.73],
+["2009-08-21",465.54,466.09,462.65,465.24,3560500,465.24],
+["2009-08-20",452.00,462.18,451.23,460.41,3998900,460.41],
+["2009-08-19",439.99,445.00,438.56,443.97,2255000,443.97],
+["2009-08-18",445.10,447.70,442.32,445.28,2351100,445.28],
+["2009-08-17",451.50,451.99,443.12,444.89,2620200,444.89],
+["2009-08-14",462.78,463.18,456.89,460.00,1675100,460.00],
+["2009-08-13",462.15,464.72,458.91,462.28,1995200,462.28],
+["2009-08-12",455.41,461.75,454.92,458.58,2341400,458.58],
+["2009-08-11",453.67,457.23,452.38,453.94,1712500,453.94],
+["2009-08-10",455.14,458.41,453.79,456.61,1742000,456.61],
+["2009-08-07",455.67,459.42,454.99,457.10,2543100,457.10],
+["2009-08-06",454.30,454.88,448.53,450.36,2110900,450.36],
+["2009-08-05",456.00,456.91,447.88,451.14,2342000,451.14],
+["2009-08-04",449.37,454.00,448.43,453.73,2389800,453.73],
+["2009-08-03",448.74,453.90,447.64,452.21,2590300,452.21],
+["2009-07-31",449.98,452.70,442.43,443.05,2860400,443.05],
+["2009-07-30",442.61,451.47,442.61,445.64,3198600,445.64],
+["2009-07-29",437.23,437.80,431.89,436.24,1987000,436.24],
+["2009-07-28",441.00,442.81,436.10,439.85,2532500,439.85],
+["2009-07-27",446.04,446.75,437.61,444.80,2504400,444.80],
+["2009-07-24",435.81,450.49,435.00,446.72,3626900,446.72],
+["2009-07-23",428.68,441.21,425.50,437.34,3478200,437.34],
+["2009-07-22",428.00,430.20,423.50,427.69,2586700,427.69],
+["2009-07-21",430.94,431.90,425.72,427.90,2968200,427.90],
+["2009-07-20",429.88,432.85,426.25,430.17,3153500,430.17],
+["2009-07-17",433.00,435.48,426.70,430.25,6854100,430.25],
+["2009-07-16",436.68,445.75,434.10,442.60,6554500,442.60],
+["2009-07-15",429.66,438.68,428.49,438.17,3777000,438.17],
+["2009-07-14",423.71,426.73,420.87,424.69,2895800,424.69],
+["2009-07-13",416.17,424.52,415.18,424.30,4045700,424.30],
+["2009-07-10",409.58,417.37,408.70,414.40,2926600,414.40],
+["2009-07-09",406.12,414.45,405.80,410.39,3275600,410.39],
+["2009-07-08",400.00,406.00,398.06,402.49,3441200,402.49],
+["2009-07-07",408.24,409.19,395.98,396.63,3259300,396.63],
+["2009-07-06",406.50,410.64,401.66,409.61,2262600,409.61],
+["2009-07-02",415.41,415.41,406.81,408.49,2517600,408.49],
+["2009-07-01",424.20,426.40,418.15,418.99,2310800,418.99],
+["2009-06-30",424.00,427.21,418.22,421.59,2593900,421.59],
+["2009-06-29",426.00,427.80,422.24,424.14,2169300,424.14],
+["2009-06-26",413.68,428.23,413.11,425.32,3256700,425.32],
+["2009-06-25",407.00,415.90,406.51,415.77,3044500,415.77],
+["2009-06-24",408.74,412.23,406.56,409.29,2457800,409.29],
+["2009-06-23",406.65,408.99,402.55,405.68,2899600,405.68],
+["2009-06-22",416.95,417.49,401.89,407.35,4124400,407.35],
+["2009-06-19",418.21,420.46,414.58,420.09,4259100,420.09],
+["2009-06-18",415.68,418.69,413.00,414.06,3085200,414.06],
+["2009-06-17",416.19,419.72,411.56,415.16,3490100,415.16],
+["2009-06-16",419.31,421.09,415.42,416.00,3049700,416.00],
+["2009-06-15",421.50,421.50,414.00,416.77,3736900,416.77],
+["2009-06-12",426.86,427.70,421.21,424.84,2918400,424.84],
+["2009-06-11",431.77,433.73,428.37,429.00,2865200,429.00],
+["2009-06-10",436.23,437.89,426.67,432.60,3358900,432.60],
+["2009-06-09",438.58,440.50,431.76,435.62,3254900,435.62],
+["2009-06-08",439.50,440.92,434.12,438.77,3098700,438.77],
+["2009-06-05",445.07,447.34,439.46,444.32,3680800,444.32],
+["2009-06-04",435.30,441.24,434.50,440.28,3638100,440.28],
+["2009-06-03",426.00,432.46,424.00,431.65,3532800,431.65],
+["2009-06-02",426.25,429.96,423.40,428.40,2623600,428.40],
+["2009-06-01",418.73,429.60,418.53,426.56,3322400,426.56],
+["2009-05-29",412.11,417.23,410.70,417.23,2648200,417.23],
+["2009-05-28",408.68,411.62,404.61,410.40,2668800,410.40],
+["2009-05-27",405.64,411.86,404.81,405.56,3034300,405.56],
+["2009-05-26",391.95,405.00,390.00,404.36,3104500,404.36],
+["2009-05-22",396.66,398.65,392.00,393.50,1718600,393.50],
+["2009-05-21",396.30,402.84,393.84,396.50,2719800,396.50],
+["2009-05-20",402.09,405.67,395.00,397.18,2284000,397.18],
+["2009-05-19",396.10,401.64,393.00,398.88,2837500,398.88],
+["2009-05-18",394.73,397.31,385.40,396.84,3351700,396.84],
+["2009-05-15",391.10,394.11,389.09,390.00,3008700,390.00],
+["2009-05-14",388.80,392.21,384.69,387.50,2937000,387.50],
+["2009-05-13",394.09,396.39,388.35,389.54,2842800,389.54],
+["2009-05-12",410.01,410.99,395.11,399.01,3790800,399.01],
+["2009-05-11",402.80,412.00,401.20,407.98,2559300,407.98],
+["2009-05-08",402.85,410.13,395.00,407.33,3865100,407.33],
+["2009-05-07",404.10,404.99,392.50,396.61,2999800,396.61],
+["2009-05-06",406.79,408.28,401.00,403.47,2632900,403.47],
+["2009-05-05",399.98,405.00,397.25,402.99,2400800,402.99],
+["2009-05-04",398.17,402.40,394.79,401.98,3203000,401.98],
+["2009-05-01",395.03,397.59,391.55,393.69,2427700,393.69],
+["2009-04-30",395.76,403.75,394.80,395.97,4355700,395.97],
+["2009-04-29",385.97,394.97,385.83,391.47,3610000,391.47],
+["2009-04-28",383.75,389.05,381.54,383.71,2943600,383.71],
+["2009-04-27",384.34,389.49,382.75,385.95,2290600,385.95],
+["2009-04-24",386.05,393.18,380.50,389.49,3385400,389.49],
+["2009-04-23",387.51,389.75,381.11,384.69,2609000,384.69],
+["2009-04-22",381.75,390.00,379.01,383.86,3501800,383.86],
+["2009-04-21",376.17,384.30,376.10,381.47,3695400,381.47],
+["2009-04-20",386.15,390.65,375.89,379.30,4428900,379.30],
+["2009-04-17",386.02,399.82,384.81,392.24,10730800,392.24],
+["2009-04-16",381.50,392.90,381.02,388.74,10185100,388.74],
+["2009-04-15",367.10,381.06,364.16,379.50,4930700,379.50],
+["2009-04-14",376.94,376.99,365.60,368.91,3428600,368.91],
+["2009-04-13",371.33,379.10,370.30,378.11,3050100,378.11],
+["2009-04-09",369.50,374.35,366.25,372.50,3382600,372.50],
+["2009-04-08",363.50,365.00,356.21,362.00,2765200,362.00],
+["2009-04-07",362.60,363.75,355.31,358.65,3680100,358.65],
+["2009-04-06",367.00,369.82,361.40,368.24,3280300,368.24],
+["2009-04-03",364.50,371.72,358.00,369.78,3789800,369.78],
+["2009-04-02",363.31,369.76,360.32,362.50,4488000,362.50],
+["2009-04-01",343.78,355.24,340.61,354.09,3301200,354.09],
+["2009-03-31",348.93,353.51,346.18,348.06,3655300,348.06],
+["2009-03-30",342.55,343.81,336.05,342.69,3094100,342.69],
+["2009-03-27",350.00,352.00,345.47,347.70,3322800,347.70],
+["2009-03-26",353.13,359.16,348.50,353.29,6003300,353.29],
+["2009-03-25",350.40,351.34,336.25,344.07,4336300,344.07],
+["2009-03-24",346.50,353.84,344.00,347.17,3820000,347.17],
+["2009-03-23",333.56,349.45,333.03,348.60,4271500,348.60],
+["2009-03-20",330.30,332.99,326.34,330.16,4737900,330.16],
+["2009-03-19",331.68,336.00,327.38,329.94,4111200,329.94],
+["2009-03-18",334.81,340.00,328.05,333.10,5012200,333.10],
+["2009-03-17",320.18,335.34,319.09,335.34,4712500,335.34],
+["2009-03-16",325.99,329.73,318.59,319.69,4946800,319.69],
+["2009-03-13",326.10,327.46,319.03,324.42,3906400,324.42],
+["2009-03-12",317.54,325.00,313.65,323.53,5024100,323.53],
+["2009-03-11",310.10,320.00,305.71,317.91,5923600,317.91],
+["2009-03-10",298.25,310.50,294.25,308.17,6730200,308.17],
+["2009-03-09",299.98,306.57,289.45,290.89,6471300,290.89],
+["2009-03-06",307.22,310.19,294.25,308.57,7234200,308.57],
+["2009-03-05",316.48,319.08,302.64,305.64,6529900,305.64],
+["2009-03-04",323.16,329.00,315.38,318.92,7818400,318.92],
+["2009-03-03",330.07,333.69,322.35,325.48,6524800,325.48],
+["2009-03-02",333.33,340.70,326.00,327.16,5788500,327.16],
+["2009-02-27",332.95,343.82,331.11,337.99,5420000,337.99],
+["2009-02-26",345.96,352.49,337.16,337.18,5605600,337.18],
+["2009-02-25",342.15,352.30,338.92,341.64,6439100,341.64],
+["2009-02-24",331.02,349.62,330.89,345.45,6095900,345.45],
+["2009-02-23",347.00,349.80,329.55,330.06,5221100,330.06],
+["2009-02-20",338.05,348.92,335.00,346.45,6217100,346.45],
+["2009-02-19",357.47,359.80,341.41,342.64,4988700,342.64],
+["2009-02-18",347.24,353.38,340.52,353.11,6024500,353.11],
+["2009-02-17",346.51,347.09,339.69,342.66,5680400,342.66],
+["2009-02-13",362.19,362.99,355.23,357.68,4146700,357.68],
+["2009-02-12",353.16,363.62,351.48,363.05,5550300,363.05],
+["2009-02-11",358.95,365.00,353.00,358.04,5231600,358.04],
+["2009-02-10",375.98,377.50,357.89,358.51,7103700,358.51],
+["2009-02-09",371.28,381.00,367.30,378.77,4977300,378.77],
+["2009-02-06",356.46,373.81,355.44,371.28,7038100,371.28],
+["2009-02-05",340.91,355.38,337.00,353.72,7264400,353.72],
+["2009-02-04",340.07,354.44,339.17,343.00,6817400,343.00],
+["2009-02-03",342.57,343.00,333.83,340.45,6556500,340.45],
+["2009-02-02",334.29,345.00,332.00,340.57,5206900,340.57],
+["2009-01-30",344.69,348.80,336.00,338.53,4672000,338.53],
+["2009-01-29",344.54,345.05,340.11,343.32,7283800,343.32],
+["2009-01-28",337.98,352.33,336.31,348.67,7691400,348.67],
+["2009-01-27",326.45,333.87,324.27,331.48,4927300,331.48],
+["2009-01-26",324.85,328.00,320.56,323.87,4610700,323.87],
+["2009-01-23",309.27,331.96,304.22,324.70,10732800,324.70],
+["2009-01-22",298.04,309.35,295.15,306.50,8267000,306.50],
+["2009-01-21",288.35,303.50,288.35,303.08,4924500,303.08],
+["2009-01-20",299.14,299.50,282.75,282.75,5048200,282.75],
+["2009-01-16",305.02,308.25,295.70,299.67,5224400,299.67],
+["2009-01-15",297.57,303.58,286.79,298.99,5934500,298.99],
+["2009-01-14",310.00,313.80,297.75,300.97,5467900,300.97],
+["2009-01-13",311.77,320.60,310.39,314.32,4432500,314.32],
+["2009-01-12",316.31,318.95,310.23,312.69,3304300,312.69],
+["2009-01-09",327.50,327.50,313.40,315.07,4340500,315.07],
+["2009-01-08",318.28,325.19,317.34,325.19,3600700,325.19],
+["2009-01-07",328.32,330.91,318.75,322.01,4494500,322.01],
+["2009-01-06",332.98,340.80,326.39,334.06,6425200,334.06],
+["2009-01-05",321.00,331.24,315.00,328.05,4889000,328.05],
+["2009-01-02",308.60,321.82,305.50,321.32,3610500,321.32],
+["2008-12-31",304.20,311.00,302.61,307.65,2886800,307.65],
+["2008-12-30",300.80,306.81,298.71,303.11,3843500,303.11],
+["2008-12-29",300.22,301.38,291.58,297.42,3701900,297.42],
+["2008-12-26",304.07,305.26,298.31,300.36,1959100,300.36],
+["2008-12-24",301.48,306.34,298.38,302.95,1921500,302.95],
+["2008-12-23",300.43,303.31,296.67,298.02,3777700,298.02],
+["2008-12-22",308.56,309.50,290.63,297.11,3917600,297.11],
+["2008-12-19",310.99,317.79,309.00,310.17,5612600,310.17],
+["2008-12-18",316.70,320.35,309.11,310.28,4763500,310.28],
+["2008-12-17",318.64,322.13,312.42,315.24,5789700,315.24],
+["2008-12-16",314.52,329.50,311.27,325.28,7059600,325.28],
+["2008-12-15",314.01,318.49,305.11,310.67,6737900,310.67],
+["2008-12-12",295.71,316.47,294.00,315.76,5722100,315.76],
+["2008-12-11",304.17,312.88,297.80,300.22,6179200,300.22],
+["2008-12-10",309.24,314.90,304.51,308.82,5237000,308.82],
+["2008-12-09",297.69,318.00,297.01,305.97,6889900,305.97],
+["2008-12-08",289.99,309.44,282.00,302.11,8144300,302.11],
+["2008-12-05",271.02,284.24,264.02,283.99,6521200,283.99],
+["2008-12-04",276.53,283.49,268.77,274.34,4886600,274.34],
+["2008-12-03",269.85,281.36,265.34,279.43,5904800,279.43],
+["2008-12-02",269.73,277.78,262.58,275.11,5839700,275.11],
+["2008-12-01",286.68,287.38,265.98,265.99,5711200,265.99],
+["2008-11-28",290.58,296.45,288.28,292.96,2565500,292.96],
+["2008-11-26",280.28,295.46,276.20,292.09,6356600,292.09],
+["2008-11-25",268.68,286.66,267.32,282.05,10771200,282.05],
+["2008-11-24",269.26,269.95,249.01,257.44,10054700,257.44],
+["2008-11-21",262.51,269.37,247.30,262.43,10244500,262.43],
+["2008-11-20",274.89,282.94,259.04,259.56,9779400,259.56],
+["2008-11-19",295.39,300.19,278.58,280.18,7834600,280.18],
+["2008-11-18",301.57,303.73,285.35,297.42,8346100,297.42],
+["2008-11-17",303.00,310.16,297.95,300.12,7543800,300.12],
+["2008-11-14",303.25,324.99,302.56,310.02,9517100,310.02],
+["2008-11-13",291.77,313.00,280.00,312.08,13234700,312.08],
+["2008-11-12",302.05,312.49,287.76,291.00,10051100,291.00],
+["2008-11-11",308.69,316.30,300.52,311.46,10146600,311.46],
+["2008-11-10",328.00,329.44,309.47,318.78,8080100,318.78],
+["2008-11-07",333.12,341.15,325.33,331.14,4681300,331.14],
+["2008-11-06",339.97,344.42,325.81,331.22,8574800,331.22],
+["2008-11-05",362.15,368.88,341.31,342.24,6946500,342.24],
+["2008-11-04",353.44,372.36,345.50,366.94,7349900,366.94],
+["2008-11-03",357.58,362.99,341.43,346.49,5954500,346.49],
+["2008-10-31",356.16,371.96,354.27,359.36,7423300,359.36],
+["2008-10-30",368.46,372.00,358.37,359.69,7988900,359.69],
+["2008-10-29",365.79,371.00,352.37,358.00,9756600,358.00],
+["2008-10-28",339.05,369.31,328.51,368.75,8105400,368.75],
+["2008-10-27",334.81,343.00,325.60,329.49,6200700,329.49],
+["2008-10-24",326.47,350.47,324.74,339.29,7359000,339.29],
+["2008-10-23",353.65,358.00,337.99,352.32,6478900,352.32],
+["2008-10-22",356.99,369.69,344.00,355.67,6560000,355.67],
+["2008-10-21",372.39,383.78,362.00,362.75,5782000,362.75],
+["2008-10-20",379.75,380.98,359.59,379.32,6753400,379.32],
+["2008-10-17",378.96,386.00,363.55,372.54,14249200,372.54],
+["2008-10-16",332.76,356.50,309.44,353.02,16239700,353.02],
+["2008-10-15",354.65,359.00,338.83,339.17,6721400,339.17],
+["2008-10-14",393.53,394.50,357.00,362.71,7784800,362.71],
+["2008-10-13",355.79,381.95,345.75,381.02,8905500,381.02],
+["2008-10-10",313.16,341.89,310.30,332.00,10597800,332.00],
+["2008-10-09",344.52,348.57,321.67,328.98,8075000,328.98],
+["2008-10-08",330.16,358.99,326.11,338.11,11826400,338.11],
+["2008-10-07",373.33,374.98,345.37,346.01,11054400,346.01],
+["2008-10-06",373.98,375.99,357.16,371.21,11220600,371.21],
+["2008-10-03",397.35,412.50,383.07,386.91,7992900,386.91],
+["2008-10-02",409.79,409.98,386.00,390.49,5984900,390.49],
+["2008-10-01",411.15,416.98,403.10,411.72,6234800,411.72],
+["2008-09-30",395.98,425.08,392.32,400.52,3086300,400.52],
+["2008-09-29",419.51,423.51,380.71,381.00,10762900,381.00],
+["2008-09-26",428.00,437.16,421.03,431.04,5292500,431.04],
+["2008-09-25",438.84,450.00,435.98,439.60,5020300,439.60],
+["2008-09-24",430.34,445.00,430.11,435.11,4242000,435.11],
+["2008-09-23",433.25,440.79,425.72,429.27,5204200,429.27],
+["2008-09-22",454.13,454.13,429.00,430.14,4407300,430.14],
+["2008-09-19",461.00,462.07,443.28,449.15,10006000,449.15],
+["2008-09-18",422.64,439.18,410.50,439.08,8589400,439.08],
+["2008-09-17",438.48,439.14,413.44,414.49,9126900,414.49],
+["2008-09-16",425.96,449.28,425.49,442.93,6990700,442.93],
+["2008-09-15",424.00,441.97,423.71,433.86,6567400,433.86],
+["2008-09-12",430.21,441.99,429.00,437.66,6028000,437.66],
+["2008-09-11",408.35,435.09,406.38,433.75,6471400,433.75],
+["2008-09-10",424.47,424.48,409.68,414.16,6226800,414.16],
+["2008-09-09",423.17,432.38,415.00,418.66,7229600,418.66],
+["2008-09-08",452.02,452.94,417.55,419.95,9017900,419.95],
+["2008-09-05",445.49,452.46,440.08,444.25,4534300,444.25],
+["2008-09-04",460.00,463.24,449.40,450.26,4848500,450.26],
+["2008-09-03",468.73,474.29,459.58,464.41,4314600,464.41],
+["2008-09-02",476.77,482.18,461.42,465.25,6111500,465.25],
+["2008-08-29",469.75,471.01,462.33,463.29,3848200,463.29],
+["2008-08-28",472.49,476.45,470.33,473.78,3029700,473.78],
+["2008-08-27",473.73,474.83,464.84,468.58,4387100,468.58],
+["2008-08-26",483.46,483.46,470.59,474.16,3308200,474.16],
+["2008-08-25",486.11,497.00,481.50,483.01,2014300,483.01],
+["2008-08-22",491.50,494.88,489.48,490.59,2297200,490.59],
+["2008-08-21",482.92,489.90,479.27,486.53,3514100,486.53],
+["2008-08-20",494.72,496.69,482.57,485.00,3982100,485.00],
+["2008-08-19",490.43,498.28,486.63,490.50,3046500,490.50],
+["2008-08-18",509.84,510.00,495.51,498.30,3333900,498.30],
+["2008-08-15",506.99,510.66,505.50,510.15,3545700,510.15],
+["2008-08-14",497.70,507.61,496.29,505.49,2918600,505.49],
+["2008-08-13",501.60,503.54,493.88,500.03,3625500,500.03],
+["2008-08-12",502.00,506.13,498.00,502.61,2755700,502.61],
+["2008-08-11",492.47,508.88,491.78,500.84,4239300,500.84],
+["2008-08-08",480.15,495.75,475.69,495.01,3739300,495.01],
+["2008-08-07",482.00,484.00,476.41,479.12,2773800,479.12],
+["2008-08-06",478.37,489.77,472.51,486.34,3375800,486.34],
+["2008-08-05",467.59,480.08,466.33,479.85,3584500,479.85],
+["2008-08-04",468.12,473.01,461.90,463.00,2487000,463.00],
+["2008-08-01",472.51,473.22,462.50,467.86,3007900,467.86],
+["2008-07-31",474.56,480.89,471.44,473.75,2865100,473.75],
+["2008-07-30",485.50,486.02,472.81,482.70,3490700,482.70],
+["2008-07-29",479.30,487.26,478.00,483.11,2802800,483.11],
+["2008-07-28",492.09,492.09,475.13,477.12,3160000,477.12],
+["2008-07-25",486.49,493.13,481.50,491.98,3183500,491.98],
+["2008-07-24",496.70,496.87,475.62,475.62,3540900,475.62],
+["2008-07-23",481.61,497.23,478.10,489.22,4894100,489.22],
+["2008-07-22",466.72,480.25,465.60,477.11,4691500,477.11],
+["2008-07-21",480.88,484.09,465.70,468.80,5901500,468.80],
+["2008-07-18",498.35,498.98,478.19,481.32,11292400,481.32],
+["2008-07-17",534.16,537.05,524.50,533.44,8787400,533.44],
+["2008-07-16",514.04,536.50,510.60,535.60,4742200,535.60],
+["2008-07-15",516.28,527.50,501.10,516.09,6071000,516.09],
+["2008-07-14",539.00,540.06,515.45,521.62,4424800,521.62],
+["2008-07-11",536.50,539.50,519.43,533.80,4981400,533.80],
+["2008-07-10",545.00,549.50,530.72,540.57,4331700,540.57],
+["2008-07-09",550.76,555.68,540.73,541.55,4154000,541.55],
+["2008-07-08",545.99,555.19,540.00,554.53,4932400,554.53],
+["2008-07-07",542.30,549.00,535.60,543.91,4255200,543.91],
+["2008-07-03",530.88,539.23,527.50,537.00,2400500,537.00],
+["2008-07-02",536.51,540.38,526.06,527.04,4223000,527.04],
+["2008-07-01",519.58,536.72,517.00,534.73,4959900,534.73],
+["2008-06-30",532.47,538.00,523.06,526.42,3765300,526.42],
+["2008-06-27",527.68,530.00,515.09,528.07,5447500,528.07],
+["2008-06-26",544.10,544.93,528.26,528.82,5659500,528.82],
+["2008-06-25",544.97,557.80,543.67,551.00,4122200,551.00],
+["2008-06-24",545.14,551.19,535.10,542.30,4672600,542.30],
+["2008-06-23",545.36,553.15,542.02,545.21,3635900,545.21],
+["2008-06-20",556.98,556.98,544.51,546.43,5983100,546.43],
+["2008-06-19",555.35,563.78,550.81,560.20,5683100,560.20],
+["2008-06-18",564.51,568.99,559.16,562.38,3381200,562.38],
+["2008-06-17",576.35,578.07,568.38,569.46,3462900,569.46],
+["2008-06-16",566.50,579.10,566.50,572.81,3542800,572.81],
+["2008-06-13",561.49,575.70,561.34,571.51,6184400,571.51],
+["2008-06-12",548.76,558.00,546.88,552.95,5491600,552.95],
+["2008-06-11",556.24,557.34,544.46,545.20,3812900,545.20],
+["2008-06-10",549.56,558.82,546.78,554.17,3657400,554.17],
+["2008-06-09",568.06,570.00,545.40,557.87,5288300,557.87],
+["2008-06-06",579.75,580.72,567.00,567.00,4734500,567.00],
+["2008-06-05",577.08,588.04,576.21,586.30,3916700,586.30],
+["2008-06-04",565.33,578.00,564.55,572.22,3363200,572.22],
+["2008-06-03",576.50,580.50,560.61,567.30,4305300,567.30],
+["2008-06-02",582.50,583.89,571.27,575.00,3674200,575.00],
+["2008-05-30",583.47,589.92,581.30,585.80,3225200,585.80],
+["2008-05-29",574.79,585.88,573.20,583.00,4845000,583.00],
+["2008-05-28",567.94,571.49,561.10,568.24,4050400,568.24],
+["2008-05-27",544.96,562.60,543.85,560.90,3865500,560.90],
+["2008-05-23",546.96,553.00,537.81,544.62,4431500,544.62],
+["2008-05-22",551.95,554.21,540.25,549.46,5076300,549.46],
+["2008-05-21",578.52,581.41,547.89,549.99,6468100,549.99],
+["2008-05-20",574.63,582.48,572.91,578.60,3313600,578.60],
+["2008-05-19",578.55,588.88,573.52,577.52,5604500,577.52],
+["2008-05-16",581.43,584.68,578.32,580.07,4274100,580.07],
+["2008-05-15",579.00,582.95,575.61,581.00,4342700,581.00],
+["2008-05-14",586.49,591.19,575.25,576.30,4375800,576.30],
+["2008-05-13",586.23,587.95,578.55,583.00,5163500,583.00],
+["2008-05-12",574.75,586.75,568.91,584.94,4863900,584.94],
+["2008-05-09",579.00,585.00,571.30,573.20,4484900,573.20],
+["2008-05-08",586.20,589.30,578.91,583.01,5122900,583.01],
+["2008-05-07",590.27,599.49,576.43,579.00,6613000,579.00],
+["2008-05-06",591.00,592.00,583.00,586.36,4629300,586.36],
+["2008-05-05",598.86,599.00,587.13,594.90,6281000,594.90],
+["2008-05-02",598.49,602.45,579.30,581.29,6998800,581.29],
+["2008-05-01",578.31,594.93,576.97,593.08,6602800,593.08],
+["2008-04-30",562.21,584.86,558.47,574.29,7903000,574.29],
+["2008-04-29",550.83,563.40,550.01,558.47,4346000,558.47],
+["2008-04-28",545.88,556.81,539.00,552.12,4008600,552.12],
+["2008-04-25",549.02,553.00,542.73,544.06,4164400,544.06],
+["2008-04-24",551.29,554.49,540.02,543.04,4135100,543.04],
+["2008-04-23",557.94,559.31,540.95,546.49,4921500,546.49],
+["2008-04-22",537.57,560.83,537.56,555.00,7938500,555.00],
+["2008-04-21",539.39,542.59,530.29,537.79,7439700,537.79],
+["2008-04-18",535.21,547.70,524.77,539.41,18235600,539.41],
+["2008-04-17",455.63,459.37,446.52,449.54,13353000,449.54],
+["2008-04-16",444.40,458.28,441.00,455.03,7630700,455.03],
+["2008-04-15",458.13,459.72,443.72,446.84,4577600,446.84],
+["2008-04-14",457.16,457.45,450.15,451.66,3842600,451.66],
+["2008-04-11",464.07,467.26,455.01,457.45,4169700,457.45],
+["2008-04-10",464.96,473.86,461.85,469.08,5072400,469.08],
+["2008-04-09",469.13,472.00,457.54,464.19,6048100,464.19],
+["2008-04-08",473.04,474.14,462.01,467.81,4547000,467.81],
+["2008-04-07",477.03,485.44,473.53,476.82,5943500,476.82],
+["2008-04-04",457.01,477.83,456.20,471.09,5897200,471.09],
+["2008-04-03",461.73,463.29,448.13,455.12,6778400,455.12],
+["2008-04-02",469.90,475.74,460.39,465.70,5999000,465.70],
+["2008-04-01",447.74,466.50,446.87,465.71,6093100,465.71],
+["2008-03-31",435.64,442.69,432.01,440.47,4446400,440.47],
+["2008-03-28",447.46,453.57,434.31,438.08,4376200,438.08],
+["2008-03-27",446.00,448.61,440.49,444.08,5832200,444.08],
+["2008-03-26",452.59,462.87,449.29,458.19,5225700,458.19],
+["2008-03-25",457.46,457.47,446.00,450.78,5831600,450.78],
+["2008-03-24",438.43,465.78,437.72,460.56,6763500,460.56],
+["2008-03-20",427.32,435.70,417.50,433.55,9913400,433.55],
+["2008-03-19",441.11,447.50,431.67,432.00,6179000,432.00],
+["2008-03-18",428.98,440.84,425.53,439.16,7237200,439.16],
+["2008-03-17",427.99,433.71,412.11,419.87,7888200,419.87],
+["2008-03-14",442.98,449.34,430.62,437.92,6574400,437.92],
+["2008-03-13",432.67,446.98,428.78,443.01,7726600,443.01],
+["2008-03-12",440.01,447.88,438.07,440.18,6651900,440.18],
+["2008-03-11",425.26,440.15,424.65,439.84,8826900,439.84],
+["2008-03-10",428.83,431.00,413.04,413.62,7987600,413.62],
+["2008-03-07",428.88,440.00,426.24,433.35,8071800,433.35],
+["2008-03-06",447.69,453.30,431.18,432.70,7470100,432.70],
+["2008-03-05",445.25,454.17,444.00,447.70,7436600,447.70],
+["2008-03-04",450.95,453.36,435.78,444.60,13621700,444.60],
+["2008-03-03",471.51,472.72,450.11,457.02,7554500,457.02],
+["2008-02-29",471.87,479.74,464.65,471.18,9425400,471.18],
+["2008-02-28",470.50,479.09,467.36,475.39,6586900,475.39],
+["2008-02-27",460.13,475.49,459.64,472.86,10121900,472.86],
+["2008-02-26",461.20,466.47,446.85,464.19,23287300,464.19],
+["2008-02-25",505.95,506.50,485.74,486.44,8372800,486.44],
+["2008-02-22",502.06,509.00,497.55,507.80,5515900,507.80],
+["2008-02-21",512.85,513.21,499.50,502.86,5677800,502.86],
+["2008-02-20",503.51,511.01,498.82,509.00,6662200,509.00],
+["2008-02-19",534.94,535.06,506.50,508.95,6350400,508.95],
+["2008-02-15",528.31,532.66,524.33,529.64,5240100,529.64],
+["2008-02-14",538.35,541.04,531.00,532.25,6476700,532.25],
+["2008-02-13",522.50,534.99,518.69,534.62,6624700,534.62],
+["2008-02-12",523.39,530.60,513.03,518.09,6662300,518.09],
+["2008-02-11",520.52,523.71,513.40,521.16,5826000,521.16],
+["2008-02-08",509.41,517.73,508.70,516.69,6828900,516.69],
+["2008-02-07",496.86,514.19,494.76,504.95,7928900,504.95],
+["2008-02-06",511.14,511.17,497.93,501.71,7636400,501.71],
+["2008-02-05",489.43,509.00,488.52,506.80,11203300,506.80],
+["2008-02-04",509.07,512.78,492.55,495.43,13157100,495.43],
+["2008-02-01",528.67,536.67,510.00,515.90,17600500,515.90],
+["2008-01-31",539.01,573.00,534.29,564.30,14871300,564.30],
+["2008-01-30",549.19,560.43,543.51,548.27,7939600,548.27],
+["2008-01-29",560.47,561.33,540.67,550.52,6283000,550.52],
+["2008-01-28",570.97,572.24,548.60,555.98,5816700,555.98],
+["2008-01-25",591.81,595.00,566.18,566.40,6966000,566.40],
+["2008-01-24",558.80,579.69,554.14,574.49,9400900,574.49],
+["2008-01-23",560.71,568.00,519.00,548.62,16965700,548.62],
+["2008-01-22",562.03,597.50,561.20,584.35,9501500,584.35],
+["2008-01-18",608.36,609.99,598.45,600.25,8539600,600.25],
+["2008-01-17",620.76,625.74,598.01,600.79,8216800,600.79],
+["2008-01-16",628.97,639.99,601.93,615.95,10560000,615.95],
+["2008-01-15",645.90,649.05,635.38,637.65,5568200,637.65],
+["2008-01-14",651.14,657.40,645.25,653.82,4447500,653.82],
+["2008-01-11",642.70,649.47,630.11,638.25,4977000,638.25],
+["2008-01-10",645.01,657.20,640.11,646.73,6334200,646.73],
+["2008-01-09",630.04,653.34,622.51,653.20,6739700,653.20],
+["2008-01-08",653.00,659.96,631.00,631.68,5339100,631.68],
+["2008-01-07",653.94,662.28,637.35,649.25,6403400,649.25],
+["2008-01-04",679.69,680.96,655.00,657.00,5359800,657.00],
+["2008-01-03",685.26,686.85,676.52,685.33,3252500,685.33],
+["2008-01-02",692.87,697.37,677.73,685.19,4306900,685.19],
+["2007-12-31",698.57,702.49,690.58,691.48,2376200,691.48],
+["2007-12-28",704.93,707.95,696.54,702.53,2562700,702.53],
+["2007-12-27",707.07,716.00,700.74,700.74,2942500,700.74],
+["2007-12-26",698.99,713.22,698.21,710.84,2530000,710.84],
+["2007-12-24",694.99,700.73,693.06,700.73,1628400,700.73],
+["2007-12-21",697.88,699.26,693.24,696.69,5382000,696.69],
+["2007-12-20",685.83,691.00,680.61,689.69,4422200,689.69],
+["2007-12-19",674.21,679.50,669.00,677.37,4421100,677.37],
+["2007-12-18",674.16,676.71,652.50,673.35,7166700,673.35],
+["2007-12-17",688.00,695.42,663.67,669.23,5486000,669.23],
+["2007-12-14",687.51,699.70,687.26,689.96,3673500,689.96],
+["2007-12-13",696.31,697.62,681.21,694.05,5040800,694.05],
+["2007-12-12",714.00,714.32,688.50,699.35,6159100,699.35],
+["2007-12-11",719.94,720.99,698.78,699.20,6139100,699.20],
+["2007-12-10",715.99,724.80,714.00,718.42,3856200,718.42],
+["2007-12-07",714.99,718.00,710.50,714.87,3852100,714.87],
+["2007-12-06",697.80,716.56,697.01,715.26,4909000,715.26],
+["2007-12-05",692.73,698.93,687.50,698.51,4209600,698.51],
+["2007-12-04",678.31,692.00,677.12,684.16,4231800,684.16],
+["2007-12-03",691.01,695.00,681.14,681.53,4325100,681.53],
+["2007-11-30",711.00,711.06,682.11,693.00,7895500,693.00],
+["2007-11-29",690.75,702.79,687.77,697.00,6208000,697.00],
+["2007-11-28",682.11,694.30,672.14,692.26,7916500,692.26],
+["2007-11-27",674.80,676.43,650.26,673.57,8904500,673.57],
+["2007-11-26",680.20,693.40,665.00,666.00,6790100,666.00],
+["2007-11-23",670.00,678.28,668.11,676.70,2738700,676.70],
+["2007-11-21",643.77,669.97,642.08,660.52,7013500,660.52],
+["2007-11-20",636.48,659.10,632.87,648.54,9840600,648.54],
+["2007-11-19",629.59,636.77,618.50,625.85,5527400,625.85],
+["2007-11-16",633.94,635.49,616.02,633.63,9042800,633.63],
+["2007-11-15",638.57,647.50,624.00,629.65,6967700,629.65],
+["2007-11-14",673.28,675.49,636.27,641.68,8094700,641.68],
+["2007-11-13",644.99,660.92,632.07,660.55,8426100,660.55],
+["2007-11-12",657.74,669.93,626.21,632.07,10227300,632.07],
+["2007-11-09",675.78,681.88,661.21,663.97,11388100,663.97],
+["2007-11-08",734.60,734.89,677.18,693.84,16512200,693.84],
+["2007-11-07",741.13,747.24,723.14,732.94,8252900,732.94],
+["2007-11-06",737.56,741.79,725.00,741.79,8436300,741.79],
+["2007-11-05",706.99,730.23,706.07,725.65,8883700,725.65],
+["2007-11-02",710.51,713.58,697.34,711.25,5841500,711.25],
+["2007-11-01",702.79,713.72,701.78,703.21,6527200,703.21],
+["2007-10-31",700.69,707.00,696.04,707.00,6876800,707.00],
+["2007-10-30",677.51,699.91,677.51,694.77,6900600,694.77],
+["2007-10-29",677.77,680.00,672.09,679.23,3066300,679.23],
+["2007-10-26",674.03,676.54,668.06,674.60,3353900,674.60],
+["2007-10-25",678.68,678.97,663.55,668.51,5795500,668.51],
+["2007-10-24",672.71,677.47,659.56,675.82,7404200,675.82],
+["2007-10-23",661.25,677.60,660.00,675.77,6793700,675.77],
+["2007-10-22",638.67,655.00,636.28,650.75,6664400,650.75],
+["2007-10-19",654.56,658.49,643.23,644.71,15789000,644.71],
+["2007-10-18",635.41,641.37,628.50,639.62,12289200,639.62],
+["2007-10-17",630.45,634.00,621.59,633.48,6030500,633.48],
+["2007-10-16",618.49,625.92,611.99,616.00,6025300,616.00],
+["2007-10-15",638.47,639.86,615.55,620.11,6943800,620.11],
+["2007-10-12",623.98,638.40,618.24,637.39,6823700,637.39],
+["2007-10-11",633.64,641.41,609.00,622.00,11799000,622.00],
+["2007-10-10",621.36,625.68,616.80,625.39,5385600,625.39],
+["2007-10-09",615.11,623.78,608.39,615.18,8767800,615.18],
+["2007-10-08",595.00,610.26,593.95,609.62,5028000,609.62],
+["2007-10-05",587.11,596.00,587.01,594.05,5068700,594.05],
+["2007-10-04",585.09,585.09,577.06,579.03,2986700,579.03],
+["2007-10-03",586.25,588.99,580.36,584.02,3879500,584.02],
+["2007-10-02",583.38,596.81,580.01,584.39,7067500,584.39],
+["2007-10-01",569.97,584.35,569.61,582.55,4711300,582.55],
+["2007-09-28",567.00,569.55,564.12,567.27,2639500,567.27],
+["2007-09-27",571.73,571.74,565.78,567.50,2056300,567.50],
+["2007-09-26",570.40,571.79,563.81,568.16,3346100,568.16],
+["2007-09-25",564.00,569.56,562.86,569.00,2730600,569.00],
+["2007-09-24",561.00,571.46,560.00,568.02,5297000,568.02],
+["2007-09-21",556.34,560.79,552.83,560.10,8011700,560.10],
+["2007-09-20",547.00,556.80,546.03,552.83,5525000,552.83],
+["2007-09-19",539.27,549.45,538.86,546.85,5526900,546.85],
+["2007-09-18",526.52,537.25,524.27,535.27,4215700,535.27],
+["2007-09-17",526.53,529.28,524.07,525.30,2197500,525.30],
+["2007-09-14",523.20,530.27,522.22,528.75,2764900,528.75],
+["2007-09-13",524.06,527.21,523.22,524.78,1891100,524.78],
+["2007-09-12",520.53,527.98,519.00,522.65,2986000,522.65],
+["2007-09-11",516.99,521.65,515.73,521.33,2703600,521.33],
+["2007-09-10",521.28,522.07,510.88,514.48,3225800,514.48],
+["2007-09-07",517.86,521.24,516.80,519.35,3663600,519.35],
+["2007-09-06",529.36,529.83,518.24,523.52,3625900,523.52],
+["2007-09-05",523.40,529.48,522.25,527.80,3312900,527.80],
+["2007-09-04",515.02,528.00,514.62,525.15,3693700,525.15],
+["2007-08-31",513.10,516.50,511.47,515.25,2977600,515.25],
+["2007-08-30",512.36,515.40,510.58,511.40,2651700,511.40],
+["2007-08-29",507.84,513.30,507.23,512.88,2549300,512.88],
+["2007-08-28",511.53,514.98,505.79,506.40,3273900,506.40],
+["2007-08-27",514.43,517.45,511.40,513.26,2325100,513.26],
+["2007-08-24",512.61,515.55,508.50,515.00,2472700,515.00],
+["2007-08-23",516.00,516.13,507.00,512.19,3076700,512.19],
+["2007-08-22",509.96,516.25,509.25,512.75,3252700,512.75],
+["2007-08-21",498.94,508.16,497.77,506.61,3610600,506.61],
+["2007-08-20",502.46,502.56,496.00,497.92,2697300,497.92],
+["2007-08-17",497.44,501.00,491.65,500.04,5479400,500.04],
+["2007-08-16",492.02,496.43,480.46,491.52,8645600,491.52],
+["2007-08-15",509.00,511.69,496.71,497.55,5409500,497.55],
+["2007-08-14",515.72,517.40,508.00,508.60,3633700,508.60],
+["2007-08-13",519.54,519.75,513.03,515.50,3179300,515.50],
+["2007-08-10",510.18,518.72,505.63,515.75,5875200,515.75],
+["2007-08-09",520.80,526.82,514.63,514.73,4846500,514.73],
+["2007-08-08",519.34,525.78,517.09,525.78,4068800,525.78],
+["2007-08-07",509.75,519.88,509.04,516.02,4264300,516.02],
+["2007-08-06",503.00,510.15,502.50,510.00,3651500,510.00],
+["2007-08-03",510.05,513.20,503.00,503.00,3176200,503.00],
+["2007-08-02",513.72,514.99,509.00,511.01,3154900,511.01],
+["2007-08-01",510.50,516.51,508.14,512.94,4421500,512.94],
+["2007-07-31",520.23,520.44,510.00,510.00,4270500,510.00],
+["2007-07-30",512.92,519.34,510.50,516.11,3963300,516.11],
+["2007-07-27",508.53,516.62,505.50,511.89,5509100,511.89],
+["2007-07-26",508.74,512.59,498.88,508.00,6883400,508.00],
+["2007-07-25",516.98,517.02,505.56,509.76,5545000,509.76],
+["2007-07-24",509.30,518.69,507.11,514.00,5572100,514.00],
+["2007-07-23",519.01,520.00,512.15,512.51,6356700,512.51],
+["2007-07-20",511.90,523.18,509.50,520.12,17772300,520.12],
+["2007-07-19",553.46,553.52,542.24,548.59,11127200,548.59],
+["2007-07-18",553.89,554.50,543.81,549.50,6080000,549.50],
+["2007-07-17",555.04,557.73,552.38,555.00,4328600,555.00],
+["2007-07-16",550.30,558.58,549.31,552.99,6599500,552.99],
+["2007-07-13",547.91,552.67,547.25,552.16,5237100,552.16],
+["2007-07-12",545.86,547.32,540.22,545.33,3441600,545.33],
+["2007-07-11",543.61,546.50,540.01,544.47,3309300,544.47],
+["2007-07-10",543.79,547.00,541.65,543.34,3856000,543.34],
+["2007-07-09",543.00,548.74,540.26,542.56,3729800,542.56],
+["2007-07-06",541.25,543.87,538.73,539.40,2747000,539.40],
+["2007-07-05",535.56,544.40,532.15,541.63,4942900,541.63],
+["2007-07-03",531.06,534.40,527.50,534.34,1871800,534.34],
+["2007-07-02",525.49,531.85,524.20,530.38,3487600,530.38],
+["2007-06-29",526.02,527.40,519.46,522.70,3880600,522.70],
+["2007-06-28",524.88,529.50,523.80,525.01,4168400,525.01],
+["2007-06-27",525.00,527.99,519.56,526.29,6123100,526.29],
+["2007-06-26",532.73,533.20,526.24,530.26,5689500,530.26],
+["2007-06-25",528.98,534.99,523.38,527.42,7925000,527.42],
+["2007-06-22",516.42,524.99,516.10,524.98,7203700,524.98],
+["2007-06-21",510.98,515.29,506.28,514.11,4409700,514.11],
+["2007-06-20",516.96,518.75,509.06,509.97,4338200,509.97],
+["2007-06-19",514.01,517.25,511.54,514.31,4355300,514.31],
+["2007-06-18",506.18,516.00,504.24,515.20,4835900,515.20],
+["2007-06-15",508.19,509.00,501.23,505.89,6174100,505.89],
+["2007-06-14",505.38,505.88,501.70,502.84,4621200,502.84],
+["2007-06-13",507.09,508.54,498.69,505.24,7034000,505.24],
+["2007-06-12",508.71,511.67,503.17,504.77,6419500,504.77],
+["2007-06-11",514.02,518.25,510.00,511.34,4647700,511.34],
+["2007-06-08",516.20,519.64,509.46,515.49,6358200,515.49],
+["2007-06-07",519.75,526.50,512.51,515.06,10630500,515.06],
+["2007-06-06",516.75,520.78,515.26,518.25,7886700,518.25],
+["2007-06-05",509.75,519.00,506.61,518.84,10447100,518.84],
+["2007-06-04",497.91,510.51,497.59,507.07,7101000,507.07],
+["2007-06-01",501.00,505.02,497.93,500.40,4799000,500.40],
+["2007-05-31",500.56,508.78,497.06,497.91,8924300,497.91],
+["2007-05-30",484.50,498.84,483.00,498.60,7245800,498.60],
+["2007-05-29",485.00,491.80,484.00,487.11,5218000,487.11],
+["2007-05-25",479.70,484.95,477.27,483.52,5348500,483.52],
+["2007-05-24",475.15,479.20,471.50,474.33,4173600,474.33],
+["2007-05-23",480.82,483.41,473.75,473.97,5060200,473.97],
+["2007-05-22",473.00,479.01,473.00,475.86,3839000,475.86],
+["2007-05-21",469.53,479.20,466.72,470.60,6159300,470.60],
+["2007-05-18",472.03,472.70,469.75,470.32,3695900,470.32],
+["2007-05-17",472.46,475.22,470.81,470.96,4660600,470.96],
+["2007-05-16",462.00,473.14,459.02,472.61,6554200,472.61],
+["2007-05-15",461.96,462.54,457.41,458.00,4119000,458.00],
+["2007-05-14",465.48,467.51,460.00,461.78,3872700,461.78],
+["2007-05-11",461.83,467.00,461.00,466.74,2944100,466.74],
+["2007-05-10",467.04,469.49,461.02,461.47,3686300,461.47],
+["2007-05-09",466.15,471.73,463.88,469.25,3889900,469.25],
+["2007-05-08",466.13,468.17,464.73,466.81,2905100,466.81],
+["2007-05-07",472.14,472.82,466.47,467.27,3020100,467.27],
+["2007-05-04",470.12,474.84,465.88,471.12,3950000,471.12],
+["2007-05-03",466.22,474.07,465.29,473.23,3594200,473.23],
+["2007-05-02",468.65,471.08,465.73,465.78,3062700,465.78],
+["2007-05-01",472.19,472.81,464.17,469.00,3658200,469.00],
+["2007-04-30",479.15,481.35,471.38,471.38,3641200,471.38],
+["2007-04-27",480.07,482.40,478.33,479.01,2925700,479.01],
+["2007-04-26",478.10,484.45,477.11,481.18,4124900,481.18],
+["2007-04-25",480.00,481.37,476.11,477.99,3966800,477.99],
+["2007-04-24",478.61,479.98,475.55,477.53,3694700,477.53],
+["2007-04-23",480.10,485.00,478.26,479.08,5674600,479.08],
+["2007-04-20",490.52,492.50,482.02,482.48,12161500,482.48],
+["2007-04-19",474.50,481.95,469.59,471.65,11009600,471.65],
+["2007-04-18",471.26,479.90,469.53,476.01,5670500,476.01],
+["2007-04-17",473.80,476.39,471.60,472.80,3210100,472.80],
+["2007-04-16",468.46,476.99,468.15,474.27,5077900,474.27],
+["2007-04-13",468.45,468.77,463.36,466.29,2794800,466.29],
+["2007-04-12",464.00,468.00,462.24,467.39,2707900,467.39],
+["2007-04-11",466.06,469.40,462.61,464.53,3812000,464.53],
+["2007-04-10",467.09,470.79,465.16,466.50,2979300,466.50],
+["2007-04-09",472.98,473.00,465.59,468.21,3062100,468.21],
+["2007-04-05",471.30,472.09,469.62,471.51,2715800,471.51],
+["2007-04-04",472.14,473.00,469.58,471.02,3778800,471.02],
+["2007-04-03",464.05,474.25,464.00,472.60,6501800,472.60],
+["2007-04-02",457.76,458.53,452.12,458.53,3448500,458.53],
+["2007-03-30",462.10,463.40,456.14,458.16,3380200,458.16],
+["2007-03-29",464.55,466.00,455.00,460.92,3988500,460.92],
+["2007-03-28",461.87,465.44,460.15,461.88,4591600,461.88],
+["2007-03-27",463.55,465.23,460.34,463.62,3741200,463.62],
+["2007-03-26",460.55,465.00,455.62,465.00,4710300,465.00],
+["2007-03-23",461.45,463.39,457.08,461.83,4111300,461.83],
+["2007-03-22",455.61,462.17,452.53,462.04,5680700,462.04],
+["2007-03-21",445.30,456.57,445.21,456.55,5798300,456.55],
+["2007-03-20",445.79,447.60,443.60,445.28,3421500,445.28],
+["2007-03-19",443.25,448.50,440.63,447.23,5197700,447.23],
+["2007-03-16",445.65,446.70,439.89,440.85,5659100,440.85],
+["2007-03-15",447.86,449.82,443.94,446.19,3944200,446.19],
+["2007-03-14",443.23,448.66,439.00,448.00,8016900,448.00],
+["2007-03-13",450.11,451.93,442.83,443.03,6377300,443.03],
+["2007-03-12",452.57,455.25,451.11,454.75,3465400,454.75],
+["2007-03-09",458.00,458.40,450.10,452.96,4977700,452.96],
+["2007-03-08",459.22,465.50,454.10,454.72,5362800,454.72],
+["2007-03-07",462.69,463.14,454.29,455.64,6534100,455.64],
+["2007-03-06",447.47,459.00,447.38,457.55,7533700,457.55],
+["2007-03-05",437.02,445.50,437.00,440.95,6355100,440.95],
+["2007-03-02",445.11,448.70,438.68,438.68,6583600,438.68],
+["2007-03-01",442.67,452.42,440.00,448.23,8685200,448.23],
+["2007-02-28",450.41,453.67,443.04,449.45,8032300,449.45],
+["2007-02-27",455.00,459.80,447.17,448.77,9312800,448.77],
+["2007-02-26",472.83,475.25,463.75,464.93,3969900,464.93],
+["2007-02-23",475.75,476.95,467.80,470.62,3882600,470.62],
+["2007-02-22",478.69,484.24,474.39,475.85,5743900,475.85],
+["2007-02-21",469.84,478.68,467.74,475.86,5640600,475.86],
+["2007-02-20",468.47,472.75,464.71,472.10,4067600,472.10],
+["2007-02-16",462.80,470.15,462.06,469.94,6177000,469.94],
+["2007-02-15",466.00,466.13,460.72,461.47,4042400,461.47],
+["2007-02-14",460.00,469.13,459.22,465.93,5698800,465.93],
+["2007-02-13",459.15,462.78,457.26,459.10,4062600,459.10],
+["2007-02-12",460.68,462.39,455.02,458.29,5754500,458.29],
+["2007-02-09",471.65,472.68,461.50,461.89,4858600,461.89],
+["2007-02-08",468.05,473.75,465.15,471.03,4076700,471.03],
+["2007-02-07",473.82,474.35,468.78,470.01,4119800,470.01],
+["2007-02-06",468.10,473.30,467.26,471.48,5321900,471.48],
+["2007-02-05",477.50,478.00,466.19,467.16,7206900,467.16],
+["2007-02-02",482.61,485.00,477.81,481.50,6286500,481.50],
+["2007-02-01",506.00,506.01,481.53,481.75,15658700,481.75],
+["2007-01-31",496.49,505.00,495.51,501.50,12206100,501.50],
+["2007-01-30",494.00,498.00,491.22,494.32,4180500,494.32],
+["2007-01-29",498.00,498.75,490.50,492.47,4775700,492.47],
+["2007-01-26",490.93,497.90,487.03,495.84,5496500,495.84],
+["2007-01-25",501.00,504.50,485.66,488.09,6368500,488.09],
+["2007-01-24",484.45,499.54,483.29,499.07,6059300,499.07],
+["2007-01-23",480.79,484.75,477.29,479.05,4665500,479.05],
+["2007-01-22",492.50,492.65,478.50,480.84,5404300,480.84],
+["2007-01-19",487.98,490.76,486.74,489.75,4978300,489.75],
+["2007-01-18",494.52,496.48,487.43,487.83,5932000,487.83],
+["2007-01-17",503.39,507.77,494.38,497.28,6699100,497.28],
+["2007-01-16",507.55,513.00,503.30,504.28,7568900,504.28],
+["2007-01-12",501.99,505.00,500.00,505.00,4473700,505.00],
+["2007-01-11",497.20,501.75,496.18,499.72,7208200,499.72],
+["2007-01-10",484.43,493.55,482.04,489.46,5968500,489.46],
+["2007-01-09",485.45,488.25,481.20,485.50,5381400,485.50],
+["2007-01-08",487.69,489.87,482.20,483.58,4754400,483.58],
+["2007-01-05",482.50,487.50,478.11,487.19,6872100,487.19],
+["2007-01-04",469.00,483.95,468.35,483.26,7887600,483.26],
+["2007-01-03",466.00,476.66,461.11,467.59,7706500,467.59],
+["2006-12-29",462.10,464.47,459.86,460.48,2559200,460.48],
+["2006-12-28",467.12,468.58,462.25,462.56,3116200,462.56],
+["2006-12-27",460.00,468.08,459.10,468.03,4231500,468.03],
+["2006-12-26",456.52,459.47,454.59,457.53,2074300,457.53],
+["2006-12-22",457.50,458.64,452.73,455.58,3988300,455.58],
+["2006-12-21",464.18,465.25,452.34,456.20,6953300,456.20],
+["2006-12-20",470.00,471.50,462.33,462.90,4367800,462.90],
+["2006-12-19",461.72,469.31,458.50,468.63,6587000,468.63],
+["2006-12-18",482.51,482.74,460.72,462.80,8016600,462.80],
+["2006-12-15",482.64,484.11,479.84,480.30,5190800,480.30],
+["2006-12-14",480.25,483.75,477.26,482.12,4748900,482.12],
+["2006-12-13",484.69,485.50,477.02,478.99,4662100,478.99],
+["2006-12-12",483.85,486.36,480.28,481.78,4181000,481.78],
+["2006-12-11",484.92,488.90,483.80,483.93,3263400,483.93],
+["2006-12-08",481.94,488.60,480.00,484.11,3974900,484.11],
+["2006-12-07",490.23,491.80,482.42,482.64,4664300,482.64],
+["2006-12-06",486.96,492.40,484.52,488.71,4450300,488.71],
+["2006-12-05",487.40,489.44,484.89,487.00,4103000,487.00],
+["2006-12-04",483.00,487.43,479.35,484.85,4899900,484.85],
+["2006-12-01",485.98,488.39,478.50,480.80,5631400,480.80],
+["2006-11-30",484.19,490.40,481.55,484.81,5577500,484.81],
+["2006-11-29",494.24,494.74,482.25,484.65,6315300,484.65],
+["2006-11-28",481.13,489.86,477.03,489.50,7797600,489.50],
+["2006-11-27",501.37,501.78,484.75,484.75,7324700,484.75],
+["2006-11-24",504.50,507.50,504.00,505.00,1732700,505.00],
+["2006-11-22",510.97,513.00,505.78,508.01,4500700,508.01],
+["2006-11-21",496.54,510.00,495.83,509.65,8427500,509.65],
+["2006-11-20",498.40,498.40,492.65,495.05,5124500,495.05],
+["2006-11-17",493.25,499.66,493.00,498.79,5511000,498.79],
+["2006-11-16",495.00,497.68,492.56,495.90,5092600,495.90],
+["2006-11-15",493.43,499.85,491.93,491.93,8370700,491.93],
+["2006-11-14",480.70,489.95,480.50,489.30,7223400,489.30],
+["2006-11-13",474.90,481.17,474.14,481.03,4341900,481.03],
+["2006-11-10",473.78,474.72,470.29,473.55,2796700,473.55],
+["2006-11-09",476.50,479.49,471.86,472.63,4879200,472.63],
+["2006-11-08",470.35,481.74,468.60,475.00,7965000,475.00],
+["2006-11-07",476.95,479.02,471.77,472.57,4897100,472.57],
+["2006-11-06",473.77,479.66,472.33,476.95,4991500,476.95],
+["2006-11-03",472.23,473.75,465.06,471.80,4907700,471.80],
+["2006-11-02",467.50,473.73,466.38,469.91,5236700,469.91],
+["2006-11-01",478.76,479.13,465.26,467.50,5426300,467.50],
+["2006-10-31",478.06,482.16,473.84,476.39,6285400,476.39],
+["2006-10-30",474.82,480.46,470.01,476.57,6563100,476.57],
+["2006-10-27",483.90,485.24,472.49,475.20,6604000,475.20],
+["2006-10-26",487.68,491.96,484.20,485.10,7031700,485.10],
+["2006-10-25",477.49,488.50,475.11,486.60,9187500,486.60],
+["2006-10-24",476.28,477.86,471.41,473.31,8660200,473.31],
+["2006-10-23",462.28,484.64,460.37,480.78,15104500,480.78],
+["2006-10-20",458.99,460.10,453.59,459.67,11647900,459.67],
+["2006-10-19",420.23,429.50,419.57,426.06,11503500,426.06],
+["2006-10-18",422.99,424.75,417.50,419.31,6017300,419.31],
+["2006-10-17",420.30,423.75,416.70,420.64,5211000,420.64],
+["2006-10-16",427.70,429.20,421.34,421.75,4319400,421.75],
+["2006-10-13",427.76,429.50,425.56,427.30,3622500,427.30],
+["2006-10-12",428.56,429.68,424.00,427.44,4844000,427.44],
+["2006-10-11",425.02,429.91,423.76,426.50,5635400,426.50],
+["2006-10-10",431.56,437.85,422.39,426.65,9788600,426.65],
+["2006-10-09",424.80,431.95,423.42,429.00,7583300,429.00],
+["2006-10-06",410.22,421.91,409.75,420.50,7336500,420.50],
+["2006-10-05",414.70,418.24,410.86,411.81,5789800,411.81],
+["2006-10-04",404.97,415.77,403.05,415.70,6661800,415.70],
+["2006-10-03",401.29,406.46,398.19,404.04,5464700,404.04],
+["2006-10-02",401.90,406.00,400.80,401.44,3651900,401.44],
+["2006-09-29",405.13,405.62,401.41,401.90,3310900,401.90],
+["2006-09-28",404.08,406.98,400.54,403.58,5107400,403.58],
+["2006-09-27",406.30,411.22,402.37,402.92,5876700,402.92],
+["2006-09-26",405.50,407.68,401.77,406.87,5289400,406.87],
+["2006-09-25",405.58,409.45,402.50,403.98,5737300,403.98],
+["2006-09-22",404.98,407.45,401.36,403.78,4649600,403.78],
+["2006-09-21",400.30,408.45,399.86,406.85,10692100,406.85],
+["2006-09-20",407.10,407.39,394.62,397.00,9147800,397.00],
+["2006-09-19",415.46,415.49,392.74,403.81,14292900,403.81],
+["2006-09-18",410.00,418.69,409.47,414.69,7106700,414.69],
+["2006-09-15",407.48,410.05,406.74,409.88,7838200,409.88],
+["2006-09-14",404.30,406.28,401.93,403.98,5366100,403.98],
+["2006-09-13",395.15,406.76,395.10,406.57,9768200,406.57],
+["2006-09-12",385.00,392.73,384.88,391.90,5442200,391.90],
+["2006-09-11",378.26,384.69,377.77,384.09,4529200,384.09],
+["2006-09-08",376.72,380.79,376.72,377.85,3083400,377.85],
+["2006-09-07",379.39,381.75,377.40,378.49,3842000,378.49],
+["2006-09-06",382.10,383.19,379.66,380.14,3724100,380.14],
+["2006-09-05",379.87,385.40,377.44,384.36,4074300,384.36],
+["2006-09-01",380.99,381.28,377.19,378.60,2672900,378.60],
+["2006-08-31",381.49,382.15,378.20,378.53,2959900,378.53],
+["2006-08-30",379.21,384.65,378.51,380.75,4044400,380.75],
+["2006-08-29",380.78,382.32,377.20,378.95,4460000,378.95],
+["2006-08-28",375.61,380.95,375.00,380.95,4164000,380.95],
+["2006-08-25",373.08,375.32,372.50,373.26,2466700,373.26],
+["2006-08-24",374.44,376.40,372.26,373.73,3482500,373.73],
+["2006-08-23",377.64,378.27,372.66,373.43,3642300,373.43],
+["2006-08-22",377.73,379.26,374.84,378.29,4164100,378.29],
+["2006-08-21",378.10,379.00,375.22,377.30,4023300,377.30],
+["2006-08-18",386.31,387.09,380.75,383.36,4952200,383.36],
+["2006-08-17",386.39,390.00,383.92,385.80,5080200,385.80],
+["2006-08-16",383.48,388.45,382.12,387.72,5853200,387.72],
+["2006-08-15",374.11,381.67,372.60,380.97,6698200,380.97],
+["2006-08-14",371.50,375.13,368.67,369.43,4968300,369.43],
+["2006-08-11",374.40,375.28,368.00,368.50,3766500,368.50],
+["2006-08-10",373.88,377.67,372.46,374.20,4261900,374.20],
+["2006-08-09",382.80,384.68,376.36,376.94,4311000,376.94],
+["2006-08-08",382.82,384.50,379.09,381.00,5743200,381.00],
+["2006-08-07",371.50,379.73,371.15,377.95,3946900,377.95],
+["2006-08-04",379.56,380.68,371.75,373.85,5095200,373.85],
+["2006-08-03",364.98,377.91,363.36,375.39,6327000,375.39],
+["2006-08-02",375.60,377.17,365.20,367.23,7097800,367.23],
+["2006-08-01",385.11,385.77,375.51,375.51,5463200,375.51],
+["2006-07-31",388.00,389.17,383.31,386.60,4595300,386.60],
+["2006-07-28",382.00,389.56,381.73,388.12,4083600,388.12],
+["2006-07-27",387.37,387.49,377.95,382.40,5641100,382.40],
+["2006-07-26",388.20,391.91,383.00,385.50,5531900,385.50],
+["2006-07-25",385.02,391.31,383.80,389.36,5761100,389.36],
+["2006-07-24",392.82,393.89,381.21,390.90,8086100,390.90],
+["2006-07-21",386.14,391.75,377.69,390.11,11754600,390.11],
+["2006-07-20",404.28,404.44,385.66,387.12,12538700,387.12],
+["2006-07-19",395.01,401.14,394.66,399.00,8518500,399.00],
+["2006-07-18",409.75,410.57,397.74,403.05,8536800,403.05],
+["2006-07-17",404.63,411.00,403.72,407.89,5811900,407.89],
+["2006-07-14",410.33,411.49,398.61,403.50,7552100,403.50],
+["2006-07-13",414.00,418.34,406.83,408.83,6924500,408.83],
+["2006-07-12",422.09,422.74,416.73,417.25,4906700,417.25],
+["2006-07-11",418.51,425.05,413.03,424.56,5971300,424.56],
+["2006-07-10",423.44,425.23,416.38,418.20,4436400,418.20],
+["2006-07-07",426.05,427.89,415.88,420.45,6041900,420.45],
+["2006-07-06",423.38,425.38,421.98,423.19,3687100,423.19],
+["2006-07-05",421.52,422.80,415.64,421.46,4985600,421.46],
+["2006-07-03",420.04,423.77,419.45,423.20,2156700,423.20],
+["2006-06-30",415.60,419.33,412.33,419.33,6258000,419.33],
+["2006-06-29",407.99,418.20,405.82,417.81,6658200,417.81],
+["2006-06-28",404.01,406.48,401.13,406.11,3710500,406.11],
+["2006-06-27",405.71,408.00,401.01,402.32,4107100,402.32],
+["2006-06-26",406.75,408.30,403.25,404.22,3551200,404.22],
+["2006-06-23",402.76,409.75,400.74,404.86,5314800,404.86],
+["2006-06-22",401.58,406.00,388.00,399.95,5911900,399.95],
+["2006-06-21",391.06,404.00,389.75,402.13,8744400,402.13],
+["2006-06-20",388.03,391.87,386.51,387.17,4039900,387.17],
+["2006-06-19",390.85,394.80,386.98,388.14,7633100,388.14],
+["2006-06-16",389.10,390.93,388.00,390.70,5304600,390.70],
+["2006-06-15",386.62,392.25,383.00,391.00,6785700,391.00],
+["2006-06-14",389.83,391.10,378.52,384.39,7772000,384.39],
+["2006-06-13",380.90,387.00,378.12,386.52,7659100,386.52],
+["2006-06-12",388.34,390.49,381.00,381.54,5019100,381.54],
+["2006-06-09",392.19,395.43,385.35,386.57,6157500,386.57],
+["2006-06-08",387.75,394.27,378.59,393.30,10359500,393.30],
+["2006-06-07",393.24,394.86,386.50,386.51,8911300,386.51],
+["2006-06-06",376.58,390.00,376.30,389.99,10259800,389.99],
+["2006-06-05",376.18,381.45,374.15,374.44,5558500,374.44],
+["2006-06-02",386.84,387.08,377.45,379.44,6386400,379.44],
+["2006-06-01",373.54,382.99,371.60,382.62,6278000,382.62],
+["2006-05-31",373.80,378.25,366.78,371.82,7981300,371.82],
+["2006-05-30",378.28,381.00,371.45,371.94,4316000,371.94],
+["2006-05-26",384.55,385.88,380.03,381.35,3667000,381.35],
+["2006-05-25",379.08,383.00,372.31,382.99,8194600,382.99],
+["2006-05-24",377.35,383.44,371.61,381.25,9553800,381.25],
+["2006-05-23",374.21,383.88,373.56,375.58,8983000,375.58],
+["2006-05-22",367.85,373.03,365.25,370.95,8604400,370.95],
+["2006-05-19",373.28,374.50,360.57,370.02,11398200,370.02],
+["2006-05-18",378.78,381.81,370.71,370.99,5835000,370.99],
+["2006-05-17",370.61,379.84,370.22,374.50,10643800,374.50],
+["2006-05-16",375.99,376.86,369.89,371.30,6491100,371.30],
+["2006-05-15",375.93,380.15,368.25,376.20,8590100,376.20],
+["2006-05-12",383.54,384.87,373.55,374.13,10087600,374.13],
+["2006-05-11",403.42,404.71,384.98,387.00,8892800,387.00],
+["2006-05-10",408.31,411.71,401.86,402.98,6187200,402.98],
+["2006-05-09",395.70,409.00,393.75,408.80,9140600,408.80],
+["2006-05-08",395.11,397.12,390.05,394.78,5118600,394.78],
+["2006-05-05",397.60,400.68,391.78,394.30,6065000,394.30],
+["2006-05-04",395.03,398.87,392.21,394.75,4652000,394.75],
+["2006-05-03",396.35,401.50,390.88,394.17,8072200,394.17],
+["2006-05-02",401.08,402.49,388.40,394.80,13104300,394.80],
+["2006-05-01",418.47,419.44,398.55,398.90,10361200,398.90],
+["2006-04-28",418.63,425.73,416.30,417.94,7421300,417.94],
+["2006-04-27",422.91,426.91,419.39,420.03,8337900,420.03],
+["2006-04-26",427.74,430.04,423.53,425.97,7277800,425.97],
+["2006-04-25",439.63,441.04,426.00,427.16,9569000,427.16],
+["2006-04-24",439.40,444.70,436.52,440.50,8836400,440.50],
+["2006-04-21",448.90,450.72,436.17,437.10,22551300,437.10],
+["2006-04-20",411.01,416.00,408.20,415.00,12271500,415.00],
+["2006-04-19",412.57,413.64,406.73,410.50,6781700,410.50],
+["2006-04-18",407.93,409.83,401.50,404.24,8137600,404.24],
+["2006-04-17",403.45,412.50,400.84,406.82,8259500,406.82],
+["2006-04-13",408.63,409.76,400.50,402.16,6552900,402.16],
+["2006-04-12",409.00,411.33,405.19,408.95,6017000,408.95],
+["2006-04-11",416.42,419.10,406.22,409.66,11107200,409.66],
+["2006-04-10",407.08,417.17,405.25,416.38,9320100,416.38],
+["2006-04-07",412.41,412.85,404.02,406.16,7025900,406.16],
+["2006-04-06",406.49,413.89,405.43,411.18,8598500,411.18],
+["2006-04-05",408.20,414.57,402.82,407.99,13410500,407.99],
+["2006-04-04",389.90,404.90,388.14,404.34,15715700,404.34],
+["2006-04-03",389.53,392.47,387.93,389.70,8122700,389.70],
+["2006-03-31",388.74,391.87,384.03,390.00,36521400,390.00],
+["2006-03-30",389.19,393.50,383.61,388.44,14711700,388.44],
+["2006-03-29",379.94,399.00,379.51,394.98,19027500,394.98],
+["2006-03-28",371.71,377.86,371.17,377.20,8945800,377.20],
+["2006-03-27",367.09,371.71,365.00,369.69,7023700,369.69],
+["2006-03-24",368.62,370.09,362.51,365.80,15180600,365.80],
+["2006-03-23",342.35,345.75,340.20,341.89,7434700,341.89],
+["2006-03-22",339.75,344.10,337.50,340.22,7596000,340.22],
+["2006-03-21",350.01,351.66,339.08,339.92,9831100,339.92],
+["2006-03-20",342.34,350.09,341.54,348.19,10407600,348.19],
+["2006-03-17",338.80,341.78,334.93,339.79,8551700,339.79],
+["2006-03-16",348.61,348.75,337.90,338.77,10016700,338.77],
+["2006-03-15",350.77,352.30,340.53,344.50,12768800,344.50],
+["2006-03-14",337.14,352.37,332.62,351.16,18450700,351.16],
+["2006-03-13",340.93,346.10,335.45,337.06,13642400,337.06],
+["2006-03-10",343.50,344.50,331.55,337.50,19325600,337.50],
+["2006-03-09",355.39,358.53,341.50,343.00,13910400,343.00],
+["2006-03-08",353.93,360.03,350.54,353.88,11745600,353.88],
+["2006-03-07",365.02,368.45,358.15,364.45,10378800,364.45],
+["2006-03-06",380.91,383.40,367.14,368.10,8939700,368.10],
+["2006-03-03",384.30,387.24,375.76,378.18,11962000,378.18],
+["2006-03-02",364.28,381.10,362.20,376.45,18330300,376.45],
+["2006-03-01",368.56,369.45,361.30,364.80,12061200,364.80],
+["2006-02-28",393.20,397.54,338.51,362.62,39437600,362.62],
+["2006-02-27",381.27,391.70,380.28,390.38,10212200,390.38],
+["2006-02-24",377.30,380.07,373.49,377.40,6484300,377.40],
+["2006-02-23",365.61,381.24,365.39,378.07,12551600,378.07],
+["2006-02-22",367.15,368.95,363.86,365.49,6476200,365.49],
+["2006-02-21",366.44,373.54,365.11,366.59,8686000,366.59],
+["2006-02-17",369.86,372.14,363.62,368.75,14320200,368.75],
+["2006-02-16",345.67,367.00,344.49,366.46,21315500,366.46],
+["2006-02-15",341.27,346.00,337.83,342.38,12947000,342.38],
+["2006-02-14",345.33,351.69,342.40,343.32,14654000,343.32],
+["2006-02-13",346.64,350.60,341.89,345.70,19717800,345.70],
+["2006-02-10",361.95,364.50,353.14,362.61,15223500,362.61],
+["2006-02-09",371.20,374.40,356.11,358.77,11912400,358.77],
+["2006-02-08",368.48,370.69,354.67,369.08,20804100,369.08],
+["2006-02-07",382.99,383.70,363.35,367.92,16630200,367.92],
+["2006-02-06",385.31,389.90,379.56,385.10,8940400,385.10],
+["2006-02-03",393.62,393.90,372.57,381.55,18281800,381.55],
+["2006-02-02",403.82,406.50,395.98,396.04,11807700,396.04],
+["2006-02-01",389.03,402.00,387.52,401.78,27122500,401.78],
+["2006-01-31",430.57,439.60,423.97,432.66,22066000,432.66],
+["2006-01-30",429.23,433.28,425.00,426.82,8588900,426.82],
+["2006-01-27",435.00,438.22,428.98,433.49,8452200,433.49],
+["2006-01-26",439.54,439.99,423.56,434.27,12926100,434.27],
+["2006-01-25",451.26,454.23,429.22,433.00,18739800,433.00],
+["2006-01-24",436.03,444.95,434.48,443.03,15464600,443.03],
+["2006-01-23",407.38,428.39,405.73,427.50,22741400,427.50],
+["2006-01-20",438.70,440.03,394.74,399.46,41116700,399.46],
+["2006-01-19",451.17,453.49,433.00,436.45,14537300,436.45],
+["2006-01-18",447.30,457.36,443.25,444.91,20485700,444.91],
+["2006-01-17",463.06,469.90,462.53,467.11,8270300,467.11],
+["2006-01-13",464.31,466.89,461.61,466.25,7656600,466.25],
+["2006-01-12",473.72,474.99,461.50,463.63,10125300,463.63],
+["2006-01-11",471.27,475.11,469.18,471.63,9007400,471.63],
+["2006-01-10",464.42,470.25,462.04,469.76,9097100,469.76],
+["2006-01-09",466.41,473.40,460.94,466.90,12791900,466.90],
+["2006-01-06",456.87,470.50,453.24,465.66,17756900,465.66],
+["2006-01-05",446.00,451.55,441.50,451.24,10808300,451.24],
+["2006-01-04",443.90,448.96,439.75,445.24,15286400,445.24],
+["2006-01-03",422.52,435.67,418.22,435.23,13121200,435.23],
+["2005-12-30",417.27,418.21,413.74,414.86,7587100,414.86],
+["2005-12-29",427.98,428.73,419.17,420.15,6945800,420.15],
+["2005-12-28",424.34,427.78,421.26,426.69,7117900,426.69],
+["2005-12-27",431.86,431.86,422.76,424.64,6702800,424.64],
+["2005-12-23",432.15,432.50,428.78,430.93,4595100,430.93],
+["2005-12-22",431.77,432.86,425.93,432.04,7546600,432.04],
+["2005-12-21",433.55,436.86,420.71,426.33,11221900,426.33],
+["2005-12-20",427.86,432.20,424.67,429.74,10084700,429.74],
+["2005-12-19",432.20,446.21,420.11,424.60,21936800,424.60],
+["2005-12-16",425.34,432.50,422.75,430.15,16330500,430.15],
+["2005-12-15",419.11,423.14,416.50,422.55,6045800,422.55],
+["2005-12-14",417.04,419.73,415.49,418.96,6630400,418.96],
+["2005-12-13",412.50,418.00,411.64,417.49,8157000,417.49],
+["2005-12-12",414.63,415.21,409.95,412.61,6950100,412.61],
+["2005-12-09",415.00,415.78,408.56,409.20,7643400,409.20],
+["2005-12-08",405.30,410.65,402.64,410.65,8910100,410.65],
+["2005-12-07",406.16,406.70,399.01,404.22,11665900,404.22],
+["2005-12-06",408.70,416.41,401.70,404.54,15114700,404.54],
+["2005-12-05",417.00,417.50,404.28,405.85,10289400,405.85],
+["2005-12-02",416.94,419.53,413.86,417.70,7543500,417.70],
+["2005-12-01",409.20,415.44,408.29,414.09,9744900,414.09],
+["2005-11-30",404.26,408.45,395.56,404.91,15596600,404.91],
+["2005-11-29",424.46,426.40,402.14,403.54,21495800,403.54],
+["2005-11-28",429.82,431.24,422.44,423.48,11008400,423.48],
+["2005-11-25",425.78,428.75,425.30,428.62,4840100,428.62],
+["2005-11-23",417.04,424.72,415.78,422.86,10085000,422.86],
+["2005-11-22",408.65,417.31,406.23,416.47,9596000,416.47],
+["2005-11-21",399.17,409.98,393.49,409.36,10335100,409.36],
+["2005-11-18",403.49,404.50,399.85,400.21,7025700,400.21],
+["2005-11-17",401.80,403.81,399.53,403.45,9212200,403.45],
+["2005-11-16",396.20,398.85,394.11,398.15,8695200,398.15],
+["2005-11-15",394.38,397.00,390.95,392.80,8624900,392.80],
+["2005-11-14",392.12,398.22,391.53,396.97,7807900,396.97],
+["2005-11-11",395.12,396.90,388.85,390.40,7063900,390.40],
+["2005-11-10",378.36,391.35,377.43,391.10,9128700,391.10],
+["2005-11-09",386.67,388.29,378.03,379.15,10466900,379.15],
+["2005-11-08",394.25,395.59,388.58,389.90,7897500,389.90],
+["2005-11-07",395.10,397.47,392.15,395.03,9591500,395.03],
+["2005-11-04",389.98,391.79,385.45,390.43,8824900,390.43],
+["2005-11-03",382.41,386.58,381.38,385.95,7448400,385.95],
+["2005-11-02",381.70,385.00,377.17,379.68,10565400,379.68],
+["2005-11-01",371.86,383.90,369.01,379.38,16356100,379.38],
+["2005-10-31",360.24,374.75,359.51,372.14,14342900,372.14],
+["2005-10-28",355.27,358.95,355.02,358.17,5903500,358.17],
+["2005-10-27",356.60,357.09,351.68,353.06,5134400,353.06],
+["2005-10-26",346.28,356.00,346.19,355.44,8907500,355.44],
+["2005-10-25",345.78,347.40,342.86,346.91,6878300,346.91],
+["2005-10-24",343.37,349.30,342.19,348.65,9431700,348.65],
+["2005-10-21",345.80,346.43,333.00,339.90,22892400,339.90],
+["2005-10-20",309.99,311.13,301.21,303.20,13911700,303.20],
+["2005-10-19",304.00,309.87,303.96,308.70,7010700,308.70],
+["2005-10-18",304.96,307.96,302.74,303.28,7077800,303.28],
+["2005-10-17",297.50,305.20,294.56,305.00,7566700,305.00],
+["2005-10-14",299.90,300.23,292.54,296.14,8519100,296.14],
+["2005-10-13",302.00,302.00,290.68,297.44,10567700,297.44],
+["2005-10-12",305.20,307.19,299.00,300.97,9306200,300.97],
+["2005-10-11",310.61,312.65,304.86,306.10,8542600,306.10],
+["2005-10-10",313.31,314.82,309.15,310.65,5572200,310.65],
+["2005-10-07",314.79,316.67,310.54,312.99,6770300,312.99],
+["2005-10-06",314.14,314.48,310.09,312.75,7993800,312.75],
+["2005-10-05",312.69,314.90,308.00,310.71,8328400,310.71],
+["2005-10-04",319.95,321.28,310.74,311.00,9144300,311.00],
+["2005-10-03",313.63,320.11,312.79,318.68,9160300,318.68],
+["2005-09-30",314.22,317.50,312.29,316.46,9151300,316.46],
+["2005-09-29",306.68,310.72,306.08,309.62,5613800,309.62],
+["2005-09-28",314.22,315.10,305.60,306.00,7997400,306.00],
+["2005-09-27",314.95,318.41,313.38,313.94,6873100,313.94],
+["2005-09-26",319.50,320.95,312.56,314.28,9894400,314.28],
+["2005-09-23",313.00,317.21,312.59,315.36,8483800,315.36],
+["2005-09-22",311.50,319.22,310.17,311.37,13006400,311.37],
+["2005-09-21",308.41,313.76,305.96,311.90,10119700,311.90],
+["2005-09-20",306.15,311.30,305.23,307.91,9351000,307.91],
+["2005-09-19",301.00,306.00,300.71,303.79,5761900,303.79],
+["2005-09-16",304.02,304.50,299.87,300.20,7579800,300.20],
+["2005-09-15",299.52,306.75,297.91,302.62,15466200,302.62],
+["2005-09-14",308.73,313.28,300.30,303.00,11275800,303.00],
+["2005-09-13",309.00,315.53,306.17,311.68,10299900,311.68],
+["2005-09-12",301.75,311.42,301.00,309.74,10386500,309.74],
+["2005-09-09",297.28,299.10,296.56,299.09,4390500,299.09],
+["2005-09-08",294.83,299.28,293.36,295.39,6613300,295.39],
+["2005-09-07",285.89,295.50,285.28,294.87,7499500,294.87],
+["2005-09-06",289.00,289.39,286.80,287.11,4212300,287.11],
+["2005-09-02",286.51,289.99,286.44,288.45,3434500,288.45],
+["2005-09-01",285.91,287.50,285.00,286.25,2742100,286.25],
+["2005-08-31",288.23,288.50,284.36,286.00,5034000,286.00],
+["2005-08-30",287.39,289.51,285.88,287.27,4792000,287.27],
+["2005-08-29",282.24,289.12,282.24,288.45,5903000,288.45],
+["2005-08-26",283.48,285.02,282.66,283.58,3755300,283.58],
+["2005-08-25",282.55,284.00,279.97,282.59,4376600,282.59],
+["2005-08-24",277.57,284.75,276.45,282.57,8593100,282.57],
+["2005-08-23",276.16,279.74,274.12,279.58,5821700,279.58],
+["2005-08-22",281.24,281.47,273.35,274.01,6813000,274.01],
+["2005-08-19",280.99,281.45,279.62,280.00,5542900,280.00],
+["2005-08-18",275.91,280.50,275.00,279.99,11872800,279.99],
+["2005-08-17",285.51,286.57,284.00,285.10,3883300,285.10],
+["2005-08-16",284.88,287.79,283.34,285.65,7109200,285.65],
+["2005-08-15",289.80,292.77,283.77,284.00,8174700,284.00],
+["2005-08-12",283.36,290.20,281.64,289.72,6585900,289.72],
+["2005-08-11",285.89,286.58,280.62,284.05,7514900,284.05],
+["2005-08-10",291.30,292.33,284.88,285.68,6879000,285.68],
+["2005-08-09",291.96,292.68,288.51,291.57,5779300,291.57],
+["2005-08-08",293.60,295.65,290.49,291.25,4481800,291.25],
+["2005-08-05",297.50,298.51,291.31,292.35,5939700,292.35],
+["2005-08-04",295.55,299.00,295.25,297.73,5236500,297.73],
+["2005-08-03",298.00,299.72,295.60,297.30,5930600,297.30],
+["2005-08-02",291.60,299.52,291.12,299.19,7290200,299.19],
+["2005-08-01",288.12,292.50,288.10,291.61,5662400,291.61],
+["2005-07-29",292.14,292.84,286.99,287.76,8363300,287.76],
+["2005-07-28",297.41,297.41,293.28,293.50,5925600,293.50],
+["2005-07-27",297.74,298.23,292.40,296.93,7217900,296.93],
+["2005-07-26",295.01,298.00,292.09,296.09,9816900,296.09],
+["2005-07-25",302.39,303.29,294.96,295.85,9658800,295.85],
+["2005-07-22",306.37,309.25,296.33,302.40,23386800,302.40],
+["2005-07-21",314.05,317.80,311.21,313.94,19789400,313.94],
+["2005-07-20",305.57,312.61,301.80,312.00,14310400,312.00],
+["2005-07-19",302.10,310.35,301.80,309.90,12621400,309.90],
+["2005-07-18",300.00,301.90,297.75,299.54,6207800,299.54],
+["2005-07-15",301.24,303.40,299.78,301.19,8438400,301.19],
+["2005-07-14",305.34,306.75,300.07,300.89,10667700,300.89],
+["2005-07-13",292.51,299.24,292.10,298.86,11437900,298.86],
+["2005-07-12",293.39,294.40,290.93,291.78,5864900,291.78],
+["2005-07-11",296.40,296.60,291.02,293.35,8390300,293.35],
+["2005-07-08",296.25,297.50,294.05,296.23,7457600,296.23],
+["2005-07-07",289.39,295.80,288.51,295.54,10672100,295.54],
+["2005-07-06",297.30,297.60,291.38,291.52,8000300,291.52],
+["2005-07-05",292.10,295.98,290.23,295.71,7494000,295.71],
+["2005-07-01",295.04,296.24,289.22,291.25,9227600,291.25],
+["2005-06-30",294.34,298.93,291.04,294.15,15094400,294.15],
+["2005-06-29",302.50,304.38,292.15,292.72,18298700,292.72],
+["2005-06-28",306.28,309.25,302.00,302.00,19036500,302.00],
+["2005-06-27",298.90,304.47,293.86,304.10,17802900,304.10],
+["2005-06-24",290.90,298.00,289.58,297.25,17771200,297.25],
+["2005-06-23",288.00,294.81,286.50,289.71,14056400,289.71],
+["2005-06-22",289.67,292.32,288.67,289.30,10474000,289.30],
+["2005-06-21",288.07,290.30,284.97,287.84,15132300,287.84],
+["2005-06-20",276.09,287.67,271.73,286.70,21024700,286.70],
+["2005-06-17",279.00,280.30,275.90,280.30,10434400,280.30],
+["2005-06-16",274.26,278.30,273.07,277.44,12462400,277.44],
+["2005-06-15",275.00,277.30,267.43,274.80,20883100,274.80],
+["2005-06-14",278.59,281.24,277.75,278.35,10091900,278.35],
+["2005-06-13",279.82,284.19,276.52,282.75,12803200,282.75],
+["2005-06-10",286.99,287.28,280.02,282.50,12696600,282.50],
+["2005-06-09",284.72,288.50,280.56,286.31,16441100,286.31],
+["2005-06-08",292.85,293.19,278.00,279.56,25700900,279.56],
+["2005-06-07",297.10,299.59,290.30,293.12,24323000,293.12],
+["2005-06-06",282.39,293.75,281.83,290.94,22525900,290.94],
+["2005-06-03",286.79,289.30,277.41,280.26,18782300,280.26],
+["2005-06-02",288.73,289.78,284.60,287.90,17974100,287.90],
+["2005-06-01",283.20,292.89,282.02,288.00,35191700,288.00],
+["2005-05-31",269.43,278.40,269.37,277.27,22236800,277.27],
+["2005-05-27",260.46,266.05,259.25,266.00,12184100,266.00],
+["2005-05-26",260.96,263.76,258.30,259.20,13546600,259.20],
+["2005-05-25",252.73,260.98,250.63,260.81,18057900,260.81],
+["2005-05-24",256.96,265.44,253.50,256.00,29043100,256.00],
+["2005-05-23",243.16,258.10,242.71,255.45,21388300,255.45],
+["2005-05-20",241.21,241.67,239.65,241.61,8163500,241.61],
+["2005-05-19",240.34,241.17,238.27,239.18,9716500,239.18],
+["2005-05-18",233.61,239.97,233.52,239.16,12312000,239.16],
+["2005-05-17",230.56,233.45,230.20,233.13,7808900,233.13],
+["2005-05-16",229.68,231.62,228.57,231.05,5681400,231.05],
+["2005-05-13",229.18,231.09,227.32,229.24,7415500,229.24],
+["2005-05-12",230.81,232.23,228.20,228.72,8948200,228.72],
+["2005-05-11",228.97,231.98,227.93,231.29,11478800,231.29],
+["2005-05-10",225.47,227.80,224.72,227.80,6345800,227.80],
+["2005-05-09",228.00,228.50,225.43,226.02,5536800,226.02],
+["2005-05-06",228.40,229.25,226.47,228.02,6763900,228.02],
+["2005-05-05",228.62,228.62,225.88,226.98,7509600,226.98],
+["2005-05-04",227.23,229.88,227.00,228.50,12083500,228.50],
+["2005-05-03",221.85,228.15,221.32,226.19,17780200,226.19],
+["2005-05-02",222.05,223.70,220.21,222.29,9767400,222.29],
+["2005-04-29",221.91,222.25,217.82,220.00,9170200,220.00],
+["2005-04-28",219.50,222.08,217.71,219.45,8682800,219.45],
+["2005-04-27",217.99,220.85,216.74,219.78,10264800,219.78],
+["2005-04-26",220.22,222.00,218.29,218.75,17272000,218.75],
+["2005-04-25",217.82,224.74,217.52,223.53,19840000,223.53],
+["2005-04-22",222.90,224.00,214.26,215.81,33205100,215.81],
+["2005-04-21",200.42,205.00,199.32,204.22,17751900,204.22],
+["2005-04-20",198.58,200.50,195.91,198.10,15451500,198.10],
+["2005-04-19",189.33,192.00,188.03,191.40,8430000,191.40],
+["2005-04-18",184.58,187.88,183.49,186.97,6550300,186.97],
+["2005-04-15",190.10,190.34,184.66,185.00,11577400,185.00],
+["2005-04-14",193.27,194.36,190.10,191.45,6152700,191.45],
+["2005-04-13",193.47,194.32,189.73,192.93,6555800,192.93],
+["2005-04-12",193.00,194.42,189.41,193.96,7319600,193.96],
+["2005-04-11",193.09,194.80,192.32,193.23,5410500,193.23],
+["2005-04-08",193.69,195.10,191.45,192.05,5116600,192.05],
+["2005-04-07",188.78,194.62,188.64,193.76,9692200,193.76],
+["2005-04-06",189.24,189.65,187.58,189.22,5252600,189.22],
+["2005-04-05",187.73,190.26,187.57,188.57,8736700,188.57],
+["2005-04-04",179.95,185.32,179.84,185.29,8076400,185.29],
+["2005-04-01",181.76,182.95,179.99,180.04,6182000,180.04],
+["2005-03-31",177.95,181.39,177.64,180.51,6768600,180.51],
+["2005-03-30",180.64,181.45,179.60,180.45,6236100,180.45],
+["2005-03-29",181.05,183.28,178.07,179.57,6473000,179.57],
+["2005-03-28",181.68,184.80,180.95,181.42,8738000,181.42],
+["2005-03-24",180.70,180.86,179.20,179.25,3705200,179.25],
+["2005-03-23",177.97,180.24,177.97,178.98,4845000,178.98],
+["2005-03-22",181.18,181.94,177.85,178.60,5631700,178.60],
+["2005-03-21",179.27,182.17,177.25,180.88,7483700,180.88],
+["2005-03-18",178.81,180.40,178.31,180.04,7090000,180.04],
+["2005-03-17",177.13,179.64,175.80,179.29,8260600,179.29],
+["2005-03-16",176.70,178.61,175.01,175.60,7106300,175.60],
+["2005-03-15",175.30,180.00,174.21,178.61,10422100,178.61],
+["2005-03-14",178.33,178.40,172.57,174.99,11146600,174.99],
+["2005-03-11",180.44,180.95,177.15,177.80,8028300,177.80],
+["2005-03-10",181.01,181.20,177.40,179.98,10960500,179.98],
+["2005-03-09",184.21,184.65,180.16,181.35,11360400,181.35],
+["2005-03-08",189.10,189.85,184.97,185.20,8046100,185.20],
+["2005-03-07",187.78,189.60,187.03,188.81,8667400,188.81],
+["2005-03-04",186.70,187.25,185.07,185.90,6774100,185.90],
+["2005-03-03",186.13,187.75,184.31,187.01,7608600,187.01],
+["2005-03-02",185.95,187.67,184.36,185.18,7285500,185.18],
+["2005-03-01",189.29,189.75,182.00,186.06,9311200,186.06],
+["2005-02-28",186.00,189.87,185.85,187.99,7818400,187.99],
+["2005-02-25",189.15,189.92,185.51,185.87,9973500,185.87],
+["2005-02-24",183.37,189.85,182.23,188.89,25814300,188.89],
+["2005-02-23",193.30,194.48,188.66,193.95,15586000,193.95],
+["2005-02-22",196.50,198.90,190.39,191.37,13483700,191.37],
+["2005-02-18",198.51,198.84,196.66,197.95,8485900,197.95],
+["2005-02-17",197.83,199.75,196.81,197.90,10414400,197.90],
+["2005-02-16",194.70,199.33,194.30,198.41,16532300,198.41],
+["2005-02-15",193.60,199.84,193.08,195.23,25782800,195.23],
+["2005-02-14",182.85,193.08,181.00,192.99,38562200,192.99],
+["2005-02-11",186.66,192.32,186.07,187.40,13116000,187.40],
+["2005-02-10",191.97,192.21,185.25,187.98,18982700,187.98],
+["2005-02-09",200.76,201.60,189.46,191.58,17171500,191.58],
+["2005-02-08",196.96,200.02,194.53,198.64,11480000,198.64],
+["2005-02-07",205.26,206.40,195.51,196.03,12960400,196.03],
+["2005-02-04",206.47,207.75,202.60,204.36,14819300,204.36],
+["2005-02-03",205.99,213.37,205.81,210.86,12988100,210.86],
+["2005-02-02",215.55,216.80,203.66,205.96,32799300,205.96],
+["2005-02-01",194.38,196.66,190.63,191.90,18839000,191.90],
+["2005-01-31",193.69,196.36,191.72,195.62,9596700,195.62],
+["2005-01-28",190.02,194.70,186.34,190.34,12208200,190.34],
+["2005-01-27",188.76,188.86,185.20,188.08,6627400,188.08],
+["2005-01-26",179.27,189.41,179.15,189.24,12307900,189.24],
+["2005-01-25",181.94,182.24,176.29,177.12,10659200,177.12],
+["2005-01-24",188.69,189.33,180.32,180.72,14022700,180.72],
+["2005-01-21",194.54,195.36,188.12,188.28,9258400,188.28],
+["2005-01-20",192.50,196.25,192.00,193.92,9001600,193.92],
+["2005-01-19",204.65,205.30,196.71,197.30,11257700,197.30],
+["2005-01-18",200.97,205.02,198.66,203.90,13172600,203.90],
+["2005-01-14",196.00,200.01,194.13,199.97,9640300,199.97],
+["2005-01-13",195.38,197.39,194.05,195.33,6849400,195.33],
+["2005-01-12",194.33,195.93,190.50,195.38,8177800,195.38],
+["2005-01-11",195.62,197.71,193.18,193.54,6958700,193.54],
+["2005-01-10",194.50,198.10,191.83,195.06,7539600,195.06],
+["2005-01-07",190.64,194.25,188.78,193.85,9662900,193.85],
+["2005-01-06",195.08,195.90,187.72,188.55,10387100,188.55],
+["2005-01-05",193.45,196.90,192.23,193.51,8236600,193.51],
+["2005-01-04",201.40,202.93,193.48,194.50,13755900,194.50],
+["2005-01-03",197.40,203.64,195.46,202.71,15844200,202.71],
+["2004-12-31",199.23,199.88,192.56,192.79,7668500,192.79],
+["2004-12-30",192.97,198.23,191.85,197.60,5904300,197.60],
+["2004-12-29",191.78,193.52,191.78,192.90,2678100,192.90],
+["2004-12-28",192.11,193.55,191.01,192.76,4145800,192.76],
+["2004-12-27",189.15,193.30,189.10,191.91,6104100,191.91],
+["2004-12-23",187.45,188.60,186.00,187.90,3614600,187.90],
+["2004-12-22",183.90,186.85,183.01,186.30,3907000,186.30],
+["2004-12-21",186.31,187.88,183.40,183.75,5516300,183.75],
+["2004-12-20",182.00,188.46,181.87,185.02,9834500,185.02],
+["2004-12-17",176.76,180.50,176.55,180.08,7386200,180.08],
+["2004-12-16",176.95,180.49,175.95,176.47,8572800,176.47],
+["2004-12-15",177.99,180.69,176.66,179.78,11471000,179.78],
+["2004-12-14",171.00,178.82,169.60,178.69,11088400,178.69],
+["2004-12-13",172.17,173.18,169.45,170.45,4818600,170.45],
+["2004-12-10",173.43,174.88,171.29,171.65,4317200,171.65],
+["2004-12-09",170.25,173.50,168.47,173.43,7654000,173.43],
+["2004-12-08",170.35,173.68,168.73,169.98,7541800,169.98],
+["2004-12-07",176.00,176.20,170.55,171.43,6870900,171.43],
+["2004-12-06",179.13,180.70,176.02,176.29,6254000,176.29],
+["2004-12-03",179.95,181.06,177.60,180.40,5869200,180.40],
+["2004-12-02",179.90,181.51,178.55,179.40,6260900,179.40],
+["2004-12-01",181.95,182.50,179.55,179.96,7864100,179.96],
+["2004-11-30",180.71,183.00,180.25,181.98,7700000,181.98],
+["2004-11-29",180.36,182.95,177.51,181.05,10666600,181.05],
+["2004-11-26",175.80,180.03,175.32,179.39,6480100,179.39],
+["2004-11-24",174.82,177.21,172.51,174.76,15281000,174.76],
+["2004-11-23",167.97,170.83,166.50,167.52,12413300,167.52],
+["2004-11-22",164.47,169.50,161.31,165.10,12368200,165.10],
+["2004-11-19",169.10,169.98,166.52,169.40,8769300,169.40],
+["2004-11-18",170.29,174.42,165.73,167.54,16629600,167.54],
+["2004-11-17",169.02,177.50,169.00,172.50,18132900,172.50],
+["2004-11-16",177.50,179.47,170.83,172.54,20917400,172.54],
+["2004-11-15",180.45,188.32,178.75,184.87,11901500,184.87],
+["2004-11-12",185.23,189.80,177.40,182.00,16746100,182.00],
+["2004-11-11",169.13,183.75,167.57,183.02,14985500,183.02],
+["2004-11-10",170.67,172.52,166.33,167.86,10644000,167.86],
+["2004-11-09",174.10,175.20,165.27,168.70,11064200,168.70],
+["2004-11-08",170.93,175.44,169.40,172.55,11191800,172.55],
+["2004-11-05",181.98,182.30,168.55,169.35,19833100,169.35],
+["2004-11-04",188.44,190.40,183.35,184.70,14409600,184.70],
+["2004-11-03",198.18,201.60,190.75,191.67,13888700,191.67],
+["2004-11-02",198.78,199.25,193.34,194.87,11346300,194.87],
+["2004-11-01",193.55,197.67,191.27,196.03,12224900,196.03],
+["2004-10-29",198.89,199.95,190.60,190.64,21162500,190.64],
+["2004-10-28",186.68,194.39,185.60,193.30,14846800,193.30],
+["2004-10-27",182.72,189.52,181.77,185.97,13356500,185.97],
+["2004-10-26",186.34,192.64,180.00,181.80,22307100,181.80],
+["2004-10-25",176.40,194.43,172.55,187.40,32764200,187.40],
+["2004-10-22",170.54,180.17,164.08,172.43,36891900,172.43],
+["2004-10-21",144.40,150.13,141.62,149.38,14589500,149.38],
+["2004-10-20",148.03,148.99,139.60,140.49,11372700,140.49],
+["2004-10-19",150.50,152.40,147.35,147.94,9064000,147.94],
+["2004-10-18",143.20,149.20,141.21,149.16,7025200,149.16],
+["2004-10-15",144.93,145.50,141.95,144.11,6604000,144.11],
+["2004-10-14",141.01,142.38,138.56,142.00,5226300,142.00],
+["2004-10-13",143.32,143.55,140.08,140.90,9893000,140.90],
+["2004-10-12",134.44,137.61,133.40,137.40,5838600,137.40],
+["2004-10-11",137.00,138.86,133.85,135.26,5241300,135.26],
+["2004-10-08",138.72,139.68,137.02,137.73,5540300,137.73],
+["2004-10-07",136.92,139.88,136.55,138.85,7064600,138.85],
+["2004-10-06",137.55,138.45,136.00,137.08,6697400,137.08],
+["2004-10-05",134.66,138.53,132.24,138.37,7494100,138.37],
+["2004-10-04",135.25,136.87,134.03,135.06,6517900,135.06],
+["2004-10-01",130.80,134.24,128.90,132.58,7570000,132.58],
+["2004-09-30",129.90,132.30,129.00,129.60,6885900,129.60],
+["2004-09-29",126.70,135.02,126.23,131.08,15273500,131.08],
+["2004-09-28",121.30,127.40,120.21,126.86,8473000,126.86],
+["2004-09-27",119.56,120.88,117.80,118.26,3536600,118.26],
+["2004-09-24",120.94,124.10,119.76,119.83,4566300,119.83],
+["2004-09-23",118.84,122.63,117.02,120.82,4272100,120.82],
+["2004-09-22",117.40,119.67,116.81,118.38,3794400,118.38],
+["2004-09-21",119.81,120.42,117.51,117.84,3618000,117.84],
+["2004-09-20",116.95,121.60,116.77,119.36,5319700,119.36],
+["2004-09-17",114.42,117.49,113.55,117.49,4741000,117.49],
+["2004-09-16",112.34,115.80,111.65,113.97,4637800,113.97],
+["2004-09-15",110.56,114.23,110.20,112.00,5361900,112.00],
+["2004-09-14",107.45,112.00,106.79,111.49,5419900,111.49],
+["2004-09-13",106.63,108.41,106.46,107.50,3926000,107.50],
+["2004-09-10",101.60,106.56,101.30,105.33,4353800,105.33],
+["2004-09-09",102.53,102.71,101.00,102.31,2032900,102.31],
+["2004-09-08",100.74,103.03,100.50,102.30,2495300,102.30],
+["2004-09-07",101.01,102.00,99.61,101.58,2926700,101.58],
+["2004-09-03",100.95,101.74,99.32,100.01,2578800,100.01],
+["2004-09-02",99.19,102.37,98.94,101.51,7566900,101.51],
+["2004-09-01",102.70,102.97,99.67,100.25,4573700,100.25],
+["2004-08-31",102.30,103.71,102.16,102.37,2461400,102.37],
+["2004-08-30",105.28,105.49,102.01,102.01,2601000,102.01],
+["2004-08-27",108.10,108.62,105.69,106.15,3109000,106.15],
+["2004-08-26",104.95,107.95,104.66,107.91,3551000,107.91],
+["2004-08-25",104.96,108.00,103.88,106.00,4598900,106.00],
+["2004-08-24",111.24,111.60,103.57,104.87,7631300,104.87],
+["2004-08-23",110.75,113.48,109.05,109.40,9137200,109.40],
+["2004-08-20",101.01,109.08,100.50,108.31,11428600,108.31],
+["2004-08-19",100.00,104.06,95.96,100.34,22351900,100.34]
+]; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/yahooData.min.js b/wqflask/wqflask/static/packages/jqplot/examples/yahooData.min.js
new file mode 100644
index 00000000..11da48a8
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/yahooData.min.js
@@ -0,0 +1 @@
+var yahoo=[["2011-10-18",580.19,592.56,577.4,590.51,3800800,590.51],["2011-10-17",583.72,591.83,578,582.41,4008200,582.41],["2011-10-14",599.47,599.6,587.57,591.68,8529900,591.68],["2011-10-13",550.03,559,548.02,558.99,5639600,558.99],["2011-10-12",548.13,555.23,544.63,548.5,3177800,548.5],["2011-10-11",533.46,546.8,533.46,543.18,2853400,543.18],["2011-10-10",525.18,537.47,523.2,537.17,2322200,537.17],["2011-10-07",516.83,520.5,510.3,515.12,2855900,515.12],["2011-10-06",507.5,515.23,502.6,514.71,3424300,514.71],["2011-10-05",496.35,507.8,480.77,504.7,4534100,504.7],["2011-10-04",490.03,503.44,480.6,501.9,4158800,501.9],["2011-10-03",509.85,512,495,495.52,4474400,495.52],["2011-09-30",520.21,524,514.38,515.04,2723600,515.04],["2011-09-29",536.04,537.3,519.41,527.5,2906600,527.5],["2011-09-28",541.5,544.02,527.7,528.84,2263300,528.84],["2011-09-27",538.2,547.05,536.05,539.34,3010900,539.34],["2011-09-26",527.25,532.93,513.25,531.89,2634200,531.89],["2011-09-23",516.56,526.42,514.5,525.51,2777300,525.51],["2011-09-22",526.25,528.78,514,520.66,4400300,520.66],["2011-09-21",547.69,555,538.86,539.2,2514300,539.2],["2011-09-20",549.4,558.52,542.67,546.63,2779100,546.63],["2011-09-19",540.35,549.9,535.38,546.67,2468400,546.67],["2011-09-16",544.8,546.84,543.14,546.68,3534300,546.68],["2011-09-15",535.5,544.98,534.56,542.56,2960800,542.56],["2011-09-14",532.59,536.95,525.82,532.07,2694400,532.07],["2011-09-13",532,533.88,523.4,529.52,2354200,529.52],["2011-09-12",517.96,531.99,517.5,530.12,2670400,530.12],["2011-09-09",531.4,534.65,521.19,524.85,3268800,524.85],["2011-09-08",533.8,539.1,531.9,534.96,2380500,534.96],["2011-09-07",530.45,535.94,527.4,534.03,2755800,534.03],["2011-09-06",510.8,522.76,510.5,522.18,2715800,522.18],["2011-09-02",524.47,527.92,520.73,524.84,2401200,524.84],["2011-09-01",540.75,543.83,531.22,532.5,2415500,532.5],["2011-08-31",544.74,546.3,536,540.96,2693300,540.96],["2011-08-30",538.19,542.99,530.81,540.7,2989000,540.7],["2011-08-29",534.56,539.45,533.56,539.08,2335800,539.08],["2011-08-26",519.99,530.45,513.14,526.86,3596300,526.86],["2011-08-25",530.38,537.27,518.3,520.04,3293000,520.04],["2011-08-24",519.33,530,517.23,523.29,3594500,523.29],["2011-08-23",503.5,521.41,499.06,518.82,4346800,518.82],["2011-08-22",504,507,494.53,498.17,4905900,498.17],["2011-08-19",499.34,514.87,490.86,490.92,5410000,490.92],["2011-08-18",523.47,524.89,500.49,504.88,6290700,504.88],["2011-08-17",540.03,543.69,530.77,533.15,4055000,533.15],["2011-08-16",552.43,552.44,530.3,539,6939400,539],["2011-08-15",553.43,564.99,546.05,557.23,7144900,557.23],["2011-08-12",569.5,570.5,560.4,563.77,3154300,563.77],["2011-08-11",553.82,568.5,548.41,562.13,4830600,562.13],["2011-08-10",561.38,564.12,547.73,549.01,5369600,549.01],["2011-08-09",561,574.61,541.01,573.41,6469700,573.41],["2011-08-08",562.98,569,544.35,546.02,7496600,546.02],["2011-08-05",582.54,590,562,579.04,5929100,579.04],["2011-08-04",594.5,598.85,577.47,577.52,4914600,577.52],["2011-08-03",594.27,603,583.63,601.17,3825700,601.17],["2011-08-02",606,609.67,591.57,592.4,3200600,592.4],["2011-08-01",611.22,615.5,599.18,606.77,3966100,606.77],["2011-07-29",604.23,614.96,603.69,603.69,4137400,603.69],["2011-07-28",605.19,615.98,603,610.94,3108400,610.94],["2011-07-27",617.18,620.95,604.75,607.22,3934400,607.22],["2011-07-26",618.05,627.5,617.22,622.52,2342900,622.52],["2011-07-25",613.36,625.41,613,618.98,3131600,618.98],["2011-07-22",605.39,619.5,604.27,618.23,3528200,618.23],["2011-07-21",594.03,608.06,594.01,606.99,3469500,606.99],["2011-07-20",602.18,602.83,595.35,595.35,2227800,595.35],["2011-07-19",596.14,604.68,595.53,602.55,2967500,602.55],["2011-07-18",592.49,602.05,592,594.94,4468300,594.94],["2011-07-15",597.5,600.25,588.16,597.62,13732100,597.62],["2011-07-14",539.12,542,526.73,528.94,6594400,528.94],["2011-07-13",537,544,536.48,538.26,2790200,538.26],["2011-07-12",528.16,539.42,526,534.01,2841200,534.01],["2011-07-11",528.18,535.98,525.5,527.28,2839300,527.28],["2011-07-08",532.95,537.65,527.27,531.99,4770200,531.99],["2011-07-07",541,550.68,535.88,546.6,3935500,546.6],["2011-07-06",533.5,538.51,533.04,535.36,2695600,535.36],["2011-07-05",525.3,535.4,525.3,532.44,3849200,532.44],["2011-07-01",506.74,521.18,506.38,521.03,3636700,521.03],["2011-06-30",501.99,506.67,501.5,506.38,2428400,506.38],["2011-06-29",496.54,500.25,492.38,497.57,2343000,497.57],["2011-06-28",484.02,496.21,484.02,493.65,2715100,493.65],["2011-06-27",474,488.4,473.6,482.8,3444700,482.8],["2011-06-24",480.68,480.75,473.02,474.88,3805600,474.88],["2011-06-23",482.13,482.86,473.73,480.22,4801700,480.22],["2011-06-22",491.45,492.35,486.73,487.01,2407100,487.01],["2011-06-21",487.19,493.94,484.73,493,2765400,493],["2011-06-20",485,486.23,479.23,484.58,3028600,484.58],["2011-06-17",506.18,506.69,484.8,485.02,5245400,485.02],["2011-06-16",502.81,506.57,496.67,500.37,2757000,500.37],["2011-06-15",505.03,508.35,500.61,502.95,2073300,502.95],["2011-06-14",508.15,514.08,506.99,508.37,2341500,508.37],["2011-06-13",510,510.2,502.17,504.73,2427300,504.73],["2011-06-10",514.08,516.69,509.29,509.51,2439900,509.51],["2011-06-09",520,520,515.64,516.73,1689100,516.73],["2011-06-08",516.53,521.24,515.78,519.17,1653400,519.17],["2011-06-07",522.89,524.63,518.99,519.03,1907600,519.03],["2011-06-06",523.54,526.82,519.25,521.06,1942100,521.06],["2011-06-03",522,527.6,521.5,523.08,1748500,523.08],["2011-06-02",527.57,530.3,522.48,528.06,2204500,528.06],["2011-06-01",528.04,533.2,525.31,525.6,2955900,525.6],["2011-05-31",525,529.05,523.5,529.02,2687300,529.02],["2011-05-27",518.48,521.79,516.3,520.9,1745800,520.9],["2011-05-26",517.7,522.12,515,518.13,2118500,518.13],["2011-05-25",517.33,522.77,517.25,519.67,1301600,519.67],["2011-05-24",520.37,523.96,518.15,518.26,1888400,518.26],["2011-05-23",516.6,520,513.4,518.39,2252700,518.39],["2011-05-20",531.8,531.99,523.13,524.03,2317500,524.03],["2011-05-19",532.73,536.54,529.72,531.25,2468700,531.25],["2011-05-18",529.54,530.33,525.7,529.81,1953200,529.81],["2011-05-17",515.43,531.22,515.03,530.46,3303600,530.46],["2011-05-16",526.31,527.27,516.4,518.42,2958200,518.42],["2011-05-13",534.61,535.92,529.05,529.55,2108700,529.55],["2011-05-12",535.24,536.94,530.91,535.05,1400000,535.05],["2011-05-11",540.14,543.55,533.69,535.45,2338800,535.45],["2011-05-10",540,544.43,537.54,542.66,2042900,542.66],["2011-05-09",535,538.49,531.1,537.68,1948700,537.68],["2011-05-06",538.15,541.46,535.18,535.3,2056100,535.3],["2011-05-05",533.86,539.42,531.5,534.27,1997800,534.27],["2011-05-04",535.17,539,533.02,535.79,2117000,535.79],["2011-05-03",537.13,542.01,529.63,533.89,2081500,533.89],["2011-05-02",545.7,545.73,537.12,538.56,2133700,538.56],["2011-04-29",540,544.1,538.51,544.1,4200000,544.1],["2011-04-28",538.06,539.25,534.08,537.97,2037400,537.97],["2011-04-27",538,538.11,534.35,537.76,2298400,537.76],["2011-04-26",526.52,537.44,525.21,532.82,3535400,532.82],["2011-04-25",525.25,527,522.01,525.05,1630800,525.05],["2011-04-21",527.49,528.28,522.39,525.1,2470100,525.1],["2011-04-20",525.9,526.82,521.39,525.73,3060000,525.73],["2011-04-19",529.95,530.88,520.9,521.53,2684100,521.53],["2011-04-18",526.42,527.66,519,526.84,5039800,526.84],["2011-04-15",545.29,545.75,530.06,530.7,14043700,530.7],["2011-04-14",575.19,579.45,572.1,578.51,5456300,578.51],["2011-04-13",575.51,577.6,571.75,576.28,2069400,576.28],["2011-04-12",575,576.91,568.05,570.61,2085600,570.61],["2011-04-11",576.2,578.1,573,577.37,1858200,577.37],["2011-04-08",584.89,584.89,578.06,578.16,1901800,578.16],["2011-04-07",575.73,580.64,574.19,580,2531500,580],["2011-04-06",572.18,575.16,568,574.18,2668300,574.18],["2011-04-05",581.08,581.49,565.68,569.09,6047500,569.09],["2011-04-04",593,594.74,583.1,587.68,2054500,587.68],["2011-04-01",588.76,595.19,588.76,591.8,2613200,591.8],["2011-03-31",583,588.16,581.74,586.76,2029400,586.76],["2011-03-30",584.38,585.5,580.58,581.84,1422300,581.84],["2011-03-29",576,581.89,573.01,581.73,1604800,581.73],["2011-03-28",582.07,584.99,574.71,575.36,2218400,575.36],["2011-03-25",586.88,586.91,579.24,579.74,2858400,579.74],["2011-03-24",585.43,588.39,578.8,586.89,2098700,586.89],["2011-03-23",575.19,582.45,572,582.16,1816200,582.16],["2011-03-22",577.27,579.23,572.51,577.32,1886900,577.32],["2011-03-21",570.22,579.8,569.02,576.5,3020900,576.5],["2011-03-18",564.64,567.99,559.74,561.06,3298600,561.06],["2011-03-17",564.48,569,560.54,561.36,2899300,561.36],["2011-03-16",568.01,569.79,551.28,557.1,3798500,557.1],["2011-03-15",557.5,571,555.5,569.56,4005600,569.56],["2011-03-14",572.8,578.29,568.02,569.99,2816100,569.99],["2011-03-11",578.22,580,573.33,576.71,3032000,576.71],["2011-03-10",585.44,586.62,579.45,580.3,3128100,580.3],["2011-03-09",591,594.51,585.75,591.77,2151000,591.77],["2011-03-08",592.93,597.98,590.2,592.31,2284900,592.31],["2011-03-07",600.55,603.69,587,591.66,3462700,591.66],["2011-03-04",608.33,608.98,600.2,600.62,3011000,600.62],["2011-03-03",606.38,611.49,605,609.56,1945300,609.56],["2011-03-02",599.8,606,595.19,600.79,2026700,600.79],["2011-03-01",617.78,619.22,599.3,600.76,3323200,600.76],["2011-02-28",610,616.49,608.01,613.4,2281500,613.4],["2011-02-25",611.86,614.72,609.5,610.04,1932400,610.04],["2011-02-24",611.39,613.09,601.35,608.82,2711700,608.82],["2011-02-23",610.33,614.7,604,611.32,2889600,611.32],["2011-02-22",620.03,624.93,607.77,610.21,3639900,610.21],["2011-02-18",626,631.18,624.18,630.08,3217900,630.08],["2011-02-17",621.25,627.25,620.28,625.26,1478800,625.26],["2011-02-16",625.63,626.5,622.1,624.22,1684000,624.22],["2011-02-15",627.32,630.09,623.1,624.15,2092000,624.15],["2011-02-14",623.34,629.64,620.04,628.15,2128000,628.15],["2011-02-11",613.79,625,613,624.5,2589900,624.5],["2011-02-10",613.9,617.5,611.56,616.44,2334400,616.44],["2011-02-09",616.87,619.45,612.34,616.5,1842500,616.5],["2011-02-08",614.93,619.63,614.51,618.38,1694900,618.38],["2011-02-07",610.16,618.39,609.21,614.29,1799600,614.29],["2011-02-04",610.15,611.44,606.61,610.98,1550800,610.98],["2011-02-03",609.48,611.45,606.13,610.15,1495100,610.15],["2011-02-02",611,614.34,607.53,612,1760700,612],["2011-02-01",604.49,613.35,603.11,611.04,2745300,611.04],["2011-01-31",603.6,604.47,595.55,600.36,2804900,600.36],["2011-01-28",619.07,620.36,599.76,600.99,4231100,600.99],["2011-01-27",617.89,619.7,613.25,616.79,2019200,616.79],["2011-01-26",620.33,622.49,615.28,616.5,2038100,616.5],["2011-01-25",608.2,620.69,606.52,619.91,3646800,619.91],["2011-01-24",607.57,612.49,601.23,611.08,4599200,611.08],["2011-01-21",639.58,641.73,611.36,611.83,8904400,611.83],["2011-01-20",632.21,634.08,623.29,626.77,5485800,626.77],["2011-01-19",642.12,642.96,629.66,631.75,3406100,631.75],["2011-01-18",626.06,641.99,625.27,639.63,3617000,639.63],["2011-01-14",617.4,624.27,617.08,624.18,2365600,624.18],["2011-01-13",616.97,619.67,614.16,616.69,1334000,616.69],["2011-01-12",619.35,619.35,614.77,616.87,1632700,616.87],["2011-01-11",617.71,618.8,614.5,616.01,1439300,616.01],["2011-01-10",614.8,615.39,608.56,614.21,1579200,614.21],["2011-01-07",615.91,618.25,610.13,616.44,2101200,616.44],["2011-01-06",610.68,618.43,610.05,613.5,2057800,613.5],["2011-01-05",600.07,610.33,600.05,609.07,2532300,609.07],["2011-01-04",605.62,606.18,600.12,602.12,1824500,602.12],["2011-01-03",596.48,605.59,596.48,604.35,2365200,604.35],["2010-12-31",596.74,598.42,592.03,593.97,1539300,593.97],["2010-12-30",598,601.33,597.39,598.86,989500,598.86],["2010-12-29",602,602.41,598.92,601,1019200,601],["2010-12-28",602.05,603.87,598.01,598.92,1064800,598.92],["2010-12-27",602.74,603.78,599.5,602.38,1208100,602.38],["2010-12-23",605.34,606,602.03,604.23,1110800,604.23],["2010-12-22",604,607,603.28,605.49,1207500,605.49],["2010-12-21",598.57,604.72,597.61,603.07,1879500,603.07],["2010-12-20",594.65,597.88,588.66,595.06,1973300,595.06],["2010-12-17",591,592.56,587.67,590.8,3087100,590.8],["2010-12-16",592.85,593.77,588.07,591.71,1596900,591.71],["2010-12-15",594.2,596.45,589.15,590.3,2167700,590.3],["2010-12-14",597.09,598.29,592.48,594.91,1643300,594.91],["2010-12-13",597.12,603,594.09,594.62,2398500,594.62],["2010-12-10",593.14,593.99,590.29,592.21,1704700,592.21],["2010-12-09",593.88,595.58,589,591.5,1868900,591.5],["2010-12-08",591.97,592.52,583.69,590.54,1756900,590.54],["2010-12-07",591.27,593,586,587.14,3042200,587.14],["2010-12-06",580.57,582,576.61,578.36,2093800,578.36],["2010-12-03",569.45,576.48,568,573,2631200,573],["2010-12-02",568.66,573.33,565.35,571.82,2547900,571.82],["2010-12-01",563,571.57,562.4,564.35,3754100,564.35],["2010-11-30",574.32,574.32,553.31,555.71,7117400,555.71],["2010-11-29",589.17,589.8,579.95,582.11,2859700,582.11],["2010-11-26",590.46,592.98,587,590,1311100,590],["2010-11-24",587.31,596.6,587.05,594.97,2396400,594.97],["2010-11-23",587.01,589.01,578.2,583.01,2162600,583.01],["2010-11-22",587.47,593.44,582.75,591.22,2186600,591.22],["2010-11-19",597,597.89,590.34,590.83,2297500,590.83],["2010-11-18",589,599.98,588.56,596.56,2590000,596.56],["2010-11-17",585,589.5,581.37,583.55,2442500,583.55],["2010-11-16",592.76,597.89,583.45,583.72,3307400,583.72],["2010-11-15",603.08,604,594.05,595.47,3478900,595.47],["2010-11-12",613.99,616.9,601.21,603.29,3393000,603.29],["2010-11-11",619.7,619.85,614.21,617.19,2261600,617.19],["2010-11-10",622.08,623,617.51,622.88,2497000,622.88],["2010-11-09",630,630.85,620.51,624.82,2237200,624.82],["2010-11-08",624.02,629.49,623.13,626.77,2101300,626.77],["2010-11-05",623.18,625.49,621.11,625.08,1765700,625.08],["2010-11-04",624.64,629.92,622.1,624.27,3570800,624.27],["2010-11-03",617.5,621.83,613.5,620.18,3380500,620.18],["2010-11-02",618.67,620,614.58,615.6,1997600,615.6],["2010-11-01",615.73,620.66,611.21,615,3087100,615],["2010-10-29",617.07,619,612.99,613.7,2278300,613.7],["2010-10-28",620.05,621,613.3,618.58,2184300,618.58],["2010-10-27",615.77,620,612.33,616.47,2241900,616.47],["2010-10-26",613.1,621.23,611.03,618.6,2512900,618.6],["2010-10-25",615.59,624.74,614.97,616.5,3158400,616.5],["2010-10-22",611.92,614.82,610.05,612.53,2256100,612.53],["2010-10-21",611.51,616,606,611.99,2920500,611.99],["2010-10-20",608.14,617.38,607.5,607.98,3525100,607.98],["2010-10-19",608.85,614.82,602.86,607.83,4587900,607.83],["2010-10-18",600.55,619.69,600.55,617.71,7098200,617.71],["2010-10-15",599.27,601.64,591.6,601.45,14824800,601.45],["2010-10-14",544.18,545.25,537.11,540.93,6634100,540.93],["2010-10-13",547,547.49,542.33,543.3,3055600,543.3],["2010-10-12",540.12,545.99,537.79,541.39,3753600,541.39],["2010-10-11",538.48,544.6,537.17,538.84,2626300,538.84],["2010-10-08",532.77,537.6,527.62,536.35,2859200,536.35],["2010-10-07",536.21,537.2,529.14,530.01,2395800,530.01],["2010-10-06",539.26,539.95,529.94,534.35,2762300,534.35],["2010-10-05",528.38,540,526.55,538.23,3507100,538.23],["2010-10-04",524.95,528.25,518.85,522.35,1940500,522.35],["2010-10-01",530,530.62,523,525.62,2225000,525.62],["2010-09-30",529.16,531.87,518.92,525.79,3244100,525.79],["2010-09-29",527.85,532.94,524.71,527.69,2172200,527.69],["2010-09-28",533.48,533.59,518.45,527.17,3654700,527.17],["2010-09-27",528.85,536.85,528.85,530.41,3107400,530.41],["2010-09-24",521.74,527.83,518.26,527.29,3356900,527.29],["2010-09-23",514.61,519.69,511.3,513.48,2317400,513.48],["2010-09-22",512.86,517.78,511.68,516,2537100,516],["2010-09-21",509.68,519.98,508.91,513.46,4466300,513.46],["2010-09-20",492.5,510.41,492.06,508.28,4403500,508.28],["2010-09-17",483.75,491.2,481.18,490.15,5641600,490.15],["2010-09-16",479.95,482.45,479.41,481.06,1969500,481.06],["2010-09-15",479.95,481.89,478.5,480.64,2402800,480.64],["2010-09-14",482.01,484.75,480.08,480.43,2216500,480.43],["2010-09-13",480.9,484.35,479.53,482.27,2241500,482.27],["2010-09-10",479.02,479.79,475.08,476.14,1974300,476.14],["2010-09-09",477.83,480.4,470.58,476.18,2430600,476.18],["2010-09-08",465.19,472.5,464.51,470.58,2401800,470.58],["2010-09-07",464.5,467.59,463.02,464.4,1709900,464.4],["2010-09-03",470.52,471.88,467.44,470.3,2540400,470.3],["2010-09-02",462.84,464.43,460.31,463.18,1684200,463.18],["2010-09-01",454.98,464.94,452.5,460.33,3228300,460.33],["2010-08-31",450.11,454.87,448,450.02,1946800,450.02],["2010-08-30",459.15,459.76,452.42,452.69,1231400,452.69],["2010-08-27",452.56,459.99,447.65,458.83,2312400,458.83],["2010-08-26",456.06,457.26,450.44,450.98,1777000,450.98],["2010-08-25",450,457.81,450,454.62,2592100,454.62],["2010-08-24",457.7,458.37,450.92,451.39,2762700,451.39],["2010-08-23",461.5,468.25,457.73,464.07,2986200,464.07],["2010-08-20",467.97,471.59,461.02,462.02,3917600,462.02],["2010-08-19",481.01,482.51,467.25,467.97,3925000,467.97],["2010-08-18",490.44,490.87,481.55,482.15,2686400,482.15],["2010-08-17",488.53,494.7,486.03,490.52,1890700,490.52],["2010-08-16",483.68,489.87,480.5,485.59,1305000,485.59],["2010-08-13",489,491.19,486.01,486.35,1934700,486.35],["2010-08-12",483.94,494.75,482.51,492.01,2204600,492.01],["2010-08-11",497.73,498,491.5,491.74,2223000,491.74],["2010-08-10",502.35,506,498.57,503.71,2074000,503.71],["2010-08-09",502.25,505.5,501.36,505.35,1872200,505.35],["2010-08-06",505.4,505.74,496.05,500.22,3319500,500.22],["2010-08-05",505.89,508.6,503.56,508.1,2420400,508.1],["2010-08-04",492.18,507,491.05,506.32,3812500,506.32],["2010-08-03",490.5,492.46,486.76,489.83,1802300,489.83],["2010-08-02",488.99,493.28,486.94,490.41,1858700,490.41],["2010-07-30",479.65,487.36,479.14,484.85,2144100,484.85],["2010-07-29",485.95,488.88,479.33,484.99,2675500,484.99],["2010-07-28",494.94,495.25,482.67,484.35,2496000,484.35],["2010-07-27",490.58,497.5,490.17,492.63,2451200,492.63],["2010-07-26",489.09,490.75,484.88,488.97,1995200,488.97],["2010-07-23",480.77,490.59,480.01,490.06,2264400,490.06],["2010-07-22",483.23,488.98,482.48,484.81,2147700,484.81],["2010-07-21",484,485.7,475.43,477.5,3279600,477.5],["2010-07-20",461.03,482.99,460.6,481.59,4054500,481.59],["2010-07-19",461.01,469.65,457.52,466.18,4550300,466.18],["2010-07-16",469.12,470.56,459.52,459.61,7824800,459.61],["2010-07-15",491.73,494.7,482.68,494.02,4858200,494.02],["2010-07-14",489.88,493.83,486.46,491.34,3118000,491.34],["2010-07-13",482.25,492.99,480.28,489.2,3976300,489.2],["2010-07-12",472.37,479.44,471.08,475.83,3334400,475.83],["2010-07-09",471.96,473.26,462.78,467.49,4331500,467.49],["2010-07-08",453.55,457.33,449.66,456.56,2668900,456.56],["2010-07-07",438.31,451.29,435.38,450.2,3129700,450.2],["2010-07-06",444,447.67,433.63,436.07,2560100,436.07],["2010-07-02",441.62,442.28,436,436.55,1936000,436.55],["2010-07-01",445.29,448.4,433.63,439.49,3513600,439.49],["2010-06-30",454.96,457.83,444.72,444.95,3603200,444.95],["2010-06-29",463.44,464.55,451.12,454.26,3502100,454.26],["2010-06-28",472.59,477.55,469.01,472.08,1762300,472.08],["2010-06-25",477.06,477.65,470.56,472.68,2245200,472.68],["2010-06-24",479.66,482.75,473.26,475.1,1893600,475.1],["2010-06-23",486.89,486.89,478.16,482.05,2029100,482.05],["2010-06-22",489.9,496.6,485.73,486.25,2219700,486.25],["2010-06-21",499.9,500.97,484.89,488.56,2983500,488.56],["2010-06-18",502.51,503.47,498.13,500.03,2872900,500.03],["2010-06-17",503.45,505.87,496.69,500.08,1977300,500.08],["2010-06-16",496.17,504,496.11,501.27,2289300,501.27],["2010-06-15",483.08,500.4,482.18,497.99,4259600,497.99],["2010-06-14",494.48,494.5,483.19,483.19,2040400,483.19],["2010-06-11",482.5,488.71,481.62,488.5,1781700,488.5],["2010-06-10",480.37,488.5,475.84,487.01,2577900,487.01],["2010-06-09",487.22,488.88,472,474.02,2729000,474.02],["2010-06-08",487.85,488.84,477.54,484.78,2685100,484.78],["2010-06-07",499.06,500.91,483.15,485.52,3632700,485.52],["2010-06-04",499.72,509.25,496.7,498.72,3920300,498.72],["2010-06-03",495.11,508,494.7,505.6,3650700,505.6],["2010-06-02",486.68,493.87,481.46,493.37,2540800,493.37],["2010-06-01",480.43,491.06,480.12,482.37,2666800,482.37],["2010-05-28",492.74,493.45,483,485.63,2894800,485.63],["2010-05-27",484.95,492.31,481.05,490.46,2809100,490.46],["2010-05-26",482.07,489.76,475,475.47,3475600,475.47],["2010-05-25",468.15,477.45,464.01,477.07,3017400,477.07],["2010-05-24",480.73,489.79,476.8,477.16,4345600,477.16],["2010-05-21",469.06,485,464.4,472.05,9690800,472.05],["2010-05-20",485.07,485.58,473.8,475.01,4913300,475.01],["2010-05-19",496.26,499.44,487.74,494.43,3445700,494.43],["2010-05-18",510,510.97,497.07,498.37,2825500,498.37],["2010-05-17",506.78,508.36,498.35,507.97,2793800,507.97],["2010-05-14",509.77,510.99,496.25,507.53,4116000,507.53],["2010-05-13",516.5,522,510.37,510.88,3325800,510.88],["2010-05-12",512.04,512.04,502,505.39,3851800,505.39],["2010-05-11",515.67,519.88,508.22,509.05,3322600,509.05],["2010-05-10",513.97,522.82,512.6,521.65,4128000,521.65],["2010-05-07",499.97,505.32,481.33,493.14,5089000,493.14],["2010-05-06",508.75,517.52,460,498.67,5000100,498.67],["2010-05-05",500.98,515.72,500.47,509.76,4582200,509.76],["2010-05-04",526.52,526.74,504.21,506.37,6076300,506.37],["2010-05-03",526.5,532.92,525.08,530.6,1857800,530.6],["2010-04-30",531.13,537.68,525.44,525.7,2435400,525.7],["2010-04-29",533.37,536.5,526.67,532,3058900,532],["2010-04-28",532.1,534.83,521.03,529.19,3406100,529.19],["2010-04-27",528.95,538.33,527.23,529.06,3844700,529.06],["2010-04-26",544.97,544.99,529.21,531.64,4368800,531.64],["2010-04-23",547.25,549.32,542.27,544.99,2089400,544.99],["2010-04-22",552,552.5,543.35,547.06,3280700,547.06],["2010-04-21",556.46,560.25,552.16,554.3,2391500,554.3],["2010-04-20",554.17,559.66,551.06,555.04,2977400,555.04],["2010-04-19",548.75,553.99,545,550.1,3894000,550.1],["2010-04-16",563,568.81,549.63,550.15,12235500,550.15],["2010-04-15",592.17,597.84,588.29,595.3,6761800,595.3],["2010-04-14",590.06,592.34,584.01,589,3402700,589],["2010-04-13",572.53,588.88,571.13,586.77,3912300,586.77],["2010-04-12",567.35,574,566.22,572.73,2352400,572.73],["2010-04-09",567.49,568.77,564,566.22,2056600,566.22],["2010-04-08",563.32,569.85,560.05,567.49,1947500,567.49],["2010-04-07",567.3,568.75,561.86,563.54,2581000,563.54],["2010-04-06",569.46,570.89,565.4,568.22,2060100,568.22],["2010-04-05",570.9,574.88,569,571.01,1901500,571.01],["2010-04-01",571.35,573.45,565.55,568.8,2102700,568.8],["2010-03-31",565.05,569.74,562.81,567.12,3030800,567.12],["2010-03-30",562.83,567.63,560.28,566.71,1977900,566.71],["2010-03-29",563,564.72,560.57,562.45,3104500,562.45],["2010-03-26",565.27,567.39,560.02,562.69,2696200,562.69],["2010-03-25",559.02,572,558.66,562.88,3930900,562.88],["2010-03-24",545.51,559.85,539.7,557.33,6565200,557.33],["2010-03-23",557.04,558.31,542,549,5501300,549],["2010-03-22",556.11,566.85,554.28,557.5,4004800,557.5],["2010-03-19",566.23,568,557.28,560,4792400,560],["2010-03-18",564.72,568.44,562.96,566.4,1777200,566.4],["2010-03-17",568.3,571.45,564.25,565.56,3321600,565.56],["2010-03-16",561.83,568.42,560.76,565.2,3431500,565.2],["2010-03-15",566.68,569.45,556,563.18,4653900,563.18],["2010-03-12",588.14,588.28,579.16,579.54,2753400,579.54],["2010-03-11",574.26,586.21,574.2,581.14,4233300,581.14],["2010-03-10",563.76,578.5,562.21,576.45,5654900,576.45],["2010-03-09",559.85,564.66,556.5,560.19,3176600,560.19],["2010-03-08",564.78,565.18,561.01,562.48,2386400,562.48],["2010-03-05",561.35,567.67,559.9,564.21,3912200,564.21],["2010-03-04",546.5,556.13,546.2,554.59,3183800,554.59],["2010-03-03",542.36,548.12,539.25,545.32,3089400,545.32],["2010-03-02",535.48,545.66,535.01,541.06,4356800,541.06],["2010-03-01",529.2,533.29,527.74,532.69,2237900,532.69],["2010-02-26",527.42,531.75,523.48,526.8,2049300,526.8],["2010-02-25",527.12,528.49,520,526.43,3309200,526.43],["2010-02-24",533.98,538.44,530.51,531.47,2326600,531.47],["2010-02-23",543,543.63,532.29,535.07,2872600,535.07],["2010-02-22",547.35,547.5,541,542.8,2144600,542.8],["2010-02-19",540.53,544.03,539.7,540.76,2553100,540.76],["2010-02-18",537.54,545.01,536.14,543.22,2336900,543.22],["2010-02-17",542,543.4,537.61,538.21,2029700,538.21],["2010-02-16",536.87,544.13,534.3,541.3,3654400,541.3],["2010-02-12",532.97,537.15,530.5,533.12,2279700,533.12],["2010-02-11",533.32,540.49,529.5,536.4,2410000,536.4],["2010-02-10",534.07,537.79,527.69,534.45,2674500,534.45],["2010-02-09",539.54,541.53,535.07,536.44,2819600,536.44],["2010-02-08",532.5,542,531.53,533.47,2694300,533.47],["2010-02-05",528.4,533.5,522.46,531.29,3156000,531.29],["2010-02-04",537,538,525.56,526.78,3377700,526.78],["2010-02-03",528.67,542.1,528.23,540.82,2999100,540.82],["2010-02-02",534.96,534.96,527.61,531.12,4096200,531.12],["2010-02-01",534.6,535.81,530.3,533.02,2250800,533.02],["2010-01-29",538.49,540.99,525.61,529.94,4140500,529.94],["2010-01-28",544.49,547,530.6,534.29,3229100,534.29],["2010-01-27",541.27,547.65,535.31,542.1,3964400,542.1],["2010-01-26",537.97,549.6,536.29,542.42,4355500,542.42],["2010-01-25",546.59,549.88,535.51,540,4419900,540],["2010-01-22",564.5,570.6,534.86,550.01,6800400,550.01],["2010-01-21",583.44,586.82,572.25,582.98,6307700,582.98],["2010-01-20",585.98,585.98,575.29,580.41,3250700,580.41],["2010-01-19",581.2,590.42,576.29,587.62,4316700,587.62],["2010-01-15",593.34,593.56,578.04,580,5434500,580],["2010-01-14",583.9,594.2,582.81,589.85,4240100,589.85],["2010-01-13",576.49,588.38,573.9,587.09,6496600,587.09],["2010-01-12",597.65,598.16,588,590.48,4853300,590.48],["2010-01-11",604.46,604.46,594.04,601.11,7212900,601.11],["2010-01-08",592,603.25,589.11,602.02,4724300,602.02],["2010-01-07",609.4,610,592.65,594.1,6414300,594.1],["2010-01-06",625.86,625.86,606.36,608.26,3978700,608.26],["2010-01-05",627.18,627.84,621.54,623.99,3004700,623.99],["2010-01-04",626.95,629.51,624.24,626.75,1956200,626.75],["2009-12-31",624.75,625.4,619.98,619.98,1219800,619.98],["2009-12-30",618.5,622.73,618.01,622.73,1465600,622.73],["2009-12-29",624.74,624.84,618.29,619.4,1424800,619.4],["2009-12-28",621.66,625.99,618.48,622.87,1697900,622.87],["2009-12-24",612.93,619.52,612.27,618.48,858700,618.48],["2009-12-23",603.5,612.87,602.85,611.68,2072700,611.68],["2009-12-22",601.34,601.5,598.85,601.12,1880800,601.12],["2009-12-21",597.61,599.84,595.67,598.68,2571200,598.68],["2009-12-18",596.03,598.93,595,596.42,3531500,596.42],["2009-12-17",596.44,597.64,593.76,593.94,2638800,593.94],["2009-12-16",598.6,600.37,596.64,597.76,2809400,597.76],["2009-12-15",593.3,596.38,590.99,593.14,2280400,593.14],["2009-12-14",595.35,597.31,592.61,595.73,1913400,595.73],["2009-12-11",594.68,594.75,587.73,590.51,1720000,590.51],["2009-12-10",590.44,594.71,590.41,591.5,1668300,591.5],["2009-12-09",587.5,589.33,583.58,589.02,1781000,589.02],["2009-12-08",583.5,590.66,582,587.05,1524000,587.05],["2009-12-07",584.21,588.69,581,586.25,1636200,586.25],["2009-12-04",593.02,594.83,579.18,585.01,2513600,585.01],["2009-12-03",589.04,591.45,585,585.74,1428700,585.74],["2009-12-02",591,593.01,586.22,587.51,1663200,587.51],["2009-12-01",588.13,591.22,583,589.87,2320300,589.87],["2009-11-30",580.63,583.67,577.11,583,1725100,583],["2009-11-27",572,582.46,570.97,579.76,1384600,579.76],["2009-11-25",586.41,587.06,582.69,585.74,1461200,585.74],["2009-11-24",582.52,584.29,576.54,583.09,1605200,583.09],["2009-11-23",576.49,586.6,575.86,582.35,2547500,582.35],["2009-11-20",569.5,571.6,569.4,569.96,2006200,569.96],["2009-11-19",573.77,574,570,572.99,2168000,572.99],["2009-11-18",576.65,578.78,572.07,576.65,1549600,576.65],["2009-11-17",574.87,577.5,573.72,577.49,1916700,577.49],["2009-11-16",575,576.99,572.78,576.28,2199200,576.28],["2009-11-13",569.29,572.51,566.61,572.05,1666800,572.05],["2009-11-12",569.56,572.9,565.5,567.85,1886300,567.85],["2009-11-11",570.48,573.5,565.86,570.56,2319700,570.56],["2009-11-10",562.73,568.78,562,566.76,2230800,566.76],["2009-11-09",555.45,562.58,554.23,562.51,2649900,562.51],["2009-11-06",547.72,551.78,545.5,551.1,1826700,551.1],["2009-11-05",543.49,549.77,542.66,548.65,1847700,548.65],["2009-11-04",540.8,545.5,536.42,540.33,2332700,540.33],["2009-11-03",530.01,537.5,528.3,537.29,2380200,537.29],["2009-11-02",537.08,539.46,528.24,533.99,3202100,533.99],["2009-10-30",550,550.17,534.24,536.12,3468500,536.12],["2009-10-29",543.01,551.83,541,551.05,2522600,551.05],["2009-10-28",547.87,550,538.25,540.3,2567800,540.3],["2009-10-27",550.97,554.56,544.16,548.29,3216500,548.29],["2009-10-26",555.75,561.64,550.89,554.21,2970400,554.21],["2009-10-23",555.25,557.89,551.2,553.69,2392700,553.69],["2009-10-22",550,555,548,554.09,2336500,554.09],["2009-10-21",549.91,559.35,549,551.1,3670600,551.1],["2009-10-20",551.64,552.95,540.7,551.72,4043700,551.72],["2009-10-19",552.69,553.6,548.73,552.09,3217900,552.09],["2009-10-16",547.33,554.75,544.53,549.85,8841900,549.85],["2009-10-15",533.75,536.9,527.27,529.91,6100400,529.91],["2009-10-14",532.46,535.58,530,535.32,3258400,535.32],["2009-10-13",524.39,527.46,521.38,526.11,3037400,526.11],["2009-10-12",523.42,525.76,519.32,524.04,3322200,524.04],["2009-10-09",516.65,521.51,514.5,516.25,2738100,516.25],["2009-10-08",519.57,523.25,513.34,514.18,4303800,514.18],["2009-10-07",499,518.99,497.81,517.54,4874200,517.54],["2009-10-06",491.7,499.37,491.7,498.74,2732300,498.74],["2009-10-05",487.65,492.43,483.34,488.52,2144600,488.52],["2009-10-02",483.74,491.74,482.6,484.58,2600800,484.58],["2009-10-01",493,496.47,487,487.2,2813200,487.2],["2009-09-30",500,500.14,487.24,495.85,3141700,495.85],["2009-09-29",499.53,499.75,493.01,498.53,2099200,498.53],["2009-09-28",494.84,501.5,493.3,498.53,1839300,498.53],["2009-09-25",494.29,499.93,492,492.48,2049600,492.48],["2009-09-24",500.47,501.41,493,496.77,2527600,496.77],["2009-09-23",500.78,507,497.71,498.46,2704200,498.46],["2009-09-22",500.92,501.99,497.81,499.06,3041200,499.06],["2009-09-21",487.74,498.9,486.22,497,2116400,497],["2009-09-18",496.77,496.98,491.23,491.46,3283500,491.46],["2009-09-17",490.57,497.37,487.15,491.72,4483100,491.72],["2009-09-16",479.8,489.37,478.48,488.29,2585300,488.29],["2009-09-15",475.08,478.91,472.71,477.54,2398100,477.54],["2009-09-14",470.51,476.8,470.05,475.12,1975700,475.12],["2009-09-11",470.4,473.3,467.63,472.14,1902900,472.14],["2009-09-10",466.65,470.94,462,470.94,2534600,470.94],["2009-09-09",459.06,466.27,458.8,463.97,2195400,463.97],["2009-09-08",464.29,466.99,455.84,458.62,2656700,458.62],["2009-09-04",457.57,462.6,455.78,461.3,1499200,461.3],["2009-09-03",455.82,458.25,455,457.52,1646200,457.52],["2009-09-02",455.82,458.33,452.59,453.01,1804800,453.01],["2009-09-01",459.68,466.82,454.42,455.76,2594900,455.76],["2009-08-31",459.79,461.86,458,461.67,1957900,461.67],["2009-08-28",469.26,472.37,463.38,464.75,1771600,464.75],["2009-08-27",468.58,468.58,460.73,466.06,1998900,466.06],["2009-08-26",472.76,473,466.7,468,1987800,468],["2009-08-25",469.13,474.35,468.72,471.37,2341000,471.37],["2009-08-24",467.35,470.09,464.42,468.73,2453400,468.73],["2009-08-21",465.54,466.09,462.65,465.24,3560500,465.24],["2009-08-20",452,462.18,451.23,460.41,3998900,460.41],["2009-08-19",439.99,445,438.56,443.97,2255000,443.97],["2009-08-18",445.1,447.7,442.32,445.28,2351100,445.28],["2009-08-17",451.5,451.99,443.12,444.89,2620200,444.89],["2009-08-14",462.78,463.18,456.89,460,1675100,460],["2009-08-13",462.15,464.72,458.91,462.28,1995200,462.28],["2009-08-12",455.41,461.75,454.92,458.58,2341400,458.58],["2009-08-11",453.67,457.23,452.38,453.94,1712500,453.94],["2009-08-10",455.14,458.41,453.79,456.61,1742000,456.61],["2009-08-07",455.67,459.42,454.99,457.1,2543100,457.1],["2009-08-06",454.3,454.88,448.53,450.36,2110900,450.36],["2009-08-05",456,456.91,447.88,451.14,2342000,451.14],["2009-08-04",449.37,454,448.43,453.73,2389800,453.73],["2009-08-03",448.74,453.9,447.64,452.21,2590300,452.21],["2009-07-31",449.98,452.7,442.43,443.05,2860400,443.05],["2009-07-30",442.61,451.47,442.61,445.64,3198600,445.64],["2009-07-29",437.23,437.8,431.89,436.24,1987000,436.24],["2009-07-28",441,442.81,436.1,439.85,2532500,439.85],["2009-07-27",446.04,446.75,437.61,444.8,2504400,444.8],["2009-07-24",435.81,450.49,435,446.72,3626900,446.72],["2009-07-23",428.68,441.21,425.5,437.34,3478200,437.34],["2009-07-22",428,430.2,423.5,427.69,2586700,427.69],["2009-07-21",430.94,431.9,425.72,427.9,2968200,427.9],["2009-07-20",429.88,432.85,426.25,430.17,3153500,430.17],["2009-07-17",433,435.48,426.7,430.25,6854100,430.25],["2009-07-16",436.68,445.75,434.1,442.6,6554500,442.6],["2009-07-15",429.66,438.68,428.49,438.17,3777000,438.17],["2009-07-14",423.71,426.73,420.87,424.69,2895800,424.69],["2009-07-13",416.17,424.52,415.18,424.3,4045700,424.3],["2009-07-10",409.58,417.37,408.7,414.4,2926600,414.4],["2009-07-09",406.12,414.45,405.8,410.39,3275600,410.39],["2009-07-08",400,406,398.06,402.49,3441200,402.49],["2009-07-07",408.24,409.19,395.98,396.63,3259300,396.63],["2009-07-06",406.5,410.64,401.66,409.61,2262600,409.61],["2009-07-02",415.41,415.41,406.81,408.49,2517600,408.49],["2009-07-01",424.2,426.4,418.15,418.99,2310800,418.99],["2009-06-30",424,427.21,418.22,421.59,2593900,421.59],["2009-06-29",426,427.8,422.24,424.14,2169300,424.14],["2009-06-26",413.68,428.23,413.11,425.32,3256700,425.32],["2009-06-25",407,415.9,406.51,415.77,3044500,415.77],["2009-06-24",408.74,412.23,406.56,409.29,2457800,409.29],["2009-06-23",406.65,408.99,402.55,405.68,2899600,405.68],["2009-06-22",416.95,417.49,401.89,407.35,4124400,407.35],["2009-06-19",418.21,420.46,414.58,420.09,4259100,420.09],["2009-06-18",415.68,418.69,413,414.06,3085200,414.06],["2009-06-17",416.19,419.72,411.56,415.16,3490100,415.16],["2009-06-16",419.31,421.09,415.42,416,3049700,416],["2009-06-15",421.5,421.5,414,416.77,3736900,416.77],["2009-06-12",426.86,427.7,421.21,424.84,2918400,424.84],["2009-06-11",431.77,433.73,428.37,429,2865200,429],["2009-06-10",436.23,437.89,426.67,432.6,3358900,432.6],["2009-06-09",438.58,440.5,431.76,435.62,3254900,435.62],["2009-06-08",439.5,440.92,434.12,438.77,3098700,438.77],["2009-06-05",445.07,447.34,439.46,444.32,3680800,444.32],["2009-06-04",435.3,441.24,434.5,440.28,3638100,440.28],["2009-06-03",426,432.46,424,431.65,3532800,431.65],["2009-06-02",426.25,429.96,423.4,428.4,2623600,428.4],["2009-06-01",418.73,429.6,418.53,426.56,3322400,426.56],["2009-05-29",412.11,417.23,410.7,417.23,2648200,417.23],["2009-05-28",408.68,411.62,404.61,410.4,2668800,410.4],["2009-05-27",405.64,411.86,404.81,405.56,3034300,405.56],["2009-05-26",391.95,405,390,404.36,3104500,404.36],["2009-05-22",396.66,398.65,392,393.5,1718600,393.5],["2009-05-21",396.3,402.84,393.84,396.5,2719800,396.5],["2009-05-20",402.09,405.67,395,397.18,2284000,397.18],["2009-05-19",396.1,401.64,393,398.88,2837500,398.88],["2009-05-18",394.73,397.31,385.4,396.84,3351700,396.84],["2009-05-15",391.1,394.11,389.09,390,3008700,390],["2009-05-14",388.8,392.21,384.69,387.5,2937000,387.5],["2009-05-13",394.09,396.39,388.35,389.54,2842800,389.54],["2009-05-12",410.01,410.99,395.11,399.01,3790800,399.01],["2009-05-11",402.8,412,401.2,407.98,2559300,407.98],["2009-05-08",402.85,410.13,395,407.33,3865100,407.33],["2009-05-07",404.1,404.99,392.5,396.61,2999800,396.61],["2009-05-06",406.79,408.28,401,403.47,2632900,403.47],["2009-05-05",399.98,405,397.25,402.99,2400800,402.99],["2009-05-04",398.17,402.4,394.79,401.98,3203000,401.98],["2009-05-01",395.03,397.59,391.55,393.69,2427700,393.69],["2009-04-30",395.76,403.75,394.8,395.97,4355700,395.97],["2009-04-29",385.97,394.97,385.83,391.47,3610000,391.47],["2009-04-28",383.75,389.05,381.54,383.71,2943600,383.71],["2009-04-27",384.34,389.49,382.75,385.95,2290600,385.95],["2009-04-24",386.05,393.18,380.5,389.49,3385400,389.49],["2009-04-23",387.51,389.75,381.11,384.69,2609000,384.69],["2009-04-22",381.75,390,379.01,383.86,3501800,383.86],["2009-04-21",376.17,384.3,376.1,381.47,3695400,381.47],["2009-04-20",386.15,390.65,375.89,379.3,4428900,379.3],["2009-04-17",386.02,399.82,384.81,392.24,10730800,392.24],["2009-04-16",381.5,392.9,381.02,388.74,10185100,388.74],["2009-04-15",367.1,381.06,364.16,379.5,4930700,379.5],["2009-04-14",376.94,376.99,365.6,368.91,3428600,368.91],["2009-04-13",371.33,379.1,370.3,378.11,3050100,378.11],["2009-04-09",369.5,374.35,366.25,372.5,3382600,372.5],["2009-04-08",363.5,365,356.21,362,2765200,362],["2009-04-07",362.6,363.75,355.31,358.65,3680100,358.65],["2009-04-06",367,369.82,361.4,368.24,3280300,368.24],["2009-04-03",364.5,371.72,358,369.78,3789800,369.78],["2009-04-02",363.31,369.76,360.32,362.5,4488000,362.5],["2009-04-01",343.78,355.24,340.61,354.09,3301200,354.09],["2009-03-31",348.93,353.51,346.18,348.06,3655300,348.06],["2009-03-30",342.55,343.81,336.05,342.69,3094100,342.69],["2009-03-27",350,352,345.47,347.7,3322800,347.7],["2009-03-26",353.13,359.16,348.5,353.29,6003300,353.29],["2009-03-25",350.4,351.34,336.25,344.07,4336300,344.07],["2009-03-24",346.5,353.84,344,347.17,3820000,347.17],["2009-03-23",333.56,349.45,333.03,348.6,4271500,348.6],["2009-03-20",330.3,332.99,326.34,330.16,4737900,330.16],["2009-03-19",331.68,336,327.38,329.94,4111200,329.94],["2009-03-18",334.81,340,328.05,333.1,5012200,333.1],["2009-03-17",320.18,335.34,319.09,335.34,4712500,335.34],["2009-03-16",325.99,329.73,318.59,319.69,4946800,319.69],["2009-03-13",326.1,327.46,319.03,324.42,3906400,324.42],["2009-03-12",317.54,325,313.65,323.53,5024100,323.53],["2009-03-11",310.1,320,305.71,317.91,5923600,317.91],["2009-03-10",298.25,310.5,294.25,308.17,6730200,308.17],["2009-03-09",299.98,306.57,289.45,290.89,6471300,290.89],["2009-03-06",307.22,310.19,294.25,308.57,7234200,308.57],["2009-03-05",316.48,319.08,302.64,305.64,6529900,305.64],["2009-03-04",323.16,329,315.38,318.92,7818400,318.92],["2009-03-03",330.07,333.69,322.35,325.48,6524800,325.48],["2009-03-02",333.33,340.7,326,327.16,5788500,327.16],["2009-02-27",332.95,343.82,331.11,337.99,5420000,337.99],["2009-02-26",345.96,352.49,337.16,337.18,5605600,337.18],["2009-02-25",342.15,352.3,338.92,341.64,6439100,341.64],["2009-02-24",331.02,349.62,330.89,345.45,6095900,345.45],["2009-02-23",347,349.8,329.55,330.06,5221100,330.06],["2009-02-20",338.05,348.92,335,346.45,6217100,346.45],["2009-02-19",357.47,359.8,341.41,342.64,4988700,342.64],["2009-02-18",347.24,353.38,340.52,353.11,6024500,353.11],["2009-02-17",346.51,347.09,339.69,342.66,5680400,342.66],["2009-02-13",362.19,362.99,355.23,357.68,4146700,357.68],["2009-02-12",353.16,363.62,351.48,363.05,5550300,363.05],["2009-02-11",358.95,365,353,358.04,5231600,358.04],["2009-02-10",375.98,377.5,357.89,358.51,7103700,358.51],["2009-02-09",371.28,381,367.3,378.77,4977300,378.77],["2009-02-06",356.46,373.81,355.44,371.28,7038100,371.28],["2009-02-05",340.91,355.38,337,353.72,7264400,353.72],["2009-02-04",340.07,354.44,339.17,343,6817400,343],["2009-02-03",342.57,343,333.83,340.45,6556500,340.45],["2009-02-02",334.29,345,332,340.57,5206900,340.57],["2009-01-30",344.69,348.8,336,338.53,4672000,338.53],["2009-01-29",344.54,345.05,340.11,343.32,7283800,343.32],["2009-01-28",337.98,352.33,336.31,348.67,7691400,348.67],["2009-01-27",326.45,333.87,324.27,331.48,4927300,331.48],["2009-01-26",324.85,328,320.56,323.87,4610700,323.87],["2009-01-23",309.27,331.96,304.22,324.7,10732800,324.7],["2009-01-22",298.04,309.35,295.15,306.5,8267000,306.5],["2009-01-21",288.35,303.5,288.35,303.08,4924500,303.08],["2009-01-20",299.14,299.5,282.75,282.75,5048200,282.75],["2009-01-16",305.02,308.25,295.7,299.67,5224400,299.67],["2009-01-15",297.57,303.58,286.79,298.99,5934500,298.99],["2009-01-14",310,313.8,297.75,300.97,5467900,300.97],["2009-01-13",311.77,320.6,310.39,314.32,4432500,314.32],["2009-01-12",316.31,318.95,310.23,312.69,3304300,312.69],["2009-01-09",327.5,327.5,313.4,315.07,4340500,315.07],["2009-01-08",318.28,325.19,317.34,325.19,3600700,325.19],["2009-01-07",328.32,330.91,318.75,322.01,4494500,322.01],["2009-01-06",332.98,340.8,326.39,334.06,6425200,334.06],["2009-01-05",321,331.24,315,328.05,4889000,328.05],["2009-01-02",308.6,321.82,305.5,321.32,3610500,321.32],["2008-12-31",304.2,311,302.61,307.65,2886800,307.65],["2008-12-30",300.8,306.81,298.71,303.11,3843500,303.11],["2008-12-29",300.22,301.38,291.58,297.42,3701900,297.42],["2008-12-26",304.07,305.26,298.31,300.36,1959100,300.36],["2008-12-24",301.48,306.34,298.38,302.95,1921500,302.95],["2008-12-23",300.43,303.31,296.67,298.02,3777700,298.02],["2008-12-22",308.56,309.5,290.63,297.11,3917600,297.11],["2008-12-19",310.99,317.79,309,310.17,5612600,310.17],["2008-12-18",316.7,320.35,309.11,310.28,4763500,310.28],["2008-12-17",318.64,322.13,312.42,315.24,5789700,315.24],["2008-12-16",314.52,329.5,311.27,325.28,7059600,325.28],["2008-12-15",314.01,318.49,305.11,310.67,6737900,310.67],["2008-12-12",295.71,316.47,294,315.76,5722100,315.76],["2008-12-11",304.17,312.88,297.8,300.22,6179200,300.22],["2008-12-10",309.24,314.9,304.51,308.82,5237000,308.82],["2008-12-09",297.69,318,297.01,305.97,6889900,305.97],["2008-12-08",289.99,309.44,282,302.11,8144300,302.11],["2008-12-05",271.02,284.24,264.02,283.99,6521200,283.99],["2008-12-04",276.53,283.49,268.77,274.34,4886600,274.34],["2008-12-03",269.85,281.36,265.34,279.43,5904800,279.43],["2008-12-02",269.73,277.78,262.58,275.11,5839700,275.11],["2008-12-01",286.68,287.38,265.98,265.99,5711200,265.99],["2008-11-28",290.58,296.45,288.28,292.96,2565500,292.96],["2008-11-26",280.28,295.46,276.2,292.09,6356600,292.09],["2008-11-25",268.68,286.66,267.32,282.05,10771200,282.05],["2008-11-24",269.26,269.95,249.01,257.44,10054700,257.44],["2008-11-21",262.51,269.37,247.3,262.43,10244500,262.43],["2008-11-20",274.89,282.94,259.04,259.56,9779400,259.56],["2008-11-19",295.39,300.19,278.58,280.18,7834600,280.18],["2008-11-18",301.57,303.73,285.35,297.42,8346100,297.42],["2008-11-17",303,310.16,297.95,300.12,7543800,300.12],["2008-11-14",303.25,324.99,302.56,310.02,9517100,310.02],["2008-11-13",291.77,313,280,312.08,13234700,312.08],["2008-11-12",302.05,312.49,287.76,291,10051100,291],["2008-11-11",308.69,316.3,300.52,311.46,10146600,311.46],["2008-11-10",328,329.44,309.47,318.78,8080100,318.78],["2008-11-07",333.12,341.15,325.33,331.14,4681300,331.14],["2008-11-06",339.97,344.42,325.81,331.22,8574800,331.22],["2008-11-05",362.15,368.88,341.31,342.24,6946500,342.24],["2008-11-04",353.44,372.36,345.5,366.94,7349900,366.94],["2008-11-03",357.58,362.99,341.43,346.49,5954500,346.49],["2008-10-31",356.16,371.96,354.27,359.36,7423300,359.36],["2008-10-30",368.46,372,358.37,359.69,7988900,359.69],["2008-10-29",365.79,371,352.37,358,9756600,358],["2008-10-28",339.05,369.31,328.51,368.75,8105400,368.75],["2008-10-27",334.81,343,325.6,329.49,6200700,329.49],["2008-10-24",326.47,350.47,324.74,339.29,7359000,339.29],["2008-10-23",353.65,358,337.99,352.32,6478900,352.32],["2008-10-22",356.99,369.69,344,355.67,6560000,355.67],["2008-10-21",372.39,383.78,362,362.75,5782000,362.75],["2008-10-20",379.75,380.98,359.59,379.32,6753400,379.32],["2008-10-17",378.96,386,363.55,372.54,14249200,372.54],["2008-10-16",332.76,356.5,309.44,353.02,16239700,353.02],["2008-10-15",354.65,359,338.83,339.17,6721400,339.17],["2008-10-14",393.53,394.5,357,362.71,7784800,362.71],["2008-10-13",355.79,381.95,345.75,381.02,8905500,381.02],["2008-10-10",313.16,341.89,310.3,332,10597800,332],["2008-10-09",344.52,348.57,321.67,328.98,8075000,328.98],["2008-10-08",330.16,358.99,326.11,338.11,11826400,338.11],["2008-10-07",373.33,374.98,345.37,346.01,11054400,346.01],["2008-10-06",373.98,375.99,357.16,371.21,11220600,371.21],["2008-10-03",397.35,412.5,383.07,386.91,7992900,386.91],["2008-10-02",409.79,409.98,386,390.49,5984900,390.49],["2008-10-01",411.15,416.98,403.1,411.72,6234800,411.72],["2008-09-30",395.98,425.08,392.32,400.52,3086300,400.52],["2008-09-29",419.51,423.51,380.71,381,10762900,381],["2008-09-26",428,437.16,421.03,431.04,5292500,431.04],["2008-09-25",438.84,450,435.98,439.6,5020300,439.6],["2008-09-24",430.34,445,430.11,435.11,4242000,435.11],["2008-09-23",433.25,440.79,425.72,429.27,5204200,429.27],["2008-09-22",454.13,454.13,429,430.14,4407300,430.14],["2008-09-19",461,462.07,443.28,449.15,10006000,449.15],["2008-09-18",422.64,439.18,410.5,439.08,8589400,439.08],["2008-09-17",438.48,439.14,413.44,414.49,9126900,414.49],["2008-09-16",425.96,449.28,425.49,442.93,6990700,442.93],["2008-09-15",424,441.97,423.71,433.86,6567400,433.86],["2008-09-12",430.21,441.99,429,437.66,6028000,437.66],["2008-09-11",408.35,435.09,406.38,433.75,6471400,433.75],["2008-09-10",424.47,424.48,409.68,414.16,6226800,414.16],["2008-09-09",423.17,432.38,415,418.66,7229600,418.66],["2008-09-08",452.02,452.94,417.55,419.95,9017900,419.95],["2008-09-05",445.49,452.46,440.08,444.25,4534300,444.25],["2008-09-04",460,463.24,449.4,450.26,4848500,450.26],["2008-09-03",468.73,474.29,459.58,464.41,4314600,464.41],["2008-09-02",476.77,482.18,461.42,465.25,6111500,465.25],["2008-08-29",469.75,471.01,462.33,463.29,3848200,463.29],["2008-08-28",472.49,476.45,470.33,473.78,3029700,473.78],["2008-08-27",473.73,474.83,464.84,468.58,4387100,468.58],["2008-08-26",483.46,483.46,470.59,474.16,3308200,474.16],["2008-08-25",486.11,497,481.5,483.01,2014300,483.01],["2008-08-22",491.5,494.88,489.48,490.59,2297200,490.59],["2008-08-21",482.92,489.9,479.27,486.53,3514100,486.53],["2008-08-20",494.72,496.69,482.57,485,3982100,485],["2008-08-19",490.43,498.28,486.63,490.5,3046500,490.5],["2008-08-18",509.84,510,495.51,498.3,3333900,498.3],["2008-08-15",506.99,510.66,505.5,510.15,3545700,510.15],["2008-08-14",497.7,507.61,496.29,505.49,2918600,505.49],["2008-08-13",501.6,503.54,493.88,500.03,3625500,500.03],["2008-08-12",502,506.13,498,502.61,2755700,502.61],["2008-08-11",492.47,508.88,491.78,500.84,4239300,500.84],["2008-08-08",480.15,495.75,475.69,495.01,3739300,495.01],["2008-08-07",482,484,476.41,479.12,2773800,479.12],["2008-08-06",478.37,489.77,472.51,486.34,3375800,486.34],["2008-08-05",467.59,480.08,466.33,479.85,3584500,479.85],["2008-08-04",468.12,473.01,461.9,463,2487000,463],["2008-08-01",472.51,473.22,462.5,467.86,3007900,467.86],["2008-07-31",474.56,480.89,471.44,473.75,2865100,473.75],["2008-07-30",485.5,486.02,472.81,482.7,3490700,482.7],["2008-07-29",479.3,487.26,478,483.11,2802800,483.11],["2008-07-28",492.09,492.09,475.13,477.12,3160000,477.12],["2008-07-25",486.49,493.13,481.5,491.98,3183500,491.98],["2008-07-24",496.7,496.87,475.62,475.62,3540900,475.62],["2008-07-23",481.61,497.23,478.1,489.22,4894100,489.22],["2008-07-22",466.72,480.25,465.6,477.11,4691500,477.11],["2008-07-21",480.88,484.09,465.7,468.8,5901500,468.8],["2008-07-18",498.35,498.98,478.19,481.32,11292400,481.32],["2008-07-17",534.16,537.05,524.5,533.44,8787400,533.44],["2008-07-16",514.04,536.5,510.6,535.6,4742200,535.6],["2008-07-15",516.28,527.5,501.1,516.09,6071000,516.09],["2008-07-14",539,540.06,515.45,521.62,4424800,521.62],["2008-07-11",536.5,539.5,519.43,533.8,4981400,533.8],["2008-07-10",545,549.5,530.72,540.57,4331700,540.57],["2008-07-09",550.76,555.68,540.73,541.55,4154000,541.55],["2008-07-08",545.99,555.19,540,554.53,4932400,554.53],["2008-07-07",542.3,549,535.6,543.91,4255200,543.91],["2008-07-03",530.88,539.23,527.5,537,2400500,537],["2008-07-02",536.51,540.38,526.06,527.04,4223000,527.04],["2008-07-01",519.58,536.72,517,534.73,4959900,534.73],["2008-06-30",532.47,538,523.06,526.42,3765300,526.42],["2008-06-27",527.68,530,515.09,528.07,5447500,528.07],["2008-06-26",544.1,544.93,528.26,528.82,5659500,528.82],["2008-06-25",544.97,557.8,543.67,551,4122200,551],["2008-06-24",545.14,551.19,535.1,542.3,4672600,542.3],["2008-06-23",545.36,553.15,542.02,545.21,3635900,545.21],["2008-06-20",556.98,556.98,544.51,546.43,5983100,546.43],["2008-06-19",555.35,563.78,550.81,560.2,5683100,560.2],["2008-06-18",564.51,568.99,559.16,562.38,3381200,562.38],["2008-06-17",576.35,578.07,568.38,569.46,3462900,569.46],["2008-06-16",566.5,579.1,566.5,572.81,3542800,572.81],["2008-06-13",561.49,575.7,561.34,571.51,6184400,571.51],["2008-06-12",548.76,558,546.88,552.95,5491600,552.95],["2008-06-11",556.24,557.34,544.46,545.2,3812900,545.2],["2008-06-10",549.56,558.82,546.78,554.17,3657400,554.17],["2008-06-09",568.06,570,545.4,557.87,5288300,557.87],["2008-06-06",579.75,580.72,567,567,4734500,567],["2008-06-05",577.08,588.04,576.21,586.3,3916700,586.3],["2008-06-04",565.33,578,564.55,572.22,3363200,572.22],["2008-06-03",576.5,580.5,560.61,567.3,4305300,567.3],["2008-06-02",582.5,583.89,571.27,575,3674200,575],["2008-05-30",583.47,589.92,581.3,585.8,3225200,585.8],["2008-05-29",574.79,585.88,573.2,583,4845000,583],["2008-05-28",567.94,571.49,561.1,568.24,4050400,568.24],["2008-05-27",544.96,562.6,543.85,560.9,3865500,560.9],["2008-05-23",546.96,553,537.81,544.62,4431500,544.62],["2008-05-22",551.95,554.21,540.25,549.46,5076300,549.46],["2008-05-21",578.52,581.41,547.89,549.99,6468100,549.99],["2008-05-20",574.63,582.48,572.91,578.6,3313600,578.6],["2008-05-19",578.55,588.88,573.52,577.52,5604500,577.52],["2008-05-16",581.43,584.68,578.32,580.07,4274100,580.07],["2008-05-15",579,582.95,575.61,581,4342700,581],["2008-05-14",586.49,591.19,575.25,576.3,4375800,576.3],["2008-05-13",586.23,587.95,578.55,583,5163500,583],["2008-05-12",574.75,586.75,568.91,584.94,4863900,584.94],["2008-05-09",579,585,571.3,573.2,4484900,573.2],["2008-05-08",586.2,589.3,578.91,583.01,5122900,583.01],["2008-05-07",590.27,599.49,576.43,579,6613000,579],["2008-05-06",591,592,583,586.36,4629300,586.36],["2008-05-05",598.86,599,587.13,594.9,6281000,594.9],["2008-05-02",598.49,602.45,579.3,581.29,6998800,581.29],["2008-05-01",578.31,594.93,576.97,593.08,6602800,593.08],["2008-04-30",562.21,584.86,558.47,574.29,7903000,574.29],["2008-04-29",550.83,563.4,550.01,558.47,4346000,558.47],["2008-04-28",545.88,556.81,539,552.12,4008600,552.12],["2008-04-25",549.02,553,542.73,544.06,4164400,544.06],["2008-04-24",551.29,554.49,540.02,543.04,4135100,543.04],["2008-04-23",557.94,559.31,540.95,546.49,4921500,546.49],["2008-04-22",537.57,560.83,537.56,555,7938500,555],["2008-04-21",539.39,542.59,530.29,537.79,7439700,537.79],["2008-04-18",535.21,547.7,524.77,539.41,18235600,539.41],["2008-04-17",455.63,459.37,446.52,449.54,13353000,449.54],["2008-04-16",444.4,458.28,441,455.03,7630700,455.03],["2008-04-15",458.13,459.72,443.72,446.84,4577600,446.84],["2008-04-14",457.16,457.45,450.15,451.66,3842600,451.66],["2008-04-11",464.07,467.26,455.01,457.45,4169700,457.45],["2008-04-10",464.96,473.86,461.85,469.08,5072400,469.08],["2008-04-09",469.13,472,457.54,464.19,6048100,464.19],["2008-04-08",473.04,474.14,462.01,467.81,4547000,467.81],["2008-04-07",477.03,485.44,473.53,476.82,5943500,476.82],["2008-04-04",457.01,477.83,456.2,471.09,5897200,471.09],["2008-04-03",461.73,463.29,448.13,455.12,6778400,455.12],["2008-04-02",469.9,475.74,460.39,465.7,5999000,465.7],["2008-04-01",447.74,466.5,446.87,465.71,6093100,465.71],["2008-03-31",435.64,442.69,432.01,440.47,4446400,440.47],["2008-03-28",447.46,453.57,434.31,438.08,4376200,438.08],["2008-03-27",446,448.61,440.49,444.08,5832200,444.08],["2008-03-26",452.59,462.87,449.29,458.19,5225700,458.19],["2008-03-25",457.46,457.47,446,450.78,5831600,450.78],["2008-03-24",438.43,465.78,437.72,460.56,6763500,460.56],["2008-03-20",427.32,435.7,417.5,433.55,9913400,433.55],["2008-03-19",441.11,447.5,431.67,432,6179000,432],["2008-03-18",428.98,440.84,425.53,439.16,7237200,439.16],["2008-03-17",427.99,433.71,412.11,419.87,7888200,419.87],["2008-03-14",442.98,449.34,430.62,437.92,6574400,437.92],["2008-03-13",432.67,446.98,428.78,443.01,7726600,443.01],["2008-03-12",440.01,447.88,438.07,440.18,6651900,440.18],["2008-03-11",425.26,440.15,424.65,439.84,8826900,439.84],["2008-03-10",428.83,431,413.04,413.62,7987600,413.62],["2008-03-07",428.88,440,426.24,433.35,8071800,433.35],["2008-03-06",447.69,453.3,431.18,432.7,7470100,432.7],["2008-03-05",445.25,454.17,444,447.7,7436600,447.7],["2008-03-04",450.95,453.36,435.78,444.6,13621700,444.6],["2008-03-03",471.51,472.72,450.11,457.02,7554500,457.02],["2008-02-29",471.87,479.74,464.65,471.18,9425400,471.18],["2008-02-28",470.5,479.09,467.36,475.39,6586900,475.39],["2008-02-27",460.13,475.49,459.64,472.86,10121900,472.86],["2008-02-26",461.2,466.47,446.85,464.19,23287300,464.19],["2008-02-25",505.95,506.5,485.74,486.44,8372800,486.44],["2008-02-22",502.06,509,497.55,507.8,5515900,507.8],["2008-02-21",512.85,513.21,499.5,502.86,5677800,502.86],["2008-02-20",503.51,511.01,498.82,509,6662200,509],["2008-02-19",534.94,535.06,506.5,508.95,6350400,508.95],["2008-02-15",528.31,532.66,524.33,529.64,5240100,529.64],["2008-02-14",538.35,541.04,531,532.25,6476700,532.25],["2008-02-13",522.5,534.99,518.69,534.62,6624700,534.62],["2008-02-12",523.39,530.6,513.03,518.09,6662300,518.09],["2008-02-11",520.52,523.71,513.4,521.16,5826000,521.16],["2008-02-08",509.41,517.73,508.7,516.69,6828900,516.69],["2008-02-07",496.86,514.19,494.76,504.95,7928900,504.95],["2008-02-06",511.14,511.17,497.93,501.71,7636400,501.71],["2008-02-05",489.43,509,488.52,506.8,11203300,506.8],["2008-02-04",509.07,512.78,492.55,495.43,13157100,495.43],["2008-02-01",528.67,536.67,510,515.9,17600500,515.9],["2008-01-31",539.01,573,534.29,564.3,14871300,564.3],["2008-01-30",549.19,560.43,543.51,548.27,7939600,548.27],["2008-01-29",560.47,561.33,540.67,550.52,6283000,550.52],["2008-01-28",570.97,572.24,548.6,555.98,5816700,555.98],["2008-01-25",591.81,595,566.18,566.4,6966000,566.4],["2008-01-24",558.8,579.69,554.14,574.49,9400900,574.49],["2008-01-23",560.71,568,519,548.62,16965700,548.62],["2008-01-22",562.03,597.5,561.2,584.35,9501500,584.35],["2008-01-18",608.36,609.99,598.45,600.25,8539600,600.25],["2008-01-17",620.76,625.74,598.01,600.79,8216800,600.79],["2008-01-16",628.97,639.99,601.93,615.95,10560000,615.95],["2008-01-15",645.9,649.05,635.38,637.65,5568200,637.65],["2008-01-14",651.14,657.4,645.25,653.82,4447500,653.82],["2008-01-11",642.7,649.47,630.11,638.25,4977000,638.25],["2008-01-10",645.01,657.2,640.11,646.73,6334200,646.73],["2008-01-09",630.04,653.34,622.51,653.2,6739700,653.2],["2008-01-08",653,659.96,631,631.68,5339100,631.68],["2008-01-07",653.94,662.28,637.35,649.25,6403400,649.25],["2008-01-04",679.69,680.96,655,657,5359800,657],["2008-01-03",685.26,686.85,676.52,685.33,3252500,685.33],["2008-01-02",692.87,697.37,677.73,685.19,4306900,685.19],["2007-12-31",698.57,702.49,690.58,691.48,2376200,691.48],["2007-12-28",704.93,707.95,696.54,702.53,2562700,702.53],["2007-12-27",707.07,716,700.74,700.74,2942500,700.74],["2007-12-26",698.99,713.22,698.21,710.84,2530000,710.84],["2007-12-24",694.99,700.73,693.06,700.73,1628400,700.73],["2007-12-21",697.88,699.26,693.24,696.69,5382000,696.69],["2007-12-20",685.83,691,680.61,689.69,4422200,689.69],["2007-12-19",674.21,679.5,669,677.37,4421100,677.37],["2007-12-18",674.16,676.71,652.5,673.35,7166700,673.35],["2007-12-17",688,695.42,663.67,669.23,5486000,669.23],["2007-12-14",687.51,699.7,687.26,689.96,3673500,689.96],["2007-12-13",696.31,697.62,681.21,694.05,5040800,694.05],["2007-12-12",714,714.32,688.5,699.35,6159100,699.35],["2007-12-11",719.94,720.99,698.78,699.2,6139100,699.2],["2007-12-10",715.99,724.8,714,718.42,3856200,718.42],["2007-12-07",714.99,718,710.5,714.87,3852100,714.87],["2007-12-06",697.8,716.56,697.01,715.26,4909000,715.26],["2007-12-05",692.73,698.93,687.5,698.51,4209600,698.51],["2007-12-04",678.31,692,677.12,684.16,4231800,684.16],["2007-12-03",691.01,695,681.14,681.53,4325100,681.53],["2007-11-30",711,711.06,682.11,693,7895500,693],["2007-11-29",690.75,702.79,687.77,697,6208000,697],["2007-11-28",682.11,694.3,672.14,692.26,7916500,692.26],["2007-11-27",674.8,676.43,650.26,673.57,8904500,673.57],["2007-11-26",680.2,693.4,665,666,6790100,666],["2007-11-23",670,678.28,668.11,676.7,2738700,676.7],["2007-11-21",643.77,669.97,642.08,660.52,7013500,660.52],["2007-11-20",636.48,659.1,632.87,648.54,9840600,648.54],["2007-11-19",629.59,636.77,618.5,625.85,5527400,625.85],["2007-11-16",633.94,635.49,616.02,633.63,9042800,633.63],["2007-11-15",638.57,647.5,624,629.65,6967700,629.65],["2007-11-14",673.28,675.49,636.27,641.68,8094700,641.68],["2007-11-13",644.99,660.92,632.07,660.55,8426100,660.55],["2007-11-12",657.74,669.93,626.21,632.07,10227300,632.07],["2007-11-09",675.78,681.88,661.21,663.97,11388100,663.97],["2007-11-08",734.6,734.89,677.18,693.84,16512200,693.84],["2007-11-07",741.13,747.24,723.14,732.94,8252900,732.94],["2007-11-06",737.56,741.79,725,741.79,8436300,741.79],["2007-11-05",706.99,730.23,706.07,725.65,8883700,725.65],["2007-11-02",710.51,713.58,697.34,711.25,5841500,711.25],["2007-11-01",702.79,713.72,701.78,703.21,6527200,703.21],["2007-10-31",700.69,707,696.04,707,6876800,707],["2007-10-30",677.51,699.91,677.51,694.77,6900600,694.77],["2007-10-29",677.77,680,672.09,679.23,3066300,679.23],["2007-10-26",674.03,676.54,668.06,674.6,3353900,674.6],["2007-10-25",678.68,678.97,663.55,668.51,5795500,668.51],["2007-10-24",672.71,677.47,659.56,675.82,7404200,675.82],["2007-10-23",661.25,677.6,660,675.77,6793700,675.77],["2007-10-22",638.67,655,636.28,650.75,6664400,650.75],["2007-10-19",654.56,658.49,643.23,644.71,15789000,644.71],["2007-10-18",635.41,641.37,628.5,639.62,12289200,639.62],["2007-10-17",630.45,634,621.59,633.48,6030500,633.48],["2007-10-16",618.49,625.92,611.99,616,6025300,616],["2007-10-15",638.47,639.86,615.55,620.11,6943800,620.11],["2007-10-12",623.98,638.4,618.24,637.39,6823700,637.39],["2007-10-11",633.64,641.41,609,622,11799000,622],["2007-10-10",621.36,625.68,616.8,625.39,5385600,625.39],["2007-10-09",615.11,623.78,608.39,615.18,8767800,615.18],["2007-10-08",595,610.26,593.95,609.62,5028000,609.62],["2007-10-05",587.11,596,587.01,594.05,5068700,594.05],["2007-10-04",585.09,585.09,577.06,579.03,2986700,579.03],["2007-10-03",586.25,588.99,580.36,584.02,3879500,584.02],["2007-10-02",583.38,596.81,580.01,584.39,7067500,584.39],["2007-10-01",569.97,584.35,569.61,582.55,4711300,582.55],["2007-09-28",567,569.55,564.12,567.27,2639500,567.27],["2007-09-27",571.73,571.74,565.78,567.5,2056300,567.5],["2007-09-26",570.4,571.79,563.81,568.16,3346100,568.16],["2007-09-25",564,569.56,562.86,569,2730600,569],["2007-09-24",561,571.46,560,568.02,5297000,568.02],["2007-09-21",556.34,560.79,552.83,560.1,8011700,560.1],["2007-09-20",547,556.8,546.03,552.83,5525000,552.83],["2007-09-19",539.27,549.45,538.86,546.85,5526900,546.85],["2007-09-18",526.52,537.25,524.27,535.27,4215700,535.27],["2007-09-17",526.53,529.28,524.07,525.3,2197500,525.3],["2007-09-14",523.2,530.27,522.22,528.75,2764900,528.75],["2007-09-13",524.06,527.21,523.22,524.78,1891100,524.78],["2007-09-12",520.53,527.98,519,522.65,2986000,522.65],["2007-09-11",516.99,521.65,515.73,521.33,2703600,521.33],["2007-09-10",521.28,522.07,510.88,514.48,3225800,514.48],["2007-09-07",517.86,521.24,516.8,519.35,3663600,519.35],["2007-09-06",529.36,529.83,518.24,523.52,3625900,523.52],["2007-09-05",523.4,529.48,522.25,527.8,3312900,527.8],["2007-09-04",515.02,528,514.62,525.15,3693700,525.15],["2007-08-31",513.1,516.5,511.47,515.25,2977600,515.25],["2007-08-30",512.36,515.4,510.58,511.4,2651700,511.4],["2007-08-29",507.84,513.3,507.23,512.88,2549300,512.88],["2007-08-28",511.53,514.98,505.79,506.4,3273900,506.4],["2007-08-27",514.43,517.45,511.4,513.26,2325100,513.26],["2007-08-24",512.61,515.55,508.5,515,2472700,515],["2007-08-23",516,516.13,507,512.19,3076700,512.19],["2007-08-22",509.96,516.25,509.25,512.75,3252700,512.75],["2007-08-21",498.94,508.16,497.77,506.61,3610600,506.61],["2007-08-20",502.46,502.56,496,497.92,2697300,497.92],["2007-08-17",497.44,501,491.65,500.04,5479400,500.04],["2007-08-16",492.02,496.43,480.46,491.52,8645600,491.52],["2007-08-15",509,511.69,496.71,497.55,5409500,497.55],["2007-08-14",515.72,517.4,508,508.6,3633700,508.6],["2007-08-13",519.54,519.75,513.03,515.5,3179300,515.5],["2007-08-10",510.18,518.72,505.63,515.75,5875200,515.75],["2007-08-09",520.8,526.82,514.63,514.73,4846500,514.73],["2007-08-08",519.34,525.78,517.09,525.78,4068800,525.78],["2007-08-07",509.75,519.88,509.04,516.02,4264300,516.02],["2007-08-06",503,510.15,502.5,510,3651500,510],["2007-08-03",510.05,513.2,503,503,3176200,503],["2007-08-02",513.72,514.99,509,511.01,3154900,511.01],["2007-08-01",510.5,516.51,508.14,512.94,4421500,512.94],["2007-07-31",520.23,520.44,510,510,4270500,510],["2007-07-30",512.92,519.34,510.5,516.11,3963300,516.11],["2007-07-27",508.53,516.62,505.5,511.89,5509100,511.89],["2007-07-26",508.74,512.59,498.88,508,6883400,508],["2007-07-25",516.98,517.02,505.56,509.76,5545000,509.76],["2007-07-24",509.3,518.69,507.11,514,5572100,514],["2007-07-23",519.01,520,512.15,512.51,6356700,512.51],["2007-07-20",511.9,523.18,509.5,520.12,17772300,520.12],["2007-07-19",553.46,553.52,542.24,548.59,11127200,548.59],["2007-07-18",553.89,554.5,543.81,549.5,6080000,549.5],["2007-07-17",555.04,557.73,552.38,555,4328600,555],["2007-07-16",550.3,558.58,549.31,552.99,6599500,552.99],["2007-07-13",547.91,552.67,547.25,552.16,5237100,552.16],["2007-07-12",545.86,547.32,540.22,545.33,3441600,545.33],["2007-07-11",543.61,546.5,540.01,544.47,3309300,544.47],["2007-07-10",543.79,547,541.65,543.34,3856000,543.34],["2007-07-09",543,548.74,540.26,542.56,3729800,542.56],["2007-07-06",541.25,543.87,538.73,539.4,2747000,539.4],["2007-07-05",535.56,544.4,532.15,541.63,4942900,541.63],["2007-07-03",531.06,534.4,527.5,534.34,1871800,534.34],["2007-07-02",525.49,531.85,524.2,530.38,3487600,530.38],["2007-06-29",526.02,527.4,519.46,522.7,3880600,522.7],["2007-06-28",524.88,529.5,523.8,525.01,4168400,525.01],["2007-06-27",525,527.99,519.56,526.29,6123100,526.29],["2007-06-26",532.73,533.2,526.24,530.26,5689500,530.26],["2007-06-25",528.98,534.99,523.38,527.42,7925000,527.42],["2007-06-22",516.42,524.99,516.1,524.98,7203700,524.98],["2007-06-21",510.98,515.29,506.28,514.11,4409700,514.11],["2007-06-20",516.96,518.75,509.06,509.97,4338200,509.97],["2007-06-19",514.01,517.25,511.54,514.31,4355300,514.31],["2007-06-18",506.18,516,504.24,515.2,4835900,515.2],["2007-06-15",508.19,509,501.23,505.89,6174100,505.89],["2007-06-14",505.38,505.88,501.7,502.84,4621200,502.84],["2007-06-13",507.09,508.54,498.69,505.24,7034000,505.24],["2007-06-12",508.71,511.67,503.17,504.77,6419500,504.77],["2007-06-11",514.02,518.25,510,511.34,4647700,511.34],["2007-06-08",516.2,519.64,509.46,515.49,6358200,515.49],["2007-06-07",519.75,526.5,512.51,515.06,10630500,515.06],["2007-06-06",516.75,520.78,515.26,518.25,7886700,518.25],["2007-06-05",509.75,519,506.61,518.84,10447100,518.84],["2007-06-04",497.91,510.51,497.59,507.07,7101000,507.07],["2007-06-01",501,505.02,497.93,500.4,4799000,500.4],["2007-05-31",500.56,508.78,497.06,497.91,8924300,497.91],["2007-05-30",484.5,498.84,483,498.6,7245800,498.6],["2007-05-29",485,491.8,484,487.11,5218000,487.11],["2007-05-25",479.7,484.95,477.27,483.52,5348500,483.52],["2007-05-24",475.15,479.2,471.5,474.33,4173600,474.33],["2007-05-23",480.82,483.41,473.75,473.97,5060200,473.97],["2007-05-22",473,479.01,473,475.86,3839000,475.86],["2007-05-21",469.53,479.2,466.72,470.6,6159300,470.6],["2007-05-18",472.03,472.7,469.75,470.32,3695900,470.32],["2007-05-17",472.46,475.22,470.81,470.96,4660600,470.96],["2007-05-16",462,473.14,459.02,472.61,6554200,472.61],["2007-05-15",461.96,462.54,457.41,458,4119000,458],["2007-05-14",465.48,467.51,460,461.78,3872700,461.78],["2007-05-11",461.83,467,461,466.74,2944100,466.74],["2007-05-10",467.04,469.49,461.02,461.47,3686300,461.47],["2007-05-09",466.15,471.73,463.88,469.25,3889900,469.25],["2007-05-08",466.13,468.17,464.73,466.81,2905100,466.81],["2007-05-07",472.14,472.82,466.47,467.27,3020100,467.27],["2007-05-04",470.12,474.84,465.88,471.12,3950000,471.12],["2007-05-03",466.22,474.07,465.29,473.23,3594200,473.23],["2007-05-02",468.65,471.08,465.73,465.78,3062700,465.78],["2007-05-01",472.19,472.81,464.17,469,3658200,469],["2007-04-30",479.15,481.35,471.38,471.38,3641200,471.38],["2007-04-27",480.07,482.4,478.33,479.01,2925700,479.01],["2007-04-26",478.1,484.45,477.11,481.18,4124900,481.18],["2007-04-25",480,481.37,476.11,477.99,3966800,477.99],["2007-04-24",478.61,479.98,475.55,477.53,3694700,477.53],["2007-04-23",480.1,485,478.26,479.08,5674600,479.08],["2007-04-20",490.52,492.5,482.02,482.48,12161500,482.48],["2007-04-19",474.5,481.95,469.59,471.65,11009600,471.65],["2007-04-18",471.26,479.9,469.53,476.01,5670500,476.01],["2007-04-17",473.8,476.39,471.6,472.8,3210100,472.8],["2007-04-16",468.46,476.99,468.15,474.27,5077900,474.27],["2007-04-13",468.45,468.77,463.36,466.29,2794800,466.29],["2007-04-12",464,468,462.24,467.39,2707900,467.39],["2007-04-11",466.06,469.4,462.61,464.53,3812000,464.53],["2007-04-10",467.09,470.79,465.16,466.5,2979300,466.5],["2007-04-09",472.98,473,465.59,468.21,3062100,468.21],["2007-04-05",471.3,472.09,469.62,471.51,2715800,471.51],["2007-04-04",472.14,473,469.58,471.02,3778800,471.02],["2007-04-03",464.05,474.25,464,472.6,6501800,472.6],["2007-04-02",457.76,458.53,452.12,458.53,3448500,458.53],["2007-03-30",462.1,463.4,456.14,458.16,3380200,458.16],["2007-03-29",464.55,466,455,460.92,3988500,460.92],["2007-03-28",461.87,465.44,460.15,461.88,4591600,461.88],["2007-03-27",463.55,465.23,460.34,463.62,3741200,463.62],["2007-03-26",460.55,465,455.62,465,4710300,465],["2007-03-23",461.45,463.39,457.08,461.83,4111300,461.83],["2007-03-22",455.61,462.17,452.53,462.04,5680700,462.04],["2007-03-21",445.3,456.57,445.21,456.55,5798300,456.55],["2007-03-20",445.79,447.6,443.6,445.28,3421500,445.28],["2007-03-19",443.25,448.5,440.63,447.23,5197700,447.23],["2007-03-16",445.65,446.7,439.89,440.85,5659100,440.85],["2007-03-15",447.86,449.82,443.94,446.19,3944200,446.19],["2007-03-14",443.23,448.66,439,448,8016900,448],["2007-03-13",450.11,451.93,442.83,443.03,6377300,443.03],["2007-03-12",452.57,455.25,451.11,454.75,3465400,454.75],["2007-03-09",458,458.4,450.1,452.96,4977700,452.96],["2007-03-08",459.22,465.5,454.1,454.72,5362800,454.72],["2007-03-07",462.69,463.14,454.29,455.64,6534100,455.64],["2007-03-06",447.47,459,447.38,457.55,7533700,457.55],["2007-03-05",437.02,445.5,437,440.95,6355100,440.95],["2007-03-02",445.11,448.7,438.68,438.68,6583600,438.68],["2007-03-01",442.67,452.42,440,448.23,8685200,448.23],["2007-02-28",450.41,453.67,443.04,449.45,8032300,449.45],["2007-02-27",455,459.8,447.17,448.77,9312800,448.77],["2007-02-26",472.83,475.25,463.75,464.93,3969900,464.93],["2007-02-23",475.75,476.95,467.8,470.62,3882600,470.62],["2007-02-22",478.69,484.24,474.39,475.85,5743900,475.85],["2007-02-21",469.84,478.68,467.74,475.86,5640600,475.86],["2007-02-20",468.47,472.75,464.71,472.1,4067600,472.1],["2007-02-16",462.8,470.15,462.06,469.94,6177000,469.94],["2007-02-15",466,466.13,460.72,461.47,4042400,461.47],["2007-02-14",460,469.13,459.22,465.93,5698800,465.93],["2007-02-13",459.15,462.78,457.26,459.1,4062600,459.1],["2007-02-12",460.68,462.39,455.02,458.29,5754500,458.29],["2007-02-09",471.65,472.68,461.5,461.89,4858600,461.89],["2007-02-08",468.05,473.75,465.15,471.03,4076700,471.03],["2007-02-07",473.82,474.35,468.78,470.01,4119800,470.01],["2007-02-06",468.1,473.3,467.26,471.48,5321900,471.48],["2007-02-05",477.5,478,466.19,467.16,7206900,467.16],["2007-02-02",482.61,485,477.81,481.5,6286500,481.5],["2007-02-01",506,506.01,481.53,481.75,15658700,481.75],["2007-01-31",496.49,505,495.51,501.5,12206100,501.5],["2007-01-30",494,498,491.22,494.32,4180500,494.32],["2007-01-29",498,498.75,490.5,492.47,4775700,492.47],["2007-01-26",490.93,497.9,487.03,495.84,5496500,495.84],["2007-01-25",501,504.5,485.66,488.09,6368500,488.09],["2007-01-24",484.45,499.54,483.29,499.07,6059300,499.07],["2007-01-23",480.79,484.75,477.29,479.05,4665500,479.05],["2007-01-22",492.5,492.65,478.5,480.84,5404300,480.84],["2007-01-19",487.98,490.76,486.74,489.75,4978300,489.75],["2007-01-18",494.52,496.48,487.43,487.83,5932000,487.83],["2007-01-17",503.39,507.77,494.38,497.28,6699100,497.28],["2007-01-16",507.55,513,503.3,504.28,7568900,504.28],["2007-01-12",501.99,505,500,505,4473700,505],["2007-01-11",497.2,501.75,496.18,499.72,7208200,499.72],["2007-01-10",484.43,493.55,482.04,489.46,5968500,489.46],["2007-01-09",485.45,488.25,481.2,485.5,5381400,485.5],["2007-01-08",487.69,489.87,482.2,483.58,4754400,483.58],["2007-01-05",482.5,487.5,478.11,487.19,6872100,487.19],["2007-01-04",469,483.95,468.35,483.26,7887600,483.26],["2007-01-03",466,476.66,461.11,467.59,7706500,467.59],["2006-12-29",462.1,464.47,459.86,460.48,2559200,460.48],["2006-12-28",467.12,468.58,462.25,462.56,3116200,462.56],["2006-12-27",460,468.08,459.1,468.03,4231500,468.03],["2006-12-26",456.52,459.47,454.59,457.53,2074300,457.53],["2006-12-22",457.5,458.64,452.73,455.58,3988300,455.58],["2006-12-21",464.18,465.25,452.34,456.2,6953300,456.2],["2006-12-20",470,471.5,462.33,462.9,4367800,462.9],["2006-12-19",461.72,469.31,458.5,468.63,6587000,468.63],["2006-12-18",482.51,482.74,460.72,462.8,8016600,462.8],["2006-12-15",482.64,484.11,479.84,480.3,5190800,480.3],["2006-12-14",480.25,483.75,477.26,482.12,4748900,482.12],["2006-12-13",484.69,485.5,477.02,478.99,4662100,478.99],["2006-12-12",483.85,486.36,480.28,481.78,4181000,481.78],["2006-12-11",484.92,488.9,483.8,483.93,3263400,483.93],["2006-12-08",481.94,488.6,480,484.11,3974900,484.11],["2006-12-07",490.23,491.8,482.42,482.64,4664300,482.64],["2006-12-06",486.96,492.4,484.52,488.71,4450300,488.71],["2006-12-05",487.4,489.44,484.89,487,4103000,487],["2006-12-04",483,487.43,479.35,484.85,4899900,484.85],["2006-12-01",485.98,488.39,478.5,480.8,5631400,480.8],["2006-11-30",484.19,490.4,481.55,484.81,5577500,484.81],["2006-11-29",494.24,494.74,482.25,484.65,6315300,484.65],["2006-11-28",481.13,489.86,477.03,489.5,7797600,489.5],["2006-11-27",501.37,501.78,484.75,484.75,7324700,484.75],["2006-11-24",504.5,507.5,504,505,1732700,505],["2006-11-22",510.97,513,505.78,508.01,4500700,508.01],["2006-11-21",496.54,510,495.83,509.65,8427500,509.65],["2006-11-20",498.4,498.4,492.65,495.05,5124500,495.05],["2006-11-17",493.25,499.66,493,498.79,5511000,498.79],["2006-11-16",495,497.68,492.56,495.9,5092600,495.9],["2006-11-15",493.43,499.85,491.93,491.93,8370700,491.93],["2006-11-14",480.7,489.95,480.5,489.3,7223400,489.3],["2006-11-13",474.9,481.17,474.14,481.03,4341900,481.03],["2006-11-10",473.78,474.72,470.29,473.55,2796700,473.55],["2006-11-09",476.5,479.49,471.86,472.63,4879200,472.63],["2006-11-08",470.35,481.74,468.6,475,7965000,475],["2006-11-07",476.95,479.02,471.77,472.57,4897100,472.57],["2006-11-06",473.77,479.66,472.33,476.95,4991500,476.95],["2006-11-03",472.23,473.75,465.06,471.8,4907700,471.8],["2006-11-02",467.5,473.73,466.38,469.91,5236700,469.91],["2006-11-01",478.76,479.13,465.26,467.5,5426300,467.5],["2006-10-31",478.06,482.16,473.84,476.39,6285400,476.39],["2006-10-30",474.82,480.46,470.01,476.57,6563100,476.57],["2006-10-27",483.9,485.24,472.49,475.2,6604000,475.2],["2006-10-26",487.68,491.96,484.2,485.1,7031700,485.1],["2006-10-25",477.49,488.5,475.11,486.6,9187500,486.6],["2006-10-24",476.28,477.86,471.41,473.31,8660200,473.31],["2006-10-23",462.28,484.64,460.37,480.78,15104500,480.78],["2006-10-20",458.99,460.1,453.59,459.67,11647900,459.67],["2006-10-19",420.23,429.5,419.57,426.06,11503500,426.06],["2006-10-18",422.99,424.75,417.5,419.31,6017300,419.31],["2006-10-17",420.3,423.75,416.7,420.64,5211000,420.64],["2006-10-16",427.7,429.2,421.34,421.75,4319400,421.75],["2006-10-13",427.76,429.5,425.56,427.3,3622500,427.3],["2006-10-12",428.56,429.68,424,427.44,4844000,427.44],["2006-10-11",425.02,429.91,423.76,426.5,5635400,426.5],["2006-10-10",431.56,437.85,422.39,426.65,9788600,426.65],["2006-10-09",424.8,431.95,423.42,429,7583300,429],["2006-10-06",410.22,421.91,409.75,420.5,7336500,420.5],["2006-10-05",414.7,418.24,410.86,411.81,5789800,411.81],["2006-10-04",404.97,415.77,403.05,415.7,6661800,415.7],["2006-10-03",401.29,406.46,398.19,404.04,5464700,404.04],["2006-10-02",401.9,406,400.8,401.44,3651900,401.44],["2006-09-29",405.13,405.62,401.41,401.9,3310900,401.9],["2006-09-28",404.08,406.98,400.54,403.58,5107400,403.58],["2006-09-27",406.3,411.22,402.37,402.92,5876700,402.92],["2006-09-26",405.5,407.68,401.77,406.87,5289400,406.87],["2006-09-25",405.58,409.45,402.5,403.98,5737300,403.98],["2006-09-22",404.98,407.45,401.36,403.78,4649600,403.78],["2006-09-21",400.3,408.45,399.86,406.85,10692100,406.85],["2006-09-20",407.1,407.39,394.62,397,9147800,397],["2006-09-19",415.46,415.49,392.74,403.81,14292900,403.81],["2006-09-18",410,418.69,409.47,414.69,7106700,414.69],["2006-09-15",407.48,410.05,406.74,409.88,7838200,409.88],["2006-09-14",404.3,406.28,401.93,403.98,5366100,403.98],["2006-09-13",395.15,406.76,395.1,406.57,9768200,406.57],["2006-09-12",385,392.73,384.88,391.9,5442200,391.9],["2006-09-11",378.26,384.69,377.77,384.09,4529200,384.09],["2006-09-08",376.72,380.79,376.72,377.85,3083400,377.85],["2006-09-07",379.39,381.75,377.4,378.49,3842000,378.49],["2006-09-06",382.1,383.19,379.66,380.14,3724100,380.14],["2006-09-05",379.87,385.4,377.44,384.36,4074300,384.36],["2006-09-01",380.99,381.28,377.19,378.6,2672900,378.6],["2006-08-31",381.49,382.15,378.2,378.53,2959900,378.53],["2006-08-30",379.21,384.65,378.51,380.75,4044400,380.75],["2006-08-29",380.78,382.32,377.2,378.95,4460000,378.95],["2006-08-28",375.61,380.95,375,380.95,4164000,380.95],["2006-08-25",373.08,375.32,372.5,373.26,2466700,373.26],["2006-08-24",374.44,376.4,372.26,373.73,3482500,373.73],["2006-08-23",377.64,378.27,372.66,373.43,3642300,373.43],["2006-08-22",377.73,379.26,374.84,378.29,4164100,378.29],["2006-08-21",378.1,379,375.22,377.3,4023300,377.3],["2006-08-18",386.31,387.09,380.75,383.36,4952200,383.36],["2006-08-17",386.39,390,383.92,385.8,5080200,385.8],["2006-08-16",383.48,388.45,382.12,387.72,5853200,387.72],["2006-08-15",374.11,381.67,372.6,380.97,6698200,380.97],["2006-08-14",371.5,375.13,368.67,369.43,4968300,369.43],["2006-08-11",374.4,375.28,368,368.5,3766500,368.5],["2006-08-10",373.88,377.67,372.46,374.2,4261900,374.2],["2006-08-09",382.8,384.68,376.36,376.94,4311000,376.94],["2006-08-08",382.82,384.5,379.09,381,5743200,381],["2006-08-07",371.5,379.73,371.15,377.95,3946900,377.95],["2006-08-04",379.56,380.68,371.75,373.85,5095200,373.85],["2006-08-03",364.98,377.91,363.36,375.39,6327000,375.39],["2006-08-02",375.6,377.17,365.2,367.23,7097800,367.23],["2006-08-01",385.11,385.77,375.51,375.51,5463200,375.51],["2006-07-31",388,389.17,383.31,386.6,4595300,386.6],["2006-07-28",382,389.56,381.73,388.12,4083600,388.12],["2006-07-27",387.37,387.49,377.95,382.4,5641100,382.4],["2006-07-26",388.2,391.91,383,385.5,5531900,385.5],["2006-07-25",385.02,391.31,383.8,389.36,5761100,389.36],["2006-07-24",392.82,393.89,381.21,390.9,8086100,390.9],["2006-07-21",386.14,391.75,377.69,390.11,11754600,390.11],["2006-07-20",404.28,404.44,385.66,387.12,12538700,387.12],["2006-07-19",395.01,401.14,394.66,399,8518500,399],["2006-07-18",409.75,410.57,397.74,403.05,8536800,403.05],["2006-07-17",404.63,411,403.72,407.89,5811900,407.89],["2006-07-14",410.33,411.49,398.61,403.5,7552100,403.5],["2006-07-13",414,418.34,406.83,408.83,6924500,408.83],["2006-07-12",422.09,422.74,416.73,417.25,4906700,417.25],["2006-07-11",418.51,425.05,413.03,424.56,5971300,424.56],["2006-07-10",423.44,425.23,416.38,418.2,4436400,418.2],["2006-07-07",426.05,427.89,415.88,420.45,6041900,420.45],["2006-07-06",423.38,425.38,421.98,423.19,3687100,423.19],["2006-07-05",421.52,422.8,415.64,421.46,4985600,421.46],["2006-07-03",420.04,423.77,419.45,423.2,2156700,423.2],["2006-06-30",415.6,419.33,412.33,419.33,6258000,419.33],["2006-06-29",407.99,418.2,405.82,417.81,6658200,417.81],["2006-06-28",404.01,406.48,401.13,406.11,3710500,406.11],["2006-06-27",405.71,408,401.01,402.32,4107100,402.32],["2006-06-26",406.75,408.3,403.25,404.22,3551200,404.22],["2006-06-23",402.76,409.75,400.74,404.86,5314800,404.86],["2006-06-22",401.58,406,388,399.95,5911900,399.95],["2006-06-21",391.06,404,389.75,402.13,8744400,402.13],["2006-06-20",388.03,391.87,386.51,387.17,4039900,387.17],["2006-06-19",390.85,394.8,386.98,388.14,7633100,388.14],["2006-06-16",389.1,390.93,388,390.7,5304600,390.7],["2006-06-15",386.62,392.25,383,391,6785700,391],["2006-06-14",389.83,391.1,378.52,384.39,7772000,384.39],["2006-06-13",380.9,387,378.12,386.52,7659100,386.52],["2006-06-12",388.34,390.49,381,381.54,5019100,381.54],["2006-06-09",392.19,395.43,385.35,386.57,6157500,386.57],["2006-06-08",387.75,394.27,378.59,393.3,10359500,393.3],["2006-06-07",393.24,394.86,386.5,386.51,8911300,386.51],["2006-06-06",376.58,390,376.3,389.99,10259800,389.99],["2006-06-05",376.18,381.45,374.15,374.44,5558500,374.44],["2006-06-02",386.84,387.08,377.45,379.44,6386400,379.44],["2006-06-01",373.54,382.99,371.6,382.62,6278000,382.62],["2006-05-31",373.8,378.25,366.78,371.82,7981300,371.82],["2006-05-30",378.28,381,371.45,371.94,4316000,371.94],["2006-05-26",384.55,385.88,380.03,381.35,3667000,381.35],["2006-05-25",379.08,383,372.31,382.99,8194600,382.99],["2006-05-24",377.35,383.44,371.61,381.25,9553800,381.25],["2006-05-23",374.21,383.88,373.56,375.58,8983000,375.58],["2006-05-22",367.85,373.03,365.25,370.95,8604400,370.95],["2006-05-19",373.28,374.5,360.57,370.02,11398200,370.02],["2006-05-18",378.78,381.81,370.71,370.99,5835000,370.99],["2006-05-17",370.61,379.84,370.22,374.5,10643800,374.5],["2006-05-16",375.99,376.86,369.89,371.3,6491100,371.3],["2006-05-15",375.93,380.15,368.25,376.2,8590100,376.2],["2006-05-12",383.54,384.87,373.55,374.13,10087600,374.13],["2006-05-11",403.42,404.71,384.98,387,8892800,387],["2006-05-10",408.31,411.71,401.86,402.98,6187200,402.98],["2006-05-09",395.7,409,393.75,408.8,9140600,408.8],["2006-05-08",395.11,397.12,390.05,394.78,5118600,394.78],["2006-05-05",397.6,400.68,391.78,394.3,6065000,394.3],["2006-05-04",395.03,398.87,392.21,394.75,4652000,394.75],["2006-05-03",396.35,401.5,390.88,394.17,8072200,394.17],["2006-05-02",401.08,402.49,388.4,394.8,13104300,394.8],["2006-05-01",418.47,419.44,398.55,398.9,10361200,398.9],["2006-04-28",418.63,425.73,416.3,417.94,7421300,417.94],["2006-04-27",422.91,426.91,419.39,420.03,8337900,420.03],["2006-04-26",427.74,430.04,423.53,425.97,7277800,425.97],["2006-04-25",439.63,441.04,426,427.16,9569000,427.16],["2006-04-24",439.4,444.7,436.52,440.5,8836400,440.5],["2006-04-21",448.9,450.72,436.17,437.1,22551300,437.1],["2006-04-20",411.01,416,408.2,415,12271500,415],["2006-04-19",412.57,413.64,406.73,410.5,6781700,410.5],["2006-04-18",407.93,409.83,401.5,404.24,8137600,404.24],["2006-04-17",403.45,412.5,400.84,406.82,8259500,406.82],["2006-04-13",408.63,409.76,400.5,402.16,6552900,402.16],["2006-04-12",409,411.33,405.19,408.95,6017000,408.95],["2006-04-11",416.42,419.1,406.22,409.66,11107200,409.66],["2006-04-10",407.08,417.17,405.25,416.38,9320100,416.38],["2006-04-07",412.41,412.85,404.02,406.16,7025900,406.16],["2006-04-06",406.49,413.89,405.43,411.18,8598500,411.18],["2006-04-05",408.2,414.57,402.82,407.99,13410500,407.99],["2006-04-04",389.9,404.9,388.14,404.34,15715700,404.34],["2006-04-03",389.53,392.47,387.93,389.7,8122700,389.7],["2006-03-31",388.74,391.87,384.03,390,36521400,390],["2006-03-30",389.19,393.5,383.61,388.44,14711700,388.44],["2006-03-29",379.94,399,379.51,394.98,19027500,394.98],["2006-03-28",371.71,377.86,371.17,377.2,8945800,377.2],["2006-03-27",367.09,371.71,365,369.69,7023700,369.69],["2006-03-24",368.62,370.09,362.51,365.8,15180600,365.8],["2006-03-23",342.35,345.75,340.2,341.89,7434700,341.89],["2006-03-22",339.75,344.1,337.5,340.22,7596000,340.22],["2006-03-21",350.01,351.66,339.08,339.92,9831100,339.92],["2006-03-20",342.34,350.09,341.54,348.19,10407600,348.19],["2006-03-17",338.8,341.78,334.93,339.79,8551700,339.79],["2006-03-16",348.61,348.75,337.9,338.77,10016700,338.77],["2006-03-15",350.77,352.3,340.53,344.5,12768800,344.5],["2006-03-14",337.14,352.37,332.62,351.16,18450700,351.16],["2006-03-13",340.93,346.1,335.45,337.06,13642400,337.06],["2006-03-10",343.5,344.5,331.55,337.5,19325600,337.5],["2006-03-09",355.39,358.53,341.5,343,13910400,343],["2006-03-08",353.93,360.03,350.54,353.88,11745600,353.88],["2006-03-07",365.02,368.45,358.15,364.45,10378800,364.45],["2006-03-06",380.91,383.4,367.14,368.1,8939700,368.1],["2006-03-03",384.3,387.24,375.76,378.18,11962000,378.18],["2006-03-02",364.28,381.1,362.2,376.45,18330300,376.45],["2006-03-01",368.56,369.45,361.3,364.8,12061200,364.8],["2006-02-28",393.2,397.54,338.51,362.62,39437600,362.62],["2006-02-27",381.27,391.7,380.28,390.38,10212200,390.38],["2006-02-24",377.3,380.07,373.49,377.4,6484300,377.4],["2006-02-23",365.61,381.24,365.39,378.07,12551600,378.07],["2006-02-22",367.15,368.95,363.86,365.49,6476200,365.49],["2006-02-21",366.44,373.54,365.11,366.59,8686000,366.59],["2006-02-17",369.86,372.14,363.62,368.75,14320200,368.75],["2006-02-16",345.67,367,344.49,366.46,21315500,366.46],["2006-02-15",341.27,346,337.83,342.38,12947000,342.38],["2006-02-14",345.33,351.69,342.4,343.32,14654000,343.32],["2006-02-13",346.64,350.6,341.89,345.7,19717800,345.7],["2006-02-10",361.95,364.5,353.14,362.61,15223500,362.61],["2006-02-09",371.2,374.4,356.11,358.77,11912400,358.77],["2006-02-08",368.48,370.69,354.67,369.08,20804100,369.08],["2006-02-07",382.99,383.7,363.35,367.92,16630200,367.92],["2006-02-06",385.31,389.9,379.56,385.1,8940400,385.1],["2006-02-03",393.62,393.9,372.57,381.55,18281800,381.55],["2006-02-02",403.82,406.5,395.98,396.04,11807700,396.04],["2006-02-01",389.03,402,387.52,401.78,27122500,401.78],["2006-01-31",430.57,439.6,423.97,432.66,22066000,432.66],["2006-01-30",429.23,433.28,425,426.82,8588900,426.82],["2006-01-27",435,438.22,428.98,433.49,8452200,433.49],["2006-01-26",439.54,439.99,423.56,434.27,12926100,434.27],["2006-01-25",451.26,454.23,429.22,433,18739800,433],["2006-01-24",436.03,444.95,434.48,443.03,15464600,443.03],["2006-01-23",407.38,428.39,405.73,427.5,22741400,427.5],["2006-01-20",438.7,440.03,394.74,399.46,41116700,399.46],["2006-01-19",451.17,453.49,433,436.45,14537300,436.45],["2006-01-18",447.3,457.36,443.25,444.91,20485700,444.91],["2006-01-17",463.06,469.9,462.53,467.11,8270300,467.11],["2006-01-13",464.31,466.89,461.61,466.25,7656600,466.25],["2006-01-12",473.72,474.99,461.5,463.63,10125300,463.63],["2006-01-11",471.27,475.11,469.18,471.63,9007400,471.63],["2006-01-10",464.42,470.25,462.04,469.76,9097100,469.76],["2006-01-09",466.41,473.4,460.94,466.9,12791900,466.9],["2006-01-06",456.87,470.5,453.24,465.66,17756900,465.66],["2006-01-05",446,451.55,441.5,451.24,10808300,451.24],["2006-01-04",443.9,448.96,439.75,445.24,15286400,445.24],["2006-01-03",422.52,435.67,418.22,435.23,13121200,435.23],["2005-12-30",417.27,418.21,413.74,414.86,7587100,414.86],["2005-12-29",427.98,428.73,419.17,420.15,6945800,420.15],["2005-12-28",424.34,427.78,421.26,426.69,7117900,426.69],["2005-12-27",431.86,431.86,422.76,424.64,6702800,424.64],["2005-12-23",432.15,432.5,428.78,430.93,4595100,430.93],["2005-12-22",431.77,432.86,425.93,432.04,7546600,432.04],["2005-12-21",433.55,436.86,420.71,426.33,11221900,426.33],["2005-12-20",427.86,432.2,424.67,429.74,10084700,429.74],["2005-12-19",432.2,446.21,420.11,424.6,21936800,424.6],["2005-12-16",425.34,432.5,422.75,430.15,16330500,430.15],["2005-12-15",419.11,423.14,416.5,422.55,6045800,422.55],["2005-12-14",417.04,419.73,415.49,418.96,6630400,418.96],["2005-12-13",412.5,418,411.64,417.49,8157000,417.49],["2005-12-12",414.63,415.21,409.95,412.61,6950100,412.61],["2005-12-09",415,415.78,408.56,409.2,7643400,409.2],["2005-12-08",405.3,410.65,402.64,410.65,8910100,410.65],["2005-12-07",406.16,406.7,399.01,404.22,11665900,404.22],["2005-12-06",408.7,416.41,401.7,404.54,15114700,404.54],["2005-12-05",417,417.5,404.28,405.85,10289400,405.85],["2005-12-02",416.94,419.53,413.86,417.7,7543500,417.7],["2005-12-01",409.2,415.44,408.29,414.09,9744900,414.09],["2005-11-30",404.26,408.45,395.56,404.91,15596600,404.91],["2005-11-29",424.46,426.4,402.14,403.54,21495800,403.54],["2005-11-28",429.82,431.24,422.44,423.48,11008400,423.48],["2005-11-25",425.78,428.75,425.3,428.62,4840100,428.62],["2005-11-23",417.04,424.72,415.78,422.86,10085000,422.86],["2005-11-22",408.65,417.31,406.23,416.47,9596000,416.47],["2005-11-21",399.17,409.98,393.49,409.36,10335100,409.36],["2005-11-18",403.49,404.5,399.85,400.21,7025700,400.21],["2005-11-17",401.8,403.81,399.53,403.45,9212200,403.45],["2005-11-16",396.2,398.85,394.11,398.15,8695200,398.15],["2005-11-15",394.38,397,390.95,392.8,8624900,392.8],["2005-11-14",392.12,398.22,391.53,396.97,7807900,396.97],["2005-11-11",395.12,396.9,388.85,390.4,7063900,390.4],["2005-11-10",378.36,391.35,377.43,391.1,9128700,391.1],["2005-11-09",386.67,388.29,378.03,379.15,10466900,379.15],["2005-11-08",394.25,395.59,388.58,389.9,7897500,389.9],["2005-11-07",395.1,397.47,392.15,395.03,9591500,395.03],["2005-11-04",389.98,391.79,385.45,390.43,8824900,390.43],["2005-11-03",382.41,386.58,381.38,385.95,7448400,385.95],["2005-11-02",381.7,385,377.17,379.68,10565400,379.68],["2005-11-01",371.86,383.9,369.01,379.38,16356100,379.38],["2005-10-31",360.24,374.75,359.51,372.14,14342900,372.14],["2005-10-28",355.27,358.95,355.02,358.17,5903500,358.17],["2005-10-27",356.6,357.09,351.68,353.06,5134400,353.06],["2005-10-26",346.28,356,346.19,355.44,8907500,355.44],["2005-10-25",345.78,347.4,342.86,346.91,6878300,346.91],["2005-10-24",343.37,349.3,342.19,348.65,9431700,348.65],["2005-10-21",345.8,346.43,333,339.9,22892400,339.9],["2005-10-20",309.99,311.13,301.21,303.2,13911700,303.2],["2005-10-19",304,309.87,303.96,308.7,7010700,308.7],["2005-10-18",304.96,307.96,302.74,303.28,7077800,303.28],["2005-10-17",297.5,305.2,294.56,305,7566700,305],["2005-10-14",299.9,300.23,292.54,296.14,8519100,296.14],["2005-10-13",302,302,290.68,297.44,10567700,297.44],["2005-10-12",305.2,307.19,299,300.97,9306200,300.97],["2005-10-11",310.61,312.65,304.86,306.1,8542600,306.1],["2005-10-10",313.31,314.82,309.15,310.65,5572200,310.65],["2005-10-07",314.79,316.67,310.54,312.99,6770300,312.99],["2005-10-06",314.14,314.48,310.09,312.75,7993800,312.75],["2005-10-05",312.69,314.9,308,310.71,8328400,310.71],["2005-10-04",319.95,321.28,310.74,311,9144300,311],["2005-10-03",313.63,320.11,312.79,318.68,9160300,318.68],["2005-09-30",314.22,317.5,312.29,316.46,9151300,316.46],["2005-09-29",306.68,310.72,306.08,309.62,5613800,309.62],["2005-09-28",314.22,315.1,305.6,306,7997400,306],["2005-09-27",314.95,318.41,313.38,313.94,6873100,313.94],["2005-09-26",319.5,320.95,312.56,314.28,9894400,314.28],["2005-09-23",313,317.21,312.59,315.36,8483800,315.36],["2005-09-22",311.5,319.22,310.17,311.37,13006400,311.37],["2005-09-21",308.41,313.76,305.96,311.9,10119700,311.9],["2005-09-20",306.15,311.3,305.23,307.91,9351000,307.91],["2005-09-19",301,306,300.71,303.79,5761900,303.79],["2005-09-16",304.02,304.5,299.87,300.2,7579800,300.2],["2005-09-15",299.52,306.75,297.91,302.62,15466200,302.62],["2005-09-14",308.73,313.28,300.3,303,11275800,303],["2005-09-13",309,315.53,306.17,311.68,10299900,311.68],["2005-09-12",301.75,311.42,301,309.74,10386500,309.74],["2005-09-09",297.28,299.1,296.56,299.09,4390500,299.09],["2005-09-08",294.83,299.28,293.36,295.39,6613300,295.39],["2005-09-07",285.89,295.5,285.28,294.87,7499500,294.87],["2005-09-06",289,289.39,286.8,287.11,4212300,287.11],["2005-09-02",286.51,289.99,286.44,288.45,3434500,288.45],["2005-09-01",285.91,287.5,285,286.25,2742100,286.25],["2005-08-31",288.23,288.5,284.36,286,5034000,286],["2005-08-30",287.39,289.51,285.88,287.27,4792000,287.27],["2005-08-29",282.24,289.12,282.24,288.45,5903000,288.45],["2005-08-26",283.48,285.02,282.66,283.58,3755300,283.58],["2005-08-25",282.55,284,279.97,282.59,4376600,282.59],["2005-08-24",277.57,284.75,276.45,282.57,8593100,282.57],["2005-08-23",276.16,279.74,274.12,279.58,5821700,279.58],["2005-08-22",281.24,281.47,273.35,274.01,6813000,274.01],["2005-08-19",280.99,281.45,279.62,280,5542900,280],["2005-08-18",275.91,280.5,275,279.99,11872800,279.99],["2005-08-17",285.51,286.57,284,285.1,3883300,285.1],["2005-08-16",284.88,287.79,283.34,285.65,7109200,285.65],["2005-08-15",289.8,292.77,283.77,284,8174700,284],["2005-08-12",283.36,290.2,281.64,289.72,6585900,289.72],["2005-08-11",285.89,286.58,280.62,284.05,7514900,284.05],["2005-08-10",291.3,292.33,284.88,285.68,6879000,285.68],["2005-08-09",291.96,292.68,288.51,291.57,5779300,291.57],["2005-08-08",293.6,295.65,290.49,291.25,4481800,291.25],["2005-08-05",297.5,298.51,291.31,292.35,5939700,292.35],["2005-08-04",295.55,299,295.25,297.73,5236500,297.73],["2005-08-03",298,299.72,295.6,297.3,5930600,297.3],["2005-08-02",291.6,299.52,291.12,299.19,7290200,299.19],["2005-08-01",288.12,292.5,288.1,291.61,5662400,291.61],["2005-07-29",292.14,292.84,286.99,287.76,8363300,287.76],["2005-07-28",297.41,297.41,293.28,293.5,5925600,293.5],["2005-07-27",297.74,298.23,292.4,296.93,7217900,296.93],["2005-07-26",295.01,298,292.09,296.09,9816900,296.09],["2005-07-25",302.39,303.29,294.96,295.85,9658800,295.85],["2005-07-22",306.37,309.25,296.33,302.4,23386800,302.4],["2005-07-21",314.05,317.8,311.21,313.94,19789400,313.94],["2005-07-20",305.57,312.61,301.8,312,14310400,312],["2005-07-19",302.1,310.35,301.8,309.9,12621400,309.9],["2005-07-18",300,301.9,297.75,299.54,6207800,299.54],["2005-07-15",301.24,303.4,299.78,301.19,8438400,301.19],["2005-07-14",305.34,306.75,300.07,300.89,10667700,300.89],["2005-07-13",292.51,299.24,292.1,298.86,11437900,298.86],["2005-07-12",293.39,294.4,290.93,291.78,5864900,291.78],["2005-07-11",296.4,296.6,291.02,293.35,8390300,293.35],["2005-07-08",296.25,297.5,294.05,296.23,7457600,296.23],["2005-07-07",289.39,295.8,288.51,295.54,10672100,295.54],["2005-07-06",297.3,297.6,291.38,291.52,8000300,291.52],["2005-07-05",292.1,295.98,290.23,295.71,7494000,295.71],["2005-07-01",295.04,296.24,289.22,291.25,9227600,291.25],["2005-06-30",294.34,298.93,291.04,294.15,15094400,294.15],["2005-06-29",302.5,304.38,292.15,292.72,18298700,292.72],["2005-06-28",306.28,309.25,302,302,19036500,302],["2005-06-27",298.9,304.47,293.86,304.1,17802900,304.1],["2005-06-24",290.9,298,289.58,297.25,17771200,297.25],["2005-06-23",288,294.81,286.5,289.71,14056400,289.71],["2005-06-22",289.67,292.32,288.67,289.3,10474000,289.3],["2005-06-21",288.07,290.3,284.97,287.84,15132300,287.84],["2005-06-20",276.09,287.67,271.73,286.7,21024700,286.7],["2005-06-17",279,280.3,275.9,280.3,10434400,280.3],["2005-06-16",274.26,278.3,273.07,277.44,12462400,277.44],["2005-06-15",275,277.3,267.43,274.8,20883100,274.8],["2005-06-14",278.59,281.24,277.75,278.35,10091900,278.35],["2005-06-13",279.82,284.19,276.52,282.75,12803200,282.75],["2005-06-10",286.99,287.28,280.02,282.5,12696600,282.5],["2005-06-09",284.72,288.5,280.56,286.31,16441100,286.31],["2005-06-08",292.85,293.19,278,279.56,25700900,279.56],["2005-06-07",297.1,299.59,290.3,293.12,24323000,293.12],["2005-06-06",282.39,293.75,281.83,290.94,22525900,290.94],["2005-06-03",286.79,289.3,277.41,280.26,18782300,280.26],["2005-06-02",288.73,289.78,284.6,287.9,17974100,287.9],["2005-06-01",283.2,292.89,282.02,288,35191700,288],["2005-05-31",269.43,278.4,269.37,277.27,22236800,277.27],["2005-05-27",260.46,266.05,259.25,266,12184100,266],["2005-05-26",260.96,263.76,258.3,259.2,13546600,259.2],["2005-05-25",252.73,260.98,250.63,260.81,18057900,260.81],["2005-05-24",256.96,265.44,253.5,256,29043100,256],["2005-05-23",243.16,258.1,242.71,255.45,21388300,255.45],["2005-05-20",241.21,241.67,239.65,241.61,8163500,241.61],["2005-05-19",240.34,241.17,238.27,239.18,9716500,239.18],["2005-05-18",233.61,239.97,233.52,239.16,12312000,239.16],["2005-05-17",230.56,233.45,230.2,233.13,7808900,233.13],["2005-05-16",229.68,231.62,228.57,231.05,5681400,231.05],["2005-05-13",229.18,231.09,227.32,229.24,7415500,229.24],["2005-05-12",230.81,232.23,228.2,228.72,8948200,228.72],["2005-05-11",228.97,231.98,227.93,231.29,11478800,231.29],["2005-05-10",225.47,227.8,224.72,227.8,6345800,227.8],["2005-05-09",228,228.5,225.43,226.02,5536800,226.02],["2005-05-06",228.4,229.25,226.47,228.02,6763900,228.02],["2005-05-05",228.62,228.62,225.88,226.98,7509600,226.98],["2005-05-04",227.23,229.88,227,228.5,12083500,228.5],["2005-05-03",221.85,228.15,221.32,226.19,17780200,226.19],["2005-05-02",222.05,223.7,220.21,222.29,9767400,222.29],["2005-04-29",221.91,222.25,217.82,220,9170200,220],["2005-04-28",219.5,222.08,217.71,219.45,8682800,219.45],["2005-04-27",217.99,220.85,216.74,219.78,10264800,219.78],["2005-04-26",220.22,222,218.29,218.75,17272000,218.75],["2005-04-25",217.82,224.74,217.52,223.53,19840000,223.53],["2005-04-22",222.9,224,214.26,215.81,33205100,215.81],["2005-04-21",200.42,205,199.32,204.22,17751900,204.22],["2005-04-20",198.58,200.5,195.91,198.1,15451500,198.1],["2005-04-19",189.33,192,188.03,191.4,8430000,191.4],["2005-04-18",184.58,187.88,183.49,186.97,6550300,186.97],["2005-04-15",190.1,190.34,184.66,185,11577400,185],["2005-04-14",193.27,194.36,190.1,191.45,6152700,191.45],["2005-04-13",193.47,194.32,189.73,192.93,6555800,192.93],["2005-04-12",193,194.42,189.41,193.96,7319600,193.96],["2005-04-11",193.09,194.8,192.32,193.23,5410500,193.23],["2005-04-08",193.69,195.1,191.45,192.05,5116600,192.05],["2005-04-07",188.78,194.62,188.64,193.76,9692200,193.76],["2005-04-06",189.24,189.65,187.58,189.22,5252600,189.22],["2005-04-05",187.73,190.26,187.57,188.57,8736700,188.57],["2005-04-04",179.95,185.32,179.84,185.29,8076400,185.29],["2005-04-01",181.76,182.95,179.99,180.04,6182000,180.04],["2005-03-31",177.95,181.39,177.64,180.51,6768600,180.51],["2005-03-30",180.64,181.45,179.6,180.45,6236100,180.45],["2005-03-29",181.05,183.28,178.07,179.57,6473000,179.57],["2005-03-28",181.68,184.8,180.95,181.42,8738000,181.42],["2005-03-24",180.7,180.86,179.2,179.25,3705200,179.25],["2005-03-23",177.97,180.24,177.97,178.98,4845000,178.98],["2005-03-22",181.18,181.94,177.85,178.6,5631700,178.6],["2005-03-21",179.27,182.17,177.25,180.88,7483700,180.88],["2005-03-18",178.81,180.4,178.31,180.04,7090000,180.04],["2005-03-17",177.13,179.64,175.8,179.29,8260600,179.29],["2005-03-16",176.7,178.61,175.01,175.6,7106300,175.6],["2005-03-15",175.3,180,174.21,178.61,10422100,178.61],["2005-03-14",178.33,178.4,172.57,174.99,11146600,174.99],["2005-03-11",180.44,180.95,177.15,177.8,8028300,177.8],["2005-03-10",181.01,181.2,177.4,179.98,10960500,179.98],["2005-03-09",184.21,184.65,180.16,181.35,11360400,181.35],["2005-03-08",189.1,189.85,184.97,185.2,8046100,185.2],["2005-03-07",187.78,189.6,187.03,188.81,8667400,188.81],["2005-03-04",186.7,187.25,185.07,185.9,6774100,185.9],["2005-03-03",186.13,187.75,184.31,187.01,7608600,187.01],["2005-03-02",185.95,187.67,184.36,185.18,7285500,185.18],["2005-03-01",189.29,189.75,182,186.06,9311200,186.06],["2005-02-28",186,189.87,185.85,187.99,7818400,187.99],["2005-02-25",189.15,189.92,185.51,185.87,9973500,185.87],["2005-02-24",183.37,189.85,182.23,188.89,25814300,188.89],["2005-02-23",193.3,194.48,188.66,193.95,15586000,193.95],["2005-02-22",196.5,198.9,190.39,191.37,13483700,191.37],["2005-02-18",198.51,198.84,196.66,197.95,8485900,197.95],["2005-02-17",197.83,199.75,196.81,197.9,10414400,197.9],["2005-02-16",194.7,199.33,194.3,198.41,16532300,198.41],["2005-02-15",193.6,199.84,193.08,195.23,25782800,195.23],["2005-02-14",182.85,193.08,181,192.99,38562200,192.99],["2005-02-11",186.66,192.32,186.07,187.4,13116000,187.4],["2005-02-10",191.97,192.21,185.25,187.98,18982700,187.98],["2005-02-09",200.76,201.6,189.46,191.58,17171500,191.58],["2005-02-08",196.96,200.02,194.53,198.64,11480000,198.64],["2005-02-07",205.26,206.4,195.51,196.03,12960400,196.03],["2005-02-04",206.47,207.75,202.6,204.36,14819300,204.36],["2005-02-03",205.99,213.37,205.81,210.86,12988100,210.86],["2005-02-02",215.55,216.8,203.66,205.96,32799300,205.96],["2005-02-01",194.38,196.66,190.63,191.9,18839000,191.9],["2005-01-31",193.69,196.36,191.72,195.62,9596700,195.62],["2005-01-28",190.02,194.7,186.34,190.34,12208200,190.34],["2005-01-27",188.76,188.86,185.2,188.08,6627400,188.08],["2005-01-26",179.27,189.41,179.15,189.24,12307900,189.24],["2005-01-25",181.94,182.24,176.29,177.12,10659200,177.12],["2005-01-24",188.69,189.33,180.32,180.72,14022700,180.72],["2005-01-21",194.54,195.36,188.12,188.28,9258400,188.28],["2005-01-20",192.5,196.25,192,193.92,9001600,193.92],["2005-01-19",204.65,205.3,196.71,197.3,11257700,197.3],["2005-01-18",200.97,205.02,198.66,203.9,13172600,203.9],["2005-01-14",196,200.01,194.13,199.97,9640300,199.97],["2005-01-13",195.38,197.39,194.05,195.33,6849400,195.33],["2005-01-12",194.33,195.93,190.5,195.38,8177800,195.38],["2005-01-11",195.62,197.71,193.18,193.54,6958700,193.54],["2005-01-10",194.5,198.1,191.83,195.06,7539600,195.06],["2005-01-07",190.64,194.25,188.78,193.85,9662900,193.85],["2005-01-06",195.08,195.9,187.72,188.55,10387100,188.55],["2005-01-05",193.45,196.9,192.23,193.51,8236600,193.51],["2005-01-04",201.4,202.93,193.48,194.5,13755900,194.5],["2005-01-03",197.4,203.64,195.46,202.71,15844200,202.71],["2004-12-31",199.23,199.88,192.56,192.79,7668500,192.79],["2004-12-30",192.97,198.23,191.85,197.6,5904300,197.6],["2004-12-29",191.78,193.52,191.78,192.9,2678100,192.9],["2004-12-28",192.11,193.55,191.01,192.76,4145800,192.76],["2004-12-27",189.15,193.3,189.1,191.91,6104100,191.91],["2004-12-23",187.45,188.6,186,187.9,3614600,187.9],["2004-12-22",183.9,186.85,183.01,186.3,3907000,186.3],["2004-12-21",186.31,187.88,183.4,183.75,5516300,183.75],["2004-12-20",182,188.46,181.87,185.02,9834500,185.02],["2004-12-17",176.76,180.5,176.55,180.08,7386200,180.08],["2004-12-16",176.95,180.49,175.95,176.47,8572800,176.47],["2004-12-15",177.99,180.69,176.66,179.78,11471000,179.78],["2004-12-14",171,178.82,169.6,178.69,11088400,178.69],["2004-12-13",172.17,173.18,169.45,170.45,4818600,170.45],["2004-12-10",173.43,174.88,171.29,171.65,4317200,171.65],["2004-12-09",170.25,173.5,168.47,173.43,7654000,173.43],["2004-12-08",170.35,173.68,168.73,169.98,7541800,169.98],["2004-12-07",176,176.2,170.55,171.43,6870900,171.43],["2004-12-06",179.13,180.7,176.02,176.29,6254000,176.29],["2004-12-03",179.95,181.06,177.6,180.4,5869200,180.4],["2004-12-02",179.9,181.51,178.55,179.4,6260900,179.4],["2004-12-01",181.95,182.5,179.55,179.96,7864100,179.96],["2004-11-30",180.71,183,180.25,181.98,7700000,181.98],["2004-11-29",180.36,182.95,177.51,181.05,10666600,181.05],["2004-11-26",175.8,180.03,175.32,179.39,6480100,179.39],["2004-11-24",174.82,177.21,172.51,174.76,15281000,174.76],["2004-11-23",167.97,170.83,166.5,167.52,12413300,167.52],["2004-11-22",164.47,169.5,161.31,165.1,12368200,165.1],["2004-11-19",169.1,169.98,166.52,169.4,8769300,169.4],["2004-11-18",170.29,174.42,165.73,167.54,16629600,167.54],["2004-11-17",169.02,177.5,169,172.5,18132900,172.5],["2004-11-16",177.5,179.47,170.83,172.54,20917400,172.54],["2004-11-15",180.45,188.32,178.75,184.87,11901500,184.87],["2004-11-12",185.23,189.8,177.4,182,16746100,182],["2004-11-11",169.13,183.75,167.57,183.02,14985500,183.02],["2004-11-10",170.67,172.52,166.33,167.86,10644000,167.86],["2004-11-09",174.1,175.2,165.27,168.7,11064200,168.7],["2004-11-08",170.93,175.44,169.4,172.55,11191800,172.55],["2004-11-05",181.98,182.3,168.55,169.35,19833100,169.35],["2004-11-04",188.44,190.4,183.35,184.7,14409600,184.7],["2004-11-03",198.18,201.6,190.75,191.67,13888700,191.67],["2004-11-02",198.78,199.25,193.34,194.87,11346300,194.87],["2004-11-01",193.55,197.67,191.27,196.03,12224900,196.03],["2004-10-29",198.89,199.95,190.6,190.64,21162500,190.64],["2004-10-28",186.68,194.39,185.6,193.3,14846800,193.3],["2004-10-27",182.72,189.52,181.77,185.97,13356500,185.97],["2004-10-26",186.34,192.64,180,181.8,22307100,181.8],["2004-10-25",176.4,194.43,172.55,187.4,32764200,187.4],["2004-10-22",170.54,180.17,164.08,172.43,36891900,172.43],["2004-10-21",144.4,150.13,141.62,149.38,14589500,149.38],["2004-10-20",148.03,148.99,139.6,140.49,11372700,140.49],["2004-10-19",150.5,152.4,147.35,147.94,9064000,147.94],["2004-10-18",143.2,149.2,141.21,149.16,7025200,149.16],["2004-10-15",144.93,145.5,141.95,144.11,6604000,144.11],["2004-10-14",141.01,142.38,138.56,142,5226300,142],["2004-10-13",143.32,143.55,140.08,140.9,9893000,140.9],["2004-10-12",134.44,137.61,133.4,137.4,5838600,137.4],["2004-10-11",137,138.86,133.85,135.26,5241300,135.26],["2004-10-08",138.72,139.68,137.02,137.73,5540300,137.73],["2004-10-07",136.92,139.88,136.55,138.85,7064600,138.85],["2004-10-06",137.55,138.45,136,137.08,6697400,137.08],["2004-10-05",134.66,138.53,132.24,138.37,7494100,138.37],["2004-10-04",135.25,136.87,134.03,135.06,6517900,135.06],["2004-10-01",130.8,134.24,128.9,132.58,7570000,132.58],["2004-09-30",129.9,132.3,129,129.6,6885900,129.6],["2004-09-29",126.7,135.02,126.23,131.08,15273500,131.08],["2004-09-28",121.3,127.4,120.21,126.86,8473000,126.86],["2004-09-27",119.56,120.88,117.8,118.26,3536600,118.26],["2004-09-24",120.94,124.1,119.76,119.83,4566300,119.83],["2004-09-23",118.84,122.63,117.02,120.82,4272100,120.82],["2004-09-22",117.4,119.67,116.81,118.38,3794400,118.38],["2004-09-21",119.81,120.42,117.51,117.84,3618000,117.84],["2004-09-20",116.95,121.6,116.77,119.36,5319700,119.36],["2004-09-17",114.42,117.49,113.55,117.49,4741000,117.49],["2004-09-16",112.34,115.8,111.65,113.97,4637800,113.97],["2004-09-15",110.56,114.23,110.2,112,5361900,112],["2004-09-14",107.45,112,106.79,111.49,5419900,111.49],["2004-09-13",106.63,108.41,106.46,107.5,3926000,107.5],["2004-09-10",101.6,106.56,101.3,105.33,4353800,105.33],["2004-09-09",102.53,102.71,101,102.31,2032900,102.31],["2004-09-08",100.74,103.03,100.5,102.3,2495300,102.3],["2004-09-07",101.01,102,99.61,101.58,2926700,101.58],["2004-09-03",100.95,101.74,99.32,100.01,2578800,100.01],["2004-09-02",99.19,102.37,98.94,101.51,7566900,101.51],["2004-09-01",102.7,102.97,99.67,100.25,4573700,100.25],["2004-08-31",102.3,103.71,102.16,102.37,2461400,102.37],["2004-08-30",105.28,105.49,102.01,102.01,2601000,102.01],["2004-08-27",108.1,108.62,105.69,106.15,3109000,106.15],["2004-08-26",104.95,107.95,104.66,107.91,3551000,107.91],["2004-08-25",104.96,108,103.88,106,4598900,106],["2004-08-24",111.24,111.6,103.57,104.87,7631300,104.87],["2004-08-23",110.75,113.48,109.05,109.4,9137200,109.4],["2004-08-20",101.01,109.08,100.5,108.31,11428600,108.31],["2004-08-19",100,104.06,95.96,100.34,22351900,100.34]]; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/zoom1.html b/wqflask/wqflask/static/packages/jqplot/examples/zoom1.html
new file mode 100644
index 00000000..5808fb16
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/zoom1.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Zooming</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="waterfall2.html">Previous</a> <a href="./">Examples</a> <a href="zoomOptions.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <style type="text/css">
+ .jqplot-cursor-legend {
+ width: 160px;
+ font-family: "Courier New";
+ font-size: 0.85em;
+ }
+
+ td.jqplot-cursor-legend-swatch {
+ width: 1.3em;
+ }
+ </style>
+
+
+
+ <div id="chart1" style="height:200px; width:600px;"></div>
+ <div id="chart2" style="height:500px; width:600px;"></div>
+
+
+<script type="text/javascript" class="code">
+$(document).ready(function(){
+ goog = [["6/22/2009",425.32], ["6/8/2009",424.84], ["5/26/2009",417.23], ["5/11/2009",390],
+ ["4/27/2009",393.69], ["4/13/2009",392.24], ["3/30/2009",369.78], ["3/16/2009",330.16], ["3/2/2009",308.57],
+ ["2/17/2009",346.45], ["2/2/2009",371.28], ["1/20/2009",324.7], ["1/5/2009",315.07], ["12/22/2008",300.36],
+ ["12/8/2008",315.76], ["11/24/2008",292.96], ["11/10/2008",310.02], ["10/27/2008",359.36], ["10/13/2008",372.54],
+ ["9/29/2008",386.91], ["9/15/2008",449.15], ["9/2/2008",444.25], ["8/25/2008",463.29], ["8/11/2008",510.15],
+ ["7/28/2008",467.86], ["7/14/2008",481.32], ["6/30/2008",537], ["6/16/2008",546.43], ["6/2/2008",567],
+ ["5/19/2008",544.62], ["5/5/2008",573.2], ["4/21/2008",544.06], ["4/7/2008",457.45], ["3/24/2008",438.08],
+ ["3/10/2008",437.92], ["2/25/2008",471.18], ["2/11/2008",529.64], ["1/28/2008",515.9], ["1/14/2008",600.25],
+ ["12/31/2007",657], ["12/17/2007",696.69], ["12/3/2007",714.87], ["11/19/2007",676.7], ["11/5/2007",663.97],
+ ["10/22/2007",674.6], ["10/8/2007",637.39], ["9/24/2007",567.27], ["9/10/2007",528.75], ["8/27/2007",515.25]];
+
+ var plot1 = $.jqplot('chart1', [goog], {
+ title: 'Google, Inc.',
+ series: [{
+ label: 'Google, Inc.',
+ neighborThreshold: -1
+ }],
+ axes: {
+ xaxis: {
+ renderer:$.jqplot.DateAxisRenderer,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ angle: -30
+ }
+ },
+ yaxis: {
+ renderer: $.jqplot.LogAxisRenderer,
+ tickOptions:{ prefix: '$' }
+ }
+ },
+ cursor:{
+ show: true,
+ zoom: true
+ }
+ });
+});
+</script>
+
+<script type="text/javascript" class="code">
+$(document).ready(function(){
+ plot2 = $.jqplot('chart2', [goog], {
+ title: 'Google, Inc.',
+ series: [{
+ label: 'Google, Inc.',
+ neighborThreshold: -1
+ }],
+ axes: {
+ xaxis: {
+ renderer:$.jqplot.DateAxisRenderer,
+ tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+ tickOptions: {
+ angle: -30
+ }
+ },
+ yaxis: {
+ renderer: $.jqplot.LogAxisRenderer,
+ tickOptions:{ prefix: '$' }
+ }
+ },
+ cursor:{
+ show: true,
+ zoom: true
+ }
+ });
+});
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+ <script class="include" type="text/javascript" src="../plugins/jqplot.cursor.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.logAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/zoomOptions.html b/wqflask/wqflask/static/packages/jqplot/examples/zoomOptions.html
new file mode 100644
index 00000000..ace74b43
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/zoomOptions.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Zoom Options</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="zoom1.html">Previous</a> <a href="./">Examples</a> <a href="zoomProxy.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+ <style type="text/css" media="screen">
+ .jqplot-axis {
+ font-size: 0.85em;
+ }
+ .jqplot-axis{
+ font-size: 0.75em;
+ }
+ </style>
+
+<p>Zooming has been enhanced to maintain plot zoom while the mouse moves over the entire document, not just the plot. Two new options have been added to the cursor plugin to further enhance zooming:</p>
+
+<dl>
+ <dt>constrainOutsideZoom</dt>
+ <dd>True to limit the resulting zoom area to the edges of grid, even if the cursor is outside of the grid. That is, you can't expand the axis ranges by moving the cursor outside of the plot area when this is true. If set to false, you can effectively zoom out by mousing outside of the plot region. Default false.</dd>
+ <dt>showTooltipOutsideZoom</dt>
+ <dd>True to keep showing and updating the tooltip even when the cursor is outside of the plot area. Not applicable if zoomOutsidePlot is false. Default false</dd>
+</dl>
+
+<p>The fist plot demonstrates the default functionality where you can move the mouse off of the plot while zooming but the actual area zoomed will not extend beyond the axes.</p>
+ <div id="chart1" style="margin-top:20px; margin-left:20px; width:400px; height:200px;"></div>
+ <div style="padding-top:20px"><button value="reset" type="button" onclick="plot1.resetZoom();">Reset Zoom</button></div>
+
+ <pre class="code brush:js"></pre>
+
+<p>The second plot sets constrainOutsideZoom to false, so zooming will not only function when the mouse is outside of the plot, but the zoom range will be extended to the mouse position outside of the grid.</p>
+ <div id="chart2" style="margin-top:20px; margin-left:20px; width:400px; height:200px;"></div>
+ <div style="padding-top:20px"><button value="reset" type="button" onclick="plot2.resetZoom();">Reset Zoom</button></div>
+
+ <pre class="code brush:js"></pre>
+
+<p>The third plot is like the third, but showTooltipOutsideZoom is true and the tooltip is set to follow the mouse, so you have an idea of what your range is while zooming.</p>
+ <div id="chart3" style="margin-top:20px; margin-left:20px; width:400px; height:200px;"></div>
+ <div style="padding-top:20px"><button value="reset" type="button" onclick="plot3.resetZoom();">Reset Zoom</button></div>
+
+ <pre class="code brush:js"></pre>
+
+
+ <script type="text/javascript" class="code">
+ $(document).ready(function(){
+ // Enable plugins like cursor and highlighter by default.
+ $.jqplot.config.enablePlugins = true;
+ // For these examples, don't show the to image button.
+ $.jqplot._noToImageButton = true;
+
+ goog = [["6/22/2009",425.32],["6/15/2009",420.09],["6/8/2009",424.84],["6/1/2009",444.32],["5/26/2009",417.23],
+ ["5/18/2009",393.5],["5/11/2009",390],["5/4/2009",407.33],["4/27/2009",393.69],["4/20/2009",389.49],
+ ["4/13/2009",392.24],["4/6/2009",372.5],["3/30/2009",369.78],["3/23/2009",347.7],["3/16/2009",330.16],
+ ["3/9/2009",324.42],["3/2/2009",308.57],["2/23/2009",337.99],["2/17/2009",346.45],["2/9/2009",357.68],
+ ["2/2/2009",371.28],["1/26/2009",338.53],["1/20/2009",324.7],["1/12/2009",299.67],["1/5/2009",315.07],
+ ["12/29/2008",321.32],["12/22/2008",300.36],["12/15/2008",310.17],["12/8/2008",315.76],["12/1/2008",283.99],
+ ["11/24/2008",292.96],["11/17/2008",262.43],["11/10/2008",310.02],["11/3/2008",331.14],["10/27/2008",359.36],
+ ["10/20/2008",339.29],["10/13/2008",372.54],["10/6/2008",332],["9/29/2008",386.91],["9/22/2008",431.04],
+ ["9/15/2008",449.15],["9/8/2008",437.66],["9/2/2008",444.25],["8/25/2008",463.29],["8/18/2008",490.59],
+ ["8/11/2008",510.15], ["8/4/2008",495.01], ["7/28/2008",467.86],["7/21/2008",491.98], ["7/14/2008",481.32],
+ ["7/7/2008",533.8],["6/30/2008",537], ["6/23/2008",528.07], ["6/16/2008",546.43],["6/9/2008",571.51],["6/2/2008",567],
+ ["5/27/2008",585.8],["5/19/2008",544.62], ["5/12/2008",580.07],["5/5/2008",573.2],["4/28/2008",581.29],
+ ["4/21/2008",544.06],["4/14/2008",539.41],["4/7/2008",457.45], ["3/31/2008",471.09],["3/24/2008",438.08],
+ ["3/17/2008",433.55], ["3/10/2008",437.92], ["3/3/2008",433.35],["2/25/2008",471.18],["2/19/2008",507.8],
+ ["2/11/2008",529.64],["2/4/2008",516.69],["1/28/2008",515.9], ["1/22/2008",566.4],["1/14/2008",600.25],
+ ["1/7/2008",638.25],["12/31/2007",657],["12/24/2007",702.53],["12/17/2007",696.69],["12/10/2007",689.96],
+ ["12/3/2007",714.87], ["11/26/2007",693], ["11/19/2007",676.7],["11/12/2007",633.63],["11/5/2007",663.97],
+ ["10/29/2007",711.25],["10/22/2007",674.6],["10/15/2007",644.71],["10/8/2007",637.39],["10/1/2007",594.05],
+ ["9/24/2007",567.27], ["9/17/2007",560.1], ["9/10/2007",528.75], ["9/4/2007",519.35],["8/27/2007",515.25],
+ ["8/20/2007",515]];
+
+
+ opts = {
+ title: 'Google, Inc.',
+ series: [{
+ neighborThreshold: 0
+ }],
+ axes: {
+ xaxis: {
+ renderer:$.jqplot.DateAxisRenderer,
+ min:'August 1, 2007',
+ tickInterval: "6 months",
+ tickOptions:{formatString:"%Y/%#m/%#d"}
+ },
+ yaxis: {
+ // renderer: $.jqplot.LogAxisRenderer,
+ tickOptions:{prefix: '$'}
+ }
+ },
+ cursor:{zoom:true}
+ };
+
+ plot1 = $.jqplot('chart1', [goog], opts);
+ });
+
+ </script>
+ <script type="text/javascript" class="code">
+ $(document).ready(function(){
+ opts.cursor = {
+ zoom:true,
+ looseZoom: true,
+ constrainOutsideZoom: false
+ };
+
+ plot2 = $.jqplot('chart2', [goog], opts);
+
+ });
+ </script>
+ <script type="text/javascript" class="code">
+ $(document).ready(function(){
+ opts.cursor = {
+ zoom:true,
+ looseZoom: true,
+ showTooltip:true,
+ followMouse: true,
+ showTooltipOutsideZoom: true,
+ constrainOutsideZoom: false
+ };
+
+ plot3 = $.jqplot('chart3', [goog], opts);
+ });
+ </script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+ <script class="include" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.cursor.min.js"></script>
+ <script class="include" type="text/javascript" src="../plugins/jqplot.highlighter.min.js"></script>
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/zoomProxy.html b/wqflask/wqflask/static/packages/jqplot/examples/zoomProxy.html
new file mode 100644
index 00000000..1596a886
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/zoomProxy.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Zoom Proxy - Control one plot from another</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="zoomOptions.html">Previous</a> <a href="./">Examples</a> <a href="zooming.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <style type="text/css">
+ .jqplot-cursor-legend {
+ width: 160px;
+ font-family: "Courier New";
+ font-size: 0.8em;
+ }
+
+ td.jqplot-cursor-legend-swatch {
+ width: 1.3em;
+ }
+
+ div.jqplot-cursor-legend-swatch {
+/* width: 15px;*/
+ }
+ </style>
+
+<p>Click and drag on the bottom plot to zoom on the top plot. Double click inside the bottom plot or click the "reset" button to reset zoom.</p>
+
+<div class="jqPlot" id="chart1" style="height:320px; width:600px;"></div>
+<div class="jqPlot" id="chart2" style="margin-top: 30px; height:100px; width:600px;"></div>
+<button value="reset" onclick="controllerPlot.resetZoom();">Reset</button>
+
+<pre class="code brush:js"></pre>
+
+
+<script type="text/javascript">
+// Disable automatic image button insertion.
+
+var InPr = [[0.0,85.0],[10.0,87.4],[20.0,90.0],[30.0,91.3],[40.0,93.5],[50.0,94.1],[60.0,95.4],[70.0,95.8],[80.0,96.1],[90.0,97.6],[100.0,97.4],[110.0,97.7],[120.0,97.9],[130.0,98.3],[140.0,97.9],[150.0,98.4],[160.0,99.8],[170.0,100.5],[180.0,100.4],[190.0,100.3],[200.0,102.9],[210.0,104.1],[220.0,104.4],[230.0,103.9],[240.0,104.4],[250.0,104.0],[260.0,103.9],[270.0,103.5],[280.0,105.4],[290.0,105.7],[300.0,105.7],[310.0,105.3],[320.0,105.0],[330.0,105.1],[340.0,105.0],[350.0,105.1],[360.0,104.7],[370.0,104.4],[380.0,104.3],[390.0,105.7],[400.0,106.4],[410.0,105.7],[420.0,105.4],[430.0,105.7],[440.0,105.7],[450.0,105.9],[460.0,105.3],[470.0,105.7],[480.0,105.8],[490.0,105.4],[500.0,105.4],[510.0,105.4],[520.0,105.6],[530.0,104.9],[540.0,104.8],[550.0,105.2],[560.0,105.2],[570.0,105.1],[580.0,104.8],[590.0,104.6],[600.0,104.3],[610.0,104.2],[620.0,104.1],[630.0,104.7],[640.0,104.6],[650.0,104.7],[660.0,104.6],[670.0,104.4],[680.0,106.8],[690.0,106.6],
+[700.0,106.3],[710.0,107.1],[720.0,106.2],[730.0,106.1],[740.0,106.7],[750.0,106.5],[760.0,106.8],[770.0,106.7],[780.0,106.6],[790.0,106.7],[800.0,106.8],[810.0,106.4],[820.0,106.7],[830.0,106.5],[840.0,106.9],[850.0,106.7],[860.0,106.7],[870.0,106.8],[880.0,107.1],[890.0,106.6],[900.0,106.8],[910.0,106.9],[920.0,106.8],[930.0,107.3],[940.0,106.9],[950.0,106.5],[960.0,107.2],[970.0,107.0],[980.0,106.9],[990.0,107.2],[1000.0,107.7],[1010.0,107.6],[1020.0,107.1],[1030.0,107.6],[1040.0,107.2],[1050.0,107.2],[1060.0,107.5],[1070.0,107.7],[1080.0,107.3],[1090.0,107.0],[1100.0,107.7],[1110.0,107.0],[1120.0,107.8],[1130.0,107.8],[1140.0,107.7],[1150.0,107.4],[1160.0,107.8],[1170.0,107.8],[1180.0,107.6],[1190.0,107.7],[1200.0,107.4],[1210.0,108.0],[1220.0,372.6],[1230.0,90.4],[1240.0,125.0],[1250.0,110.4],[1260.0,108.5],[1270.0,109.7],[1280.0,108.9],[1290.0,109.6],[1300.0,110.2],[1310.0,110.0],[1320.0,110.7],[1330.0,110.3],[1340.0,110.6],[1350.0,110.5],
+[1360.0,110.8],[1370.0,110.6],[1380.0,111.0],[1390.0,113.0],[1400.0,112.1],[1410.0,112.3],[1420.0,112.3],[1430.0,137.6],[1440.0,179.0],[1450.0,216.9],[1460.0,399.2],[1470.0,433.6],[1480.0,203.5],[1490.0,223.3],[1500.0,229.8],[1510.0,416.9],[1520.0,198.8],[1530.0,208.7],[1540.0,172.0],[1550.0,145.7],[1560.0,119.2],[1570.0,104.8],[1580.0,100.1],[1590.0,97.7],[1600.0,97.2],[1610.0,98.8],[1620.0,98.1],[1630.0,98.1],[1640.0,98.8],[1650.0,98.7],[1660.0,98.5],[1670.0,98.8],[1680.0,98.2],[1690.0,98.2],[1700.0,97.7],[1710.0,98.1],[1720.0,97.1],[1730.0,97.6],[1740.0,97.7],[1750.0,97.4],[1760.0,97.6],[1770.0,98.0],[1780.0,97.6],[1790.0,97.7],[1800.0,97.8],[1810.0,97.6],[1820.0,97.9],
+[1830.0,97.9],[1840.0,97.8],[1850.0,97.7],[1860.0,97.7],[1870.0,97.7],[1880.0,97.4],[1890.0,97.3],[1900.0,97.2],[1910.0,96.9],[1920.0,97.2],[1930.0,97.4],[1940.0,97.7],[1950.0,97.1],[1960.0,97.1],[1970.0,96.6],[1980.0,96.7],[1990.0,96.5],[2000.0,97.2],[2010.0,96.6],[2020.0,96.4],[2030.0,96.7],[2040.0,96.8],[2050.0,96.6],[2060.0,96.6],[2070.0,96.5],[2080.0,96.6],[2090.0,96.4],[2100.0,96.6],[2110.0,96.5],[2120.0,96.2],[2130.0,96.2],[2140.0,96.5],[2150.0,96.0],[2160.0,96.2],[2170.0,96.3],[2180.0,96.4],[2190.0,97.0],[2200.0,96.8],[2210.0,96.5],[2220.0,96.6],[2230.0,96.1],[2240.0,96.1],[2250.0,96.6],[2260.0,96.5],[2270.0,96.6],[2280.0,96.4],[2290.0,96.5],[2300.0,96.6],[2310.0,96.9],[2320.0,96.8],[2330.0,96.9],[2340.0,97.2],[2350.0,96.6],[2360.0,97.3],[2370.0,97.4],[2380.0,97.1],[2390.0,97.1],[2400.0,96.8],[2410.0,97.0],[2420.0,97.1],[2430.0,97.1],[2440.0,97.0],[2450.0,97.1],[2460.0,97.1],[2470.0,97.5],[2480.0,96.9],[2490.0,96.8],[2500.0,96.8],[2510.0,97.0],[2520.0,96.7],[2530.0,97.0],[2540.0,97.1],[2550.0,97.2],[2560.0,97.1],[2570.0,97.1],[2580.0,97.1],[2590.0,96.8],[2600.0,97.2],[2610.0,97.1],[2620.0,97.3],[2630.0,97.1],[2640.0,97.1],[2650.0,97.1],[2660.0,97.0],[2670.0,96.8],[2680.0,97.3],[2690.0,97.4],[2700.0,97.3],[2710.0,97.2],[2720.0,97.1],[2730.0,97.2],[2740.0,97.1],[2750.0,97.1],[2760.0,97.1],[2770.0,96.8],[2780.0,96.4],[2790.0,96.6],[2800.0,96.6]];
+var OutPr = [[0.0,1788.1],[10.0,1803.3],[20.0,1807.3],[30.0,1813.5],[40.0,1822.0],[50.0,1820.3],[60.0,1823.7],[70.0,1823.7],[80.0,1825.3],[90.0,1831.0],[100.0,1832.1],[110.0,1834.4],[120.0,1834.4],[130.0,1831.5],[140.0,1832.7],[150.0,1834.4],[160.0,1831.5],[170.0,1832.1],[180.0,1830.4],[190.0,1831.0],[200.0,1830.4],[210.0,1829.3],[220.0,1829.9],[230.0,1828.2],[240.0,1831.0],[250.0,1828.7],[260.0,1827.0],[270.0,1829.3],[280.0,1826.5],[290.0,1824.8],[300.0,1824.2],[310.0,1823.7],[320.0,1823.7],[330.0,1823.7],[340.0,1825.3],[350.0,1822.0],[360.0,1820.3],[370.0,1818.0],[380.0,1819.1],[390.0,1816.3],[400.0,1820.8],[410.0,1820.8],[420.0,1819.7],[430.0,1820.3],[440.0,1819.7],[450.0,1819.1],
+[460.0,1819.1],[470.0,1821.4],[480.0,1821.4],[490.0,1818.0],[500.0,1816.9],[510.0,1819.1],[520.0,1818.6],[530.0,1816.9],[540.0,1816.9],[550.0,1815.2],[560.0,1814.1],[570.0,1814.6],[580.0,1811.2],[590.0,1814.1],[600.0,1813.5],[610.0,1812.4],[620.0,1809.0],[630.0,1813.5],[640.0,1811.8],[650.0,1815.8],[660.0,1816.3],[670.0,1815.2],[680.0,1815.2],[690.0,1815.8],[700.0,1816.3],[710.0,1818.6],[720.0,1816.9],[730.0,1814.6],[740.0,1816.3],[750.0,1814.1],[760.0,1812.9],[770.0,1812.9],[780.0,1811.2],[790.0,1812.4],[800.0,1815.2],[810.0,1812.4],[820.0,1813.5],[830.0,1811.8],[840.0,1811.2],[850.0,1812.9],[860.0,1809.0],[870.0,1811.2],[880.0,1816.9],[890.0,1815.2],[900.0,1813.5],[910.0,1812.9],
+[920.0,1815.8],[930.0,1819.1],[940.0,1818.0],[950.0,1816.3],[960.0,1818.0],[970.0,1815.2],[980.0,1818.6],[990.0,1815.2],[1000.0,1822.5],[1010.0,1822.5],[1020.0,1816.9],[1030.0,1816.3],[1040.0,1817.4],[1050.0,1816.9],[1060.0,1811.8],[1070.0,1818.6],[1080.0,1818.6],[1090.0,1815.2],[1100.0,1816.9],[1110.0,1815.8],[1120.0,1815.8],[1130.0,1816.9],[1140.0,1815.2],[1150.0,1815.2],[1160.0,1818.0],[1170.0,1817.4],[1180.0,1818.0],[1190.0,1819.1],[1200.0,1817.4],[1210.0,1822.5],[1220.0,1313.9],[1230.0,1694.5],[1240.0,1891.3],[1250.0,1813.5],[1260.0,1827.0],[1270.0,1831.5],[1280.0,1827.6],[1290.0,1832.1],[1300.0,1831.5],[1310.0,1829.9],[1320.0,1834.4],[1330.0,1831.0],[1340.0,1827.6],
+[1350.0,1829.3],[1360.0,1832.1],[1370.0,1834.9],[1380.0,1834.9],[1390.0,1839.4],[1400.0,1830.4],[1410.0,1832.7],[1420.0,1833.8],[1430.0,1847.9],[1440.0,1770.6],[1450.0,1668.0],[1460.0,1279.5],[1470.0,1138.5],[1480.0,1724.4],[1490.0,1571.0],[1500.0,1740.8],[1510.0,1326.8],[1520.0,1661.2],[1530.0,1859.2],[1540.0,1851.8],[1550.0,1885.7],[1560.0,1876.1],[1570.0,1860.3],[1580.0,1870.5],[1590.0,1851.8],[1600.0,1853.5],[1610.0,1863.7],[1620.0,1854.1],[1630.0,1855.8],[1640.0,1858.6],[1650.0,1857.5],[1660.0,1858.6],[1670.0,1841.7],[1680.0,1824.2],[1690.0,1817.4],[1700.0,1813.5],[1710.0,1814.6],[1720.0,1809.0],[1730.0,1806.2],[1740.0,1803.9],[1750.0,1804.5],[1760.0,1798.8],[1770.0,1793.8],[1780.0,1792.1],[1790.0,1793.2],[1800.0,1792.6],[1810.0,1787.0],[1820.0,1787.0],[1830.0,1786.4],[1840.0,1788.1],[1850.0,1784.7],
+[1860.0,1781.4],[1870.0,1780.2],[1880.0,1777.4],[1890.0,1775.7],[1900.0,1775.2],[1910.0,1775.2],[1920.0,1776.8],[1930.0,1778.0],[1940.0,1775.7],[1950.0,1769.5],[1960.0,1769.5],[1970.0,1768.4],[1980.0,1771.2],[1990.0,1770.1],[2000.0,1769.5],[2010.0,1767.8],[2020.0,1764.4],[2030.0,1764.4],[2040.0,1765.0],[2050.0,1762.7],[2060.0,1765.6],[2070.0,1763.9],[2080.0,1762.2],[2090.0,1759.9],[2100.0,1759.9],[2110.0,1762.2],[2120.0,1762.7],[2130.0,1762.2],[2140.0,1762.7],[2150.0,1759.4],[2160.0,1761.1],[2170.0,1761.6],[2180.0,1763.3],[2190.0,1765.0],[2200.0,1768.4],[2210.0,1763.3],[2220.0,1762.7],[2230.0,1759.9],[2240.0,1762.7],[2250.0,1764.4],[2260.0,1765.6],[2270.0,1766.7],[2280.0,1763.3],[2290.0,1763.3],[2300.0,1763.9],[2310.0,1762.7],[2320.0,1762.7],[2330.0,1767.3],[2340.0,1767.8],[2350.0,1765.6],[2360.0,1766.1],
+[2370.0,1766.7],[2380.0,1766.7],[2390.0,1765.0],[2400.0,1765.0],[2410.0,1765.0],[2420.0,1765.0],[2430.0,1765.6],[2440.0,1765.6],[2450.0,1763.3],[2460.0,1767.8],[2470.0,1767.8],[2480.0,1765.0],[2490.0,1761.6],[2500.0,1761.6],[2510.0,1762.7],[2520.0,1763.3],[2530.0,1763.3],[2540.0,1763.9],[2550.0,1765.0],[2560.0,1766.1],[2570.0,1765.6],[2580.0,1766.7],[2590.0,1765.6],[2600.0,1768.4],[2610.0,1766.7],[2620.0,1764.4],[2630.0,1764.4],[2640.0,1766.1],[2650.0,1766.1],[2660.0,1766.1],[2670.0,1763.9],[2680.0,1765.6],[2690.0,1765.6],[2700.0,1765.6],[2710.0,1765.0],[2720.0,1765.6],[2730.0,1766.1],[2740.0,1767.3],[2750.0,1766.7],[2760.0,1762.2],[2770.0,1754.9],[2780.0,1750.9],[2790.0,1750.3],[2800.0,1748.1]];
+var ERPM = [[0.0,1503.],[10.0,3006.],[20.0,3005.],[30.0,1505.],[40.0,1505.],[50.0,3015.],[60.0,1503.],[70.0,3006.],[80.0,3006.],[90.0,1503.],[100.0,1503.],[110.0,1503.],[120.0,1500.],[130.0,1503.],[140.0,752.],[150.0,1503.],[160.0,1503.],[170.0,1503.],[180.0,1505.],[190.0,1503.],[200.0,1503.],[210.0,3006.],[220.0,1503.],[230.0,1503.],[240.0,1502.],[250.0,1503.],[260.0,3005.],[270.0,1500.],[280.0,1502.],[290.0,1502.],[300.0,1502.],[310.0,752.],[320.0,1502.],[330.0,1502.],[340.0,1504.],[350.0,1502.],[360.0,1502.],[370.0,1501.],[380.0,1502.],[390.0,501.],[400.0,1501.],[410.0,501.],[420.0,751.],[430.0,751.],[440.0,1503.],[450.0,750.],[460.0,1501.],[470.0,1503.],[480.0,501.],[490.0,1501.],[500.0,1501.],[510.0,501.],[520.0,1501.],[530.0,751.],[540.0,1501.],[550.0,1501.],[560.0,1501.],[570.0,1501.],[580.0,1504.],[590.0,1504.],
+[600.0,1502.],[610.0,751.],[620.0,1501.],[630.0,1501.],[640.0,1501.],[650.0,1501.],[660.0,1504.],[670.0,1502.],[680.0,751.],[690.0,751.],[700.0,1501.],[710.0,751.],[720.0,1501.],[730.0,1502.],[740.0,1502.],[750.0,751.],[760.0,376.],[770.0,1502.],[780.0,1501.],[790.0,1502.],[800.0,1499.],[810.0,1499.],[820.0,750.],[830.0,1499.],[840.0,501.],[850.0,300.],[860.0,1504.],[870.0,751.],[880.0,1502.],[890.0,1502.],[900.0,1502.],[910.0,751.],[920.0,501.],[930.0,1502.],[940.0,751.],[950.0,1502.],[960.0,501.],[970.0,1504.],[980.0,751.],[990.0,1502.],[1000.0,751.],[1010.0,1502.],[1020.0,500.],[1030.0,751.],[1040.0,1502.],[1050.0,751.],[1060.0,1502.],[1070.0,1502.],[1080.0,751.],[1090.0,751.],[1100.0,1502.],[1110.0,750.],[1120.0,1502.],[1130.0,375.],[1140.0,1502.],[1150.0,300.],[1160.0,375.],[1170.0,1499.],[1180.0,300.],
+[1190.0,375.],[1200.0,1502.],[1210.0,373.],[1220.0,368.],[1230.0,502.],[1240.0,495.],[1250.0,1475.],[1260.0,1468.],[1270.0,732.],[1280.0,1461.],[1290.0,1458.],[1300.0,1456.],[1310.0,1456.],[1320.0,1451.],[1330.0,1453.],[1340.0,1453.],[1350.0,726.],[1360.0,1451.],[1370.0,1451.],[1380.0,1451.],[1390.0,1451.],[1400.0,1449.],[1410.0,1449.],[1420.0,1449.],[1430.0,1944.],[1440.0,1197.],[1450.0,786.],[1460.0,0.],[1470.0,0.],[1480.0,1079.],[1490.0,1070.],[1500.0,1085.],[1510.0,923.],[1520.0,1121.],[1530.0,1293.],[1540.0,1762.],[1550.0,367.],[1560.0,352.],[1570.0,186.],[1580.0,892.],[1590.0,892.],[1600.0,892.],[1610.0,892.],[1620.0,892.],[1630.0,892.],[1640.0,892.],[1650.0,892.],[1660.0,892.],[1670.0,892.],[1680.0,0.],[1690.0,0.],[1700.0,0.],[1710.0,0.],[1720.0,0.],[1730.0,0.],[1740.0,0.],[1750.0,0.],[1760.0,0.],
+[1770.0,0.],[1780.0,0.],[1790.0,0.],[1800.0,0.],[1810.0,0.],[1820.0,0.],[1830.0,0.],[1840.0,0.],[1850.0,0.],[1860.0,0.],[1870.0,0.],[1880.0,0.],[1890.0,0.],[1900.0,0.],[1910.0,0.],[1920.0,0.],[1930.0,0.],[1940.0,0.],[1950.0,0.],[1960.0,0.],[1970.0,0.],[1980.0,0.],[1990.0,0.],[2000.0,0.],[2010.0,0.],[2020.0,0.],[2030.0,0.],[2040.0,0.],[2050.0,0.],[2060.0,0.],[2070.0,0.],[2080.0,0.],[2090.0,0.],[2100.0,0.],[2110.0,0.],[2120.0,0.],[2130.0,0.],[2140.0,0.],[2150.0,0.],[2160.0,0.],[2170.0,0.],[2180.0,0.],[2190.0,0.],[2200.0,0.],[2210.0,0.],[2220.0,0.],[2230.0,0.],[2240.0,0.],[2250.0,0.],[2260.0,0.],[2270.0,0.],[2280.0,0.],[2290.0,0.],[2300.0,0.],[2310.0,0.],[2320.0,0.],[2330.0,0.],[2340.0,0.],[2350.0,0.],[2360.0,0.],[2370.0,0.],[2380.0,0.],[2390.0,0.],[2400.0,0.],[2410.0,0.],[2420.0,0.],[2430.0,0.],[2440.0,0.],
+[2450.0,0.],[2460.0,0.],[2470.0,0.],[2480.0,0.],[2490.0,0.],[2500.0,0.],[2510.0,0.],[2520.0,0.],[2530.0,0.],[2540.0,0.],[2550.0,0.],[2560.0,0.],[2570.0,0.],[2580.0,0.],[2590.0,0.],[2600.0,0.],[2610.0,0.],[2620.0,0.],[2630.0,0.],[2640.0,0.],[2650.0,0.],[2660.0,0.],[2670.0,0.],[2680.0,0.],[2690.0,0.],[2700.0,0.],[2710.0,0.],[2720.0,0.],[2730.0,0.],[2740.0,0.],[2750.0,0.],[2760.0,0.],[2770.0,0.],[2780.0,0.],[2790.0,0.],[2800.0,0.]];
+</script>
+
+
+ <script type="text/javascript" class="code">
+ $(document).ready(function(){
+ // InPr, OutPr and ERPM are defined separately. They are large datasets.
+ targetPlot = $.jqplot('chart1', [InPr, OutPr, ERPM], {
+ seriesDefaults:{ showMarker: false },
+ series:[
+ {label:'P In'},
+ {label:'P Out', yaxis:'y2axis'},
+ {label:'RPM', yaxis:'y3axis'},
+ ],
+ cursor:{
+ show: true,
+ zoom:true,
+ showTooltip:false
+ },
+ legend:{
+ location:'nw',
+ xoffset: 270,
+ yoffset: 100
+ },
+ axesDefaults: {
+ useSeriesColor:true,
+ rendererOptions: {
+ alignTicks: true
+ }
+ }
+
+ });
+
+ controllerPlot = $.jqplot('chart2', [InPr, OutPr, ERPM], {
+ seriesDefaults:{ showMarker: false },
+ series:[
+ {label:'P In'},
+ {label:'P Out', yaxis:'y2axis'},
+ {label:'RPM', yaxis:'y3axis'},
+ ],
+ cursor:{
+ show: true,
+ showTooltip: false,
+ zoom:true,
+ constrainZoomTo: 'x'
+ },
+ axesDefaults: {
+ useSeriesColor:true,
+ rendererOptions: {
+ alignTicks: true
+ }
+ }
+ });
+
+ $.jqplot.Cursor.zoomProxy(targetPlot, controllerPlot);
+
+ $.jqplot._noToImageButton = true;
+
+ });
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+ <script class="include" type="text/javascript" src="../plugins/jqplot.cursor.min.js"></script>
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/examples/zooming.html b/wqflask/wqflask/static/packages/jqplot/examples/zooming.html
new file mode 100644
index 00000000..4c1cb2b6
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/examples/zooming.html
@@ -0,0 +1,209 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+
+ <title>Plot Zooming and Cursor Control</title>
+
+ <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
+ <link rel="stylesheet" type="text/css" href="examples.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
+ <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
+
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
+ <script class="include" type="text/javascript" src="../jquery.min.js"></script>
+
+
+</head>
+<body>
+ <div class="logo">
+ <div class="nav">
+ <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
+ <a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a>
+ <a class="nav" href="../../download/"><span>&gt;</span>Download</a>
+ <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
+ <a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a>
+ </div>
+</div>
+ <div class="example-content">
+
+ <div class="example-nav">
+ <a href="zoomProxy.html">Previous</a> <a href="./">Examples</a> <a href="area.html">Next</a></div>
+
+
+<!-- Example scripts go here -->
+
+ <style type="text/css">
+ .button-reset {
+ margin: 30px;
+ margin-left: 90px;
+ }
+
+
+ </style>
+
+<p>The cursor plugin also enables plot zooming functionality. Click and drag on the plot to zoom. Double click to reset.</p>
+
+<p>You can disable the double click zoom reset. The cursor plugin also extends the plot object with a resetZoom() method which can be called from user code or other html element (a button for example) to reset the plot zoom.</p>
+
+<div id="chart1" style="height:300px; width:500px;"></div>
+<button class="button-reset">Reset Zoom</button>
+
+<pre class="code prettyprint brush: js"></pre>
+
+
+<p>Plot zooming also works will multiple axes. The following plot uses 3 large datasets.</p>
+<div id="chart2" style="height:300px; width:500px;"></div>
+
+<pre class="code prettyprint brush: js"></pre>
+
+<script language="javascript" type="text/javascript">
+var goog = [["6/22/2009 16:00:00",425.32],
+["6/8/2009 16:00:00",424.84],
+["5/26/2009 16:00:00",417.23],
+["5/11/2009 16:00:00",390],
+["4/27/2009 16:00:00",393.69],
+["4/13/2009 16:00:00",392.24],
+["3/30/2009 16:00:00",369.78],
+["3/16/2009 16:00:00",330.16],
+["3/2/2009 16:00:00",308.57],
+["2/17/2009 16:00:00",346.45],
+["2/2/2009 16:00:00",371.28],
+["1/20/2009 16:00:00",324.7],
+["1/5/2009 16:00:00",315.07],
+["12/22/2008 16:00:00",300.36],
+["12/8/2008 16:00:00",315.76],
+["11/24/2008 16:00:00",292.96],
+["11/10/2008 16:00:00",310.02],
+["10/27/2008 16:00:00",359.36],
+["10/13/2008 16:00:00",372.54],
+["9/29/2008 16:00:00",386.91],
+["9/15/2008 16:00:00",449.15],
+["9/2/2008 16:00:00",444.25],
+["8/25/2008 16:00:00",463.29],
+["8/11/2008 16:00:00",510.15],
+["7/28/2008 16:00:00",467.86],
+["7/14/2008 16:00:00",481.32],
+["6/30/2008 16:00:00",537],
+["6/16/2008 16:00:00",546.43],
+["6/2/2008 16:00:00",567],
+["5/19/2008 16:00:00",544.62],
+["5/5/2008 16:00:00",573.2],
+["4/21/2008 16:00:00",544.06],
+["4/7/2008 16:00:00",457.45],
+["3/24/2008 16:00:00",438.08],
+["3/10/2008 16:00:00",437.92],
+["2/25/2008 16:00:00",471.18],
+["2/11/2008 16:00:00",529.64],
+["1/28/2008 16:00:00",515.9],
+["1/14/2008 16:00:00",600.25],
+["12/31/2007 16:00:00",657],
+["12/17/2007 16:00:00",696.69],
+["12/3/2007 16:00:00",714.87],
+["11/19/2007 16:00:00",676.7],
+["11/5/2007 16:00:00",663.97],
+["10/22/2007 16:00:00",674.6],
+["10/8/2007 16:00:00",637.39],
+["9/24/2007 16:00:00",567.27],
+["9/10/2007 16:00:00",528.75],
+["8/27/2007 16:00:00",515.25]];
+var InPr = [[0.0,85.0],[10.0,87.4],[20.0,90.0],[30.0,91.3],[40.0,93.5],[50.0,94.1],[60.0,95.4],[70.0,95.8],[80.0,96.1],[90.0,97.6],[100.0,97.4],[110.0,97.7],[120.0,97.9],[130.0,98.3],[140.0,97.9],[150.0,98.4],[160.0,99.8],[170.0,100.5],[180.0,100.4],[190.0,100.3],[200.0,102.9],[210.0,104.1],[220.0,104.4],[230.0,103.9],[240.0,104.4],[250.0,104.0],[260.0,103.9],[270.0,103.5],[280.0,105.4],[290.0,105.7],[300.0,105.7],[310.0,105.3],[320.0,105.0],[330.0,105.1],[340.0,105.0],[350.0,105.1],[360.0,104.7],[370.0,104.4],[380.0,104.3],[390.0,105.7],[400.0,106.4],[410.0,105.7],[420.0,105.4],[430.0,105.7],[440.0,105.7],[450.0,105.9],[460.0,105.3],[470.0,105.7],[480.0,105.8],[490.0,105.4],[500.0,105.4],[510.0,105.4],[520.0,105.6],[530.0,104.9],[540.0,104.8],[550.0,105.2],[560.0,105.2],[570.0,105.1],[580.0,104.8],[590.0,104.6],[600.0,104.3],[610.0,104.2],[620.0,104.1],[630.0,104.7],[640.0,104.6],[650.0,104.7],[660.0,104.6],[670.0,104.4],[680.0,106.8],[690.0,106.6],
+[700.0,106.3],[710.0,107.1],[720.0,106.2],[730.0,106.1],[740.0,106.7],[750.0,106.5],[760.0,106.8],[770.0,106.7],[780.0,106.6],[790.0,106.7],[800.0,106.8],[810.0,106.4],[820.0,106.7],[830.0,106.5],[840.0,106.9],[850.0,106.7],[860.0,106.7],[870.0,106.8],[880.0,107.1],[890.0,106.6],[900.0,106.8],[910.0,106.9],[920.0,106.8],[930.0,107.3],[940.0,106.9],[950.0,106.5],[960.0,107.2],[970.0,107.0],[980.0,106.9],[990.0,107.2],[1000.0,107.7],[1010.0,107.6],[1020.0,107.1],[1030.0,107.6],[1040.0,107.2],[1050.0,107.2],[1060.0,107.5],[1070.0,107.7],[1080.0,107.3],[1090.0,107.0],[1100.0,107.7],[1110.0,107.0],[1120.0,107.8],[1130.0,107.8],[1140.0,107.7],[1150.0,107.4],[1160.0,107.8],[1170.0,107.8],[1180.0,107.6],[1190.0,107.7],[1200.0,107.4],[1210.0,108.0],[1220.0,372.6],[1230.0,90.4],[1240.0,125.0],[1250.0,110.4],[1260.0,108.5],[1270.0,109.7],[1280.0,108.9],[1290.0,109.6],[1300.0,110.2],[1310.0,110.0],[1320.0,110.7],[1330.0,110.3],[1340.0,110.6],[1350.0,110.5],
+[1360.0,110.8],[1370.0,110.6],[1380.0,111.0],[1390.0,113.0],[1400.0,112.1],[1410.0,112.3],[1420.0,112.3],[1430.0,137.6],[1440.0,179.0],[1450.0,216.9],[1460.0,399.2],[1470.0,433.6],[1480.0,203.5],[1490.0,223.3],[1500.0,229.8],[1510.0,416.9],[1520.0,198.8],[1530.0,208.7],[1540.0,172.0],[1550.0,145.7],[1560.0,119.2],[1570.0,104.8],[1580.0,100.1],[1590.0,97.7],[1600.0,97.2],[1610.0,98.8],[1620.0,98.1],[1630.0,98.1],[1640.0,98.8],[1650.0,98.7],[1660.0,98.5],[1670.0,98.8],[1680.0,98.2],[1690.0,98.2],[1700.0,97.7],[1710.0,98.1],[1720.0,97.1],[1730.0,97.6],[1740.0,97.7],[1750.0,97.4],[1760.0,97.6],[1770.0,98.0],[1780.0,97.6],[1790.0,97.7],[1800.0,97.8],[1810.0,97.6],[1820.0,97.9],
+[1830.0,97.9],[1840.0,97.8],[1850.0,97.7],[1860.0,97.7],[1870.0,97.7],[1880.0,97.4],[1890.0,97.3],[1900.0,97.2],[1910.0,96.9],[1920.0,97.2],[1930.0,97.4],[1940.0,97.7],[1950.0,97.1],[1960.0,97.1],[1970.0,96.6],[1980.0,96.7],[1990.0,96.5],[2000.0,97.2],[2010.0,96.6],[2020.0,96.4],[2030.0,96.7],[2040.0,96.8],[2050.0,96.6],[2060.0,96.6],[2070.0,96.5],[2080.0,96.6],[2090.0,96.4],[2100.0,96.6],[2110.0,96.5],[2120.0,96.2],[2130.0,96.2],[2140.0,96.5],[2150.0,96.0],[2160.0,96.2],[2170.0,96.3],[2180.0,96.4],[2190.0,97.0],[2200.0,96.8],[2210.0,96.5],[2220.0,96.6],[2230.0,96.1],[2240.0,96.1],[2250.0,96.6],[2260.0,96.5],[2270.0,96.6],[2280.0,96.4],[2290.0,96.5],[2300.0,96.6],[2310.0,96.9],[2320.0,96.8],[2330.0,96.9],[2340.0,97.2],[2350.0,96.6],[2360.0,97.3],[2370.0,97.4],[2380.0,97.1],[2390.0,97.1],[2400.0,96.8],[2410.0,97.0],[2420.0,97.1],[2430.0,97.1],[2440.0,97.0],[2450.0,97.1],[2460.0,97.1],[2470.0,97.5],[2480.0,96.9],[2490.0,96.8],[2500.0,96.8],[2510.0,97.0],[2520.0,96.7],[2530.0,97.0],[2540.0,97.1],[2550.0,97.2],[2560.0,97.1],[2570.0,97.1],[2580.0,97.1],[2590.0,96.8],[2600.0,97.2],[2610.0,97.1],[2620.0,97.3],[2630.0,97.1],[2640.0,97.1],[2650.0,97.1],[2660.0,97.0],[2670.0,96.8],[2680.0,97.3],[2690.0,97.4],[2700.0,97.3],[2710.0,97.2],[2720.0,97.1],[2730.0,97.2],[2740.0,97.1],[2750.0,97.1],[2760.0,97.1],[2770.0,96.8],[2780.0,96.4],[2790.0,96.6],[2800.0,96.6]];
+var OutPr = [[0.0,1788.1],[10.0,1803.3],[20.0,1807.3],[30.0,1813.5],[40.0,1822.0],[50.0,1820.3],[60.0,1823.7],[70.0,1823.7],[80.0,1825.3],[90.0,1831.0],[100.0,1832.1],[110.0,1834.4],[120.0,1834.4],[130.0,1831.5],[140.0,1832.7],[150.0,1834.4],[160.0,1831.5],[170.0,1832.1],[180.0,1830.4],[190.0,1831.0],[200.0,1830.4],[210.0,1829.3],[220.0,1829.9],[230.0,1828.2],[240.0,1831.0],[250.0,1828.7],[260.0,1827.0],[270.0,1829.3],[280.0,1826.5],[290.0,1824.8],[300.0,1824.2],[310.0,1823.7],[320.0,1823.7],[330.0,1823.7],[340.0,1825.3],[350.0,1822.0],[360.0,1820.3],[370.0,1818.0],[380.0,1819.1],[390.0,1816.3],[400.0,1820.8],[410.0,1820.8],[420.0,1819.7],[430.0,1820.3],[440.0,1819.7],[450.0,1819.1],
+[460.0,1819.1],[470.0,1821.4],[480.0,1821.4],[490.0,1818.0],[500.0,1816.9],[510.0,1819.1],[520.0,1818.6],[530.0,1816.9],[540.0,1816.9],[550.0,1815.2],[560.0,1814.1],[570.0,1814.6],[580.0,1811.2],[590.0,1814.1],[600.0,1813.5],[610.0,1812.4],[620.0,1809.0],[630.0,1813.5],[640.0,1811.8],[650.0,1815.8],[660.0,1816.3],[670.0,1815.2],[680.0,1815.2],[690.0,1815.8],[700.0,1816.3],[710.0,1818.6],[720.0,1816.9],[730.0,1814.6],[740.0,1816.3],[750.0,1814.1],[760.0,1812.9],[770.0,1812.9],[780.0,1811.2],[790.0,1812.4],[800.0,1815.2],[810.0,1812.4],[820.0,1813.5],[830.0,1811.8],[840.0,1811.2],[850.0,1812.9],[860.0,1809.0],[870.0,1811.2],[880.0,1816.9],[890.0,1815.2],[900.0,1813.5],[910.0,1812.9],
+[920.0,1815.8],[930.0,1819.1],[940.0,1818.0],[950.0,1816.3],[960.0,1818.0],[970.0,1815.2],[980.0,1818.6],[990.0,1815.2],[1000.0,1822.5],[1010.0,1822.5],[1020.0,1816.9],[1030.0,1816.3],[1040.0,1817.4],[1050.0,1816.9],[1060.0,1811.8],[1070.0,1818.6],[1080.0,1818.6],[1090.0,1815.2],[1100.0,1816.9],[1110.0,1815.8],[1120.0,1815.8],[1130.0,1816.9],[1140.0,1815.2],[1150.0,1815.2],[1160.0,1818.0],[1170.0,1817.4],[1180.0,1818.0],[1190.0,1819.1],[1200.0,1817.4],[1210.0,1822.5],[1220.0,1313.9],[1230.0,1694.5],[1240.0,1891.3],[1250.0,1813.5],[1260.0,1827.0],[1270.0,1831.5],[1280.0,1827.6],[1290.0,1832.1],[1300.0,1831.5],[1310.0,1829.9],[1320.0,1834.4],[1330.0,1831.0],[1340.0,1827.6],
+[1350.0,1829.3],[1360.0,1832.1],[1370.0,1834.9],[1380.0,1834.9],[1390.0,1839.4],[1400.0,1830.4],[1410.0,1832.7],[1420.0,1833.8],[1430.0,1847.9],[1440.0,1770.6],[1450.0,1668.0],[1460.0,1279.5],[1470.0,1138.5],[1480.0,1724.4],[1490.0,1571.0],[1500.0,1740.8],[1510.0,1326.8],[1520.0,1661.2],[1530.0,1859.2],[1540.0,1851.8],[1550.0,1885.7],[1560.0,1876.1],[1570.0,1860.3],[1580.0,1870.5],[1590.0,1851.8],[1600.0,1853.5],[1610.0,1863.7],[1620.0,1854.1],[1630.0,1855.8],[1640.0,1858.6],[1650.0,1857.5],[1660.0,1858.6],[1670.0,1841.7],[1680.0,1824.2],[1690.0,1817.4],[1700.0,1813.5],[1710.0,1814.6],[1720.0,1809.0],[1730.0,1806.2],[1740.0,1803.9],[1750.0,1804.5],[1760.0,1798.8],[1770.0,1793.8],[1780.0,1792.1],[1790.0,1793.2],[1800.0,1792.6],[1810.0,1787.0],[1820.0,1787.0],[1830.0,1786.4],[1840.0,1788.1],[1850.0,1784.7],
+[1860.0,1781.4],[1870.0,1780.2],[1880.0,1777.4],[1890.0,1775.7],[1900.0,1775.2],[1910.0,1775.2],[1920.0,1776.8],[1930.0,1778.0],[1940.0,1775.7],[1950.0,1769.5],[1960.0,1769.5],[1970.0,1768.4],[1980.0,1771.2],[1990.0,1770.1],[2000.0,1769.5],[2010.0,1767.8],[2020.0,1764.4],[2030.0,1764.4],[2040.0,1765.0],[2050.0,1762.7],[2060.0,1765.6],[2070.0,1763.9],[2080.0,1762.2],[2090.0,1759.9],[2100.0,1759.9],[2110.0,1762.2],[2120.0,1762.7],[2130.0,1762.2],[2140.0,1762.7],[2150.0,1759.4],[2160.0,1761.1],[2170.0,1761.6],[2180.0,1763.3],[2190.0,1765.0],[2200.0,1768.4],[2210.0,1763.3],[2220.0,1762.7],[2230.0,1759.9],[2240.0,1762.7],[2250.0,1764.4],[2260.0,1765.6],[2270.0,1766.7],[2280.0,1763.3],[2290.0,1763.3],[2300.0,1763.9],[2310.0,1762.7],[2320.0,1762.7],[2330.0,1767.3],[2340.0,1767.8],[2350.0,1765.6],[2360.0,1766.1],
+[2370.0,1766.7],[2380.0,1766.7],[2390.0,1765.0],[2400.0,1765.0],[2410.0,1765.0],[2420.0,1765.0],[2430.0,1765.6],[2440.0,1765.6],[2450.0,1763.3],[2460.0,1767.8],[2470.0,1767.8],[2480.0,1765.0],[2490.0,1761.6],[2500.0,1761.6],[2510.0,1762.7],[2520.0,1763.3],[2530.0,1763.3],[2540.0,1763.9],[2550.0,1765.0],[2560.0,1766.1],[2570.0,1765.6],[2580.0,1766.7],[2590.0,1765.6],[2600.0,1768.4],[2610.0,1766.7],[2620.0,1764.4],[2630.0,1764.4],[2640.0,1766.1],[2650.0,1766.1],[2660.0,1766.1],[2670.0,1763.9],[2680.0,1765.6],[2690.0,1765.6],[2700.0,1765.6],[2710.0,1765.0],[2720.0,1765.6],[2730.0,1766.1],[2740.0,1767.3],[2750.0,1766.7],[2760.0,1762.2],[2770.0,1754.9],[2780.0,1750.9],[2790.0,1750.3],[2800.0,1748.1]];
+var ERPM = [[0.0,1503.],[10.0,3006.],[20.0,3005.],[30.0,1505.],[40.0,1505.],[50.0,3015.],[60.0,1503.],[70.0,3006.],[80.0,3006.],[90.0,1503.],[100.0,1503.],[110.0,1503.],[120.0,1500.],[130.0,1503.],[140.0,752.],[150.0,1503.],[160.0,1503.],[170.0,1503.],[180.0,1505.],[190.0,1503.],[200.0,1503.],[210.0,3006.],[220.0,1503.],[230.0,1503.],[240.0,1502.],[250.0,1503.],[260.0,3005.],[270.0,1500.],[280.0,1502.],[290.0,1502.],[300.0,1502.],[310.0,752.],[320.0,1502.],[330.0,1502.],[340.0,1504.],[350.0,1502.],[360.0,1502.],[370.0,1501.],[380.0,1502.],[390.0,501.],[400.0,1501.],[410.0,501.],[420.0,751.],[430.0,751.],[440.0,1503.],[450.0,750.],[460.0,1501.],[470.0,1503.],[480.0,501.],[490.0,1501.],[500.0,1501.],[510.0,501.],[520.0,1501.],[530.0,751.],[540.0,1501.],[550.0,1501.],[560.0,1501.],[570.0,1501.],[580.0,1504.],[590.0,1504.],
+[600.0,1502.],[610.0,751.],[620.0,1501.],[630.0,1501.],[640.0,1501.],[650.0,1501.],[660.0,1504.],[670.0,1502.],[680.0,751.],[690.0,751.],[700.0,1501.],[710.0,751.],[720.0,1501.],[730.0,1502.],[740.0,1502.],[750.0,751.],[760.0,376.],[770.0,1502.],[780.0,1501.],[790.0,1502.],[800.0,1499.],[810.0,1499.],[820.0,750.],[830.0,1499.],[840.0,501.],[850.0,300.],[860.0,1504.],[870.0,751.],[880.0,1502.],[890.0,1502.],[900.0,1502.],[910.0,751.],[920.0,501.],[930.0,1502.],[940.0,751.],[950.0,1502.],[960.0,501.],[970.0,1504.],[980.0,751.],[990.0,1502.],[1000.0,751.],[1010.0,1502.],[1020.0,500.],[1030.0,751.],[1040.0,1502.],[1050.0,751.],[1060.0,1502.],[1070.0,1502.],[1080.0,751.],[1090.0,751.],[1100.0,1502.],[1110.0,750.],[1120.0,1502.],[1130.0,375.],[1140.0,1502.],[1150.0,300.],[1160.0,375.],[1170.0,1499.],[1180.0,300.],
+[1190.0,375.],[1200.0,1502.],[1210.0,373.],[1220.0,368.],[1230.0,502.],[1240.0,495.],[1250.0,1475.],[1260.0,1468.],[1270.0,732.],[1280.0,1461.],[1290.0,1458.],[1300.0,1456.],[1310.0,1456.],[1320.0,1451.],[1330.0,1453.],[1340.0,1453.],[1350.0,726.],[1360.0,1451.],[1370.0,1451.],[1380.0,1451.],[1390.0,1451.],[1400.0,1449.],[1410.0,1449.],[1420.0,1449.],[1430.0,1944.],[1440.0,1197.],[1450.0,786.],[1460.0,0.],[1470.0,0.],[1480.0,1079.],[1490.0,1070.],[1500.0,1085.],[1510.0,923.],[1520.0,1121.],[1530.0,1293.],[1540.0,1762.],[1550.0,367.],[1560.0,352.],[1570.0,186.],[1580.0,892.],[1590.0,892.],[1600.0,892.],[1610.0,892.],[1620.0,892.],[1630.0,892.],[1640.0,892.],[1650.0,892.],[1660.0,892.],[1670.0,892.],[1680.0,0.],[1690.0,0.],[1700.0,0.],[1710.0,0.],[1720.0,0.],[1730.0,0.],[1740.0,0.],[1750.0,0.],[1760.0,0.],
+[1770.0,0.],[1780.0,0.],[1790.0,0.],[1800.0,0.],[1810.0,0.],[1820.0,0.],[1830.0,0.],[1840.0,0.],[1850.0,0.],[1860.0,0.],[1870.0,0.],[1880.0,0.],[1890.0,0.],[1900.0,0.],[1910.0,0.],[1920.0,0.],[1930.0,0.],[1940.0,0.],[1950.0,0.],[1960.0,0.],[1970.0,0.],[1980.0,0.],[1990.0,0.],[2000.0,0.],[2010.0,0.],[2020.0,0.],[2030.0,0.],[2040.0,0.],[2050.0,0.],[2060.0,0.],[2070.0,0.],[2080.0,0.],[2090.0,0.],[2100.0,0.],[2110.0,0.],[2120.0,0.],[2130.0,0.],[2140.0,0.],[2150.0,0.],[2160.0,0.],[2170.0,0.],[2180.0,0.],[2190.0,0.],[2200.0,0.],[2210.0,0.],[2220.0,0.],[2230.0,0.],[2240.0,0.],[2250.0,0.],[2260.0,0.],[2270.0,0.],[2280.0,0.],[2290.0,0.],[2300.0,0.],[2310.0,0.],[2320.0,0.],[2330.0,0.],[2340.0,0.],[2350.0,0.],[2360.0,0.],[2370.0,0.],[2380.0,0.],[2390.0,0.],[2400.0,0.],[2410.0,0.],[2420.0,0.],[2430.0,0.],[2440.0,0.],
+[2450.0,0.],[2460.0,0.],[2470.0,0.],[2480.0,0.],[2490.0,0.],[2500.0,0.],[2510.0,0.],[2520.0,0.],[2530.0,0.],[2540.0,0.],[2550.0,0.],[2560.0,0.],[2570.0,0.],[2580.0,0.],[2590.0,0.],[2600.0,0.],[2610.0,0.],[2620.0,0.],[2630.0,0.],[2640.0,0.],[2650.0,0.],[2660.0,0.],[2670.0,0.],[2680.0,0.],[2690.0,0.],[2700.0,0.],[2710.0,0.],[2720.0,0.],[2730.0,0.],[2740.0,0.],[2750.0,0.],[2760.0,0.],[2770.0,0.],[2780.0,0.],[2790.0,0.],[2800.0,0.]];
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var plot1 = $.jqplot('chart1', [goog], {
+ title: 'Google, Inc.',
+ series: [{
+ label: 'Google, Inc.',
+ neighborThreshold: -1
+ }],
+ axes: {
+ xaxis: {
+ renderer: $.jqplot.DateAxisRenderer
+ },
+ yaxis: {
+ tickOptions:{ prefix: '$' }
+ }
+ },
+ cursor:{
+ show: true,
+ zoom:true,
+ showTooltip:false
+ }
+ });
+
+ $('.button-reset').click(function() { plot1.resetZoom() });
+});
+</script>
+
+<script class="code" type="text/javascript">
+$(document).ready(function(){
+ var plot2 = $.jqplot('chart2', [InPr, OutPr, ERPM], {
+ title:'Plot with Zooming and 3 Y Axes',
+ seriesDefaults: {showMarker:false},
+ series:[
+ {},
+ {yaxis:'y2axis'},
+ {yaxis:'y3axis'}
+ ],
+ cursor: {
+ show: true,
+ tooltipLocation:'sw',
+ zoom:true
+ },
+ axesDefaults:{
+ // color the axes baselines the same color as the series.
+ useSeriesColor: true,
+ rendererOptions: {
+ // align ticks for each axis across the grid
+ alignTicks: true
+ }
+ },
+ axes:{
+ // Let the lines start at the edge of the axis.
+ xaxis:{ pad: 0 }
+ }
+ });
+});
+</script>
+
+<!-- End example scripts -->
+
+<!-- Don't touch this! -->
+
+
+ <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
+ <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
+<!-- End Don't touch this! -->
+
+<!-- Additional plugins go here -->
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.min.js"></script>
+ <script class="include" language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.min.js"></script>
+
+<!-- End additional plugins -->
+
+
+ </div>
+ <script type="text/javascript" src="example.min.js"></script>
+
+</body>
+
+
+</html>
diff --git a/wqflask/wqflask/static/packages/jqplot/excanvas.js b/wqflask/wqflask/static/packages/jqplot/excanvas.js
new file mode 100644
index 00000000..4ca9653f
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/excanvas.js
@@ -0,0 +1,1438 @@
+// Memory Leaks patch from http://explorercanvas.googlecode.com/svn/trunk/
+// svn : r73
+// ------------------------------------------------------------------
+// Copyright 2006 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+// Known Issues:
+//
+// * Patterns only support repeat.
+// * Radial gradient are not implemented. The VML version of these look very
+// different from the canvas one.
+// * Clipping paths are not implemented.
+// * Coordsize. The width and height attribute have higher priority than the
+// width and height style values which isn't correct.
+// * Painting mode isn't implemented.
+// * Canvas width/height should is using content-box by default. IE in
+// Quirks mode will draw the canvas using border-box. Either change your
+// doctype to HTML5
+// (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)
+// or use Box Sizing Behavior from WebFX
+// (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)
+// * Non uniform scaling does not correctly scale strokes.
+// * Optimize. There is always room for speed improvements.
+
+// Only add this code if we do not already have a canvas implementation
+if (!document.createElement('canvas').getContext) {
+
+(function() {
+
+ // alias some functions to make (compiled) code shorter
+ var m = Math;
+ var mr = m.round;
+ var ms = m.sin;
+ var mc = m.cos;
+ var abs = m.abs;
+ var sqrt = m.sqrt;
+
+ // this is used for sub pixel precision
+ var Z = 10;
+ var Z2 = Z / 2;
+
+ var IE_VERSION = +navigator.userAgent.match(/MSIE ([\d.]+)?/)[1];
+
+ /**
+ * This funtion is assigned to the <canvas> elements as element.getContext().
+ * @this {HTMLElement}
+ * @return {CanvasRenderingContext2D_}
+ */
+ function getContext() {
+ return this.context_ ||
+ (this.context_ = new CanvasRenderingContext2D_(this));
+ }
+
+ var slice = Array.prototype.slice;
+
+ /**
+ * Binds a function to an object. The returned function will always use the
+ * passed in {@code obj} as {@code this}.
+ *
+ * Example:
+ *
+ * g = bind(f, obj, a, b)
+ * g(c, d) // will do f.call(obj, a, b, c, d)
+ *
+ * @param {Function} f The function to bind the object to
+ * @param {Object} obj The object that should act as this when the function
+ * is called
+ * @param {*} var_args Rest arguments that will be used as the initial
+ * arguments when the function is called
+ * @return {Function} A new function that has bound this
+ */
+ function bind(f, obj, var_args) {
+ var a = slice.call(arguments, 2);
+ return function() {
+ return f.apply(obj, a.concat(slice.call(arguments)));
+ };
+ }
+
+ function encodeHtmlAttribute(s) {
+ return String(s).replace(/&/g, '&amp;').replace(/"/g, '&quot;');
+ }
+
+ function addNamespace(doc, prefix, urn) {
+ if (!doc.namespaces[prefix]) {
+ doc.namespaces.add(prefix, urn, '#default#VML');
+ }
+ }
+
+ function addNamespacesAndStylesheet(doc) {
+ addNamespace(doc, 'g_vml_', 'urn:schemas-microsoft-com:vml');
+ addNamespace(doc, 'g_o_', 'urn:schemas-microsoft-com:office:office');
+
+ // Setup default CSS. Only add one style sheet per document
+ if (!doc.styleSheets['ex_canvas_']) {
+ var ss = doc.createStyleSheet();
+ ss.owningElement.id = 'ex_canvas_';
+ ss.cssText = 'canvas{display:inline-block;overflow:hidden;' +
+ // default size is 300x150 in Gecko and Opera
+ 'text-align:left;width:300px;height:150px}';
+ }
+ }
+
+ // Add namespaces and stylesheet at startup.
+ addNamespacesAndStylesheet(document);
+
+ var G_vmlCanvasManager_ = {
+ init: function(opt_doc) {
+ var doc = opt_doc || document;
+ // Create a dummy element so that IE will allow canvas elements to be
+ // recognized.
+ doc.createElement('canvas');
+ doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));
+ },
+
+ init_: function(doc) {
+ // find all canvas elements
+ var els = doc.getElementsByTagName('canvas');
+ for (var i = 0; i < els.length; i++) {
+ this.initElement(els[i]);
+ }
+ },
+
+ /**
+ * Public initializes a canvas element so that it can be used as canvas
+ * element from now on. This is called automatically before the page is
+ * loaded but if you are creating elements using createElement you need to
+ * make sure this is called on the element.
+ * @param {HTMLElement} el The canvas element to initialize.
+ * @return {HTMLElement} the element that was created.
+ */
+ initElement: function(el) {
+ if (!el.getContext) {
+ el.getContext = getContext;
+
+ // Add namespaces and stylesheet to document of the element.
+ addNamespacesAndStylesheet(el.ownerDocument);
+
+ // Remove fallback content. There is no way to hide text nodes so we
+ // just remove all childNodes. We could hide all elements and remove
+ // text nodes but who really cares about the fallback content.
+ el.innerHTML = '';
+
+ // do not use inline function because that will leak memory
+ el.attachEvent('onpropertychange', onPropertyChange);
+ el.attachEvent('onresize', onResize);
+
+ var attrs = el.attributes;
+ if (attrs.width && attrs.width.specified) {
+ // TODO: use runtimeStyle and coordsize
+ // el.getContext().setWidth_(attrs.width.nodeValue);
+ el.style.width = attrs.width.nodeValue + 'px';
+ } else {
+ el.width = el.clientWidth;
+ }
+ if (attrs.height && attrs.height.specified) {
+ // TODO: use runtimeStyle and coordsize
+ // el.getContext().setHeight_(attrs.height.nodeValue);
+ el.style.height = attrs.height.nodeValue + 'px';
+ } else {
+ el.height = el.clientHeight;
+ }
+ //el.getContext().setCoordsize_()
+ }
+ return el;
+ },
+
+ // Memory Leaks patch : see http://code.google.com/p/explorercanvas/issues/detail?id=82
+ uninitElement: function(el){
+ if (el.getContext) {
+ var ctx = el.getContext();
+ delete ctx.element_;
+ delete ctx.canvas;
+ el.innerHTML = "";
+ //el.outerHTML = "";
+ el.context_ = null;
+ el.getContext = null;
+ el.detachEvent("onpropertychange", onPropertyChange);
+ el.detachEvent("onresize", onResize);
+ }
+ }
+ };
+
+ function onPropertyChange(e) {
+ var el = e.srcElement;
+
+ switch (e.propertyName) {
+ case 'width':
+ el.getContext().clearRect();
+ el.style.width = el.attributes.width.nodeValue + 'px';
+ // In IE8 this does not trigger onresize.
+ el.firstChild.style.width = el.clientWidth + 'px';
+ break;
+ case 'height':
+ el.getContext().clearRect();
+ el.style.height = el.attributes.height.nodeValue + 'px';
+ el.firstChild.style.height = el.clientHeight + 'px';
+ break;
+ }
+ }
+
+ function onResize(e) {
+ var el = e.srcElement;
+ if (el.firstChild) {
+ el.firstChild.style.width = el.clientWidth + 'px';
+ el.firstChild.style.height = el.clientHeight + 'px';
+ }
+ }
+
+ G_vmlCanvasManager_.init();
+
+ // precompute "00" to "FF"
+ var decToHex = [];
+ for (var i = 0; i < 16; i++) {
+ for (var j = 0; j < 16; j++) {
+ decToHex[i * 16 + j] = i.toString(16) + j.toString(16);
+ }
+ }
+
+ function createMatrixIdentity() {
+ return [
+ [1, 0, 0],
+ [0, 1, 0],
+ [0, 0, 1]
+ ];
+ }
+
+ function matrixMultiply(m1, m2) {
+ var result = createMatrixIdentity();
+
+ for (var x = 0; x < 3; x++) {
+ for (var y = 0; y < 3; y++) {
+ var sum = 0;
+
+ for (var z = 0; z < 3; z++) {
+ sum += m1[x][z] * m2[z][y];
+ }
+
+ result[x][y] = sum;
+ }
+ }
+ return result;
+ }
+
+ function copyState(o1, o2) {
+ o2.fillStyle = o1.fillStyle;
+ o2.lineCap = o1.lineCap;
+ o2.lineJoin = o1.lineJoin;
+ o2.lineWidth = o1.lineWidth;
+ o2.miterLimit = o1.miterLimit;
+ o2.shadowBlur = o1.shadowBlur;
+ o2.shadowColor = o1.shadowColor;
+ o2.shadowOffsetX = o1.shadowOffsetX;
+ o2.shadowOffsetY = o1.shadowOffsetY;
+ o2.strokeStyle = o1.strokeStyle;
+ o2.globalAlpha = o1.globalAlpha;
+ o2.font = o1.font;
+ o2.textAlign = o1.textAlign;
+ o2.textBaseline = o1.textBaseline;
+ o2.arcScaleX_ = o1.arcScaleX_;
+ o2.arcScaleY_ = o1.arcScaleY_;
+ o2.lineScale_ = o1.lineScale_;
+ }
+
+ var colorData = {
+ aliceblue: '#F0F8FF',
+ antiquewhite: '#FAEBD7',
+ aquamarine: '#7FFFD4',
+ azure: '#F0FFFF',
+ beige: '#F5F5DC',
+ bisque: '#FFE4C4',
+ black: '#000000',
+ blanchedalmond: '#FFEBCD',
+ blueviolet: '#8A2BE2',
+ brown: '#A52A2A',
+ burlywood: '#DEB887',
+ cadetblue: '#5F9EA0',
+ chartreuse: '#7FFF00',
+ chocolate: '#D2691E',
+ coral: '#FF7F50',
+ cornflowerblue: '#6495ED',
+ cornsilk: '#FFF8DC',
+ crimson: '#DC143C',
+ cyan: '#00FFFF',
+ darkblue: '#00008B',
+ darkcyan: '#008B8B',
+ darkgoldenrod: '#B8860B',
+ darkgray: '#A9A9A9',
+ darkgreen: '#006400',
+ darkgrey: '#A9A9A9',
+ darkkhaki: '#BDB76B',
+ darkmagenta: '#8B008B',
+ darkolivegreen: '#556B2F',
+ darkorange: '#FF8C00',
+ darkorchid: '#9932CC',
+ darkred: '#8B0000',
+ darksalmon: '#E9967A',
+ darkseagreen: '#8FBC8F',
+ darkslateblue: '#483D8B',
+ darkslategray: '#2F4F4F',
+ darkslategrey: '#2F4F4F',
+ darkturquoise: '#00CED1',
+ darkviolet: '#9400D3',
+ deeppink: '#FF1493',
+ deepskyblue: '#00BFFF',
+ dimgray: '#696969',
+ dimgrey: '#696969',
+ dodgerblue: '#1E90FF',
+ firebrick: '#B22222',
+ floralwhite: '#FFFAF0',
+ forestgreen: '#228B22',
+ gainsboro: '#DCDCDC',
+ ghostwhite: '#F8F8FF',
+ gold: '#FFD700',
+ goldenrod: '#DAA520',
+ grey: '#808080',
+ greenyellow: '#ADFF2F',
+ honeydew: '#F0FFF0',
+ hotpink: '#FF69B4',
+ indianred: '#CD5C5C',
+ indigo: '#4B0082',
+ ivory: '#FFFFF0',
+ khaki: '#F0E68C',
+ lavender: '#E6E6FA',
+ lavenderblush: '#FFF0F5',
+ lawngreen: '#7CFC00',
+ lemonchiffon: '#FFFACD',
+ lightblue: '#ADD8E6',
+ lightcoral: '#F08080',
+ lightcyan: '#E0FFFF',
+ lightgoldenrodyellow: '#FAFAD2',
+ lightgreen: '#90EE90',
+ lightgrey: '#D3D3D3',
+ lightpink: '#FFB6C1',
+ lightsalmon: '#FFA07A',
+ lightseagreen: '#20B2AA',
+ lightskyblue: '#87CEFA',
+ lightslategray: '#778899',
+ lightslategrey: '#778899',
+ lightsteelblue: '#B0C4DE',
+ lightyellow: '#FFFFE0',
+ limegreen: '#32CD32',
+ linen: '#FAF0E6',
+ magenta: '#FF00FF',
+ mediumaquamarine: '#66CDAA',
+ mediumblue: '#0000CD',
+ mediumorchid: '#BA55D3',
+ mediumpurple: '#9370DB',
+ mediumseagreen: '#3CB371',
+ mediumslateblue: '#7B68EE',
+ mediumspringgreen: '#00FA9A',
+ mediumturquoise: '#48D1CC',
+ mediumvioletred: '#C71585',
+ midnightblue: '#191970',
+ mintcream: '#F5FFFA',
+ mistyrose: '#FFE4E1',
+ moccasin: '#FFE4B5',
+ navajowhite: '#FFDEAD',
+ oldlace: '#FDF5E6',
+ olivedrab: '#6B8E23',
+ orange: '#FFA500',
+ orangered: '#FF4500',
+ orchid: '#DA70D6',
+ palegoldenrod: '#EEE8AA',
+ palegreen: '#98FB98',
+ paleturquoise: '#AFEEEE',
+ palevioletred: '#DB7093',
+ papayawhip: '#FFEFD5',
+ peachpuff: '#FFDAB9',
+ peru: '#CD853F',
+ pink: '#FFC0CB',
+ plum: '#DDA0DD',
+ powderblue: '#B0E0E6',
+ rosybrown: '#BC8F8F',
+ royalblue: '#4169E1',
+ saddlebrown: '#8B4513',
+ salmon: '#FA8072',
+ sandybrown: '#F4A460',
+ seagreen: '#2E8B57',
+ seashell: '#FFF5EE',
+ sienna: '#A0522D',
+ skyblue: '#87CEEB',
+ slateblue: '#6A5ACD',
+ slategray: '#708090',
+ slategrey: '#708090',
+ snow: '#FFFAFA',
+ springgreen: '#00FF7F',
+ steelblue: '#4682B4',
+ tan: '#D2B48C',
+ thistle: '#D8BFD8',
+ tomato: '#FF6347',
+ turquoise: '#40E0D0',
+ violet: '#EE82EE',
+ wheat: '#F5DEB3',
+ whitesmoke: '#F5F5F5',
+ yellowgreen: '#9ACD32'
+ };
+
+
+ function getRgbHslContent(styleString) {
+ var start = styleString.indexOf('(', 3);
+ var end = styleString.indexOf(')', start + 1);
+ var parts = styleString.substring(start + 1, end).split(',');
+ // add alpha if needed
+ if (parts.length != 4 || styleString.charAt(3) != 'a') {
+ parts[3] = 1;
+ }
+ return parts;
+ }
+
+ function percent(s) {
+ return parseFloat(s) / 100;
+ }
+
+ function clamp(v, min, max) {
+ return Math.min(max, Math.max(min, v));
+ }
+
+ function hslToRgb(parts){
+ var r, g, b, h, s, l;
+ h = parseFloat(parts[0]) / 360 % 360;
+ if (h < 0)
+ h++;
+ s = clamp(percent(parts[1]), 0, 1);
+ l = clamp(percent(parts[2]), 0, 1);
+ if (s == 0) {
+ r = g = b = l; // achromatic
+ } else {
+ var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
+ var p = 2 * l - q;
+ r = hueToRgb(p, q, h + 1 / 3);
+ g = hueToRgb(p, q, h);
+ b = hueToRgb(p, q, h - 1 / 3);
+ }
+
+ return '#' + decToHex[Math.floor(r * 255)] +
+ decToHex[Math.floor(g * 255)] +
+ decToHex[Math.floor(b * 255)];
+ }
+
+ function hueToRgb(m1, m2, h) {
+ if (h < 0)
+ h++;
+ if (h > 1)
+ h--;
+
+ if (6 * h < 1)
+ return m1 + (m2 - m1) * 6 * h;
+ else if (2 * h < 1)
+ return m2;
+ else if (3 * h < 2)
+ return m1 + (m2 - m1) * (2 / 3 - h) * 6;
+ else
+ return m1;
+ }
+
+ var processStyleCache = {};
+
+ function processStyle(styleString) {
+ if (styleString in processStyleCache) {
+ return processStyleCache[styleString];
+ }
+
+ var str, alpha = 1;
+
+ styleString = String(styleString);
+ if (styleString.charAt(0) == '#') {
+ str = styleString;
+ } else if (/^rgb/.test(styleString)) {
+ var parts = getRgbHslContent(styleString);
+ var str = '#', n;
+ for (var i = 0; i < 3; i++) {
+ if (parts[i].indexOf('%') != -1) {
+ n = Math.floor(percent(parts[i]) * 255);
+ } else {
+ n = +parts[i];
+ }
+ str += decToHex[clamp(n, 0, 255)];
+ }
+ alpha = +parts[3];
+ } else if (/^hsl/.test(styleString)) {
+ var parts = getRgbHslContent(styleString);
+ str = hslToRgb(parts);
+ alpha = parts[3];
+ } else {
+ str = colorData[styleString] || styleString;
+ }
+ return processStyleCache[styleString] = {color: str, alpha: alpha};
+ }
+
+ var DEFAULT_STYLE = {
+ style: 'normal',
+ variant: 'normal',
+ weight: 'normal',
+ size: 10,
+ family: 'sans-serif'
+ };
+
+ // Internal text style cache
+ var fontStyleCache = {};
+
+ function processFontStyle(styleString) {
+ if (fontStyleCache[styleString]) {
+ return fontStyleCache[styleString];
+ }
+
+ var el = document.createElement('div');
+ var style = el.style;
+ try {
+ style.font = styleString;
+ } catch (ex) {
+ // Ignore failures to set to invalid font.
+ }
+
+ return fontStyleCache[styleString] = {
+ style: style.fontStyle || DEFAULT_STYLE.style,
+ variant: style.fontVariant || DEFAULT_STYLE.variant,
+ weight: style.fontWeight || DEFAULT_STYLE.weight,
+ size: style.fontSize || DEFAULT_STYLE.size,
+ family: style.fontFamily || DEFAULT_STYLE.family
+ };
+ }
+
+ function getComputedStyle(style, element) {
+ var computedStyle = {};
+
+ for (var p in style) {
+ computedStyle[p] = style[p];
+ }
+
+ // Compute the size
+ var canvasFontSize = parseFloat(element.currentStyle.fontSize),
+ fontSize = parseFloat(style.size);
+
+ if (typeof style.size == 'number') {
+ computedStyle.size = style.size;
+ } else if (style.size.indexOf('px') != -1) {
+ computedStyle.size = fontSize;
+ } else if (style.size.indexOf('em') != -1) {
+ computedStyle.size = canvasFontSize * fontSize;
+ } else if(style.size.indexOf('%') != -1) {
+ computedStyle.size = (canvasFontSize / 100) * fontSize;
+ } else if (style.size.indexOf('pt') != -1) {
+ computedStyle.size = fontSize / .75;
+ } else {
+ computedStyle.size = canvasFontSize;
+ }
+
+ // Different scaling between normal text and VML text. This was found using
+ // trial and error to get the same size as non VML text.
+ computedStyle.size *= 0.981;
+
+ // Fix for VML handling of bare font family names. Add a '' around font family names.
+ computedStyle.family = "'" + computedStyle.family.replace(/(\'|\")/g,'').replace(/\s*,\s*/g, "', '") + "'";
+
+ return computedStyle;
+ }
+
+ function buildStyle(style) {
+ return style.style + ' ' + style.variant + ' ' + style.weight + ' ' +
+ style.size + 'px ' + style.family;
+ }
+
+ var lineCapMap = {
+ 'butt': 'flat',
+ 'round': 'round'
+ };
+
+ function processLineCap(lineCap) {
+ return lineCapMap[lineCap] || 'square';
+ }
+
+ /**
+ * This class implements CanvasRenderingContext2D interface as described by
+ * the WHATWG.
+ * @param {HTMLElement} canvasElement The element that the 2D context should
+ * be associated with
+ */
+ function CanvasRenderingContext2D_(canvasElement) {
+ this.m_ = createMatrixIdentity();
+
+ this.mStack_ = [];
+ this.aStack_ = [];
+ this.currentPath_ = [];
+
+ // Canvas context properties
+ this.strokeStyle = '#000';
+ this.fillStyle = '#000';
+
+ this.lineWidth = 1;
+ this.lineJoin = 'miter';
+ this.lineCap = 'butt';
+ this.miterLimit = Z * 1;
+ this.globalAlpha = 1;
+ this.font = '10px sans-serif';
+ this.textAlign = 'left';
+ this.textBaseline = 'alphabetic';
+ this.canvas = canvasElement;
+
+ var cssText = 'width:' + canvasElement.clientWidth + 'px;height:' +
+ canvasElement.clientHeight + 'px;overflow:hidden;position:absolute';
+ var el = canvasElement.ownerDocument.createElement('div');
+ el.style.cssText = cssText;
+ canvasElement.appendChild(el);
+
+ var overlayEl = el.cloneNode(false);
+ // Use a non transparent background.
+ overlayEl.style.backgroundColor = 'red';
+ overlayEl.style.filter = 'alpha(opacity=0)';
+ canvasElement.appendChild(overlayEl);
+
+ this.element_ = el;
+ this.arcScaleX_ = 1;
+ this.arcScaleY_ = 1;
+ this.lineScale_ = 1;
+ }
+
+ var contextPrototype = CanvasRenderingContext2D_.prototype;
+ contextPrototype.clearRect = function() {
+ if (this.textMeasureEl_) {
+ this.textMeasureEl_.removeNode(true);
+ this.textMeasureEl_ = null;
+ }
+ this.element_.innerHTML = '';
+ };
+
+ contextPrototype.beginPath = function() {
+ // TODO: Branch current matrix so that save/restore has no effect
+ // as per safari docs.
+ this.currentPath_ = [];
+ };
+
+ contextPrototype.moveTo = function(aX, aY) {
+ var p = getCoords(this, aX, aY);
+ this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y});
+ this.currentX_ = p.x;
+ this.currentY_ = p.y;
+ };
+
+ contextPrototype.lineTo = function(aX, aY) {
+ var p = getCoords(this, aX, aY);
+ this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y});
+
+ this.currentX_ = p.x;
+ this.currentY_ = p.y;
+ };
+
+ contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,
+ aCP2x, aCP2y,
+ aX, aY) {
+ var p = getCoords(this, aX, aY);
+ var cp1 = getCoords(this, aCP1x, aCP1y);
+ var cp2 = getCoords(this, aCP2x, aCP2y);
+ bezierCurveTo(this, cp1, cp2, p);
+ };
+
+ // Helper function that takes the already fixed cordinates.
+ function bezierCurveTo(self, cp1, cp2, p) {
+ self.currentPath_.push({
+ type: 'bezierCurveTo',
+ cp1x: cp1.x,
+ cp1y: cp1.y,
+ cp2x: cp2.x,
+ cp2y: cp2.y,
+ x: p.x,
+ y: p.y
+ });
+ self.currentX_ = p.x;
+ self.currentY_ = p.y;
+ }
+
+ contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {
+ // the following is lifted almost directly from
+ // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes
+
+ var cp = getCoords(this, aCPx, aCPy);
+ var p = getCoords(this, aX, aY);
+
+ var cp1 = {
+ x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_),
+ y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_)
+ };
+ var cp2 = {
+ x: cp1.x + (p.x - this.currentX_) / 3.0,
+ y: cp1.y + (p.y - this.currentY_) / 3.0
+ };
+
+ bezierCurveTo(this, cp1, cp2, p);
+ };
+
+ contextPrototype.arc = function(aX, aY, aRadius,
+ aStartAngle, aEndAngle, aClockwise) {
+ aRadius *= Z;
+ var arcType = aClockwise ? 'at' : 'wa';
+
+ var xStart = aX + mc(aStartAngle) * aRadius - Z2;
+ var yStart = aY + ms(aStartAngle) * aRadius - Z2;
+
+ var xEnd = aX + mc(aEndAngle) * aRadius - Z2;
+ var yEnd = aY + ms(aEndAngle) * aRadius - Z2;
+
+ // IE won't render arches drawn counter clockwise if xStart == xEnd.
+ if (xStart == xEnd && !aClockwise) {
+ xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something
+ // that can be represented in binary
+ }
+
+ var p = getCoords(this, aX, aY);
+ var pStart = getCoords(this, xStart, yStart);
+ var pEnd = getCoords(this, xEnd, yEnd);
+
+ this.currentPath_.push({type: arcType,
+ x: p.x,
+ y: p.y,
+ radius: aRadius,
+ xStart: pStart.x,
+ yStart: pStart.y,
+ xEnd: pEnd.x,
+ yEnd: pEnd.y});
+
+ };
+
+ contextPrototype.rect = function(aX, aY, aWidth, aHeight) {
+ this.moveTo(aX, aY);
+ this.lineTo(aX + aWidth, aY);
+ this.lineTo(aX + aWidth, aY + aHeight);
+ this.lineTo(aX, aY + aHeight);
+ this.closePath();
+ };
+
+ contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {
+ var oldPath = this.currentPath_;
+ this.beginPath();
+
+ this.moveTo(aX, aY);
+ this.lineTo(aX + aWidth, aY);
+ this.lineTo(aX + aWidth, aY + aHeight);
+ this.lineTo(aX, aY + aHeight);
+ this.closePath();
+ this.stroke();
+
+ this.currentPath_ = oldPath;
+ };
+
+ contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {
+ var oldPath = this.currentPath_;
+ this.beginPath();
+
+ this.moveTo(aX, aY);
+ this.lineTo(aX + aWidth, aY);
+ this.lineTo(aX + aWidth, aY + aHeight);
+ this.lineTo(aX, aY + aHeight);
+ this.closePath();
+ this.fill();
+
+ this.currentPath_ = oldPath;
+ };
+
+ contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {
+ var gradient = new CanvasGradient_('gradient');
+ gradient.x0_ = aX0;
+ gradient.y0_ = aY0;
+ gradient.x1_ = aX1;
+ gradient.y1_ = aY1;
+ return gradient;
+ };
+
+ contextPrototype.createRadialGradient = function(aX0, aY0, aR0,
+ aX1, aY1, aR1) {
+ var gradient = new CanvasGradient_('gradientradial');
+ gradient.x0_ = aX0;
+ gradient.y0_ = aY0;
+ gradient.r0_ = aR0;
+ gradient.x1_ = aX1;
+ gradient.y1_ = aY1;
+ gradient.r1_ = aR1;
+ return gradient;
+ };
+
+ contextPrototype.drawImage = function(image, var_args) {
+ var dx, dy, dw, dh, sx, sy, sw, sh;
+
+ // to find the original width we overide the width and height
+ var oldRuntimeWidth = image.runtimeStyle.width;
+ var oldRuntimeHeight = image.runtimeStyle.height;
+ image.runtimeStyle.width = 'auto';
+ image.runtimeStyle.height = 'auto';
+
+ // get the original size
+ var w = image.width;
+ var h = image.height;
+
+ // and remove overides
+ image.runtimeStyle.width = oldRuntimeWidth;
+ image.runtimeStyle.height = oldRuntimeHeight;
+
+ if (arguments.length == 3) {
+ dx = arguments[1];
+ dy = arguments[2];
+ sx = sy = 0;
+ sw = dw = w;
+ sh = dh = h;
+ } else if (arguments.length == 5) {
+ dx = arguments[1];
+ dy = arguments[2];
+ dw = arguments[3];
+ dh = arguments[4];
+ sx = sy = 0;
+ sw = w;
+ sh = h;
+ } else if (arguments.length == 9) {
+ sx = arguments[1];
+ sy = arguments[2];
+ sw = arguments[3];
+ sh = arguments[4];
+ dx = arguments[5];
+ dy = arguments[6];
+ dw = arguments[7];
+ dh = arguments[8];
+ } else {
+ throw Error('Invalid number of arguments');
+ }
+
+ var d = getCoords(this, dx, dy);
+
+ var w2 = sw / 2;
+ var h2 = sh / 2;
+
+ var vmlStr = [];
+
+ var W = 10;
+ var H = 10;
+
+ // For some reason that I've now forgotten, using divs didn't work
+ vmlStr.push(' <g_vml_:group',
+ ' coordsize="', Z * W, ',', Z * H, '"',
+ ' coordorigin="0,0"' ,
+ ' style="width:', W, 'px;height:', H, 'px;position:absolute;');
+
+ // If filters are necessary (rotation exists), create them
+ // filters are bog-slow, so only create them if abbsolutely necessary
+ // The following check doesn't account for skews (which don't exist
+ // in the canvas spec (yet) anyway.
+
+ if (this.m_[0][0] != 1 || this.m_[0][1] ||
+ this.m_[1][1] != 1 || this.m_[1][0]) {
+ var filter = [];
+
+ // Note the 12/21 reversal
+ filter.push('M11=', this.m_[0][0], ',',
+ 'M12=', this.m_[1][0], ',',
+ 'M21=', this.m_[0][1], ',',
+ 'M22=', this.m_[1][1], ',',
+ 'Dx=', mr(d.x / Z), ',',
+ 'Dy=', mr(d.y / Z), '');
+
+ // Bounding box calculation (need to minimize displayed area so that
+ // filters don't waste time on unused pixels.
+ var max = d;
+ var c2 = getCoords(this, dx + dw, dy);
+ var c3 = getCoords(this, dx, dy + dh);
+ var c4 = getCoords(this, dx + dw, dy + dh);
+
+ max.x = m.max(max.x, c2.x, c3.x, c4.x);
+ max.y = m.max(max.y, c2.y, c3.y, c4.y);
+
+ vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z),
+ 'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(',
+ filter.join(''), ", sizingmethod='clip');");
+
+ } else {
+ vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');
+ }
+
+ vmlStr.push(' ">' ,
+ '<g_vml_:image src="', image.src, '"',
+ ' style="width:', Z * dw, 'px;',
+ ' height:', Z * dh, 'px"',
+ ' cropleft="', sx / w, '"',
+ ' croptop="', sy / h, '"',
+ ' cropright="', (w - sx - sw) / w, '"',
+ ' cropbottom="', (h - sy - sh) / h, '"',
+ ' />',
+ '</g_vml_:group>');
+
+ this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join(''));
+ };
+
+ contextPrototype.stroke = function(aFill) {
+ var lineStr = [];
+ var lineOpen = false;
+
+ var W = 10;
+ var H = 10;
+
+ lineStr.push('<g_vml_:shape',
+ ' filled="', !!aFill, '"',
+ ' style="position:absolute;width:', W, 'px;height:', H, 'px;"',
+ ' coordorigin="0,0"',
+ ' coordsize="', Z * W, ',', Z * H, '"',
+ ' stroked="', !aFill, '"',
+ ' path="');
+
+ var newSeq = false;
+ var min = {x: null, y: null};
+ var max = {x: null, y: null};
+
+ for (var i = 0; i < this.currentPath_.length; i++) {
+ var p = this.currentPath_[i];
+ var c;
+
+ switch (p.type) {
+ case 'moveTo':
+ c = p;
+ lineStr.push(' m ', mr(p.x), ',', mr(p.y));
+ break;
+ case 'lineTo':
+ lineStr.push(' l ', mr(p.x), ',', mr(p.y));
+ break;
+ case 'close':
+ lineStr.push(' x ');
+ p = null;
+ break;
+ case 'bezierCurveTo':
+ lineStr.push(' c ',
+ mr(p.cp1x), ',', mr(p.cp1y), ',',
+ mr(p.cp2x), ',', mr(p.cp2y), ',',
+ mr(p.x), ',', mr(p.y));
+ break;
+ case 'at':
+ case 'wa':
+ lineStr.push(' ', p.type, ' ',
+ mr(p.x - this.arcScaleX_ * p.radius), ',',
+ mr(p.y - this.arcScaleY_ * p.radius), ' ',
+ mr(p.x + this.arcScaleX_ * p.radius), ',',
+ mr(p.y + this.arcScaleY_ * p.radius), ' ',
+ mr(p.xStart), ',', mr(p.yStart), ' ',
+ mr(p.xEnd), ',', mr(p.yEnd));
+ break;
+ }
+
+
+ // TODO: Following is broken for curves due to
+ // move to proper paths.
+
+ // Figure out dimensions so we can do gradient fills
+ // properly
+ if (p) {
+ if (min.x == null || p.x < min.x) {
+ min.x = p.x;
+ }
+ if (max.x == null || p.x > max.x) {
+ max.x = p.x;
+ }
+ if (min.y == null || p.y < min.y) {
+ min.y = p.y;
+ }
+ if (max.y == null || p.y > max.y) {
+ max.y = p.y;
+ }
+ }
+ }
+ lineStr.push(' ">');
+
+ if (!aFill) {
+ appendStroke(this, lineStr);
+ } else {
+ appendFill(this, lineStr, min, max);
+ }
+
+ lineStr.push('</g_vml_:shape>');
+
+ this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
+ };
+
+ function appendStroke(ctx, lineStr) {
+ var a = processStyle(ctx.strokeStyle);
+ var color = a.color;
+ var opacity = a.alpha * ctx.globalAlpha;
+ var lineWidth = ctx.lineScale_ * ctx.lineWidth;
+
+ // VML cannot correctly render a line if the width is less than 1px.
+ // In that case, we dilute the color to make the line look thinner.
+ if (lineWidth < 1) {
+ opacity *= lineWidth;
+ }
+
+ lineStr.push(
+ '<g_vml_:stroke',
+ ' opacity="', opacity, '"',
+ ' joinstyle="', ctx.lineJoin, '"',
+ ' miterlimit="', ctx.miterLimit, '"',
+ ' endcap="', processLineCap(ctx.lineCap), '"',
+ ' weight="', lineWidth, 'px"',
+ ' color="', color, '" />'
+ );
+ }
+
+ function appendFill(ctx, lineStr, min, max) {
+ var fillStyle = ctx.fillStyle;
+ var arcScaleX = ctx.arcScaleX_;
+ var arcScaleY = ctx.arcScaleY_;
+ var width = max.x - min.x;
+ var height = max.y - min.y;
+ if (fillStyle instanceof CanvasGradient_) {
+ // TODO: Gradients transformed with the transformation matrix.
+ var angle = 0;
+ var focus = {x: 0, y: 0};
+
+ // additional offset
+ var shift = 0;
+ // scale factor for offset
+ var expansion = 1;
+
+ if (fillStyle.type_ == 'gradient') {
+ var x0 = fillStyle.x0_ / arcScaleX;
+ var y0 = fillStyle.y0_ / arcScaleY;
+ var x1 = fillStyle.x1_ / arcScaleX;
+ var y1 = fillStyle.y1_ / arcScaleY;
+ var p0 = getCoords(ctx, x0, y0);
+ var p1 = getCoords(ctx, x1, y1);
+ var dx = p1.x - p0.x;
+ var dy = p1.y - p0.y;
+ angle = Math.atan2(dx, dy) * 180 / Math.PI;
+
+ // The angle should be a non-negative number.
+ if (angle < 0) {
+ angle += 360;
+ }
+
+ // Very small angles produce an unexpected result because they are
+ // converted to a scientific notation string.
+ if (angle < 1e-6) {
+ angle = 0;
+ }
+ } else {
+ var p0 = getCoords(ctx, fillStyle.x0_, fillStyle.y0_);
+ focus = {
+ x: (p0.x - min.x) / width,
+ y: (p0.y - min.y) / height
+ };
+
+ width /= arcScaleX * Z;
+ height /= arcScaleY * Z;
+ var dimension = m.max(width, height);
+ shift = 2 * fillStyle.r0_ / dimension;
+ expansion = 2 * fillStyle.r1_ / dimension - shift;
+ }
+
+ // We need to sort the color stops in ascending order by offset,
+ // otherwise IE won't interpret it correctly.
+ var stops = fillStyle.colors_;
+ stops.sort(function(cs1, cs2) {
+ return cs1.offset - cs2.offset;
+ });
+
+ var length = stops.length;
+ var color1 = stops[0].color;
+ var color2 = stops[length - 1].color;
+ var opacity1 = stops[0].alpha * ctx.globalAlpha;
+ var opacity2 = stops[length - 1].alpha * ctx.globalAlpha;
+
+ var colors = [];
+ for (var i = 0; i < length; i++) {
+ var stop = stops[i];
+ colors.push(stop.offset * expansion + shift + ' ' + stop.color);
+ }
+
+ // When colors attribute is used, the meanings of opacity and o:opacity2
+ // are reversed.
+ lineStr.push('<g_vml_:fill type="', fillStyle.type_, '"',
+ ' method="none" focus="100%"',
+ ' color="', color1, '"',
+ ' color2="', color2, '"',
+ ' colors="', colors.join(','), '"',
+ ' opacity="', opacity2, '"',
+ ' g_o_:opacity2="', opacity1, '"',
+ ' angle="', angle, '"',
+ ' focusposition="', focus.x, ',', focus.y, '" />');
+ } else if (fillStyle instanceof CanvasPattern_) {
+ if (width && height) {
+ var deltaLeft = -min.x;
+ var deltaTop = -min.y;
+ lineStr.push('<g_vml_:fill',
+ ' position="',
+ deltaLeft / width * arcScaleX * arcScaleX, ',',
+ deltaTop / height * arcScaleY * arcScaleY, '"',
+ ' type="tile"',
+ // TODO: Figure out the correct size to fit the scale.
+ //' size="', w, 'px ', h, 'px"',
+ ' src="', fillStyle.src_, '" />');
+ }
+ } else {
+ var a = processStyle(ctx.fillStyle);
+ var color = a.color;
+ var opacity = a.alpha * ctx.globalAlpha;
+ lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity,
+ '" />');
+ }
+ }
+
+ contextPrototype.fill = function() {
+ this.stroke(true);
+ };
+
+ contextPrototype.closePath = function() {
+ this.currentPath_.push({type: 'close'});
+ };
+
+ function getCoords(ctx, aX, aY) {
+ var m = ctx.m_;
+ return {
+ x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,
+ y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2
+ };
+ };
+
+ contextPrototype.save = function() {
+ var o = {};
+ copyState(this, o);
+ this.aStack_.push(o);
+ this.mStack_.push(this.m_);
+ this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);
+ };
+
+ contextPrototype.restore = function() {
+ if (this.aStack_.length) {
+ copyState(this.aStack_.pop(), this);
+ this.m_ = this.mStack_.pop();
+ }
+ };
+
+ function matrixIsFinite(m) {
+ return isFinite(m[0][0]) && isFinite(m[0][1]) &&
+ isFinite(m[1][0]) && isFinite(m[1][1]) &&
+ isFinite(m[2][0]) && isFinite(m[2][1]);
+ }
+
+ function setM(ctx, m, updateLineScale) {
+ if (!matrixIsFinite(m)) {
+ return;
+ }
+ ctx.m_ = m;
+
+ if (updateLineScale) {
+ // Get the line scale.
+ // Determinant of this.m_ means how much the area is enlarged by the
+ // transformation. So its square root can be used as a scale factor
+ // for width.
+ var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];
+ ctx.lineScale_ = sqrt(abs(det));
+ }
+ }
+
+ contextPrototype.translate = function(aX, aY) {
+ var m1 = [
+ [1, 0, 0],
+ [0, 1, 0],
+ [aX, aY, 1]
+ ];
+
+ setM(this, matrixMultiply(m1, this.m_), false);
+ };
+
+ contextPrototype.rotate = function(aRot) {
+ var c = mc(aRot);
+ var s = ms(aRot);
+
+ var m1 = [
+ [c, s, 0],
+ [-s, c, 0],
+ [0, 0, 1]
+ ];
+
+ setM(this, matrixMultiply(m1, this.m_), false);
+ };
+
+ contextPrototype.scale = function(aX, aY) {
+ this.arcScaleX_ *= aX;
+ this.arcScaleY_ *= aY;
+ var m1 = [
+ [aX, 0, 0],
+ [0, aY, 0],
+ [0, 0, 1]
+ ];
+
+ setM(this, matrixMultiply(m1, this.m_), true);
+ };
+
+ contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) {
+ var m1 = [
+ [m11, m12, 0],
+ [m21, m22, 0],
+ [dx, dy, 1]
+ ];
+
+ setM(this, matrixMultiply(m1, this.m_), true);
+ };
+
+ contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) {
+ var m = [
+ [m11, m12, 0],
+ [m21, m22, 0],
+ [dx, dy, 1]
+ ];
+
+ setM(this, m, true);
+ };
+
+ /**
+ * The text drawing function.
+ * The maxWidth argument isn't taken in account, since no browser supports
+ * it yet.
+ */
+ contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) {
+ var m = this.m_,
+ delta = 1000,
+ left = 0,
+ right = delta,
+ offset = {x: 0, y: 0},
+ lineStr = [];
+
+ var fontStyle = getComputedStyle(processFontStyle(this.font), this.element_);
+
+ var fontStyleString = buildStyle(fontStyle);
+
+ var elementStyle = this.element_.currentStyle;
+ var textAlign = this.textAlign.toLowerCase();
+ switch (textAlign) {
+ case 'left':
+ case 'center':
+ case 'right':
+ break;
+ case 'end':
+ textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left';
+ break;
+ case 'start':
+ textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left';
+ break;
+ default:
+ textAlign = 'left';
+ }
+
+ // 1.75 is an arbitrary number, as there is no info about the text baseline
+ switch (this.textBaseline) {
+ case 'hanging':
+ case 'top':
+ offset.y = fontStyle.size / 1.75;
+ break;
+ case 'middle':
+ break;
+ default:
+ case null:
+ case 'alphabetic':
+ case 'ideographic':
+ case 'bottom':
+ offset.y = -fontStyle.size / 2.25;
+ break;
+ }
+
+ switch(textAlign) {
+ case 'right':
+ left = delta;
+ right = 0.05;
+ break;
+ case 'center':
+ left = right = delta / 2;
+ break;
+ }
+
+ var d = getCoords(this, x + offset.x, y + offset.y);
+
+ lineStr.push('<g_vml_:line from="', -left ,' 0" to="', right ,' 0.05" ',
+ ' coordsize="100 100" coordorigin="0 0"',
+ ' filled="', !stroke, '" stroked="', !!stroke,
+ '" style="position:absolute;width:1px;height:1px;">');
+
+ if (stroke) {
+ appendStroke(this, lineStr);
+ } else {
+ // TODO: Fix the min and max params.
+ appendFill(this, lineStr, {x: -left, y: 0},
+ {x: right, y: fontStyle.size});
+ }
+
+ var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' +
+ m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0';
+
+ var skewOffset = mr(d.x / Z + 1 - m[0][0]) + ',' + mr(d.y / Z - 2 * m[1][0]);
+
+
+ lineStr.push('<g_vml_:skew on="t" matrix="', skewM ,'" ',
+ ' offset="', skewOffset, '" origin="', left ,' 0" />',
+ '<g_vml_:path textpathok="true" />',
+ '<g_vml_:textpath on="true" string="',
+ encodeHtmlAttribute(text),
+ '" style="v-text-align:', textAlign,
+ ';font:', encodeHtmlAttribute(fontStyleString),
+ '" /></g_vml_:line>');
+
+ this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
+ };
+
+ contextPrototype.fillText = function(text, x, y, maxWidth) {
+ this.drawText_(text, x, y, maxWidth, false);
+ };
+
+ contextPrototype.strokeText = function(text, x, y, maxWidth) {
+ this.drawText_(text, x, y, maxWidth, true);
+ };
+
+ contextPrototype.measureText = function(text) {
+ if (!this.textMeasureEl_) {
+ var s = '<span style="position:absolute;' +
+ 'top:-20000px;left:0;padding:0;margin:0;border:none;' +
+ 'white-space:pre;"></span>';
+ this.element_.insertAdjacentHTML('beforeEnd', s);
+ this.textMeasureEl_ = this.element_.lastChild;
+ }
+ var doc = this.element_.ownerDocument;
+ this.textMeasureEl_.innerHTML = '';
+ this.textMeasureEl_.style.font = this.font;
+ // Don't use innerHTML or innerText because they allow markup/whitespace.
+ this.textMeasureEl_.appendChild(doc.createTextNode(text));
+ return {width: this.textMeasureEl_.offsetWidth};
+ };
+
+ /******** STUBS ********/
+ contextPrototype.clip = function() {
+ // TODO: Implement
+ };
+
+ contextPrototype.arcTo = function() {
+ // TODO: Implement
+ };
+
+ contextPrototype.createPattern = function(image, repetition) {
+ return new CanvasPattern_(image, repetition);
+ };
+
+ // Gradient / Pattern Stubs
+ function CanvasGradient_(aType) {
+ this.type_ = aType;
+ this.x0_ = 0;
+ this.y0_ = 0;
+ this.r0_ = 0;
+ this.x1_ = 0;
+ this.y1_ = 0;
+ this.r1_ = 0;
+ this.colors_ = [];
+ }
+
+ CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {
+ aColor = processStyle(aColor);
+ this.colors_.push({offset: aOffset,
+ color: aColor.color,
+ alpha: aColor.alpha});
+ };
+
+ function CanvasPattern_(image, repetition) {
+ assertImageIsValid(image);
+ switch (repetition) {
+ case 'repeat':
+ case null:
+ case '':
+ this.repetition_ = 'repeat';
+ break;
+ case 'repeat-x':
+ case 'repeat-y':
+ case 'no-repeat':
+ this.repetition_ = repetition;
+ break;
+ default:
+ throwException('SYNTAX_ERR');
+ }
+
+ this.src_ = image.src;
+ this.width_ = image.width;
+ this.height_ = image.height;
+ }
+
+ function throwException(s) {
+ throw new DOMException_(s);
+ }
+
+ function assertImageIsValid(img) {
+ if (!img || img.nodeType != 1 || img.tagName != 'IMG') {
+ throwException('TYPE_MISMATCH_ERR');
+ }
+ if (img.readyState != 'complete') {
+ throwException('INVALID_STATE_ERR');
+ }
+ }
+
+ function DOMException_(s) {
+ this.code = this[s];
+ this.message = s +': DOM Exception ' + this.code;
+ }
+ var p = DOMException_.prototype = new Error;
+ p.INDEX_SIZE_ERR = 1;
+ p.DOMSTRING_SIZE_ERR = 2;
+ p.HIERARCHY_REQUEST_ERR = 3;
+ p.WRONG_DOCUMENT_ERR = 4;
+ p.INVALID_CHARACTER_ERR = 5;
+ p.NO_DATA_ALLOWED_ERR = 6;
+ p.NO_MODIFICATION_ALLOWED_ERR = 7;
+ p.NOT_FOUND_ERR = 8;
+ p.NOT_SUPPORTED_ERR = 9;
+ p.INUSE_ATTRIBUTE_ERR = 10;
+ p.INVALID_STATE_ERR = 11;
+ p.SYNTAX_ERR = 12;
+ p.INVALID_MODIFICATION_ERR = 13;
+ p.NAMESPACE_ERR = 14;
+ p.INVALID_ACCESS_ERR = 15;
+ p.VALIDATION_ERR = 16;
+ p.TYPE_MISMATCH_ERR = 17;
+
+ // set up externs
+ G_vmlCanvasManager = G_vmlCanvasManager_;
+ CanvasRenderingContext2D = CanvasRenderingContext2D_;
+ CanvasGradient = CanvasGradient_;
+ CanvasPattern = CanvasPattern_;
+ DOMException = DOMException_;
+ G_vmlCanvasManager._version = 888;
+})();
+
+} // if
diff --git a/wqflask/wqflask/static/packages/jqplot/excanvas.min.js b/wqflask/wqflask/static/packages/jqplot/excanvas.min.js
new file mode 100644
index 00000000..6452abf4
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/excanvas.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: @VERSION
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+if(!document.createElement("canvas").getContext){(function(){var ab=Math;var n=ab.round;var l=ab.sin;var A=ab.cos;var H=ab.abs;var N=ab.sqrt;var d=10;var f=d/2;var z=+navigator.userAgent.match(/MSIE ([\d.]+)?/)[1];function y(){return this.context_||(this.context_=new D(this))}var t=Array.prototype.slice;function g(j,m,p){var i=t.call(arguments,2);return function(){return j.apply(m,i.concat(t.call(arguments)))}}function af(i){return String(i).replace(/&/g,"&amp;").replace(/"/g,"&quot;")}function Y(m,j,i){if(!m.namespaces[j]){m.namespaces.add(j,i,"#default#VML")}}function R(j){Y(j,"g_vml_","urn:schemas-microsoft-com:vml");Y(j,"g_o_","urn:schemas-microsoft-com:office:office");if(!j.styleSheets.ex_canvas_){var i=j.createStyleSheet();i.owningElement.id="ex_canvas_";i.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}R(document);var e={init:function(i){var j=i||document;j.createElement("canvas");j.attachEvent("onreadystatechange",g(this.init_,this,j))},init_:function(p){var m=p.getElementsByTagName("canvas");for(var j=0;j<m.length;j++){this.initElement(m[j])}},initElement:function(j){if(!j.getContext){j.getContext=y;R(j.ownerDocument);j.innerHTML="";j.attachEvent("onpropertychange",x);j.attachEvent("onresize",W);var i=j.attributes;if(i.width&&i.width.specified){j.style.width=i.width.nodeValue+"px"}else{j.width=j.clientWidth}if(i.height&&i.height.specified){j.style.height=i.height.nodeValue+"px"}else{j.height=j.clientHeight}}return j},uninitElement:function(j){if(j.getContext){var i=j.getContext();delete i.element_;delete i.canvas;j.innerHTML="";j.context_=null;j.getContext=null;j.detachEvent("onpropertychange",x);j.detachEvent("onresize",W)}}};function x(j){var i=j.srcElement;switch(j.propertyName){case"width":i.getContext().clearRect();i.style.width=i.attributes.width.nodeValue+"px";i.firstChild.style.width=i.clientWidth+"px";break;case"height":i.getContext().clearRect();i.style.height=i.attributes.height.nodeValue+"px";i.firstChild.style.height=i.clientHeight+"px";break}}function W(j){var i=j.srcElement;if(i.firstChild){i.firstChild.style.width=i.clientWidth+"px";i.firstChild.style.height=i.clientHeight+"px"}}e.init();var k=[];for(var ae=0;ae<16;ae++){for(var ad=0;ad<16;ad++){k[ae*16+ad]=ae.toString(16)+ad.toString(16)}}function B(){return[[1,0,0],[0,1,0],[0,0,1]]}function J(p,m){var j=B();for(var i=0;i<3;i++){for(var ah=0;ah<3;ah++){var Z=0;for(var ag=0;ag<3;ag++){Z+=p[i][ag]*m[ag][ah]}j[i][ah]=Z}}return j}function v(j,i){i.fillStyle=j.fillStyle;i.lineCap=j.lineCap;i.lineJoin=j.lineJoin;i.lineWidth=j.lineWidth;i.miterLimit=j.miterLimit;i.shadowBlur=j.shadowBlur;i.shadowColor=j.shadowColor;i.shadowOffsetX=j.shadowOffsetX;i.shadowOffsetY=j.shadowOffsetY;i.strokeStyle=j.strokeStyle;i.globalAlpha=j.globalAlpha;i.font=j.font;i.textAlign=j.textAlign;i.textBaseline=j.textBaseline;i.arcScaleX_=j.arcScaleX_;i.arcScaleY_=j.arcScaleY_;i.lineScale_=j.lineScale_}var b={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function M(j){var p=j.indexOf("(",3);var i=j.indexOf(")",p+1);var m=j.substring(p+1,i).split(",");if(m.length!=4||j.charAt(3)!="a"){m[3]=1}return m}function c(i){return parseFloat(i)/100}function r(j,m,i){return Math.min(i,Math.max(m,j))}function I(ag){var i,ai,aj,ah,ak,Z;ah=parseFloat(ag[0])/360%360;if(ah<0){ah++}ak=r(c(ag[1]),0,1);Z=r(c(ag[2]),0,1);if(ak==0){i=ai=aj=Z}else{var j=Z<0.5?Z*(1+ak):Z+ak-Z*ak;var m=2*Z-j;i=a(m,j,ah+1/3);ai=a(m,j,ah);aj=a(m,j,ah-1/3)}return"#"+k[Math.floor(i*255)]+k[Math.floor(ai*255)]+k[Math.floor(aj*255)]}function a(j,i,m){if(m<0){m++}if(m>1){m--}if(6*m<1){return j+(i-j)*6*m}else{if(2*m<1){return i}else{if(3*m<2){return j+(i-j)*(2/3-m)*6}else{return j}}}}var C={};function F(j){if(j in C){return C[j]}var ag,Z=1;j=String(j);if(j.charAt(0)=="#"){ag=j}else{if(/^rgb/.test(j)){var p=M(j);var ag="#",ah;for(var m=0;m<3;m++){if(p[m].indexOf("%")!=-1){ah=Math.floor(c(p[m])*255)}else{ah=+p[m]}ag+=k[r(ah,0,255)]}Z=+p[3]}else{if(/^hsl/.test(j)){var p=M(j);ag=I(p);Z=p[3]}else{ag=b[j]||j}}}return C[j]={color:ag,alpha:Z}}var o={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var L={};function E(i){if(L[i]){return L[i]}var p=document.createElement("div");var m=p.style;try{m.font=i}catch(j){}return L[i]={style:m.fontStyle||o.style,variant:m.fontVariant||o.variant,weight:m.fontWeight||o.weight,size:m.fontSize||o.size,family:m.fontFamily||o.family}}function u(m,j){var i={};for(var ah in m){i[ah]=m[ah]}var ag=parseFloat(j.currentStyle.fontSize),Z=parseFloat(m.size);if(typeof m.size=="number"){i.size=m.size}else{if(m.size.indexOf("px")!=-1){i.size=Z}else{if(m.size.indexOf("em")!=-1){i.size=ag*Z}else{if(m.size.indexOf("%")!=-1){i.size=(ag/100)*Z}else{if(m.size.indexOf("pt")!=-1){i.size=Z/0.75}else{i.size=ag}}}}}i.size*=0.981;i.family="'"+i.family.replace(/(\'|\")/g,"").replace(/\s*,\s*/g,"', '")+"'";return i}function ac(i){return i.style+" "+i.variant+" "+i.weight+" "+i.size+"px "+i.family}var s={butt:"flat",round:"round"};function S(i){return s[i]||"square"}function D(i){this.m_=B();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=d*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var m="width:"+i.clientWidth+"px;height:"+i.clientHeight+"px;overflow:hidden;position:absolute";var j=i.ownerDocument.createElement("div");j.style.cssText=m;i.appendChild(j);var p=j.cloneNode(false);p.style.backgroundColor="red";p.style.filter="alpha(opacity=0)";i.appendChild(p);this.element_=j;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var q=D.prototype;q.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};q.beginPath=function(){this.currentPath_=[]};q.moveTo=function(j,i){var m=V(this,j,i);this.currentPath_.push({type:"moveTo",x:m.x,y:m.y});this.currentX_=m.x;this.currentY_=m.y};q.lineTo=function(j,i){var m=V(this,j,i);this.currentPath_.push({type:"lineTo",x:m.x,y:m.y});this.currentX_=m.x;this.currentY_=m.y};q.bezierCurveTo=function(m,j,ak,aj,ai,ag){var i=V(this,ai,ag);var ah=V(this,m,j);var Z=V(this,ak,aj);K(this,ah,Z,i)};function K(i,Z,m,j){i.currentPath_.push({type:"bezierCurveTo",cp1x:Z.x,cp1y:Z.y,cp2x:m.x,cp2y:m.y,x:j.x,y:j.y});i.currentX_=j.x;i.currentY_=j.y}q.quadraticCurveTo=function(ai,m,j,i){var ah=V(this,ai,m);var ag=V(this,j,i);var aj={x:this.currentX_+2/3*(ah.x-this.currentX_),y:this.currentY_+2/3*(ah.y-this.currentY_)};var Z={x:aj.x+(ag.x-this.currentX_)/3,y:aj.y+(ag.y-this.currentY_)/3};K(this,aj,Z,ag)};q.arc=function(al,aj,ak,ag,j,m){ak*=d;var ap=m?"at":"wa";var am=al+A(ag)*ak-f;var ao=aj+l(ag)*ak-f;var i=al+A(j)*ak-f;var an=aj+l(j)*ak-f;if(am==i&&!m){am+=0.125}var Z=V(this,al,aj);var ai=V(this,am,ao);var ah=V(this,i,an);this.currentPath_.push({type:ap,x:Z.x,y:Z.y,radius:ak,xStart:ai.x,yStart:ai.y,xEnd:ah.x,yEnd:ah.y})};q.rect=function(m,j,i,p){this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath()};q.strokeRect=function(m,j,i,p){var Z=this.currentPath_;this.beginPath();this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath();this.stroke();this.currentPath_=Z};q.fillRect=function(m,j,i,p){var Z=this.currentPath_;this.beginPath();this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath();this.fill();this.currentPath_=Z};q.createLinearGradient=function(j,p,i,m){var Z=new U("gradient");Z.x0_=j;Z.y0_=p;Z.x1_=i;Z.y1_=m;return Z};q.createRadialGradient=function(p,ag,m,j,Z,i){var ah=new U("gradientradial");ah.x0_=p;ah.y0_=ag;ah.r0_=m;ah.x1_=j;ah.y1_=Z;ah.r1_=i;return ah};q.drawImage=function(aq,m){var aj,ah,al,ay,ao,am,at,aA;var ak=aq.runtimeStyle.width;var ap=aq.runtimeStyle.height;aq.runtimeStyle.width="auto";aq.runtimeStyle.height="auto";var ai=aq.width;var aw=aq.height;aq.runtimeStyle.width=ak;aq.runtimeStyle.height=ap;if(arguments.length==3){aj=arguments[1];ah=arguments[2];ao=am=0;at=al=ai;aA=ay=aw}else{if(arguments.length==5){aj=arguments[1];ah=arguments[2];al=arguments[3];ay=arguments[4];ao=am=0;at=ai;aA=aw}else{if(arguments.length==9){ao=arguments[1];am=arguments[2];at=arguments[3];aA=arguments[4];aj=arguments[5];ah=arguments[6];al=arguments[7];ay=arguments[8]}else{throw Error("Invalid number of arguments")}}}var az=V(this,aj,ah);var p=at/2;var j=aA/2;var ax=[];var i=10;var ag=10;ax.push(" <g_vml_:group",' coordsize="',d*i,",",d*ag,'"',' coordorigin="0,0"',' style="width:',i,"px;height:",ag,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var Z=[];Z.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",n(az.x/d),",","Dy=",n(az.y/d),"");var av=az;var au=V(this,aj+al,ah);var ar=V(this,aj,ah+ay);var an=V(this,aj+al,ah+ay);av.x=ab.max(av.x,au.x,ar.x,an.x);av.y=ab.max(av.y,au.y,ar.y,an.y);ax.push("padding:0 ",n(av.x/d),"px ",n(av.y/d),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",Z.join(""),", sizingmethod='clip');")}else{ax.push("top:",n(az.y/d),"px;left:",n(az.x/d),"px;")}ax.push(' ">','<g_vml_:image src="',aq.src,'"',' style="width:',d*al,"px;"," height:",d*ay,'px"',' cropleft="',ao/ai,'"',' croptop="',am/aw,'"',' cropright="',(ai-ao-at)/ai,'"',' cropbottom="',(aw-am-aA)/aw,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",ax.join(""))};q.stroke=function(al){var aj=[];var Z=false;var m=10;var am=10;aj.push("<g_vml_:shape",' filled="',!!al,'"',' style="position:absolute;width:',m,"px;height:",am,'px;"',' coordorigin="0,0"',' coordsize="',d*m,",",d*am,'"',' stroked="',!al,'"',' path="');var an=false;var ag={x:null,y:null};var ak={x:null,y:null};for(var ah=0;ah<this.currentPath_.length;ah++){var j=this.currentPath_[ah];var ai;switch(j.type){case"moveTo":ai=j;aj.push(" m ",n(j.x),",",n(j.y));break;case"lineTo":aj.push(" l ",n(j.x),",",n(j.y));break;case"close":aj.push(" x ");j=null;break;case"bezierCurveTo":aj.push(" c ",n(j.cp1x),",",n(j.cp1y),",",n(j.cp2x),",",n(j.cp2y),",",n(j.x),",",n(j.y));break;case"at":case"wa":aj.push(" ",j.type," ",n(j.x-this.arcScaleX_*j.radius),",",n(j.y-this.arcScaleY_*j.radius)," ",n(j.x+this.arcScaleX_*j.radius),",",n(j.y+this.arcScaleY_*j.radius)," ",n(j.xStart),",",n(j.yStart)," ",n(j.xEnd),",",n(j.yEnd));break}if(j){if(ag.x==null||j.x<ag.x){ag.x=j.x}if(ak.x==null||j.x>ak.x){ak.x=j.x}if(ag.y==null||j.y<ag.y){ag.y=j.y}if(ak.y==null||j.y>ak.y){ak.y=j.y}}}aj.push(' ">');if(!al){w(this,aj)}else{G(this,aj,ag,ak)}aj.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",aj.join(""))};function w(m,ag){var j=F(m.strokeStyle);var p=j.color;var Z=j.alpha*m.globalAlpha;var i=m.lineScale_*m.lineWidth;if(i<1){Z*=i}ag.push("<g_vml_:stroke",' opacity="',Z,'"',' joinstyle="',m.lineJoin,'"',' miterlimit="',m.miterLimit,'"',' endcap="',S(m.lineCap),'"',' weight="',i,'px"',' color="',p,'" />')}function G(aq,ai,aK,ar){var aj=aq.fillStyle;var aB=aq.arcScaleX_;var aA=aq.arcScaleY_;var j=ar.x-aK.x;var p=ar.y-aK.y;if(aj instanceof U){var an=0;var aF={x:0,y:0};var ax=0;var am=1;if(aj.type_=="gradient"){var al=aj.x0_/aB;var m=aj.y0_/aA;var ak=aj.x1_/aB;var aM=aj.y1_/aA;var aJ=V(aq,al,m);var aI=V(aq,ak,aM);var ag=aI.x-aJ.x;var Z=aI.y-aJ.y;an=Math.atan2(ag,Z)*180/Math.PI;if(an<0){an+=360}if(an<0.000001){an=0}}else{var aJ=V(aq,aj.x0_,aj.y0_);aF={x:(aJ.x-aK.x)/j,y:(aJ.y-aK.y)/p};j/=aB*d;p/=aA*d;var aD=ab.max(j,p);ax=2*aj.r0_/aD;am=2*aj.r1_/aD-ax}var av=aj.colors_;av.sort(function(aN,i){return aN.offset-i.offset});var ap=av.length;var au=av[0].color;var at=av[ap-1].color;var az=av[0].alpha*aq.globalAlpha;var ay=av[ap-1].alpha*aq.globalAlpha;var aE=[];for(var aH=0;aH<ap;aH++){var ao=av[aH];aE.push(ao.offset*am+ax+" "+ao.color)}ai.push('<g_vml_:fill type="',aj.type_,'"',' method="none" focus="100%"',' color="',au,'"',' color2="',at,'"',' colors="',aE.join(","),'"',' opacity="',ay,'"',' g_o_:opacity2="',az,'"',' angle="',an,'"',' focusposition="',aF.x,",",aF.y,'" />')}else{if(aj instanceof T){if(j&&p){var ah=-aK.x;var aC=-aK.y;ai.push("<g_vml_:fill",' position="',ah/j*aB*aB,",",aC/p*aA*aA,'"',' type="tile"',' src="',aj.src_,'" />')}}else{var aL=F(aq.fillStyle);var aw=aL.color;var aG=aL.alpha*aq.globalAlpha;ai.push('<g_vml_:fill color="',aw,'" opacity="',aG,'" />')}}}q.fill=function(){this.stroke(true)};q.closePath=function(){this.currentPath_.push({type:"close"})};function V(j,Z,p){var i=j.m_;return{x:d*(Z*i[0][0]+p*i[1][0]+i[2][0])-f,y:d*(Z*i[0][1]+p*i[1][1]+i[2][1])-f}}q.save=function(){var i={};v(this,i);this.aStack_.push(i);this.mStack_.push(this.m_);this.m_=J(B(),this.m_)};q.restore=function(){if(this.aStack_.length){v(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function h(i){return isFinite(i[0][0])&&isFinite(i[0][1])&&isFinite(i[1][0])&&isFinite(i[1][1])&&isFinite(i[2][0])&&isFinite(i[2][1])}function aa(j,i,p){if(!h(i)){return}j.m_=i;if(p){var Z=i[0][0]*i[1][1]-i[0][1]*i[1][0];j.lineScale_=N(H(Z))}}q.translate=function(m,j){var i=[[1,0,0],[0,1,0],[m,j,1]];aa(this,J(i,this.m_),false)};q.rotate=function(j){var p=A(j);var m=l(j);var i=[[p,m,0],[-m,p,0],[0,0,1]];aa(this,J(i,this.m_),false)};q.scale=function(m,j){this.arcScaleX_*=m;this.arcScaleY_*=j;var i=[[m,0,0],[0,j,0],[0,0,1]];aa(this,J(i,this.m_),true)};q.transform=function(Z,p,ah,ag,j,i){var m=[[Z,p,0],[ah,ag,0],[j,i,1]];aa(this,J(m,this.m_),true)};q.setTransform=function(ag,Z,ai,ah,p,j){var i=[[ag,Z,0],[ai,ah,0],[p,j,1]];aa(this,i,true)};q.drawText_=function(am,ak,aj,ap,ai){var ao=this.m_,at=1000,j=0,ar=at,ah={x:0,y:0},ag=[];var i=u(E(this.font),this.element_);var p=ac(i);var au=this.element_.currentStyle;var Z=this.textAlign.toLowerCase();switch(Z){case"left":case"center":case"right":break;case"end":Z=au.direction=="ltr"?"right":"left";break;case"start":Z=au.direction=="rtl"?"right":"left";break;default:Z="left"}switch(this.textBaseline){case"hanging":case"top":ah.y=i.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":ah.y=-i.size/2.25;break}switch(Z){case"right":j=at;ar=0.05;break;case"center":j=ar=at/2;break}var aq=V(this,ak+ah.x,aj+ah.y);ag.push('<g_vml_:line from="',-j,' 0" to="',ar,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!ai,'" stroked="',!!ai,'" style="position:absolute;width:1px;height:1px;">');if(ai){w(this,ag)}else{G(this,ag,{x:-j,y:0},{x:ar,y:i.size})}var an=ao[0][0].toFixed(3)+","+ao[1][0].toFixed(3)+","+ao[0][1].toFixed(3)+","+ao[1][1].toFixed(3)+",0,0";var al=n(aq.x/d+1-ao[0][0])+","+n(aq.y/d-2*ao[1][0]);ag.push('<g_vml_:skew on="t" matrix="',an,'" ',' offset="',al,'" origin="',j,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',af(am),'" style="v-text-align:',Z,";font:",af(p),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",ag.join(""))};q.fillText=function(m,i,p,j){this.drawText_(m,i,p,j,false)};q.strokeText=function(m,i,p,j){this.drawText_(m,i,p,j,true)};q.measureText=function(m){if(!this.textMeasureEl_){var i='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",i);this.textMeasureEl_=this.element_.lastChild}var j=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(j.createTextNode(m));return{width:this.textMeasureEl_.offsetWidth}};q.clip=function(){};q.arcTo=function(){};q.createPattern=function(j,i){return new T(j,i)};function U(i){this.type_=i;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}U.prototype.addColorStop=function(j,i){i=F(i);this.colors_.push({offset:j,color:i.color,alpha:i.alpha})};function T(j,i){Q(j);switch(i){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=i;break;default:O("SYNTAX_ERR")}this.src_=j.src;this.width_=j.width;this.height_=j.height}function O(i){throw new P(i)}function Q(i){if(!i||i.nodeType!=1||i.tagName!="IMG"){O("TYPE_MISMATCH_ERR")}if(i.readyState!="complete"){O("INVALID_STATE_ERR")}}function P(i){this.code=this[i];this.message=i+": DOM Exception "+this.code}var X=P.prototype=new Error;X.INDEX_SIZE_ERR=1;X.DOMSTRING_SIZE_ERR=2;X.HIERARCHY_REQUEST_ERR=3;X.WRONG_DOCUMENT_ERR=4;X.INVALID_CHARACTER_ERR=5;X.NO_DATA_ALLOWED_ERR=6;X.NO_MODIFICATION_ALLOWED_ERR=7;X.NOT_FOUND_ERR=8;X.NOT_SUPPORTED_ERR=9;X.INUSE_ATTRIBUTE_ERR=10;X.INVALID_STATE_ERR=11;X.SYNTAX_ERR=12;X.INVALID_MODIFICATION_ERR=13;X.NAMESPACE_ERR=14;X.INVALID_ACCESS_ERR=15;X.VALIDATION_ERR=16;X.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=e;CanvasRenderingContext2D=D;CanvasGradient=U;CanvasPattern=T;DOMException=P;G_vmlCanvasManager._version=888})()}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/gpl-2.0.txt b/wqflask/wqflask/static/packages/jqplot/gpl-2.0.txt
new file mode 100644
index 00000000..864c6b8b
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/gpl-2.0.txt
@@ -0,0 +1,280 @@
+Title: GPL Version 2
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES. \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/jqPlotCssStyling.txt b/wqflask/wqflask/static/packages/jqplot/jqPlotCssStyling.txt
new file mode 100644
index 00000000..041035d2
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/jqPlotCssStyling.txt
@@ -0,0 +1,53 @@
+Title: jqPlot CSS Customization
+
+Much of the styling of jqPlot is done by css. The jqPlot css file is, unremarkably,
+jquery.jqplot.css and resides in the same directory as jqPlot itself.
+
+There exist some styling related javascript properties on the plot objects themselves
+(like fontStyle, fontSize, etc.). These can be set with the options object at plot creation.
+Generally, setting these options is *NOT* the preferred way to customize the look of the
+plot. Use the css file instead. *These options are deprecated and may disappear*. The
+exceptions are certain background and color options which control attributes of something
+renderered on a canvas. This would be line color, grid background, etc. These must
+be set by the options object. For a list of available options, see <jqPlot Options>.
+
+Objects in the plot that can be customized by css are given a css class like ".jqplot-*".
+For example, the plot title will have a ".jqplot-title" class, the axes ".jqplot-axis", etc.
+
+Currently assigned classes in jqPlot
+are as follows:
+
+.jqplot-target - Styles for the plot target div. These will be cascaded down
+to all plot elements according to css rules.
+
+.jqplot-axis - Styles for all axes
+
+.jqplot-xaxis - Styles applied to the primary x axis only.
+
+.jqplot-yaxis - Styles applied to the primary y axis only.
+
+.jqplot-x2axis, .jqplot-x3axis, ... - Styles applied to the 2nd, 3rd, etc. x axis only.
+
+.jqplot-y2axis, .jqplot-y3axis, ... - Styles applied to the 2nd, 3rd, etc.y axis only.
+
+.jqplot-axis-tick - Styles applied to all axis ticks
+
+.jqplot-xaxis-tick - Styles applied to primary x axis ticks only.
+
+.jqplot-x2axis-tick - Styles applied to secondary x axis ticks only.
+
+.jqplot-yaxis-tick - Styles applied to primary y axis ticks only.
+
+.jqplot-y2axis-tick - Styles applied to secondary y axis ticks only.
+
+table.jqplot-table-legend - Styles applied to the legend box table.
+
+.jqplot-title - Styles applied to the title.
+
+.jqplot-cursor-tooltip - Styles applied to the cursor tooltip
+
+.jqplot-highlighter-tooltip - Styles applied to the highlighter tooltip.
+
+div.jqplot-table-legend-swatch - the div element used for the colored swatch on the legend.
+
+Note that axes will be assigned 2 classes like: class=".jqplot-axis .jqplot-xaxis". \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/jqPlotOptions.txt b/wqflask/wqflask/static/packages/jqplot/jqPlotOptions.txt
new file mode 100644
index 00000000..d2d1e68c
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/jqPlotOptions.txt
@@ -0,0 +1,276 @@
+Title: jqPlot Options
+
+**This document is out of date. While the options described here should still be
+relavent and valid, it has not been updated for many new options. Sorry for
+this inconvenience.**
+
+This document describes the options available to jqPlot. These are set with the
+third argument to the $.jqplot('target', data, options) function. Options are
+using the following convention:
+
+{{{
+property: default, // notes
+}}}
+
+This document is not complete! Not all options are shown! Also, Options marked
+with ** in the notes are post 0.7.1 additions. They will be available in the next
+release. Further information about the options can be found in the online API
+documentation. For details on how the options relate to the API documentation,
+see the <Options Tutorial> in the optionsTutorial.txt file.
+
+{{{
+options =
+{
+ seriesColors: [ "#4bb2c5", "#c5b47f", "#EAA228", "#579575", "#839557", "#958c12",
+ "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc"], // colors that will
+ // be assigned to the series. If there are more series than colors, colors
+ // will wrap around and start at the beginning again.
+
+ stackSeries: false, // if true, will create a stack plot.
+ // Currently supported by line and bar graphs.
+
+ title: '', // Title for the plot. Can also be specified as an object like:
+
+ title: {
+ text: '', // title for the plot,
+ show: true,
+ },
+
+ axesDefaults: {
+ show: false, // wether or not to renderer the axis. Determined automatically.
+ min: null, // minimum numerical value of the axis. Determined automatically.
+ max: null, // maximum numverical value of the axis. Determined automatically.
+ pad: 1.2, // a factor multiplied by the data range on the axis to give the
+ // axis range so that data points don't fall on the edges of the axis.
+ ticks: [], // a 1D [val1, val2, ...], or 2D [[val, label], [val, label], ...]
+ // array of ticks to use. Computed automatically.
+ numberTicks: undefined,
+ renderer: $.jqplot.LinearAxisRenderer, // renderer to use to draw the axis,
+ rendererOptions: {}, // options to pass to the renderer. LinearAxisRenderer
+ // has no options,
+ tickOptions: {
+ mark: 'outside', // Where to put the tick mark on the axis
+ // 'outside', 'inside' or 'cross',
+ showMark: true,
+ showGridline: true, // wether to draw a gridline (across the whole grid) at this tick,
+ markSize: 4, // length the tick will extend beyond the grid in pixels. For
+ // 'cross', length will be added above and below the grid boundary,
+ show: true, // wether to show the tick (mark and label),
+ showLabel: true, // wether to show the text label at the tick,
+ formatString: '', // format string to use with the axis tick formatter
+ }
+ showTicks: true, // wether or not to show the tick labels,
+ showTickMarks: true, // wether or not to show the tick marks
+ },
+
+ axes: {
+ xaxis: {
+ // same options as axesDefaults
+ },
+ yaxis: {
+ // same options as axesDefaults
+ },
+ x2axis: {
+ // same options as axesDefaults
+ },
+ y2axis: {
+ // same options as axesDefaults
+ }
+ },
+
+ seriesDefaults: {
+ show: true, // wether to render the series.
+ xaxis: 'xaxis', // either 'xaxis' or 'x2axis'.
+ yaxis: 'yaxis', // either 'yaxis' or 'y2axis'.
+ label: '', // label to use in the legend for this line.
+ color: '', // CSS color spec to use for the line. Determined automatically.
+ lineWidth: 2.5, // Width of the line in pixels.
+ shadow: true, // show shadow or not.
+ shadowAngle: 45, // angle (degrees) of the shadow, clockwise from x axis.
+ shadowOffset: 1.25, // offset from the line of the shadow.
+ shadowDepth: 3, // Number of strokes to make when drawing shadow. Each
+ // stroke offset by shadowOffset from the last.
+ shadowAlpha: 0.1, // Opacity of the shadow.
+ showLine: true, // whether to render the line segments or not.
+ showMarker: true, // render the data point markers or not.
+ fill: false, // fill under the line,
+ fillAndStroke: false, // **stroke a line at top of fill area.
+ fillColor: undefined, // **custom fill color for filled lines (default is line color).
+ fillAlpha: undefined, // **custom alpha to apply to fillColor.
+ renderer: $.jqplot.LineRenderer], // renderer used to draw the series.
+ rendererOptions: {}, // options passed to the renderer. LineRenderer has no options.
+ markerRenderer: $.jqplot.MarkerRenderer, // renderer to use to draw the data
+ // point markers.
+ markerOptions: {
+ show: true, // wether to show data point markers.
+ style: 'filledCircle', // circle, diamond, square, filledCircle.
+ // filledDiamond or filledSquare.
+ lineWidth: 2, // width of the stroke drawing the marker.
+ size: 9, // size (diameter, edge length, etc.) of the marker.
+ color: '#666666' // color of marker, set to color of line by default.
+ shadow: true, // wether to draw shadow on marker or not.
+ shadowAngle: 45, // angle of the shadow. Clockwise from x axis.
+ shadowOffset: 1, // offset from the line of the shadow,
+ shadowDepth: 3, // Number of strokes to make when drawing shadow. Each stroke
+ // offset by shadowOffset from the last.
+ shadowAlpha: 0.07 // Opacity of the shadow
+ }
+ },
+
+ series:[
+ {Each series has same options as seriesDefaults},
+ {You can override each series individually here}
+ ],
+
+ legend: {
+ show: false,
+ location: 'ne', // compass direction, nw, n, ne, e, se, s, sw, w.
+ xoffset: 12, // pixel offset of the legend box from the x (or x2) axis.
+ yoffset: 12, // pixel offset of the legend box from the y (or y2) axis.
+ },
+
+ grid: {
+ drawGridLines: true, // wether to draw lines across the grid or not.
+ gridLineColor: '#cccccc' // **Color of the grid lines.
+ background: '#fffdf6', // CSS color spec for background color of grid.
+ borderColor: '#999999', // CSS color spec for border around grid.
+ borderWidth: 2.0, // pixel width of border around grid.
+ shadow: true, // draw a shadow for grid.
+ shadowAngle: 45, // angle of the shadow. Clockwise from x axis.
+ shadowOffset: 1.5, // offset from the line of the shadow.
+ shadowWidth: 3, // width of the stroke for the shadow.
+ shadowDepth: 3, // Number of strokes to make when drawing shadow.
+ // Each stroke offset by shadowOffset from the last.
+ shadowAlpha: 0.07 // Opacity of the shadow
+ renderer: $.jqplot.CanvasGridRenderer, // renderer to use to draw the grid.
+ rendererOptions: {} // options to pass to the renderer. Note, the default
+ // CanvasGridRenderer takes no additional options.
+ },
+
+ // Plugin and renderer options.
+
+ // BarRenderer.
+ // With BarRenderer, you can specify additional options in the rendererOptions object
+ // on the series or on the seriesDefaults object. Note, some options are respecified
+ // (like shadowDepth) to override lineRenderer defaults from which BarRenderer inherits.
+
+ seriesDefaults: {
+ rendererOptions: {
+ barPadding: 8, // number of pixels between adjacent bars in the same
+ // group (same category or bin).
+ barMargin: 10, // number of pixels between adjacent groups of bars.
+ barDirection: 'vertical', // vertical or horizontal.
+ barWidth: null, // width of the bars. null to calculate automatically.
+ shadowOffset: 2, // offset from the bar edge to stroke the shadow.
+ shadowDepth: 5, // nuber of strokes to make for the shadow.
+ shadowAlpha: 0.8, // transparency of the shadow.
+ }
+ },
+
+ // Cursor
+ // Options are passed to the cursor plugin through the "cursor" object at the top
+ // level of the options object.
+
+ cursor: {
+ style: 'crosshair', // A CSS spec for the cursor type to change the
+ // cursor to when over plot.
+ show: true,
+ showTooltip: true, // show a tooltip showing cursor position.
+ followMouse: false, // wether tooltip should follow the mouse or be stationary.
+ tooltipLocation: 'se', // location of the tooltip either relative to the mouse
+ // (followMouse=true) or relative to the plot. One of
+ // the compass directions, n, ne, e, se, etc.
+ tooltipOffset: 6, // pixel offset of the tooltip from the mouse or the axes.
+ showTooltipGridPosition: false, // show the grid pixel coordinates of the mouse
+ // in the tooltip.
+ showTooltipUnitPosition: true, // show the coordinates in data units of the mouse
+ // in the tooltip.
+ tooltipFormatString: '%.4P', // sprintf style format string for tooltip values.
+ useAxesFormatters: true, // wether to use the same formatter and formatStrings
+ // as used by the axes, or to use the formatString
+ // specified on the cursor with sprintf.
+ tooltipAxesGroups: [], // show only specified axes groups in tooltip. Would specify like:
+ // [['xaxis', 'yaxis'], ['xaxis', 'y2axis']]. By default, all axes
+ // combinations with for the series in the plot are shown.
+
+ },
+
+ // Dragable
+ // Dragable options are specified with the "dragable" object at the top level
+ // of the options object.
+
+ dragable: {
+ color: undefined, // custom color to use for the dragged point and dragged line
+ // section. default will use a transparent variant of the line color.
+ constrainTo: 'none', // Constrain dragging motion to an axis: 'x', 'y', or 'none'.
+ },
+
+ // Highlighter
+ // Highlighter options are specified with the "highlighter" object at the top level
+ // of the options object.
+
+ highlighter: {
+ lineWidthAdjust: 2.5, // pixels to add to the size line stroking the data point marker
+ // when showing highlight. Only affects non filled data point markers.
+ sizeAdjust: 5, // pixels to add to the size of filled markers when drawing highlight.
+ showTooltip: true, // show a tooltip with data point values.
+ tooltipLocation: 'nw', // location of tooltip: n, ne, e, se, s, sw, w, nw.
+ fadeTooltip: true, // use fade effect to show/hide tooltip.
+ tooltipFadeSpeed: "fast"// slow, def, fast, or a number of milliseconds.
+ tooltipOffset: 2, // pixel offset of tooltip from the highlight.
+ tooltipAxes: 'both', // which axis values to display in the tooltip, x, y or both.
+ tooltipSeparator: ', ' // separator between values in the tooltip.
+ useAxesFormatters: true // use the same format string and formatters as used in the axes to
+ // display values in the tooltip.
+ tooltipFormatString: '%.5P' // sprintf format string for the tooltip. only used if
+ // useAxesFormatters is false. Will use sprintf formatter with
+ // this string, not the axes formatters.
+ },
+
+ // LogAxisRenderer
+ // LogAxisRenderer add 2 options to the axes object. These options are specified directly on
+ // the axes or axesDefaults object.
+
+ axesDefaults: {
+ base: 10, // the logarithmic base.
+ tickDistribution: 'even', // 'even' or 'power'. 'even' will produce with even visiual (pixel)
+ // spacing on the axis. 'power' will produce ticks spaced by
+ // increasing powers of the log base.
+ },
+
+ // PieRenderer
+ // PieRenderer accepts options from the rendererOptions object of the series or seriesDefaults object.
+
+ seriesDefaults: {
+ rendererOptions: {
+ diameter: undefined, // diameter of pie, auto computed by default.
+ padding: 20, // padding between pie and neighboring legend or plot margin.
+ sliceMargin: 0, // gap between slices.
+ fill: true, // render solid (filled) slices.
+ shadowOffset: 2, // offset of the shadow from the chart.
+ shadowDepth: 5, // Number of strokes to make when drawing shadow. Each stroke
+ // offset by shadowOffset from the last.
+ shadowAlpha: 0.07 // Opacity of the shadow
+ }
+ },
+
+ // Trendline
+ // Trendline takes options on the trendline object of the series or seriesDefaults object.
+
+ seriesDefaults: {
+ trendline: {
+ show: true, // show the trend line
+ color: '#666666', // CSS color spec for the trend line.
+ label: '', // label for the trend line.
+ type: 'linear', // 'linear', 'exponential' or 'exp'
+ shadow: true, // show the trend line shadow.
+ lineWidth: 1.5, // width of the trend line.
+ shadowAngle: 45, // angle of the shadow. Clockwise from x axis.
+ shadowOffset: 1.5, // offset from the line of the shadow.
+ shadowDepth: 3, // Number of strokes to make when drawing shadow.
+ // Each stroke offset by shadowOffset from the last.
+ shadowAlpha: 0.07 // Opacity of the shadow
+ }
+ }
+}
+}}} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.css b/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.css
new file mode 100644
index 00000000..d30bafb1
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.css
@@ -0,0 +1,259 @@
+/*rules for the plot target div. These will be cascaded down to all plot elements according to css rules*/
+.jqplot-target {
+ position: relative;
+ color: #666666;
+ font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
+ font-size: 1em;
+/* height: 300px;
+ width: 400px;*/
+}
+
+/*rules applied to all axes*/
+.jqplot-axis {
+ font-size: 0.75em;
+}
+
+.jqplot-xaxis {
+ margin-top: 10px;
+}
+
+.jqplot-x2axis {
+ margin-bottom: 10px;
+}
+
+.jqplot-yaxis {
+ margin-right: 10px;
+}
+
+.jqplot-y2axis, .jqplot-y3axis, .jqplot-y4axis, .jqplot-y5axis, .jqplot-y6axis, .jqplot-y7axis, .jqplot-y8axis, .jqplot-y9axis, .jqplot-yMidAxis {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+/*rules applied to all axis tick divs*/
+.jqplot-axis-tick, .jqplot-xaxis-tick, .jqplot-yaxis-tick, .jqplot-x2axis-tick, .jqplot-y2axis-tick, .jqplot-y3axis-tick, .jqplot-y4axis-tick, .jqplot-y5axis-tick, .jqplot-y6axis-tick, .jqplot-y7axis-tick, .jqplot-y8axis-tick, .jqplot-y9axis-tick, .jqplot-yMidAxis-tick {
+ position: absolute;
+ white-space: pre;
+}
+
+
+.jqplot-xaxis-tick {
+ top: 0px;
+ /* initial position untill tick is drawn in proper place */
+ left: 15px;
+/* padding-top: 10px;*/
+ vertical-align: top;
+}
+
+.jqplot-x2axis-tick {
+ bottom: 0px;
+ /* initial position untill tick is drawn in proper place */
+ left: 15px;
+/* padding-bottom: 10px;*/
+ vertical-align: bottom;
+}
+
+.jqplot-yaxis-tick {
+ right: 0px;
+ /* initial position untill tick is drawn in proper place */
+ top: 15px;
+/* padding-right: 10px;*/
+ text-align: right;
+}
+
+.jqplot-yaxis-tick.jqplot-breakTick {
+ right: -20px;
+ margin-right: 0px;
+ padding:1px 5px 1px 5px;
+/* background-color: white;*/
+ z-index: 2;
+ font-size: 1.5em;
+}
+
+.jqplot-y2axis-tick, .jqplot-y3axis-tick, .jqplot-y4axis-tick, .jqplot-y5axis-tick, .jqplot-y6axis-tick, .jqplot-y7axis-tick, .jqplot-y8axis-tick, .jqplot-y9axis-tick {
+ left: 0px;
+ /* initial position untill tick is drawn in proper place */
+ top: 15px;
+/* padding-left: 10px;*/
+/* padding-right: 15px;*/
+ text-align: left;
+}
+
+.jqplot-yMidAxis-tick {
+ text-align: center;
+ white-space: nowrap;
+}
+
+.jqplot-xaxis-label {
+ margin-top: 10px;
+ font-size: 11pt;
+ position: absolute;
+}
+
+.jqplot-x2axis-label {
+ margin-bottom: 10px;
+ font-size: 11pt;
+ position: absolute;
+}
+
+.jqplot-yaxis-label {
+ margin-right: 10px;
+/* text-align: center;*/
+ font-size: 11pt;
+ position: absolute;
+}
+
+.jqplot-yMidAxis-label {
+ font-size: 11pt;
+ position: absolute;
+}
+
+.jqplot-y2axis-label, .jqplot-y3axis-label, .jqplot-y4axis-label, .jqplot-y5axis-label, .jqplot-y6axis-label, .jqplot-y7axis-label, .jqplot-y8axis-label, .jqplot-y9axis-label {
+/* text-align: center;*/
+ font-size: 11pt;
+ margin-left: 10px;
+ position: absolute;
+}
+
+.jqplot-meterGauge-tick {
+ font-size: 0.75em;
+ color: #999999;
+}
+
+.jqplot-meterGauge-label {
+ font-size: 1em;
+ color: #999999;
+}
+
+table.jqplot-table-legend {
+ margin-top: 12px;
+ margin-bottom: 12px;
+ margin-left: 12px;
+ margin-right: 12px;
+}
+
+table.jqplot-table-legend, table.jqplot-cursor-legend {
+ background-color: rgba(255,255,255,0.6);
+ border: 1px solid #cccccc;
+ position: absolute;
+ font-size: 0.75em;
+}
+
+td.jqplot-table-legend {
+ vertical-align:middle;
+}
+
+/*
+These rules could be used instead of assigning
+element styles and relying on js object properties.
+*/
+
+/*
+td.jqplot-table-legend-swatch {
+ padding-top: 0.5em;
+ text-align: center;
+}
+
+tr.jqplot-table-legend:first td.jqplot-table-legend-swatch {
+ padding-top: 0px;
+}
+*/
+
+td.jqplot-seriesToggle:hover, td.jqplot-seriesToggle:active {
+ cursor: pointer;
+}
+
+.jqplot-table-legend .jqplot-series-hidden {
+ text-decoration: line-through;
+}
+
+div.jqplot-table-legend-swatch-outline {
+ border: 1px solid #cccccc;
+ padding:1px;
+}
+
+div.jqplot-table-legend-swatch {
+ width:0px;
+ height:0px;
+ border-top-width: 5px;
+ border-bottom-width: 5px;
+ border-left-width: 6px;
+ border-right-width: 6px;
+ border-top-style: solid;
+ border-bottom-style: solid;
+ border-left-style: solid;
+ border-right-style: solid;
+}
+
+.jqplot-title {
+ top: 0px;
+ left: 0px;
+ padding-bottom: 0.5em;
+ font-size: 1.2em;
+}
+
+table.jqplot-cursor-tooltip {
+ border: 1px solid #cccccc;
+ font-size: 0.75em;
+}
+
+
+.jqplot-cursor-tooltip {
+ border: 1px solid #cccccc;
+ font-size: 0.75em;
+ white-space: nowrap;
+ background: rgba(208,208,208,0.5);
+ padding: 1px;
+}
+
+.jqplot-highlighter-tooltip, .jqplot-canvasOverlay-tooltip {
+ border: 1px solid #cccccc;
+ font-size: 0.75em;
+ white-space: nowrap;
+ background: rgba(208,208,208,0.5);
+ padding: 1px;
+}
+
+.jqplot-point-label {
+ font-size: 0.75em;
+ z-index: 2;
+}
+
+td.jqplot-cursor-legend-swatch {
+ vertical-align: middle;
+ text-align: center;
+}
+
+div.jqplot-cursor-legend-swatch {
+ width: 1.2em;
+ height: 0.7em;
+}
+
+.jqplot-error {
+/* Styles added to the plot target container when there is an error go here.*/
+ text-align: center;
+}
+
+.jqplot-error-message {
+/* Styling of the custom error message div goes here.*/
+ position: relative;
+ top: 46%;
+ display: inline-block;
+}
+
+div.jqplot-bubble-label {
+ font-size: 0.8em;
+/* background: rgba(90%, 90%, 90%, 0.15);*/
+ padding-left: 2px;
+ padding-right: 2px;
+ color: rgb(20%, 20%, 20%);
+}
+
+div.jqplot-bubble-label.jqplot-bubble-label-highlight {
+ background: rgba(90%, 90%, 90%, 0.7);
+}
+
+div.jqplot-noData-container {
+ text-align: center;
+ background-color: rgba(96%, 96%, 96%, 0.3);
+}
diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.js b/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.js
new file mode 100644
index 00000000..cded47ab
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.js
@@ -0,0 +1,11381 @@
+/**
+ * Title: jqPlot Charts
+ *
+ * Pure JavaScript plotting plugin for jQuery.
+ *
+ * About: Version
+ *
+ * version: 1.0.4
+ * revision: 1121
+ *
+ * About: Copyright & License
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * See <GPL Version 2> and <MIT License> contained within this distribution for further information.
+ *
+ * The author would appreciate an email letting him know of any substantial
+ * use of jqPlot. You can reach the author at: chris at jqplot dot com
+ * or see http://www.jqplot.com/info.php. This is, of course, not required.
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php.
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ *
+ * About: Introduction
+ *
+ * jqPlot requires jQuery (1.4+ required for certain features). jQuery 1.4.2 is included in the distribution.
+ * To use jqPlot include jQuery, the jqPlot jQuery plugin, the jqPlot css file and optionally
+ * the excanvas script for IE support in your web page:
+ *
+ * > <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
+ * > <script language="javascript" type="text/javascript" src="jquery-1.4.4.min.js"></script>
+ * > <script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script>
+ * > <link rel="stylesheet" type="text/css" href="jquery.jqplot.css" />
+ *
+ * jqPlot can be customized by overriding the defaults of any of the objects which make
+ * up the plot. The general usage of jqplot is:
+ *
+ * > chart = $.jqplot('targetElemId', [dataArray,...], {optionsObject});
+ *
+ * The options available to jqplot are detailed in <jqPlot Options> in the jqPlotOptions.txt file.
+ *
+ * An actual call to $.jqplot() may look like the
+ * examples below:
+ *
+ * > chart = $.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);
+ *
+ * or
+ *
+ * > dataArray = [34,12,43,55,77];
+ * > chart = $.jqplot('targetElemId', [dataArray, ...], {title:'My Plot', axes:{yaxis:{min:20, max:100}}});
+ *
+ * For more inforrmation, see <jqPlot Usage>.
+ *
+ * About: Usage
+ *
+ * See <jqPlot Usage>
+ *
+ * About: Available Options
+ *
+ * See <jqPlot Options> for a list of options available thorugh the options object (not complete yet!)
+ *
+ * About: Options Usage
+ *
+ * See <Options Tutorial>
+ *
+ * About: Changes
+ *
+ * See <Change Log>
+ *
+ */
+
+(function($) {
+ // make sure undefined is undefined
+ var undefined;
+
+ $.fn.emptyForce = function() {
+ for ( var i = 0, elem; (elem = $(this)[i]) != null; i++ ) {
+ // Remove element nodes and prevent memory leaks
+ if ( elem.nodeType === 1 ) {
+ $.cleanData( elem.getElementsByTagName("*") );
+ }
+
+ // Remove any remaining nodes
+ if ($.jqplot.use_excanvas) {
+ elem.outerHTML = "";
+ }
+ else {
+ while ( elem.firstChild ) {
+ elem.removeChild( elem.firstChild );
+ }
+ }
+
+ elem = null;
+ }
+
+ return $(this);
+ };
+
+ $.fn.removeChildForce = function(parent) {
+ while ( parent.firstChild ) {
+ this.removeChildForce( parent.firstChild );
+ parent.removeChild( parent.firstChild );
+ }
+ };
+
+ $.fn.jqplot = function() {
+ var datas = [];
+ var options = [];
+ // see how many data arrays we have
+ for (var i=0, l=arguments.length; i<l; i++) {
+ if ($.isArray(arguments[i])) {
+ datas.push(arguments[i]);
+ }
+ else if ($.isPlainObject(arguments[i])) {
+ options.push(arguments[i]);
+ }
+ }
+
+ return this.each(function(index) {
+ var tid,
+ plot,
+ $this = $(this),
+ dl = datas.length,
+ ol = options.length,
+ data,
+ opts;
+
+ if (index < dl) {
+ data = datas[index];
+ }
+ else {
+ data = dl ? datas[dl-1] : null;
+ }
+
+ if (index < ol) {
+ opts = options[index];
+ }
+ else {
+ opts = ol ? options[ol-1] : null;
+ }
+
+ // does el have an id?
+ // if not assign it one.
+ tid = $this.attr('id');
+ if (tid === undefined) {
+ tid = 'jqplot_target_' + $.jqplot.targetCounter++;
+ $this.attr('id', tid);
+ }
+
+ plot = $.jqplot(tid, data, opts);
+
+ $this.data('jqplot', plot);
+ });
+ };
+
+
+ /**
+ * Namespace: $.jqplot
+ * jQuery function called by the user to create a plot.
+ *
+ * Parameters:
+ * target - ID of target element to render the plot into.
+ * data - an array of data series.
+ * options - user defined options object. See the individual classes for available options.
+ *
+ * Properties:
+ * config - object to hold configuration information for jqPlot plot object.
+ *
+ * attributes:
+ * enablePlugins - False to disable plugins by default. Plugins must then be explicitly
+ * enabled in the individual plot options. Default: false.
+ * This property sets the "show" property of certain plugins to true or false.
+ * Only plugins that can be immediately active upon loading are affected. This includes
+ * non-renderer plugins like cursor, dragable, highlighter, and trendline.
+ * defaultHeight - Default height for plots where no css height specification exists. This
+ * is a jqplot wide default.
+ * defaultWidth - Default height for plots where no css height specification exists. This
+ * is a jqplot wide default.
+ */
+
+ $.jqplot = function(target, data, options) {
+ var _data = null, _options = null;
+
+ if (arguments.length === 3) {
+ _data = data;
+ _options = options;
+ }
+
+ else if (arguments.length === 2) {
+ if ($.isArray(data)) {
+ _data = data;
+ }
+
+ else if ($.isPlainObject(data)) {
+ _options = data;
+ }
+ }
+
+ if (_data === null && _options !== null && _options.data) {
+ _data = _options.data;
+ }
+
+ var plot = new jqPlot();
+ // remove any error class that may be stuck on target.
+ $('#'+target).removeClass('jqplot-error');
+
+ if ($.jqplot.config.catchErrors) {
+ try {
+ plot.init(target, _data, _options);
+ plot.draw();
+ plot.themeEngine.init.call(plot);
+ return plot;
+ }
+ catch(e) {
+ var msg = $.jqplot.config.errorMessage || e.message;
+ $('#'+target).append('<div class="jqplot-error-message">'+msg+'</div>');
+ $('#'+target).addClass('jqplot-error');
+ document.getElementById(target).style.background = $.jqplot.config.errorBackground;
+ document.getElementById(target).style.border = $.jqplot.config.errorBorder;
+ document.getElementById(target).style.fontFamily = $.jqplot.config.errorFontFamily;
+ document.getElementById(target).style.fontSize = $.jqplot.config.errorFontSize;
+ document.getElementById(target).style.fontStyle = $.jqplot.config.errorFontStyle;
+ document.getElementById(target).style.fontWeight = $.jqplot.config.errorFontWeight;
+ }
+ }
+ else {
+ plot.init(target, _data, _options);
+ plot.draw();
+ plot.themeEngine.init.call(plot);
+ return plot;
+ }
+ };
+
+ $.jqplot.version = "1.0.4";
+ $.jqplot.revision = "1121";
+
+ $.jqplot.targetCounter = 1;
+
+ // canvas manager to reuse canvases on the plot.
+ // Should help solve problem of canvases not being freed and
+ // problem of waiting forever for firefox to decide to free memory.
+ $.jqplot.CanvasManager = function() {
+ // canvases are managed globally so that they can be reused
+ // across plots after they have been freed
+ if (typeof $.jqplot.CanvasManager.canvases == 'undefined') {
+ $.jqplot.CanvasManager.canvases = [];
+ $.jqplot.CanvasManager.free = [];
+ }
+
+ var myCanvases = [];
+
+ this.getCanvas = function() {
+ var canvas;
+ var makeNew = true;
+
+ if (!$.jqplot.use_excanvas) {
+ for (var i = 0, l = $.jqplot.CanvasManager.canvases.length; i < l; i++) {
+ if ($.jqplot.CanvasManager.free[i] === true) {
+ makeNew = false;
+ canvas = $.jqplot.CanvasManager.canvases[i];
+ // $(canvas).removeClass('jqplot-canvasManager-free').addClass('jqplot-canvasManager-inuse');
+ $.jqplot.CanvasManager.free[i] = false;
+ myCanvases.push(i);
+ break;
+ }
+ }
+ }
+
+ if (makeNew) {
+ canvas = document.createElement('canvas');
+ myCanvases.push($.jqplot.CanvasManager.canvases.length);
+ $.jqplot.CanvasManager.canvases.push(canvas);
+ $.jqplot.CanvasManager.free.push(false);
+ }
+
+ return canvas;
+ };
+
+ // this method has to be used after settings the dimesions
+ // on the element returned by getCanvas()
+ this.initCanvas = function(canvas) {
+ if ($.jqplot.use_excanvas) {
+ return window.G_vmlCanvasManager.initElement(canvas);
+ }
+ return canvas;
+ };
+
+ this.freeAllCanvases = function() {
+ for (var i = 0, l=myCanvases.length; i < l; i++) {
+ this.freeCanvas(myCanvases[i]);
+ }
+ myCanvases = [];
+ };
+
+ this.freeCanvas = function(idx) {
+ if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) {
+ // excanvas can't be reused, but properly unset
+ window.G_vmlCanvasManager.uninitElement($.jqplot.CanvasManager.canvases[idx]);
+ $.jqplot.CanvasManager.canvases[idx] = null;
+ }
+ else {
+ var canvas = $.jqplot.CanvasManager.canvases[idx];
+ canvas.getContext('2d').clearRect(0, 0, canvas.width, canvas.height);
+ $(canvas).unbind().removeAttr('class').removeAttr('style');
+ // Style attributes seemed to be still hanging around. wierd. Some ticks
+ // still retained a left: 0px attribute after reusing a canvas.
+ $(canvas).css({left: '', top: '', position: ''});
+ // setting size to 0 may save memory of unused canvases?
+ canvas.width = 0;
+ canvas.height = 0;
+ $.jqplot.CanvasManager.free[idx] = true;
+ }
+ };
+
+ };
+
+
+ // Convienence function that won't hang IE or FF without FireBug.
+ $.jqplot.log = function() {
+ if (window.console) {
+ window.console.log.apply(window.console, arguments);
+ }
+ };
+
+ $.jqplot.config = {
+ addDomReference: false,
+ enablePlugins:false,
+ defaultHeight:300,
+ defaultWidth:400,
+ UTCAdjust:false,
+ timezoneOffset: new Date(new Date().getTimezoneOffset() * 60000),
+ errorMessage: '',
+ errorBackground: '',
+ errorBorder: '',
+ errorFontFamily: '',
+ errorFontSize: '',
+ errorFontStyle: '',
+ errorFontWeight: '',
+ catchErrors: false,
+ defaultTickFormatString: "%.1f",
+ defaultColors: [ "#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"],
+ defaultNegativeColors: [ "#498991", "#C08840", "#9F9274", "#546D61", "#646C4A", "#6F6621", "#6E3F5F", "#4F64B0", "#A89050", "#C45923", "#187399", "#945381", "#959E5C", "#C7AF7B", "#478396", "#907294"],
+ dashLength: 4,
+ gapLength: 4,
+ dotGapLength: 2.5,
+ srcLocation: 'jqplot/src/',
+ pluginLocation: 'jqplot/src/plugins/'
+ };
+
+
+ $.jqplot.arrayMax = function( array ){
+ return Math.max.apply( Math, array );
+ };
+
+ $.jqplot.arrayMin = function( array ){
+ return Math.min.apply( Math, array );
+ };
+
+ $.jqplot.enablePlugins = $.jqplot.config.enablePlugins;
+
+ // canvas related tests taken from modernizer:
+ // Copyright (c) 2009 - 2010 Faruk Ates.
+ // http://www.modernizr.com
+
+ $.jqplot.support_canvas = function() {
+ if (typeof $.jqplot.support_canvas.result == 'undefined') {
+ $.jqplot.support_canvas.result = !!document.createElement('canvas').getContext;
+ }
+ return $.jqplot.support_canvas.result;
+ };
+
+ $.jqplot.support_canvas_text = function() {
+ if (typeof $.jqplot.support_canvas_text.result == 'undefined') {
+ if (window.G_vmlCanvasManager !== undefined && window.G_vmlCanvasManager._version > 887) {
+ $.jqplot.support_canvas_text.result = true;
+ }
+ else {
+ $.jqplot.support_canvas_text.result = !!(document.createElement('canvas').getContext && typeof document.createElement('canvas').getContext('2d').fillText == 'function');
+ }
+
+ }
+ return $.jqplot.support_canvas_text.result;
+ };
+
+ $.jqplot.use_excanvas = ($.browser.msie && !$.jqplot.support_canvas()) ? true : false;
+
+ /**
+ *
+ * Hooks: jqPlot Pugin Hooks
+ *
+ * $.jqplot.preInitHooks - called before initialization.
+ * $.jqplot.postInitHooks - called after initialization.
+ * $.jqplot.preParseOptionsHooks - called before user options are parsed.
+ * $.jqplot.postParseOptionsHooks - called after user options are parsed.
+ * $.jqplot.preDrawHooks - called before plot draw.
+ * $.jqplot.postDrawHooks - called after plot draw.
+ * $.jqplot.preDrawSeriesHooks - called before each series is drawn.
+ * $.jqplot.postDrawSeriesHooks - called after each series is drawn.
+ * $.jqplot.preDrawLegendHooks - called before the legend is drawn.
+ * $.jqplot.addLegendRowHooks - called at the end of legend draw, so plugins
+ * can add rows to the legend table.
+ * $.jqplot.preSeriesInitHooks - called before series is initialized.
+ * $.jqplot.postSeriesInitHooks - called after series is initialized.
+ * $.jqplot.preParseSeriesOptionsHooks - called before series related options
+ * are parsed.
+ * $.jqplot.postParseSeriesOptionsHooks - called after series related options
+ * are parsed.
+ * $.jqplot.eventListenerHooks - called at the end of plot drawing, binds
+ * listeners to the event canvas which lays on top of the grid area.
+ * $.jqplot.preDrawSeriesShadowHooks - called before series shadows are drawn.
+ * $.jqplot.postDrawSeriesShadowHooks - called after series shadows are drawn.
+ *
+ */
+
+ $.jqplot.preInitHooks = [];
+ $.jqplot.postInitHooks = [];
+ $.jqplot.preParseOptionsHooks = [];
+ $.jqplot.postParseOptionsHooks = [];
+ $.jqplot.preDrawHooks = [];
+ $.jqplot.postDrawHooks = [];
+ $.jqplot.preDrawSeriesHooks = [];
+ $.jqplot.postDrawSeriesHooks = [];
+ $.jqplot.preDrawLegendHooks = [];
+ $.jqplot.addLegendRowHooks = [];
+ $.jqplot.preSeriesInitHooks = [];
+ $.jqplot.postSeriesInitHooks = [];
+ $.jqplot.preParseSeriesOptionsHooks = [];
+ $.jqplot.postParseSeriesOptionsHooks = [];
+ $.jqplot.eventListenerHooks = [];
+ $.jqplot.preDrawSeriesShadowHooks = [];
+ $.jqplot.postDrawSeriesShadowHooks = [];
+
+ // A superclass holding some common properties and methods.
+ $.jqplot.ElemContainer = function() {
+ this._elem;
+ this._plotWidth;
+ this._plotHeight;
+ this._plotDimensions = {height:null, width:null};
+ };
+
+ $.jqplot.ElemContainer.prototype.createElement = function(el, offsets, clss, cssopts, attrib) {
+ this._offsets = offsets;
+ var klass = clss || 'jqplot';
+ var elem = document.createElement(el);
+ this._elem = $(elem);
+ this._elem.addClass(klass);
+ this._elem.css(cssopts);
+ this._elem.attr(attrib);
+ // avoid memory leak;
+ elem = null;
+ return this._elem;
+ };
+
+ $.jqplot.ElemContainer.prototype.getWidth = function() {
+ if (this._elem) {
+ return this._elem.outerWidth(true);
+ }
+ else {
+ return null;
+ }
+ };
+
+ $.jqplot.ElemContainer.prototype.getHeight = function() {
+ if (this._elem) {
+ return this._elem.outerHeight(true);
+ }
+ else {
+ return null;
+ }
+ };
+
+ $.jqplot.ElemContainer.prototype.getPosition = function() {
+ if (this._elem) {
+ return this._elem.position();
+ }
+ else {
+ return {top:null, left:null, bottom:null, right:null};
+ }
+ };
+
+ $.jqplot.ElemContainer.prototype.getTop = function() {
+ return this.getPosition().top;
+ };
+
+ $.jqplot.ElemContainer.prototype.getLeft = function() {
+ return this.getPosition().left;
+ };
+
+ $.jqplot.ElemContainer.prototype.getBottom = function() {
+ return this._elem.css('bottom');
+ };
+
+ $.jqplot.ElemContainer.prototype.getRight = function() {
+ return this._elem.css('right');
+ };
+
+
+ /**
+ * Class: Axis
+ * An individual axis object. Cannot be instantiated directly, but created
+ * by the Plot oject. Axis properties can be set or overriden by the
+ * options passed in from the user.
+ *
+ */
+ function Axis(name) {
+ $.jqplot.ElemContainer.call(this);
+ // Group: Properties
+ //
+ // Axes options are specified within an axes object at the top level of the
+ // plot options like so:
+ // > {
+ // > axes: {
+ // > xaxis: {min: 5},
+ // > yaxis: {min: 2, max: 8, numberTicks:4},
+ // > x2axis: {pad: 1.5},
+ // > y2axis: {ticks:[22, 44, 66, 88]}
+ // > }
+ // > }
+ // There are 2 x axes, 'xaxis' and 'x2axis', and
+ // 9 yaxes, 'yaxis', 'y2axis'. 'y3axis', ... Any or all of which may be specified.
+ this.name = name;
+ this._series = [];
+ // prop: show
+ // Wether to display the axis on the graph.
+ this.show = false;
+ // prop: tickRenderer
+ // A class of a rendering engine for creating the ticks labels displayed on the plot,
+ // See <$.jqplot.AxisTickRenderer>.
+ this.tickRenderer = $.jqplot.AxisTickRenderer;
+ // prop: tickOptions
+ // Options that will be passed to the tickRenderer, see <$.jqplot.AxisTickRenderer> options.
+ this.tickOptions = {};
+ // prop: labelRenderer
+ // A class of a rendering engine for creating an axis label.
+ this.labelRenderer = $.jqplot.AxisLabelRenderer;
+ // prop: labelOptions
+ // Options passed to the label renderer.
+ this.labelOptions = {};
+ // prop: label
+ // Label for the axis
+ this.label = null;
+ // prop: showLabel
+ // true to show the axis label.
+ this.showLabel = true;
+ // prop: min
+ // minimum value of the axis (in data units, not pixels).
+ this.min = null;
+ // prop: max
+ // maximum value of the axis (in data units, not pixels).
+ this.max = null;
+ // prop: autoscale
+ // DEPRECATED
+ // the default scaling algorithm produces superior results.
+ this.autoscale = false;
+ // prop: pad
+ // Padding to extend the range above and below the data bounds.
+ // The data range is multiplied by this factor to determine minimum and maximum axis bounds.
+ // A value of 0 will be interpreted to mean no padding, and pad will be set to 1.0.
+ this.pad = 1.2;
+ // prop: padMax
+ // Padding to extend the range above data bounds.
+ // The top of the data range is multiplied by this factor to determine maximum axis bounds.
+ // A value of 0 will be interpreted to mean no padding, and padMax will be set to 1.0.
+ this.padMax = null;
+ // prop: padMin
+ // Padding to extend the range below data bounds.
+ // The bottom of the data range is multiplied by this factor to determine minimum axis bounds.
+ // A value of 0 will be interpreted to mean no padding, and padMin will be set to 1.0.
+ this.padMin = null;
+ // prop: ticks
+ // 1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis.
+ // If no label is specified, the value is formatted into an appropriate label.
+ this.ticks = [];
+ // prop: numberTicks
+ // Desired number of ticks. Default is to compute automatically.
+ this.numberTicks;
+ // prop: tickInterval
+ // number of units between ticks. Mutually exclusive with numberTicks.
+ this.tickInterval;
+ // prop: renderer
+ // A class of a rendering engine that handles tick generation,
+ // scaling input data to pixel grid units and drawing the axis element.
+ this.renderer = $.jqplot.LinearAxisRenderer;
+ // prop: rendererOptions
+ // renderer specific options. See <$.jqplot.LinearAxisRenderer> for options.
+ this.rendererOptions = {};
+ // prop: showTicks
+ // Wether to show the ticks (both marks and labels) or not.
+ // Will not override showMark and showLabel options if specified on the ticks themselves.
+ this.showTicks = true;
+ // prop: showTickMarks
+ // Wether to show the tick marks (line crossing grid) or not.
+ // Overridden by showTicks and showMark option of tick itself.
+ this.showTickMarks = true;
+ // prop: showMinorTicks
+ // Wether or not to show minor ticks. This is renderer dependent.
+ this.showMinorTicks = true;
+ // prop: drawMajorGridlines
+ // True to draw gridlines for major axis ticks.
+ this.drawMajorGridlines = true;
+ // prop: drawMinorGridlines
+ // True to draw gridlines for minor ticks.
+ this.drawMinorGridlines = false;
+ // prop: drawMajorTickMarks
+ // True to draw tick marks for major axis ticks.
+ this.drawMajorTickMarks = true;
+ // prop: drawMinorTickMarks
+ // True to draw tick marks for minor ticks. This is renderer dependent.
+ this.drawMinorTickMarks = true;
+ // prop: useSeriesColor
+ // Use the color of the first series associated with this axis for the
+ // tick marks and line bordering this axis.
+ this.useSeriesColor = false;
+ // prop: borderWidth
+ // width of line stroked at the border of the axis. Defaults
+ // to the width of the grid boarder.
+ this.borderWidth = null;
+ // prop: borderColor
+ // color of the border adjacent to the axis. Defaults to grid border color.
+ this.borderColor = null;
+ // prop: scaleToHiddenSeries
+ // True to include hidden series when computing axes bounds and scaling.
+ this.scaleToHiddenSeries = false;
+ // minimum and maximum values on the axis.
+ this._dataBounds = {min:null, max:null};
+ // statistics (min, max, mean) as well as actual data intervals for each series attached to axis.
+ // holds collection of {intervals:[], min:, max:, mean: } objects for each series on axis.
+ this._intervalStats = [];
+ // pixel position from the top left of the min value and max value on the axis.
+ this._offsets = {min:null, max:null};
+ this._ticks=[];
+ this._label = null;
+ // prop: syncTicks
+ // true to try and synchronize tick spacing across multiple axes so that ticks and
+ // grid lines line up. This has an impact on autoscaling algorithm, however.
+ // In general, autoscaling an individual axis will work better if it does not
+ // have to sync ticks.
+ this.syncTicks = null;
+ // prop: tickSpacing
+ // Approximate pixel spacing between ticks on graph. Used during autoscaling.
+ // This number will be an upper bound, actual spacing will be less.
+ this.tickSpacing = 75;
+ // Properties to hold the original values for min, max, ticks, tickInterval and numberTicks
+ // so they can be restored if altered by plugins.
+ this._min = null;
+ this._max = null;
+ this._tickInterval = null;
+ this._numberTicks = null;
+ this.__ticks = null;
+ // hold original user options.
+ this._options = {};
+ }
+
+ Axis.prototype = new $.jqplot.ElemContainer();
+ Axis.prototype.constructor = Axis;
+
+ Axis.prototype.init = function() {
+ if ($.isFunction(this.renderer)) {
+ this.renderer = new this.renderer();
+ }
+ // set the axis name
+ this.tickOptions.axis = this.name;
+ // if showMark or showLabel tick options not specified, use value of axis option.
+ // showTicks overrides showTickMarks.
+ if (this.tickOptions.showMark == null) {
+ this.tickOptions.showMark = this.showTicks;
+ }
+ if (this.tickOptions.showMark == null) {
+ this.tickOptions.showMark = this.showTickMarks;
+ }
+ if (this.tickOptions.showLabel == null) {
+ this.tickOptions.showLabel = this.showTicks;
+ }
+
+ if (this.label == null || this.label == '') {
+ this.showLabel = false;
+ }
+ else {
+ this.labelOptions.label = this.label;
+ }
+ if (this.showLabel == false) {
+ this.labelOptions.show = false;
+ }
+ // set the default padMax, padMin if not specified
+ // special check, if no padding desired, padding
+ // should be set to 1.0
+ if (this.pad == 0) {
+ this.pad = 1.0;
+ }
+ if (this.padMax == 0) {
+ this.padMax = 1.0;
+ }
+ if (this.padMin == 0) {
+ this.padMin = 1.0;
+ }
+ if (this.padMax == null) {
+ this.padMax = (this.pad-1)/2 + 1;
+ }
+ if (this.padMin == null) {
+ this.padMin = (this.pad-1)/2 + 1;
+ }
+ // now that padMin and padMax are correctly set, reset pad in case user has supplied
+ // padMin and/or padMax
+ this.pad = this.padMax + this.padMin - 1;
+ if (this.min != null || this.max != null) {
+ this.autoscale = false;
+ }
+ // if not set, sync ticks for y axes but not x by default.
+ if (this.syncTicks == null && this.name.indexOf('y') > -1) {
+ this.syncTicks = true;
+ }
+ else if (this.syncTicks == null){
+ this.syncTicks = false;
+ }
+ this.renderer.init.call(this, this.rendererOptions);
+
+ };
+
+ Axis.prototype.draw = function(ctx, plot) {
+ // Memory Leaks patch
+ if (this.__ticks) {
+ this.__ticks = null;
+ }
+
+ return this.renderer.draw.call(this, ctx, plot);
+
+ };
+
+ Axis.prototype.set = function() {
+ this.renderer.set.call(this);
+ };
+
+ Axis.prototype.pack = function(pos, offsets) {
+ if (this.show) {
+ this.renderer.pack.call(this, pos, offsets);
+ }
+ // these properties should all be available now.
+ if (this._min == null) {
+ this._min = this.min;
+ this._max = this.max;
+ this._tickInterval = this.tickInterval;
+ this._numberTicks = this.numberTicks;
+ this.__ticks = this._ticks;
+ }
+ };
+
+ // reset the axis back to original values if it has been scaled, zoomed, etc.
+ Axis.prototype.reset = function() {
+ this.renderer.reset.call(this);
+ };
+
+ Axis.prototype.resetScale = function(opts) {
+ $.extend(true, this, {min: null, max: null, numberTicks: null, tickInterval: null, _ticks: [], ticks: []}, opts);
+ this.resetDataBounds();
+ };
+
+ Axis.prototype.resetDataBounds = function() {
+ // Go through all the series attached to this axis and find
+ // the min/max bounds for this axis.
+ var db = this._dataBounds;
+ db.min = null;
+ db.max = null;
+ var l, s, d;
+ // check for when to force min 0 on bar series plots.
+ var doforce = (this.show) ? true : false;
+ for (var i=0; i<this._series.length; i++) {
+ s = this._series[i];
+ if (s.show || this.scaleToHiddenSeries) {
+ d = s._plotData;
+ if (s._type === 'line' && s.renderer.bands.show && this.name.charAt(0) !== 'x') {
+ d = [[0, s.renderer.bands._min], [1, s.renderer.bands._max]];
+ }
+
+ var minyidx = 1, maxyidx = 1;
+
+ if (s._type != null && s._type == 'ohlc') {
+ minyidx = 3;
+ maxyidx = 2;
+ }
+
+ for (var j=0, l=d.length; j<l; j++) {
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ if ((d[j][0] != null && d[j][0] < db.min) || db.min == null) {
+ db.min = d[j][0];
+ }
+ if ((d[j][0] != null && d[j][0] > db.max) || db.max == null) {
+ db.max = d[j][0];
+ }
+ }
+ else {
+ if ((d[j][minyidx] != null && d[j][minyidx] < db.min) || db.min == null) {
+ db.min = d[j][minyidx];
+ }
+ if ((d[j][maxyidx] != null && d[j][maxyidx] > db.max) || db.max == null) {
+ db.max = d[j][maxyidx];
+ }
+ }
+ }
+
+ // Hack to not pad out bottom of bar plots unless user has specified a padding.
+ // every series will have a chance to set doforce to false. once it is set to
+ // false, it cannot be reset to true.
+ // If any series attached to axis is not a bar, wont force 0.
+ if (doforce && s.renderer.constructor !== $.jqplot.BarRenderer) {
+ doforce = false;
+ }
+
+ else if (doforce && this._options.hasOwnProperty('forceTickAt0') && this._options.forceTickAt0 == false) {
+ doforce = false;
+ }
+
+ else if (doforce && s.renderer.constructor === $.jqplot.BarRenderer) {
+ if (s.barDirection == 'vertical' && this.name != 'xaxis' && this.name != 'x2axis') {
+ if (this._options.pad != null || this._options.padMin != null) {
+ doforce = false;
+ }
+ }
+
+ else if (s.barDirection == 'horizontal' && (this.name == 'xaxis' || this.name == 'x2axis')) {
+ if (this._options.pad != null || this._options.padMin != null) {
+ doforce = false;
+ }
+ }
+
+ }
+ }
+ }
+
+ if (doforce && this.renderer.constructor === $.jqplot.LinearAxisRenderer && db.min >= 0) {
+ this.padMin = 1.0;
+ this.forceTickAt0 = true;
+ }
+ };
+
+ /**
+ * Class: Legend
+ * Legend object. Cannot be instantiated directly, but created
+ * by the Plot oject. Legend properties can be set or overriden by the
+ * options passed in from the user.
+ */
+ function Legend(options) {
+ $.jqplot.ElemContainer.call(this);
+ // Group: Properties
+
+ // prop: show
+ // Wether to display the legend on the graph.
+ this.show = false;
+ // prop: location
+ // Placement of the legend. one of the compass directions: nw, n, ne, e, se, s, sw, w
+ this.location = 'ne';
+ // prop: labels
+ // Array of labels to use. By default the renderer will look for labels on the series.
+ // Labels specified in this array will override labels specified on the series.
+ this.labels = [];
+ // prop: showLabels
+ // true to show the label text on the legend.
+ this.showLabels = true;
+ // prop: showSwatch
+ // true to show the color swatches on the legend.
+ this.showSwatches = true;
+ // prop: placement
+ // "insideGrid" places legend inside the grid area of the plot.
+ // "outsideGrid" places the legend outside the grid but inside the plot container,
+ // shrinking the grid to accomodate the legend.
+ // "inside" synonym for "insideGrid",
+ // "outside" places the legend ouside the grid area, but does not shrink the grid which
+ // can cause the legend to overflow the plot container.
+ this.placement = "insideGrid";
+ // prop: xoffset
+ // DEPRECATED. Set the margins on the legend using the marginTop, marginLeft, etc.
+ // properties or via CSS margin styling of the .jqplot-table-legend class.
+ this.xoffset = 0;
+ // prop: yoffset
+ // DEPRECATED. Set the margins on the legend using the marginTop, marginLeft, etc.
+ // properties or via CSS margin styling of the .jqplot-table-legend class.
+ this.yoffset = 0;
+ // prop: border
+ // css spec for the border around the legend box.
+ this.border;
+ // prop: background
+ // css spec for the background of the legend box.
+ this.background;
+ // prop: textColor
+ // css color spec for the legend text.
+ this.textColor;
+ // prop: fontFamily
+ // css font-family spec for the legend text.
+ this.fontFamily;
+ // prop: fontSize
+ // css font-size spec for the legend text.
+ this.fontSize ;
+ // prop: rowSpacing
+ // css padding-top spec for the rows in the legend.
+ this.rowSpacing = '0.5em';
+ // renderer
+ // A class that will create a DOM object for the legend,
+ // see <$.jqplot.TableLegendRenderer>.
+ this.renderer = $.jqplot.TableLegendRenderer;
+ // prop: rendererOptions
+ // renderer specific options passed to the renderer.
+ this.rendererOptions = {};
+ // prop: predraw
+ // Wether to draw the legend before the series or not.
+ // Used with series specific legend renderers for pie, donut, mekko charts, etc.
+ this.preDraw = false;
+ // prop: marginTop
+ // CSS margin for the legend DOM element. This will set an element
+ // CSS style for the margin which will override any style sheet setting.
+ // The default will be taken from the stylesheet.
+ this.marginTop = null;
+ // prop: marginRight
+ // CSS margin for the legend DOM element. This will set an element
+ // CSS style for the margin which will override any style sheet setting.
+ // The default will be taken from the stylesheet.
+ this.marginRight = null;
+ // prop: marginBottom
+ // CSS margin for the legend DOM element. This will set an element
+ // CSS style for the margin which will override any style sheet setting.
+ // The default will be taken from the stylesheet.
+ this.marginBottom = null;
+ // prop: marginLeft
+ // CSS margin for the legend DOM element. This will set an element
+ // CSS style for the margin which will override any style sheet setting.
+ // The default will be taken from the stylesheet.
+ this.marginLeft = null;
+ // prop: escapeHtml
+ // True to escape special characters with their html entity equivalents
+ // in legend text. "<" becomes &lt; and so on, so html tags are not rendered.
+ this.escapeHtml = false;
+ this._series = [];
+
+ $.extend(true, this, options);
+ }
+
+ Legend.prototype = new $.jqplot.ElemContainer();
+ Legend.prototype.constructor = Legend;
+
+ Legend.prototype.setOptions = function(options) {
+ $.extend(true, this, options);
+
+ // Try to emulate deprecated behaviour
+ // if user has specified xoffset or yoffset, copy these to
+ // the margin properties.
+
+ if (this.placement == 'inside') {
+ this.placement = 'insideGrid';
+ }
+
+ if (this.xoffset >0) {
+ if (this.placement == 'insideGrid') {
+ switch (this.location) {
+ case 'nw':
+ case 'w':
+ case 'sw':
+ if (this.marginLeft == null) {
+ this.marginLeft = this.xoffset + 'px';
+ }
+ this.marginRight = '0px';
+ break;
+ case 'ne':
+ case 'e':
+ case 'se':
+ default:
+ if (this.marginRight == null) {
+ this.marginRight = this.xoffset + 'px';
+ }
+ this.marginLeft = '0px';
+ break;
+ }
+ }
+ else if (this.placement == 'outside') {
+ switch (this.location) {
+ case 'nw':
+ case 'w':
+ case 'sw':
+ if (this.marginRight == null) {
+ this.marginRight = this.xoffset + 'px';
+ }
+ this.marginLeft = '0px';
+ break;
+ case 'ne':
+ case 'e':
+ case 'se':
+ default:
+ if (this.marginLeft == null) {
+ this.marginLeft = this.xoffset + 'px';
+ }
+ this.marginRight = '0px';
+ break;
+ }
+ }
+ this.xoffset = 0;
+ }
+
+ if (this.yoffset >0) {
+ if (this.placement == 'outside') {
+ switch (this.location) {
+ case 'sw':
+ case 's':
+ case 'se':
+ if (this.marginTop == null) {
+ this.marginTop = this.yoffset + 'px';
+ }
+ this.marginBottom = '0px';
+ break;
+ case 'ne':
+ case 'n':
+ case 'nw':
+ default:
+ if (this.marginBottom == null) {
+ this.marginBottom = this.yoffset + 'px';
+ }
+ this.marginTop = '0px';
+ break;
+ }
+ }
+ else if (this.placement == 'insideGrid') {
+ switch (this.location) {
+ case 'sw':
+ case 's':
+ case 'se':
+ if (this.marginBottom == null) {
+ this.marginBottom = this.yoffset + 'px';
+ }
+ this.marginTop = '0px';
+ break;
+ case 'ne':
+ case 'n':
+ case 'nw':
+ default:
+ if (this.marginTop == null) {
+ this.marginTop = this.yoffset + 'px';
+ }
+ this.marginBottom = '0px';
+ break;
+ }
+ }
+ this.yoffset = 0;
+ }
+
+ // TO-DO:
+ // Handle case where offsets are < 0.
+ //
+ };
+
+ Legend.prototype.init = function() {
+ if ($.isFunction(this.renderer)) {
+ this.renderer = new this.renderer();
+ }
+ this.renderer.init.call(this, this.rendererOptions);
+ };
+
+ Legend.prototype.draw = function(offsets, plot) {
+ for (var i=0; i<$.jqplot.preDrawLegendHooks.length; i++){
+ $.jqplot.preDrawLegendHooks[i].call(this, offsets);
+ }
+ return this.renderer.draw.call(this, offsets, plot);
+ };
+
+ Legend.prototype.pack = function(offsets) {
+ this.renderer.pack.call(this, offsets);
+ };
+
+ /**
+ * Class: Title
+ * Plot Title object. Cannot be instantiated directly, but created
+ * by the Plot oject. Title properties can be set or overriden by the
+ * options passed in from the user.
+ *
+ * Parameters:
+ * text - text of the title.
+ */
+ function Title(text) {
+ $.jqplot.ElemContainer.call(this);
+ // Group: Properties
+
+ // prop: text
+ // text of the title;
+ this.text = text;
+ // prop: show
+ // wether or not to show the title
+ this.show = true;
+ // prop: fontFamily
+ // css font-family spec for the text.
+ this.fontFamily;
+ // prop: fontSize
+ // css font-size spec for the text.
+ this.fontSize ;
+ // prop: textAlign
+ // css text-align spec for the text.
+ this.textAlign;
+ // prop: textColor
+ // css color spec for the text.
+ this.textColor;
+ // prop: renderer
+ // A class for creating a DOM element for the title,
+ // see <$.jqplot.DivTitleRenderer>.
+ this.renderer = $.jqplot.DivTitleRenderer;
+ // prop: rendererOptions
+ // renderer specific options passed to the renderer.
+ this.rendererOptions = {};
+ // prop: escapeHtml
+ // True to escape special characters with their html entity equivalents
+ // in title text. "<" becomes &lt; and so on, so html tags are not rendered.
+ this.escapeHtml = false;
+ }
+
+ Title.prototype = new $.jqplot.ElemContainer();
+ Title.prototype.constructor = Title;
+
+ Title.prototype.init = function() {
+ if ($.isFunction(this.renderer)) {
+ this.renderer = new this.renderer();
+ }
+ this.renderer.init.call(this, this.rendererOptions);
+ };
+
+ Title.prototype.draw = function(width) {
+ return this.renderer.draw.call(this, width);
+ };
+
+ Title.prototype.pack = function() {
+ this.renderer.pack.call(this);
+ };
+
+
+ /**
+ * Class: Series
+ * An individual data series object. Cannot be instantiated directly, but created
+ * by the Plot oject. Series properties can be set or overriden by the
+ * options passed in from the user.
+ */
+ function Series(options) {
+ options = options || {};
+ $.jqplot.ElemContainer.call(this);
+ // Group: Properties
+ // Properties will be assigned from a series array at the top level of the
+ // options. If you had two series and wanted to change the color and line
+ // width of the first and set the second to use the secondary y axis with
+ // no shadow and supply custom labels for each:
+ // > {
+ // > series:[
+ // > {color: '#ff4466', lineWidth: 5, label:'good line'},
+ // > {yaxis: 'y2axis', shadow: false, label:'bad line'}
+ // > ]
+ // > }
+
+ // prop: show
+ // wether or not to draw the series.
+ this.show = true;
+ // prop: xaxis
+ // which x axis to use with this series, either 'xaxis' or 'x2axis'.
+ this.xaxis = 'xaxis';
+ this._xaxis;
+ // prop: yaxis
+ // which y axis to use with this series, either 'yaxis' or 'y2axis'.
+ this.yaxis = 'yaxis';
+ this._yaxis;
+ this.gridBorderWidth = 2.0;
+ // prop: renderer
+ // A class of a renderer which will draw the series,
+ // see <$.jqplot.LineRenderer>.
+ this.renderer = $.jqplot.LineRenderer;
+ // prop: rendererOptions
+ // Options to pass on to the renderer.
+ this.rendererOptions = {};
+ this.data = [];
+ this.gridData = [];
+ // prop: label
+ // Line label to use in the legend.
+ this.label = '';
+ // prop: showLabel
+ // true to show label for this series in the legend.
+ this.showLabel = true;
+ // prop: color
+ // css color spec for the series
+ this.color;
+ // prop: negativeColor
+ // css color spec used for filled (area) plots that are filled to zero and
+ // the "useNegativeColors" option is true.
+ this.negativeColor;
+ // prop: lineWidth
+ // width of the line in pixels. May have different meanings depending on renderer.
+ this.lineWidth = 2.5;
+ // prop: lineJoin
+ // Canvas lineJoin style between segments of series.
+ this.lineJoin = 'round';
+ // prop: lineCap
+ // Canvas lineCap style at ends of line.
+ this.lineCap = 'round';
+ // prop: linePattern
+ // line pattern 'dashed', 'dotted', 'solid', some combination
+ // of '-' and '.' characters such as '.-.' or a numerical array like
+ // [draw, skip, draw, skip, ...] such as [1, 10] to draw a dotted line,
+ // [1, 10, 20, 10] to draw a dot-dash line, and so on.
+ this.linePattern = 'solid';
+ this.shadow = true;
+ // prop: shadowAngle
+ // Shadow angle in degrees
+ this.shadowAngle = 45;
+ // prop: shadowOffset
+ // Shadow offset from line in pixels
+ this.shadowOffset = 1.25;
+ // prop: shadowDepth
+ // Number of times shadow is stroked, each stroke offset shadowOffset from the last.
+ this.shadowDepth = 3;
+ // prop: shadowAlpha
+ // Alpha channel transparency of shadow. 0 = transparent.
+ this.shadowAlpha = '0.1';
+ // prop: breakOnNull
+ // Wether line segments should be be broken at null value.
+ // False will join point on either side of line.
+ this.breakOnNull = false;
+ // prop: markerRenderer
+ // A class of a renderer which will draw marker (e.g. circle, square, ...) at the data points,
+ // see <$.jqplot.MarkerRenderer>.
+ this.markerRenderer = $.jqplot.MarkerRenderer;
+ // prop: markerOptions
+ // renderer specific options to pass to the markerRenderer,
+ // see <$.jqplot.MarkerRenderer>.
+ this.markerOptions = {};
+ // prop: showLine
+ // wether to actually draw the line or not. Series will still be renderered, even if no line is drawn.
+ this.showLine = true;
+ // prop: showMarker
+ // wether or not to show the markers at the data points.
+ this.showMarker = true;
+ // prop: index
+ // 0 based index of this series in the plot series array.
+ this.index;
+ // prop: fill
+ // true or false, wether to fill under lines or in bars.
+ // May not be implemented in all renderers.
+ this.fill = false;
+ // prop: fillColor
+ // CSS color spec to use for fill under line. Defaults to line color.
+ this.fillColor;
+ // prop: fillAlpha
+ // Alpha transparency to apply to the fill under the line.
+ // Use this to adjust alpha separate from fill color.
+ this.fillAlpha;
+ // prop: fillAndStroke
+ // If true will stroke the line (with color this.color) as well as fill under it.
+ // Applies only when fill is true.
+ this.fillAndStroke = false;
+ // prop: disableStack
+ // true to not stack this series with other series in the plot.
+ // To render properly, non-stacked series must come after any stacked series
+ // in the plot's data series array. So, the plot's data series array would look like:
+ // > [stackedSeries1, stackedSeries2, ..., nonStackedSeries1, nonStackedSeries2, ...]
+ // disableStack will put a gap in the stacking order of series, and subsequent
+ // stacked series will not fill down through the non-stacked series and will
+ // most likely not stack properly on top of the non-stacked series.
+ this.disableStack = false;
+ // _stack is set by the Plot if the plot is a stacked chart.
+ // will stack lines or bars on top of one another to build a "mountain" style chart.
+ // May not be implemented in all renderers.
+ this._stack = false;
+ // prop: neighborThreshold
+ // how close or far (in pixels) the cursor must be from a point marker to detect the point.
+ this.neighborThreshold = 4;
+ // prop: fillToZero
+ // true will force bar and filled series to fill toward zero on the fill Axis.
+ this.fillToZero = false;
+ // prop: fillToValue
+ // fill a filled series to this value on the fill axis.
+ // Works in conjunction with fillToZero, so that must be true.
+ this.fillToValue = 0;
+ // prop: fillAxis
+ // Either 'x' or 'y'. Which axis to fill the line toward if fillToZero is true.
+ // 'y' means fill up/down to 0 on the y axis for this series.
+ this.fillAxis = 'y';
+ // prop: useNegativeColors
+ // true to color negative values differently in filled and bar charts.
+ this.useNegativeColors = true;
+ this._stackData = [];
+ // _plotData accounts for stacking. If plots not stacked, _plotData and data are same. If
+ // stacked, _plotData is accumulation of stacking data.
+ this._plotData = [];
+ // _plotValues hold the individual x and y values that will be plotted for this series.
+ this._plotValues = {x:[], y:[]};
+ // statistics about the intervals between data points. Used for auto scaling.
+ this._intervals = {x:{}, y:{}};
+ // data from the previous series, for stacked charts.
+ this._prevPlotData = [];
+ this._prevGridData = [];
+ this._stackAxis = 'y';
+ this._primaryAxis = '_xaxis';
+ // give each series a canvas to draw on. This should allow for redrawing speedups.
+ this.canvas = new $.jqplot.GenericCanvas();
+ this.shadowCanvas = new $.jqplot.GenericCanvas();
+ this.plugins = {};
+ // sum of y values in this series.
+ this._sumy = 0;
+ this._sumx = 0;
+ this._type = '';
+ }
+
+ Series.prototype = new $.jqplot.ElemContainer();
+ Series.prototype.constructor = Series;
+
+ Series.prototype.init = function(index, gridbw, plot) {
+ // weed out any null values in the data.
+ this.index = index;
+ this.gridBorderWidth = gridbw;
+ var d = this.data;
+ var temp = [], i, l;
+ for (i=0, l=d.length; i<l; i++) {
+ if (! this.breakOnNull) {
+ if (d[i] == null || d[i][0] == null || d[i][1] == null) {
+ continue;
+ }
+ else {
+ temp.push(d[i]);
+ }
+ }
+ else {
+ // TODO: figure out what to do with null values
+ // probably involve keeping nulls in data array
+ // and then updating renderers to break line
+ // when it hits null value.
+ // For now, just keep value.
+ temp.push(d[i]);
+ }
+ }
+ this.data = temp;
+
+ // parse the renderer options and apply default colors if not provided
+ // Set color even if not shown, so series don't change colors when other
+ // series on plot shown/hidden.
+ if (!this.color) {
+ this.color = plot.colorGenerator.get(this.index);
+ }
+ if (!this.negativeColor) {
+ this.negativeColor = plot.negativeColorGenerator.get(this.index);
+ }
+
+
+ if (!this.fillColor) {
+ this.fillColor = this.color;
+ }
+ if (this.fillAlpha) {
+ var comp = $.jqplot.normalize2rgb(this.fillColor);
+ var comp = $.jqplot.getColorComponents(comp);
+ this.fillColor = 'rgba('+comp[0]+','+comp[1]+','+comp[2]+','+this.fillAlpha+')';
+ }
+ if ($.isFunction(this.renderer)) {
+ this.renderer = new this.renderer();
+ }
+ this.renderer.init.call(this, this.rendererOptions, plot);
+ this.markerRenderer = new this.markerRenderer();
+ if (!this.markerOptions.color) {
+ this.markerOptions.color = this.color;
+ }
+ if (this.markerOptions.show == null) {
+ this.markerOptions.show = this.showMarker;
+ }
+ this.showMarker = this.markerOptions.show;
+ // the markerRenderer is called within it's own scaope, don't want to overwrite series options!!
+ this.markerRenderer.init(this.markerOptions);
+ };
+
+ // data - optional data point array to draw using this series renderer
+ // gridData - optional grid data point array to draw using this series renderer
+ // stackData - array of cumulative data for stacked plots.
+ Series.prototype.draw = function(sctx, opts, plot) {
+ var options = (opts == undefined) ? {} : opts;
+ sctx = (sctx == undefined) ? this.canvas._ctx : sctx;
+
+ var j, data, gridData;
+
+ // hooks get called even if series not shown
+ // we don't clear canvas here, it would wipe out all other series as well.
+ for (j=0; j<$.jqplot.preDrawSeriesHooks.length; j++) {
+ $.jqplot.preDrawSeriesHooks[j].call(this, sctx, options);
+ }
+ if (this.show) {
+ this.renderer.setGridData.call(this, plot);
+ if (!options.preventJqPlotSeriesDrawTrigger) {
+ $(sctx.canvas).trigger('jqplotSeriesDraw', [this.data, this.gridData]);
+ }
+ data = [];
+ if (options.data) {
+ data = options.data;
+ }
+ else if (!this._stack) {
+ data = this.data;
+ }
+ else {
+ data = this._plotData;
+ }
+ gridData = options.gridData || this.renderer.makeGridData.call(this, data, plot);
+
+ if (this._type === 'line' && this.renderer.smooth && this.renderer._smoothedData.length) {
+ gridData = this.renderer._smoothedData;
+ }
+
+ this.renderer.draw.call(this, sctx, gridData, options, plot);
+ }
+
+ for (j=0; j<$.jqplot.postDrawSeriesHooks.length; j++) {
+ $.jqplot.postDrawSeriesHooks[j].call(this, sctx, options, plot);
+ }
+
+ sctx = opts = plot = j = data = gridData = null;
+ };
+
+ Series.prototype.drawShadow = function(sctx, opts, plot) {
+ var options = (opts == undefined) ? {} : opts;
+ sctx = (sctx == undefined) ? this.shadowCanvas._ctx : sctx;
+
+ var j, data, gridData;
+
+ // hooks get called even if series not shown
+ // we don't clear canvas here, it would wipe out all other series as well.
+ for (j=0; j<$.jqplot.preDrawSeriesShadowHooks.length; j++) {
+ $.jqplot.preDrawSeriesShadowHooks[j].call(this, sctx, options);
+ }
+ if (this.shadow) {
+ this.renderer.setGridData.call(this, plot);
+
+ data = [];
+ if (options.data) {
+ data = options.data;
+ }
+ else if (!this._stack) {
+ data = this.data;
+ }
+ else {
+ data = this._plotData;
+ }
+ gridData = options.gridData || this.renderer.makeGridData.call(this, data, plot);
+
+ this.renderer.drawShadow.call(this, sctx, gridData, options, plot);
+ }
+
+ for (j=0; j<$.jqplot.postDrawSeriesShadowHooks.length; j++) {
+ $.jqplot.postDrawSeriesShadowHooks[j].call(this, sctx, options);
+ }
+
+ sctx = opts = plot = j = data = gridData = null;
+
+ };
+
+ // toggles series display on plot, e.g. show/hide series
+ Series.prototype.toggleDisplay = function(ev, callback) {
+ var s, speed;
+ if (ev.data.series) {
+ s = ev.data.series;
+ }
+ else {
+ s = this;
+ }
+
+ if (ev.data.speed) {
+ speed = ev.data.speed;
+ }
+ if (speed) {
+ // this can be tricky because series may not have a canvas element if replotting.
+ if (s.canvas._elem.is(':hidden') || !s.show) {
+ s.show = true;
+
+ s.canvas._elem.removeClass('jqplot-series-hidden');
+ if (s.shadowCanvas._elem) {
+ s.shadowCanvas._elem.fadeIn(speed);
+ }
+ s.canvas._elem.fadeIn(speed, callback);
+ s.canvas._elem.nextAll('.jqplot-point-label.jqplot-series-'+s.index).fadeIn(speed);
+ }
+ else {
+ s.show = false;
+
+ s.canvas._elem.addClass('jqplot-series-hidden');
+ if (s.shadowCanvas._elem) {
+ s.shadowCanvas._elem.fadeOut(speed);
+ }
+ s.canvas._elem.fadeOut(speed, callback);
+ s.canvas._elem.nextAll('.jqplot-point-label.jqplot-series-'+s.index).fadeOut(speed);
+ }
+ }
+ else {
+ // this can be tricky because series may not have a canvas element if replotting.
+ if (s.canvas._elem.is(':hidden') || !s.show) {
+ s.show = true;
+
+ s.canvas._elem.removeClass('jqplot-series-hidden');
+ if (s.shadowCanvas._elem) {
+ s.shadowCanvas._elem.show();
+ }
+ s.canvas._elem.show(0, callback);
+ s.canvas._elem.nextAll('.jqplot-point-label.jqplot-series-'+s.index).show();
+ }
+ else {
+ s.show = false;
+
+ s.canvas._elem.addClass('jqplot-series-hidden');
+ if (s.shadowCanvas._elem) {
+ s.shadowCanvas._elem.hide();
+ }
+ s.canvas._elem.hide(0, callback);
+ s.canvas._elem.nextAll('.jqplot-point-label.jqplot-series-'+s.index).hide();
+ }
+ }
+ };
+
+
+
+ /**
+ * Class: Grid
+ *
+ * Object representing the grid on which the plot is drawn. The grid in this
+ * context is the area bounded by the axes, the area which will contain the series.
+ * Note, the series are drawn on their own canvas.
+ * The Grid object cannot be instantiated directly, but is created by the Plot oject.
+ * Grid properties can be set or overriden by the options passed in from the user.
+ */
+ function Grid() {
+ $.jqplot.ElemContainer.call(this);
+ // Group: Properties
+
+ // prop: drawGridlines
+ // wether to draw the gridlines on the plot.
+ this.drawGridlines = true;
+ // prop: gridLineColor
+ // color of the grid lines.
+ this.gridLineColor = '#cccccc';
+ // prop: gridLineWidth
+ // width of the grid lines.
+ this.gridLineWidth = 1.0;
+ // prop: background
+ // css spec for the background color.
+ this.background = '#fffdf6';
+ // prop: borderColor
+ // css spec for the color of the grid border.
+ this.borderColor = '#999999';
+ // prop: borderWidth
+ // width of the border in pixels.
+ this.borderWidth = 2.0;
+ // prop: drawBorder
+ // True to draw border around grid.
+ this.drawBorder = true;
+ // prop: shadow
+ // wether to show a shadow behind the grid.
+ this.shadow = true;
+ // prop: shadowAngle
+ // shadow angle in degrees
+ this.shadowAngle = 45;
+ // prop: shadowOffset
+ // Offset of each shadow stroke from the border in pixels
+ this.shadowOffset = 1.5;
+ // prop: shadowWidth
+ // width of the stoke for the shadow
+ this.shadowWidth = 3;
+ // prop: shadowDepth
+ // Number of times shadow is stroked, each stroke offset shadowOffset from the last.
+ this.shadowDepth = 3;
+ // prop: shadowColor
+ // an optional css color spec for the shadow in 'rgba(n, n, n, n)' form
+ this.shadowColor = null;
+ // prop: shadowAlpha
+ // Alpha channel transparency of shadow. 0 = transparent.
+ this.shadowAlpha = '0.07';
+ this._left;
+ this._top;
+ this._right;
+ this._bottom;
+ this._width;
+ this._height;
+ this._axes = [];
+ // prop: renderer
+ // Instance of a renderer which will actually render the grid,
+ // see <$.jqplot.CanvasGridRenderer>.
+ this.renderer = $.jqplot.CanvasGridRenderer;
+ // prop: rendererOptions
+ // Options to pass on to the renderer,
+ // see <$.jqplot.CanvasGridRenderer>.
+ this.rendererOptions = {};
+ this._offsets = {top:null, bottom:null, left:null, right:null};
+ }
+
+ Grid.prototype = new $.jqplot.ElemContainer();
+ Grid.prototype.constructor = Grid;
+
+ Grid.prototype.init = function() {
+ if ($.isFunction(this.renderer)) {
+ this.renderer = new this.renderer();
+ }
+ this.renderer.init.call(this, this.rendererOptions);
+ };
+
+ Grid.prototype.createElement = function(offsets,plot) {
+ this._offsets = offsets;
+ return this.renderer.createElement.call(this, plot);
+ };
+
+ Grid.prototype.draw = function() {
+ this.renderer.draw.call(this);
+ };
+
+ $.jqplot.GenericCanvas = function() {
+ $.jqplot.ElemContainer.call(this);
+ this._ctx;
+ };
+
+ $.jqplot.GenericCanvas.prototype = new $.jqplot.ElemContainer();
+ $.jqplot.GenericCanvas.prototype.constructor = $.jqplot.GenericCanvas;
+
+ $.jqplot.GenericCanvas.prototype.createElement = function(offsets, clss, plotDimensions, plot) {
+ this._offsets = offsets;
+ var klass = 'jqplot';
+ if (clss != undefined) {
+ klass = clss;
+ }
+ var elem;
+
+ elem = plot.canvasManager.getCanvas();
+
+ // if new plotDimensions supplied, use them.
+ if (plotDimensions != null) {
+ this._plotDimensions = plotDimensions;
+ }
+
+ elem.width = this._plotDimensions.width - this._offsets.left - this._offsets.right;
+ elem.height = this._plotDimensions.height - this._offsets.top - this._offsets.bottom;
+ this._elem = $(elem);
+ this._elem.css({ position: 'absolute', left: this._offsets.left, top: this._offsets.top });
+
+ this._elem.addClass(klass);
+
+ elem = plot.canvasManager.initCanvas(elem);
+
+ elem = null;
+ return this._elem;
+ };
+
+ $.jqplot.GenericCanvas.prototype.setContext = function() {
+ this._ctx = this._elem.get(0).getContext("2d");
+ return this._ctx;
+ };
+
+ // Memory Leaks patch
+ $.jqplot.GenericCanvas.prototype.resetCanvas = function() {
+ if (this._elem) {
+ if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) {
+ window.G_vmlCanvasManager.uninitElement(this._elem.get(0));
+ }
+
+ //this._elem.remove();
+ this._elem.emptyForce();
+ }
+
+ this._ctx = null;
+ };
+
+ $.jqplot.HooksManager = function () {
+ this.hooks =[];
+ this.args = [];
+ };
+
+ $.jqplot.HooksManager.prototype.addOnce = function(fn, args) {
+ args = args || [];
+ var havehook = false;
+ for (var i=0, l=this.hooks.length; i<l; i++) {
+ if (this.hooks[i] == fn) {
+ havehook = true;
+ }
+ }
+ if (!havehook) {
+ this.hooks.push(fn);
+ this.args.push(args);
+ }
+ };
+
+ $.jqplot.HooksManager.prototype.add = function(fn, args) {
+ args = args || [];
+ this.hooks.push(fn);
+ this.args.push(args);
+ };
+
+ $.jqplot.EventListenerManager = function () {
+ this.hooks =[];
+ };
+
+ $.jqplot.EventListenerManager.prototype.addOnce = function(ev, fn) {
+ var havehook = false, h, i;
+ for (var i=0, l=this.hooks.length; i<l; i++) {
+ h = this.hooks[i];
+ if (h[0] == ev && h[1] == fn) {
+ havehook = true;
+ }
+ }
+ if (!havehook) {
+ this.hooks.push([ev, fn]);
+ }
+ };
+
+ $.jqplot.EventListenerManager.prototype.add = function(ev, fn) {
+ this.hooks.push([ev, fn]);
+ };
+
+
+ var _axisNames = ['yMidAxis', 'xaxis', 'yaxis', 'x2axis', 'y2axis', 'y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis'];
+
+ /**
+ * Class: jqPlot
+ * Plot object returned by call to $.jqplot. Handles parsing user options,
+ * creating sub objects (Axes, legend, title, series) and rendering the plot.
+ */
+ function jqPlot() {
+ // Group: Properties
+ // These properties are specified at the top of the options object
+ // like so:
+ // > {
+ // > axesDefaults:{min:0},
+ // > series:[{color:'#6633dd'}],
+ // > title: 'A Plot'
+ // > }
+ //
+
+ // prop: animate
+ // True to animate the series on initial plot draw (renderer dependent).
+ // Actual animation functionality must be supported in the renderer.
+ this.animate = false;
+ // prop: animateReplot
+ // True to animate series after a call to the replot() method.
+ // Use with caution! Replots can happen very frequently under
+ // certain circumstances (e.g. resizing, dragging points) and
+ // animation in these situations can cause problems.
+ this.animateReplot = false;
+ // prop: axes
+ // up to 4 axes are supported, each with it's own options,
+ // See <Axis> for axis specific options.
+ this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis'), yMidAxis: new Axis('yMidAxis')};
+ this.baseCanvas = new $.jqplot.GenericCanvas();
+ // true to intercept right click events and fire a 'jqplotRightClick' event.
+ // this will also block the context menu.
+ this.captureRightClick = false;
+ // prop: data
+ // user's data. Data should *NOT* be specified in the options object,
+ // but be passed in as the second argument to the $.jqplot() function.
+ // The data property is described here soley for reference.
+ // The data should be in the form of an array of 2D or 1D arrays like
+ // > [ [[x1, y1], [x2, y2],...], [y1, y2, ...] ].
+ this.data = [];
+ // prop: dataRenderer
+ // A callable which can be used to preprocess data passed into the plot.
+ // Will be called with 2 arguments, the plot data and a reference to the plot.
+ this.dataRenderer;
+ // prop: dataRendererOptions
+ // Options that will be passed to the dataRenderer.
+ // Can be of any type.
+ this.dataRendererOptions;
+ this.defaults = {
+ // prop: axesDefaults
+ // default options that will be applied to all axes.
+ // see <Axis> for axes options.
+ axesDefaults: {},
+ axes: {xaxis:{}, yaxis:{}, x2axis:{}, y2axis:{}, y3axis:{}, y4axis:{}, y5axis:{}, y6axis:{}, y7axis:{}, y8axis:{}, y9axis:{}, yMidAxis:{}},
+ // prop: seriesDefaults
+ // default options that will be applied to all series.
+ // see <Series> for series options.
+ seriesDefaults: {},
+ series:[]
+ };
+ // prop: defaultAxisStart
+ // 1-D data series are internally converted into 2-D [x,y] data point arrays
+ // by jqPlot. This is the default starting value for the missing x or y value.
+ // The added data will be a monotonically increasing series (e.g. [1, 2, 3, ...])
+ // starting at this value.
+ this.defaultAxisStart = 1;
+ // this.doCustomEventBinding = true;
+ // prop: drawIfHidden
+ // True to execute the draw method even if the plot target is hidden.
+ // Generally, this should be false. Most plot elements will not be sized/
+ // positioned correclty if renderered into a hidden container. To render into
+ // a hidden container, call the replot method when the container is shown.
+ this.drawIfHidden = false;
+ this.eventCanvas = new $.jqplot.GenericCanvas();
+ // prop: fillBetween
+ // Fill between 2 line series in a plot.
+ // Options object:
+ // {
+ // series1: first index (0 based) of series in fill
+ // series2: second index (0 based) of series in fill
+ // color: color of fill [default fillColor of series1]
+ // baseSeries: fill will be drawn below this series (0 based index)
+ // fill: false to turn off fill [default true].
+ // }
+ this.fillBetween = {
+ series1: null,
+ series2: null,
+ color: null,
+ baseSeries: 0,
+ fill: true
+ };
+ // prop; fontFamily
+ // css spec for the font-family attribute. Default for the entire plot.
+ this.fontFamily;
+ // prop: fontSize
+ // css spec for the font-size attribute. Default for the entire plot.
+ this.fontSize;
+ // prop: grid
+ // See <Grid> for grid specific options.
+ this.grid = new Grid();
+ // prop: legend
+ // see <$.jqplot.TableLegendRenderer>
+ this.legend = new Legend();
+ // prop: noDataIndicator
+ // Options to set up a mock plot with a data loading indicator if no data is specified.
+ this.negativeSeriesColors = $.jqplot.config.defaultNegativeColors;
+ this.noDataIndicator = {
+ show: false,
+ indicator: 'Loading Data...',
+ axes: {
+ xaxis: {
+ min: 0,
+ max: 10,
+ tickInterval: 2,
+ show: true
+ },
+ yaxis: {
+ min: 0,
+ max: 12,
+ tickInterval: 3,
+ show: true
+ }
+ }
+ };
+ // container to hold all of the merged options. Convienence for plugins.
+ this.options = {};
+ this.previousSeriesStack = [];
+ // Namespece to hold plugins. Generally non-renderer plugins add themselves to here.
+ this.plugins = {};
+ // prop: series
+ // Array of series object options.
+ // see <Series> for series specific options.
+ this.series = [];
+ // array of series indicies. Keep track of order
+ // which series canvases are displayed, lowest
+ // to highest, back to front.
+ this.seriesStack = [];
+ // prop: seriesColors
+ // Ann array of CSS color specifications that will be applied, in order,
+ // to the series in the plot. Colors will wrap around so, if their
+ // are more series than colors, colors will be reused starting at the
+ // beginning. For pie charts, this specifies the colors of the slices.
+ this.seriesColors = $.jqplot.config.defaultColors;
+ // prop: sortData
+ // false to not sort the data passed in by the user.
+ // Many bar, stakced and other graphs as well as many plugins depend on
+ // having sorted data.
+ this.sortData = true;
+ // prop: stackSeries
+ // true or false, creates a stack or "mountain" plot.
+ // Not all series renderers may implement this option.
+ this.stackSeries = false;
+ // a shortcut for axis syncTicks options. Not implemented yet.
+ this.syncXTicks = true;
+ // a shortcut for axis syncTicks options. Not implemented yet.
+ this.syncYTicks = true;
+ // the jquery object for the dom target.
+ this.target = null;
+ // The id of the dom element to render the plot into
+ this.targetId = null;
+ // prop textColor
+ // css spec for the css color attribute. Default for the entire plot.
+ this.textColor;
+ // prop: title
+ // Title object. See <Title> for specific options. As a shortcut, you
+ // can specify the title option as just a string like: title: 'My Plot'
+ // and this will create a new title object with the specified text.
+ this.title = new Title();
+ // Count how many times the draw method has been called while the plot is visible.
+ // Mostly used to test if plot has never been dran (=0), has been successfully drawn
+ // into a visible container once (=1) or draw more than once into a visible container.
+ // Can use this in tests to see if plot has been visibly drawn at least one time.
+ // After plot has been visibly drawn once, it generally doesn't need redrawn if its
+ // container is hidden and shown.
+ this._drawCount = 0;
+ // sum of y values for all series in plot.
+ // used in mekko chart.
+ this._sumy = 0;
+ this._sumx = 0;
+ // array to hold the cumulative stacked series data.
+ // used to ajust the individual series data, which won't have access to other
+ // series data.
+ this._stackData = [];
+ // array that holds the data to be plotted. This will be the series data
+ // merged with the the appropriate data from _stackData according to the stackAxis.
+ this._plotData = [];
+ this._width = null;
+ this._height = null;
+ this._plotDimensions = {height:null, width:null};
+ this._gridPadding = {top:null, right:null, bottom:null, left:null};
+ this._defaultGridPadding = {top:10, right:10, bottom:23, left:10};
+
+ this._addDomReference = $.jqplot.config.addDomReference;
+
+ this.preInitHooks = new $.jqplot.HooksManager();
+ this.postInitHooks = new $.jqplot.HooksManager();
+ this.preParseOptionsHooks = new $.jqplot.HooksManager();
+ this.postParseOptionsHooks = new $.jqplot.HooksManager();
+ this.preDrawHooks = new $.jqplot.HooksManager();
+ this.postDrawHooks = new $.jqplot.HooksManager();
+ this.preDrawSeriesHooks = new $.jqplot.HooksManager();
+ this.postDrawSeriesHooks = new $.jqplot.HooksManager();
+ this.preDrawLegendHooks = new $.jqplot.HooksManager();
+ this.addLegendRowHooks = new $.jqplot.HooksManager();
+ this.preSeriesInitHooks = new $.jqplot.HooksManager();
+ this.postSeriesInitHooks = new $.jqplot.HooksManager();
+ this.preParseSeriesOptionsHooks = new $.jqplot.HooksManager();
+ this.postParseSeriesOptionsHooks = new $.jqplot.HooksManager();
+ this.eventListenerHooks = new $.jqplot.EventListenerManager();
+ this.preDrawSeriesShadowHooks = new $.jqplot.HooksManager();
+ this.postDrawSeriesShadowHooks = new $.jqplot.HooksManager();
+
+ this.colorGenerator = new $.jqplot.ColorGenerator();
+ this.negativeColorGenerator = new $.jqplot.ColorGenerator();
+
+ this.canvasManager = new $.jqplot.CanvasManager();
+
+ this.themeEngine = new $.jqplot.ThemeEngine();
+
+ var seriesColorsIndex = 0;
+
+ // Group: methods
+ //
+ // method: init
+ // sets the plot target, checks data and applies user
+ // options to plot.
+ this.init = function(target, data, options) {
+ options = options || {};
+ for (var i=0; i<$.jqplot.preInitHooks.length; i++) {
+ $.jqplot.preInitHooks[i].call(this, target, data, options);
+ }
+
+ for (var i=0; i<this.preInitHooks.hooks.length; i++) {
+ this.preInitHooks.hooks[i].call(this, target, data, options);
+ }
+
+ this.targetId = '#'+target;
+ this.target = $('#'+target);
+
+ //////
+ // Add a reference to plot
+ //////
+ if (this._addDomReference) {
+ this.target.data('jqplot', this);
+ }
+ // remove any error class that may be stuck on target.
+ this.target.removeClass('jqplot-error');
+ if (!this.target.get(0)) {
+ throw "No plot target specified";
+ }
+
+ // make sure the target is positioned by some means and set css
+ if (this.target.css('position') == 'static') {
+ this.target.css('position', 'relative');
+ }
+ if (!this.target.hasClass('jqplot-target')) {
+ this.target.addClass('jqplot-target');
+ }
+
+ // if no height or width specified, use a default.
+ if (!this.target.height()) {
+ var h;
+ if (options && options.height) {
+ h = parseInt(options.height, 10);
+ }
+ else if (this.target.attr('data-height')) {
+ h = parseInt(this.target.attr('data-height'), 10);
+ }
+ else {
+ h = parseInt($.jqplot.config.defaultHeight, 10);
+ }
+ this._height = h;
+ this.target.css('height', h+'px');
+ }
+ else {
+ this._height = h = this.target.height();
+ }
+ if (!this.target.width()) {
+ var w;
+ if (options && options.width) {
+ w = parseInt(options.width, 10);
+ }
+ else if (this.target.attr('data-width')) {
+ w = parseInt(this.target.attr('data-width'), 10);
+ }
+ else {
+ w = parseInt($.jqplot.config.defaultWidth, 10);
+ }
+ this._width = w;
+ this.target.css('width', w+'px');
+ }
+ else {
+ this._width = w = this.target.width();
+ }
+
+ for (var i=0, l=_axisNames.length; i<l; i++) {
+ this.axes[_axisNames[i]] = new Axis(_axisNames[i]);
+ }
+
+ this._plotDimensions.height = this._height;
+ this._plotDimensions.width = this._width;
+ this.grid._plotDimensions = this._plotDimensions;
+ this.title._plotDimensions = this._plotDimensions;
+ this.baseCanvas._plotDimensions = this._plotDimensions;
+ this.eventCanvas._plotDimensions = this._plotDimensions;
+ this.legend._plotDimensions = this._plotDimensions;
+ if (this._height <=0 || this._width <=0 || !this._height || !this._width) {
+ throw "Canvas dimension not set";
+ }
+
+ if (options.dataRenderer && $.isFunction(options.dataRenderer)) {
+ if (options.dataRendererOptions) {
+ this.dataRendererOptions = options.dataRendererOptions;
+ }
+ this.dataRenderer = options.dataRenderer;
+ data = this.dataRenderer(data, this, this.dataRendererOptions);
+ }
+
+ if (options.noDataIndicator && $.isPlainObject(options.noDataIndicator)) {
+ $.extend(true, this.noDataIndicator, options.noDataIndicator);
+ }
+
+ if (data == null || $.isArray(data) == false || data.length == 0 || $.isArray(data[0]) == false || data[0].length == 0) {
+
+ if (this.noDataIndicator.show == false) {
+ throw "No Data";
+ }
+
+ else {
+ // have to be descructive here in order for plot to not try and render series.
+ // This means that $.jqplot() will have to be called again when there is data.
+ //delete options.series;
+
+ for (var ax in this.noDataIndicator.axes) {
+ for (var prop in this.noDataIndicator.axes[ax]) {
+ this.axes[ax][prop] = this.noDataIndicator.axes[ax][prop];
+ }
+ }
+
+ this.postDrawHooks.add(function() {
+ var eh = this.eventCanvas.getHeight();
+ var ew = this.eventCanvas.getWidth();
+ var temp = $('<div class="jqplot-noData-container" style="position:absolute;"></div>');
+ this.target.append(temp);
+ temp.height(eh);
+ temp.width(ew);
+ temp.css('top', this.eventCanvas._offsets.top);
+ temp.css('left', this.eventCanvas._offsets.left);
+
+ var temp2 = $('<div class="jqplot-noData-contents" style="text-align:center; position:relative; margin-left:auto; margin-right:auto;"></div>');
+ temp.append(temp2);
+ temp2.html(this.noDataIndicator.indicator);
+ var th = temp2.height();
+ var tw = temp2.width();
+ temp2.height(th);
+ temp2.width(tw);
+ temp2.css('top', (eh - th)/2 + 'px');
+ });
+
+ }
+ }
+
+ // make a copy of the data
+ this.data = $.extend(true, [], data);
+
+ this.parseOptions(options);
+
+ if (this.textColor) {
+ this.target.css('color', this.textColor);
+ }
+ if (this.fontFamily) {
+ this.target.css('font-family', this.fontFamily);
+ }
+ if (this.fontSize) {
+ this.target.css('font-size', this.fontSize);
+ }
+
+ this.title.init();
+ this.legend.init();
+ this._sumy = 0;
+ this._sumx = 0;
+ this.computePlotData();
+ for (var i=0; i<this.series.length; i++) {
+ // set default stacking order for series canvases
+ this.seriesStack.push(i);
+ this.previousSeriesStack.push(i);
+ this.series[i].shadowCanvas._plotDimensions = this._plotDimensions;
+ this.series[i].canvas._plotDimensions = this._plotDimensions;
+ for (var j=0; j<$.jqplot.preSeriesInitHooks.length; j++) {
+ $.jqplot.preSeriesInitHooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this);
+ }
+ for (var j=0; j<this.preSeriesInitHooks.hooks.length; j++) {
+ this.preSeriesInitHooks.hooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this);
+ }
+ // this.populatePlotData(this.series[i], i);
+ this.series[i]._plotDimensions = this._plotDimensions;
+ this.series[i].init(i, this.grid.borderWidth, this);
+ for (var j=0; j<$.jqplot.postSeriesInitHooks.length; j++) {
+ $.jqplot.postSeriesInitHooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this);
+ }
+ for (var j=0; j<this.postSeriesInitHooks.hooks.length; j++) {
+ this.postSeriesInitHooks.hooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this);
+ }
+ this._sumy += this.series[i]._sumy;
+ this._sumx += this.series[i]._sumx;
+ }
+
+ var name,
+ axis;
+ for (var i=0, l=_axisNames.length; i<l; i++) {
+ name = _axisNames[i];
+ axis = this.axes[name];
+ axis._plotDimensions = this._plotDimensions;
+ axis.init();
+ if (this.axes[name].borderColor == null) {
+ if (name.charAt(0) !== 'x' && axis.useSeriesColor === true && axis.show) {
+ axis.borderColor = axis._series[0].color;
+ }
+ else {
+ axis.borderColor = this.grid.borderColor;
+ }
+ }
+ }
+
+ if (this.sortData) {
+ sortData(this.series);
+ }
+ this.grid.init();
+ this.grid._axes = this.axes;
+
+ this.legend._series = this.series;
+
+ for (var i=0; i<$.jqplot.postInitHooks.length; i++) {
+ $.jqplot.postInitHooks[i].call(this, target, this.data, options);
+ }
+
+ for (var i=0; i<this.postInitHooks.hooks.length; i++) {
+ this.postInitHooks.hooks[i].call(this, target, this.data, options);
+ }
+ };
+
+ // method: resetAxesScale
+ // Reset the specified axes min, max, numberTicks and tickInterval properties to null
+ // or reset these properties on all axes if no list of axes is provided.
+ //
+ // Parameters:
+ // axes - Boolean to reset or not reset all axes or an array or object of axis names to reset.
+ this.resetAxesScale = function(axes, options) {
+ var opts = options || {};
+ var ax = axes || this.axes;
+ if (ax === true) {
+ ax = this.axes;
+ }
+ if ($.isArray(ax)) {
+ for (var i = 0; i < ax.length; i++) {
+ this.axes[ax[i]].resetScale(opts[ax[i]]);
+ }
+ }
+ else if (typeof(ax) === 'object') {
+ for (var name in ax) {
+ this.axes[name].resetScale(opts[name]);
+ }
+ }
+ };
+ // method: reInitialize
+ // reinitialize plot for replotting.
+ // not called directly.
+ this.reInitialize = function (data, opts) {
+ // Plot should be visible and have a height and width.
+ // If plot doesn't have height and width for some
+ // reason, set it by other means. Plot must not have
+ // a display:none attribute, however.
+
+ var options = $.extend(true, {}, this.options, opts);
+
+ var target = this.targetId.substr(1);
+ var tdata = (data == null) ? this.data : data;
+
+ for (var i=0; i<$.jqplot.preInitHooks.length; i++) {
+ $.jqplot.preInitHooks[i].call(this, target, tdata, options);
+ }
+
+ for (var i=0; i<this.preInitHooks.hooks.length; i++) {
+ this.preInitHooks.hooks[i].call(this, target, tdata, options);
+ }
+
+ this._height = this.target.height();
+ this._width = this.target.width();
+
+ if (this._height <=0 || this._width <=0 || !this._height || !this._width) {
+ throw "Target dimension not set";
+ }
+
+ this._plotDimensions.height = this._height;
+ this._plotDimensions.width = this._width;
+ this.grid._plotDimensions = this._plotDimensions;
+ this.title._plotDimensions = this._plotDimensions;
+ this.baseCanvas._plotDimensions = this._plotDimensions;
+ this.eventCanvas._plotDimensions = this._plotDimensions;
+ this.legend._plotDimensions = this._plotDimensions;
+
+ var name,
+ t,
+ j,
+ axis;
+
+ for (var i=0, l=_axisNames.length; i<l; i++) {
+ name = _axisNames[i];
+ axis = this.axes[name];
+
+ // Memory Leaks patch : clear ticks elements
+ t = axis._ticks;
+ for (var j = 0, tlen = t.length; j < tlen; j++) {
+ var el = t[j]._elem;
+ if (el) {
+ // if canvas renderer
+ if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) {
+ window.G_vmlCanvasManager.uninitElement(el.get(0));
+ }
+ el.emptyForce();
+ el = null;
+ t._elem = null;
+ }
+ }
+ t = null;
+
+ delete axis.ticks;
+ delete axis._ticks;
+ this.axes[name] = new Axis(name);
+ this.axes[name]._plotWidth = this._width;
+ this.axes[name]._plotHeight = this._height;
+ }
+
+ if (data) {
+ if (options.dataRenderer && $.isFunction(options.dataRenderer)) {
+ if (options.dataRendererOptions) {
+ this.dataRendererOptions = options.dataRendererOptions;
+ }
+ this.dataRenderer = options.dataRenderer;
+ data = this.dataRenderer(data, this, this.dataRendererOptions);
+ }
+
+ // make a copy of the data
+ this.data = $.extend(true, [], data);
+ }
+
+ if (opts) {
+ this.parseOptions(options);
+ }
+
+ this.title._plotWidth = this._width;
+
+ if (this.textColor) {
+ this.target.css('color', this.textColor);
+ }
+ if (this.fontFamily) {
+ this.target.css('font-family', this.fontFamily);
+ }
+ if (this.fontSize) {
+ this.target.css('font-size', this.fontSize);
+ }
+
+ this.title.init();
+ this.legend.init();
+ this._sumy = 0;
+ this._sumx = 0;
+
+ this.seriesStack = [];
+ this.previousSeriesStack = [];
+
+ this.computePlotData();
+ for (var i=0, l=this.series.length; i<l; i++) {
+ // set default stacking order for series canvases
+ this.seriesStack.push(i);
+ this.previousSeriesStack.push(i);
+ this.series[i].shadowCanvas._plotDimensions = this._plotDimensions;
+ this.series[i].canvas._plotDimensions = this._plotDimensions;
+ for (var j=0; j<$.jqplot.preSeriesInitHooks.length; j++) {
+ $.jqplot.preSeriesInitHooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this);
+ }
+ for (var j=0; j<this.preSeriesInitHooks.hooks.length; j++) {
+ this.preSeriesInitHooks.hooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this);
+ }
+ // this.populatePlotData(this.series[i], i);
+ this.series[i]._plotDimensions = this._plotDimensions;
+ this.series[i].init(i, this.grid.borderWidth, this);
+ for (var j=0; j<$.jqplot.postSeriesInitHooks.length; j++) {
+ $.jqplot.postSeriesInitHooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this);
+ }
+ for (var j=0; j<this.postSeriesInitHooks.hooks.length; j++) {
+ this.postSeriesInitHooks.hooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this);
+ }
+ this._sumy += this.series[i]._sumy;
+ this._sumx += this.series[i]._sumx;
+ }
+
+ for (var i=0, l=_axisNames.length; i<l; i++) {
+ name = _axisNames[i];
+ axis = this.axes[name];
+
+ axis._plotDimensions = this._plotDimensions;
+ axis.init();
+ if (axis.borderColor == null) {
+ if (name.charAt(0) !== 'x' && axis.useSeriesColor === true && axis.show) {
+ axis.borderColor = axis._series[0].color;
+ }
+ else {
+ axis.borderColor = this.grid.borderColor;
+ }
+ }
+ }
+
+ if (this.sortData) {
+ sortData(this.series);
+ }
+ this.grid.init();
+ this.grid._axes = this.axes;
+
+ this.legend._series = this.series;
+
+ for (var i=0, l=$.jqplot.postInitHooks.length; i<l; i++) {
+ $.jqplot.postInitHooks[i].call(this, target, this.data, options);
+ }
+
+ for (var i=0, l=this.postInitHooks.hooks.length; i<l; i++) {
+ this.postInitHooks.hooks[i].call(this, target, this.data, options);
+ }
+ };
+
+
+
+ // method: quickInit
+ //
+ // Quick reinitialization plot for replotting.
+ // Does not parse options ore recreate axes and series.
+ // not called directly.
+ this.quickInit = function () {
+ // Plot should be visible and have a height and width.
+ // If plot doesn't have height and width for some
+ // reason, set it by other means. Plot must not have
+ // a display:none attribute, however.
+
+ this._height = this.target.height();
+ this._width = this.target.width();
+
+ if (this._height <=0 || this._width <=0 || !this._height || !this._width) {
+ throw "Target dimension not set";
+ }
+
+ this._plotDimensions.height = this._height;
+ this._plotDimensions.width = this._width;
+ this.grid._plotDimensions = this._plotDimensions;
+ this.title._plotDimensions = this._plotDimensions;
+ this.baseCanvas._plotDimensions = this._plotDimensions;
+ this.eventCanvas._plotDimensions = this._plotDimensions;
+ this.legend._plotDimensions = this._plotDimensions;
+
+ for (var n in this.axes) {
+ this.axes[n]._plotWidth = this._width;
+ this.axes[n]._plotHeight = this._height;
+ }
+
+ this.title._plotWidth = this._width;
+
+ if (this.textColor) {
+ this.target.css('color', this.textColor);
+ }
+ if (this.fontFamily) {
+ this.target.css('font-family', this.fontFamily);
+ }
+ if (this.fontSize) {
+ this.target.css('font-size', this.fontSize);
+ }
+
+ this._sumy = 0;
+ this._sumx = 0;
+ this.computePlotData();
+ for (var i=0; i<this.series.length; i++) {
+ // this.populatePlotData(this.series[i], i);
+ if (this.series[i]._type === 'line' && this.series[i].renderer.bands.show) {
+ this.series[i].renderer.initBands.call(this.series[i], this.series[i].renderer.options, this);
+ }
+ this.series[i]._plotDimensions = this._plotDimensions;
+ this.series[i].canvas._plotDimensions = this._plotDimensions;
+ //this.series[i].init(i, this.grid.borderWidth);
+ this._sumy += this.series[i]._sumy;
+ this._sumx += this.series[i]._sumx;
+ }
+
+ var name;
+
+ for (var j=0; j<12; j++) {
+ name = _axisNames[j];
+ // Memory Leaks patch : clear ticks elements
+ var t = this.axes[name]._ticks;
+ for (var i = 0; i < t.length; i++) {
+ var el = t[i]._elem;
+ if (el) {
+ // if canvas renderer
+ if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) {
+ window.G_vmlCanvasManager.uninitElement(el.get(0));
+ }
+ el.emptyForce();
+ el = null;
+ t._elem = null;
+ }
+ }
+ t = null;
+
+ this.axes[name]._plotDimensions = this._plotDimensions;
+ this.axes[name]._ticks = [];
+ // this.axes[name].renderer.init.call(this.axes[name], {});
+ }
+
+ if (this.sortData) {
+ sortData(this.series);
+ }
+
+ this.grid._axes = this.axes;
+
+ this.legend._series = this.series;
+ };
+
+ // sort the series data in increasing order.
+ function sortData(series) {
+ var d, sd, pd, ppd, ret;
+ for (var i=0; i<series.length; i++) {
+ var check;
+ var bat = [series[i].data, series[i]._stackData, series[i]._plotData, series[i]._prevPlotData];
+ for (var n=0; n<4; n++) {
+ check = true;
+ d = bat[n];
+ if (series[i]._stackAxis == 'x') {
+ for (var j = 0; j < d.length; j++) {
+ if (typeof(d[j][1]) != "number") {
+ check = false;
+ break;
+ }
+ }
+ if (check) {
+ d.sort(function(a,b) { return a[1] - b[1]; });
+ }
+ }
+ else {
+ for (var j = 0; j < d.length; j++) {
+ if (typeof(d[j][0]) != "number") {
+ check = false;
+ break;
+ }
+ }
+ if (check) {
+ d.sort(function(a,b) { return a[0] - b[0]; });
+ }
+ }
+ }
+
+ }
+ }
+
+ this.computePlotData = function() {
+ this._plotData = [];
+ this._stackData = [];
+ var series,
+ index,
+ l;
+
+
+ for (index=0, l=this.series.length; index<l; index++) {
+ series = this.series[index];
+ this._plotData.push([]);
+ this._stackData.push([]);
+ var cd = series.data;
+ this._plotData[index] = $.extend(true, [], cd);
+ this._stackData[index] = $.extend(true, [], cd);
+ series._plotData = this._plotData[index];
+ series._stackData = this._stackData[index];
+ var plotValues = {x:[], y:[]};
+
+ if (this.stackSeries && !series.disableStack) {
+ series._stack = true;
+ ///////////////////////////
+ // have to check for nulls
+ ///////////////////////////
+ var sidx = (series._stackAxis === 'x') ? 0 : 1;
+
+ for (var k=0, cdl=cd.length; k<cdl; k++) {
+ var temp = cd[k][sidx];
+ if (temp == null) {
+ temp = 0;
+ }
+ this._plotData[index][k][sidx] = temp;
+ this._stackData[index][k][sidx] = temp;
+
+ if (index > 0) {
+ for (var j=index; j--;) {
+ var prevval = this._plotData[j][k][sidx];
+ // only need to sum up the stack axis column of data
+ // and only sum if it is of same sign.
+ // if previous series isn't same sign, keep looking
+ // at earlier series untill we find one of same sign.
+ if (temp * prevval >= 0) {
+ this._plotData[index][k][sidx] += prevval;
+ this._stackData[index][k][sidx] += prevval;
+ break;
+ }
+ }
+ }
+ }
+
+ }
+ else {
+ for (var i=0; i<series.data.length; i++) {
+ plotValues.x.push(series.data[i][0]);
+ plotValues.y.push(series.data[i][1]);
+ }
+ this._stackData.push(series.data);
+ this.series[index]._stackData = series.data;
+ this._plotData.push(series.data);
+ series._plotData = series.data;
+ series._plotValues = plotValues;
+ }
+ if (index>0) {
+ series._prevPlotData = this.series[index-1]._plotData;
+ }
+ series._sumy = 0;
+ series._sumx = 0;
+ for (i=series.data.length-1; i>-1; i--) {
+ series._sumy += series.data[i][1];
+ series._sumx += series.data[i][0];
+ }
+ }
+
+ };
+
+ // populate the _stackData and _plotData arrays for the plot and the series.
+ this.populatePlotData = function(series, index) {
+ // if a stacked chart, compute the stacked data
+ this._plotData = [];
+ this._stackData = [];
+ series._stackData = [];
+ series._plotData = [];
+ var plotValues = {x:[], y:[]};
+ if (this.stackSeries && !series.disableStack) {
+ series._stack = true;
+ var sidx = (series._stackAxis === 'x') ? 0 : 1;
+ // var idx = sidx ? 0 : 1;
+ // push the current data into stackData
+ //this._stackData.push(this.series[i].data);
+ var temp = $.extend(true, [], series.data);
+ // create the data that will be plotted for this series
+ var plotdata = $.extend(true, [], series.data);
+ var tempx, tempy, dval, stackval, comparator;
+ // for first series, nothing to add to stackData.
+ for (var j=0; j<index; j++) {
+ var cd = this.series[j].data;
+ for (var k=0; k<cd.length; k++) {
+ dval = cd[k];
+ tempx = (dval[0] != null) ? dval[0] : 0;
+ tempy = (dval[1] != null) ? dval[1] : 0;
+ temp[k][0] += tempx;
+ temp[k][1] += tempy;
+ stackval = (sidx) ? tempy : tempx;
+ // only need to sum up the stack axis column of data
+ // and only sum if it is of same sign.
+ if (series.data[k][sidx] * stackval >= 0) {
+ plotdata[k][sidx] += stackval;
+ }
+ }
+ }
+ for (var i=0; i<plotdata.length; i++) {
+ plotValues.x.push(plotdata[i][0]);
+ plotValues.y.push(plotdata[i][1]);
+ }
+ this._plotData.push(plotdata);
+ this._stackData.push(temp);
+ series._stackData = temp;
+ series._plotData = plotdata;
+ series._plotValues = plotValues;
+ }
+ else {
+ for (var i=0; i<series.data.length; i++) {
+ plotValues.x.push(series.data[i][0]);
+ plotValues.y.push(series.data[i][1]);
+ }
+ this._stackData.push(series.data);
+ this.series[index]._stackData = series.data;
+ this._plotData.push(series.data);
+ series._plotData = series.data;
+ series._plotValues = plotValues;
+ }
+ if (index>0) {
+ series._prevPlotData = this.series[index-1]._plotData;
+ }
+ series._sumy = 0;
+ series._sumx = 0;
+ for (i=series.data.length-1; i>-1; i--) {
+ series._sumy += series.data[i][1];
+ series._sumx += series.data[i][0];
+ }
+ };
+
+ // function to safely return colors from the color array and wrap around at the end.
+ this.getNextSeriesColor = (function(t) {
+ var idx = 0;
+ var sc = t.seriesColors;
+
+ return function () {
+ if (idx < sc.length) {
+ return sc[idx++];
+ }
+ else {
+ idx = 0;
+ return sc[idx++];
+ }
+ };
+ })(this);
+
+ this.parseOptions = function(options){
+ for (var i=0; i<this.preParseOptionsHooks.hooks.length; i++) {
+ this.preParseOptionsHooks.hooks[i].call(this, options);
+ }
+ for (var i=0; i<$.jqplot.preParseOptionsHooks.length; i++) {
+ $.jqplot.preParseOptionsHooks[i].call(this, options);
+ }
+ this.options = $.extend(true, {}, this.defaults, options);
+ var opts = this.options;
+ this.animate = opts.animate;
+ this.animateReplot = opts.animateReplot;
+ this.stackSeries = opts.stackSeries;
+ if ($.isPlainObject(opts.fillBetween)) {
+
+ var temp = ['series1', 'series2', 'color', 'baseSeries', 'fill'],
+ tempi;
+
+ for (var i=0, l=temp.length; i<l; i++) {
+ tempi = temp[i];
+ if (opts.fillBetween[tempi] != null) {
+ this.fillBetween[tempi] = opts.fillBetween[tempi];
+ }
+ }
+ }
+
+ if (opts.seriesColors) {
+ this.seriesColors = opts.seriesColors;
+ }
+ if (opts.negativeSeriesColors) {
+ this.negativeSeriesColors = opts.negativeSeriesColors;
+ }
+ if (opts.captureRightClick) {
+ this.captureRightClick = opts.captureRightClick;
+ }
+ this.defaultAxisStart = (options && options.defaultAxisStart != null) ? options.defaultAxisStart : this.defaultAxisStart;
+ this.colorGenerator.setColors(this.seriesColors);
+ this.negativeColorGenerator.setColors(this.negativeSeriesColors);
+ // var cg = new this.colorGenerator(this.seriesColors);
+ // var ncg = new this.colorGenerator(this.negativeSeriesColors);
+ // this._gridPadding = this.options.gridPadding;
+ $.extend(true, this._gridPadding, opts.gridPadding);
+ this.sortData = (opts.sortData != null) ? opts.sortData : this.sortData;
+ for (var i=0; i<12; i++) {
+ var n = _axisNames[i];
+ var axis = this.axes[n];
+ axis._options = $.extend(true, {}, opts.axesDefaults, opts.axes[n]);
+ $.extend(true, axis, opts.axesDefaults, opts.axes[n]);
+ axis._plotWidth = this._width;
+ axis._plotHeight = this._height;
+ }
+ // if (this.data.length == 0) {
+ // this.data = [];
+ // for (var i=0; i<this.options.series.length; i++) {
+ // this.data.push(this.options.series.data);
+ // }
+ // }
+
+ var normalizeData = function(data, dir, start) {
+ // return data as an array of point arrays,
+ // in form [[x1,y1...], [x2,y2...], ...]
+ var temp = [];
+ var i, l;
+ dir = dir || 'vertical';
+ if (!$.isArray(data[0])) {
+ // we have a series of scalars. One line with just y values.
+ // turn the scalar list of data into a data array of form:
+ // [[1, data[0]], [2, data[1]], ...]
+ for (i=0, l=data.length; i<l; i++) {
+ if (dir == 'vertical') {
+ temp.push([start + i, data[i]]);
+ }
+ else {
+ temp.push([data[i], start+i]);
+ }
+ }
+ }
+ else {
+ // we have a properly formatted data series, copy it.
+ $.extend(true, temp, data);
+ }
+ return temp;
+ };
+
+ var colorIndex = 0;
+ this.series = [];
+ for (var i=0; i<this.data.length; i++) {
+ var sopts = $.extend(true, {index: i}, {seriesColors:this.seriesColors, negativeSeriesColors:this.negativeSeriesColors}, this.options.seriesDefaults, this.options.series[i], {rendererOptions:{animation:{show: this.animate}}});
+ // pass in options in case something needs set prior to initialization.
+ var temp = new Series(sopts);
+ for (var j=0; j<$.jqplot.preParseSeriesOptionsHooks.length; j++) {
+ $.jqplot.preParseSeriesOptionsHooks[j].call(temp, this.options.seriesDefaults, this.options.series[i]);
+ }
+ for (var j=0; j<this.preParseSeriesOptionsHooks.hooks.length; j++) {
+ this.preParseSeriesOptionsHooks.hooks[j].call(temp, this.options.seriesDefaults, this.options.series[i]);
+ }
+ // Now go back and apply the options to the series. Really should just do this during initializaiton, but don't want to
+ // mess up preParseSeriesOptionsHooks at this point.
+ $.extend(true, temp, sopts);
+ var dir = 'vertical';
+ if (temp.renderer === $.jqplot.BarRenderer && temp.rendererOptions && temp.rendererOptions.barDirection == 'horizontal') {
+ dir = 'horizontal';
+ temp._stackAxis = 'x';
+ temp._primaryAxis = '_yaxis';
+ }
+ temp.data = normalizeData(this.data[i], dir, this.defaultAxisStart);
+ switch (temp.xaxis) {
+ case 'xaxis':
+ temp._xaxis = this.axes.xaxis;
+ break;
+ case 'x2axis':
+ temp._xaxis = this.axes.x2axis;
+ break;
+ default:
+ break;
+ }
+ temp._yaxis = this.axes[temp.yaxis];
+ temp._xaxis._series.push(temp);
+ temp._yaxis._series.push(temp);
+ if (temp.show) {
+ temp._xaxis.show = true;
+ temp._yaxis.show = true;
+ }
+ else {
+ if (temp._xaxis.scaleToHiddenSeries) {
+ temp._xaxis.show = true;
+ }
+ if (temp._yaxis.scaleToHiddenSeries) {
+ temp._yaxis.show = true;
+ }
+ }
+
+ // // parse the renderer options and apply default colors if not provided
+ // if (!temp.color && temp.show != false) {
+ // temp.color = cg.next();
+ // colorIndex = cg.getIndex() - 1;;
+ // }
+ // if (!temp.negativeColor && temp.show != false) {
+ // temp.negativeColor = ncg.get(colorIndex);
+ // ncg.setIndex(colorIndex);
+ // }
+ if (!temp.label) {
+ temp.label = 'Series '+ (i+1).toString();
+ }
+ // temp.rendererOptions.show = temp.show;
+ // $.extend(true, temp.renderer, {color:this.seriesColors[i]}, this.rendererOptions);
+ this.series.push(temp);
+ for (var j=0; j<$.jqplot.postParseSeriesOptionsHooks.length; j++) {
+ $.jqplot.postParseSeriesOptionsHooks[j].call(this.series[i], this.options.seriesDefaults, this.options.series[i]);
+ }
+ for (var j=0; j<this.postParseSeriesOptionsHooks.hooks.length; j++) {
+ this.postParseSeriesOptionsHooks.hooks[j].call(this.series[i], this.options.seriesDefaults, this.options.series[i]);
+ }
+ }
+
+ // copy the grid and title options into this object.
+ $.extend(true, this.grid, this.options.grid);
+ // if axis border properties aren't set, set default.
+ for (var i=0, l=_axisNames.length; i<l; i++) {
+ var n = _axisNames[i];
+ var axis = this.axes[n];
+ if (axis.borderWidth == null) {
+ axis.borderWidth =this.grid.borderWidth;
+ }
+ }
+
+ if (typeof this.options.title == 'string') {
+ this.title.text = this.options.title;
+ }
+ else if (typeof this.options.title == 'object') {
+ $.extend(true, this.title, this.options.title);
+ }
+ this.title._plotWidth = this._width;
+ this.legend.setOptions(this.options.legend);
+
+ for (var i=0; i<$.jqplot.postParseOptionsHooks.length; i++) {
+ $.jqplot.postParseOptionsHooks[i].call(this, options);
+ }
+ for (var i=0; i<this.postParseOptionsHooks.hooks.length; i++) {
+ this.postParseOptionsHooks.hooks[i].call(this, options);
+ }
+ };
+
+ // method: destroy
+ // Releases all resources occupied by the plot
+ this.destroy = function() {
+ this.canvasManager.freeAllCanvases();
+ if (this.eventCanvas && this.eventCanvas._elem) {
+ this.eventCanvas._elem.unbind();
+ }
+ // Couple of posts on Stack Overflow indicate that empty() doesn't
+ // always cear up the dom and release memory. Sometimes setting
+ // innerHTML property to null is needed. Particularly on IE, may
+ // have to directly set it to null, bypassing $.
+ this.target.empty();
+
+ this.target[0].innerHTML = '';
+ };
+
+ // method: replot
+ // Does a reinitialization of the plot followed by
+ // a redraw. Method could be used to interactively
+ // change plot characteristics and then replot.
+ //
+ // Parameters:
+ // options - Options used for replotting.
+ //
+ // Properties:
+ // clear - false to not clear (empty) the plot container before replotting (default: true).
+ // resetAxes - true to reset all axes min, max, numberTicks and tickInterval setting so axes will rescale themselves.
+ // optionally pass in list of axes to reset (e.g. ['xaxis', 'y2axis']) (default: false).
+ this.replot = function(options) {
+ var opts = options || {};
+ var data = opts.data || null;
+ var clear = (opts.clear === false) ? false : true;
+ var resetAxes = opts.resetAxes || false;
+ delete opts.data;
+ delete opts.clear;
+ delete opts.resetAxes;
+
+ this.target.trigger('jqplotPreReplot');
+
+ if (clear) {
+ this.destroy();
+ }
+ // if have data or other options, full reinit.
+ // otherwise, quickinit.
+ if (data || !$.isEmptyObject(opts)) {
+ this.reInitialize(data, opts);
+ }
+ else {
+ this.quickInit();
+ }
+
+ if (resetAxes) {
+ this.resetAxesScale(resetAxes, opts.axes);
+ }
+ this.draw();
+ this.target.trigger('jqplotPostReplot');
+ };
+
+ // method: redraw
+ // Empties the plot target div and redraws the plot.
+ // This enables plot data and properties to be changed
+ // and then to comletely clear the plot and redraw.
+ // redraw *will not* reinitialize any plot elements.
+ // That is, axes will not be autoscaled and defaults
+ // will not be reapplied to any plot elements. redraw
+ // is used primarily with zooming.
+ //
+ // Parameters:
+ // clear - false to not clear (empty) the plot container before redrawing (default: true).
+ this.redraw = function(clear) {
+ clear = (clear != null) ? clear : true;
+ this.target.trigger('jqplotPreRedraw');
+ if (clear) {
+ this.canvasManager.freeAllCanvases();
+ this.eventCanvas._elem.unbind();
+ // Dont think I bind any events to the target, this shouldn't be necessary.
+ // It will remove user's events.
+ // this.target.unbind();
+ this.target.empty();
+ }
+ for (var ax in this.axes) {
+ this.axes[ax]._ticks = [];
+ }
+ this.computePlotData();
+ // for (var i=0; i<this.series.length; i++) {
+ // this.populatePlotData(this.series[i], i);
+ // }
+ this._sumy = 0;
+ this._sumx = 0;
+ for (var i=0, tsl = this.series.length; i<tsl; i++) {
+ this._sumy += this.series[i]._sumy;
+ this._sumx += this.series[i]._sumx;
+ }
+ this.draw();
+ this.target.trigger('jqplotPostRedraw');
+ };
+
+ // method: draw
+ // Draws all elements of the plot into the container.
+ // Does not clear the container before drawing.
+ this.draw = function(){
+ if (this.drawIfHidden || this.target.is(':visible')) {
+ this.target.trigger('jqplotPreDraw');
+ var i,
+ j,
+ l,
+ tempseries;
+ for (i=0, l=$.jqplot.preDrawHooks.length; i<l; i++) {
+ $.jqplot.preDrawHooks[i].call(this);
+ }
+ for (i=0, l=this.preDrawHooks.length; i<l; i++) {
+ this.preDrawHooks.hooks[i].apply(this, this.preDrawSeriesHooks.args[i]);
+ }
+ // create an underlying canvas to be used for special features.
+ this.target.append(this.baseCanvas.createElement({left:0, right:0, top:0, bottom:0}, 'jqplot-base-canvas', null, this));
+ this.baseCanvas.setContext();
+ this.target.append(this.title.draw());
+ this.title.pack({top:0, left:0});
+
+ // make room for the legend between the grid and the edge.
+ // pass a dummy offsets object and a reference to the plot.
+ var legendElem = this.legend.draw({}, this);
+
+ var gridPadding = {top:0, left:0, bottom:0, right:0};
+
+ if (this.legend.placement == "outsideGrid") {
+ // temporarily append the legend to get dimensions
+ this.target.append(legendElem);
+ switch (this.legend.location) {
+ case 'n':
+ gridPadding.top += this.legend.getHeight();
+ break;
+ case 's':
+ gridPadding.bottom += this.legend.getHeight();
+ break;
+ case 'ne':
+ case 'e':
+ case 'se':
+ gridPadding.right += this.legend.getWidth();
+ break;
+ case 'nw':
+ case 'w':
+ case 'sw':
+ gridPadding.left += this.legend.getWidth();
+ break;
+ default: // same as 'ne'
+ gridPadding.right += this.legend.getWidth();
+ break;
+ }
+ legendElem = legendElem.detach();
+ }
+
+ var ax = this.axes;
+ var name;
+ // draw the yMidAxis first, so xaxis of pyramid chart can adjust itself if needed.
+ for (i=0; i<12; i++) {
+ name = _axisNames[i];
+ this.target.append(ax[name].draw(this.baseCanvas._ctx, this));
+ ax[name].set();
+ }
+ if (ax.yaxis.show) {
+ gridPadding.left += ax.yaxis.getWidth();
+ }
+ var ra = ['y2axis', 'y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis'];
+ var rapad = [0, 0, 0, 0, 0, 0, 0, 0];
+ var gpr = 0;
+ var n;
+ for (n=0; n<8; n++) {
+ if (ax[ra[n]].show) {
+ gpr += ax[ra[n]].getWidth();
+ rapad[n] = gpr;
+ }
+ }
+ gridPadding.right += gpr;
+ if (ax.x2axis.show) {
+ gridPadding.top += ax.x2axis.getHeight();
+ }
+ if (this.title.show) {
+ gridPadding.top += this.title.getHeight();
+ }
+ if (ax.xaxis.show) {
+ gridPadding.bottom += ax.xaxis.getHeight();
+ }
+
+ // end of gridPadding adjustments.
+
+ // if user passed in gridDimensions option, check against calculated gridPadding
+ if (this.options.gridDimensions && $.isPlainObject(this.options.gridDimensions)) {
+ var gdw = parseInt(this.options.gridDimensions.width, 10) || 0;
+ var gdh = parseInt(this.options.gridDimensions.height, 10) || 0;
+ var widthAdj = (this._width - gridPadding.left - gridPadding.right - gdw)/2;
+ var heightAdj = (this._height - gridPadding.top - gridPadding.bottom - gdh)/2;
+
+ if (heightAdj >= 0 && widthAdj >= 0) {
+ gridPadding.top += heightAdj;
+ gridPadding.bottom += heightAdj;
+ gridPadding.left += widthAdj;
+ gridPadding.right += widthAdj;
+ }
+ }
+ var arr = ['top', 'bottom', 'left', 'right'];
+ for (var n in arr) {
+ if (this._gridPadding[arr[n]] == null && gridPadding[arr[n]] > 0) {
+ this._gridPadding[arr[n]] = gridPadding[arr[n]];
+ }
+ else if (this._gridPadding[arr[n]] == null) {
+ this._gridPadding[arr[n]] = this._defaultGridPadding[arr[n]];
+ }
+ }
+
+ var legendPadding = this._gridPadding;
+
+ if (this.legend.placement === 'outsideGrid') {
+ legendPadding = {top:this.title.getHeight(), left: 0, right: 0, bottom: 0};
+ if (this.legend.location === 's') {
+ legendPadding.left = this._gridPadding.left;
+ legendPadding.right = this._gridPadding.right;
+ }
+ }
+
+ ax.xaxis.pack({position:'absolute', bottom:this._gridPadding.bottom - ax.xaxis.getHeight(), left:0, width:this._width}, {min:this._gridPadding.left, max:this._width - this._gridPadding.right});
+ ax.yaxis.pack({position:'absolute', top:0, left:this._gridPadding.left - ax.yaxis.getWidth(), height:this._height}, {min:this._height - this._gridPadding.bottom, max: this._gridPadding.top});
+ ax.x2axis.pack({position:'absolute', top:this._gridPadding.top - ax.x2axis.getHeight(), left:0, width:this._width}, {min:this._gridPadding.left, max:this._width - this._gridPadding.right});
+ for (i=8; i>0; i--) {
+ ax[ra[i-1]].pack({position:'absolute', top:0, right:this._gridPadding.right - rapad[i-1]}, {min:this._height - this._gridPadding.bottom, max: this._gridPadding.top});
+ }
+ var ltemp = (this._width - this._gridPadding.left - this._gridPadding.right)/2.0 + this._gridPadding.left - ax.yMidAxis.getWidth()/2.0;
+ ax.yMidAxis.pack({position:'absolute', top:0, left:ltemp, zIndex:9, textAlign: 'center'}, {min:this._height - this._gridPadding.bottom, max: this._gridPadding.top});
+
+ this.target.append(this.grid.createElement(this._gridPadding, this));
+ this.grid.draw();
+
+ var series = this.series;
+ var seriesLength = series.length;
+ // put the shadow canvases behind the series canvases so shadows don't overlap on stacked bars.
+ for (i=0, l=seriesLength; i<l; i++) {
+ // draw series in order of stacking. This affects only
+ // order in which canvases are added to dom.
+ j = this.seriesStack[i];
+ this.target.append(series[j].shadowCanvas.createElement(this._gridPadding, 'jqplot-series-shadowCanvas', null, this));
+ series[j].shadowCanvas.setContext();
+ series[j].shadowCanvas._elem.data('seriesIndex', j);
+ }
+
+ for (i=0, l=seriesLength; i<l; i++) {
+ // draw series in order of stacking. This affects only
+ // order in which canvases are added to dom.
+ j = this.seriesStack[i];
+ this.target.append(series[j].canvas.createElement(this._gridPadding, 'jqplot-series-canvas', null, this));
+ series[j].canvas.setContext();
+ series[j].canvas._elem.data('seriesIndex', j);
+ }
+ // Need to use filled canvas to capture events in IE.
+ // Also, canvas seems to block selection of other elements in document on FF.
+ this.target.append(this.eventCanvas.createElement(this._gridPadding, 'jqplot-event-canvas', null, this));
+ this.eventCanvas.setContext();
+ this.eventCanvas._ctx.fillStyle = 'rgba(0,0,0,0)';
+ this.eventCanvas._ctx.fillRect(0,0,this.eventCanvas._ctx.canvas.width, this.eventCanvas._ctx.canvas.height);
+
+ // bind custom event handlers to regular events.
+ this.bindCustomEvents();
+
+ // draw legend before series if the series needs to know the legend dimensions.
+ if (this.legend.preDraw) {
+ this.eventCanvas._elem.before(legendElem);
+ this.legend.pack(legendPadding);
+ if (this.legend._elem) {
+ this.drawSeries({legendInfo:{location:this.legend.location, placement:this.legend.placement, width:this.legend.getWidth(), height:this.legend.getHeight(), xoffset:this.legend.xoffset, yoffset:this.legend.yoffset}});
+ }
+ else {
+ this.drawSeries();
+ }
+ }
+ else { // draw series before legend
+ this.drawSeries();
+ if (seriesLength) {
+ $(series[seriesLength-1].canvas._elem).after(legendElem);
+ }
+ this.legend.pack(legendPadding);
+ }
+
+ // register event listeners on the overlay canvas
+ for (var i=0, l=$.jqplot.eventListenerHooks.length; i<l; i++) {
+ // in the handler, this will refer to the eventCanvas dom element.
+ // make sure there are references back into plot objects.
+ this.eventCanvas._elem.bind($.jqplot.eventListenerHooks[i][0], {plot:this}, $.jqplot.eventListenerHooks[i][1]);
+ }
+
+ // register event listeners on the overlay canvas
+ for (var i=0, l=this.eventListenerHooks.hooks.length; i<l; i++) {
+ // in the handler, this will refer to the eventCanvas dom element.
+ // make sure there are references back into plot objects.
+ this.eventCanvas._elem.bind(this.eventListenerHooks.hooks[i][0], {plot:this}, this.eventListenerHooks.hooks[i][1]);
+ }
+
+ var fb = this.fillBetween;
+ if (fb.fill && fb.series1 !== fb.series2 && fb.series1 < seriesLength && fb.series2 < seriesLength && series[fb.series1]._type === 'line' && series[fb.series2]._type === 'line') {
+ this.doFillBetweenLines();
+ }
+
+ for (var i=0, l=$.jqplot.postDrawHooks.length; i<l; i++) {
+ $.jqplot.postDrawHooks[i].call(this);
+ }
+
+ for (var i=0, l=this.postDrawHooks.hooks.length; i<l; i++) {
+ this.postDrawHooks.hooks[i].apply(this, this.postDrawHooks.args[i]);
+ }
+
+ if (this.target.is(':visible')) {
+ this._drawCount += 1;
+ }
+
+ var temps,
+ tempr,
+ sel,
+ _els;
+ // ughh. ideally would hide all series then show them.
+ for (i=0, l=seriesLength; i<l; i++) {
+ temps = series[i];
+ tempr = temps.renderer;
+ sel = '.jqplot-point-label.jqplot-series-'+i;
+ if (tempr.animation && tempr.animation._supported && tempr.animation.show && (this._drawCount < 2 || this.animateReplot)) {
+ _els = this.target.find(sel);
+ _els.stop(true, true).hide();
+ temps.canvas._elem.stop(true, true).hide();
+ temps.shadowCanvas._elem.stop(true, true).hide();
+ temps.canvas._elem.jqplotEffect('blind', {mode: 'show', direction: tempr.animation.direction}, tempr.animation.speed);
+ temps.shadowCanvas._elem.jqplotEffect('blind', {mode: 'show', direction: tempr.animation.direction}, tempr.animation.speed);
+ _els.fadeIn(tempr.animation.speed*0.8);
+ }
+ }
+ _els = null;
+
+ this.target.trigger('jqplotPostDraw', [this]);
+ }
+ };
+
+ jqPlot.prototype.doFillBetweenLines = function () {
+ var fb = this.fillBetween;
+ var sid1 = fb.series1;
+ var sid2 = fb.series2;
+ // first series should always be lowest index
+ var id1 = (sid1 < sid2) ? sid1 : sid2;
+ var id2 = (sid2 > sid1) ? sid2 : sid1;
+
+ var series1 = this.series[id1];
+ var series2 = this.series[id2];
+
+ if (series2.renderer.smooth) {
+ var tempgd = series2.renderer._smoothedData.slice(0).reverse();
+ }
+ else {
+ var tempgd = series2.gridData.slice(0).reverse();
+ }
+
+ if (series1.renderer.smooth) {
+ var gd = series1.renderer._smoothedData.concat(tempgd);
+ }
+ else {
+ var gd = series1.gridData.concat(tempgd);
+ }
+
+ var color = (fb.color !== null) ? fb.color : this.series[sid1].fillColor;
+ var baseSeries = (fb.baseSeries !== null) ? fb.baseSeries : id1;
+
+ // now apply a fill to the shape on the lower series shadow canvas,
+ // so it is behind both series.
+ var sr = this.series[baseSeries].renderer.shapeRenderer;
+ var opts = {fillStyle: color, fill: true, closePath: true};
+ sr.draw(series1.shadowCanvas._ctx, gd, opts);
+ };
+
+ this.bindCustomEvents = function() {
+ this.eventCanvas._elem.bind('click', {plot:this}, this.onClick);
+ this.eventCanvas._elem.bind('dblclick', {plot:this}, this.onDblClick);
+ this.eventCanvas._elem.bind('mousedown', {plot:this}, this.onMouseDown);
+ this.eventCanvas._elem.bind('mousemove', {plot:this}, this.onMouseMove);
+ this.eventCanvas._elem.bind('mouseenter', {plot:this}, this.onMouseEnter);
+ this.eventCanvas._elem.bind('mouseleave', {plot:this}, this.onMouseLeave);
+ if (this.captureRightClick) {
+ this.eventCanvas._elem.bind('mouseup', {plot:this}, this.onRightClick);
+ this.eventCanvas._elem.get(0).oncontextmenu = function() {
+ return false;
+ };
+ }
+ else {
+ this.eventCanvas._elem.bind('mouseup', {plot:this}, this.onMouseUp);
+ }
+ };
+
+ function getEventPosition(ev) {
+ var plot = ev.data.plot;
+ var go = plot.eventCanvas._elem.offset();
+ var gridPos = {x:ev.pageX - go.left, y:ev.pageY - go.top};
+ var dataPos = {xaxis:null, yaxis:null, x2axis:null, y2axis:null, y3axis:null, y4axis:null, y5axis:null, y6axis:null, y7axis:null, y8axis:null, y9axis:null, yMidAxis:null};
+ var an = ['xaxis', 'yaxis', 'x2axis', 'y2axis', 'y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis', 'yMidAxis'];
+ var ax = plot.axes;
+ var n, axis;
+ for (n=11; n>0; n--) {
+ axis = an[n-1];
+ if (ax[axis].show) {
+ dataPos[axis] = ax[axis].series_p2u(gridPos[axis.charAt(0)]);
+ }
+ }
+
+ return {offsets:go, gridPos:gridPos, dataPos:dataPos};
+ }
+
+
+ // function to check if event location is over a area area
+ function checkIntersection(gridpos, plot) {
+ var series = plot.series;
+ var i, j, k, s, r, x, y, theta, sm, sa, minang, maxang;
+ var d0, d, p, pp, points, bw, hp;
+ var threshold, t;
+ for (k=plot.seriesStack.length-1; k>=0; k--) {
+ i = plot.seriesStack[k];
+ s = series[i];
+ hp = s._highlightThreshold;
+ switch (s.renderer.constructor) {
+ case $.jqplot.BarRenderer:
+ x = gridpos.x;
+ y = gridpos.y;
+ for (j=0; j<s._barPoints.length; j++) {
+ points = s._barPoints[j];
+ p = s.gridData[j];
+ if (x>points[0][0] && x<points[2][0] && y>points[2][1] && y<points[0][1]) {
+ return {seriesIndex:s.index, pointIndex:j, gridData:p, data:s.data[j], points:s._barPoints[j]};
+ }
+ }
+ break;
+ case $.jqplot.PyramidRenderer:
+ x = gridpos.x;
+ y = gridpos.y;
+ for (j=0; j<s._barPoints.length; j++) {
+ points = s._barPoints[j];
+ p = s.gridData[j];
+ if (x > points[0][0] + hp[0][0] && x < points[2][0] + hp[2][0] && y > points[2][1] && y < points[0][1]) {
+ return {seriesIndex:s.index, pointIndex:j, gridData:p, data:s.data[j], points:s._barPoints[j]};
+ }
+ }
+ break;
+
+ case $.jqplot.DonutRenderer:
+ sa = s.startAngle/180*Math.PI;
+ x = gridpos.x - s._center[0];
+ y = gridpos.y - s._center[1];
+ r = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
+ if (x > 0 && -y >= 0) {
+ theta = 2*Math.PI - Math.atan(-y/x);
+ }
+ else if (x > 0 && -y < 0) {
+ theta = -Math.atan(-y/x);
+ }
+ else if (x < 0) {
+ theta = Math.PI - Math.atan(-y/x);
+ }
+ else if (x == 0 && -y > 0) {
+ theta = 3*Math.PI/2;
+ }
+ else if (x == 0 && -y < 0) {
+ theta = Math.PI/2;
+ }
+ else if (x == 0 && y == 0) {
+ theta = 0;
+ }
+ if (sa) {
+ theta -= sa;
+ if (theta < 0) {
+ theta += 2*Math.PI;
+ }
+ else if (theta > 2*Math.PI) {
+ theta -= 2*Math.PI;
+ }
+ }
+
+ sm = s.sliceMargin/180*Math.PI;
+ if (r < s._radius && r > s._innerRadius) {
+ for (j=0; j<s.gridData.length; j++) {
+ minang = (j>0) ? s.gridData[j-1][1]+sm : sm;
+ maxang = s.gridData[j][1];
+ if (theta > minang && theta < maxang) {
+ return {seriesIndex:s.index, pointIndex:j, gridData:s.gridData[j], data:s.data[j]};
+ }
+ }
+ }
+ break;
+
+ case $.jqplot.PieRenderer:
+ sa = s.startAngle/180*Math.PI;
+ x = gridpos.x - s._center[0];
+ y = gridpos.y - s._center[1];
+ r = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
+ if (x > 0 && -y >= 0) {
+ theta = 2*Math.PI - Math.atan(-y/x);
+ }
+ else if (x > 0 && -y < 0) {
+ theta = -Math.atan(-y/x);
+ }
+ else if (x < 0) {
+ theta = Math.PI - Math.atan(-y/x);
+ }
+ else if (x == 0 && -y > 0) {
+ theta = 3*Math.PI/2;
+ }
+ else if (x == 0 && -y < 0) {
+ theta = Math.PI/2;
+ }
+ else if (x == 0 && y == 0) {
+ theta = 0;
+ }
+ if (sa) {
+ theta -= sa;
+ if (theta < 0) {
+ theta += 2*Math.PI;
+ }
+ else if (theta > 2*Math.PI) {
+ theta -= 2*Math.PI;
+ }
+ }
+
+ sm = s.sliceMargin/180*Math.PI;
+ if (r < s._radius) {
+ for (j=0; j<s.gridData.length; j++) {
+ minang = (j>0) ? s.gridData[j-1][1]+sm : sm;
+ maxang = s.gridData[j][1];
+ if (theta > minang && theta < maxang) {
+ return {seriesIndex:s.index, pointIndex:j, gridData:s.gridData[j], data:s.data[j]};
+ }
+ }
+ }
+ break;
+
+ case $.jqplot.BubbleRenderer:
+ x = gridpos.x;
+ y = gridpos.y;
+ var ret = null;
+
+ if (s.show) {
+ for (var j=0; j<s.gridData.length; j++) {
+ p = s.gridData[j];
+ d = Math.sqrt( (x-p[0]) * (x-p[0]) + (y-p[1]) * (y-p[1]) );
+ if (d <= p[2] && (d <= d0 || d0 == null)) {
+ d0 = d;
+ ret = {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
+ }
+ }
+ if (ret != null) {
+ return ret;
+ }
+ }
+ break;
+
+ case $.jqplot.FunnelRenderer:
+ x = gridpos.x;
+ y = gridpos.y;
+ var v = s._vertices,
+ vfirst = v[0],
+ vlast = v[v.length-1],
+ lex,
+ rex,
+ cv;
+
+ // equations of right and left sides, returns x, y values given height of section (y value and 2 points)
+
+ function findedge (l, p1 , p2) {
+ var m = (p1[1] - p2[1])/(p1[0] - p2[0]);
+ var b = p1[1] - m*p1[0];
+ var y = l + p1[1];
+
+ return [(y - b)/m, y];
+ }
+
+ // check each section
+ lex = findedge(y, vfirst[0], vlast[3]);
+ rex = findedge(y, vfirst[1], vlast[2]);
+ for (j=0; j<v.length; j++) {
+ cv = v[j];
+ if (y >= cv[0][1] && y <= cv[3][1] && x >= lex[0] && x <= rex[0]) {
+ return {seriesIndex:s.index, pointIndex:j, gridData:null, data:s.data[j]};
+ }
+ }
+ break;
+
+ case $.jqplot.LineRenderer:
+ x = gridpos.x;
+ y = gridpos.y;
+ r = s.renderer;
+ if (s.show) {
+ if ((s.fill || (s.renderer.bands.show && s.renderer.bands.fill)) && (!plot.plugins.highlighter || !plot.plugins.highlighter.show)) {
+ // first check if it is in bounding box
+ var inside = false;
+ if (x>s._boundingBox[0][0] && x<s._boundingBox[1][0] && y>s._boundingBox[1][1] && y<s._boundingBox[0][1]) {
+ // now check the crossing number
+
+ var numPoints = s._areaPoints.length;
+ var ii;
+ var j = numPoints-1;
+
+ for(var ii=0; ii < numPoints; ii++) {
+ var vertex1 = [s._areaPoints[ii][0], s._areaPoints[ii][1]];
+ var vertex2 = [s._areaPoints[j][0], s._areaPoints[j][1]];
+
+ if (vertex1[1] < y && vertex2[1] >= y || vertex2[1] < y && vertex1[1] >= y) {
+ if (vertex1[0] + (y - vertex1[1]) / (vertex2[1] - vertex1[1]) * (vertex2[0] - vertex1[0]) < x) {
+ inside = !inside;
+ }
+ }
+
+ j = ii;
+ }
+ }
+ if (inside) {
+ return {seriesIndex:i, pointIndex:null, gridData:s.gridData, data:s.data, points:s._areaPoints};
+ }
+ break;
+
+ }
+
+ else {
+ t = s.markerRenderer.size/2+s.neighborThreshold;
+ threshold = (t > 0) ? t : 0;
+ for (var j=0; j<s.gridData.length; j++) {
+ p = s.gridData[j];
+ // neighbor looks different to OHLC chart.
+ if (r.constructor == $.jqplot.OHLCRenderer) {
+ if (r.candleStick) {
+ var yp = s._yaxis.series_u2p;
+ if (x >= p[0]-r._bodyWidth/2 && x <= p[0]+r._bodyWidth/2 && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) {
+ return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
+ }
+ }
+ // if an open hi low close chart
+ else if (!r.hlc){
+ var yp = s._yaxis.series_u2p;
+ if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) {
+ return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
+ }
+ }
+ // a hi low close chart
+ else {
+ var yp = s._yaxis.series_u2p;
+ if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][1]) && y <= yp(s.data[j][2])) {
+ return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
+ }
+ }
+
+ }
+ else if (p[0] != null && p[1] != null){
+ d = Math.sqrt( (x-p[0]) * (x-p[0]) + (y-p[1]) * (y-p[1]) );
+ if (d <= threshold && (d <= d0 || d0 == null)) {
+ d0 = d;
+ return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
+ }
+ }
+ }
+ }
+ }
+ break;
+
+ default:
+ x = gridpos.x;
+ y = gridpos.y;
+ r = s.renderer;
+ if (s.show) {
+ t = s.markerRenderer.size/2+s.neighborThreshold;
+ threshold = (t > 0) ? t : 0;
+ for (var j=0; j<s.gridData.length; j++) {
+ p = s.gridData[j];
+ // neighbor looks different to OHLC chart.
+ if (r.constructor == $.jqplot.OHLCRenderer) {
+ if (r.candleStick) {
+ var yp = s._yaxis.series_u2p;
+ if (x >= p[0]-r._bodyWidth/2 && x <= p[0]+r._bodyWidth/2 && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) {
+ return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
+ }
+ }
+ // if an open hi low close chart
+ else if (!r.hlc){
+ var yp = s._yaxis.series_u2p;
+ if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) {
+ return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
+ }
+ }
+ // a hi low close chart
+ else {
+ var yp = s._yaxis.series_u2p;
+ if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][1]) && y <= yp(s.data[j][2])) {
+ return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
+ }
+ }
+
+ }
+ else {
+ d = Math.sqrt( (x-p[0]) * (x-p[0]) + (y-p[1]) * (y-p[1]) );
+ if (d <= threshold && (d <= d0 || d0 == null)) {
+ d0 = d;
+ return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
+ }
+ }
+ }
+ }
+ break;
+ }
+ }
+
+ return null;
+ }
+
+
+
+ this.onClick = function(ev) {
+ // Event passed in is normalized and will have data attribute.
+ // Event passed out is unnormalized.
+ var positions = getEventPosition(ev);
+ var p = ev.data.plot;
+ var neighbor = checkIntersection(positions.gridPos, p);
+ var evt = $.Event('jqplotClick');
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
+ };
+
+ this.onDblClick = function(ev) {
+ // Event passed in is normalized and will have data attribute.
+ // Event passed out is unnormalized.
+ var positions = getEventPosition(ev);
+ var p = ev.data.plot;
+ var neighbor = checkIntersection(positions.gridPos, p);
+ var evt = $.Event('jqplotDblClick');
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
+ };
+
+ this.onMouseDown = function(ev) {
+ var positions = getEventPosition(ev);
+ var p = ev.data.plot;
+ var neighbor = checkIntersection(positions.gridPos, p);
+ var evt = $.Event('jqplotMouseDown');
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
+ };
+
+ this.onMouseUp = function(ev) {
+ var positions = getEventPosition(ev);
+ var evt = $.Event('jqplotMouseUp');
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ $(this).trigger(evt, [positions.gridPos, positions.dataPos, null, ev.data.plot]);
+ };
+
+ this.onRightClick = function(ev) {
+ var positions = getEventPosition(ev);
+ var p = ev.data.plot;
+ var neighbor = checkIntersection(positions.gridPos, p);
+ if (p.captureRightClick) {
+ if (ev.which == 3) {
+ var evt = $.Event('jqplotRightClick');
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
+ }
+ else {
+ var evt = $.Event('jqplotMouseUp');
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
+ }
+ }
+ };
+
+ this.onMouseMove = function(ev) {
+ var positions = getEventPosition(ev);
+ var p = ev.data.plot;
+ var neighbor = checkIntersection(positions.gridPos, p);
+ var evt = $.Event('jqplotMouseMove');
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
+ };
+
+ this.onMouseEnter = function(ev) {
+ var positions = getEventPosition(ev);
+ var p = ev.data.plot;
+ var evt = $.Event('jqplotMouseEnter');
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ evt.relatedTarget = ev.relatedTarget;
+ $(this).trigger(evt, [positions.gridPos, positions.dataPos, null, p]);
+ };
+
+ this.onMouseLeave = function(ev) {
+ var positions = getEventPosition(ev);
+ var p = ev.data.plot;
+ var evt = $.Event('jqplotMouseLeave');
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ evt.relatedTarget = ev.relatedTarget;
+ $(this).trigger(evt, [positions.gridPos, positions.dataPos, null, p]);
+ };
+
+ // method: drawSeries
+ // Redraws all or just one series on the plot. No axis scaling
+ // is performed and no other elements on the plot are redrawn.
+ // options is an options object to pass on to the series renderers.
+ // It can be an empty object {}. idx is the series index
+ // to redraw if only one series is to be redrawn.
+ this.drawSeries = function(options, idx){
+ var i, series, ctx;
+ // if only one argument passed in and it is a number, use it ad idx.
+ idx = (typeof(options) === "number" && idx == null) ? options : idx;
+ options = (typeof(options) === "object") ? options : {};
+ // draw specified series
+ if (idx != undefined) {
+ series = this.series[idx];
+ ctx = series.shadowCanvas._ctx;
+ ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
+ series.drawShadow(ctx, options, this);
+ ctx = series.canvas._ctx;
+ ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
+ series.draw(ctx, options, this);
+ if (series.renderer.constructor == $.jqplot.BezierCurveRenderer) {
+ if (idx < this.series.length - 1) {
+ this.drawSeries(idx+1);
+ }
+ }
+ }
+
+ else {
+ // if call series drawShadow method first, in case all series shadows
+ // should be drawn before any series. This will ensure, like for
+ // stacked bar plots, that shadows don't overlap series.
+ for (i=0; i<this.series.length; i++) {
+ // first clear the canvas
+ series = this.series[i];
+ ctx = series.shadowCanvas._ctx;
+ ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
+ series.drawShadow(ctx, options, this);
+ ctx = series.canvas._ctx;
+ ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
+ series.draw(ctx, options, this);
+ }
+ }
+ options = idx = i = series = ctx = null;
+ };
+
+ // method: moveSeriesToFront
+ // This method requires jQuery 1.4+
+ // Moves the specified series canvas in front of all other series canvases.
+ // This effectively "draws" the specified series on top of all other series,
+ // although it is performed through DOM manipulation, no redrawing is performed.
+ //
+ // Parameters:
+ // idx - 0 based index of the series to move. This will be the index of the series
+ // as it was first passed into the jqplot function.
+ this.moveSeriesToFront = function (idx) {
+ idx = parseInt(idx, 10);
+ var stackIndex = $.inArray(idx, this.seriesStack);
+ // if already in front, return
+ if (stackIndex == -1) {
+ return;
+ }
+ if (stackIndex == this.seriesStack.length -1) {
+ this.previousSeriesStack = this.seriesStack.slice(0);
+ return;
+ }
+ var opidx = this.seriesStack[this.seriesStack.length -1];
+ var serelem = this.series[idx].canvas._elem.detach();
+ var shadelem = this.series[idx].shadowCanvas._elem.detach();
+ this.series[opidx].shadowCanvas._elem.after(shadelem);
+ this.series[opidx].canvas._elem.after(serelem);
+ this.previousSeriesStack = this.seriesStack.slice(0);
+ this.seriesStack.splice(stackIndex, 1);
+ this.seriesStack.push(idx);
+ };
+
+ // method: moveSeriesToBack
+ // This method requires jQuery 1.4+
+ // Moves the specified series canvas behind all other series canvases.
+ //
+ // Parameters:
+ // idx - 0 based index of the series to move. This will be the index of the series
+ // as it was first passed into the jqplot function.
+ this.moveSeriesToBack = function (idx) {
+ idx = parseInt(idx, 10);
+ var stackIndex = $.inArray(idx, this.seriesStack);
+ // if already in back, return
+ if (stackIndex == 0 || stackIndex == -1) {
+ return;
+ }
+ var opidx = this.seriesStack[0];
+ var serelem = this.series[idx].canvas._elem.detach();
+ var shadelem = this.series[idx].shadowCanvas._elem.detach();
+ this.series[opidx].shadowCanvas._elem.before(shadelem);
+ this.series[opidx].canvas._elem.before(serelem);
+ this.previousSeriesStack = this.seriesStack.slice(0);
+ this.seriesStack.splice(stackIndex, 1);
+ this.seriesStack.unshift(idx);
+ };
+
+ // method: restorePreviousSeriesOrder
+ // This method requires jQuery 1.4+
+ // Restore the series canvas order to its previous state.
+ // Useful to put a series back where it belongs after moving
+ // it to the front.
+ this.restorePreviousSeriesOrder = function () {
+ var i, j, serelem, shadelem, temp, move, keep;
+ // if no change, return.
+ if (this.seriesStack == this.previousSeriesStack) {
+ return;
+ }
+ for (i=1; i<this.previousSeriesStack.length; i++) {
+ move = this.previousSeriesStack[i];
+ keep = this.previousSeriesStack[i-1];
+ serelem = this.series[move].canvas._elem.detach();
+ shadelem = this.series[move].shadowCanvas._elem.detach();
+ this.series[keep].shadowCanvas._elem.after(shadelem);
+ this.series[keep].canvas._elem.after(serelem);
+ }
+ temp = this.seriesStack.slice(0);
+ this.seriesStack = this.previousSeriesStack.slice(0);
+ this.previousSeriesStack = temp;
+ };
+
+ // method: restoreOriginalSeriesOrder
+ // This method requires jQuery 1.4+
+ // Restore the series canvas order to its original order
+ // when the plot was created.
+ this.restoreOriginalSeriesOrder = function () {
+ var i, j, arr=[], serelem, shadelem;
+ for (i=0; i<this.series.length; i++) {
+ arr.push(i);
+ }
+ if (this.seriesStack == arr) {
+ return;
+ }
+ this.previousSeriesStack = this.seriesStack.slice(0);
+ this.seriesStack = arr;
+ for (i=1; i<this.seriesStack.length; i++) {
+ serelem = this.series[i].canvas._elem.detach();
+ shadelem = this.series[i].shadowCanvas._elem.detach();
+ this.series[i-1].shadowCanvas._elem.after(shadelem);
+ this.series[i-1].canvas._elem.after(serelem);
+ }
+ };
+
+ this.activateTheme = function (name) {
+ this.themeEngine.activate(this, name);
+ };
+ }
+
+
+ // conpute a highlight color or array of highlight colors from given colors.
+ $.jqplot.computeHighlightColors = function(colors) {
+ var ret;
+ if ($.isArray(colors)) {
+ ret = [];
+ for (var i=0; i<colors.length; i++){
+ var rgba = $.jqplot.getColorComponents(colors[i]);
+ var newrgb = [rgba[0], rgba[1], rgba[2]];
+ var sum = newrgb[0] + newrgb[1] + newrgb[2];
+ for (var j=0; j<3; j++) {
+ // when darkening, lowest color component can be is 60.
+ newrgb[j] = (sum > 660) ? newrgb[j] * 0.85 : 0.73 * newrgb[j] + 90;
+ newrgb[j] = parseInt(newrgb[j], 10);
+ (newrgb[j] > 255) ? 255 : newrgb[j];
+ }
+ // newrgb[3] = (rgba[3] > 0.4) ? rgba[3] * 0.4 : rgba[3] * 1.5;
+ // newrgb[3] = (rgba[3] > 0.5) ? 0.8 * rgba[3] - .1 : rgba[3] + 0.2;
+ newrgb[3] = 0.3 + 0.35 * rgba[3];
+ ret.push('rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+newrgb[3]+')');
+ }
+ }
+ else {
+ var rgba = $.jqplot.getColorComponents(colors);
+ var newrgb = [rgba[0], rgba[1], rgba[2]];
+ var sum = newrgb[0] + newrgb[1] + newrgb[2];
+ for (var j=0; j<3; j++) {
+ // when darkening, lowest color component can be is 60.
+ // newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]);
+ // newrgb[j] = parseInt(newrgb[j], 10);
+ newrgb[j] = (sum > 660) ? newrgb[j] * 0.85 : 0.73 * newrgb[j] + 90;
+ newrgb[j] = parseInt(newrgb[j], 10);
+ (newrgb[j] > 255) ? 255 : newrgb[j];
+ }
+ // newrgb[3] = (rgba[3] > 0.4) ? rgba[3] * 0.4 : rgba[3] * 1.5;
+ // newrgb[3] = (rgba[3] > 0.5) ? 0.8 * rgba[3] - .1 : rgba[3] + 0.2;
+ newrgb[3] = 0.3 + 0.35 * rgba[3];
+ ret = 'rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+newrgb[3]+')';
+ }
+ return ret;
+ };
+
+ $.jqplot.ColorGenerator = function(colors) {
+ colors = colors || $.jqplot.config.defaultColors;
+ var idx = 0;
+
+ this.next = function () {
+ if (idx < colors.length) {
+ return colors[idx++];
+ }
+ else {
+ idx = 0;
+ return colors[idx++];
+ }
+ };
+
+ this.previous = function () {
+ if (idx > 0) {
+ return colors[idx--];
+ }
+ else {
+ idx = colors.length-1;
+ return colors[idx];
+ }
+ };
+
+ // get a color by index without advancing pointer.
+ this.get = function(i) {
+ var idx = i - colors.length * Math.floor(i/colors.length);
+ return colors[idx];
+ };
+
+ this.setColors = function(c) {
+ colors = c;
+ };
+
+ this.reset = function() {
+ idx = 0;
+ };
+
+ this.getIndex = function() {
+ return idx;
+ };
+
+ this.setIndex = function(index) {
+ idx = index;
+ };
+ };
+
+ // convert a hex color string to rgb string.
+ // h - 3 or 6 character hex string, with or without leading #
+ // a - optional alpha
+ $.jqplot.hex2rgb = function(h, a) {
+ h = h.replace('#', '');
+ if (h.length == 3) {
+ h = h.charAt(0)+h.charAt(0)+h.charAt(1)+h.charAt(1)+h.charAt(2)+h.charAt(2);
+ }
+ var rgb;
+ rgb = 'rgba('+parseInt(h.slice(0,2), 16)+', '+parseInt(h.slice(2,4), 16)+', '+parseInt(h.slice(4,6), 16);
+ if (a) {
+ rgb += ', '+a;
+ }
+ rgb += ')';
+ return rgb;
+ };
+
+ // convert an rgb color spec to a hex spec. ignore any alpha specification.
+ $.jqplot.rgb2hex = function(s) {
+ var pat = /rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *(?:, *[0-9.]*)?\)/;
+ var m = s.match(pat);
+ var h = '#';
+ for (var i=1; i<4; i++) {
+ var temp;
+ if (m[i].search(/%/) != -1) {
+ temp = parseInt(255*m[i]/100, 10).toString(16);
+ if (temp.length == 1) {
+ temp = '0'+temp;
+ }
+ }
+ else {
+ temp = parseInt(m[i], 10).toString(16);
+ if (temp.length == 1) {
+ temp = '0'+temp;
+ }
+ }
+ h += temp;
+ }
+ return h;
+ };
+
+ // given a css color spec, return an rgb css color spec
+ $.jqplot.normalize2rgb = function(s, a) {
+ if (s.search(/^ *rgba?\(/) != -1) {
+ return s;
+ }
+ else if (s.search(/^ *#?[0-9a-fA-F]?[0-9a-fA-F]/) != -1) {
+ return $.jqplot.hex2rgb(s, a);
+ }
+ else {
+ throw 'invalid color spec';
+ }
+ };
+
+ // extract the r, g, b, a color components out of a css color spec.
+ $.jqplot.getColorComponents = function(s) {
+ // check to see if a color keyword.
+ s = $.jqplot.colorKeywordMap[s] || s;
+ var rgb = $.jqplot.normalize2rgb(s);
+ var pat = /rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *,? *([0-9.]* *)?\)/;
+ var m = rgb.match(pat);
+ var ret = [];
+ for (var i=1; i<4; i++) {
+ if (m[i].search(/%/) != -1) {
+ ret[i-1] = parseInt(255*m[i]/100, 10);
+ }
+ else {
+ ret[i-1] = parseInt(m[i], 10);
+ }
+ }
+ ret[3] = parseFloat(m[4]) ? parseFloat(m[4]) : 1.0;
+ return ret;
+ };
+
+ $.jqplot.colorKeywordMap = {
+ aliceblue: 'rgb(240, 248, 255)',
+ antiquewhite: 'rgb(250, 235, 215)',
+ aqua: 'rgb( 0, 255, 255)',
+ aquamarine: 'rgb(127, 255, 212)',
+ azure: 'rgb(240, 255, 255)',
+ beige: 'rgb(245, 245, 220)',
+ bisque: 'rgb(255, 228, 196)',
+ black: 'rgb( 0, 0, 0)',
+ blanchedalmond: 'rgb(255, 235, 205)',
+ blue: 'rgb( 0, 0, 255)',
+ blueviolet: 'rgb(138, 43, 226)',
+ brown: 'rgb(165, 42, 42)',
+ burlywood: 'rgb(222, 184, 135)',
+ cadetblue: 'rgb( 95, 158, 160)',
+ chartreuse: 'rgb(127, 255, 0)',
+ chocolate: 'rgb(210, 105, 30)',
+ coral: 'rgb(255, 127, 80)',
+ cornflowerblue: 'rgb(100, 149, 237)',
+ cornsilk: 'rgb(255, 248, 220)',
+ crimson: 'rgb(220, 20, 60)',
+ cyan: 'rgb( 0, 255, 255)',
+ darkblue: 'rgb( 0, 0, 139)',
+ darkcyan: 'rgb( 0, 139, 139)',
+ darkgoldenrod: 'rgb(184, 134, 11)',
+ darkgray: 'rgb(169, 169, 169)',
+ darkgreen: 'rgb( 0, 100, 0)',
+ darkgrey: 'rgb(169, 169, 169)',
+ darkkhaki: 'rgb(189, 183, 107)',
+ darkmagenta: 'rgb(139, 0, 139)',
+ darkolivegreen: 'rgb( 85, 107, 47)',
+ darkorange: 'rgb(255, 140, 0)',
+ darkorchid: 'rgb(153, 50, 204)',
+ darkred: 'rgb(139, 0, 0)',
+ darksalmon: 'rgb(233, 150, 122)',
+ darkseagreen: 'rgb(143, 188, 143)',
+ darkslateblue: 'rgb( 72, 61, 139)',
+ darkslategray: 'rgb( 47, 79, 79)',
+ darkslategrey: 'rgb( 47, 79, 79)',
+ darkturquoise: 'rgb( 0, 206, 209)',
+ darkviolet: 'rgb(148, 0, 211)',
+ deeppink: 'rgb(255, 20, 147)',
+ deepskyblue: 'rgb( 0, 191, 255)',
+ dimgray: 'rgb(105, 105, 105)',
+ dimgrey: 'rgb(105, 105, 105)',
+ dodgerblue: 'rgb( 30, 144, 255)',
+ firebrick: 'rgb(178, 34, 34)',
+ floralwhite: 'rgb(255, 250, 240)',
+ forestgreen: 'rgb( 34, 139, 34)',
+ fuchsia: 'rgb(255, 0, 255)',
+ gainsboro: 'rgb(220, 220, 220)',
+ ghostwhite: 'rgb(248, 248, 255)',
+ gold: 'rgb(255, 215, 0)',
+ goldenrod: 'rgb(218, 165, 32)',
+ gray: 'rgb(128, 128, 128)',
+ grey: 'rgb(128, 128, 128)',
+ green: 'rgb( 0, 128, 0)',
+ greenyellow: 'rgb(173, 255, 47)',
+ honeydew: 'rgb(240, 255, 240)',
+ hotpink: 'rgb(255, 105, 180)',
+ indianred: 'rgb(205, 92, 92)',
+ indigo: 'rgb( 75, 0, 130)',
+ ivory: 'rgb(255, 255, 240)',
+ khaki: 'rgb(240, 230, 140)',
+ lavender: 'rgb(230, 230, 250)',
+ lavenderblush: 'rgb(255, 240, 245)',
+ lawngreen: 'rgb(124, 252, 0)',
+ lemonchiffon: 'rgb(255, 250, 205)',
+ lightblue: 'rgb(173, 216, 230)',
+ lightcoral: 'rgb(240, 128, 128)',
+ lightcyan: 'rgb(224, 255, 255)',
+ lightgoldenrodyellow: 'rgb(250, 250, 210)',
+ lightgray: 'rgb(211, 211, 211)',
+ lightgreen: 'rgb(144, 238, 144)',
+ lightgrey: 'rgb(211, 211, 211)',
+ lightpink: 'rgb(255, 182, 193)',
+ lightsalmon: 'rgb(255, 160, 122)',
+ lightseagreen: 'rgb( 32, 178, 170)',
+ lightskyblue: 'rgb(135, 206, 250)',
+ lightslategray: 'rgb(119, 136, 153)',
+ lightslategrey: 'rgb(119, 136, 153)',
+ lightsteelblue: 'rgb(176, 196, 222)',
+ lightyellow: 'rgb(255, 255, 224)',
+ lime: 'rgb( 0, 255, 0)',
+ limegreen: 'rgb( 50, 205, 50)',
+ linen: 'rgb(250, 240, 230)',
+ magenta: 'rgb(255, 0, 255)',
+ maroon: 'rgb(128, 0, 0)',
+ mediumaquamarine: 'rgb(102, 205, 170)',
+ mediumblue: 'rgb( 0, 0, 205)',
+ mediumorchid: 'rgb(186, 85, 211)',
+ mediumpurple: 'rgb(147, 112, 219)',
+ mediumseagreen: 'rgb( 60, 179, 113)',
+ mediumslateblue: 'rgb(123, 104, 238)',
+ mediumspringgreen: 'rgb( 0, 250, 154)',
+ mediumturquoise: 'rgb( 72, 209, 204)',
+ mediumvioletred: 'rgb(199, 21, 133)',
+ midnightblue: 'rgb( 25, 25, 112)',
+ mintcream: 'rgb(245, 255, 250)',
+ mistyrose: 'rgb(255, 228, 225)',
+ moccasin: 'rgb(255, 228, 181)',
+ navajowhite: 'rgb(255, 222, 173)',
+ navy: 'rgb( 0, 0, 128)',
+ oldlace: 'rgb(253, 245, 230)',
+ olive: 'rgb(128, 128, 0)',
+ olivedrab: 'rgb(107, 142, 35)',
+ orange: 'rgb(255, 165, 0)',
+ orangered: 'rgb(255, 69, 0)',
+ orchid: 'rgb(218, 112, 214)',
+ palegoldenrod: 'rgb(238, 232, 170)',
+ palegreen: 'rgb(152, 251, 152)',
+ paleturquoise: 'rgb(175, 238, 238)',
+ palevioletred: 'rgb(219, 112, 147)',
+ papayawhip: 'rgb(255, 239, 213)',
+ peachpuff: 'rgb(255, 218, 185)',
+ peru: 'rgb(205, 133, 63)',
+ pink: 'rgb(255, 192, 203)',
+ plum: 'rgb(221, 160, 221)',
+ powderblue: 'rgb(176, 224, 230)',
+ purple: 'rgb(128, 0, 128)',
+ red: 'rgb(255, 0, 0)',
+ rosybrown: 'rgb(188, 143, 143)',
+ royalblue: 'rgb( 65, 105, 225)',
+ saddlebrown: 'rgb(139, 69, 19)',
+ salmon: 'rgb(250, 128, 114)',
+ sandybrown: 'rgb(244, 164, 96)',
+ seagreen: 'rgb( 46, 139, 87)',
+ seashell: 'rgb(255, 245, 238)',
+ sienna: 'rgb(160, 82, 45)',
+ silver: 'rgb(192, 192, 192)',
+ skyblue: 'rgb(135, 206, 235)',
+ slateblue: 'rgb(106, 90, 205)',
+ slategray: 'rgb(112, 128, 144)',
+ slategrey: 'rgb(112, 128, 144)',
+ snow: 'rgb(255, 250, 250)',
+ springgreen: 'rgb( 0, 255, 127)',
+ steelblue: 'rgb( 70, 130, 180)',
+ tan: 'rgb(210, 180, 140)',
+ teal: 'rgb( 0, 128, 128)',
+ thistle: 'rgb(216, 191, 216)',
+ tomato: 'rgb(255, 99, 71)',
+ turquoise: 'rgb( 64, 224, 208)',
+ violet: 'rgb(238, 130, 238)',
+ wheat: 'rgb(245, 222, 179)',
+ white: 'rgb(255, 255, 255)',
+ whitesmoke: 'rgb(245, 245, 245)',
+ yellow: 'rgb(255, 255, 0)',
+ yellowgreen: 'rgb(154, 205, 50)'
+ };
+
+
+
+ // class: $.jqplot.AxisLabelRenderer
+ // Renderer to place labels on the axes.
+ $.jqplot.AxisLabelRenderer = function(options) {
+ // Group: Properties
+ $.jqplot.ElemContainer.call(this);
+ // name of the axis associated with this tick
+ this.axis;
+ // prop: show
+ // wether or not to show the tick (mark and label).
+ this.show = true;
+ // prop: label
+ // The text or html for the label.
+ this.label = '';
+ this.fontFamily = null;
+ this.fontSize = null;
+ this.textColor = null;
+ this._elem;
+ // prop: escapeHTML
+ // true to escape HTML entities in the label.
+ this.escapeHTML = false;
+
+ $.extend(true, this, options);
+ };
+
+ $.jqplot.AxisLabelRenderer.prototype = new $.jqplot.ElemContainer();
+ $.jqplot.AxisLabelRenderer.prototype.constructor = $.jqplot.AxisLabelRenderer;
+
+ $.jqplot.AxisLabelRenderer.prototype.init = function(options) {
+ $.extend(true, this, options);
+ };
+
+ $.jqplot.AxisLabelRenderer.prototype.draw = function(ctx, plot) {
+ // Memory Leaks patch
+ if (this._elem) {
+ this._elem.emptyForce();
+ this._elem = null;
+ }
+
+ this._elem = $('<div style="position:absolute;" class="jqplot-'+this.axis+'-label"></div>');
+
+ if (Number(this.label)) {
+ this._elem.css('white-space', 'nowrap');
+ }
+
+ if (!this.escapeHTML) {
+ this._elem.html(this.label);
+ }
+ else {
+ this._elem.text(this.label);
+ }
+ if (this.fontFamily) {
+ this._elem.css('font-family', this.fontFamily);
+ }
+ if (this.fontSize) {
+ this._elem.css('font-size', this.fontSize);
+ }
+ if (this.textColor) {
+ this._elem.css('color', this.textColor);
+ }
+
+ return this._elem;
+ };
+
+ $.jqplot.AxisLabelRenderer.prototype.pack = function() {
+ };
+
+ // class: $.jqplot.AxisTickRenderer
+ // A "tick" object showing the value of a tick/gridline on the plot.
+ $.jqplot.AxisTickRenderer = function(options) {
+ // Group: Properties
+ $.jqplot.ElemContainer.call(this);
+ // prop: mark
+ // tick mark on the axis. One of 'inside', 'outside', 'cross', '' or null.
+ this.mark = 'outside';
+ // name of the axis associated with this tick
+ this.axis;
+ // prop: showMark
+ // wether or not to show the mark on the axis.
+ this.showMark = true;
+ // prop: showGridline
+ // wether or not to draw the gridline on the grid at this tick.
+ this.showGridline = true;
+ // prop: isMinorTick
+ // if this is a minor tick.
+ this.isMinorTick = false;
+ // prop: size
+ // Length of the tick beyond the grid in pixels.
+ // DEPRECATED: This has been superceeded by markSize
+ this.size = 4;
+ // prop: markSize
+ // Length of the tick marks in pixels. For 'cross' style, length
+ // will be stoked above and below axis, so total length will be twice this.
+ this.markSize = 6;
+ // prop: show
+ // wether or not to show the tick (mark and label).
+ // Setting this to false requires more testing. It is recommended
+ // to set showLabel and showMark to false instead.
+ this.show = true;
+ // prop: showLabel
+ // wether or not to show the label.
+ this.showLabel = true;
+ this.label = null;
+ this.value = null;
+ this._styles = {};
+ // prop: formatter
+ // A class of a formatter for the tick text. sprintf by default.
+ this.formatter = $.jqplot.DefaultTickFormatter;
+ // prop: prefix
+ // String to prepend to the tick label.
+ // Prefix is prepended to the formatted tick label.
+ this.prefix = '';
+ // prop: suffix
+ // String to append to the tick label.
+ // Suffix is appended to the formatted tick label.
+ this.suffix = '';
+ // prop: formatString
+ // string passed to the formatter.
+ this.formatString = '';
+ // prop: fontFamily
+ // css spec for the font-family css attribute.
+ this.fontFamily;
+ // prop: fontSize
+ // css spec for the font-size css attribute.
+ this.fontSize;
+ // prop: textColor
+ // css spec for the color attribute.
+ this.textColor;
+ // prop: escapeHTML
+ // true to escape HTML entities in the label.
+ this.escapeHTML = false;
+ this._elem;
+ this._breakTick = false;
+
+ $.extend(true, this, options);
+ };
+
+ $.jqplot.AxisTickRenderer.prototype.init = function(options) {
+ $.extend(true, this, options);
+ };
+
+ $.jqplot.AxisTickRenderer.prototype = new $.jqplot.ElemContainer();
+ $.jqplot.AxisTickRenderer.prototype.constructor = $.jqplot.AxisTickRenderer;
+
+ $.jqplot.AxisTickRenderer.prototype.setTick = function(value, axisName, isMinor) {
+ this.value = value;
+ this.axis = axisName;
+ if (isMinor) {
+ this.isMinorTick = true;
+ }
+ return this;
+ };
+
+ $.jqplot.AxisTickRenderer.prototype.draw = function() {
+ if (this.label === null) {
+ this.label = this.prefix + this.formatter(this.formatString, this.value) + this.suffix;
+ }
+ var style = {position: 'absolute'};
+ if (Number(this.label)) {
+ style['whitSpace'] = 'nowrap';
+ }
+
+ // Memory Leaks patch
+ if (this._elem) {
+ this._elem.emptyForce();
+ this._elem = null;
+ }
+
+ this._elem = $(document.createElement('div'));
+ this._elem.addClass("jqplot-"+this.axis+"-tick");
+
+ if (!this.escapeHTML) {
+ this._elem.html(this.label);
+ }
+ else {
+ this._elem.text(this.label);
+ }
+
+ this._elem.css(style);
+
+ for (var s in this._styles) {
+ this._elem.css(s, this._styles[s]);
+ }
+ if (this.fontFamily) {
+ this._elem.css('font-family', this.fontFamily);
+ }
+ if (this.fontSize) {
+ this._elem.css('font-size', this.fontSize);
+ }
+ if (this.textColor) {
+ this._elem.css('color', this.textColor);
+ }
+ if (this._breakTick) {
+ this._elem.addClass('jqplot-breakTick');
+ }
+
+ return this._elem;
+ };
+
+ $.jqplot.DefaultTickFormatter = function (format, val) {
+ if (typeof val == 'number') {
+ if (!format) {
+ format = $.jqplot.config.defaultTickFormatString;
+ }
+ return $.jqplot.sprintf(format, val);
+ }
+ else {
+ return String(val);
+ }
+ };
+
+ $.jqplot.PercentTickFormatter = function (format, val) {
+ if (typeof val == 'number') {
+ val = 100 * val;
+ if (!format) {
+ format = $.jqplot.config.defaultTickFormatString;
+ }
+ return $.jqplot.sprintf(format, val);
+ }
+ else {
+ return String(val);
+ }
+ };
+
+ $.jqplot.AxisTickRenderer.prototype.pack = function() {
+ };
+
+ // Class: $.jqplot.CanvasGridRenderer
+ // The default jqPlot grid renderer, creating a grid on a canvas element.
+ // The renderer has no additional options beyond the <Grid> class.
+ $.jqplot.CanvasGridRenderer = function(){
+ this.shadowRenderer = new $.jqplot.ShadowRenderer();
+ };
+
+ // called with context of Grid object
+ $.jqplot.CanvasGridRenderer.prototype.init = function(options) {
+ this._ctx;
+ $.extend(true, this, options);
+ // set the shadow renderer options
+ var sopts = {lineJoin:'miter', lineCap:'round', fill:false, isarc:false, angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, depth:this.shadowDepth, lineWidth:this.shadowWidth, closePath:false, strokeStyle:this.shadowColor};
+ this.renderer.shadowRenderer.init(sopts);
+ };
+
+ // called with context of Grid.
+ $.jqplot.CanvasGridRenderer.prototype.createElement = function(plot) {
+ var elem;
+ // Memory Leaks patch
+ if (this._elem) {
+ if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) {
+ elem = this._elem.get(0);
+ window.G_vmlCanvasManager.uninitElement(elem);
+ elem = null;
+ }
+
+ this._elem.emptyForce();
+ this._elem = null;
+ }
+
+ elem = plot.canvasManager.getCanvas();
+
+ var w = this._plotDimensions.width;
+ var h = this._plotDimensions.height;
+ elem.width = w;
+ elem.height = h;
+ this._elem = $(elem);
+ this._elem.addClass('jqplot-grid-canvas');
+ this._elem.css({ position: 'absolute', left: 0, top: 0 });
+
+ elem = plot.canvasManager.initCanvas(elem);
+
+ this._top = this._offsets.top;
+ this._bottom = h - this._offsets.bottom;
+ this._left = this._offsets.left;
+ this._right = w - this._offsets.right;
+ this._width = this._right - this._left;
+ this._height = this._bottom - this._top;
+ // avoid memory leak
+ elem = null;
+ return this._elem;
+ };
+
+ $.jqplot.CanvasGridRenderer.prototype.draw = function() {
+ this._ctx = this._elem.get(0).getContext("2d");
+ var ctx = this._ctx;
+ var axes = this._axes;
+ // Add the grid onto the grid canvas. This is the bottom most layer.
+ ctx.save();
+ ctx.clearRect(0, 0, this._plotDimensions.width, this._plotDimensions.height);
+ ctx.fillStyle = this.backgroundColor || this.background;
+ ctx.fillRect(this._left, this._top, this._width, this._height);
+
+ ctx.save();
+ ctx.lineJoin = 'miter';
+ ctx.lineCap = 'butt';
+ ctx.lineWidth = this.gridLineWidth;
+ ctx.strokeStyle = this.gridLineColor;
+ var b, e, s, m;
+ var ax = ['xaxis', 'yaxis', 'x2axis', 'y2axis'];
+ for (var i=4; i>0; i--) {
+ var name = ax[i-1];
+ var axis = axes[name];
+ var ticks = axis._ticks;
+ var numticks = ticks.length;
+ if (axis.show) {
+ if (axis.drawBaseline) {
+ var bopts = {};
+ if (axis.baselineWidth !== null) {
+ bopts.lineWidth = axis.baselineWidth;
+ }
+ if (axis.baselineColor !== null) {
+ bopts.strokeStyle = axis.baselineColor;
+ }
+ switch (name) {
+ case 'xaxis':
+ drawLine (this._left, this._bottom, this._right, this._bottom, bopts);
+ break;
+ case 'yaxis':
+ drawLine (this._left, this._bottom, this._left, this._top, bopts);
+ break;
+ case 'x2axis':
+ drawLine (this._left, this._bottom, this._right, this._bottom, bopts);
+ break;
+ case 'y2axis':
+ drawLine (this._right, this._bottom, this._right, this._top, bopts);
+ break;
+ }
+ }
+ for (var j=numticks; j>0; j--) {
+ var t = ticks[j-1];
+ if (t.show) {
+ var pos = Math.round(axis.u2p(t.value)) + 0.5;
+ switch (name) {
+ case 'xaxis':
+ // draw the grid line if we should
+ if (t.showGridline && this.drawGridlines && ((!t.isMinorTick && axis.drawMajorGridlines) || (t.isMinorTick && axis.drawMinorGridlines)) ) {
+ drawLine(pos, this._top, pos, this._bottom);
+ }
+ // draw the mark
+ if (t.showMark && t.mark && ((!t.isMinorTick && axis.drawMajorTickMarks) || (t.isMinorTick && axis.drawMinorTickMarks)) ) {
+ s = t.markSize;
+ m = t.mark;
+ var pos = Math.round(axis.u2p(t.value)) + 0.5;
+ switch (m) {
+ case 'outside':
+ b = this._bottom;
+ e = this._bottom+s;
+ break;
+ case 'inside':
+ b = this._bottom-s;
+ e = this._bottom;
+ break;
+ case 'cross':
+ b = this._bottom-s;
+ e = this._bottom+s;
+ break;
+ default:
+ b = this._bottom;
+ e = this._bottom+s;
+ break;
+ }
+ // draw the shadow
+ if (this.shadow) {
+ this.renderer.shadowRenderer.draw(ctx, [[pos,b],[pos,e]], {lineCap:'butt', lineWidth:this.gridLineWidth, offset:this.gridLineWidth*0.75, depth:2, fill:false, closePath:false});
+ }
+ // draw the line
+ drawLine(pos, b, pos, e);
+ }
+ break;
+ case 'yaxis':
+ // draw the grid line
+ if (t.showGridline && this.drawGridlines && ((!t.isMinorTick && axis.drawMajorGridlines) || (t.isMinorTick && axis.drawMinorGridlines)) ) {
+ drawLine(this._right, pos, this._left, pos);
+ }
+ // draw the mark
+ if (t.showMark && t.mark && ((!t.isMinorTick && axis.drawMajorTickMarks) || (t.isMinorTick && axis.drawMinorTickMarks)) ) {
+ s = t.markSize;
+ m = t.mark;
+ var pos = Math.round(axis.u2p(t.value)) + 0.5;
+ switch (m) {
+ case 'outside':
+ b = this._left-s;
+ e = this._left;
+ break;
+ case 'inside':
+ b = this._left;
+ e = this._left+s;
+ break;
+ case 'cross':
+ b = this._left-s;
+ e = this._left+s;
+ break;
+ default:
+ b = this._left-s;
+ e = this._left;
+ break;
+ }
+ // draw the shadow
+ if (this.shadow) {
+ this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false});
+ }
+ drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor});
+ }
+ break;
+ case 'x2axis':
+ // draw the grid line
+ if (t.showGridline && this.drawGridlines && ((!t.isMinorTick && axis.drawMajorGridlines) || (t.isMinorTick && axis.drawMinorGridlines)) ) {
+ drawLine(pos, this._bottom, pos, this._top);
+ }
+ // draw the mark
+ if (t.showMark && t.mark && ((!t.isMinorTick && axis.drawMajorTickMarks) || (t.isMinorTick && axis.drawMinorTickMarks)) ) {
+ s = t.markSize;
+ m = t.mark;
+ var pos = Math.round(axis.u2p(t.value)) + 0.5;
+ switch (m) {
+ case 'outside':
+ b = this._top-s;
+ e = this._top;
+ break;
+ case 'inside':
+ b = this._top;
+ e = this._top+s;
+ break;
+ case 'cross':
+ b = this._top-s;
+ e = this._top+s;
+ break;
+ default:
+ b = this._top-s;
+ e = this._top;
+ break;
+ }
+ // draw the shadow
+ if (this.shadow) {
+ this.renderer.shadowRenderer.draw(ctx, [[pos,b],[pos,e]], {lineCap:'butt', lineWidth:this.gridLineWidth, offset:this.gridLineWidth*0.75, depth:2, fill:false, closePath:false});
+ }
+ drawLine(pos, b, pos, e);
+ }
+ break;
+ case 'y2axis':
+ // draw the grid line
+ if (t.showGridline && this.drawGridlines && ((!t.isMinorTick && axis.drawMajorGridlines) || (t.isMinorTick && axis.drawMinorGridlines)) ) {
+ drawLine(this._left, pos, this._right, pos);
+ }
+ // draw the mark
+ if (t.showMark && t.mark && ((!t.isMinorTick && axis.drawMajorTickMarks) || (t.isMinorTick && axis.drawMinorTickMarks)) ) {
+ s = t.markSize;
+ m = t.mark;
+ var pos = Math.round(axis.u2p(t.value)) + 0.5;
+ switch (m) {
+ case 'outside':
+ b = this._right;
+ e = this._right+s;
+ break;
+ case 'inside':
+ b = this._right-s;
+ e = this._right;
+ break;
+ case 'cross':
+ b = this._right-s;
+ e = this._right+s;
+ break;
+ default:
+ b = this._right;
+ e = this._right+s;
+ break;
+ }
+ // draw the shadow
+ if (this.shadow) {
+ this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false});
+ }
+ drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor});
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ t = null;
+ }
+ axis = null;
+ ticks = null;
+ }
+ // Now draw grid lines for additional y axes
+ //////
+ // TO DO: handle yMidAxis
+ //////
+ ax = ['y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis', 'yMidAxis'];
+ for (var i=7; i>0; i--) {
+ var axis = axes[ax[i-1]];
+ var ticks = axis._ticks;
+ if (axis.show) {
+ var tn = ticks[axis.numberTicks-1];
+ var t0 = ticks[0];
+ var left = axis.getLeft();
+ var points = [[left, tn.getTop() + tn.getHeight()/2], [left, t0.getTop() + t0.getHeight()/2 + 1.0]];
+ // draw the shadow
+ if (this.shadow) {
+ this.renderer.shadowRenderer.draw(ctx, points, {lineCap:'butt', fill:false, closePath:false});
+ }
+ // draw the line
+ drawLine(points[0][0], points[0][1], points[1][0], points[1][1], {lineCap:'butt', strokeStyle:axis.borderColor, lineWidth:axis.borderWidth});
+ // draw the tick marks
+ for (var j=ticks.length; j>0; j--) {
+ var t = ticks[j-1];
+ s = t.markSize;
+ m = t.mark;
+ var pos = Math.round(axis.u2p(t.value)) + 0.5;
+ if (t.showMark && t.mark) {
+ switch (m) {
+ case 'outside':
+ b = left;
+ e = left+s;
+ break;
+ case 'inside':
+ b = left-s;
+ e = left;
+ break;
+ case 'cross':
+ b = left-s;
+ e = left+s;
+ break;
+ default:
+ b = left;
+ e = left+s;
+ break;
+ }
+ points = [[b,pos], [e,pos]];
+ // draw the shadow
+ if (this.shadow) {
+ this.renderer.shadowRenderer.draw(ctx, points, {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false});
+ }
+ // draw the line
+ drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor});
+ }
+ t = null;
+ }
+ t0 = null;
+ }
+ axis = null;
+ ticks = null;
+ }
+
+ ctx.restore();
+
+ function drawLine(bx, by, ex, ey, opts) {
+ ctx.save();
+ opts = opts || {};
+ if (opts.lineWidth == null || opts.lineWidth != 0){
+ $.extend(true, ctx, opts);
+ ctx.beginPath();
+ ctx.moveTo(bx, by);
+ ctx.lineTo(ex, ey);
+ ctx.stroke();
+ ctx.restore();
+ }
+ }
+
+ if (this.shadow) {
+ var points = [[this._left, this._bottom], [this._right, this._bottom], [this._right, this._top]];
+ this.renderer.shadowRenderer.draw(ctx, points);
+ }
+ // Now draw border around grid. Use axis border definitions. start at
+ // upper left and go clockwise.
+ if (this.borderWidth != 0 && this.drawBorder) {
+ drawLine (this._left, this._top, this._right, this._top, {lineCap:'round', strokeStyle:axes.x2axis.borderColor, lineWidth:axes.x2axis.borderWidth});
+ drawLine (this._right, this._top, this._right, this._bottom, {lineCap:'round', strokeStyle:axes.y2axis.borderColor, lineWidth:axes.y2axis.borderWidth});
+ drawLine (this._right, this._bottom, this._left, this._bottom, {lineCap:'round', strokeStyle:axes.xaxis.borderColor, lineWidth:axes.xaxis.borderWidth});
+ drawLine (this._left, this._bottom, this._left, this._top, {lineCap:'round', strokeStyle:axes.yaxis.borderColor, lineWidth:axes.yaxis.borderWidth});
+ }
+ // ctx.lineWidth = this.borderWidth;
+ // ctx.strokeStyle = this.borderColor;
+ // ctx.strokeRect(this._left, this._top, this._width, this._height);
+
+ ctx.restore();
+ ctx = null;
+ axes = null;
+ };
+
+ // Class: $.jqplot.DivTitleRenderer
+ // The default title renderer for jqPlot. This class has no options beyond the <Title> class.
+ $.jqplot.DivTitleRenderer = function() {
+ };
+
+ $.jqplot.DivTitleRenderer.prototype.init = function(options) {
+ $.extend(true, this, options);
+ };
+
+ $.jqplot.DivTitleRenderer.prototype.draw = function() {
+ // Memory Leaks patch
+ if (this._elem) {
+ this._elem.emptyForce();
+ this._elem = null;
+ }
+
+ var r = this.renderer;
+ var elem = document.createElement('div');
+ this._elem = $(elem);
+ this._elem.addClass('jqplot-title');
+
+ if (!this.text) {
+ this.show = false;
+ this._elem.height(0);
+ this._elem.width(0);
+ }
+ else if (this.text) {
+ var color;
+ if (this.color) {
+ color = this.color;
+ }
+ else if (this.textColor) {
+ color = this.textColor;
+ }
+
+ // don't trust that a stylesheet is present, set the position.
+ var styles = {position:'absolute', top:'0px', left:'0px'};
+
+ if (this._plotWidth) {
+ styles['width'] = this._plotWidth+'px';
+ }
+ if (this.fontSize) {
+ styles['fontSize'] = this.fontSize;
+ }
+ if (typeof this.textAlign === 'string') {
+ styles['textAlign'] = this.textAlign;
+ }
+ else {
+ styles['textAlign'] = 'center';
+ }
+ if (color) {
+ styles['color'] = color;
+ }
+ if (this.paddingBottom) {
+ styles['paddingBottom'] = this.paddingBottom;
+ }
+ if (this.fontFamily) {
+ styles['fontFamily'] = this.fontFamily;
+ }
+
+ this._elem.css(styles);
+ if (this.escapeHtml) {
+ this._elem.text(this.text);
+ }
+ else {
+ this._elem.html(this.text);
+ }
+
+
+ // styletext += (this._plotWidth) ? 'width:'+this._plotWidth+'px;' : '';
+ // styletext += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
+ // styletext += (this.textAlign) ? 'text-align:'+this.textAlign+';' : 'text-align:center;';
+ // styletext += (color) ? 'color:'+color+';' : '';
+ // styletext += (this.paddingBottom) ? 'padding-bottom:'+this.paddingBottom+';' : '';
+ // this._elem = $('<div class="jqplot-title" style="'+styletext+'">'+this.text+'</div>');
+ // if (this.fontFamily) {
+ // this._elem.css('font-family', this.fontFamily);
+ // }
+ }
+
+ elem = null;
+
+ return this._elem;
+ };
+
+ $.jqplot.DivTitleRenderer.prototype.pack = function() {
+ // nothing to do here
+ };
+
+
+ var dotlen = 0.1;
+
+ $.jqplot.LinePattern = function (ctx, pattern) {
+
+ var defaultLinePatterns = {
+ dotted: [ dotlen, $.jqplot.config.dotGapLength ],
+ dashed: [ $.jqplot.config.dashLength, $.jqplot.config.gapLength ],
+ solid: null
+ };
+
+ if (typeof pattern === 'string') {
+ if (pattern[0] === '.' || pattern[0] === '-') {
+ var s = pattern;
+ pattern = [];
+ for (var i=0, imax=s.length; i<imax; i++) {
+ if (s[i] === '.') {
+ pattern.push( dotlen );
+ }
+ else if (s[i] === '-') {
+ pattern.push( $.jqplot.config.dashLength );
+ }
+ else {
+ continue;
+ }
+ pattern.push( $.jqplot.config.gapLength );
+ }
+ }
+ else {
+ pattern = defaultLinePatterns[pattern];
+ }
+ }
+
+ if (!(pattern && pattern.length)) {
+ return ctx;
+ }
+
+ var patternIndex = 0;
+ var patternDistance = pattern[0];
+ var px = 0;
+ var py = 0;
+ var pathx0 = 0;
+ var pathy0 = 0;
+
+ var moveTo = function (x, y) {
+ ctx.moveTo( x, y );
+ px = x;
+ py = y;
+ pathx0 = x;
+ pathy0 = y;
+ };
+
+ var lineTo = function (x, y) {
+ var scale = ctx.lineWidth;
+ var dx = x - px;
+ var dy = y - py;
+ var dist = Math.sqrt(dx*dx+dy*dy);
+ if ((dist > 0) && (scale > 0)) {
+ dx /= dist;
+ dy /= dist;
+ while (true) {
+ var dp = scale * patternDistance;
+ if (dp < dist) {
+ px += dp * dx;
+ py += dp * dy;
+ if ((patternIndex & 1) == 0) {
+ ctx.lineTo( px, py );
+ }
+ else {
+ ctx.moveTo( px, py );
+ }
+ dist -= dp;
+ patternIndex++;
+ if (patternIndex >= pattern.length) {
+ patternIndex = 0;
+ }
+ patternDistance = pattern[patternIndex];
+ }
+ else {
+ px = x;
+ py = y;
+ if ((patternIndex & 1) == 0) {
+ ctx.lineTo( px, py );
+ }
+ else {
+ ctx.moveTo( px, py );
+ }
+ patternDistance -= dist / scale;
+ break;
+ }
+ }
+ }
+ };
+
+ var beginPath = function () {
+ ctx.beginPath();
+ };
+
+ var closePath = function () {
+ lineTo( pathx0, pathy0 );
+ };
+
+ return {
+ moveTo: moveTo,
+ lineTo: lineTo,
+ beginPath: beginPath,
+ closePath: closePath
+ };
+ };
+
+ // Class: $.jqplot.LineRenderer
+ // The default line renderer for jqPlot, this class has no options beyond the <Series> class.
+ // Draws series as a line.
+ $.jqplot.LineRenderer = function(){
+ this.shapeRenderer = new $.jqplot.ShapeRenderer();
+ this.shadowRenderer = new $.jqplot.ShadowRenderer();
+ };
+
+ // called with scope of series.
+ $.jqplot.LineRenderer.prototype.init = function(options, plot) {
+ // Group: Properties
+ //
+ options = options || {};
+ this._type='line';
+ this.renderer.animation = {
+ show: false,
+ direction: 'left',
+ speed: 2500,
+ _supported: true
+ };
+ // prop: smooth
+ // True to draw a smoothed (interpolated) line through the data points
+ // with automatically computed number of smoothing points.
+ // Set to an integer number > 2 to specify number of smoothing points
+ // to use between each data point.
+ this.renderer.smooth = false; // true or a number > 2 for smoothing.
+ this.renderer.tension = null; // null to auto compute or a number typically > 6. Fewer points requires higher tension.
+ // prop: constrainSmoothing
+ // True to use a more accurate smoothing algorithm that will
+ // not overshoot any data points. False to allow overshoot but
+ // produce a smoother looking line.
+ this.renderer.constrainSmoothing = true;
+ // this is smoothed data in grid coordinates, like gridData
+ this.renderer._smoothedData = [];
+ // this is smoothed data in plot units (plot coordinates), like plotData.
+ this.renderer._smoothedPlotData = [];
+ this.renderer._hiBandGridData = [];
+ this.renderer._lowBandGridData = [];
+ this.renderer._hiBandSmoothedData = [];
+ this.renderer._lowBandSmoothedData = [];
+
+ // prop: bandData
+ // Data used to draw error bands or confidence intervals above/below a line.
+ //
+ // bandData can be input in 3 forms. jqPlot will figure out which is the
+ // low band line and which is the high band line for all forms:
+ //
+ // A 2 dimensional array like [[yl1, yl2, ...], [yu1, yu2, ...]] where
+ // [yl1, yl2, ...] are y values of the lower line and
+ // [yu1, yu2, ...] are y values of the upper line.
+ // In this case there must be the same number of y data points as data points
+ // in the series and the bands will inherit the x values of the series.
+ //
+ // A 2 dimensional array like [[[xl1, yl1], [xl2, yl2], ...], [[xh1, yh1], [xh2, yh2], ...]]
+ // where [xl1, yl1] are x,y data points for the lower line and
+ // [xh1, yh1] are x,y data points for the high line.
+ // x values do not have to correspond to the x values of the series and can
+ // be of any arbitrary length.
+ //
+ // Can be of form [[yl1, yu1], [yl2, yu2], [yl3, yu3], ...] where
+ // there must be 3 or more arrays and there must be the same number of arrays
+ // as there are data points in the series. In this case,
+ // [yl1, yu1] specifies the lower and upper y values for the 1st
+ // data point and so on. The bands will inherit the x
+ // values from the series.
+ this.renderer.bandData = [];
+
+ // Group: bands
+ // Banding around line, e.g error bands or confidence intervals.
+ this.renderer.bands = {
+ // prop: show
+ // true to show the bands. If bandData or interval is
+ // supplied, show will be set to true by default.
+ show: false,
+ hiData: [],
+ lowData: [],
+ // prop: color
+ // color of lines at top and bottom of bands [default: series color].
+ color: this.color,
+ // prop: showLines
+ // True to show lines at top and bottom of bands [default: false].
+ showLines: false,
+ // prop: fill
+ // True to fill area between bands [default: true].
+ fill: true,
+ // prop: fillColor
+ // css color spec for filled area. [default: series color].
+ fillColor: null,
+ _min: null,
+ _max: null,
+ // prop: interval
+ // User specified interval above and below line for bands [default: '3%''].
+ // Can be a value like 3 or a string like '3%'
+ // or an upper/lower array like [1, -2] or ['2%', '-1.5%']
+ interval: '3%'
+ };
+
+
+ var lopts = {highlightMouseOver: options.highlightMouseOver, highlightMouseDown: options.highlightMouseDown, highlightColor: options.highlightColor};
+
+ delete (options.highlightMouseOver);
+ delete (options.highlightMouseDown);
+ delete (options.highlightColor);
+
+ $.extend(true, this.renderer, options);
+
+ this.renderer.options = options;
+
+ // if we are given some band data, and bands aren't explicity set to false in options, turn them on.
+ if (this.renderer.bandData.length > 1 && (!options.bands || options.bands.show == null)) {
+ this.renderer.bands.show = true;
+ }
+
+ // if we are given an interval, and bands aren't explicity set to false in options, turn them on.
+ else if (options.bands && options.bands.show == null && options.bands.interval != null) {
+ this.renderer.bands.show = true;
+ }
+
+ // if plot is filled, turn off bands.
+ if (this.fill) {
+ this.renderer.bands.show = false;
+ }
+
+ if (this.renderer.bands.show) {
+ this.renderer.initBands.call(this, this.renderer.options, plot);
+ }
+
+
+ // smoothing is not compatible with stacked lines, disable
+ if (this._stack) {
+ this.renderer.smooth = false;
+ }
+
+ // set the shape renderer options
+ var opts = {lineJoin:this.lineJoin, lineCap:this.lineCap, fill:this.fill, isarc:false, strokeStyle:this.color, fillStyle:this.fillColor, lineWidth:this.lineWidth, linePattern:this.linePattern, closePath:this.fill};
+ this.renderer.shapeRenderer.init(opts);
+
+ var shadow_offset = options.shadowOffset;
+ // set the shadow renderer options
+ if (shadow_offset == null) {
+ // scale the shadowOffset to the width of the line.
+ if (this.lineWidth > 2.5) {
+ shadow_offset = 1.25 * (1 + (Math.atan((this.lineWidth/2.5))/0.785398163 - 1)*0.6);
+ // var shadow_offset = this.shadowOffset;
+ }
+ // for skinny lines, don't make such a big shadow.
+ else {
+ shadow_offset = 1.25 * Math.atan((this.lineWidth/2.5))/0.785398163;
+ }
+ }
+
+ var sopts = {lineJoin:this.lineJoin, lineCap:this.lineCap, fill:this.fill, isarc:false, angle:this.shadowAngle, offset:shadow_offset, alpha:this.shadowAlpha, depth:this.shadowDepth, lineWidth:this.lineWidth, linePattern:this.linePattern, closePath:this.fill};
+ this.renderer.shadowRenderer.init(sopts);
+ this._areaPoints = [];
+ this._boundingBox = [[],[]];
+
+ if (!this.isTrendline && this.fill || this.renderer.bands.show) {
+ // Group: Properties
+ //
+ // prop: highlightMouseOver
+ // True to highlight area on a filled plot when moused over.
+ // This must be false to enable highlightMouseDown to highlight when clicking on an area on a filled plot.
+ this.highlightMouseOver = true;
+ // prop: highlightMouseDown
+ // True to highlight when a mouse button is pressed over an area on a filled plot.
+ // This will be disabled if highlightMouseOver is true.
+ this.highlightMouseDown = false;
+ // prop: highlightColor
+ // color to use when highlighting an area on a filled plot.
+ this.highlightColor = null;
+ // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
+ if (lopts.highlightMouseDown && lopts.highlightMouseOver == null) {
+ lopts.highlightMouseOver = false;
+ }
+
+ $.extend(true, this, {highlightMouseOver: lopts.highlightMouseOver, highlightMouseDown: lopts.highlightMouseDown, highlightColor: lopts.highlightColor});
+
+ if (!this.highlightColor) {
+ var fc = (this.renderer.bands.show) ? this.renderer.bands.fillColor : this.fillColor;
+ this.highlightColor = $.jqplot.computeHighlightColors(fc);
+ }
+ // turn off (disable) the highlighter plugin
+ if (this.highlighter) {
+ this.highlighter.show = false;
+ }
+ }
+
+ if (!this.isTrendline && plot) {
+ plot.plugins.lineRenderer = {};
+ plot.postInitHooks.addOnce(postInit);
+ plot.postDrawHooks.addOnce(postPlotDraw);
+ plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
+ plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
+ plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
+ plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
+ plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick);
+ }
+
+ };
+
+ $.jqplot.LineRenderer.prototype.initBands = function(options, plot) {
+ // use bandData if no data specified in bands option
+ //var bd = this.renderer.bandData;
+ var bd = options.bandData || [];
+ var bands = this.renderer.bands;
+ bands.hiData = [];
+ bands.lowData = [];
+ var data = this.data;
+ bands._max = null;
+ bands._min = null;
+ // If 2 arrays, and each array greater than 2 elements, assume it is hi and low data bands of y values.
+ if (bd.length == 2) {
+ // Do we have an array of x,y values?
+ // like [[[1,1], [2,4], [3,3]], [[1,3], [2,6], [3,5]]]
+ if ($.isArray(bd[0][0])) {
+ // since an arbitrary array of points, spin through all of them to determine max and min lines.
+
+ var p;
+ var bdminidx = 0, bdmaxidx = 0;
+ for (var i = 0, l = bd[0].length; i<l; i++) {
+ p = bd[0][i];
+ if ((p[1] != null && p[1] > bands._max) || bands._max == null) {
+ bands._max = p[1];
+ }
+ if ((p[1] != null && p[1] < bands._min) || bands._min == null) {
+ bands._min = p[1];
+ }
+ }
+ for (var i = 0, l = bd[1].length; i<l; i++) {
+ p = bd[1][i];
+ if ((p[1] != null && p[1] > bands._max) || bands._max == null) {
+ bands._max = p[1];
+ bdmaxidx = 1;
+ }
+ if ((p[1] != null && p[1] < bands._min) || bands._min == null) {
+ bands._min = p[1];
+ bdminidx = 1;
+ }
+ }
+
+ if (bdmaxidx === bdminidx) {
+ bands.show = false;
+ }
+
+ bands.hiData = bd[bdmaxidx];
+ bands.lowData = bd[bdminidx];
+ }
+ // else data is arrays of y values
+ // like [[1,4,3], [3,6,5]]
+ // must have same number of band data points as points in series
+ else if (bd[0].length === data.length && bd[1].length === data.length) {
+ var hi = (bd[0][0] > bd[1][0]) ? 0 : 1;
+ var low = (hi) ? 0 : 1;
+ for (var i=0, l=data.length; i < l; i++) {
+ bands.hiData.push([data[i][0], bd[hi][i]]);
+ bands.lowData.push([data[i][0], bd[low][i]]);
+ }
+ }
+
+ // we don't have proper data array, don't show bands.
+ else {
+ bands.show = false;
+ }
+ }
+
+ // if more than 2 arrays, have arrays of [ylow, yhi] values.
+ // note, can't distinguish case of [[ylow, yhi], [ylow, yhi]] from [[ylow, ylow], [yhi, yhi]]
+ // this is assumed to be of the latter form.
+ else if (bd.length > 2 && !$.isArray(bd[0][0])) {
+ var hi = (bd[0][0] > bd[0][1]) ? 0 : 1;
+ var low = (hi) ? 0 : 1;
+ for (var i=0, l=bd.length; i<l; i++) {
+ bands.hiData.push([data[i][0], bd[i][hi]]);
+ bands.lowData.push([data[i][0], bd[i][low]]);
+ }
+ }
+
+ // don't have proper data, auto calculate
+ else {
+ var intrv = bands.interval;
+ var a = null;
+ var b = null;
+ var afunc = null;
+ var bfunc = null;
+
+ if ($.isArray(intrv)) {
+ a = intrv[0];
+ b = intrv[1];
+ }
+ else {
+ a = intrv;
+ }
+
+ if (isNaN(a)) {
+ // we have a string
+ if (a.charAt(a.length - 1) === '%') {
+ afunc = 'multiply';
+ a = parseFloat(a)/100 + 1;
+ }
+ }
+
+ else {
+ a = parseFloat(a);
+ afunc = 'add';
+ }
+
+ if (b !== null && isNaN(b)) {
+ // we have a string
+ if (b.charAt(b.length - 1) === '%') {
+ bfunc = 'multiply';
+ b = parseFloat(b)/100 + 1;
+ }
+ }
+
+ else if (b !== null) {
+ b = parseFloat(b);
+ bfunc = 'add';
+ }
+
+ if (a !== null) {
+ if (b === null) {
+ b = -a;
+ bfunc = afunc;
+ if (bfunc === 'multiply') {
+ b += 2;
+ }
+ }
+
+ // make sure a always applies to hi band.
+ if (a < b) {
+ var temp = a;
+ a = b;
+ b = temp;
+ temp = afunc;
+ afunc = bfunc;
+ bfunc = temp;
+ }
+
+ for (var i=0, l = data.length; i < l; i++) {
+ switch (afunc) {
+ case 'add':
+ bands.hiData.push([data[i][0], data[i][1] + a]);
+ break;
+ case 'multiply':
+ bands.hiData.push([data[i][0], data[i][1] * a]);
+ break;
+ }
+ switch (bfunc) {
+ case 'add':
+ bands.lowData.push([data[i][0], data[i][1] + b]);
+ break;
+ case 'multiply':
+ bands.lowData.push([data[i][0], data[i][1] * b]);
+ break;
+ }
+ }
+ }
+
+ else {
+ bands.show = false;
+ }
+ }
+
+ var hd = bands.hiData;
+ var ld = bands.lowData;
+ for (var i = 0, l = hd.length; i<l; i++) {
+ if ((hd[i][1] != null && hd[i][1] > bands._max) || bands._max == null) {
+ bands._max = hd[i][1];
+ }
+ }
+ for (var i = 0, l = ld.length; i<l; i++) {
+ if ((ld[i][1] != null && ld[i][1] < bands._min) || bands._min == null) {
+ bands._min = ld[i][1];
+ }
+ }
+
+ // one last check for proper data
+ // these don't apply any more since allowing arbitrary x,y values
+ // if (bands.hiData.length != bands.lowData.length) {
+ // bands.show = false;
+ // }
+
+ // if (bands.hiData.length != this.data.length) {
+ // bands.show = false;
+ // }
+
+ if (bands.fillColor === null) {
+ var c = $.jqplot.getColorComponents(bands.color);
+ // now adjust alpha to differentiate fill
+ c[3] = c[3] * 0.5;
+ bands.fillColor = 'rgba(' + c[0] +', '+ c[1] +', '+ c[2] +', '+ c[3] + ')';
+ }
+ };
+
+ function getSteps (d, f) {
+ return (3.4182054+f) * Math.pow(d, -0.3534992);
+ }
+
+ function computeSteps (d1, d2) {
+ var s = Math.sqrt(Math.pow((d2[0]- d1[0]), 2) + Math.pow ((d2[1] - d1[1]), 2));
+ return 5.7648 * Math.log(s) + 7.4456;
+ }
+
+ function tanh (x) {
+ var a = (Math.exp(2*x) - 1) / (Math.exp(2*x) + 1);
+ return a;
+ }
+
+ //////////
+ // computeConstrainedSmoothedData
+ // An implementation of the constrained cubic spline interpolation
+ // method as presented in:
+ //
+ // Kruger, CJC, Constrained Cubic Spine Interpolation for Chemical Engineering Applications
+ // http://www.korf.co.uk/spline.pdf
+ //
+ // The implementation below borrows heavily from the sample Visual Basic
+ // implementation by CJC Kruger found in http://www.korf.co.uk/spline.xls
+ //
+ /////////
+
+ // called with scope of series
+ function computeConstrainedSmoothedData (gd) {
+ var smooth = this.renderer.smooth;
+ var dim = this.canvas.getWidth();
+ var xp = this._xaxis.series_p2u;
+ var yp = this._yaxis.series_p2u;
+ var steps =null;
+ var _steps = null;
+ var dist = gd.length/dim;
+ var _smoothedData = [];
+ var _smoothedPlotData = [];
+
+ if (!isNaN(parseFloat(smooth))) {
+ steps = parseFloat(smooth);
+ }
+ else {
+ steps = getSteps(dist, 0.5);
+ }
+
+ var yy = [];
+ var xx = [];
+
+ for (var i=0, l = gd.length; i<l; i++) {
+ yy.push(gd[i][1]);
+ xx.push(gd[i][0]);
+ }
+
+ function dxx(x1, x0) {
+ if (x1 - x0 == 0) {
+ return Math.pow(10,10);
+ }
+ else {
+ return x1 - x0;
+ }
+ }
+
+ var A, B, C, D;
+ // loop through each line segment. Have # points - 1 line segments. Nmber segments starting at 1.
+ var nmax = gd.length - 1;
+ for (var num = 1, gdl = gd.length; num<gdl; num++) {
+ var gxx = [];
+ var ggxx = [];
+ // point at each end of segment.
+ for (var j = 0; j < 2; j++) {
+ var i = num - 1 + j; // point number, 0 to # points.
+
+ if (i == 0 || i == nmax) {
+ gxx[j] = Math.pow(10, 10);
+ }
+ else if (yy[i+1] - yy[i] == 0 || yy[i] - yy[i-1] == 0) {
+ gxx[j] = 0;
+ }
+ else if (((xx[i+1] - xx[i]) / (yy[i+1] - yy[i]) + (xx[i] - xx[i-1]) / (yy[i] - yy[i-1])) == 0 ) {
+ gxx[j] = 0;
+ }
+ else if ( (yy[i+1] - yy[i]) * (yy[i] - yy[i-1]) < 0 ) {
+ gxx[j] = 0;
+ }
+
+ else {
+ gxx[j] = 2 / (dxx(xx[i + 1], xx[i]) / (yy[i + 1] - yy[i]) + dxx(xx[i], xx[i - 1]) / (yy[i] - yy[i - 1]));
+ }
+ }
+
+ // Reset first derivative (slope) at first and last point
+ if (num == 1) {
+ // First point has 0 2nd derivative
+ gxx[0] = 3 / 2 * (yy[1] - yy[0]) / dxx(xx[1], xx[0]) - gxx[1] / 2;
+ }
+ else if (num == nmax) {
+ // Last point has 0 2nd derivative
+ gxx[1] = 3 / 2 * (yy[nmax] - yy[nmax - 1]) / dxx(xx[nmax], xx[nmax - 1]) - gxx[0] / 2;
+ }
+
+ // Calc second derivative at points
+ ggxx[0] = -2 * (gxx[1] + 2 * gxx[0]) / dxx(xx[num], xx[num - 1]) + 6 * (yy[num] - yy[num - 1]) / Math.pow(dxx(xx[num], xx[num - 1]), 2);
+ ggxx[1] = 2 * (2 * gxx[1] + gxx[0]) / dxx(xx[num], xx[num - 1]) - 6 * (yy[num] - yy[num - 1]) / Math.pow(dxx(xx[num], xx[num - 1]), 2);
+
+ // Calc constants for cubic interpolation
+ D = 1 / 6 * (ggxx[1] - ggxx[0]) / dxx(xx[num], xx[num - 1]);
+ C = 1 / 2 * (xx[num] * ggxx[0] - xx[num - 1] * ggxx[1]) / dxx(xx[num], xx[num - 1]);
+ B = (yy[num] - yy[num - 1] - C * (Math.pow(xx[num], 2) - Math.pow(xx[num - 1], 2)) - D * (Math.pow(xx[num], 3) - Math.pow(xx[num - 1], 3))) / dxx(xx[num], xx[num - 1]);
+ A = yy[num - 1] - B * xx[num - 1] - C * Math.pow(xx[num - 1], 2) - D * Math.pow(xx[num - 1], 3);
+
+ var increment = (xx[num] - xx[num - 1]) / steps;
+ var temp, tempx;
+
+ for (var j = 0, l = steps; j < l; j++) {
+ temp = [];
+ tempx = xx[num - 1] + j * increment;
+ temp.push(tempx);
+ temp.push(A + B * tempx + C * Math.pow(tempx, 2) + D * Math.pow(tempx, 3));
+ _smoothedData.push(temp);
+ _smoothedPlotData.push([xp(temp[0]), yp(temp[1])]);
+ }
+ }
+
+ _smoothedData.push(gd[i]);
+ _smoothedPlotData.push([xp(gd[i][0]), yp(gd[i][1])]);
+
+ return [_smoothedData, _smoothedPlotData];
+ }
+
+ ///////
+ // computeHermiteSmoothedData
+ // A hermite spline smoothing of the plot data.
+ // This implementation is derived from the one posted
+ // by krypin on the jqplot-users mailing list:
+ //
+ // http://groups.google.com/group/jqplot-users/browse_thread/thread/748be6a445723cea?pli=1
+ //
+ // with a blog post:
+ //
+ // http://blog.statscollector.com/a-plugin-renderer-for-jqplot-to-draw-a-hermite-spline/
+ //
+ // and download of the original plugin:
+ //
+ // http://blog.statscollector.com/wp-content/uploads/2010/02/jqplot.hermiteSplineRenderer.js
+ //////////
+
+ // called with scope of series
+ function computeHermiteSmoothedData (gd) {
+ var smooth = this.renderer.smooth;
+ var tension = this.renderer.tension;
+ var dim = this.canvas.getWidth();
+ var xp = this._xaxis.series_p2u;
+ var yp = this._yaxis.series_p2u;
+ var steps =null;
+ var _steps = null;
+ var a = null;
+ var a1 = null;
+ var a2 = null;
+ var slope = null;
+ var slope2 = null;
+ var temp = null;
+ var t, s, h1, h2, h3, h4;
+ var TiX, TiY, Ti1X, Ti1Y;
+ var pX, pY, p;
+ var sd = [];
+ var spd = [];
+ var dist = gd.length/dim;
+ var min, max, stretch, scale, shift;
+ var _smoothedData = [];
+ var _smoothedPlotData = [];
+ if (!isNaN(parseFloat(smooth))) {
+ steps = parseFloat(smooth);
+ }
+ else {
+ steps = getSteps(dist, 0.5);
+ }
+ if (!isNaN(parseFloat(tension))) {
+ tension = parseFloat(tension);
+ }
+
+ for (var i=0, l = gd.length-1; i < l; i++) {
+
+ if (tension === null) {
+ slope = Math.abs((gd[i+1][1] - gd[i][1]) / (gd[i+1][0] - gd[i][0]));
+
+ min = 0.3;
+ max = 0.6;
+ stretch = (max - min)/2.0;
+ scale = 2.5;
+ shift = -1.4;
+
+ temp = slope/scale + shift;
+
+ a1 = stretch * tanh(temp) - stretch * tanh(shift) + min;
+
+ // if have both left and right line segments, will use minimum tension.
+ if (i > 0) {
+ slope2 = Math.abs((gd[i][1] - gd[i-1][1]) / (gd[i][0] - gd[i-1][0]));
+ }
+ temp = slope2/scale + shift;
+
+ a2 = stretch * tanh(temp) - stretch * tanh(shift) + min;
+
+ a = (a1 + a2)/2.0;
+
+ }
+ else {
+ a = tension;
+ }
+ for (t=0; t < steps; t++) {
+ s = t / steps;
+ h1 = (1 + 2*s)*Math.pow((1-s),2);
+ h2 = s*Math.pow((1-s),2);
+ h3 = Math.pow(s,2)*(3-2*s);
+ h4 = Math.pow(s,2)*(s-1);
+
+ if (gd[i-1]) {
+ TiX = a * (gd[i+1][0] - gd[i-1][0]);
+ TiY = a * (gd[i+1][1] - gd[i-1][1]);
+ } else {
+ TiX = a * (gd[i+1][0] - gd[i][0]);
+ TiY = a * (gd[i+1][1] - gd[i][1]);
+ }
+ if (gd[i+2]) {
+ Ti1X = a * (gd[i+2][0] - gd[i][0]);
+ Ti1Y = a * (gd[i+2][1] - gd[i][1]);
+ } else {
+ Ti1X = a * (gd[i+1][0] - gd[i][0]);
+ Ti1Y = a * (gd[i+1][1] - gd[i][1]);
+ }
+
+ pX = h1*gd[i][0] + h3*gd[i+1][0] + h2*TiX + h4*Ti1X;
+ pY = h1*gd[i][1] + h3*gd[i+1][1] + h2*TiY + h4*Ti1Y;
+ p = [pX, pY];
+
+ _smoothedData.push(p);
+ _smoothedPlotData.push([xp(pX), yp(pY)]);
+ }
+ }
+ _smoothedData.push(gd[l]);
+ _smoothedPlotData.push([xp(gd[l][0]), yp(gd[l][1])]);
+
+ return [_smoothedData, _smoothedPlotData];
+ }
+
+ // setGridData
+ // converts the user data values to grid coordinates and stores them
+ // in the gridData array.
+ // Called with scope of a series.
+ $.jqplot.LineRenderer.prototype.setGridData = function(plot) {
+ // recalculate the grid data
+ var xp = this._xaxis.series_u2p;
+ var yp = this._yaxis.series_u2p;
+ var data = this._plotData;
+ var pdata = this._prevPlotData;
+ this.gridData = [];
+ this._prevGridData = [];
+ this.renderer._smoothedData = [];
+ this.renderer._smoothedPlotData = [];
+ this.renderer._hiBandGridData = [];
+ this.renderer._lowBandGridData = [];
+ this.renderer._hiBandSmoothedData = [];
+ this.renderer._lowBandSmoothedData = [];
+ var bands = this.renderer.bands;
+ var hasNull = false;
+ for (var i=0, l=data.length; i < l; i++) {
+ // if not a line series or if no nulls in data, push the converted point onto the array.
+ if (data[i][0] != null && data[i][1] != null) {
+ this.gridData.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1])]);
+ }
+ // else if there is a null, preserve it.
+ else if (data[i][0] == null) {
+ hasNull = true;
+ this.gridData.push([null, yp.call(this._yaxis, data[i][1])]);
+ }
+ else if (data[i][1] == null) {
+ hasNull = true;
+ this.gridData.push([xp.call(this._xaxis, data[i][0]), null]);
+ }
+ // if not a line series or if no nulls in data, push the converted point onto the array.
+ if (pdata[i] != null && pdata[i][0] != null && pdata[i][1] != null) {
+ this._prevGridData.push([xp.call(this._xaxis, pdata[i][0]), yp.call(this._yaxis, pdata[i][1])]);
+ }
+ // else if there is a null, preserve it.
+ else if (pdata[i] != null && pdata[i][0] == null) {
+ this._prevGridData.push([null, yp.call(this._yaxis, pdata[i][1])]);
+ }
+ else if (pdata[i] != null && pdata[i][0] != null && pdata[i][1] == null) {
+ this._prevGridData.push([xp.call(this._xaxis, pdata[i][0]), null]);
+ }
+ }
+
+ // don't do smoothing or bands on broken lines.
+ if (hasNull) {
+ this.renderer.smooth = false;
+ if (this._type === 'line') {
+ bands.show = false;
+ }
+ }
+
+ if (this._type === 'line' && bands.show) {
+ for (var i=0, l=bands.hiData.length; i<l; i++) {
+ this.renderer._hiBandGridData.push([xp.call(this._xaxis, bands.hiData[i][0]), yp.call(this._yaxis, bands.hiData[i][1])]);
+ }
+ for (var i=0, l=bands.lowData.length; i<l; i++) {
+ this.renderer._lowBandGridData.push([xp.call(this._xaxis, bands.lowData[i][0]), yp.call(this._yaxis, bands.lowData[i][1])]);
+ }
+ }
+
+ // calculate smoothed data if enough points and no nulls
+ if (this._type === 'line' && this.renderer.smooth && this.gridData.length > 2) {
+ var ret;
+ if (this.renderer.constrainSmoothing) {
+ ret = computeConstrainedSmoothedData.call(this, this.gridData);
+ this.renderer._smoothedData = ret[0];
+ this.renderer._smoothedPlotData = ret[1];
+
+ if (bands.show) {
+ ret = computeConstrainedSmoothedData.call(this, this.renderer._hiBandGridData);
+ this.renderer._hiBandSmoothedData = ret[0];
+ ret = computeConstrainedSmoothedData.call(this, this.renderer._lowBandGridData);
+ this.renderer._lowBandSmoothedData = ret[0];
+ }
+
+ ret = null;
+ }
+ else {
+ ret = computeHermiteSmoothedData.call(this, this.gridData);
+ this.renderer._smoothedData = ret[0];
+ this.renderer._smoothedPlotData = ret[1];
+
+ if (bands.show) {
+ ret = computeHermiteSmoothedData.call(this, this.renderer._hiBandGridData);
+ this.renderer._hiBandSmoothedData = ret[0];
+ ret = computeHermiteSmoothedData.call(this, this.renderer._lowBandGridData);
+ this.renderer._lowBandSmoothedData = ret[0];
+ }
+
+ ret = null;
+ }
+ }
+ };
+
+ // makeGridData
+ // converts any arbitrary data values to grid coordinates and
+ // returns them. This method exists so that plugins can use a series'
+ // linerenderer to generate grid data points without overwriting the
+ // grid data associated with that series.
+ // Called with scope of a series.
+ $.jqplot.LineRenderer.prototype.makeGridData = function(data, plot) {
+ // recalculate the grid data
+ var xp = this._xaxis.series_u2p;
+ var yp = this._yaxis.series_u2p;
+ var gd = [];
+ var pgd = [];
+ this.renderer._smoothedData = [];
+ this.renderer._smoothedPlotData = [];
+ this.renderer._hiBandGridData = [];
+ this.renderer._lowBandGridData = [];
+ this.renderer._hiBandSmoothedData = [];
+ this.renderer._lowBandSmoothedData = [];
+ var bands = this.renderer.bands;
+ var hasNull = false;
+ for (var i=0; i<data.length; i++) {
+ // if not a line series or if no nulls in data, push the converted point onto the array.
+ if (data[i][0] != null && data[i][1] != null) {
+ gd.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1])]);
+ }
+ // else if there is a null, preserve it.
+ else if (data[i][0] == null) {
+ hasNull = true;
+ gd.push([null, yp.call(this._yaxis, data[i][1])]);
+ }
+ else if (data[i][1] == null) {
+ hasNull = true;
+ gd.push([xp.call(this._xaxis, data[i][0]), null]);
+ }
+ }
+
+ // don't do smoothing or bands on broken lines.
+ if (hasNull) {
+ this.renderer.smooth = false;
+ if (this._type === 'line') {
+ bands.show = false;
+ }
+ }
+
+ if (this._type === 'line' && bands.show) {
+ for (var i=0, l=bands.hiData.length; i<l; i++) {
+ this.renderer._hiBandGridData.push([xp.call(this._xaxis, bands.hiData[i][0]), yp.call(this._yaxis, bands.hiData[i][1])]);
+ }
+ for (var i=0, l=bands.lowData.length; i<l; i++) {
+ this.renderer._lowBandGridData.push([xp.call(this._xaxis, bands.lowData[i][0]), yp.call(this._yaxis, bands.lowData[i][1])]);
+ }
+ }
+
+ if (this._type === 'line' && this.renderer.smooth && gd.length > 2) {
+ var ret;
+ if (this.renderer.constrainSmoothing) {
+ ret = computeConstrainedSmoothedData.call(this, gd);
+ this.renderer._smoothedData = ret[0];
+ this.renderer._smoothedPlotData = ret[1];
+
+ if (bands.show) {
+ ret = computeConstrainedSmoothedData.call(this, this.renderer._hiBandGridData);
+ this.renderer._hiBandSmoothedData = ret[0];
+ ret = computeConstrainedSmoothedData.call(this, this.renderer._lowBandGridData);
+ this.renderer._lowBandSmoothedData = ret[0];
+ }
+
+ ret = null;
+ }
+ else {
+ ret = computeHermiteSmoothedData.call(this, gd);
+ this.renderer._smoothedData = ret[0];
+ this.renderer._smoothedPlotData = ret[1];
+
+ if (bands.show) {
+ ret = computeHermiteSmoothedData.call(this, this.renderer._hiBandGridData);
+ this.renderer._hiBandSmoothedData = ret[0];
+ ret = computeHermiteSmoothedData.call(this, this.renderer._lowBandGridData);
+ this.renderer._lowBandSmoothedData = ret[0];
+ }
+
+ ret = null;
+ }
+ }
+ return gd;
+ };
+
+
+ // called within scope of series.
+ $.jqplot.LineRenderer.prototype.draw = function(ctx, gd, options, plot) {
+ var i;
+ // get a copy of the options, so we don't modify the original object.
+ var opts = $.extend(true, {}, options);
+ var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
+ var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
+ var fill = (opts.fill != undefined) ? opts.fill : this.fill;
+ var fillAndStroke = (opts.fillAndStroke != undefined) ? opts.fillAndStroke : this.fillAndStroke;
+ var xmin, ymin, xmax, ymax;
+ ctx.save();
+ if (gd.length) {
+ if (showLine) {
+ // if we fill, we'll have to add points to close the curve.
+ if (fill) {
+ if (this.fillToZero) {
+ // have to break line up into shapes at axis crossings
+ var negativeColor = this.negativeColor;
+ if (! this.useNegativeColors) {
+ negativeColor = opts.fillStyle;
+ }
+ var isnegative = false;
+ var posfs = opts.fillStyle;
+
+ // if stoking line as well as filling, get a copy of line data.
+ if (fillAndStroke) {
+ var fasgd = gd.slice(0);
+ }
+ // if not stacked, fill down to axis
+ if (this.index == 0 || !this._stack) {
+
+ var tempgd = [];
+ var pd = (this.renderer.smooth) ? this.renderer._smoothedPlotData : this._plotData;
+ this._areaPoints = [];
+ var pyzero = this._yaxis.series_u2p(this.fillToValue);
+ var pxzero = this._xaxis.series_u2p(this.fillToValue);
+
+ opts.closePath = true;
+
+ if (this.fillAxis == 'y') {
+ tempgd.push([gd[0][0], pyzero]);
+ this._areaPoints.push([gd[0][0], pyzero]);
+
+ for (var i=0; i<gd.length-1; i++) {
+ tempgd.push(gd[i]);
+ this._areaPoints.push(gd[i]);
+ // do we have an axis crossing?
+ if (pd[i][1] * pd[i+1][1] < 0) {
+ if (pd[i][1] < 0) {
+ isnegative = true;
+ opts.fillStyle = negativeColor;
+ }
+ else {
+ isnegative = false;
+ opts.fillStyle = posfs;
+ }
+
+ var xintercept = gd[i][0] + (gd[i+1][0] - gd[i][0]) * (pyzero-gd[i][1])/(gd[i+1][1] - gd[i][1]);
+ tempgd.push([xintercept, pyzero]);
+ this._areaPoints.push([xintercept, pyzero]);
+ // now draw this shape and shadow.
+ if (shadow) {
+ this.renderer.shadowRenderer.draw(ctx, tempgd, opts);
+ }
+ this.renderer.shapeRenderer.draw(ctx, tempgd, opts);
+ // now empty temp array and continue
+ tempgd = [[xintercept, pyzero]];
+ // this._areaPoints = [[xintercept, pyzero]];
+ }
+ }
+ if (pd[gd.length-1][1] < 0) {
+ isnegative = true;
+ opts.fillStyle = negativeColor;
+ }
+ else {
+ isnegative = false;
+ opts.fillStyle = posfs;
+ }
+ tempgd.push(gd[gd.length-1]);
+ this._areaPoints.push(gd[gd.length-1]);
+ tempgd.push([gd[gd.length-1][0], pyzero]);
+ this._areaPoints.push([gd[gd.length-1][0], pyzero]);
+ }
+ // now draw the last area.
+ if (shadow) {
+ this.renderer.shadowRenderer.draw(ctx, tempgd, opts);
+ }
+ this.renderer.shapeRenderer.draw(ctx, tempgd, opts);
+
+
+ // var gridymin = this._yaxis.series_u2p(0);
+ // // IE doesn't return new length on unshift
+ // gd.unshift([gd[0][0], gridymin]);
+ // len = gd.length;
+ // gd.push([gd[len - 1][0], gridymin]);
+ }
+ // if stacked, fill to line below
+ else {
+ var prev = this._prevGridData;
+ for (var i=prev.length; i>0; i--) {
+ gd.push(prev[i-1]);
+ // this._areaPoints.push(prev[i-1]);
+ }
+ if (shadow) {
+ this.renderer.shadowRenderer.draw(ctx, gd, opts);
+ }
+ this._areaPoints = gd;
+ this.renderer.shapeRenderer.draw(ctx, gd, opts);
+ }
+ }
+ /////////////////////////
+ // Not filled to zero
+ ////////////////////////
+ else {
+ // if stoking line as well as filling, get a copy of line data.
+ if (fillAndStroke) {
+ var fasgd = gd.slice(0);
+ }
+ // if not stacked, fill down to axis
+ if (this.index == 0 || !this._stack) {
+ // var gridymin = this._yaxis.series_u2p(this._yaxis.min) - this.gridBorderWidth / 2;
+ var gridymin = ctx.canvas.height;
+ // IE doesn't return new length on unshift
+ gd.unshift([gd[0][0], gridymin]);
+ var len = gd.length;
+ gd.push([gd[len - 1][0], gridymin]);
+ }
+ // if stacked, fill to line below
+ else {
+ var prev = this._prevGridData;
+ for (var i=prev.length; i>0; i--) {
+ gd.push(prev[i-1]);
+ }
+ }
+ this._areaPoints = gd;
+
+ if (shadow) {
+ this.renderer.shadowRenderer.draw(ctx, gd, opts);
+ }
+
+ this.renderer.shapeRenderer.draw(ctx, gd, opts);
+ }
+ if (fillAndStroke) {
+ var fasopts = $.extend(true, {}, opts, {fill:false, closePath:false});
+ this.renderer.shapeRenderer.draw(ctx, fasgd, fasopts);
+ //////////
+ // TODO: figure out some way to do shadows nicely
+ // if (shadow) {
+ // this.renderer.shadowRenderer.draw(ctx, fasgd, fasopts);
+ // }
+ // now draw the markers
+ if (this.markerRenderer.show) {
+ if (this.renderer.smooth) {
+ fasgd = this.gridData;
+ }
+ for (i=0; i<fasgd.length; i++) {
+ this.markerRenderer.draw(fasgd[i][0], fasgd[i][1], ctx, opts.markerOptions);
+ }
+ }
+ }
+ }
+ else {
+
+ if (this.renderer.bands.show) {
+ var bdat;
+ var bopts = $.extend(true, {}, opts);
+ if (this.renderer.bands.showLines) {
+ bdat = (this.renderer.smooth) ? this.renderer._hiBandSmoothedData : this.renderer._hiBandGridData;
+ this.renderer.shapeRenderer.draw(ctx, bdat, opts);
+ bdat = (this.renderer.smooth) ? this.renderer._lowBandSmoothedData : this.renderer._lowBandGridData;
+ this.renderer.shapeRenderer.draw(ctx, bdat, bopts);
+ }
+
+ if (this.renderer.bands.fill) {
+ if (this.renderer.smooth) {
+ bdat = this.renderer._hiBandSmoothedData.concat(this.renderer._lowBandSmoothedData.reverse());
+ }
+ else {
+ bdat = this.renderer._hiBandGridData.concat(this.renderer._lowBandGridData.reverse());
+ }
+ this._areaPoints = bdat;
+ bopts.closePath = true;
+ bopts.fill = true;
+ bopts.fillStyle = this.renderer.bands.fillColor;
+ this.renderer.shapeRenderer.draw(ctx, bdat, bopts);
+ }
+ }
+
+ if (shadow) {
+ this.renderer.shadowRenderer.draw(ctx, gd, opts);
+ }
+
+ this.renderer.shapeRenderer.draw(ctx, gd, opts);
+ }
+ }
+ // calculate the bounding box
+ var xmin = xmax = ymin = ymax = null;
+ for (i=0; i<this._areaPoints.length; i++) {
+ var p = this._areaPoints[i];
+ if (xmin > p[0] || xmin == null) {
+ xmin = p[0];
+ }
+ if (ymax < p[1] || ymax == null) {
+ ymax = p[1];
+ }
+ if (xmax < p[0] || xmax == null) {
+ xmax = p[0];
+ }
+ if (ymin > p[1] || ymin == null) {
+ ymin = p[1];
+ }
+ }
+
+ if (this.type === 'line' && this.renderer.bands.show) {
+ ymax = this._yaxis.series_u2p(this.renderer.bands._min);
+ ymin = this._yaxis.series_u2p(this.renderer.bands._max);
+ }
+
+ this._boundingBox = [[xmin, ymax], [xmax, ymin]];
+
+ // now draw the markers
+ if (this.markerRenderer.show && !fill) {
+ if (this.renderer.smooth) {
+ gd = this.gridData;
+ }
+ for (i=0; i<gd.length; i++) {
+ if (gd[i][0] != null && gd[i][1] != null) {
+ this.markerRenderer.draw(gd[i][0], gd[i][1], ctx, opts.markerOptions);
+ }
+ }
+ }
+ }
+
+ ctx.restore();
+ };
+
+ $.jqplot.LineRenderer.prototype.drawShadow = function(ctx, gd, options) {
+ // This is a no-op, shadows drawn with lines.
+ };
+
+ // called with scope of plot.
+ // make sure to not leave anything highlighted.
+ function postInit(target, data, options) {
+ for (var i=0; i<this.series.length; i++) {
+ if (this.series[i].renderer.constructor == $.jqplot.LineRenderer) {
+ // don't allow mouseover and mousedown at same time.
+ if (this.series[i].highlightMouseOver) {
+ this.series[i].highlightMouseDown = false;
+ }
+ }
+ }
+ }
+
+ // called within context of plot
+ // create a canvas which we can draw on.
+ // insert it before the eventCanvas, so eventCanvas will still capture events.
+ function postPlotDraw() {
+ // Memory Leaks patch
+ if (this.plugins.lineRenderer && this.plugins.lineRenderer.highlightCanvas) {
+ this.plugins.lineRenderer.highlightCanvas.resetCanvas();
+ this.plugins.lineRenderer.highlightCanvas = null;
+ }
+
+ this.plugins.lineRenderer.highlightedSeriesIndex = null;
+ this.plugins.lineRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
+
+ this.eventCanvas._elem.before(this.plugins.lineRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-lineRenderer-highlight-canvas', this._plotDimensions, this));
+ this.plugins.lineRenderer.highlightCanvas.setContext();
+ this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); });
+ }
+
+ function highlight (plot, sidx, pidx, points) {
+ var s = plot.series[sidx];
+ var canvas = plot.plugins.lineRenderer.highlightCanvas;
+ canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height);
+ s._highlightedPoint = pidx;
+ plot.plugins.lineRenderer.highlightedSeriesIndex = sidx;
+ var opts = {fillStyle: s.highlightColor};
+ if (s.type === 'line' && s.renderer.bands.show) {
+ opts.fill = true;
+ opts.closePath = true;
+ }
+ s.renderer.shapeRenderer.draw(canvas._ctx, points, opts);
+ canvas = null;
+ }
+
+ function unhighlight (plot) {
+ var canvas = plot.plugins.lineRenderer.highlightCanvas;
+ canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
+ for (var i=0; i<plot.series.length; i++) {
+ plot.series[i]._highlightedPoint = null;
+ }
+ plot.plugins.lineRenderer.highlightedSeriesIndex = null;
+ plot.target.trigger('jqplotDataUnhighlight');
+ canvas = null;
+ }
+
+
+ function handleMove(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ var evt1 = jQuery.Event('jqplotDataMouseOver');
+ evt1.pageX = ev.pageX;
+ evt1.pageY = ev.pageY;
+ plot.target.trigger(evt1, ins);
+ if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.lineRenderer.highlightedSeriesIndex)) {
+ var evt = jQuery.Event('jqplotDataHighlight');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points);
+ }
+ }
+ else if (neighbor == null) {
+ unhighlight (plot);
+ }
+ }
+
+ function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.lineRenderer.highlightedSeriesIndex)) {
+ var evt = jQuery.Event('jqplotDataHighlight');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points);
+ }
+ }
+ else if (neighbor == null) {
+ unhighlight (plot);
+ }
+ }
+
+ function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
+ var idx = plot.plugins.lineRenderer.highlightedSeriesIndex;
+ if (idx != null && plot.series[idx].highlightMouseDown) {
+ unhighlight(plot);
+ }
+ }
+
+ function handleClick(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ var evt = jQuery.Event('jqplotDataClick');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ }
+ }
+
+ function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ var idx = plot.plugins.lineRenderer.highlightedSeriesIndex;
+ if (idx != null && plot.series[idx].highlightMouseDown) {
+ unhighlight(plot);
+ }
+ var evt = jQuery.Event('jqplotDataRightClick');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ }
+ }
+
+
+ // class: $.jqplot.LinearAxisRenderer
+ // The default jqPlot axis renderer, creating a numeric axis.
+ $.jqplot.LinearAxisRenderer = function() {
+ };
+
+ // called with scope of axis object.
+ $.jqplot.LinearAxisRenderer.prototype.init = function(options){
+ // prop: breakPoints
+ // EXPERIMENTAL!! Use at your own risk!
+ // Works only with linear axes and the default tick renderer.
+ // Array of [start, stop] points to create a broken axis.
+ // Broken axes have a "jump" in them, which is an immediate
+ // transition from a smaller value to a larger value.
+ // Currently, axis ticks MUST be manually assigned if using breakPoints
+ // by using the axis ticks array option.
+ this.breakPoints = null;
+ // prop: breakTickLabel
+ // Label to use at the axis break if breakPoints are specified.
+ this.breakTickLabel = "&asymp;";
+ // prop: drawBaseline
+ // True to draw the axis baseline.
+ this.drawBaseline = true;
+ // prop: baselineWidth
+ // width of the baseline in pixels.
+ this.baselineWidth = null;
+ // prop: baselineColor
+ // CSS color spec for the baseline.
+ this.baselineColor = null;
+ // prop: forceTickAt0
+ // This will ensure that there is always a tick mark at 0.
+ // If data range is strictly positive or negative,
+ // this will force 0 to be inside the axis bounds unless
+ // the appropriate axis pad (pad, padMin or padMax) is set
+ // to 0, then this will force an axis min or max value at 0.
+ // This has know effect when any of the following options
+ // are set: autoscale, min, max, numberTicks or tickInterval.
+ this.forceTickAt0 = false;
+ // prop: forceTickAt100
+ // This will ensure that there is always a tick mark at 100.
+ // If data range is strictly above or below 100,
+ // this will force 100 to be inside the axis bounds unless
+ // the appropriate axis pad (pad, padMin or padMax) is set
+ // to 0, then this will force an axis min or max value at 100.
+ // This has know effect when any of the following options
+ // are set: autoscale, min, max, numberTicks or tickInterval.
+ this.forceTickAt100 = false;
+ // prop: tickInset
+ // Controls the amount to inset the first and last ticks from
+ // the edges of the grid, in multiples of the tick interval.
+ // 0 is no inset, 0.5 is one half a tick interval, 1 is a full
+ // tick interval, etc.
+ this.tickInset = 0;
+ // prop: minorTicks
+ // Number of ticks to add between "major" ticks.
+ // Major ticks are ticks supplied by user or auto computed.
+ // Minor ticks cannot be created by user.
+ this.minorTicks = 0;
+ // prop: alignTicks
+ // true to align tick marks across opposed axes
+ // such as from the y2axis to yaxis.
+ this.alignTicks = false;
+ this._autoFormatString = '';
+ this._overrideFormatString = false;
+ this._scalefact = 1.0;
+ $.extend(true, this, options);
+ if (this.breakPoints) {
+ if (!$.isArray(this.breakPoints)) {
+ this.breakPoints = null;
+ }
+ else if (this.breakPoints.length < 2 || this.breakPoints[1] <= this.breakPoints[0]) {
+ this.breakPoints = null;
+ }
+ }
+ if (this.numberTicks != null && this.numberTicks < 2) {
+ this.numberTicks = 2;
+ }
+ this.resetDataBounds();
+ };
+
+ // called with scope of axis
+ $.jqplot.LinearAxisRenderer.prototype.draw = function(ctx, plot) {
+ if (this.show) {
+ // populate the axis label and value properties.
+ // createTicks is a method on the renderer, but
+ // call it within the scope of the axis.
+ this.renderer.createTicks.call(this, plot);
+ // fill a div with axes labels in the right direction.
+ // Need to pregenerate each axis to get it's bounds and
+ // position it and the labels correctly on the plot.
+ var dim=0;
+ var temp;
+ // Added for theming.
+ if (this._elem) {
+ // Memory Leaks patch
+ //this._elem.empty();
+ this._elem.emptyForce();
+ this._elem = null;
+ }
+
+ this._elem = $(document.createElement('div'));
+ this._elem.addClass('jqplot-axis jqplot-'+this.name);
+ this._elem.css('position', 'absolute');
+
+
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ this._elem.width(this._plotDimensions.width);
+ }
+ else {
+ this._elem.height(this._plotDimensions.height);
+ }
+
+ // create a _label object.
+ this.labelOptions.axis = this.name;
+ this._label = new this.labelRenderer(this.labelOptions);
+ if (this._label.show) {
+ var elem = this._label.draw(ctx, plot);
+ elem.appendTo(this._elem);
+ elem = null;
+ }
+
+ var t = this._ticks;
+ var tick;
+ for (var i=0; i<t.length; i++) {
+ tick = t[i];
+ if (tick.show && tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
+ this._elem.append(tick.draw(ctx, plot));
+ }
+ }
+ tick = null;
+ t = null;
+ }
+ return this._elem;
+ };
+
+ // called with scope of an axis
+ $.jqplot.LinearAxisRenderer.prototype.reset = function() {
+ this.min = this._options.min;
+ this.max = this._options.max;
+ this.tickInterval = this._options.tickInterval;
+ this.numberTicks = this._options.numberTicks;
+ this._autoFormatString = '';
+ if (this._overrideFormatString && this.tickOptions && this.tickOptions.formatString) {
+ this.tickOptions.formatString = '';
+ }
+
+ // this._ticks = this.__ticks;
+ };
+
+ // called with scope of axis
+ $.jqplot.LinearAxisRenderer.prototype.set = function() {
+ var dim = 0;
+ var temp;
+ var w = 0;
+ var h = 0;
+ var lshow = (this._label == null) ? false : this._label.show;
+ if (this.show) {
+ var t = this._ticks;
+ var tick;
+ for (var i=0; i<t.length; i++) {
+ tick = t[i];
+ if (!tick._breakTick && tick.show && tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ temp = tick._elem.outerHeight(true);
+ }
+ else {
+ temp = tick._elem.outerWidth(true);
+ }
+ if (temp > dim) {
+ dim = temp;
+ }
+ }
+ }
+ tick = null;
+ t = null;
+
+ if (lshow) {
+ w = this._label._elem.outerWidth(true);
+ h = this._label._elem.outerHeight(true);
+ }
+ if (this.name == 'xaxis') {
+ dim = dim + h;
+ this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'});
+ }
+ else if (this.name == 'x2axis') {
+ dim = dim + h;
+ this._elem.css({'height':dim+'px', left:'0px', top:'0px'});
+ }
+ else if (this.name == 'yaxis') {
+ dim = dim + w;
+ this._elem.css({'width':dim+'px', left:'0px', top:'0px'});
+ if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
+ this._label._elem.css('width', w+'px');
+ }
+ }
+ else {
+ dim = dim + w;
+ this._elem.css({'width':dim+'px', right:'0px', top:'0px'});
+ if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
+ this._label._elem.css('width', w+'px');
+ }
+ }
+ }
+ };
+
+ // called with scope of axis
+ $.jqplot.LinearAxisRenderer.prototype.createTicks = function(plot) {
+ // we're are operating on an axis here
+ var ticks = this._ticks;
+ var userTicks = this.ticks;
+ var name = this.name;
+ // databounds were set on axis initialization.
+ var db = this._dataBounds;
+ var dim = (this.name.charAt(0) === 'x') ? this._plotDimensions.width : this._plotDimensions.height;
+ var interval;
+ var min, max;
+ var pos1, pos2;
+ var tt, i;
+ // get a copy of user's settings for min/max.
+ var userMin = this.min;
+ var userMax = this.max;
+ var userNT = this.numberTicks;
+ var userTI = this.tickInterval;
+
+ var threshold = 30;
+ this._scalefact = (Math.max(dim, threshold+1) - threshold)/300.0;
+
+ // if we already have ticks, use them.
+ // ticks must be in order of increasing value.
+
+ if (userTicks.length) {
+ // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed
+ for (i=0; i<userTicks.length; i++){
+ var ut = userTicks[i];
+ var t = new this.tickRenderer(this.tickOptions);
+ if ($.isArray(ut)) {
+ t.value = ut[0];
+ if (this.breakPoints) {
+ if (ut[0] == this.breakPoints[0]) {
+ t.label = this.breakTickLabel;
+ t._breakTick = true;
+ t.showGridline = false;
+ t.showMark = false;
+ }
+ else if (ut[0] > this.breakPoints[0] && ut[0] <= this.breakPoints[1]) {
+ t.show = false;
+ t.showGridline = false;
+ t.label = ut[1];
+ }
+ else {
+ t.label = ut[1];
+ }
+ }
+ else {
+ t.label = ut[1];
+ }
+ t.setTick(ut[0], this.name);
+ this._ticks.push(t);
+ }
+
+ else if ($.isPlainObject(ut)) {
+ $.extend(true, t, ut);
+ t.axis = this.name;
+ this._ticks.push(t);
+ }
+
+ else {
+ t.value = ut;
+ if (this.breakPoints) {
+ if (ut == this.breakPoints[0]) {
+ t.label = this.breakTickLabel;
+ t._breakTick = true;
+ t.showGridline = false;
+ t.showMark = false;
+ }
+ else if (ut > this.breakPoints[0] && ut <= this.breakPoints[1]) {
+ t.show = false;
+ t.showGridline = false;
+ }
+ }
+ t.setTick(ut, this.name);
+ this._ticks.push(t);
+ }
+ }
+ this.numberTicks = userTicks.length;
+ this.min = this._ticks[0].value;
+ this.max = this._ticks[this.numberTicks-1].value;
+ this.tickInterval = (this.max - this.min) / (this.numberTicks - 1);
+ }
+
+ // we don't have any ticks yet, let's make some!
+ else {
+ if (name == 'xaxis' || name == 'x2axis') {
+ dim = this._plotDimensions.width;
+ }
+ else {
+ dim = this._plotDimensions.height;
+ }
+
+ var _numberTicks = this.numberTicks;
+
+ // if aligning this axis, use number of ticks from previous axis.
+ // Do I need to reset somehow if alignTicks is changed and then graph is replotted??
+ if (this.alignTicks) {
+ if (this.name === 'x2axis' && plot.axes.xaxis.show) {
+ _numberTicks = plot.axes.xaxis.numberTicks;
+ }
+ else if (this.name.charAt(0) === 'y' && this.name !== 'yaxis' && this.name !== 'yMidAxis' && plot.axes.yaxis.show) {
+ _numberTicks = plot.axes.yaxis.numberTicks;
+ }
+ }
+
+ min = ((this.min != null) ? this.min : db.min);
+ max = ((this.max != null) ? this.max : db.max);
+
+ var range = max - min;
+ var rmin, rmax;
+ var temp;
+
+ if (this.tickOptions == null || !this.tickOptions.formatString) {
+ this._overrideFormatString = true;
+ }
+
+ // Doing complete autoscaling
+ if (this.min == null || this.max == null && this.tickInterval == null && !this.autoscale) {
+ // Check if user must have tick at 0 or 100 and ensure they are in range.
+ // The autoscaling algorithm will always place ticks at 0 and 100 if they are in range.
+ if (this.forceTickAt0) {
+ if (min > 0) {
+ min = 0;
+ }
+ if (max < 0) {
+ max = 0;
+ }
+ }
+
+ if (this.forceTickAt100) {
+ if (min > 100) {
+ min = 100;
+ }
+ if (max < 100) {
+ max = 100;
+ }
+ }
+
+ var keepMin = false,
+ keepMax = false;
+
+ if (this.min != null) {
+ keepMin = true;
+ }
+
+ else if (this.max != null) {
+ keepMax = true;
+ }
+
+ // var threshold = 30;
+ // var tdim = Math.max(dim, threshold+1);
+ // this._scalefact = (tdim-threshold)/300.0;
+ var ret = $.jqplot.LinearTickGenerator(min, max, this._scalefact, _numberTicks, keepMin, keepMax);
+ // calculate a padded max and min, points should be less than these
+ // so that they aren't too close to the edges of the plot.
+ // User can adjust how much padding is allowed with pad, padMin and PadMax options.
+ // If min or max is set, don't pad that end of axis.
+ var tumin = (this.min != null) ? min : min + range*(this.padMin - 1);
+ var tumax = (this.max != null) ? max : max - range*(this.padMax - 1);
+
+ // if they're equal, we shouldn't have to do anything, right?
+ // if (min <=tumin || max >= tumax) {
+ if (min <tumin || max > tumax) {
+ tumin = (this.min != null) ? min : min - range*(this.padMin - 1);
+ tumax = (this.max != null) ? max : max + range*(this.padMax - 1);
+ ret = $.jqplot.LinearTickGenerator(tumin, tumax, this._scalefact, _numberTicks, keepMin, keepMax);
+ }
+
+ this.min = ret[0];
+ this.max = ret[1];
+ // if numberTicks specified, it should return the same.
+ this.numberTicks = ret[2];
+ this._autoFormatString = ret[3];
+ this.tickInterval = ret[4];
+ }
+
+ // User has specified some axis scale related option, can use auto algorithm
+ else {
+
+ // if min and max are same, space them out a bit
+ if (min == max) {
+ var adj = 0.05;
+ if (min > 0) {
+ adj = Math.max(Math.log(min)/Math.LN10, 0.05);
+ }
+ min -= adj;
+ max += adj;
+ }
+
+ // autoscale. Can't autoscale if min or max is supplied.
+ // Will use numberTicks and tickInterval if supplied. Ticks
+ // across multiple axes may not line up depending on how
+ // bars are to be plotted.
+ if (this.autoscale && this.min == null && this.max == null) {
+ var rrange, ti, margin;
+ var forceMinZero = false;
+ var forceZeroLine = false;
+ var intervals = {min:null, max:null, average:null, stddev:null};
+ // if any series are bars, or if any are fill to zero, and if this
+ // is the axis to fill toward, check to see if we can start axis at zero.
+ for (var i=0; i<this._series.length; i++) {
+ var s = this._series[i];
+ var faname = (s.fillAxis == 'x') ? s._xaxis.name : s._yaxis.name;
+ // check to see if this is the fill axis
+ if (this.name == faname) {
+ var vals = s._plotValues[s.fillAxis];
+ var vmin = vals[0];
+ var vmax = vals[0];
+ for (var j=1; j<vals.length; j++) {
+ if (vals[j] < vmin) {
+ vmin = vals[j];
+ }
+ else if (vals[j] > vmax) {
+ vmax = vals[j];
+ }
+ }
+ var dp = (vmax - vmin) / vmax;
+ // is this sries a bar?
+ if (s.renderer.constructor == $.jqplot.BarRenderer) {
+ // if no negative values and could also check range.
+ if (vmin >= 0 && (s.fillToZero || dp > 0.1)) {
+ forceMinZero = true;
+ }
+ else {
+ forceMinZero = false;
+ if (s.fill && s.fillToZero && vmin < 0 && vmax > 0) {
+ forceZeroLine = true;
+ }
+ else {
+ forceZeroLine = false;
+ }
+ }
+ }
+
+ // if not a bar and filling, use appropriate method.
+ else if (s.fill) {
+ if (vmin >= 0 && (s.fillToZero || dp > 0.1)) {
+ forceMinZero = true;
+ }
+ else if (vmin < 0 && vmax > 0 && s.fillToZero) {
+ forceMinZero = false;
+ forceZeroLine = true;
+ }
+ else {
+ forceMinZero = false;
+ forceZeroLine = false;
+ }
+ }
+
+ // if not a bar and not filling, only change existing state
+ // if it doesn't make sense
+ else if (vmin < 0) {
+ forceMinZero = false;
+ }
+ }
+ }
+
+ // check if we need make axis min at 0.
+ if (forceMinZero) {
+ // compute number of ticks
+ this.numberTicks = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing);
+ this.min = 0;
+ userMin = 0;
+ // what order is this range?
+ // what tick interval does that give us?
+ ti = max/(this.numberTicks-1);
+ temp = Math.pow(10, Math.abs(Math.floor(Math.log(ti)/Math.LN10)));
+ if (ti/temp == parseInt(ti/temp, 10)) {
+ ti += temp;
+ }
+ this.tickInterval = Math.ceil(ti/temp) * temp;
+ this.max = this.tickInterval * (this.numberTicks - 1);
+ }
+
+ // check if we need to make sure there is a tick at 0.
+ else if (forceZeroLine) {
+ // compute number of ticks
+ this.numberTicks = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing);
+ var ntmin = Math.ceil(Math.abs(min)/range*(this.numberTicks-1));
+ var ntmax = this.numberTicks - 1 - ntmin;
+ ti = Math.max(Math.abs(min/ntmin), Math.abs(max/ntmax));
+ temp = Math.pow(10, Math.abs(Math.floor(Math.log(ti)/Math.LN10)));
+ this.tickInterval = Math.ceil(ti/temp) * temp;
+ this.max = this.tickInterval * ntmax;
+ this.min = -this.tickInterval * ntmin;
+ }
+
+ // if nothing else, do autoscaling which will try to line up ticks across axes.
+ else {
+ if (this.numberTicks == null){
+ if (this.tickInterval) {
+ this.numberTicks = 3 + Math.ceil(range / this.tickInterval);
+ }
+ else {
+ this.numberTicks = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing);
+ }
+ }
+
+ if (this.tickInterval == null) {
+ // get a tick interval
+ ti = range/(this.numberTicks - 1);
+
+ if (ti < 1) {
+ temp = Math.pow(10, Math.abs(Math.floor(Math.log(ti)/Math.LN10)));
+ }
+ else {
+ temp = 1;
+ }
+ this.tickInterval = Math.ceil(ti*temp*this.pad)/temp;
+ }
+ else {
+ temp = 1 / this.tickInterval;
+ }
+
+ // try to compute a nicer, more even tick interval
+ // temp = Math.pow(10, Math.floor(Math.log(ti)/Math.LN10));
+ // this.tickInterval = Math.ceil(ti/temp) * temp;
+ rrange = this.tickInterval * (this.numberTicks - 1);
+ margin = (rrange - range)/2;
+
+ if (this.min == null) {
+ this.min = Math.floor(temp*(min-margin))/temp;
+ }
+ if (this.max == null) {
+ this.max = this.min + rrange;
+ }
+ }
+
+ // Compute a somewhat decent format string if it is needed.
+ // get precision of interval and determine a format string.
+ var sf = $.jqplot.getSignificantFigures(this.tickInterval);
+
+ var fstr;
+
+ // if we have only a whole number, use integer formatting
+ if (sf.digitsLeft >= sf.significantDigits) {
+ fstr = '%d';
+ }
+
+ else {
+ var temp = Math.max(0, 5 - sf.digitsLeft);
+ temp = Math.min(temp, sf.digitsRight);
+ fstr = '%.'+ temp + 'f';
+ }
+
+ this._autoFormatString = fstr;
+ }
+
+ // Use the default algorithm which pads each axis to make the chart
+ // centered nicely on the grid.
+ else {
+
+ rmin = (this.min != null) ? this.min : min - range*(this.padMin - 1);
+ rmax = (this.max != null) ? this.max : max + range*(this.padMax - 1);
+ range = rmax - rmin;
+
+ if (this.numberTicks == null){
+ // if tickInterval is specified by user, we will ignore computed maximum.
+ // max will be equal or greater to fit even # of ticks.
+ if (this.tickInterval != null) {
+ this.numberTicks = Math.ceil((rmax - rmin)/this.tickInterval)+1;
+ }
+ else if (dim > 100) {
+ this.numberTicks = parseInt(3+(dim-100)/75, 10);
+ }
+ else {
+ this.numberTicks = 2;
+ }
+ }
+
+ if (this.tickInterval == null) {
+ this.tickInterval = range / (this.numberTicks-1);
+ }
+
+ if (this.max == null) {
+ rmax = rmin + this.tickInterval*(this.numberTicks - 1);
+ }
+ if (this.min == null) {
+ rmin = rmax - this.tickInterval*(this.numberTicks - 1);
+ }
+
+ // get precision of interval and determine a format string.
+ var sf = $.jqplot.getSignificantFigures(this.tickInterval);
+
+ var fstr;
+
+ // if we have only a whole number, use integer formatting
+ if (sf.digitsLeft >= sf.significantDigits) {
+ fstr = '%d';
+ }
+
+ else {
+ var temp = Math.max(0, 5 - sf.digitsLeft);
+ temp = Math.min(temp, sf.digitsRight);
+ fstr = '%.'+ temp + 'f';
+ }
+
+
+ this._autoFormatString = fstr;
+
+ this.min = rmin;
+ this.max = rmax;
+ }
+
+ if (this.renderer.constructor == $.jqplot.LinearAxisRenderer && this._autoFormatString == '') {
+ // fix for misleading tick display with small range and low precision.
+ range = this.max - this.min;
+ // figure out precision
+ var temptick = new this.tickRenderer(this.tickOptions);
+ // use the tick formatString or, the default.
+ var fs = temptick.formatString || $.jqplot.config.defaultTickFormatString;
+ var fs = fs.match($.jqplot.sprintf.regex)[0];
+ var precision = 0;
+ if (fs) {
+ if (fs.search(/[fFeEgGpP]/) > -1) {
+ var m = fs.match(/\%\.(\d{0,})?[eEfFgGpP]/);
+ if (m) {
+ precision = parseInt(m[1], 10);
+ }
+ else {
+ precision = 6;
+ }
+ }
+ else if (fs.search(/[di]/) > -1) {
+ precision = 0;
+ }
+ // fact will be <= 1;
+ var fact = Math.pow(10, -precision);
+ if (this.tickInterval < fact) {
+ // need to correct underrange
+ if (userNT == null && userTI == null) {
+ this.tickInterval = fact;
+ if (userMax == null && userMin == null) {
+ // this.min = Math.floor((this._dataBounds.min - this.tickInterval)/fact) * fact;
+ this.min = Math.floor(this._dataBounds.min/fact) * fact;
+ if (this.min == this._dataBounds.min) {
+ this.min = this._dataBounds.min - this.tickInterval;
+ }
+ // this.max = Math.ceil((this._dataBounds.max + this.tickInterval)/fact) * fact;
+ this.max = Math.ceil(this._dataBounds.max/fact) * fact;
+ if (this.max == this._dataBounds.max) {
+ this.max = this._dataBounds.max + this.tickInterval;
+ }
+ var n = (this.max - this.min)/this.tickInterval;
+ n = n.toFixed(11);
+ n = Math.ceil(n);
+ this.numberTicks = n + 1;
+ }
+ else if (userMax == null) {
+ // add one tick for top of range.
+ var n = (this._dataBounds.max - this.min) / this.tickInterval;
+ n = n.toFixed(11);
+ this.numberTicks = Math.ceil(n) + 2;
+ this.max = this.min + this.tickInterval * (this.numberTicks-1);
+ }
+ else if (userMin == null) {
+ // add one tick for bottom of range.
+ var n = (this.max - this._dataBounds.min) / this.tickInterval;
+ n = n.toFixed(11);
+ this.numberTicks = Math.ceil(n) + 2;
+ this.min = this.max - this.tickInterval * (this.numberTicks-1);
+ }
+ else {
+ // calculate a number of ticks so max is within axis scale
+ this.numberTicks = Math.ceil((userMax - userMin)/this.tickInterval) + 1;
+ // if user's min and max don't fit evenly in ticks, adjust.
+ // This takes care of cases such as user min set to 0, max set to 3.5 but tick
+ // format string set to %d (integer ticks)
+ this.min = Math.floor(userMin*Math.pow(10, precision))/Math.pow(10, precision);
+ this.max = Math.ceil(userMax*Math.pow(10, precision))/Math.pow(10, precision);
+ // this.max = this.min + this.tickInterval*(this.numberTicks-1);
+ this.numberTicks = Math.ceil((this.max - this.min)/this.tickInterval) + 1;
+ }
+ }
+ }
+ }
+ }
+
+ }
+
+ if (this._overrideFormatString && this._autoFormatString != '') {
+ this.tickOptions = this.tickOptions || {};
+ this.tickOptions.formatString = this._autoFormatString;
+ }
+
+ var t, to;
+ for (var i=0; i<this.numberTicks; i++){
+ tt = this.min + i * this.tickInterval;
+ t = new this.tickRenderer(this.tickOptions);
+ // var t = new $.jqplot.AxisTickRenderer(this.tickOptions);
+
+ t.setTick(tt, this.name);
+ this._ticks.push(t);
+
+ if (i < this.numberTicks - 1) {
+ for (var j=0; j<this.minorTicks; j++) {
+ tt += this.tickInterval/(this.minorTicks+1);
+ to = $.extend(true, {}, this.tickOptions, {name:this.name, value:tt, label:'', isMinorTick:true});
+ t = new this.tickRenderer(to);
+ this._ticks.push(t);
+ }
+ }
+ t = null;
+ }
+ }
+
+ if (this.tickInset) {
+ this.min = this.min - this.tickInset * this.tickInterval;
+ this.max = this.max + this.tickInset * this.tickInterval;
+ }
+
+ ticks = null;
+ };
+
+ // Used to reset just the values of the ticks and then repack, which will
+ // recalculate the positioning functions. It is assuemd that the
+ // number of ticks is the same and the values of the new array are at the
+ // proper interval.
+ // This method needs to be called with the scope of an axis object, like:
+ //
+ // > plot.axes.yaxis.renderer.resetTickValues.call(plot.axes.yaxis, yarr);
+ //
+ $.jqplot.LinearAxisRenderer.prototype.resetTickValues = function(opts) {
+ if ($.isArray(opts) && opts.length == this._ticks.length) {
+ var t;
+ for (var i=0; i<opts.length; i++) {
+ t = this._ticks[i];
+ t.value = opts[i];
+ t.label = t.formatter(t.formatString, opts[i]);
+ t.label = t.prefix + t.label;
+ t._elem.html(t.label);
+ }
+ t = null;
+ this.min = $.jqplot.arrayMin(opts);
+ this.max = $.jqplot.arrayMax(opts);
+ this.pack();
+ }
+ // Not implemented yet.
+ // else if ($.isPlainObject(opts)) {
+ //
+ // }
+ };
+
+ // called with scope of axis
+ $.jqplot.LinearAxisRenderer.prototype.pack = function(pos, offsets) {
+ // Add defaults for repacking from resetTickValues function.
+ pos = pos || {};
+ offsets = offsets || this._offsets;
+
+ var ticks = this._ticks;
+ var max = this.max;
+ var min = this.min;
+ var offmax = offsets.max;
+ var offmin = offsets.min;
+ var lshow = (this._label == null) ? false : this._label.show;
+
+ for (var p in pos) {
+ this._elem.css(p, pos[p]);
+ }
+
+ this._offsets = offsets;
+ // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left.
+ var pixellength = offmax - offmin;
+ var unitlength = max - min;
+
+ // point to unit and unit to point conversions references to Plot DOM element top left corner.
+ if (this.breakPoints) {
+ unitlength = unitlength - this.breakPoints[1] + this.breakPoints[0];
+
+ this.p2u = function(p){
+ return (p - offmin) * unitlength / pixellength + min;
+ };
+
+ this.u2p = function(u){
+ if (u > this.breakPoints[0] && u < this.breakPoints[1]){
+ u = this.breakPoints[0];
+ }
+ if (u <= this.breakPoints[0]) {
+ return (u - min) * pixellength / unitlength + offmin;
+ }
+ else {
+ return (u - this.breakPoints[1] + this.breakPoints[0] - min) * pixellength / unitlength + offmin;
+ }
+ };
+
+ if (this.name.charAt(0) == 'x'){
+ this.series_u2p = function(u){
+ if (u > this.breakPoints[0] && u < this.breakPoints[1]){
+ u = this.breakPoints[0];
+ }
+ if (u <= this.breakPoints[0]) {
+ return (u - min) * pixellength / unitlength;
+ }
+ else {
+ return (u - this.breakPoints[1] + this.breakPoints[0] - min) * pixellength / unitlength;
+ }
+ };
+ this.series_p2u = function(p){
+ return p * unitlength / pixellength + min;
+ };
+ }
+
+ else {
+ this.series_u2p = function(u){
+ if (u > this.breakPoints[0] && u < this.breakPoints[1]){
+ u = this.breakPoints[0];
+ }
+ if (u >= this.breakPoints[1]) {
+ return (u - max) * pixellength / unitlength;
+ }
+ else {
+ return (u + this.breakPoints[1] - this.breakPoints[0] - max) * pixellength / unitlength;
+ }
+ };
+ this.series_p2u = function(p){
+ return p * unitlength / pixellength + max;
+ };
+ }
+ }
+ else {
+ this.p2u = function(p){
+ return (p - offmin) * unitlength / pixellength + min;
+ };
+
+ this.u2p = function(u){
+ return (u - min) * pixellength / unitlength + offmin;
+ };
+
+ if (this.name == 'xaxis' || this.name == 'x2axis'){
+ this.series_u2p = function(u){
+ return (u - min) * pixellength / unitlength;
+ };
+ this.series_p2u = function(p){
+ return p * unitlength / pixellength + min;
+ };
+ }
+
+ else {
+ this.series_u2p = function(u){
+ return (u - max) * pixellength / unitlength;
+ };
+ this.series_p2u = function(p){
+ return p * unitlength / pixellength + max;
+ };
+ }
+ }
+
+ if (this.show) {
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ for (var i=0; i<ticks.length; i++) {
+ var t = ticks[i];
+ if (t.show && t.showLabel) {
+ var shim;
+
+ if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
+ // will need to adjust auto positioning based on which axis this is.
+ var temp = (this.name == 'xaxis') ? 1 : -1;
+ switch (t.labelPosition) {
+ case 'auto':
+ // position at end
+ if (temp * t.angle < 0) {
+ shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ }
+ // position at start
+ else {
+ shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
+ }
+ break;
+ case 'end':
+ shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ break;
+ case 'start':
+ shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
+ break;
+ case 'middle':
+ shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ break;
+ default:
+ shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ break;
+ }
+ }
+ else {
+ shim = -t.getWidth()/2;
+ }
+ var val = this.u2p(t.value) + shim + 'px';
+ t._elem.css('left', val);
+ t.pack();
+ }
+ }
+ if (lshow) {
+ var w = this._label._elem.outerWidth(true);
+ this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px');
+ if (this.name == 'xaxis') {
+ this._label._elem.css('bottom', '0px');
+ }
+ else {
+ this._label._elem.css('top', '0px');
+ }
+ this._label.pack();
+ }
+ }
+ else {
+ for (var i=0; i<ticks.length; i++) {
+ var t = ticks[i];
+ if (t.show && t.showLabel) {
+ var shim;
+ if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
+ // will need to adjust auto positioning based on which axis this is.
+ var temp = (this.name == 'yaxis') ? 1 : -1;
+ switch (t.labelPosition) {
+ case 'auto':
+ // position at end
+ case 'end':
+ if (temp * t.angle < 0) {
+ shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
+ }
+ else {
+ shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
+ }
+ break;
+ case 'start':
+ if (t.angle > 0) {
+ shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
+ }
+ else {
+ shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
+ }
+ break;
+ case 'middle':
+ // if (t.angle > 0) {
+ // shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ // }
+ // else {
+ // shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
+ // }
+ shim = -t.getHeight()/2;
+ break;
+ default:
+ shim = -t.getHeight()/2;
+ break;
+ }
+ }
+ else {
+ shim = -t.getHeight()/2;
+ }
+
+ var val = this.u2p(t.value) + shim + 'px';
+ t._elem.css('top', val);
+ t.pack();
+ }
+ }
+ if (lshow) {
+ var h = this._label._elem.outerHeight(true);
+ this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px');
+ if (this.name == 'yaxis') {
+ this._label._elem.css('left', '0px');
+ }
+ else {
+ this._label._elem.css('right', '0px');
+ }
+ this._label.pack();
+ }
+ }
+ }
+
+ ticks = null;
+ };
+
+
+ /**
+ * The following code was generaously given to me a while back by Scott Prahl.
+ * He did a good job at computing axes min, max and number of ticks for the
+ * case where the user has not set any scale related parameters (tickInterval,
+ * numberTicks, min or max). I had ignored this use case for a long time,
+ * focusing on the more difficult case where user has set some option controlling
+ * tick generation. Anyway, about time I got this into jqPlot.
+ * Thanks Scott!!
+ */
+
+ /**
+ * Copyright (c) 2010 Scott Prahl
+ * The next three routines are currently available for use in all personal
+ * or commercial projects under both the MIT and GPL version 2.0 licenses.
+ * This means that you can choose the license that best suits your project
+ * and use it accordingly.
+ */
+
+ // A good format string depends on the interval. If the interval is greater
+ // than 1 then there is no need to show any decimal digits. If it is < 1.0, then
+ // use the magnitude of the interval to determine the number of digits to show.
+ function bestFormatString (interval)
+ {
+ var fstr;
+ interval = Math.abs(interval);
+ if (interval >= 10) {
+ fstr = '%d';
+ }
+
+ else if (interval > 1) {
+ if (interval === parseInt(interval, 10)) {
+ fstr = '%d';
+ }
+ else {
+ fstr = '%.1f';
+ }
+ }
+
+ else {
+ var expv = -Math.floor(Math.log(interval)/Math.LN10);
+ fstr = '%.' + expv + 'f';
+ }
+
+ return fstr;
+ }
+
+ var _factors = [0.1, 0.2, 0.3, 0.4, 0.5, 0.8, 1, 2, 3, 4, 5];
+
+ var _getLowerFactor = function(f) {
+ var i = _factors.indexOf(f);
+ if (i > 0) {
+ return _factors[i-1];
+ }
+ else {
+ return _factors[_factors.length - 1] / 100;
+ }
+ };
+
+ var _getHigherFactor = function(f) {
+ var i = _factors.indexOf(f);
+ if (i < _factors.length-1) {
+ return _factors[i+1];
+ }
+ else {
+ return _factors[0] * 100;
+ }
+ };
+
+ // Given a fixed minimum and maximum and a target number ot ticks
+ // figure out the best interval and
+ // return min, max, number ticks, format string and tick interval
+ function bestConstrainedInterval(min, max, nttarget) {
+ // run through possible number to ticks and see which interval is best
+ var low = Math.floor(nttarget/2);
+ var hi = Math.ceil(nttarget*1.5);
+ var badness = Number.MAX_VALUE;
+ var r = (max - min);
+ var temp;
+ var sd;
+ var bestNT;
+ var gsf = $.jqplot.getSignificantFigures;
+ var fsd;
+ var fs;
+ var currentNT;
+ var bestPrec;
+
+ for (var i=0, l=hi-low+1; i<l; i++) {
+ currentNT = low + i;
+ temp = r/(currentNT-1);
+ sd = gsf(temp);
+
+ temp = Math.abs(nttarget - currentNT) + sd.digitsRight;
+ if (temp < badness) {
+ badness = temp;
+ bestNT = currentNT;
+ bestPrec = sd.digitsRight;
+ }
+ else if (temp === badness) {
+ // let nicer ticks trump number ot ticks
+ if (sd.digitsRight < bestPrec) {
+ bestNT = currentNT;
+ bestPrec = sd.digitsRight;
+ }
+ }
+
+ }
+
+ fsd = Math.max(bestPrec, Math.max(gsf(min).digitsRight, gsf(max).digitsRight));
+ if (fsd === 0) {
+ fs = '%d';
+ }
+ else {
+ fs = '%.' + fsd + 'f';
+ }
+ temp = r / (bestNT - 1);
+ // min, max, number ticks, format string, tick interval
+ return [min, max, bestNT, fs, temp];
+ }
+
+ // This will return an interval of form 2 * 10^n, 5 * 10^n or 10 * 10^n
+ // it is based soley on the range and number of ticks. So if user specifies
+ // number of ticks, use this.
+ function bestInterval(range, numberTicks) {
+ numberTicks = numberTicks || 7;
+ var minimum = range / (numberTicks - 1);
+ var magnitude = Math.pow(10, Math.floor(Math.log(minimum) / Math.LN10));
+ var residual = minimum / magnitude;
+ var interval;
+ // "nicest" ranges are 1, 2, 5 or powers of these.
+ // for magnitudes below 1, only allow these.
+ if (magnitude < 1) {
+ if (residual > 5) {
+ interval = 10 * magnitude;
+ }
+ else if (residual > 2) {
+ interval = 5 * magnitude;
+ }
+ else if (residual > 1) {
+ interval = 2 * magnitude;
+ }
+ else {
+ interval = magnitude;
+ }
+ }
+ // for large ranges (whole integers), allow intervals like 3, 4 or powers of these.
+ // this helps a lot with poor choices for number of ticks.
+ else {
+ if (residual > 5) {
+ interval = 10 * magnitude;
+ }
+ else if (residual > 4) {
+ interval = 5 * magnitude;
+ }
+ else if (residual > 3) {
+ interval = 4 * magnitude;
+ }
+ else if (residual > 2) {
+ interval = 3 * magnitude;
+ }
+ else if (residual > 1) {
+ interval = 2 * magnitude;
+ }
+ else {
+ interval = magnitude;
+ }
+ }
+
+ return interval;
+ }
+
+ // This will return an interval of form 2 * 10^n, 5 * 10^n or 10 * 10^n
+ // it is based soley on the range of data, number of ticks must be computed later.
+ function bestLinearInterval(range, scalefact) {
+ scalefact = scalefact || 1;
+ var expv = Math.floor(Math.log(range)/Math.LN10);
+ var magnitude = Math.pow(10, expv);
+ // 0 < f < 10
+ var f = range / magnitude;
+ var fact;
+ // for large plots, scalefact will decrease f and increase number of ticks.
+ // for small plots, scalefact will increase f and decrease number of ticks.
+ f = f/scalefact;
+
+ // for large plots, smaller interval, more ticks.
+ if (f<=0.38) {
+ fact = 0.1;
+ }
+ else if (f<=1.6) {
+ fact = 0.2;
+ }
+ else if (f<=4.0) {
+ fact = 0.5;
+ }
+ else if (f<=8.0) {
+ fact = 1.0;
+ }
+ // for very small plots, larger interval, less ticks in number ticks
+ else if (f<=16.0) {
+ fact = 2;
+ }
+ else {
+ fact = 5;
+ }
+
+ return fact*magnitude;
+ }
+
+ function bestLinearComponents(range, scalefact) {
+ var expv = Math.floor(Math.log(range)/Math.LN10);
+ var magnitude = Math.pow(10, expv);
+ // 0 < f < 10
+ var f = range / magnitude;
+ var interval;
+ var fact;
+ // for large plots, scalefact will decrease f and increase number of ticks.
+ // for small plots, scalefact will increase f and decrease number of ticks.
+ f = f/scalefact;
+
+ // for large plots, smaller interval, more ticks.
+ if (f<=0.38) {
+ fact = 0.1;
+ }
+ else if (f<=1.6) {
+ fact = 0.2;
+ }
+ else if (f<=4.0) {
+ fact = 0.5;
+ }
+ else if (f<=8.0) {
+ fact = 1.0;
+ }
+ // for very small plots, larger interval, less ticks in number ticks
+ else if (f<=16.0) {
+ fact = 2;
+ }
+ // else if (f<=20.0) {
+ // fact = 3;
+ // }
+ // else if (f<=24.0) {
+ // fact = 4;
+ // }
+ else {
+ fact = 5;
+ }
+
+ interval = fact * magnitude;
+
+ return [interval, fact, magnitude];
+ }
+
+ // Given the min and max for a dataset, return suitable endpoints
+ // for the graphing, a good number for the number of ticks, and a
+ // format string so that extraneous digits are not displayed.
+ // returned is an array containing [min, max, nTicks, format]
+ $.jqplot.LinearTickGenerator = function(axis_min, axis_max, scalefact, numberTicks, keepMin, keepMax) {
+ // Set to preserve EITHER min OR max.
+ // If min is preserved, max must be free.
+ keepMin = (keepMin === null) ? false : keepMin;
+ keepMax = (keepMax === null || keepMin) ? false : keepMax;
+ // if endpoints are equal try to include zero otherwise include one
+ if (axis_min === axis_max) {
+ axis_max = (axis_max) ? 0 : 1;
+ }
+
+ scalefact = scalefact || 1.0;
+
+ // make sure range is positive
+ if (axis_max < axis_min) {
+ var a = axis_max;
+ axis_max = axis_min;
+ axis_min = a;
+ }
+
+ var r = [];
+ var ss = bestLinearInterval(axis_max - axis_min, scalefact);
+
+ var gsf = $.jqplot.getSignificantFigures;
+
+ if (numberTicks == null) {
+
+ // Figure out the axis min, max and number of ticks
+ // the min and max will be some multiple of the tick interval,
+ // 1*10^n, 2*10^n or 5*10^n. This gaurantees that, if the
+ // axis min is negative, 0 will be a tick.
+ if (!keepMin && !keepMax) {
+ r[0] = Math.floor(axis_min / ss) * ss; // min
+ r[1] = Math.ceil(axis_max / ss) * ss; // max
+ r[2] = Math.round((r[1]-r[0])/ss+1.0); // number of ticks
+ r[3] = bestFormatString(ss); // format string
+ r[4] = ss; // tick Interval
+ }
+
+ else if (keepMin) {
+ r[0] = axis_min; // min
+ r[2] = Math.ceil((axis_max - axis_min) / ss + 1.0); // number of ticks
+ r[1] = axis_min + (r[2] - 1) * ss; // max
+ var digitsMin = gsf(axis_min).digitsRight;
+ var digitsSS = gsf(ss).digitsRight;
+ if (digitsMin < digitsSS) {
+ r[3] = bestFormatString(ss); // format string
+ }
+ else {
+ r[3] = '%.' + digitsMin + 'f';
+ }
+ r[4] = ss; // tick Interval
+ }
+
+ else if (keepMax) {
+ r[1] = axis_max; // max
+ r[2] = Math.ceil((axis_max - axis_min) / ss + 1.0); // number of ticks
+ r[0] = axis_max - (r[2] - 1) * ss; // min
+ var digitsMax = gsf(axis_max).digitsRight;
+ var digitsSS = gsf(ss).digitsRight;
+ if (digitsMax < digitsSS) {
+ r[3] = bestFormatString(ss); // format string
+ }
+ else {
+ r[3] = '%.' + digitsMax + 'f';
+ }
+ r[4] = ss; // tick Interval
+ }
+ }
+
+ else {
+ var tempr = [];
+
+ // Figure out the axis min, max and number of ticks
+ // the min and max will be some multiple of the tick interval,
+ // 1*10^n, 2*10^n or 5*10^n. This gaurantees that, if the
+ // axis min is negative, 0 will be a tick.
+ tempr[0] = Math.floor(axis_min / ss) * ss; // min
+ tempr[1] = Math.ceil(axis_max / ss) * ss; // max
+ tempr[2] = Math.round((tempr[1]-tempr[0])/ss+1.0); // number of ticks
+ tempr[3] = bestFormatString(ss); // format string
+ tempr[4] = ss; // tick Interval
+
+ // first, see if we happen to get the right number of ticks
+ if (tempr[2] === numberTicks) {
+ r = tempr;
+ }
+
+ else {
+
+ var newti = bestInterval(tempr[1] - tempr[0], numberTicks);
+
+ r[0] = tempr[0]; // min
+ r[2] = numberTicks; // number of ticks
+ r[4] = newti; // tick interval
+ r[3] = bestFormatString(newti); // format string
+ r[1] = r[0] + (r[2] - 1) * r[4]; // max
+ }
+ }
+
+ return r;
+ };
+
+ $.jqplot.LinearTickGenerator.bestLinearInterval = bestLinearInterval;
+ $.jqplot.LinearTickGenerator.bestInterval = bestInterval;
+ $.jqplot.LinearTickGenerator.bestLinearComponents = bestLinearComponents;
+ $.jqplot.LinearTickGenerator.bestConstrainedInterval = bestConstrainedInterval;
+
+
+ // class: $.jqplot.MarkerRenderer
+ // The default jqPlot marker renderer, rendering the points on the line.
+ $.jqplot.MarkerRenderer = function(options){
+ // Group: Properties
+
+ // prop: show
+ // wether or not to show the marker.
+ this.show = true;
+ // prop: style
+ // One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare
+ this.style = 'filledCircle';
+ // prop: lineWidth
+ // size of the line for non-filled markers.
+ this.lineWidth = 2;
+ // prop: size
+ // Size of the marker (diameter or circle, length of edge of square, etc.)
+ this.size = 9.0;
+ // prop: color
+ // color of marker. Will be set to color of series by default on init.
+ this.color = '#666666';
+ // prop: shadow
+ // wether or not to draw a shadow on the line
+ this.shadow = true;
+ // prop: shadowAngle
+ // Shadow angle in degrees
+ this.shadowAngle = 45;
+ // prop: shadowOffset
+ // Shadow offset from line in pixels
+ this.shadowOffset = 1;
+ // prop: shadowDepth
+ // Number of times shadow is stroked, each stroke offset shadowOffset from the last.
+ this.shadowDepth = 3;
+ // prop: shadowAlpha
+ // Alpha channel transparency of shadow. 0 = transparent.
+ this.shadowAlpha = '0.07';
+ // prop: shadowRenderer
+ // Renderer that will draws the shadows on the marker.
+ this.shadowRenderer = new $.jqplot.ShadowRenderer();
+ // prop: shapeRenderer
+ // Renderer that will draw the marker.
+ this.shapeRenderer = new $.jqplot.ShapeRenderer();
+
+ $.extend(true, this, options);
+ };
+
+ $.jqplot.MarkerRenderer.prototype.init = function(options) {
+ $.extend(true, this, options);
+ var sdopt = {angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, lineWidth:this.lineWidth, depth:this.shadowDepth, closePath:true};
+ if (this.style.indexOf('filled') != -1) {
+ sdopt.fill = true;
+ }
+ if (this.style.indexOf('ircle') != -1) {
+ sdopt.isarc = true;
+ sdopt.closePath = false;
+ }
+ this.shadowRenderer.init(sdopt);
+
+ var shopt = {fill:false, isarc:false, strokeStyle:this.color, fillStyle:this.color, lineWidth:this.lineWidth, closePath:true};
+ if (this.style.indexOf('filled') != -1) {
+ shopt.fill = true;
+ }
+ if (this.style.indexOf('ircle') != -1) {
+ shopt.isarc = true;
+ shopt.closePath = false;
+ }
+ this.shapeRenderer.init(shopt);
+ };
+
+ $.jqplot.MarkerRenderer.prototype.drawDiamond = function(x, y, ctx, fill, options) {
+ var stretch = 1.2;
+ var dx = this.size/2/stretch;
+ var dy = this.size/2*stretch;
+ var points = [[x-dx, y], [x, y+dy], [x+dx, y], [x, y-dy]];
+ if (this.shadow) {
+ this.shadowRenderer.draw(ctx, points);
+ }
+ this.shapeRenderer.draw(ctx, points, options);
+ };
+
+ $.jqplot.MarkerRenderer.prototype.drawPlus = function(x, y, ctx, fill, options) {
+ var stretch = 1.0;
+ var dx = this.size/2*stretch;
+ var dy = this.size/2*stretch;
+ var points1 = [[x, y-dy], [x, y+dy]];
+ var points2 = [[x+dx, y], [x-dx, y]];
+ var opts = $.extend(true, {}, this.options, {closePath:false});
+ if (this.shadow) {
+ this.shadowRenderer.draw(ctx, points1, {closePath:false});
+ this.shadowRenderer.draw(ctx, points2, {closePath:false});
+ }
+ this.shapeRenderer.draw(ctx, points1, opts);
+ this.shapeRenderer.draw(ctx, points2, opts);
+ };
+
+ $.jqplot.MarkerRenderer.prototype.drawX = function(x, y, ctx, fill, options) {
+ var stretch = 1.0;
+ var dx = this.size/2*stretch;
+ var dy = this.size/2*stretch;
+ var opts = $.extend(true, {}, this.options, {closePath:false});
+ var points1 = [[x-dx, y-dy], [x+dx, y+dy]];
+ var points2 = [[x-dx, y+dy], [x+dx, y-dy]];
+ if (this.shadow) {
+ this.shadowRenderer.draw(ctx, points1, {closePath:false});
+ this.shadowRenderer.draw(ctx, points2, {closePath:false});
+ }
+ this.shapeRenderer.draw(ctx, points1, opts);
+ this.shapeRenderer.draw(ctx, points2, opts);
+ };
+
+ $.jqplot.MarkerRenderer.prototype.drawDash = function(x, y, ctx, fill, options) {
+ var stretch = 1.0;
+ var dx = this.size/2*stretch;
+ var dy = this.size/2*stretch;
+ var points = [[x-dx, y], [x+dx, y]];
+ if (this.shadow) {
+ this.shadowRenderer.draw(ctx, points);
+ }
+ this.shapeRenderer.draw(ctx, points, options);
+ };
+
+ $.jqplot.MarkerRenderer.prototype.drawLine = function(p1, p2, ctx, fill, options) {
+ var points = [p1, p2];
+ if (this.shadow) {
+ this.shadowRenderer.draw(ctx, points);
+ }
+ this.shapeRenderer.draw(ctx, points, options);
+ };
+
+ $.jqplot.MarkerRenderer.prototype.drawSquare = function(x, y, ctx, fill, options) {
+ var stretch = 1.0;
+ var dx = this.size/2/stretch;
+ var dy = this.size/2*stretch;
+ var points = [[x-dx, y-dy], [x-dx, y+dy], [x+dx, y+dy], [x+dx, y-dy]];
+ if (this.shadow) {
+ this.shadowRenderer.draw(ctx, points);
+ }
+ this.shapeRenderer.draw(ctx, points, options);
+ };
+
+ $.jqplot.MarkerRenderer.prototype.drawCircle = function(x, y, ctx, fill, options) {
+ var radius = this.size/2;
+ var end = 2*Math.PI;
+ var points = [x, y, radius, 0, end, true];
+ if (this.shadow) {
+ this.shadowRenderer.draw(ctx, points);
+ }
+ this.shapeRenderer.draw(ctx, points, options);
+ };
+
+ $.jqplot.MarkerRenderer.prototype.draw = function(x, y, ctx, options) {
+ options = options || {};
+ // hack here b/c shape renderer uses canvas based color style options
+ // and marker uses css style names.
+ if (options.show == null || options.show != false) {
+ if (options.color && !options.fillStyle) {
+ options.fillStyle = options.color;
+ }
+ if (options.color && !options.strokeStyle) {
+ options.strokeStyle = options.color;
+ }
+ switch (this.style) {
+ case 'diamond':
+ this.drawDiamond(x,y,ctx, false, options);
+ break;
+ case 'filledDiamond':
+ this.drawDiamond(x,y,ctx, true, options);
+ break;
+ case 'circle':
+ this.drawCircle(x,y,ctx, false, options);
+ break;
+ case 'filledCircle':
+ this.drawCircle(x,y,ctx, true, options);
+ break;
+ case 'square':
+ this.drawSquare(x,y,ctx, false, options);
+ break;
+ case 'filledSquare':
+ this.drawSquare(x,y,ctx, true, options);
+ break;
+ case 'x':
+ this.drawX(x,y,ctx, true, options);
+ break;
+ case 'plus':
+ this.drawPlus(x,y,ctx, true, options);
+ break;
+ case 'dash':
+ this.drawDash(x,y,ctx, true, options);
+ break;
+ case 'line':
+ this.drawLine(x, y, ctx, false, options);
+ break;
+ default:
+ this.drawDiamond(x,y,ctx, false, options);
+ break;
+ }
+ }
+ };
+
+ // class: $.jqplot.shadowRenderer
+ // The default jqPlot shadow renderer, rendering shadows behind shapes.
+ $.jqplot.ShadowRenderer = function(options){
+ // Group: Properties
+
+ // prop: angle
+ // Angle of the shadow in degrees. Measured counter-clockwise from the x axis.
+ this.angle = 45;
+ // prop: offset
+ // Pixel offset at the given shadow angle of each shadow stroke from the last stroke.
+ this.offset = 1;
+ // prop: alpha
+ // alpha transparency of shadow stroke.
+ this.alpha = 0.07;
+ // prop: lineWidth
+ // width of the shadow line stroke.
+ this.lineWidth = 1.5;
+ // prop: lineJoin
+ // How line segments of the shadow are joined.
+ this.lineJoin = 'miter';
+ // prop: lineCap
+ // how ends of the shadow line are rendered.
+ this.lineCap = 'round';
+ // prop; closePath
+ // whether line path segment is closed upon itself.
+ this.closePath = false;
+ // prop: fill
+ // whether to fill the shape.
+ this.fill = false;
+ // prop: depth
+ // how many times the shadow is stroked. Each stroke will be offset by offset at angle degrees.
+ this.depth = 3;
+ this.strokeStyle = 'rgba(0,0,0,0.1)';
+ // prop: isarc
+ // wether the shadow is an arc or not.
+ this.isarc = false;
+
+ $.extend(true, this, options);
+ };
+
+ $.jqplot.ShadowRenderer.prototype.init = function(options) {
+ $.extend(true, this, options);
+ };
+
+ // function: draw
+ // draws an transparent black (i.e. gray) shadow.
+ //
+ // ctx - canvas drawing context
+ // points - array of points or [x, y, radius, start angle (rad), end angle (rad)]
+ $.jqplot.ShadowRenderer.prototype.draw = function(ctx, points, options) {
+ ctx.save();
+ var opts = (options != null) ? options : {};
+ var fill = (opts.fill != null) ? opts.fill : this.fill;
+ var fillRect = (opts.fillRect != null) ? opts.fillRect : this.fillRect;
+ var closePath = (opts.closePath != null) ? opts.closePath : this.closePath;
+ var offset = (opts.offset != null) ? opts.offset : this.offset;
+ var alpha = (opts.alpha != null) ? opts.alpha : this.alpha;
+ var depth = (opts.depth != null) ? opts.depth : this.depth;
+ var isarc = (opts.isarc != null) ? opts.isarc : this.isarc;
+ var linePattern = (opts.linePattern != null) ? opts.linePattern : this.linePattern;
+ ctx.lineWidth = (opts.lineWidth != null) ? opts.lineWidth : this.lineWidth;
+ ctx.lineJoin = (opts.lineJoin != null) ? opts.lineJoin : this.lineJoin;
+ ctx.lineCap = (opts.lineCap != null) ? opts.lineCap : this.lineCap;
+ ctx.strokeStyle = opts.strokeStyle || this.strokeStyle || 'rgba(0,0,0,'+alpha+')';
+ ctx.fillStyle = opts.fillStyle || this.fillStyle || 'rgba(0,0,0,'+alpha+')';
+ for (var j=0; j<depth; j++) {
+ var ctxPattern = $.jqplot.LinePattern(ctx, linePattern);
+ ctx.translate(Math.cos(this.angle*Math.PI/180)*offset, Math.sin(this.angle*Math.PI/180)*offset);
+ ctxPattern.beginPath();
+ if (isarc) {
+ ctx.arc(points[0], points[1], points[2], points[3], points[4], true);
+ }
+ else if (fillRect) {
+ if (fillRect) {
+ ctx.fillRect(points[0], points[1], points[2], points[3]);
+ }
+ }
+ else if (points && points.length){
+ var move = true;
+ for (var i=0; i<points.length; i++) {
+ // skip to the first non-null point and move to it.
+ if (points[i][0] != null && points[i][1] != null) {
+ if (move) {
+ ctxPattern.moveTo(points[i][0], points[i][1]);
+ move = false;
+ }
+ else {
+ ctxPattern.lineTo(points[i][0], points[i][1]);
+ }
+ }
+ else {
+ move = true;
+ }
+ }
+
+ }
+ if (closePath) {
+ ctxPattern.closePath();
+ }
+ if (fill) {
+ ctx.fill();
+ }
+ else {
+ ctx.stroke();
+ }
+ }
+ ctx.restore();
+ };
+
+ // class: $.jqplot.shapeRenderer
+ // The default jqPlot shape renderer. Given a set of points will
+ // plot them and either stroke a line (fill = false) or fill them (fill = true).
+ // If a filled shape is desired, closePath = true must also be set to close
+ // the shape.
+ $.jqplot.ShapeRenderer = function(options){
+
+ this.lineWidth = 1.5;
+ // prop: linePattern
+ // line pattern 'dashed', 'dotted', 'solid', some combination
+ // of '-' and '.' characters such as '.-.' or a numerical array like
+ // [draw, skip, draw, skip, ...] such as [1, 10] to draw a dotted line,
+ // [1, 10, 20, 10] to draw a dot-dash line, and so on.
+ this.linePattern = 'solid';
+ // prop: lineJoin
+ // How line segments of the shadow are joined.
+ this.lineJoin = 'miter';
+ // prop: lineCap
+ // how ends of the shadow line are rendered.
+ this.lineCap = 'round';
+ // prop; closePath
+ // whether line path segment is closed upon itself.
+ this.closePath = false;
+ // prop: fill
+ // whether to fill the shape.
+ this.fill = false;
+ // prop: isarc
+ // wether the shadow is an arc or not.
+ this.isarc = false;
+ // prop: fillRect
+ // true to draw shape as a filled rectangle.
+ this.fillRect = false;
+ // prop: strokeRect
+ // true to draw shape as a stroked rectangle.
+ this.strokeRect = false;
+ // prop: clearRect
+ // true to cear a rectangle.
+ this.clearRect = false;
+ // prop: strokeStyle
+ // css color spec for the stoke style
+ this.strokeStyle = '#999999';
+ // prop: fillStyle
+ // css color spec for the fill style.
+ this.fillStyle = '#999999';
+
+ $.extend(true, this, options);
+ };
+
+ $.jqplot.ShapeRenderer.prototype.init = function(options) {
+ $.extend(true, this, options);
+ };
+
+ // function: draw
+ // draws the shape.
+ //
+ // ctx - canvas drawing context
+ // points - array of points for shapes or
+ // [x, y, width, height] for rectangles or
+ // [x, y, radius, start angle (rad), end angle (rad)] for circles and arcs.
+ $.jqplot.ShapeRenderer.prototype.draw = function(ctx, points, options) {
+ ctx.save();
+ var opts = (options != null) ? options : {};
+ var fill = (opts.fill != null) ? opts.fill : this.fill;
+ var closePath = (opts.closePath != null) ? opts.closePath : this.closePath;
+ var fillRect = (opts.fillRect != null) ? opts.fillRect : this.fillRect;
+ var strokeRect = (opts.strokeRect != null) ? opts.strokeRect : this.strokeRect;
+ var clearRect = (opts.clearRect != null) ? opts.clearRect : this.clearRect;
+ var isarc = (opts.isarc != null) ? opts.isarc : this.isarc;
+ var linePattern = (opts.linePattern != null) ? opts.linePattern : this.linePattern;
+ var ctxPattern = $.jqplot.LinePattern(ctx, linePattern);
+ ctx.lineWidth = opts.lineWidth || this.lineWidth;
+ ctx.lineJoin = opts.lineJoin || this.lineJoin;
+ ctx.lineCap = opts.lineCap || this.lineCap;
+ ctx.strokeStyle = (opts.strokeStyle || opts.color) || this.strokeStyle;
+ ctx.fillStyle = opts.fillStyle || this.fillStyle;
+ ctx.beginPath();
+ if (isarc) {
+ ctx.arc(points[0], points[1], points[2], points[3], points[4], true);
+ if (closePath) {
+ ctx.closePath();
+ }
+ if (fill) {
+ ctx.fill();
+ }
+ else {
+ ctx.stroke();
+ }
+ ctx.restore();
+ return;
+ }
+ else if (clearRect) {
+ ctx.clearRect(points[0], points[1], points[2], points[3]);
+ ctx.restore();
+ return;
+ }
+ else if (fillRect || strokeRect) {
+ if (fillRect) {
+ ctx.fillRect(points[0], points[1], points[2], points[3]);
+ }
+ if (strokeRect) {
+ ctx.strokeRect(points[0], points[1], points[2], points[3]);
+ ctx.restore();
+ return;
+ }
+ }
+ else if (points && points.length){
+ var move = true;
+ for (var i=0; i<points.length; i++) {
+ // skip to the first non-null point and move to it.
+ if (points[i][0] != null && points[i][1] != null) {
+ if (move) {
+ ctxPattern.moveTo(points[i][0], points[i][1]);
+ move = false;
+ }
+ else {
+ ctxPattern.lineTo(points[i][0], points[i][1]);
+ }
+ }
+ else {
+ move = true;
+ }
+ }
+ if (closePath) {
+ ctxPattern.closePath();
+ }
+ if (fill) {
+ ctx.fill();
+ }
+ else {
+ ctx.stroke();
+ }
+ }
+ ctx.restore();
+ };
+
+ // class $.jqplot.TableLegendRenderer
+ // The default legend renderer for jqPlot.
+ $.jqplot.TableLegendRenderer = function(){
+ //
+ };
+
+ $.jqplot.TableLegendRenderer.prototype.init = function(options) {
+ $.extend(true, this, options);
+ };
+
+ $.jqplot.TableLegendRenderer.prototype.addrow = function (label, color, pad, reverse) {
+ var rs = (pad) ? this.rowSpacing+'px' : '0px';
+ var tr;
+ var td;
+ var elem;
+ var div0;
+ var div1;
+ elem = document.createElement('tr');
+ tr = $(elem);
+ tr.addClass('jqplot-table-legend');
+ elem = null;
+
+ if (reverse){
+ tr.prependTo(this._elem);
+ }
+
+ else{
+ tr.appendTo(this._elem);
+ }
+
+ if (this.showSwatches) {
+ td = $(document.createElement('td'));
+ td.addClass('jqplot-table-legend jqplot-table-legend-swatch');
+ td.css({textAlign: 'center', paddingTop: rs});
+
+ div0 = $(document.createElement('div'));
+ div0.addClass('jqplot-table-legend-swatch-outline');
+ div1 = $(document.createElement('div'));
+ div1.addClass('jqplot-table-legend-swatch');
+ div1.css({backgroundColor: color, borderColor: color});
+
+ tr.append(td.append(div0.append(div1)));
+
+ // $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
+ // '<div><div class="jqplot-table-legend-swatch" style="background-color:'+color+';border-color:'+color+';"></div>'+
+ // '</div></td>').appendTo(tr);
+ }
+ if (this.showLabels) {
+ td = $(document.createElement('td'));
+ td.addClass('jqplot-table-legend jqplot-table-legend-label');
+ td.css('paddingTop', rs);
+ tr.append(td);
+
+ // elem = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
+ // elem.appendTo(tr);
+ if (this.escapeHtml) {
+ td.text(label);
+ }
+ else {
+ td.html(label);
+ }
+ }
+ td = null;
+ div0 = null;
+ div1 = null;
+ tr = null;
+ elem = null;
+ };
+
+ // called with scope of legend
+ $.jqplot.TableLegendRenderer.prototype.draw = function() {
+ if (this._elem) {
+ this._elem.emptyForce();
+ this._elem = null;
+ }
+
+ if (this.show) {
+ var series = this._series;
+ // make a table. one line label per row.
+ var elem = document.createElement('table');
+ this._elem = $(elem);
+ this._elem.addClass('jqplot-table-legend');
+
+ var ss = {position:'absolute'};
+ if (this.background) {
+ ss['background'] = this.background;
+ }
+ if (this.border) {
+ ss['border'] = this.border;
+ }
+ if (this.fontSize) {
+ ss['fontSize'] = this.fontSize;
+ }
+ if (this.fontFamily) {
+ ss['fontFamily'] = this.fontFamily;
+ }
+ if (this.textColor) {
+ ss['textColor'] = this.textColor;
+ }
+ if (this.marginTop != null) {
+ ss['marginTop'] = this.marginTop;
+ }
+ if (this.marginBottom != null) {
+ ss['marginBottom'] = this.marginBottom;
+ }
+ if (this.marginLeft != null) {
+ ss['marginLeft'] = this.marginLeft;
+ }
+ if (this.marginRight != null) {
+ ss['marginRight'] = this.marginRight;
+ }
+
+
+ var pad = false,
+ reverse = false,
+ s;
+ for (var i = 0; i< series.length; i++) {
+ s = series[i];
+ if (s._stack || s.renderer.constructor == $.jqplot.BezierCurveRenderer){
+ reverse = true;
+ }
+ if (s.show && s.showLabel) {
+ var lt = this.labels[i] || s.label.toString();
+ if (lt) {
+ var color = s.color;
+ if (reverse && i < series.length - 1){
+ pad = true;
+ }
+ else if (reverse && i == series.length - 1){
+ pad = false;
+ }
+ this.renderer.addrow.call(this, lt, color, pad, reverse);
+ pad = true;
+ }
+ // let plugins add more rows to legend. Used by trend line plugin.
+ for (var j=0; j<$.jqplot.addLegendRowHooks.length; j++) {
+ var item = $.jqplot.addLegendRowHooks[j].call(this, s);
+ if (item) {
+ this.renderer.addrow.call(this, item.label, item.color, pad);
+ pad = true;
+ }
+ }
+ lt = null;
+ }
+ }
+ }
+ return this._elem;
+ };
+
+ $.jqplot.TableLegendRenderer.prototype.pack = function(offsets) {
+ if (this.show) {
+ if (this.placement == 'insideGrid') {
+ switch (this.location) {
+ case 'nw':
+ var a = offsets.left;
+ var b = offsets.top;
+ this._elem.css('left', a);
+ this._elem.css('top', b);
+ break;
+ case 'n':
+ var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
+ var b = offsets.top;
+ this._elem.css('left', a);
+ this._elem.css('top', b);
+ break;
+ case 'ne':
+ var a = offsets.right;
+ var b = offsets.top;
+ this._elem.css({right:a, top:b});
+ break;
+ case 'e':
+ var a = offsets.right;
+ var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
+ this._elem.css({right:a, top:b});
+ break;
+ case 'se':
+ var a = offsets.right;
+ var b = offsets.bottom;
+ this._elem.css({right:a, bottom:b});
+ break;
+ case 's':
+ var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
+ var b = offsets.bottom;
+ this._elem.css({left:a, bottom:b});
+ break;
+ case 'sw':
+ var a = offsets.left;
+ var b = offsets.bottom;
+ this._elem.css({left:a, bottom:b});
+ break;
+ case 'w':
+ var a = offsets.left;
+ var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
+ this._elem.css({left:a, top:b});
+ break;
+ default: // same as 'se'
+ var a = offsets.right;
+ var b = offsets.bottom;
+ this._elem.css({right:a, bottom:b});
+ break;
+ }
+
+ }
+ else if (this.placement == 'outside'){
+ switch (this.location) {
+ case 'nw':
+ var a = this._plotDimensions.width - offsets.left;
+ var b = offsets.top;
+ this._elem.css('right', a);
+ this._elem.css('top', b);
+ break;
+ case 'n':
+ var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
+ var b = this._plotDimensions.height - offsets.top;
+ this._elem.css('left', a);
+ this._elem.css('bottom', b);
+ break;
+ case 'ne':
+ var a = this._plotDimensions.width - offsets.right;
+ var b = offsets.top;
+ this._elem.css({left:a, top:b});
+ break;
+ case 'e':
+ var a = this._plotDimensions.width - offsets.right;
+ var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
+ this._elem.css({left:a, top:b});
+ break;
+ case 'se':
+ var a = this._plotDimensions.width - offsets.right;
+ var b = offsets.bottom;
+ this._elem.css({left:a, bottom:b});
+ break;
+ case 's':
+ var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
+ var b = this._plotDimensions.height - offsets.bottom;
+ this._elem.css({left:a, top:b});
+ break;
+ case 'sw':
+ var a = this._plotDimensions.width - offsets.left;
+ var b = offsets.bottom;
+ this._elem.css({right:a, bottom:b});
+ break;
+ case 'w':
+ var a = this._plotDimensions.width - offsets.left;
+ var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
+ this._elem.css({right:a, top:b});
+ break;
+ default: // same as 'se'
+ var a = offsets.right;
+ var b = offsets.bottom;
+ this._elem.css({right:a, bottom:b});
+ break;
+ }
+ }
+ else {
+ switch (this.location) {
+ case 'nw':
+ this._elem.css({left:0, top:offsets.top});
+ break;
+ case 'n':
+ var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
+ this._elem.css({left: a, top:offsets.top});
+ break;
+ case 'ne':
+ this._elem.css({right:0, top:offsets.top});
+ break;
+ case 'e':
+ var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
+ this._elem.css({right:offsets.right, top:b});
+ break;
+ case 'se':
+ this._elem.css({right:offsets.right, bottom:offsets.bottom});
+ break;
+ case 's':
+ var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
+ this._elem.css({left: a, bottom:offsets.bottom});
+ break;
+ case 'sw':
+ this._elem.css({left:offsets.left, bottom:offsets.bottom});
+ break;
+ case 'w':
+ var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
+ this._elem.css({left:offsets.left, top:b});
+ break;
+ default: // same as 'se'
+ this._elem.css({right:offsets.right, bottom:offsets.bottom});
+ break;
+ }
+ }
+ }
+ };
+
+ /**
+ * Class: $.jqplot.ThemeEngine
+ * Theme Engine provides a programatic way to change some of the more
+ * common jqplot styling options such as fonts, colors and grid options.
+ * A theme engine instance is created with each plot. The theme engine
+ * manages a collection of themes which can be modified, added to, or
+ * applied to the plot.
+ *
+ * The themeEngine class is not instantiated directly.
+ * When a plot is initialized, the current plot options are scanned
+ * an a default theme named "Default" is created. This theme is
+ * used as the basis for other themes added to the theme engine and
+ * is always available.
+ *
+ * A theme is a simple javascript object with styling parameters for
+ * various entities of the plot. A theme has the form:
+ *
+ *
+ * > {
+ * > _name:f "Default",
+ * > target: {
+ * > backgroundColor: "transparent"
+ * > },
+ * > legend: {
+ * > textColor: null,
+ * > fontFamily: null,
+ * > fontSize: null,
+ * > border: null,
+ * > background: null
+ * > },
+ * > title: {
+ * > textColor: "rgb(102, 102, 102)",
+ * > fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif",
+ * > fontSize: "19.2px",
+ * > textAlign: "center"
+ * > },
+ * > seriesStyles: {},
+ * > series: [{
+ * > color: "#4bb2c5",
+ * > lineWidth: 2.5,
+ * > linePattern: "solid",
+ * > shadow: true,
+ * > fillColor: "#4bb2c5",
+ * > showMarker: true,
+ * > markerOptions: {
+ * > color: "#4bb2c5",
+ * > show: true,
+ * > style: 'filledCircle',
+ * > lineWidth: 1.5,
+ * > size: 4,
+ * > shadow: true
+ * > }
+ * > }],
+ * > grid: {
+ * > drawGridlines: true,
+ * > gridLineColor: "#cccccc",
+ * > gridLineWidth: 1,
+ * > backgroundColor: "#fffdf6",
+ * > borderColor: "#999999",
+ * > borderWidth: 2,
+ * > shadow: true
+ * > },
+ * > axesStyles: {
+ * > label: {},
+ * > ticks: {}
+ * > },
+ * > axes: {
+ * > xaxis: {
+ * > borderColor: "#999999",
+ * > borderWidth: 2,
+ * > ticks: {
+ * > show: true,
+ * > showGridline: true,
+ * > showLabel: true,
+ * > showMark: true,
+ * > size: 4,
+ * > textColor: "",
+ * > whiteSpace: "nowrap",
+ * > fontSize: "12px",
+ * > fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif"
+ * > },
+ * > label: {
+ * > textColor: "rgb(102, 102, 102)",
+ * > whiteSpace: "normal",
+ * > fontSize: "14.6667px",
+ * > fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif",
+ * > fontWeight: "400"
+ * > }
+ * > },
+ * > yaxis: {
+ * > borderColor: "#999999",
+ * > borderWidth: 2,
+ * > ticks: {
+ * > show: true,
+ * > showGridline: true,
+ * > showLabel: true,
+ * > showMark: true,
+ * > size: 4,
+ * > textColor: "",
+ * > whiteSpace: "nowrap",
+ * > fontSize: "12px",
+ * > fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif"
+ * > },
+ * > label: {
+ * > textColor: null,
+ * > whiteSpace: null,
+ * > fontSize: null,
+ * > fontFamily: null,
+ * > fontWeight: null
+ * > }
+ * > },
+ * > x2axis: {...
+ * > },
+ * > ...
+ * > y9axis: {...
+ * > }
+ * > }
+ * > }
+ *
+ * "seriesStyles" is a style object that will be applied to all series in the plot.
+ * It will forcibly override any styles applied on the individual series. "axesStyles" is
+ * a style object that will be applied to all axes in the plot. It will also forcibly
+ * override any styles on the individual axes.
+ *
+ * The example shown above has series options for a line series. Options for other
+ * series types are shown below:
+ *
+ * Bar Series:
+ *
+ * > {
+ * > color: "#4bb2c5",
+ * > seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"],
+ * > lineWidth: 2.5,
+ * > shadow: true,
+ * > barPadding: 2,
+ * > barMargin: 10,
+ * > barWidth: 15.09375,
+ * > highlightColors: ["rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)"]
+ * > }
+ *
+ * Pie Series:
+ *
+ * > {
+ * > seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"],
+ * > padding: 20,
+ * > sliceMargin: 0,
+ * > fill: true,
+ * > shadow: true,
+ * > startAngle: 0,
+ * > lineWidth: 2.5,
+ * > highlightColors: ["rgb(129,201,214)", "rgb(240,189,104)", "rgb(214,202,165)", "rgb(137,180,158)", "rgb(168,180,137)", "rgb(180,174,89)", "rgb(180,113,161)", "rgb(129,141,236)", "rgb(227,205,120)", "rgb(255,138,76)", "rgb(76,169,219)", "rgb(215,126,190)", "rgb(220,232,135)", "rgb(200,167,96)", "rgb(103,202,235)", "rgb(208,154,215)"]
+ * > }
+ *
+ * Funnel Series:
+ *
+ * > {
+ * > color: "#4bb2c5",
+ * > lineWidth: 2,
+ * > shadow: true,
+ * > padding: {
+ * > top: 20,
+ * > right: 20,
+ * > bottom: 20,
+ * > left: 20
+ * > },
+ * > sectionMargin: 6,
+ * > seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"],
+ * > highlightColors: ["rgb(147,208,220)", "rgb(242,199,126)", "rgb(220,210,178)", "rgb(154,191,172)", "rgb(180,191,154)", "rgb(191,186,112)", "rgb(191,133,174)", "rgb(147,157,238)", "rgb(231,212,139)", "rgb(255,154,102)", "rgb(102,181,224)", "rgb(221,144,199)", "rgb(225,235,152)", "rgb(200,167,96)", "rgb(124,210,238)", "rgb(215,169,221)"]
+ * > }
+ *
+ */
+ $.jqplot.ThemeEngine = function(){
+ // Group: Properties
+ //
+ // prop: themes
+ // hash of themes managed by the theme engine.
+ // Indexed by theme name.
+ this.themes = {};
+ // prop: activeTheme
+ // Pointer to currently active theme
+ this.activeTheme=null;
+
+ };
+
+ // called with scope of plot
+ $.jqplot.ThemeEngine.prototype.init = function() {
+ // get the Default theme from the current plot settings.
+ var th = new $.jqplot.Theme({_name:'Default'});
+ var n, i, nn;
+
+ for (n in th.target) {
+ if (n == "textColor") {
+ th.target[n] = this.target.css('color');
+ }
+ else {
+ th.target[n] = this.target.css(n);
+ }
+ }
+
+ if (this.title.show && this.title._elem) {
+ for (n in th.title) {
+ if (n == "textColor") {
+ th.title[n] = this.title._elem.css('color');
+ }
+ else {
+ th.title[n] = this.title._elem.css(n);
+ }
+ }
+ }
+
+ for (n in th.grid) {
+ th.grid[n] = this.grid[n];
+ }
+ if (th.grid.backgroundColor == null && this.grid.background != null) {
+ th.grid.backgroundColor = this.grid.background;
+ }
+ if (this.legend.show && this.legend._elem) {
+ for (n in th.legend) {
+ if (n == 'textColor') {
+ th.legend[n] = this.legend._elem.css('color');
+ }
+ else {
+ th.legend[n] = this.legend._elem.css(n);
+ }
+ }
+ }
+ var s;
+
+ for (i=0; i<this.series.length; i++) {
+ s = this.series[i];
+ if (s.renderer.constructor == $.jqplot.LineRenderer) {
+ th.series.push(new LineSeriesProperties());
+ }
+ else if (s.renderer.constructor == $.jqplot.BarRenderer) {
+ th.series.push(new BarSeriesProperties());
+ }
+ else if (s.renderer.constructor == $.jqplot.PieRenderer) {
+ th.series.push(new PieSeriesProperties());
+ }
+ else if (s.renderer.constructor == $.jqplot.DonutRenderer) {
+ th.series.push(new DonutSeriesProperties());
+ }
+ else if (s.renderer.constructor == $.jqplot.FunnelRenderer) {
+ th.series.push(new FunnelSeriesProperties());
+ }
+ else if (s.renderer.constructor == $.jqplot.MeterGaugeRenderer) {
+ th.series.push(new MeterSeriesProperties());
+ }
+ else {
+ th.series.push({});
+ }
+ for (n in th.series[i]) {
+ th.series[i][n] = s[n];
+ }
+ }
+ var a, ax;
+ for (n in this.axes) {
+ ax = this.axes[n];
+ a = th.axes[n] = new AxisProperties();
+ a.borderColor = ax.borderColor;
+ a.borderWidth = ax.borderWidth;
+ if (ax._ticks && ax._ticks[0]) {
+ for (nn in a.ticks) {
+ if (ax._ticks[0].hasOwnProperty(nn)) {
+ a.ticks[nn] = ax._ticks[0][nn];
+ }
+ else if (ax._ticks[0]._elem){
+ a.ticks[nn] = ax._ticks[0]._elem.css(nn);
+ }
+ }
+ }
+ if (ax._label && ax._label.show) {
+ for (nn in a.label) {
+ // a.label[nn] = ax._label._elem.css(nn);
+ if (ax._label[nn]) {
+ a.label[nn] = ax._label[nn];
+ }
+ else if (ax._label._elem){
+ if (nn == 'textColor') {
+ a.label[nn] = ax._label._elem.css('color');
+ }
+ else {
+ a.label[nn] = ax._label._elem.css(nn);
+ }
+ }
+ }
+ }
+ }
+ this.themeEngine._add(th);
+ this.themeEngine.activeTheme = this.themeEngine.themes[th._name];
+ };
+ /**
+ * Group: methods
+ *
+ * method: get
+ *
+ * Get and return the named theme or the active theme if no name given.
+ *
+ * parameter:
+ *
+ * name - name of theme to get.
+ *
+ * returns:
+ *
+ * Theme instance of given name.
+ */
+ $.jqplot.ThemeEngine.prototype.get = function(name) {
+ if (!name) {
+ // return the active theme
+ return this.activeTheme;
+ }
+ else {
+ return this.themes[name];
+ }
+ };
+
+ function numericalOrder(a,b) { return a-b; }
+
+ /**
+ * method: getThemeNames
+ *
+ * Return the list of theme names in this manager in alpha-numerical order.
+ *
+ * parameter:
+ *
+ * None
+ *
+ * returns:
+ *
+ * A the list of theme names in this manager in alpha-numerical order.
+ */
+ $.jqplot.ThemeEngine.prototype.getThemeNames = function() {
+ var tn = [];
+ for (var n in this.themes) {
+ tn.push(n);
+ }
+ return tn.sort(numericalOrder);
+ };
+
+ /**
+ * method: getThemes
+ *
+ * Return a list of themes in alpha-numerical order by name.
+ *
+ * parameter:
+ *
+ * None
+ *
+ * returns:
+ *
+ * A list of themes in alpha-numerical order by name.
+ */
+ $.jqplot.ThemeEngine.prototype.getThemes = function() {
+ var tn = [];
+ var themes = [];
+ for (var n in this.themes) {
+ tn.push(n);
+ }
+ tn.sort(numericalOrder);
+ for (var i=0; i<tn.length; i++) {
+ themes.push(this.themes[tn[i]]);
+ }
+ return themes;
+ };
+
+ $.jqplot.ThemeEngine.prototype.activate = function(plot, name) {
+ // sometimes need to redraw whole plot.
+ var redrawPlot = false;
+ if (!name && this.activeTheme && this.activeTheme._name) {
+ name = this.activeTheme._name;
+ }
+ if (!this.themes.hasOwnProperty(name)) {
+ throw new Error("No theme of that name");
+ }
+ else {
+ var th = this.themes[name];
+ this.activeTheme = th;
+ var val, checkBorderColor = false, checkBorderWidth = false;
+ var arr = ['xaxis', 'x2axis', 'yaxis', 'y2axis'];
+
+ for (i=0; i<arr.length; i++) {
+ var ax = arr[i];
+ if (th.axesStyles.borderColor != null) {
+ plot.axes[ax].borderColor = th.axesStyles.borderColor;
+ }
+ if (th.axesStyles.borderWidth != null) {
+ plot.axes[ax].borderWidth = th.axesStyles.borderWidth;
+ }
+ }
+
+ for (var axname in plot.axes) {
+ var axis = plot.axes[axname];
+ if (axis.show) {
+ var thaxis = th.axes[axname] || {};
+ var thaxstyle = th.axesStyles;
+ var thax = $.jqplot.extend(true, {}, thaxis, thaxstyle);
+ val = (th.axesStyles.borderColor != null) ? th.axesStyles.borderColor : thax.borderColor;
+ if (thax.borderColor != null) {
+ axis.borderColor = thax.borderColor;
+ redrawPlot = true;
+ }
+ val = (th.axesStyles.borderWidth != null) ? th.axesStyles.borderWidth : thax.borderWidth;
+ if (thax.borderWidth != null) {
+ axis.borderWidth = thax.borderWidth;
+ redrawPlot = true;
+ }
+ if (axis._ticks && axis._ticks[0]) {
+ for (var nn in thax.ticks) {
+ // val = null;
+ // if (th.axesStyles.ticks && th.axesStyles.ticks[nn] != null) {
+ // val = th.axesStyles.ticks[nn];
+ // }
+ // else if (thax.ticks[nn] != null){
+ // val = thax.ticks[nn]
+ // }
+ val = thax.ticks[nn];
+ if (val != null) {
+ axis.tickOptions[nn] = val;
+ axis._ticks = [];
+ redrawPlot = true;
+ }
+ }
+ }
+ if (axis._label && axis._label.show) {
+ for (var nn in thax.label) {
+ // val = null;
+ // if (th.axesStyles.label && th.axesStyles.label[nn] != null) {
+ // val = th.axesStyles.label[nn];
+ // }
+ // else if (thax.label && thax.label[nn] != null){
+ // val = thax.label[nn]
+ // }
+ val = thax.label[nn];
+ if (val != null) {
+ axis.labelOptions[nn] = val;
+ redrawPlot = true;
+ }
+ }
+ }
+
+ }
+ }
+
+ for (var n in th.grid) {
+ if (th.grid[n] != null) {
+ plot.grid[n] = th.grid[n];
+ }
+ }
+ if (!redrawPlot) {
+ plot.grid.draw();
+ }
+
+ if (plot.legend.show) {
+ for (n in th.legend) {
+ if (th.legend[n] != null) {
+ plot.legend[n] = th.legend[n];
+ }
+ }
+ }
+ if (plot.title.show) {
+ for (n in th.title) {
+ if (th.title[n] != null) {
+ plot.title[n] = th.title[n];
+ }
+ }
+ }
+
+ var i;
+ for (i=0; i<th.series.length; i++) {
+ var opts = {};
+ var redrawSeries = false;
+ for (n in th.series[i]) {
+ val = (th.seriesStyles[n] != null) ? th.seriesStyles[n] : th.series[i][n];
+ if (val != null) {
+ opts[n] = val;
+ if (n == 'color') {
+ plot.series[i].renderer.shapeRenderer.fillStyle = val;
+ plot.series[i].renderer.shapeRenderer.strokeStyle = val;
+ plot.series[i][n] = val;
+ }
+ else if ((n == 'lineWidth') || (n == 'linePattern')) {
+ plot.series[i].renderer.shapeRenderer[n] = val;
+ plot.series[i][n] = val;
+ }
+ else if (n == 'markerOptions') {
+ merge (plot.series[i].markerOptions, val);
+ merge (plot.series[i].markerRenderer, val);
+ }
+ else {
+ plot.series[i][n] = val;
+ }
+ redrawPlot = true;
+ }
+ }
+ }
+
+ if (redrawPlot) {
+ plot.target.empty();
+ plot.draw();
+ }
+
+ for (n in th.target) {
+ if (th.target[n] != null) {
+ plot.target.css(n, th.target[n]);
+ }
+ }
+ }
+
+ };
+
+ $.jqplot.ThemeEngine.prototype._add = function(theme, name) {
+ if (name) {
+ theme._name = name;
+ }
+ if (!theme._name) {
+ theme._name = Date.parse(new Date());
+ }
+ if (!this.themes.hasOwnProperty(theme._name)) {
+ this.themes[theme._name] = theme;
+ }
+ else {
+ throw new Error("jqplot.ThemeEngine Error: Theme already in use");
+ }
+ };
+
+ // method remove
+ // Delete the named theme, return true on success, false on failure.
+
+
+ /**
+ * method: remove
+ *
+ * Remove the given theme from the themeEngine.
+ *
+ * parameters:
+ *
+ * name - name of the theme to remove.
+ *
+ * returns:
+ *
+ * true on success, false on failure.
+ */
+ $.jqplot.ThemeEngine.prototype.remove = function(name) {
+ if (name == 'Default') {
+ return false;
+ }
+ return delete this.themes[name];
+ };
+
+ /**
+ * method: newTheme
+ *
+ * Create a new theme based on the default theme, adding it the themeEngine.
+ *
+ * parameters:
+ *
+ * name - name of the new theme.
+ * obj - optional object of styles to be applied to this new theme.
+ *
+ * returns:
+ *
+ * new Theme object.
+ */
+ $.jqplot.ThemeEngine.prototype.newTheme = function(name, obj) {
+ if (typeof(name) == 'object') {
+ obj = obj || name;
+ name = null;
+ }
+ if (obj && obj._name) {
+ name = obj._name;
+ }
+ else {
+ name = name || Date.parse(new Date());
+ }
+ // var th = new $.jqplot.Theme(name);
+ var th = this.copy(this.themes['Default']._name, name);
+ $.jqplot.extend(th, obj);
+ return th;
+ };
+
+ // function clone(obj) {
+ // return eval(obj.toSource());
+ // }
+
+ function clone(obj){
+ if(obj == null || typeof(obj) != 'object'){
+ return obj;
+ }
+
+ var temp = new obj.constructor();
+ for(var key in obj){
+ temp[key] = clone(obj[key]);
+ }
+ return temp;
+ }
+
+ $.jqplot.clone = clone;
+
+ function merge(obj1, obj2) {
+ if (obj2 == null || typeof(obj2) != 'object') {
+ return;
+ }
+ for (var key in obj2) {
+ if (key == 'highlightColors') {
+ obj1[key] = clone(obj2[key]);
+ }
+ if (obj2[key] != null && typeof(obj2[key]) == 'object') {
+ if (!obj1.hasOwnProperty(key)) {
+ obj1[key] = {};
+ }
+ merge(obj1[key], obj2[key]);
+ }
+ else {
+ obj1[key] = obj2[key];
+ }
+ }
+ }
+
+ $.jqplot.merge = merge;
+
+ // Use the jQuery 1.3.2 extend function since behaviour in jQuery 1.4 seems problematic
+ $.jqplot.extend = function() {
+ // copy reference to target object
+ var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !toString.call(target) === "[object Function]" ) {
+ target = {};
+ }
+
+ for ( ; i < length; i++ ){
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null ) {
+ // Extend the base object
+ for ( var name in options ) {
+ var src = target[ name ], copy = options[ name ];
+
+ // Prevent never-ending loop
+ if ( target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging object values
+ if ( deep && copy && typeof copy === "object" && !copy.nodeType ) {
+ target[ name ] = $.jqplot.extend( deep,
+ // Never move original objects, clone them
+ src || ( copy.length != null ? [ ] : { } )
+ , copy );
+ }
+ // Don't bring in undefined values
+ else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+ // Return the modified object
+ return target;
+ };
+
+ /**
+ * method: rename
+ *
+ * Rename a theme.
+ *
+ * parameters:
+ *
+ * oldName - current name of the theme.
+ * newName - desired name of the theme.
+ *
+ * returns:
+ *
+ * new Theme object.
+ */
+ $.jqplot.ThemeEngine.prototype.rename = function (oldName, newName) {
+ if (oldName == 'Default' || newName == 'Default') {
+ throw new Error ("jqplot.ThemeEngine Error: Cannot rename from/to Default");
+ }
+ if (this.themes.hasOwnProperty(newName)) {
+ throw new Error ("jqplot.ThemeEngine Error: New name already in use.");
+ }
+ else if (this.themes.hasOwnProperty(oldName)) {
+ var th = this.copy (oldName, newName);
+ this.remove(oldName);
+ return th;
+ }
+ throw new Error("jqplot.ThemeEngine Error: Old name or new name invalid");
+ };
+
+ /**
+ * method: copy
+ *
+ * Create a copy of an existing theme in the themeEngine, adding it the themeEngine.
+ *
+ * parameters:
+ *
+ * sourceName - name of the existing theme.
+ * targetName - name of the copy.
+ * obj - optional object of style parameter to apply to the new theme.
+ *
+ * returns:
+ *
+ * new Theme object.
+ */
+ $.jqplot.ThemeEngine.prototype.copy = function (sourceName, targetName, obj) {
+ if (targetName == 'Default') {
+ throw new Error ("jqplot.ThemeEngine Error: Cannot copy over Default theme");
+ }
+ if (!this.themes.hasOwnProperty(sourceName)) {
+ var s = "jqplot.ThemeEngine Error: Source name invalid";
+ throw new Error(s);
+ }
+ if (this.themes.hasOwnProperty(targetName)) {
+ var s = "jqplot.ThemeEngine Error: Target name invalid";
+ throw new Error(s);
+ }
+ else {
+ var th = clone(this.themes[sourceName]);
+ th._name = targetName;
+ $.jqplot.extend(true, th, obj);
+ this._add(th);
+ return th;
+ }
+ };
+
+
+ $.jqplot.Theme = function(name, obj) {
+ if (typeof(name) == 'object') {
+ obj = obj || name;
+ name = null;
+ }
+ name = name || Date.parse(new Date());
+ this._name = name;
+ this.target = {
+ backgroundColor: null
+ };
+ this.legend = {
+ textColor: null,
+ fontFamily: null,
+ fontSize: null,
+ border: null,
+ background: null
+ };
+ this.title = {
+ textColor: null,
+ fontFamily: null,
+ fontSize: null,
+ textAlign: null
+ };
+ this.seriesStyles = {};
+ this.series = [];
+ this.grid = {
+ drawGridlines: null,
+ gridLineColor: null,
+ gridLineWidth: null,
+ backgroundColor: null,
+ borderColor: null,
+ borderWidth: null,
+ shadow: null
+ };
+ this.axesStyles = {label:{}, ticks:{}};
+ this.axes = {};
+ if (typeof(obj) == 'string') {
+ this._name = obj;
+ }
+ else if(typeof(obj) == 'object') {
+ $.jqplot.extend(true, this, obj);
+ }
+ };
+
+ var AxisProperties = function() {
+ this.borderColor = null;
+ this.borderWidth = null;
+ this.ticks = new AxisTicks();
+ this.label = new AxisLabel();
+ };
+
+ var AxisTicks = function() {
+ this.show = null;
+ this.showGridline = null;
+ this.showLabel = null;
+ this.showMark = null;
+ this.size = null;
+ this.textColor = null;
+ this.whiteSpace = null;
+ this.fontSize = null;
+ this.fontFamily = null;
+ };
+
+ var AxisLabel = function() {
+ this.textColor = null;
+ this.whiteSpace = null;
+ this.fontSize = null;
+ this.fontFamily = null;
+ this.fontWeight = null;
+ };
+
+ var LineSeriesProperties = function() {
+ this.color=null;
+ this.lineWidth=null;
+ this.linePattern=null;
+ this.shadow=null;
+ this.fillColor=null;
+ this.showMarker=null;
+ this.markerOptions = new MarkerOptions();
+ };
+
+ var MarkerOptions = function() {
+ this.show = null;
+ this.style = null;
+ this.lineWidth = null;
+ this.size = null;
+ this.color = null;
+ this.shadow = null;
+ };
+
+ var BarSeriesProperties = function() {
+ this.color=null;
+ this.seriesColors=null;
+ this.lineWidth=null;
+ this.shadow=null;
+ this.barPadding=null;
+ this.barMargin=null;
+ this.barWidth=null;
+ this.highlightColors=null;
+ };
+
+ var PieSeriesProperties = function() {
+ this.seriesColors=null;
+ this.padding=null;
+ this.sliceMargin=null;
+ this.fill=null;
+ this.shadow=null;
+ this.startAngle=null;
+ this.lineWidth=null;
+ this.highlightColors=null;
+ };
+
+ var DonutSeriesProperties = function() {
+ this.seriesColors=null;
+ this.padding=null;
+ this.sliceMargin=null;
+ this.fill=null;
+ this.shadow=null;
+ this.startAngle=null;
+ this.lineWidth=null;
+ this.innerDiameter=null;
+ this.thickness=null;
+ this.ringMargin=null;
+ this.highlightColors=null;
+ };
+
+ var FunnelSeriesProperties = function() {
+ this.color=null;
+ this.lineWidth=null;
+ this.shadow=null;
+ this.padding=null;
+ this.sectionMargin=null;
+ this.seriesColors=null;
+ this.highlightColors=null;
+ };
+
+ var MeterSeriesProperties = function() {
+ this.padding=null;
+ this.backgroundColor=null;
+ this.ringColor=null;
+ this.tickColor=null;
+ this.ringWidth=null;
+ this.intervalColors=null;
+ this.intervalInnerRadius=null;
+ this.intervalOuterRadius=null;
+ this.hubRadius=null;
+ this.needleThickness=null;
+ this.needlePad=null;
+ };
+
+
+
+
+ $.fn.jqplotChildText = function() {
+ return $(this).contents().filter(function() {
+ return this.nodeType == 3; // Node.TEXT_NODE not defined in I7
+ }).text();
+ };
+
+ // Returns font style as abbreviation for "font" property.
+ $.fn.jqplotGetComputedFontStyle = function() {
+ var css = window.getComputedStyle ? window.getComputedStyle(this[0], "") : this[0].currentStyle;
+ var attrs = css['font-style'] ? ['font-style', 'font-weight', 'font-size', 'font-family'] : ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily'];
+ var style = [];
+
+ for (var i=0 ; i < attrs.length; ++i) {
+ var attr = String(css[attrs[i]]);
+
+ if (attr && attr != 'normal') {
+ style.push(attr);
+ }
+ }
+ return style.join(' ');
+ };
+
+ /**
+ * Namespace: $.fn
+ * jQuery namespace to attach functions to jQuery elements.
+ *
+ */
+
+ $.fn.jqplotToImageCanvas = function(options) {
+
+ options = options || {};
+ var x_offset = (options.x_offset == null) ? 0 : options.x_offset;
+ var y_offset = (options.y_offset == null) ? 0 : options.y_offset;
+ var backgroundColor = (options.backgroundColor == null) ? 'rgb(255,255,255)' : options.backgroundColor;
+
+ if ($(this).width() == 0 || $(this).height() == 0) {
+ return null;
+ }
+
+ // excanvas and hence IE < 9 do not support toDataURL and cannot export images.
+ if ($.jqplot.use_excanvas) {
+ return null;
+ }
+
+ var newCanvas = document.createElement("canvas");
+ var h = $(this).outerHeight(true);
+ var w = $(this).outerWidth(true);
+ var offs = $(this).offset();
+ var plotleft = offs.left;
+ var plottop = offs.top;
+ var transx = 0, transy = 0;
+
+ // have to check if any elements are hanging outside of plot area before rendering,
+ // since changing width of canvas will erase canvas.
+
+ var clses = ['jqplot-table-legend', 'jqplot-xaxis-tick', 'jqplot-x2axis-tick', 'jqplot-yaxis-tick', 'jqplot-y2axis-tick', 'jqplot-y3axis-tick',
+ 'jqplot-y4axis-tick', 'jqplot-y5axis-tick', 'jqplot-y6axis-tick', 'jqplot-y7axis-tick', 'jqplot-y8axis-tick', 'jqplot-y9axis-tick',
+ 'jqplot-xaxis-label', 'jqplot-x2axis-label', 'jqplot-yaxis-label', 'jqplot-y2axis-label', 'jqplot-y3axis-label', 'jqplot-y4axis-label',
+ 'jqplot-y5axis-label', 'jqplot-y6axis-label', 'jqplot-y7axis-label', 'jqplot-y8axis-label', 'jqplot-y9axis-label' ];
+
+ var temptop, templeft, tempbottom, tempright;
+
+ for (var i = 0; i < clses.length; i++) {
+ $(this).find('.'+clses[i]).each(function() {
+ temptop = $(this).offset().top - plottop;
+ templeft = $(this).offset().left - plotleft;
+ tempright = templeft + $(this).outerWidth(true) + transx;
+ tempbottom = temptop + $(this).outerHeight(true) + transy;
+ if (templeft < -transx) {
+ w = w - transx - templeft;
+ transx = -templeft;
+ }
+ if (temptop < -transy) {
+ h = h - transy - temptop;
+ transy = - temptop;
+ }
+ if (tempright > w) {
+ w = tempright;
+ }
+ if (tempbottom > h) {
+ h = tempbottom;
+ }
+ });
+ }
+
+ newCanvas.width = w + Number(x_offset);
+ newCanvas.height = h + Number(y_offset);
+
+ var newContext = newCanvas.getContext("2d");
+
+ newContext.save();
+ newContext.fillStyle = backgroundColor;
+ newContext.fillRect(0,0, newCanvas.width, newCanvas.height);
+ newContext.restore();
+
+ newContext.translate(transx, transy);
+ newContext.textAlign = 'left';
+ newContext.textBaseline = 'top';
+
+ function getLineheight(el) {
+ var lineheight = parseInt($(el).css('line-height'), 10);
+
+ if (isNaN(lineheight)) {
+ lineheight = parseInt($(el).css('font-size'), 10) * 1.2;
+ }
+ return lineheight;
+ }
+
+ function writeWrappedText (el, context, text, left, top, canvasWidth) {
+ var lineheight = getLineheight(el);
+ var tagwidth = $(el).innerWidth();
+ var tagheight = $(el).innerHeight();
+ var words = text.split(/\s+/);
+ var wl = words.length;
+ var w = '';
+ var breaks = [];
+ var temptop = top;
+ var templeft = left;
+
+ for (var i=0; i<wl; i++) {
+ w += words[i];
+ if (context.measureText(w).width > tagwidth) {
+ breaks.push(i);
+ w = '';
+ i--;
+ }
+ }
+ if (breaks.length === 0) {
+ // center text if necessary
+ if ($(el).css('textAlign') === 'center') {
+ templeft = left + (canvasWidth - context.measureText(w).width)/2 - transx;
+ }
+ context.fillText(text, templeft, top);
+ }
+ else {
+ w = words.slice(0, breaks[0]).join(' ');
+ // center text if necessary
+ if ($(el).css('textAlign') === 'center') {
+ templeft = left + (canvasWidth - context.measureText(w).width)/2 - transx;
+ }
+ context.fillText(w, templeft, temptop);
+ temptop += lineheight;
+ for (var i=1, l=breaks.length; i<l; i++) {
+ w = words.slice(breaks[i-1], breaks[i]).join(' ');
+ // center text if necessary
+ if ($(el).css('textAlign') === 'center') {
+ templeft = left + (canvasWidth - context.measureText(w).width)/2 - transx;
+ }
+ context.fillText(w, templeft, temptop);
+ temptop += lineheight;
+ }
+ w = words.slice(breaks[i-1], words.length).join(' ');
+ // center text if necessary
+ if ($(el).css('textAlign') === 'center') {
+ templeft = left + (canvasWidth - context.measureText(w).width)/2 - transx;
+ }
+ context.fillText(w, templeft, temptop);
+ }
+
+ }
+
+ function _jqpToImage(el, x_offset, y_offset) {
+ var tagname = el.tagName.toLowerCase();
+ var p = $(el).position();
+ var css = window.getComputedStyle ? window.getComputedStyle(el, "") : el.currentStyle; // for IE < 9
+ var left = x_offset + p.left + parseInt(css.marginLeft, 10) + parseInt(css.borderLeftWidth, 10) + parseInt(css.paddingLeft, 10);
+ var top = y_offset + p.top + parseInt(css.marginTop, 10) + parseInt(css.borderTopWidth, 10)+ parseInt(css.paddingTop, 10);
+ var w = newCanvas.width;
+ // var left = x_offset + p.left + $(el).css('marginLeft') + $(el).css('borderLeftWidth')
+
+ // somehow in here, for divs within divs, the width of the inner div should be used instead of the canvas.
+
+ if ((tagname == 'div' || tagname == 'span') && !$(el).hasClass('jqplot-highlighter-tooltip')) {
+ $(el).children().each(function() {
+ _jqpToImage(this, left, top);
+ });
+ var text = $(el).jqplotChildText();
+
+ if (text) {
+ newContext.font = $(el).jqplotGetComputedFontStyle();
+ newContext.fillStyle = $(el).css('color');
+
+ writeWrappedText(el, newContext, text, left, top, w);
+ }
+ }
+
+ // handle the standard table legend
+
+ else if (tagname === 'table' && $(el).hasClass('jqplot-table-legend')) {
+ newContext.strokeStyle = $(el).css('border-top-color');
+ newContext.fillStyle = $(el).css('background-color');
+ newContext.fillRect(left, top, $(el).innerWidth(), $(el).innerHeight());
+ if (parseInt($(el).css('border-top-width'), 10) > 0) {
+ newContext.strokeRect(left, top, $(el).innerWidth(), $(el).innerHeight());
+ }
+
+ // find all the swatches
+ $(el).find('div.jqplot-table-legend-swatch-outline').each(function() {
+ // get the first div and stroke it
+ var elem = $(this);
+ newContext.strokeStyle = elem.css('border-top-color');
+ var l = left + elem.position().left;
+ var t = top + elem.position().top;
+ newContext.strokeRect(l, t, elem.innerWidth(), elem.innerHeight());
+
+ // now fill the swatch
+
+ l += parseInt(elem.css('padding-left'), 10);
+ t += parseInt(elem.css('padding-top'), 10);
+ var h = elem.innerHeight() - 2 * parseInt(elem.css('padding-top'), 10);
+ var w = elem.innerWidth() - 2 * parseInt(elem.css('padding-left'), 10);
+
+ var swatch = elem.children('div.jqplot-table-legend-swatch');
+ newContext.fillStyle = swatch.css('background-color');
+ newContext.fillRect(l, t, w, h);
+ });
+
+ // now add text
+
+ $(el).find('td.jqplot-table-legend-label').each(function(){
+ var elem = $(this);
+ var l = left + elem.position().left;
+ var t = top + elem.position().top + parseInt(elem.css('padding-top'), 10);
+ newContext.font = elem.jqplotGetComputedFontStyle();
+ newContext.fillStyle = elem.css('color');
+ writeWrappedText(elem, newContext, elem.text(), l, t, w);
+ });
+
+ var elem = null;
+ }
+
+ else if (tagname == 'canvas') {
+ newContext.drawImage(el, left, top);
+ }
+ }
+ $(this).children().each(function() {
+ _jqpToImage(this, x_offset, y_offset);
+ });
+ return newCanvas;
+ };
+
+ // return the raw image data string.
+ // Should work on canvas supporting browsers.
+ $.fn.jqplotToImageStr = function(options) {
+ var imgCanvas = $(this).jqplotToImageCanvas(options);
+ if (imgCanvas) {
+ return imgCanvas.toDataURL("image/png");
+ }
+ else {
+ return null;
+ }
+ };
+
+ // return a DOM <img> element and return it.
+ // Should work on canvas supporting browsers.
+ $.fn.jqplotToImageElem = function(options) {
+ var elem = document.createElement("img");
+ var str = $(this).jqplotToImageStr(options);
+ elem.src = str;
+ return elem;
+ };
+
+ // return a string for an <img> element and return it.
+ // Should work on canvas supporting browsers.
+ $.fn.jqplotToImageElemStr = function(options) {
+ var str = '<img src='+$(this).jqplotToImageStr(options)+' />';
+ return str;
+ };
+
+ // Not gauranteed to work, even on canvas supporting browsers due to
+ // limitations with location.href and browser support.
+ $.fn.jqplotSaveImage = function() {
+ var imgData = $(this).jqplotToImageStr({});
+ if (imgData) {
+ window.location.href = imgData.replace("image/png", "image/octet-stream");
+ }
+
+ };
+
+ // Not gauranteed to work, even on canvas supporting browsers due to
+ // limitations with window.open and arbitrary data.
+ $.fn.jqplotViewImage = function() {
+ var imgStr = $(this).jqplotToImageElemStr({});
+ var imgData = $(this).jqplotToImageStr({});
+ if (imgStr) {
+ var w = window.open('');
+ w.document.open("image/png");
+ w.document.write(imgStr);
+ w.document.close();
+ w = null;
+ }
+ };
+
+
+
+
+ /**
+ * @description
+ * <p>Object with extended date parsing and formatting capabilities.
+ * This library borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.</p>
+ *
+ * <p>jsDate takes a different approach by not extending the built-in
+ * Date Object, improving date parsing, allowing for multiple formatting
+ * syntaxes and multiple and more easily expandable localization.</p>
+ *
+ * @author Chris Leonello
+ * @date #date#
+ * @version #VERSION#
+ * @copyright (c) 2010 Chris Leonello
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * <p>Ken's origianl Date Instance Methods and copyright notice:</p>
+ * <pre>
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ * </pre>
+ *
+ * @class
+ * @name jsDate
+ * @param {String | Number | Array | Date&nbsp;Object | Options&nbsp;Object} arguments Optional arguments, either a parsable date/time string,
+ * a JavaScript timestamp, an array of numbers of form [year, month, day, hours, minutes, seconds, milliseconds],
+ * a Date object, or an options object of form {syntax: "perl", date:some Date} where all options are optional.
+ */
+
+ var jsDate = function () {
+
+ this.syntax = jsDate.config.syntax;
+ this._type = "jsDate";
+ this.proxy = new Date();
+ this.options = {};
+ this.locale = jsDate.regional.getLocale();
+ this.formatString = '';
+ this.defaultCentury = jsDate.config.defaultCentury;
+
+ switch ( arguments.length ) {
+ case 0:
+ break;
+ case 1:
+ // other objects either won't have a _type property or,
+ // if they do, it shouldn't be set to "jsDate", so
+ // assume it is an options argument.
+ if (get_type(arguments[0]) == "[object Object]" && arguments[0]._type != "jsDate") {
+ var opts = this.options = arguments[0];
+ this.syntax = opts.syntax || this.syntax;
+ this.defaultCentury = opts.defaultCentury || this.defaultCentury;
+ this.proxy = jsDate.createDate(opts.date);
+ }
+ else {
+ this.proxy = jsDate.createDate(arguments[0]);
+ }
+ break;
+ default:
+ var a = [];
+ for ( var i=0; i<arguments.length; i++ ) {
+ a.push(arguments[i]);
+ }
+ // this should be the current date/time?
+ this.proxy = new Date();
+ this.proxy.setFullYear.apply( this.proxy, a.slice(0,3) );
+ if ( a.slice(3).length ) {
+ this.proxy.setHours.apply( this.proxy, a.slice(3) );
+ }
+ break;
+ }
+ };
+
+ /**
+ * @namespace Configuration options that will be used as defaults for all instances on the page.
+ * @property {String} defaultLocale The default locale to use [en].
+ * @property {String} syntax The default syntax to use [perl].
+ * @property {Number} defaultCentury The default centry for 2 digit dates.
+ */
+ jsDate.config = {
+ defaultLocale: 'en',
+ syntax: 'perl',
+ defaultCentury: 1900
+ };
+
+ /**
+ * Add an arbitrary amount to the currently stored date
+ *
+ * @param {Number} number
+ * @param {String} unit
+ * @returns {jsDate}
+ */
+
+ jsDate.prototype.add = function(number, unit) {
+ var factor = multipliers[unit] || multipliers.day;
+ if (typeof factor == 'number') {
+ this.proxy.setTime(this.proxy.getTime() + (factor * number));
+ } else {
+ factor.add(this, number);
+ }
+ return this;
+ };
+
+ /**
+ * Create a new jqplot.date object with the same date
+ *
+ * @returns {jsDate}
+ */
+
+ jsDate.prototype.clone = function() {
+ return new jsDate(this.proxy.getTime());
+ };
+
+ /**
+ * Get the UTC TimeZone Offset of this date in milliseconds.
+ *
+ * @returns {Number}
+ */
+
+ jsDate.prototype.getUtcOffset = function() {
+ return this.proxy.getTimezoneOffset() * 60000;
+ };
+
+ /**
+ * Find the difference between this jsDate and another date.
+ *
+ * @param {String| Number| Array| jsDate&nbsp;Object| Date&nbsp;Object} dateObj
+ * @param {String} unit
+ * @param {Boolean} allowDecimal
+ * @returns {Number} Number of units difference between dates.
+ */
+
+ jsDate.prototype.diff = function(dateObj, unit, allowDecimal) {
+ // ensure we have a Date object
+ dateObj = new jsDate(dateObj);
+ if (dateObj === null) {
+ return null;
+ }
+ // get the multiplying factor integer or factor function
+ var factor = multipliers[unit] || multipliers.day;
+ if (typeof factor == 'number') {
+ // multiply
+ var unitDiff = (this.proxy.getTime() - dateObj.proxy.getTime()) / factor;
+ } else {
+ // run function
+ var unitDiff = factor.diff(this.proxy, dateObj.proxy);
+ }
+ // if decimals are not allowed, round toward zero
+ return (allowDecimal ? unitDiff : Math[unitDiff > 0 ? 'floor' : 'ceil'](unitDiff));
+ };
+
+ /**
+ * Get the abbreviated name of the current week day
+ *
+ * @returns {String}
+ */
+
+ jsDate.prototype.getAbbrDayName = function() {
+ return jsDate.regional[this.locale]["dayNamesShort"][this.proxy.getDay()];
+ };
+
+ /**
+ * Get the abbreviated name of the current month
+ *
+ * @returns {String}
+ */
+
+ jsDate.prototype.getAbbrMonthName = function() {
+ return jsDate.regional[this.locale]["monthNamesShort"][this.proxy.getMonth()];
+ };
+
+ /**
+ * Get UPPER CASE AM or PM for the current time
+ *
+ * @returns {String}
+ */
+
+ jsDate.prototype.getAMPM = function() {
+ return this.proxy.getHours() >= 12 ? 'PM' : 'AM';
+ };
+
+ /**
+ * Get lower case am or pm for the current time
+ *
+ * @returns {String}
+ */
+
+ jsDate.prototype.getAmPm = function() {
+ return this.proxy.getHours() >= 12 ? 'pm' : 'am';
+ };
+
+ /**
+ * Get the century (19 for 20th Century)
+ *
+ * @returns {Integer} Century (19 for 20th century).
+ */
+ jsDate.prototype.getCentury = function() {
+ return parseInt(this.proxy.getFullYear()/100, 10);
+ };
+
+ /**
+ * Implements Date functionality
+ */
+ jsDate.prototype.getDate = function() {
+ return this.proxy.getDate();
+ };
+
+ /**
+ * Implements Date functionality
+ */
+ jsDate.prototype.getDay = function() {
+ return this.proxy.getDay();
+ };
+
+ /**
+ * Get the Day of week 1 (Monday) thru 7 (Sunday)
+ *
+ * @returns {Integer} Day of week 1 (Monday) thru 7 (Sunday)
+ */
+ jsDate.prototype.getDayOfWeek = function() {
+ var dow = this.proxy.getDay();
+ return dow===0?7:dow;
+ };
+
+ /**
+ * Get the day of the year
+ *
+ * @returns {Integer} 1 - 366, day of the year
+ */
+ jsDate.prototype.getDayOfYear = function() {
+ var d = this.proxy;
+ var ms = d - new Date('' + d.getFullYear() + '/1/1 GMT');
+ ms += d.getTimezoneOffset()*60000;
+ d = null;
+ return parseInt(ms/60000/60/24, 10)+1;
+ };
+
+ /**
+ * Get the name of the current week day
+ *
+ * @returns {String}
+ */
+
+ jsDate.prototype.getDayName = function() {
+ return jsDate.regional[this.locale]["dayNames"][this.proxy.getDay()];
+ };
+
+ /**
+ * Get the week number of the given year, starting with the first Sunday as the first week
+ * @returns {Integer} Week number (13 for the 13th full week of the year).
+ */
+ jsDate.prototype.getFullWeekOfYear = function() {
+ var d = this.proxy;
+ var doy = this.getDayOfYear();
+ var rdow = 6-d.getDay();
+ var woy = parseInt((doy+rdow)/7, 10);
+ return woy;
+ };
+
+ /**
+ * Implements Date functionality
+ */
+ jsDate.prototype.getFullYear = function() {
+ return this.proxy.getFullYear();
+ };
+
+ /**
+ * Get the GMT offset in hours and minutes (e.g. +06:30)
+ *
+ * @returns {String}
+ */
+
+ jsDate.prototype.getGmtOffset = function() {
+ // divide the minutes offset by 60
+ var hours = this.proxy.getTimezoneOffset() / 60;
+ // decide if we are ahead of or behind GMT
+ var prefix = hours < 0 ? '+' : '-';
+ // remove the negative sign if any
+ hours = Math.abs(hours);
+ // add the +/- to the padded number of hours to : to the padded minutes
+ return prefix + addZeros(Math.floor(hours), 2) + ':' + addZeros((hours % 1) * 60, 2);
+ };
+
+ /**
+ * Implements Date functionality
+ */
+ jsDate.prototype.getHours = function() {
+ return this.proxy.getHours();
+ };
+
+ /**
+ * Get the current hour on a 12-hour scheme
+ *
+ * @returns {Integer}
+ */
+
+ jsDate.prototype.getHours12 = function() {
+ var hours = this.proxy.getHours();
+ return hours > 12 ? hours - 12 : (hours == 0 ? 12 : hours);
+ };
+
+
+ jsDate.prototype.getIsoWeek = function() {
+ var d = this.proxy;
+ var woy = d.getWeekOfYear();
+ var dow1_1 = (new Date('' + d.getFullYear() + '/1/1')).getDay();
+ // First week is 01 and not 00 as in the case of %U and %W,
+ // so we add 1 to the final result except if day 1 of the year
+ // is a Monday (then %W returns 01).
+ // We also need to subtract 1 if the day 1 of the year is
+ // Friday-Sunday, so the resulting equation becomes:
+ var idow = woy + (dow1_1 > 4 || dow1_1 <= 1 ? 0 : 1);
+ if(idow == 53 && (new Date('' + d.getFullYear() + '/12/31')).getDay() < 4)
+ {
+ idow = 1;
+ }
+ else if(idow === 0)
+ {
+ d = new jsDate(new Date('' + (d.getFullYear()-1) + '/12/31'));
+ idow = d.getIsoWeek();
+ }
+ d = null;
+ return idow;
+ };
+
+ /**
+ * Implements Date functionality
+ */
+ jsDate.prototype.getMilliseconds = function() {
+ return this.proxy.getMilliseconds();
+ };
+
+ /**
+ * Implements Date functionality
+ */
+ jsDate.prototype.getMinutes = function() {
+ return this.proxy.getMinutes();
+ };
+
+ /**
+ * Implements Date functionality
+ */
+ jsDate.prototype.getMonth = function() {
+ return this.proxy.getMonth();
+ };
+
+ /**
+ * Get the name of the current month
+ *
+ * @returns {String}
+ */
+
+ jsDate.prototype.getMonthName = function() {
+ return jsDate.regional[this.locale]["monthNames"][this.proxy.getMonth()];
+ };
+
+ /**
+ * Get the number of the current month, 1-12
+ *
+ * @returns {Integer}
+ */
+
+ jsDate.prototype.getMonthNumber = function() {
+ return this.proxy.getMonth() + 1;
+ };
+
+ /**
+ * Implements Date functionality
+ */
+ jsDate.prototype.getSeconds = function() {
+ return this.proxy.getSeconds();
+ };
+
+ /**
+ * Return a proper two-digit year integer
+ *
+ * @returns {Integer}
+ */
+
+ jsDate.prototype.getShortYear = function() {
+ return this.proxy.getYear() % 100;
+ };
+
+ /**
+ * Implements Date functionality
+ */
+ jsDate.prototype.getTime = function() {
+ return this.proxy.getTime();
+ };
+
+ /**
+ * Get the timezone abbreviation
+ *
+ * @returns {String} Abbreviation for the timezone
+ */
+ jsDate.prototype.getTimezoneAbbr = function() {
+ return this.proxy.toString().replace(/^.*\(([^)]+)\)$/, '$1');
+ };
+
+ /**
+ * Get the browser-reported name for the current timezone (e.g. MDT, Mountain Daylight Time)
+ *
+ * @returns {String}
+ */
+ jsDate.prototype.getTimezoneName = function() {
+ var match = /(?:\((.+)\)$| ([A-Z]{3}) )/.exec(this.toString());
+ return match[1] || match[2] || 'GMT' + this.getGmtOffset();
+ };
+
+ /**
+ * Implements Date functionality
+ */
+ jsDate.prototype.getTimezoneOffset = function() {
+ return this.proxy.getTimezoneOffset();
+ };
+
+
+ /**
+ * Get the week number of the given year, starting with the first Monday as the first week
+ * @returns {Integer} Week number (13 for the 13th week of the year).
+ */
+ jsDate.prototype.getWeekOfYear = function() {
+ var doy = this.getDayOfYear();
+ var rdow = 7 - this.getDayOfWeek();
+ var woy = parseInt((doy+rdow)/7, 10);
+ return woy;
+ };
+
+ /**
+ * Get the current date as a Unix timestamp
+ *
+ * @returns {Integer}
+ */
+
+ jsDate.prototype.getUnix = function() {
+ return Math.round(this.proxy.getTime() / 1000, 0);
+ };
+
+ /**
+ * Implements Date functionality
+ */
+ jsDate.prototype.getYear = function() {
+ return this.proxy.getYear();
+ };
+
+ /**
+ * Return a date one day ahead (or any other unit)
+ *
+ * @param {String} unit Optional, year | month | day | week | hour | minute | second | millisecond
+ * @returns {jsDate}
+ */
+
+ jsDate.prototype.next = function(unit) {
+ unit = unit || 'day';
+ return this.clone().add(1, unit);
+ };
+
+ /**
+ * Set the jsDate instance to a new date.
+ *
+ * @param {String | Number | Array | Date Object | jsDate Object | Options Object} arguments Optional arguments,
+ * either a parsable date/time string,
+ * a JavaScript timestamp, an array of numbers of form [year, month, day, hours, minutes, seconds, milliseconds],
+ * a Date object, jsDate Object or an options object of form {syntax: "perl", date:some Date} where all options are optional.
+ */
+ jsDate.prototype.set = function() {
+ switch ( arguments.length ) {
+ case 0:
+ this.proxy = new Date();
+ break;
+ case 1:
+ // other objects either won't have a _type property or,
+ // if they do, it shouldn't be set to "jsDate", so
+ // assume it is an options argument.
+ if (get_type(arguments[0]) == "[object Object]" && arguments[0]._type != "jsDate") {
+ var opts = this.options = arguments[0];
+ this.syntax = opts.syntax || this.syntax;
+ this.defaultCentury = opts.defaultCentury || this.defaultCentury;
+ this.proxy = jsDate.createDate(opts.date);
+ }
+ else {
+ this.proxy = jsDate.createDate(arguments[0]);
+ }
+ break;
+ default:
+ var a = [];
+ for ( var i=0; i<arguments.length; i++ ) {
+ a.push(arguments[i]);
+ }
+ // this should be the current date/time
+ this.proxy = new Date();
+ this.proxy.setFullYear.apply( this.proxy, a.slice(0,3) );
+ if ( a.slice(3).length ) {
+ this.proxy.setHours.apply( this.proxy, a.slice(3) );
+ }
+ break;
+ }
+ return this;
+ };
+
+ /**
+ * Sets the day of the month for a specified date according to local time.
+ * @param {Integer} dayValue An integer from 1 to 31, representing the day of the month.
+ */
+ jsDate.prototype.setDate = function(n) {
+ this.proxy.setDate(n);
+ return this;
+ };
+
+ /**
+ * Sets the full year for a specified date according to local time.
+ * @param {Integer} yearValue The numeric value of the year, for example, 1995.
+ * @param {Integer} monthValue Optional, between 0 and 11 representing the months January through December.
+ * @param {Integer} dayValue Optional, between 1 and 31 representing the day of the month. If you specify the dayValue parameter, you must also specify the monthValue.
+ */
+ jsDate.prototype.setFullYear = function() {
+ this.proxy.setFullYear.apply(this.proxy, arguments);
+ return this;
+ };
+
+ /**
+ * Sets the hours for a specified date according to local time.
+ *
+ * @param {Integer} hoursValue An integer between 0 and 23, representing the hour.
+ * @param {Integer} minutesValue Optional, An integer between 0 and 59, representing the minutes.
+ * @param {Integer} secondsValue Optional, An integer between 0 and 59, representing the seconds.
+ * If you specify the secondsValue parameter, you must also specify the minutesValue.
+ * @param {Integer} msValue Optional, A number between 0 and 999, representing the milliseconds.
+ * If you specify the msValue parameter, you must also specify the minutesValue and secondsValue.
+ */
+ jsDate.prototype.setHours = function() {
+ this.proxy.setHours.apply(this.proxy, arguments);
+ return this;
+ };
+
+ /**
+ * Implements Date functionality
+ */
+ jsDate.prototype.setMilliseconds = function(n) {
+ this.proxy.setMilliseconds(n);
+ return this;
+ };
+
+ /**
+ * Implements Date functionality
+ */
+ jsDate.prototype.setMinutes = function() {
+ this.proxy.setMinutes.apply(this.proxy, arguments);
+ return this;
+ };
+
+ /**
+ * Implements Date functionality
+ */
+ jsDate.prototype.setMonth = function() {
+ this.proxy.setMonth.apply(this.proxy, arguments);
+ return this;
+ };
+
+ /**
+ * Implements Date functionality
+ */
+ jsDate.prototype.setSeconds = function() {
+ this.proxy.setSeconds.apply(this.proxy, arguments);
+ return this;
+ };
+
+ /**
+ * Implements Date functionality
+ */
+ jsDate.prototype.setTime = function(n) {
+ this.proxy.setTime(n);
+ return this;
+ };
+
+ /**
+ * Implements Date functionality
+ */
+ jsDate.prototype.setYear = function() {
+ this.proxy.setYear.apply(this.proxy, arguments);
+ return this;
+ };
+
+ /**
+ * Provide a formatted string representation of this date.
+ *
+ * @param {String} formatString A format string.
+ * See: {@link jsDate.formats}.
+ * @returns {String} Date String.
+ */
+
+ jsDate.prototype.strftime = function(formatString) {
+ formatString = formatString || this.formatString || jsDate.regional[this.locale]['formatString'];
+ return jsDate.strftime(this, formatString, this.syntax);
+ };
+
+ /**
+ * Return a String representation of this jsDate object.
+ * @returns {String} Date string.
+ */
+
+ jsDate.prototype.toString = function() {
+ return this.proxy.toString();
+ };
+
+ /**
+ * Convert the current date to an 8-digit integer (%Y%m%d)
+ *
+ * @returns {Integer}
+ */
+
+ jsDate.prototype.toYmdInt = function() {
+ return (this.proxy.getFullYear() * 10000) + (this.getMonthNumber() * 100) + this.proxy.getDate();
+ };
+
+ /**
+ * @namespace Holds localizations for month/day names.
+ * <p>jsDate attempts to detect locale when loaded and defaults to 'en'.
+ * If a localization is detected which is not available, jsDate defaults to 'en'.
+ * Additional localizations can be added after jsDate loads. After adding a localization,
+ * call the jsDate.regional.getLocale() method. Currently, en, fr and de are defined.</p>
+ *
+ * <p>Localizations must be an object and have the following properties defined: monthNames, monthNamesShort, dayNames, dayNamesShort and Localizations are added like:</p>
+ * <pre class="code">
+ * jsDate.regional['en'] = {
+ * monthNames : 'January February March April May June July August September October November December'.split(' '),
+ * monthNamesShort : 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' '),
+ * dayNames : 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday'.split(' '),
+ * dayNamesShort : 'Sun Mon Tue Wed Thu Fri Sat'.split(' ')
+ * };
+ * </pre>
+ * <p>After adding localizations, call <code>jsDate.regional.getLocale();</code> to update the locale setting with the
+ * new localizations.</p>
+ */
+
+ jsDate.regional = {
+ 'en': {
+ monthNames: ['January','February','March','April','May','June','July','August','September','October','November','December'],
+ monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun','Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ formatString: '%Y-%m-%d %H:%M:%S'
+ },
+
+ 'fr': {
+ monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+ monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun','Jul','Aoû','Sep','Oct','Nov','Déc'],
+ dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+ dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
+ formatString: '%Y-%m-%d %H:%M:%S'
+ },
+
+ 'de': {
+ monthNames: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],
+ monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'],
+ dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
+ dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+ formatString: '%Y-%m-%d %H:%M:%S'
+ },
+
+ 'es': {
+ monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio', 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
+ monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun', 'Jul','Ago','Sep','Oct','Nov','Dic'],
+ dayNames: ['Domingo','Lunes','Martes','Mi&eacute;rcoles','Jueves','Viernes','S&aacute;bado'],
+ dayNamesShort: ['Dom','Lun','Mar','Mi&eacute;','Juv','Vie','S&aacute;b'],
+ formatString: '%Y-%m-%d %H:%M:%S'
+ },
+
+ 'ru': {
+ monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
+ monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'],
+ dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
+ dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
+ formatString: '%Y-%m-%d %H:%M:%S'
+ },
+
+ 'ar': {
+ monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'آذار', 'حزيران','تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
+ monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
+ dayNames: ['السبت', 'الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة'],
+ dayNamesShort: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'],
+ formatString: '%Y-%m-%d %H:%M:%S'
+ },
+
+ 'pt': {
+ monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+ monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun','Jul','Ago','Set','Out','Nov','Dez'],
+ dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','S&aacute;bado'],
+ dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+ formatString: '%Y-%m-%d %H:%M:%S'
+ },
+
+ 'pt-BR': {
+ monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho', 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+ monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun','Jul','Ago','Set','Out','Nov','Dez'],
+ dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','S&aacute;bado'],
+ dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+ formatString: '%Y-%m-%d %H:%M:%S'
+ }
+
+
+ };
+
+ // Set english variants to 'en'
+ jsDate.regional['en-US'] = jsDate.regional['en-GB'] = jsDate.regional['en'];
+
+ /**
+ * Try to determine the users locale based on the lang attribute of the html page. Defaults to 'en'
+ * if it cannot figure out a locale of if the locale does not have a localization defined.
+ * @returns {String} locale
+ */
+
+ jsDate.regional.getLocale = function () {
+ var l = jsDate.config.defaultLocale;
+
+ if ( document && document.getElementsByTagName('html') && document.getElementsByTagName('html')[0].lang ) {
+ l = document.getElementsByTagName('html')[0].lang;
+ if (!jsDate.regional.hasOwnProperty(l)) {
+ l = jsDate.config.defaultLocale;
+ }
+ }
+
+ return l;
+ };
+
+ // ms in day
+ var day = 24 * 60 * 60 * 1000;
+
+ // padd a number with zeros
+ var addZeros = function(num, digits) {
+ num = String(num);
+ var i = digits - num.length;
+ var s = String(Math.pow(10, i)).slice(1);
+ return s.concat(num);
+ };
+
+ // representations used for calculating differences between dates.
+ // This borrows heavily from Ken Snyder's work.
+ var multipliers = {
+ millisecond: 1,
+ second: 1000,
+ minute: 60 * 1000,
+ hour: 60 * 60 * 1000,
+ day: day,
+ week: 7 * day,
+ month: {
+ // add a number of months
+ add: function(d, number) {
+ // add any years needed (increments of 12)
+ multipliers.year.add(d, Math[number > 0 ? 'floor' : 'ceil'](number / 12));
+ // ensure that we properly wrap betwen December and January
+ // 11 % 12 = 11
+ // 12 % 12 = 0
+ var prevMonth = d.getMonth() + (number % 12);
+ if (prevMonth == 12) {
+ prevMonth = 0;
+ d.setYear(d.getFullYear() + 1);
+ } else if (prevMonth == -1) {
+ prevMonth = 11;
+ d.setYear(d.getFullYear() - 1);
+ }
+ d.setMonth(prevMonth);
+ },
+ // get the number of months between two Date objects (decimal to the nearest day)
+ diff: function(d1, d2) {
+ // get the number of years
+ var diffYears = d1.getFullYear() - d2.getFullYear();
+ // get the number of remaining months
+ var diffMonths = d1.getMonth() - d2.getMonth() + (diffYears * 12);
+ // get the number of remaining days
+ var diffDays = d1.getDate() - d2.getDate();
+ // return the month difference with the days difference as a decimal
+ return diffMonths + (diffDays / 30);
+ }
+ },
+ year: {
+ // add a number of years
+ add: function(d, number) {
+ d.setYear(d.getFullYear() + Math[number > 0 ? 'floor' : 'ceil'](number));
+ },
+ // get the number of years between two Date objects (decimal to the nearest day)
+ diff: function(d1, d2) {
+ return multipliers.month.diff(d1, d2) / 12;
+ }
+ }
+ };
+ //
+ // Alias each multiplier with an 's' to allow 'year' and 'years' for example.
+ // This comes from Ken Snyders work.
+ //
+ for (var unit in multipliers) {
+ if (unit.substring(unit.length - 1) != 's') { // IE will iterate newly added properties :|
+ multipliers[unit + 's'] = multipliers[unit];
+ }
+ }
+
+ //
+ // take a jsDate instance and a format code and return the formatted value.
+ // This is a somewhat modified version of Ken Snyder's method.
+ //
+ var format = function(d, code, syntax) {
+ // if shorcut codes are used, recursively expand those.
+ if (jsDate.formats[syntax]["shortcuts"][code]) {
+ return jsDate.strftime(d, jsDate.formats[syntax]["shortcuts"][code], syntax);
+ } else {
+ // get the format code function and addZeros() argument
+ var getter = (jsDate.formats[syntax]["codes"][code] || '').split('.');
+ var nbr = d['get' + getter[0]] ? d['get' + getter[0]]() : '';
+ if (getter[1]) {
+ nbr = addZeros(nbr, getter[1]);
+ }
+ return nbr;
+ }
+ };
+
+ /**
+ * @static
+ * Static function for convert a date to a string according to a given format. Also acts as namespace for strftime format codes.
+ * <p>strftime formatting can be accomplished without creating a jsDate object by calling jsDate.strftime():</p>
+ * <pre class="code">
+ * var formattedDate = jsDate.strftime('Feb 8, 2006 8:48:32', '%Y-%m-%d %H:%M:%S');
+ * </pre>
+ * @param {String | Number | Array | jsDate&nbsp;Object | Date&nbsp;Object} date A parsable date string, JavaScript time stamp, Array of form [year, month, day, hours, minutes, seconds, milliseconds], jsDate Object or Date object.
+ * @param {String} formatString String with embedded date formatting codes.
+ * See: {@link jsDate.formats}.
+ * @param {String} syntax Optional syntax to use [default perl].
+ * @param {String} locale Optional locale to use.
+ * @returns {String} Formatted representation of the date.
+ */
+ //
+ // Logic as implemented here is very similar to Ken Snyder's Date Instance Methods.
+ //
+ jsDate.strftime = function(d, formatString, syntax, locale) {
+ var syn = 'perl';
+ var loc = jsDate.regional.getLocale();
+
+ // check if syntax and locale are available or reversed
+ if (syntax && jsDate.formats.hasOwnProperty(syntax)) {
+ syn = syntax;
+ }
+ else if (syntax && jsDate.regional.hasOwnProperty(syntax)) {
+ loc = syntax;
+ }
+
+ if (locale && jsDate.formats.hasOwnProperty(locale)) {
+ syn = locale;
+ }
+ else if (locale && jsDate.regional.hasOwnProperty(locale)) {
+ loc = locale;
+ }
+
+ if (get_type(d) != "[object Object]" || d._type != "jsDate") {
+ d = new jsDate(d);
+ d.locale = loc;
+ }
+ if (!formatString) {
+ formatString = d.formatString || jsDate.regional[loc]['formatString'];
+ }
+ // default the format string to year-month-day
+ var source = formatString || '%Y-%m-%d',
+ result = '',
+ match;
+ // replace each format code
+ while (source.length > 0) {
+ if (match = source.match(jsDate.formats[syn].codes.matcher)) {
+ result += source.slice(0, match.index);
+ result += (match[1] || '') + format(d, match[2], syn);
+ source = source.slice(match.index + match[0].length);
+ } else {
+ result += source;
+ source = '';
+ }
+ }
+ return result;
+ };
+
+ /**
+ * @namespace
+ * Namespace to hold format codes and format shortcuts. "perl" and "php" format codes
+ * and shortcuts are defined by default. Additional codes and shortcuts can be
+ * added like:
+ *
+ * <pre class="code">
+ * jsDate.formats["perl"] = {
+ * "codes": {
+ * matcher: /someregex/,
+ * Y: "fullYear", // name of "get" method without the "get",
+ * ..., // more codes
+ * },
+ * "shortcuts": {
+ * F: '%Y-%m-%d',
+ * ..., // more shortcuts
+ * }
+ * };
+ * </pre>
+ *
+ * <p>Additionally, ISO and SQL shortcuts are defined and can be accesses via:
+ * <code>jsDate.formats.ISO</code> and <code>jsDate.formats.SQL</code>
+ */
+
+ jsDate.formats = {
+ ISO:'%Y-%m-%dT%H:%M:%S.%N%G',
+ SQL:'%Y-%m-%d %H:%M:%S'
+ };
+
+ /**
+ * Perl format codes and shortcuts for strftime.
+ *
+ * A hash (object) of codes where each code must be an array where the first member is
+ * the name of a Date.prototype or jsDate.prototype function to call
+ * and optionally a second member indicating the number to pass to addZeros()
+ *
+ * <p>The following format codes are defined:</p>
+ *
+ * <pre class="code">
+ * Code Result Description
+ * == Years ==
+ * %Y 2008 Four-digit year
+ * %y 08 Two-digit year
+ *
+ * == Months ==
+ * %m 09 Two-digit month
+ * %#m 9 One or two-digit month
+ * %B September Full month name
+ * %b Sep Abbreviated month name
+ *
+ * == Days ==
+ * %d 05 Two-digit day of month
+ * %#d 5 One or two-digit day of month
+ * %e 5 One or two-digit day of month
+ * %A Sunday Full name of the day of the week
+ * %a Sun Abbreviated name of the day of the week
+ * %w 0 Number of the day of the week (0 = Sunday, 6 = Saturday)
+ *
+ * == Hours ==
+ * %H 23 Hours in 24-hour format (two digits)
+ * %#H 3 Hours in 24-hour integer format (one or two digits)
+ * %I 11 Hours in 12-hour format (two digits)
+ * %#I 3 Hours in 12-hour integer format (one or two digits)
+ * %p PM AM or PM
+ *
+ * == Minutes ==
+ * %M 09 Minutes (two digits)
+ * %#M 9 Minutes (one or two digits)
+ *
+ * == Seconds ==
+ * %S 02 Seconds (two digits)
+ * %#S 2 Seconds (one or two digits)
+ * %s 1206567625723 Unix timestamp (Seconds past 1970-01-01 00:00:00)
+ *
+ * == Milliseconds ==
+ * %N 008 Milliseconds (three digits)
+ * %#N 8 Milliseconds (one to three digits)
+ *
+ * == Timezone ==
+ * %O 360 difference in minutes between local time and GMT
+ * %Z Mountain Standard Time Name of timezone as reported by browser
+ * %G 06:00 Hours and minutes between GMT
+ *
+ * == Shortcuts ==
+ * %F 2008-03-26 %Y-%m-%d
+ * %T 05:06:30 %H:%M:%S
+ * %X 05:06:30 %H:%M:%S
+ * %x 03/26/08 %m/%d/%y
+ * %D 03/26/08 %m/%d/%y
+ * %#c Wed Mar 26 15:31:00 2008 %a %b %e %H:%M:%S %Y
+ * %v 3-Sep-2008 %e-%b-%Y
+ * %R 15:31 %H:%M
+ * %r 03:31:00 PM %I:%M:%S %p
+ *
+ * == Characters ==
+ * %n \n Newline
+ * %t \t Tab
+ * %% % Percent Symbol
+ * </pre>
+ *
+ * <p>Formatting shortcuts that will be translated into their longer version.
+ * Be sure that format shortcuts do not refer to themselves: this will cause an infinite loop.</p>
+ *
+ * <p>Format codes and format shortcuts can be redefined after the jsDate
+ * module is imported.</p>
+ *
+ * <p>Note that if you redefine the whole hash (object), you must supply a "matcher"
+ * regex for the parser. The default matcher is:</p>
+ *
+ * <code>/()%(#?(%|[a-z]))/i</code>
+ *
+ * <p>which corresponds to the Perl syntax used by default.</p>
+ *
+ * <p>By customizing the matcher and format codes, nearly any strftime functionality is possible.</p>
+ */
+
+ jsDate.formats.perl = {
+ codes: {
+ //
+ // 2-part regex matcher for format codes
+ //
+ // first match must be the character before the code (to account for escaping)
+ // second match must be the format code character(s)
+ //
+ matcher: /()%(#?(%|[a-z]))/i,
+ // year
+ Y: 'FullYear',
+ y: 'ShortYear.2',
+ // month
+ m: 'MonthNumber.2',
+ '#m': 'MonthNumber',
+ B: 'MonthName',
+ b: 'AbbrMonthName',
+ // day
+ d: 'Date.2',
+ '#d': 'Date',
+ e: 'Date',
+ A: 'DayName',
+ a: 'AbbrDayName',
+ w: 'Day',
+ // hours
+ H: 'Hours.2',
+ '#H': 'Hours',
+ I: 'Hours12.2',
+ '#I': 'Hours12',
+ p: 'AMPM',
+ // minutes
+ M: 'Minutes.2',
+ '#M': 'Minutes',
+ // seconds
+ S: 'Seconds.2',
+ '#S': 'Seconds',
+ s: 'Unix',
+ // milliseconds
+ N: 'Milliseconds.3',
+ '#N': 'Milliseconds',
+ // timezone
+ O: 'TimezoneOffset',
+ Z: 'TimezoneName',
+ G: 'GmtOffset'
+ },
+
+ shortcuts: {
+ // date
+ F: '%Y-%m-%d',
+ // time
+ T: '%H:%M:%S',
+ X: '%H:%M:%S',
+ // local format date
+ x: '%m/%d/%y',
+ D: '%m/%d/%y',
+ // local format extended
+ '#c': '%a %b %e %H:%M:%S %Y',
+ // local format short
+ v: '%e-%b-%Y',
+ R: '%H:%M',
+ r: '%I:%M:%S %p',
+ // tab and newline
+ t: '\t',
+ n: '\n',
+ '%': '%'
+ }
+ };
+
+ /**
+ * PHP format codes and shortcuts for strftime.
+ *
+ * A hash (object) of codes where each code must be an array where the first member is
+ * the name of a Date.prototype or jsDate.prototype function to call
+ * and optionally a second member indicating the number to pass to addZeros()
+ *
+ * <p>The following format codes are defined:</p>
+ *
+ * <pre class="code">
+ * Code Result Description
+ * === Days ===
+ * %a Sun through Sat An abbreviated textual representation of the day
+ * %A Sunday - Saturday A full textual representation of the day
+ * %d 01 to 31 Two-digit day of the month (with leading zeros)
+ * %e 1 to 31 Day of the month, with a space preceding single digits.
+ * %j 001 to 366 Day of the year, 3 digits with leading zeros
+ * %u 1 - 7 (Mon - Sun) ISO-8601 numeric representation of the day of the week
+ * %w 0 - 6 (Sun - Sat) Numeric representation of the day of the week
+ *
+ * === Week ===
+ * %U 13 Full Week number, starting with the first Sunday as the first week
+ * %V 01 through 53 ISO-8601:1988 week number, starting with the first week of the year
+ * with at least 4 weekdays, with Monday being the start of the week
+ * %W 46 A numeric representation of the week of the year,
+ * starting with the first Monday as the first week
+ * === Month ===
+ * %b Jan through Dec Abbreviated month name, based on the locale
+ * %B January - December Full month name, based on the locale
+ * %h Jan through Dec Abbreviated month name, based on the locale (an alias of %b)
+ * %m 01 - 12 (Jan - Dec) Two digit representation of the month
+ *
+ * === Year ===
+ * %C 19 Two digit century (year/100, truncated to an integer)
+ * %y 09 for 2009 Two digit year
+ * %Y 2038 Four digit year
+ *
+ * === Time ===
+ * %H 00 through 23 Two digit representation of the hour in 24-hour format
+ * %I 01 through 12 Two digit representation of the hour in 12-hour format
+ * %l 1 through 12 Hour in 12-hour format, with a space preceeding single digits
+ * %M 00 through 59 Two digit representation of the minute
+ * %p AM/PM UPPER-CASE 'AM' or 'PM' based on the given time
+ * %P am/pm lower-case 'am' or 'pm' based on the given time
+ * %r 09:34:17 PM Same as %I:%M:%S %p
+ * %R 00:35 Same as %H:%M
+ * %S 00 through 59 Two digit representation of the second
+ * %T 21:34:17 Same as %H:%M:%S
+ * %X 03:59:16 Preferred time representation based on locale, without the date
+ * %z -0500 or EST Either the time zone offset from UTC or the abbreviation
+ * %Z -0500 or EST The time zone offset/abbreviation option NOT given by %z
+ *
+ * === Time and Date ===
+ * %D 02/05/09 Same as %m/%d/%y
+ * %F 2009-02-05 Same as %Y-%m-%d (commonly used in database datestamps)
+ * %s 305815200 Unix Epoch Time timestamp (same as the time() function)
+ * %x 02/05/09 Preferred date representation, without the time
+ *
+ * === Miscellaneous ===
+ * %n --- A newline character (\n)
+ * %t --- A Tab character (\t)
+ * %% --- A literal percentage character (%)
+ * </pre>
+ */
+
+ jsDate.formats.php = {
+ codes: {
+ //
+ // 2-part regex matcher for format codes
+ //
+ // first match must be the character before the code (to account for escaping)
+ // second match must be the format code character(s)
+ //
+ matcher: /()%((%|[a-z]))/i,
+ // day
+ a: 'AbbrDayName',
+ A: 'DayName',
+ d: 'Date.2',
+ e: 'Date',
+ j: 'DayOfYear.3',
+ u: 'DayOfWeek',
+ w: 'Day',
+ // week
+ U: 'FullWeekOfYear.2',
+ V: 'IsoWeek.2',
+ W: 'WeekOfYear.2',
+ // month
+ b: 'AbbrMonthName',
+ B: 'MonthName',
+ m: 'MonthNumber.2',
+ h: 'AbbrMonthName',
+ // year
+ C: 'Century.2',
+ y: 'ShortYear.2',
+ Y: 'FullYear',
+ // time
+ H: 'Hours.2',
+ I: 'Hours12.2',
+ l: 'Hours12',
+ p: 'AMPM',
+ P: 'AmPm',
+ M: 'Minutes.2',
+ S: 'Seconds.2',
+ s: 'Unix',
+ O: 'TimezoneOffset',
+ z: 'GmtOffset',
+ Z: 'TimezoneAbbr'
+ },
+
+ shortcuts: {
+ D: '%m/%d/%y',
+ F: '%Y-%m-%d',
+ T: '%H:%M:%S',
+ X: '%H:%M:%S',
+ x: '%m/%d/%y',
+ R: '%H:%M',
+ r: '%I:%M:%S %p',
+ t: '\t',
+ n: '\n',
+ '%': '%'
+ }
+ };
+ //
+ // Conceptually, the logic implemented here is similar to Ken Snyder's Date Instance Methods.
+ // I use his idea of a set of parsers which can be regular expressions or functions,
+ // iterating through those, and then seeing if Date.parse() will create a date.
+ // The parser expressions and functions are a little different and some bugs have been
+ // worked out. Also, a lot of "pre-parsing" is done to fix implementation
+ // variations of Date.parse() between browsers.
+ //
+ jsDate.createDate = function(date) {
+ // if passing in multiple arguments, try Date constructor
+ if (date == null) {
+ return new Date();
+ }
+ // If the passed value is already a date object, return it
+ if (date instanceof Date) {
+ return date;
+ }
+ // if (typeof date == 'number') return new Date(date * 1000);
+ // If the passed value is an integer, interpret it as a javascript timestamp
+ if (typeof date == 'number') {
+ return new Date(date);
+ }
+
+ // Before passing strings into Date.parse(), have to normalize them for certain conditions.
+ // If strings are not formatted staccording to the EcmaScript spec, results from Date parse will be implementation dependent.
+ //
+ // For example:
+ // * FF and Opera assume 2 digit dates are pre y2k, Chome assumes <50 is pre y2k, 50+ is 21st century.
+ // * Chrome will correctly parse '1984-1-25' into localtime, FF and Opera will not parse.
+ // * Both FF, Chrome and Opera will parse '1984/1/25' into localtime.
+
+ // remove leading and trailing spaces
+ var parsable = String(date).replace(/^\s*(.+)\s*$/g, '$1');
+
+ // replace dahses (-) with slashes (/) in dates like n[nnn]/n[n]/n[nnn]
+ parsable = parsable.replace(/^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,4})/, "$1/$2/$3");
+
+ /////////
+ // Need to check for '15-Dec-09' also.
+ // FF will not parse, but Chrome will.
+ // Chrome will set date to 2009 as well.
+ /////////
+
+ // first check for 'dd-mmm-yyyy' or 'dd/mmm/yyyy' like '15-Dec-2010'
+ parsable = parsable.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{4})/i, "$1 $2 $3");
+
+ // Now check for 'dd-mmm-yy' or 'dd/mmm/yy' and normalize years to default century.
+ var match = parsable.match(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i);
+ if (match && match.length > 3) {
+ var m3 = parseFloat(match[3]);
+ var ny = jsDate.config.defaultCentury + m3;
+ ny = String(ny);
+
+ // now replace 2 digit year with 4 digit year
+ parsable = parsable.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i, match[1] +' '+ match[2] +' '+ ny);
+
+ }
+
+ // Check for '1/19/70 8:14PM'
+ // where starts with mm/dd/yy or yy/mm/dd and have something after
+ // Check if 1st postiion is greater than 31, assume it is year.
+ // Assme all 2 digit years are 1900's.
+ // Finally, change them into US style mm/dd/yyyy representations.
+ match = parsable.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})[^0-9]/);
+
+ function h1(parsable, match) {
+ var m1 = parseFloat(match[1]);
+ var m2 = parseFloat(match[2]);
+ var m3 = parseFloat(match[3]);
+ var cent = jsDate.config.defaultCentury;
+ var ny, nd, nm, str;
+
+ if (m1 > 31) { // first number is a year
+ nd = m3;
+ nm = m2;
+ ny = cent + m1;
+ }
+
+ else { // last number is the year
+ nd = m2;
+ nm = m1;
+ ny = cent + m3;
+ }
+
+ str = nm+'/'+nd+'/'+ny;
+
+ // now replace 2 digit year with 4 digit year
+ return parsable.replace(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})/, str);
+
+ }
+
+ if (match && match.length > 3) {
+ parsable = h1(parsable, match);
+ }
+
+ // Now check for '1/19/70' with nothing after and do as above
+ var match = parsable.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})$/);
+
+ if (match && match.length > 3) {
+ parsable = h1(parsable, match);
+ }
+
+
+ var i = 0;
+ var length = jsDate.matchers.length;
+ var pattern,
+ ms,
+ current = parsable,
+ obj;
+ while (i < length) {
+ ms = Date.parse(current);
+ if (!isNaN(ms)) {
+ return new Date(ms);
+ }
+ pattern = jsDate.matchers[i];
+ if (typeof pattern == 'function') {
+ obj = pattern.call(jsDate, current);
+ if (obj instanceof Date) {
+ return obj;
+ }
+ } else {
+ current = parsable.replace(pattern[0], pattern[1]);
+ }
+ i++;
+ }
+ return NaN;
+ };
+
+
+ /**
+ * @static
+ * Handy static utility function to return the number of days in a given month.
+ * @param {Integer} year Year
+ * @param {Integer} month Month (1-12)
+ * @returns {Integer} Number of days in the month.
+ */
+ //
+ // handy utility method Borrowed right from Ken Snyder's Date Instance Mehtods.
+ //
+ jsDate.daysInMonth = function(year, month) {
+ if (month == 2) {
+ return new Date(year, 1, 29).getDate() == 29 ? 29 : 28;
+ }
+ return [undefined,31,undefined,31,30,31,30,31,31,30,31,30,31][month];
+ };
+
+
+ //
+ // An Array of regular expressions or functions that will attempt to match the date string.
+ // Functions are called with scope of a jsDate instance.
+ //
+ jsDate.matchers = [
+ // convert dd.mmm.yyyy to mm/dd/yyyy (world date to US date).
+ [/(3[01]|[0-2]\d)\s*\.\s*(1[0-2]|0\d)\s*\.\s*([1-9]\d{3})/, '$2/$1/$3'],
+ // convert yyyy-mm-dd to mm/dd/yyyy (ISO date to US date).
+ [/([1-9]\d{3})\s*-\s*(1[0-2]|0\d)\s*-\s*(3[01]|[0-2]\d)/, '$2/$3/$1'],
+ // Handle 12 hour or 24 hour time with milliseconds am/pm and optional date part.
+ function(str) {
+ var match = str.match(/^(?:(.+)\s+)?([012]?\d)(?:\s*\:\s*(\d\d))?(?:\s*\:\s*(\d\d(\.\d*)?))?\s*(am|pm)?\s*$/i);
+ // opt. date hour opt. minute opt. second opt. msec opt. am or pm
+ if (match) {
+ if (match[1]) {
+ var d = this.createDate(match[1]);
+ if (isNaN(d)) {
+ return;
+ }
+ } else {
+ var d = new Date();
+ d.setMilliseconds(0);
+ }
+ var hour = parseFloat(match[2]);
+ if (match[6]) {
+ hour = match[6].toLowerCase() == 'am' ? (hour == 12 ? 0 : hour) : (hour == 12 ? 12 : hour + 12);
+ }
+ d.setHours(hour, parseInt(match[3] || 0, 10), parseInt(match[4] || 0, 10), ((parseFloat(match[5] || 0)) || 0)*1000);
+ return d;
+ }
+ else {
+ return str;
+ }
+ },
+ // Handle ISO timestamp with time zone.
+ function(str) {
+ var match = str.match(/^(?:(.+))[T|\s+]([012]\d)(?:\:(\d\d))(?:\:(\d\d))(?:\.\d+)([\+\-]\d\d\:\d\d)$/i);
+ if (match) {
+ if (match[1]) {
+ var d = this.createDate(match[1]);
+ if (isNaN(d)) {
+ return;
+ }
+ } else {
+ var d = new Date();
+ d.setMilliseconds(0);
+ }
+ var hour = parseFloat(match[2]);
+ d.setHours(hour, parseInt(match[3], 10), parseInt(match[4], 10), parseFloat(match[5])*1000);
+ return d;
+ }
+ else {
+ return str;
+ }
+ },
+ // Try to match ambiguous strings like 12/8/22.
+ // Use FF date assumption that 2 digit years are 20th century (i.e. 1900's).
+ // This may be redundant with pre processing of date already performed.
+ function(str) {
+ var match = str.match(/^([0-3]?\d)\s*[-\/.\s]{1}\s*([a-zA-Z]{3,9})\s*[-\/.\s]{1}\s*([0-3]?\d)$/);
+ if (match) {
+ var d = new Date();
+ var cent = jsDate.config.defaultCentury;
+ var m1 = parseFloat(match[1]);
+ var m3 = parseFloat(match[3]);
+ var ny, nd, nm;
+ if (m1 > 31) { // first number is a year
+ nd = m3;
+ ny = cent + m1;
+ }
+
+ else { // last number is the year
+ nd = m1;
+ ny = cent + m3;
+ }
+
+ var nm = inArray(match[2], jsDate.regional[jsDate.regional.getLocale()]["monthNamesShort"]);
+
+ if (nm == -1) {
+ nm = inArray(match[2], jsDate.regional[jsDate.regional.getLocale()]["monthNames"]);
+ }
+
+ d.setFullYear(ny, nm, nd);
+ d.setHours(0,0,0,0);
+ return d;
+ }
+
+ else {
+ return str;
+ }
+ }
+ ];
+
+ //
+ // I think John Reisig published this method on his blog, ejohn.
+ //
+ function inArray( elem, array ) {
+ if ( array.indexOf ) {
+ return array.indexOf( elem );
+ }
+
+ for ( var i = 0, length = array.length; i < length; i++ ) {
+ if ( array[ i ] === elem ) {
+ return i;
+ }
+ }
+
+ return -1;
+ }
+
+ //
+ // Thanks to Kangax, Christian Sciberras and Stack Overflow for this method.
+ //
+ function get_type(thing){
+ if(thing===null) return "[object Null]"; // special case
+ return Object.prototype.toString.call(thing);
+ }
+
+ $.jsDate = jsDate;
+
+
+ /**
+ * JavaScript printf/sprintf functions.
+ *
+ * This code has been adapted from the publicly available sprintf methods
+ * by Ash Searle. His original header follows:
+ *
+ * This code is unrestricted: you are free to use it however you like.
+ *
+ * The functions should work as expected, performing left or right alignment,
+ * truncating strings, outputting numbers with a required precision etc.
+ *
+ * For complex cases, these functions follow the Perl implementations of
+ * (s)printf, allowing arguments to be passed out-of-order, and to set the
+ * precision or length of the output based on arguments instead of fixed
+ * numbers.
+ *
+ * See http://perldoc.perl.org/functions/sprintf.html for more information.
+ *
+ * Implemented:
+ * - zero and space-padding
+ * - right and left-alignment,
+ * - base X prefix (binary, octal and hex)
+ * - positive number prefix
+ * - (minimum) width
+ * - precision / truncation / maximum width
+ * - out of order arguments
+ *
+ * Not implemented (yet):
+ * - vector flag
+ * - size (bytes, words, long-words etc.)
+ *
+ * Will not implement:
+ * - %n or %p (no pass-by-reference in JavaScript)
+ *
+ * @version 2007.04.27
+ * @author Ash Searle
+ *
+ * You can see the original work and comments on his blog:
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ */
+
+ /**
+ * @Modifications 2009.05.26
+ * @author Chris Leonello
+ *
+ * Added %p %P specifier
+ * Acts like %g or %G but will not add more significant digits to the output than present in the input.
+ * Example:
+ * Format: '%.3p', Input: 0.012, Output: 0.012
+ * Format: '%.3g', Input: 0.012, Output: 0.0120
+ * Format: '%.4p', Input: 12.0, Output: 12.0
+ * Format: '%.4g', Input: 12.0, Output: 12.00
+ * Format: '%.4p', Input: 4.321e-5, Output: 4.321e-5
+ * Format: '%.4g', Input: 4.321e-5, Output: 4.3210e-5
+ *
+ * Example:
+ * >>> $.jqplot.sprintf('%.2f, %d', 23.3452, 43.23)
+ * "23.35, 43"
+ * >>> $.jqplot.sprintf("no value: %n, decimal with thousands separator: %'d", 23.3452, 433524)
+ * "no value: , decimal with thousands separator: 433,524"
+ */
+ $.jqplot.sprintf = function() {
+ function pad(str, len, chr, leftJustify) {
+ var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr);
+ return leftJustify ? str + padding : padding + str;
+
+ }
+
+ function thousand_separate(value) {
+ var value_str = new String(value);
+ for (var i=10; i>0; i--) {
+ if (value_str == (value_str = value_str.replace(/^(\d+)(\d{3})/, "$1"+$.jqplot.sprintf.thousandsSeparator+"$2"))) break;
+ }
+ return value_str;
+ }
+
+ function justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace) {
+ var diff = minWidth - value.length;
+ if (diff > 0) {
+ var spchar = ' ';
+ if (htmlSpace) { spchar = '&nbsp;'; }
+ if (leftJustify || !zeroPad) {
+ value = pad(value, minWidth, spchar, leftJustify);
+ } else {
+ value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length);
+ }
+ }
+ return value;
+ }
+
+ function formatBaseX(value, base, prefix, leftJustify, minWidth, precision, zeroPad, htmlSpace) {
+ // Note: casts negative numbers to positive ones
+ var number = value >>> 0;
+ prefix = prefix && number && {'2': '0b', '8': '0', '16': '0x'}[base] || '';
+ value = prefix + pad(number.toString(base), precision || 0, '0', false);
+ return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace);
+ }
+
+ function formatString(value, leftJustify, minWidth, precision, zeroPad, htmlSpace) {
+ if (precision != null) {
+ value = value.slice(0, precision);
+ }
+ return justify(value, '', leftJustify, minWidth, zeroPad, htmlSpace);
+ }
+
+ var a = arguments, i = 0, format = a[i++];
+
+ return format.replace($.jqplot.sprintf.regex, function(substring, valueIndex, flags, minWidth, _, precision, type) {
+ if (substring == '%%') { return '%'; }
+
+ // parse flags
+ var leftJustify = false, positivePrefix = '', zeroPad = false, prefixBaseX = false, htmlSpace = false, thousandSeparation = false;
+ for (var j = 0; flags && j < flags.length; j++) switch (flags.charAt(j)) {
+ case ' ': positivePrefix = ' '; break;
+ case '+': positivePrefix = '+'; break;
+ case '-': leftJustify = true; break;
+ case '0': zeroPad = true; break;
+ case '#': prefixBaseX = true; break;
+ case '&': htmlSpace = true; break;
+ case '\'': thousandSeparation = true; break;
+ }
+
+ // parameters may be null, undefined, empty-string or real valued
+ // we want to ignore null, undefined and empty-string values
+
+ if (!minWidth) {
+ minWidth = 0;
+ }
+ else if (minWidth == '*') {
+ minWidth = +a[i++];
+ }
+ else if (minWidth.charAt(0) == '*') {
+ minWidth = +a[minWidth.slice(1, -1)];
+ }
+ else {
+ minWidth = +minWidth;
+ }
+
+ // Note: undocumented perl feature:
+ if (minWidth < 0) {
+ minWidth = -minWidth;
+ leftJustify = true;
+ }
+
+ if (!isFinite(minWidth)) {
+ throw new Error('$.jqplot.sprintf: (minimum-)width must be finite');
+ }
+
+ if (!precision) {
+ precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : void(0);
+ }
+ else if (precision == '*') {
+ precision = +a[i++];
+ }
+ else if (precision.charAt(0) == '*') {
+ precision = +a[precision.slice(1, -1)];
+ }
+ else {
+ precision = +precision;
+ }
+
+ // grab value using valueIndex if required?
+ var value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++];
+
+ switch (type) {
+ case 's': {
+ if (value == null) {
+ return '';
+ }
+ return formatString(String(value), leftJustify, minWidth, precision, zeroPad, htmlSpace);
+ }
+ case 'c': return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad, htmlSpace);
+ case 'b': return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad,htmlSpace);
+ case 'o': return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace);
+ case 'x': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace);
+ case 'X': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace).toUpperCase();
+ case 'u': return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace);
+ case 'i': {
+ var number = parseInt(+value, 10);
+ if (isNaN(number)) {
+ return '';
+ }
+ var prefix = number < 0 ? '-' : positivePrefix;
+ var number_str = thousandSeparation ? thousand_separate(String(Math.abs(number))): String(Math.abs(number));
+ value = prefix + pad(number_str, precision, '0', false);
+ //value = prefix + pad(String(Math.abs(number)), precision, '0', false);
+ return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace);
+ }
+ case 'd': {
+ var number = Math.round(+value);
+ if (isNaN(number)) {
+ return '';
+ }
+ var prefix = number < 0 ? '-' : positivePrefix;
+ var number_str = thousandSeparation ? thousand_separate(String(Math.abs(number))): String(Math.abs(number));
+ value = prefix + pad(number_str, precision, '0', false);
+ return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace);
+ }
+ case 'e':
+ case 'E':
+ case 'f':
+ case 'F':
+ case 'g':
+ case 'G':
+ {
+ var number = +value;
+ if (isNaN(number)) {
+ return '';
+ }
+ var prefix = number < 0 ? '-' : positivePrefix;
+ var method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())];
+ var textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2];
+ var number_str = Math.abs(number)[method](precision);
+ number_str = thousandSeparation ? thousand_separate(number_str): number_str;
+ value = prefix + number_str;
+ var justified = justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace)[textTransform]();
+
+ if ($.jqplot.sprintf.decimalMark !== '.' && $.jqplot.sprintf.decimalMark !== $.jqplot.sprintf.thousandsSeparator) {
+ return justified.replace(/\./, $.jqplot.sprintf.decimalMark);
+ } else {
+ return justified;
+ }
+ }
+ case 'p':
+ case 'P':
+ {
+ // make sure number is a number
+ var number = +value;
+ if (isNaN(number)) {
+ return '';
+ }
+ var prefix = number < 0 ? '-' : positivePrefix;
+
+ var parts = String(Number(Math.abs(number)).toExponential()).split(/e|E/);
+ var sd = (parts[0].indexOf('.') != -1) ? parts[0].length - 1 : parts[0].length;
+ var zeros = (parts[1] < 0) ? -parts[1] - 1 : 0;
+
+ if (Math.abs(number) < 1) {
+ if (sd + zeros <= precision) {
+ value = prefix + Math.abs(number).toPrecision(sd);
+ }
+ else {
+ if (sd <= precision - 1) {
+ value = prefix + Math.abs(number).toExponential(sd-1);
+ }
+ else {
+ value = prefix + Math.abs(number).toExponential(precision-1);
+ }
+ }
+ }
+ else {
+ var prec = (sd <= precision) ? sd : precision;
+ value = prefix + Math.abs(number).toPrecision(prec);
+ }
+ var textTransform = ['toString', 'toUpperCase']['pP'.indexOf(type) % 2];
+ return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace)[textTransform]();
+ }
+ case 'n': return '';
+ default: return substring;
+ }
+ });
+ };
+
+ $.jqplot.sprintf.thousandsSeparator = ',';
+ // Specifies the decimal mark for floating point values. By default a period '.'
+ // is used. If you change this value to for example a comma be sure to also
+ // change the thousands separator or else this won't work since a simple String
+ // replace is used (replacing all periods with the mark specified here).
+ $.jqplot.sprintf.decimalMark = '.';
+
+ $.jqplot.sprintf.regex = /%%|%(\d+\$)?([-+#0&\' ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([nAscboxXuidfegpEGP])/g;
+
+ $.jqplot.getSignificantFigures = function(number) {
+ var parts = String(Number(Math.abs(number)).toExponential()).split(/e|E/);
+ // total significant digits
+ var sd = (parts[0].indexOf('.') != -1) ? parts[0].length - 1 : parts[0].length;
+ var zeros = (parts[1] < 0) ? -parts[1] - 1 : 0;
+ // exponent
+ var expn = parseInt(parts[1], 10);
+ // digits to the left of the decimal place
+ var dleft = (expn + 1 > 0) ? expn + 1 : 0;
+ // digits to the right of the decimal place
+ var dright = (sd <= dleft) ? 0 : sd - expn - 1;
+ return {significantDigits: sd, digitsLeft: dleft, digitsRight: dright, zeros: zeros, exponent: expn} ;
+ };
+
+ $.jqplot.getPrecision = function(number) {
+ return $.jqplot.getSignificantFigures(number).digitsRight;
+ };
+
+})(jQuery);
+
+
+ var backCompat = $.uiBackCompat !== false;
+
+ $.jqplot.effects = {
+ effect: {}
+ };
+
+ // prefix used for storing data on .data()
+ var dataSpace = "jqplot.storage.";
+
+ /******************************************************************************/
+ /*********************************** EFFECTS **********************************/
+ /******************************************************************************/
+
+ $.extend( $.jqplot.effects, {
+ version: "1.9pre",
+
+ // Saves a set of properties in a data storage
+ save: function( element, set ) {
+ for( var i=0; i < set.length; i++ ) {
+ if ( set[ i ] !== null ) {
+ element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
+ }
+ }
+ },
+
+ // Restores a set of previously saved properties from a data storage
+ restore: function( element, set ) {
+ for( var i=0; i < set.length; i++ ) {
+ if ( set[ i ] !== null ) {
+ element.css( set[ i ], element.data( dataSpace + set[ i ] ) );
+ }
+ }
+ },
+
+ setMode: function( el, mode ) {
+ if (mode === "toggle") {
+ mode = el.is( ":hidden" ) ? "show" : "hide";
+ }
+ return mode;
+ },
+
+ // Wraps the element around a wrapper that copies position properties
+ createWrapper: function( element ) {
+
+ // if the element is already wrapped, return it
+ if ( element.parent().is( ".ui-effects-wrapper" )) {
+ return element.parent();
+ }
+
+ // wrap the element
+ var props = {
+ width: element.outerWidth(true),
+ height: element.outerHeight(true),
+ "float": element.css( "float" )
+ },
+ wrapper = $( "<div></div>" )
+ .addClass( "ui-effects-wrapper" )
+ .css({
+ fontSize: "100%",
+ background: "transparent",
+ border: "none",
+ margin: 0,
+ padding: 0
+ }),
+ // Store the size in case width/height are defined in % - Fixes #5245
+ size = {
+ width: element.width(),
+ height: element.height()
+ },
+ active = document.activeElement;
+
+ element.wrap( wrapper );
+
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+ $( active ).focus();
+ }
+
+ wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element
+
+ // transfer positioning properties to the wrapper
+ if ( element.css( "position" ) === "static" ) {
+ wrapper.css({ position: "relative" });
+ element.css({ position: "relative" });
+ } else {
+ $.extend( props, {
+ position: element.css( "position" ),
+ zIndex: element.css( "z-index" )
+ });
+ $.each([ "top", "left", "bottom", "right" ], function(i, pos) {
+ props[ pos ] = element.css( pos );
+ if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
+ props[ pos ] = "auto";
+ }
+ });
+ element.css({
+ position: "relative",
+ top: 0,
+ left: 0,
+ right: "auto",
+ bottom: "auto"
+ });
+ }
+ element.css(size);
+
+ return wrapper.css( props ).show();
+ },
+
+ removeWrapper: function( element ) {
+ var active = document.activeElement;
+
+ if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+ element.parent().replaceWith( element );
+
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+ $( active ).focus();
+ }
+ }
+
+
+ return element;
+ }
+ });
+
+ // return an effect options object for the given parameters:
+ function _normalizeArguments( effect, options, speed, callback ) {
+
+ // short path for passing an effect options object:
+ if ( $.isPlainObject( effect ) ) {
+ return effect;
+ }
+
+ // convert to an object
+ effect = { effect: effect };
+
+ // catch (effect)
+ if ( options === undefined ) {
+ options = {};
+ }
+
+ // catch (effect, callback)
+ if ( $.isFunction( options ) ) {
+ callback = options;
+ speed = null;
+ options = {};
+ }
+
+ // catch (effect, speed, ?)
+ if ( $.type( options ) === "number" || $.fx.speeds[ options ]) {
+ callback = speed;
+ speed = options;
+ options = {};
+ }
+
+ // catch (effect, options, callback)
+ if ( $.isFunction( speed ) ) {
+ callback = speed;
+ speed = null;
+ }
+
+ // add options to effect
+ if ( options ) {
+ $.extend( effect, options );
+ }
+
+ speed = speed || options.duration;
+ effect.duration = $.fx.off ? 0 : typeof speed === "number"
+ ? speed : speed in $.fx.speeds ? $.fx.speeds[ speed ] : $.fx.speeds._default;
+
+ effect.complete = callback || options.complete;
+
+ return effect;
+ }
+
+ function standardSpeed( speed ) {
+ // valid standard speeds
+ if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) {
+ return true;
+ }
+
+ // invalid strings - treat as "normal" speed
+ if ( typeof speed === "string" && !$.jqplot.effects.effect[ speed ] ) {
+ // TODO: remove in 2.0 (#7115)
+ if ( backCompat && $.jqplot.effects[ speed ] ) {
+ return false;
+ }
+ return true;
+ }
+
+ return false;
+ }
+
+ $.fn.extend({
+ jqplotEffect: function( effect, options, speed, callback ) {
+ var args = _normalizeArguments.apply( this, arguments ),
+ mode = args.mode,
+ queue = args.queue,
+ effectMethod = $.jqplot.effects.effect[ args.effect ],
+
+ // DEPRECATED: remove in 2.0 (#7115)
+ oldEffectMethod = !effectMethod && backCompat && $.jqplot.effects[ args.effect ];
+
+ if ( $.fx.off || !( effectMethod || oldEffectMethod ) ) {
+ // delegate to the original method (e.g., .show()) if possible
+ if ( mode ) {
+ return this[ mode ]( args.duration, args.complete );
+ } else {
+ return this.each( function() {
+ if ( args.complete ) {
+ args.complete.call( this );
+ }
+ });
+ }
+ }
+
+ function run( next ) {
+ var elem = $( this ),
+ complete = args.complete,
+ mode = args.mode;
+
+ function done() {
+ if ( $.isFunction( complete ) ) {
+ complete.call( elem[0] );
+ }
+ if ( $.isFunction( next ) ) {
+ next();
+ }
+ }
+
+ // if the element is hiddden and mode is hide,
+ // or element is visible and mode is show
+ if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+ done();
+ } else {
+ effectMethod.call( elem[0], args, done );
+ }
+ }
+
+ // TODO: remove this check in 2.0, effectMethod will always be true
+ if ( effectMethod ) {
+ return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
+ } else {
+ // DEPRECATED: remove in 2.0 (#7115)
+ return oldEffectMethod.call(this, {
+ options: args,
+ duration: args.duration,
+ callback: args.complete,
+ mode: args.mode
+ });
+ }
+ }
+ });
+
+
+
+
+ var rvertical = /up|down|vertical/,
+ rpositivemotion = /up|left|vertical|horizontal/;
+
+ $.jqplot.effects.effect.blind = function( o, done ) {
+ // Create element
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.jqplot.effects.setMode( el, o.mode || "hide" ),
+ direction = o.direction || "up",
+ vertical = rvertical.test( direction ),
+ ref = vertical ? "height" : "width",
+ ref2 = vertical ? "top" : "left",
+ motion = rpositivemotion.test( direction ),
+ animation = {},
+ show = mode === "show",
+ wrapper, distance, top;
+
+ // // if already wrapped, the wrapper's properties are my property. #6245
+ if ( el.parent().is( ".ui-effects-wrapper" ) ) {
+ $.jqplot.effects.save( el.parent(), props );
+ } else {
+ $.jqplot.effects.save( el, props );
+ }
+ el.show();
+ top = parseInt(el.css('top'), 10);
+ wrapper = $.jqplot.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+
+ distance = vertical ? wrapper[ ref ]() + top : wrapper[ ref ]();
+
+ animation[ ref ] = show ? String(distance) : '0';
+ if ( !motion ) {
+ el
+ .css( vertical ? "bottom" : "right", 0 )
+ .css( vertical ? "top" : "left", "" )
+ .css({ position: "absolute" });
+ animation[ ref2 ] = show ? '0' : String(distance);
+ }
+
+ // // start at 0 if we are showing
+ if ( show ) {
+ wrapper.css( ref, 0 );
+ if ( ! motion ) {
+ wrapper.css( ref2, distance );
+ }
+ }
+
+ // // Animate
+ wrapper.animate( animation, {
+ duration: o.duration,
+ easing: o.easing,
+ queue: false,
+ complete: function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.jqplot.effects.restore( el, props );
+ $.jqplot.effects.removeWrapper( el );
+ done();
+ }
+ });
+
+ };
+
+
diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.css b/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.css
new file mode 100644
index 00000000..de15fff5
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.css
@@ -0,0 +1 @@
+.jqplot-target{position:relative;color:#666;font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;font-size:1em;}.jqplot-axis{font-size:.75em;}.jqplot-xaxis{margin-top:10px;}.jqplot-x2axis{margin-bottom:10px;}.jqplot-yaxis{margin-right:10px;}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-left:10px;margin-right:10px;}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick{position:absolute;white-space:pre;}.jqplot-xaxis-tick{top:0;left:15px;vertical-align:top;}.jqplot-x2axis-tick{bottom:0;left:15px;vertical-align:bottom;}.jqplot-yaxis-tick{right:0;top:15px;text-align:right;}.jqplot-yaxis-tick.jqplot-breakTick{right:-20px;margin-right:0;padding:1px 5px 1px 5px;z-index:2;font-size:1.5em;}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{left:0;top:15px;text-align:left;}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap;}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute;}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute;}.jqplot-yaxis-label{margin-right:10px;font-size:11pt;position:absolute;}.jqplot-yMidAxis-label{font-size:11pt;position:absolute;}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-left:10px;position:absolute;}.jqplot-meterGauge-tick{font-size:.75em;color:#999;}.jqplot-meterGauge-label{font-size:1em;color:#999;}table.jqplot-table-legend{margin-top:12px;margin-bottom:12px;margin-left:12px;margin-right:12px;}table.jqplot-table-legend,table.jqplot-cursor-legend{background-color:rgba(255,255,255,0.6);border:1px solid #ccc;position:absolute;font-size:.75em;}td.jqplot-table-legend{vertical-align:middle;}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer;}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through;}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px;}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-left-width:6px;border-right-width:6px;border-top-style:solid;border-bottom-style:solid;border-left-style:solid;border-right-style:solid;}.jqplot-title{top:0;left:0;padding-bottom:.5em;font-size:1.2em;}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em;}.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,0.5);padding:1px;}.jqplot-highlighter-tooltip,.jqplot-canvasOverlay-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,0.5);padding:1px;}.jqplot-point-label{font-size:.75em;z-index:2;}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center;}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em;}.jqplot-error{text-align:center;}.jqplot-error-message{position:relative;top:46%;display:inline-block;}div.jqplot-bubble-label{font-size:.8em;padding-left:2px;padding-right:2px;color:rgb(20%,20%,20%);}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(90%,90%,90%,0.7);}div.jqplot-noData-container{text-align:center;background-color:rgba(96%,96%,96%,0.3);} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.js b/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.js
new file mode 100644
index 00000000..79c35d06
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(H){var r;H.fn.emptyForce=function(){for(var ab=0,ac;(ac=H(this)[ab])!=null;ab++){if(ac.nodeType===1){H.cleanData(ac.getElementsByTagName("*"))}if(H.jqplot.use_excanvas){ac.outerHTML=""}else{while(ac.firstChild){ac.removeChild(ac.firstChild)}}ac=null}return H(this)};H.fn.removeChildForce=function(ab){while(ab.firstChild){this.removeChildForce(ab.firstChild);ab.removeChild(ab.firstChild)}};H.fn.jqplot=function(){var ab=[];var ad=[];for(var ae=0,ac=arguments.length;ae<ac;ae++){if(H.isArray(arguments[ae])){ab.push(arguments[ae])}else{if(H.isPlainObject(arguments[ae])){ad.push(arguments[ae])}}}return this.each(function(ah){var am,al,ak=H(this),ag=ab.length,af=ad.length,aj,ai;if(ah<ag){aj=ab[ah]}else{aj=ag?ab[ag-1]:null}if(ah<af){ai=ad[ah]}else{ai=af?ad[af-1]:null}am=ak.attr("id");if(am===r){am="jqplot_target_"+H.jqplot.targetCounter++;ak.attr("id",am)}al=H.jqplot(am,aj,ai);ak.data("jqplot",al)})};H.jqplot=function(ah,ae,ac){var ad=null,ab=null;if(arguments.length===3){ad=ae;ab=ac}else{if(arguments.length===2){if(H.isArray(ae)){ad=ae}else{if(H.isPlainObject(ae)){ab=ae}}}}if(ad===null&&ab!==null&&ab.data){ad=ab.data}var ag=new N();H("#"+ah).removeClass("jqplot-error");if(H.jqplot.config.catchErrors){try{ag.init(ah,ad,ab);ag.draw();ag.themeEngine.init.call(ag);return ag}catch(af){var ai=H.jqplot.config.errorMessage||af.message;H("#"+ah).append('<div class="jqplot-error-message">'+ai+"</div>");H("#"+ah).addClass("jqplot-error");document.getElementById(ah).style.background=H.jqplot.config.errorBackground;document.getElementById(ah).style.border=H.jqplot.config.errorBorder;document.getElementById(ah).style.fontFamily=H.jqplot.config.errorFontFamily;document.getElementById(ah).style.fontSize=H.jqplot.config.errorFontSize;document.getElementById(ah).style.fontStyle=H.jqplot.config.errorFontStyle;document.getElementById(ah).style.fontWeight=H.jqplot.config.errorFontWeight}}else{ag.init(ah,ad,ab);ag.draw();ag.themeEngine.init.call(ag);return ag}};H.jqplot.version="1.0.4";H.jqplot.revision="1121";H.jqplot.targetCounter=1;H.jqplot.CanvasManager=function(){if(typeof H.jqplot.CanvasManager.canvases=="undefined"){H.jqplot.CanvasManager.canvases=[];H.jqplot.CanvasManager.free=[]}var ab=[];this.getCanvas=function(){var ae;var ad=true;if(!H.jqplot.use_excanvas){for(var af=0,ac=H.jqplot.CanvasManager.canvases.length;af<ac;af++){if(H.jqplot.CanvasManager.free[af]===true){ad=false;ae=H.jqplot.CanvasManager.canvases[af];H.jqplot.CanvasManager.free[af]=false;ab.push(af);break}}}if(ad){ae=document.createElement("canvas");ab.push(H.jqplot.CanvasManager.canvases.length);H.jqplot.CanvasManager.canvases.push(ae);H.jqplot.CanvasManager.free.push(false)}return ae};this.initCanvas=function(ac){if(H.jqplot.use_excanvas){return window.G_vmlCanvasManager.initElement(ac)}return ac};this.freeAllCanvases=function(){for(var ad=0,ac=ab.length;ad<ac;ad++){this.freeCanvas(ab[ad])}ab=[]};this.freeCanvas=function(ac){if(H.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==r){window.G_vmlCanvasManager.uninitElement(H.jqplot.CanvasManager.canvases[ac]);H.jqplot.CanvasManager.canvases[ac]=null}else{var ad=H.jqplot.CanvasManager.canvases[ac];ad.getContext("2d").clearRect(0,0,ad.width,ad.height);H(ad).unbind().removeAttr("class").removeAttr("style");H(ad).css({left:"",top:"",position:""});ad.width=0;ad.height=0;H.jqplot.CanvasManager.free[ac]=true}}};H.jqplot.log=function(){if(window.console){window.console.log.apply(window.console,arguments)}};H.jqplot.config={addDomReference:false,enablePlugins:false,defaultHeight:300,defaultWidth:400,UTCAdjust:false,timezoneOffset:new Date(new Date().getTimezoneOffset()*60000),errorMessage:"",errorBackground:"",errorBorder:"",errorFontFamily:"",errorFontSize:"",errorFontStyle:"",errorFontWeight:"",catchErrors:false,defaultTickFormatString:"%.1f",defaultColors:["#4bb2c5","#EAA228","#c5b47f","#579575","#839557","#958c12","#953579","#4b5de4","#d8b83f","#ff5800","#0085cc","#c747a3","#cddf54","#FBD178","#26B4E3","#bd70c7"],defaultNegativeColors:["#498991","#C08840","#9F9274","#546D61","#646C4A","#6F6621","#6E3F5F","#4F64B0","#A89050","#C45923","#187399","#945381","#959E5C","#C7AF7B","#478396","#907294"],dashLength:4,gapLength:4,dotGapLength:2.5,srcLocation:"jqplot/src/",pluginLocation:"jqplot/src/plugins/"};H.jqplot.arrayMax=function(ab){return Math.max.apply(Math,ab)};H.jqplot.arrayMin=function(ab){return Math.min.apply(Math,ab)};H.jqplot.enablePlugins=H.jqplot.config.enablePlugins;H.jqplot.support_canvas=function(){if(typeof H.jqplot.support_canvas.result=="undefined"){H.jqplot.support_canvas.result=!!document.createElement("canvas").getContext}return H.jqplot.support_canvas.result};H.jqplot.support_canvas_text=function(){if(typeof H.jqplot.support_canvas_text.result=="undefined"){if(window.G_vmlCanvasManager!==r&&window.G_vmlCanvasManager._version>887){H.jqplot.support_canvas_text.result=true}else{H.jqplot.support_canvas_text.result=!!(document.createElement("canvas").getContext&&typeof document.createElement("canvas").getContext("2d").fillText=="function")}}return H.jqplot.support_canvas_text.result};H.jqplot.use_excanvas=(H.browser.msie&&!H.jqplot.support_canvas())?true:false;H.jqplot.preInitHooks=[];H.jqplot.postInitHooks=[];H.jqplot.preParseOptionsHooks=[];H.jqplot.postParseOptionsHooks=[];H.jqplot.preDrawHooks=[];H.jqplot.postDrawHooks=[];H.jqplot.preDrawSeriesHooks=[];H.jqplot.postDrawSeriesHooks=[];H.jqplot.preDrawLegendHooks=[];H.jqplot.addLegendRowHooks=[];H.jqplot.preSeriesInitHooks=[];H.jqplot.postSeriesInitHooks=[];H.jqplot.preParseSeriesOptionsHooks=[];H.jqplot.postParseSeriesOptionsHooks=[];H.jqplot.eventListenerHooks=[];H.jqplot.preDrawSeriesShadowHooks=[];H.jqplot.postDrawSeriesShadowHooks=[];H.jqplot.ElemContainer=function(){this._elem;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null}};H.jqplot.ElemContainer.prototype.createElement=function(ae,ag,ac,ad,ah){this._offsets=ag;var ab=ac||"jqplot";var af=document.createElement(ae);this._elem=H(af);this._elem.addClass(ab);this._elem.css(ad);this._elem.attr(ah);af=null;return this._elem};H.jqplot.ElemContainer.prototype.getWidth=function(){if(this._elem){return this._elem.outerWidth(true)}else{return null}};H.jqplot.ElemContainer.prototype.getHeight=function(){if(this._elem){return this._elem.outerHeight(true)}else{return null}};H.jqplot.ElemContainer.prototype.getPosition=function(){if(this._elem){return this._elem.position()}else{return{top:null,left:null,bottom:null,right:null}}};H.jqplot.ElemContainer.prototype.getTop=function(){return this.getPosition().top};H.jqplot.ElemContainer.prototype.getLeft=function(){return this.getPosition().left};H.jqplot.ElemContainer.prototype.getBottom=function(){return this._elem.css("bottom")};H.jqplot.ElemContainer.prototype.getRight=function(){return this._elem.css("right")};function s(ab){H.jqplot.ElemContainer.call(this);this.name=ab;this._series=[];this.show=false;this.tickRenderer=H.jqplot.AxisTickRenderer;this.tickOptions={};this.labelRenderer=H.jqplot.AxisLabelRenderer;this.labelOptions={};this.label=null;this.showLabel=true;this.min=null;this.max=null;this.autoscale=false;this.pad=1.2;this.padMax=null;this.padMin=null;this.ticks=[];this.numberTicks;this.tickInterval;this.renderer=H.jqplot.LinearAxisRenderer;this.rendererOptions={};this.showTicks=true;this.showTickMarks=true;this.showMinorTicks=true;this.drawMajorGridlines=true;this.drawMinorGridlines=false;this.drawMajorTickMarks=true;this.drawMinorTickMarks=true;this.useSeriesColor=false;this.borderWidth=null;this.borderColor=null;this.scaleToHiddenSeries=false;this._dataBounds={min:null,max:null};this._intervalStats=[];this._offsets={min:null,max:null};this._ticks=[];this._label=null;this.syncTicks=null;this.tickSpacing=75;this._min=null;this._max=null;this._tickInterval=null;this._numberTicks=null;this.__ticks=null;this._options={}}s.prototype=new H.jqplot.ElemContainer();s.prototype.constructor=s;s.prototype.init=function(){if(H.isFunction(this.renderer)){this.renderer=new this.renderer()}this.tickOptions.axis=this.name;if(this.tickOptions.showMark==null){this.tickOptions.showMark=this.showTicks}if(this.tickOptions.showMark==null){this.tickOptions.showMark=this.showTickMarks}if(this.tickOptions.showLabel==null){this.tickOptions.showLabel=this.showTicks}if(this.label==null||this.label==""){this.showLabel=false}else{this.labelOptions.label=this.label}if(this.showLabel==false){this.labelOptions.show=false}if(this.pad==0){this.pad=1}if(this.padMax==0){this.padMax=1}if(this.padMin==0){this.padMin=1}if(this.padMax==null){this.padMax=(this.pad-1)/2+1}if(this.padMin==null){this.padMin=(this.pad-1)/2+1}this.pad=this.padMax+this.padMin-1;if(this.min!=null||this.max!=null){this.autoscale=false}if(this.syncTicks==null&&this.name.indexOf("y")>-1){this.syncTicks=true}else{if(this.syncTicks==null){this.syncTicks=false}}this.renderer.init.call(this,this.rendererOptions)};s.prototype.draw=function(ab,ac){if(this.__ticks){this.__ticks=null}return this.renderer.draw.call(this,ab,ac)};s.prototype.set=function(){this.renderer.set.call(this)};s.prototype.pack=function(ac,ab){if(this.show){this.renderer.pack.call(this,ac,ab)}if(this._min==null){this._min=this.min;this._max=this.max;this._tickInterval=this.tickInterval;this._numberTicks=this.numberTicks;this.__ticks=this._ticks}};s.prototype.reset=function(){this.renderer.reset.call(this)};s.prototype.resetScale=function(ab){H.extend(true,this,{min:null,max:null,numberTicks:null,tickInterval:null,_ticks:[],ticks:[]},ab);this.resetDataBounds()};s.prototype.resetDataBounds=function(){var ai=this._dataBounds;ai.min=null;ai.max=null;var ac,aj,ag;var ad=(this.show)?true:false;for(var af=0;af<this._series.length;af++){aj=this._series[af];if(aj.show||this.scaleToHiddenSeries){ag=aj._plotData;if(aj._type==="line"&&aj.renderer.bands.show&&this.name.charAt(0)!=="x"){ag=[[0,aj.renderer.bands._min],[1,aj.renderer.bands._max]]}var ab=1,ah=1;if(aj._type!=null&&aj._type=="ohlc"){ab=3;ah=2}for(var ae=0,ac=ag.length;ae<ac;ae++){if(this.name=="xaxis"||this.name=="x2axis"){if((ag[ae][0]!=null&&ag[ae][0]<ai.min)||ai.min==null){ai.min=ag[ae][0]}if((ag[ae][0]!=null&&ag[ae][0]>ai.max)||ai.max==null){ai.max=ag[ae][0]}}else{if((ag[ae][ab]!=null&&ag[ae][ab]<ai.min)||ai.min==null){ai.min=ag[ae][ab]}if((ag[ae][ah]!=null&&ag[ae][ah]>ai.max)||ai.max==null){ai.max=ag[ae][ah]}}}if(ad&&aj.renderer.constructor!==H.jqplot.BarRenderer){ad=false}else{if(ad&&this._options.hasOwnProperty("forceTickAt0")&&this._options.forceTickAt0==false){ad=false}else{if(ad&&aj.renderer.constructor===H.jqplot.BarRenderer){if(aj.barDirection=="vertical"&&this.name!="xaxis"&&this.name!="x2axis"){if(this._options.pad!=null||this._options.padMin!=null){ad=false}}else{if(aj.barDirection=="horizontal"&&(this.name=="xaxis"||this.name=="x2axis")){if(this._options.pad!=null||this._options.padMin!=null){ad=false}}}}}}}}if(ad&&this.renderer.constructor===H.jqplot.LinearAxisRenderer&&ai.min>=0){this.padMin=1;this.forceTickAt0=true}};function n(ab){H.jqplot.ElemContainer.call(this);this.show=false;this.location="ne";this.labels=[];this.showLabels=true;this.showSwatches=true;this.placement="insideGrid";this.xoffset=0;this.yoffset=0;this.border;this.background;this.textColor;this.fontFamily;this.fontSize;this.rowSpacing="0.5em";this.renderer=H.jqplot.TableLegendRenderer;this.rendererOptions={};this.preDraw=false;this.marginTop=null;this.marginRight=null;this.marginBottom=null;this.marginLeft=null;this.escapeHtml=false;this._series=[];H.extend(true,this,ab)}n.prototype=new H.jqplot.ElemContainer();n.prototype.constructor=n;n.prototype.setOptions=function(ab){H.extend(true,this,ab);if(this.placement=="inside"){this.placement="insideGrid"}if(this.xoffset>0){if(this.placement=="insideGrid"){switch(this.location){case"nw":case"w":case"sw":if(this.marginLeft==null){this.marginLeft=this.xoffset+"px"}this.marginRight="0px";break;case"ne":case"e":case"se":default:if(this.marginRight==null){this.marginRight=this.xoffset+"px"}this.marginLeft="0px";break}}else{if(this.placement=="outside"){switch(this.location){case"nw":case"w":case"sw":if(this.marginRight==null){this.marginRight=this.xoffset+"px"}this.marginLeft="0px";break;case"ne":case"e":case"se":default:if(this.marginLeft==null){this.marginLeft=this.xoffset+"px"}this.marginRight="0px";break}}}this.xoffset=0}if(this.yoffset>0){if(this.placement=="outside"){switch(this.location){case"sw":case"s":case"se":if(this.marginTop==null){this.marginTop=this.yoffset+"px"}this.marginBottom="0px";break;case"ne":case"n":case"nw":default:if(this.marginBottom==null){this.marginBottom=this.yoffset+"px"}this.marginTop="0px";break}}else{if(this.placement=="insideGrid"){switch(this.location){case"sw":case"s":case"se":if(this.marginBottom==null){this.marginBottom=this.yoffset+"px"}this.marginTop="0px";break;case"ne":case"n":case"nw":default:if(this.marginTop==null){this.marginTop=this.yoffset+"px"}this.marginBottom="0px";break}}}this.yoffset=0}};n.prototype.init=function(){if(H.isFunction(this.renderer)){this.renderer=new this.renderer()}this.renderer.init.call(this,this.rendererOptions)};n.prototype.draw=function(ac,ad){for(var ab=0;ab<H.jqplot.preDrawLegendHooks.length;ab++){H.jqplot.preDrawLegendHooks[ab].call(this,ac)}return this.renderer.draw.call(this,ac,ad)};n.prototype.pack=function(ab){this.renderer.pack.call(this,ab)};function u(ab){H.jqplot.ElemContainer.call(this);this.text=ab;this.show=true;this.fontFamily;this.fontSize;this.textAlign;this.textColor;this.renderer=H.jqplot.DivTitleRenderer;this.rendererOptions={};this.escapeHtml=false}u.prototype=new H.jqplot.ElemContainer();u.prototype.constructor=u;u.prototype.init=function(){if(H.isFunction(this.renderer)){this.renderer=new this.renderer()}this.renderer.init.call(this,this.rendererOptions)};u.prototype.draw=function(ab){return this.renderer.draw.call(this,ab)};u.prototype.pack=function(){this.renderer.pack.call(this)};function O(ab){ab=ab||{};H.jqplot.ElemContainer.call(this);this.show=true;this.xaxis="xaxis";this._xaxis;this.yaxis="yaxis";this._yaxis;this.gridBorderWidth=2;this.renderer=H.jqplot.LineRenderer;this.rendererOptions={};this.data=[];this.gridData=[];this.label="";this.showLabel=true;this.color;this.negativeColor;this.lineWidth=2.5;this.lineJoin="round";this.lineCap="round";this.linePattern="solid";this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.25;this.shadowDepth=3;this.shadowAlpha="0.1";this.breakOnNull=false;this.markerRenderer=H.jqplot.MarkerRenderer;this.markerOptions={};this.showLine=true;this.showMarker=true;this.index;this.fill=false;this.fillColor;this.fillAlpha;this.fillAndStroke=false;this.disableStack=false;this._stack=false;this.neighborThreshold=4;this.fillToZero=false;this.fillToValue=0;this.fillAxis="y";this.useNegativeColors=true;this._stackData=[];this._plotData=[];this._plotValues={x:[],y:[]};this._intervals={x:{},y:{}};this._prevPlotData=[];this._prevGridData=[];this._stackAxis="y";this._primaryAxis="_xaxis";this.canvas=new H.jqplot.GenericCanvas();this.shadowCanvas=new H.jqplot.GenericCanvas();this.plugins={};this._sumy=0;this._sumx=0;this._type=""}O.prototype=new H.jqplot.ElemContainer();O.prototype.constructor=O;O.prototype.init=function(ae,ai,ag){this.index=ae;this.gridBorderWidth=ai;var ah=this.data;var ad=[],af,ab;for(af=0,ab=ah.length;af<ab;af++){if(!this.breakOnNull){if(ah[af]==null||ah[af][0]==null||ah[af][1]==null){continue}else{ad.push(ah[af])}}else{ad.push(ah[af])}}this.data=ad;if(!this.color){this.color=ag.colorGenerator.get(this.index)}if(!this.negativeColor){this.negativeColor=ag.negativeColorGenerator.get(this.index)}if(!this.fillColor){this.fillColor=this.color}if(this.fillAlpha){var ac=H.jqplot.normalize2rgb(this.fillColor);var ac=H.jqplot.getColorComponents(ac);this.fillColor="rgba("+ac[0]+","+ac[1]+","+ac[2]+","+this.fillAlpha+")"}if(H.isFunction(this.renderer)){this.renderer=new this.renderer()}this.renderer.init.call(this,this.rendererOptions,ag);this.markerRenderer=new this.markerRenderer();if(!this.markerOptions.color){this.markerOptions.color=this.color}if(this.markerOptions.show==null){this.markerOptions.show=this.showMarker}this.showMarker=this.markerOptions.show;this.markerRenderer.init(this.markerOptions)};O.prototype.draw=function(ah,ae,ag){var ac=(ae==r)?{}:ae;ah=(ah==r)?this.canvas._ctx:ah;var ab,af,ad;for(ab=0;ab<H.jqplot.preDrawSeriesHooks.length;ab++){H.jqplot.preDrawSeriesHooks[ab].call(this,ah,ac)}if(this.show){this.renderer.setGridData.call(this,ag);if(!ac.preventJqPlotSeriesDrawTrigger){H(ah.canvas).trigger("jqplotSeriesDraw",[this.data,this.gridData])}af=[];if(ac.data){af=ac.data}else{if(!this._stack){af=this.data}else{af=this._plotData}}ad=ac.gridData||this.renderer.makeGridData.call(this,af,ag);if(this._type==="line"&&this.renderer.smooth&&this.renderer._smoothedData.length){ad=this.renderer._smoothedData}this.renderer.draw.call(this,ah,ad,ac,ag)}for(ab=0;ab<H.jqplot.postDrawSeriesHooks.length;ab++){H.jqplot.postDrawSeriesHooks[ab].call(this,ah,ac,ag)}ah=ae=ag=ab=af=ad=null};O.prototype.drawShadow=function(ah,ae,ag){var ac=(ae==r)?{}:ae;ah=(ah==r)?this.shadowCanvas._ctx:ah;var ab,af,ad;for(ab=0;ab<H.jqplot.preDrawSeriesShadowHooks.length;ab++){H.jqplot.preDrawSeriesShadowHooks[ab].call(this,ah,ac)}if(this.shadow){this.renderer.setGridData.call(this,ag);af=[];if(ac.data){af=ac.data}else{if(!this._stack){af=this.data}else{af=this._plotData}}ad=ac.gridData||this.renderer.makeGridData.call(this,af,ag);this.renderer.drawShadow.call(this,ah,ad,ac,ag)}for(ab=0;ab<H.jqplot.postDrawSeriesShadowHooks.length;ab++){H.jqplot.postDrawSeriesShadowHooks[ab].call(this,ah,ac)}ah=ae=ag=ab=af=ad=null};O.prototype.toggleDisplay=function(ac,ae){var ab,ad;if(ac.data.series){ab=ac.data.series}else{ab=this}if(ac.data.speed){ad=ac.data.speed}if(ad){if(ab.canvas._elem.is(":hidden")||!ab.show){ab.show=true;ab.canvas._elem.removeClass("jqplot-series-hidden");if(ab.shadowCanvas._elem){ab.shadowCanvas._elem.fadeIn(ad)}ab.canvas._elem.fadeIn(ad,ae);ab.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+ab.index).fadeIn(ad)}else{ab.show=false;ab.canvas._elem.addClass("jqplot-series-hidden");if(ab.shadowCanvas._elem){ab.shadowCanvas._elem.fadeOut(ad)}ab.canvas._elem.fadeOut(ad,ae);ab.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+ab.index).fadeOut(ad)}}else{if(ab.canvas._elem.is(":hidden")||!ab.show){ab.show=true;ab.canvas._elem.removeClass("jqplot-series-hidden");if(ab.shadowCanvas._elem){ab.shadowCanvas._elem.show()}ab.canvas._elem.show(0,ae);ab.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+ab.index).show()}else{ab.show=false;ab.canvas._elem.addClass("jqplot-series-hidden");if(ab.shadowCanvas._elem){ab.shadowCanvas._elem.hide()}ab.canvas._elem.hide(0,ae);ab.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+ab.index).hide()}}};function I(){H.jqplot.ElemContainer.call(this);this.drawGridlines=true;this.gridLineColor="#cccccc";this.gridLineWidth=1;this.background="#fffdf6";this.borderColor="#999999";this.borderWidth=2;this.drawBorder=true;this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.5;this.shadowWidth=3;this.shadowDepth=3;this.shadowColor=null;this.shadowAlpha="0.07";this._left;this._top;this._right;this._bottom;this._width;this._height;this._axes=[];this.renderer=H.jqplot.CanvasGridRenderer;this.rendererOptions={};this._offsets={top:null,bottom:null,left:null,right:null}}I.prototype=new H.jqplot.ElemContainer();I.prototype.constructor=I;I.prototype.init=function(){if(H.isFunction(this.renderer)){this.renderer=new this.renderer()}this.renderer.init.call(this,this.rendererOptions)};I.prototype.createElement=function(ab,ac){this._offsets=ab;return this.renderer.createElement.call(this,ac)};I.prototype.draw=function(){this.renderer.draw.call(this)};H.jqplot.GenericCanvas=function(){H.jqplot.ElemContainer.call(this);this._ctx};H.jqplot.GenericCanvas.prototype=new H.jqplot.ElemContainer();H.jqplot.GenericCanvas.prototype.constructor=H.jqplot.GenericCanvas;H.jqplot.GenericCanvas.prototype.createElement=function(af,ad,ac,ag){this._offsets=af;var ab="jqplot";if(ad!=r){ab=ad}var ae;ae=ag.canvasManager.getCanvas();if(ac!=null){this._plotDimensions=ac}ae.width=this._plotDimensions.width-this._offsets.left-this._offsets.right;ae.height=this._plotDimensions.height-this._offsets.top-this._offsets.bottom;this._elem=H(ae);this._elem.css({position:"absolute",left:this._offsets.left,top:this._offsets.top});this._elem.addClass(ab);ae=ag.canvasManager.initCanvas(ae);ae=null;return this._elem};H.jqplot.GenericCanvas.prototype.setContext=function(){this._ctx=this._elem.get(0).getContext("2d");return this._ctx};H.jqplot.GenericCanvas.prototype.resetCanvas=function(){if(this._elem){if(H.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==r){window.G_vmlCanvasManager.uninitElement(this._elem.get(0))}this._elem.emptyForce()}this._ctx=null};H.jqplot.HooksManager=function(){this.hooks=[];this.args=[]};H.jqplot.HooksManager.prototype.addOnce=function(ae,ac){ac=ac||[];var af=false;for(var ad=0,ab=this.hooks.length;ad<ab;ad++){if(this.hooks[ad]==ae){af=true}}if(!af){this.hooks.push(ae);this.args.push(ac)}};H.jqplot.HooksManager.prototype.add=function(ac,ab){ab=ab||[];this.hooks.push(ac);this.args.push(ab)};H.jqplot.EventListenerManager=function(){this.hooks=[]};H.jqplot.EventListenerManager.prototype.addOnce=function(af,ae){var ag=false,ad,ac;for(var ac=0,ab=this.hooks.length;ac<ab;ac++){ad=this.hooks[ac];if(ad[0]==af&&ad[1]==ae){ag=true}}if(!ag){this.hooks.push([af,ae])}};H.jqplot.EventListenerManager.prototype.add=function(ac,ab){this.hooks.push([ac,ab])};var Q=["yMidAxis","xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];function N(){this.animate=false;this.animateReplot=false;this.axes={xaxis:new s("xaxis"),yaxis:new s("yaxis"),x2axis:new s("x2axis"),y2axis:new s("y2axis"),y3axis:new s("y3axis"),y4axis:new s("y4axis"),y5axis:new s("y5axis"),y6axis:new s("y6axis"),y7axis:new s("y7axis"),y8axis:new s("y8axis"),y9axis:new s("y9axis"),yMidAxis:new s("yMidAxis")};this.baseCanvas=new H.jqplot.GenericCanvas();this.captureRightClick=false;this.data=[];this.dataRenderer;this.dataRendererOptions;this.defaults={axesDefaults:{},axes:{xaxis:{},yaxis:{},x2axis:{},y2axis:{},y3axis:{},y4axis:{},y5axis:{},y6axis:{},y7axis:{},y8axis:{},y9axis:{},yMidAxis:{}},seriesDefaults:{},series:[]};this.defaultAxisStart=1;this.drawIfHidden=false;this.eventCanvas=new H.jqplot.GenericCanvas();this.fillBetween={series1:null,series2:null,color:null,baseSeries:0,fill:true};this.fontFamily;this.fontSize;this.grid=new I();this.legend=new n();this.negativeSeriesColors=H.jqplot.config.defaultNegativeColors;this.noDataIndicator={show:false,indicator:"Loading Data...",axes:{xaxis:{min:0,max:10,tickInterval:2,show:true},yaxis:{min:0,max:12,tickInterval:3,show:true}}};this.options={};this.previousSeriesStack=[];this.plugins={};this.series=[];this.seriesStack=[];this.seriesColors=H.jqplot.config.defaultColors;this.sortData=true;this.stackSeries=false;this.syncXTicks=true;this.syncYTicks=true;this.target=null;this.targetId=null;this.textColor;this.title=new u();this._drawCount=0;this._sumy=0;this._sumx=0;this._stackData=[];this._plotData=[];this._width=null;this._height=null;this._plotDimensions={height:null,width:null};this._gridPadding={top:null,right:null,bottom:null,left:null};this._defaultGridPadding={top:10,right:10,bottom:23,left:10};this._addDomReference=H.jqplot.config.addDomReference;this.preInitHooks=new H.jqplot.HooksManager();this.postInitHooks=new H.jqplot.HooksManager();this.preParseOptionsHooks=new H.jqplot.HooksManager();this.postParseOptionsHooks=new H.jqplot.HooksManager();this.preDrawHooks=new H.jqplot.HooksManager();this.postDrawHooks=new H.jqplot.HooksManager();this.preDrawSeriesHooks=new H.jqplot.HooksManager();this.postDrawSeriesHooks=new H.jqplot.HooksManager();this.preDrawLegendHooks=new H.jqplot.HooksManager();this.addLegendRowHooks=new H.jqplot.HooksManager();this.preSeriesInitHooks=new H.jqplot.HooksManager();this.postSeriesInitHooks=new H.jqplot.HooksManager();this.preParseSeriesOptionsHooks=new H.jqplot.HooksManager();this.postParseSeriesOptionsHooks=new H.jqplot.HooksManager();this.eventListenerHooks=new H.jqplot.EventListenerManager();this.preDrawSeriesShadowHooks=new H.jqplot.HooksManager();this.postDrawSeriesShadowHooks=new H.jqplot.HooksManager();this.colorGenerator=new H.jqplot.ColorGenerator();this.negativeColorGenerator=new H.jqplot.ColorGenerator();this.canvasManager=new H.jqplot.CanvasManager();this.themeEngine=new H.jqplot.ThemeEngine();var ad=0;this.init=function(ao,al,aq){aq=aq||{};for(var am=0;am<H.jqplot.preInitHooks.length;am++){H.jqplot.preInitHooks[am].call(this,ao,al,aq)}for(var am=0;am<this.preInitHooks.hooks.length;am++){this.preInitHooks.hooks[am].call(this,ao,al,aq)}this.targetId="#"+ao;this.target=H("#"+ao);if(this._addDomReference){this.target.data("jqplot",this)}this.target.removeClass("jqplot-error");if(!this.target.get(0)){throw"No plot target specified"}if(this.target.css("position")=="static"){this.target.css("position","relative")}if(!this.target.hasClass("jqplot-target")){this.target.addClass("jqplot-target")}if(!this.target.height()){var an;if(aq&&aq.height){an=parseInt(aq.height,10)}else{if(this.target.attr("data-height")){an=parseInt(this.target.attr("data-height"),10)}else{an=parseInt(H.jqplot.config.defaultHeight,10)}}this._height=an;this.target.css("height",an+"px")}else{this._height=an=this.target.height()}if(!this.target.width()){var ap;if(aq&&aq.width){ap=parseInt(aq.width,10)}else{if(this.target.attr("data-width")){ap=parseInt(this.target.attr("data-width"),10)}else{ap=parseInt(H.jqplot.config.defaultWidth,10)}}this._width=ap;this.target.css("width",ap+"px")}else{this._width=ap=this.target.width()}for(var am=0,aj=Q.length;am<aj;am++){this.axes[Q[am]]=new s(Q[am])}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Canvas dimension not set"}if(aq.dataRenderer&&H.isFunction(aq.dataRenderer)){if(aq.dataRendererOptions){this.dataRendererOptions=aq.dataRendererOptions}this.dataRenderer=aq.dataRenderer;al=this.dataRenderer(al,this,this.dataRendererOptions)}if(aq.noDataIndicator&&H.isPlainObject(aq.noDataIndicator)){H.extend(true,this.noDataIndicator,aq.noDataIndicator)}if(al==null||H.isArray(al)==false||al.length==0||H.isArray(al[0])==false||al[0].length==0){if(this.noDataIndicator.show==false){throw"No Data"}else{for(var af in this.noDataIndicator.axes){for(var ah in this.noDataIndicator.axes[af]){this.axes[af][ah]=this.noDataIndicator.axes[af][ah]}}this.postDrawHooks.add(function(){var ax=this.eventCanvas.getHeight();var au=this.eventCanvas.getWidth();var at=H('<div class="jqplot-noData-container" style="position:absolute;"></div>');this.target.append(at);at.height(ax);at.width(au);at.css("top",this.eventCanvas._offsets.top);at.css("left",this.eventCanvas._offsets.left);var aw=H('<div class="jqplot-noData-contents" style="text-align:center; position:relative; margin-left:auto; margin-right:auto;"></div>');at.append(aw);aw.html(this.noDataIndicator.indicator);var av=aw.height();var ar=aw.width();aw.height(av);aw.width(ar);aw.css("top",(ax-av)/2+"px")})}}this.data=H.extend(true,[],al);this.parseOptions(aq);if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this.title.init();this.legend.init();this._sumy=0;this._sumx=0;this.computePlotData();for(var am=0;am<this.series.length;am++){this.seriesStack.push(am);this.previousSeriesStack.push(am);this.series[am].shadowCanvas._plotDimensions=this._plotDimensions;this.series[am].canvas._plotDimensions=this._plotDimensions;for(var ak=0;ak<H.jqplot.preSeriesInitHooks.length;ak++){H.jqplot.preSeriesInitHooks[ak].call(this.series[am],ao,this.data,this.options.seriesDefaults,this.options.series[am],this)}for(var ak=0;ak<this.preSeriesInitHooks.hooks.length;ak++){this.preSeriesInitHooks.hooks[ak].call(this.series[am],ao,this.data,this.options.seriesDefaults,this.options.series[am],this)}this.series[am]._plotDimensions=this._plotDimensions;this.series[am].init(am,this.grid.borderWidth,this);for(var ak=0;ak<H.jqplot.postSeriesInitHooks.length;ak++){H.jqplot.postSeriesInitHooks[ak].call(this.series[am],ao,this.data,this.options.seriesDefaults,this.options.series[am],this)}for(var ak=0;ak<this.postSeriesInitHooks.hooks.length;ak++){this.postSeriesInitHooks.hooks[ak].call(this.series[am],ao,this.data,this.options.seriesDefaults,this.options.series[am],this)}this._sumy+=this.series[am]._sumy;this._sumx+=this.series[am]._sumx}var ag,ai;for(var am=0,aj=Q.length;am<aj;am++){ag=Q[am];ai=this.axes[ag];ai._plotDimensions=this._plotDimensions;ai.init();if(this.axes[ag].borderColor==null){if(ag.charAt(0)!=="x"&&ai.useSeriesColor===true&&ai.show){ai.borderColor=ai._series[0].color}else{ai.borderColor=this.grid.borderColor}}}if(this.sortData){ab(this.series)}this.grid.init();this.grid._axes=this.axes;this.legend._series=this.series;for(var am=0;am<H.jqplot.postInitHooks.length;am++){H.jqplot.postInitHooks[am].call(this,ao,this.data,aq)}for(var am=0;am<this.postInitHooks.hooks.length;am++){this.postInitHooks.hooks[am].call(this,ao,this.data,aq)}};this.resetAxesScale=function(ak,ag){var ai=ag||{};var aj=ak||this.axes;if(aj===true){aj=this.axes}if(H.isArray(aj)){for(var ah=0;ah<aj.length;ah++){this.axes[aj[ah]].resetScale(ai[aj[ah]])}}else{if(typeof(aj)==="object"){for(var af in aj){this.axes[af].resetScale(ai[af])}}}};this.reInitialize=function(an,af){var ar=H.extend(true,{},this.options,af);var ap=this.targetId.substr(1);var al=(an==null)?this.data:an;for(var ao=0;ao<H.jqplot.preInitHooks.length;ao++){H.jqplot.preInitHooks[ao].call(this,ap,al,ar)}for(var ao=0;ao<this.preInitHooks.hooks.length;ao++){this.preInitHooks.hooks[ao].call(this,ap,al,ar)}this._height=this.target.height();this._width=this.target.width();if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Target dimension not set"}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;var ag,aq,am,ai;for(var ao=0,ak=Q.length;ao<ak;ao++){ag=Q[ao];ai=this.axes[ag];aq=ai._ticks;for(var am=0,aj=aq.length;am<aj;am++){var ah=aq[am]._elem;if(ah){if(H.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==r){window.G_vmlCanvasManager.uninitElement(ah.get(0))}ah.emptyForce();ah=null;aq._elem=null}}aq=null;delete ai.ticks;delete ai._ticks;this.axes[ag]=new s(ag);this.axes[ag]._plotWidth=this._width;this.axes[ag]._plotHeight=this._height}if(an){if(ar.dataRenderer&&H.isFunction(ar.dataRenderer)){if(ar.dataRendererOptions){this.dataRendererOptions=ar.dataRendererOptions}this.dataRenderer=ar.dataRenderer;an=this.dataRenderer(an,this,this.dataRendererOptions)}this.data=H.extend(true,[],an)}if(af){this.parseOptions(ar)}this.title._plotWidth=this._width;if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this.title.init();this.legend.init();this._sumy=0;this._sumx=0;this.seriesStack=[];this.previousSeriesStack=[];this.computePlotData();for(var ao=0,ak=this.series.length;ao<ak;ao++){this.seriesStack.push(ao);this.previousSeriesStack.push(ao);this.series[ao].shadowCanvas._plotDimensions=this._plotDimensions;this.series[ao].canvas._plotDimensions=this._plotDimensions;for(var am=0;am<H.jqplot.preSeriesInitHooks.length;am++){H.jqplot.preSeriesInitHooks[am].call(this.series[ao],ap,this.data,this.options.seriesDefaults,this.options.series[ao],this)}for(var am=0;am<this.preSeriesInitHooks.hooks.length;am++){this.preSeriesInitHooks.hooks[am].call(this.series[ao],ap,this.data,this.options.seriesDefaults,this.options.series[ao],this)}this.series[ao]._plotDimensions=this._plotDimensions;this.series[ao].init(ao,this.grid.borderWidth,this);for(var am=0;am<H.jqplot.postSeriesInitHooks.length;am++){H.jqplot.postSeriesInitHooks[am].call(this.series[ao],ap,this.data,this.options.seriesDefaults,this.options.series[ao],this)}for(var am=0;am<this.postSeriesInitHooks.hooks.length;am++){this.postSeriesInitHooks.hooks[am].call(this.series[ao],ap,this.data,this.options.seriesDefaults,this.options.series[ao],this)}this._sumy+=this.series[ao]._sumy;this._sumx+=this.series[ao]._sumx}for(var ao=0,ak=Q.length;ao<ak;ao++){ag=Q[ao];ai=this.axes[ag];ai._plotDimensions=this._plotDimensions;ai.init();if(ai.borderColor==null){if(ag.charAt(0)!=="x"&&ai.useSeriesColor===true&&ai.show){ai.borderColor=ai._series[0].color}else{ai.borderColor=this.grid.borderColor}}}if(this.sortData){ab(this.series)}this.grid.init();this.grid._axes=this.axes;this.legend._series=this.series;for(var ao=0,ak=H.jqplot.postInitHooks.length;ao<ak;ao++){H.jqplot.postInitHooks[ao].call(this,ap,this.data,ar)}for(var ao=0,ak=this.postInitHooks.hooks.length;ao<ak;ao++){this.postInitHooks.hooks[ao].call(this,ap,this.data,ar)}};this.quickInit=function(){this._height=this.target.height();this._width=this.target.width();if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Target dimension not set"}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;for(var ak in this.axes){this.axes[ak]._plotWidth=this._width;this.axes[ak]._plotHeight=this._height}this.title._plotWidth=this._width;if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this._sumy=0;this._sumx=0;this.computePlotData();for(var ai=0;ai<this.series.length;ai++){if(this.series[ai]._type==="line"&&this.series[ai].renderer.bands.show){this.series[ai].renderer.initBands.call(this.series[ai],this.series[ai].renderer.options,this)}this.series[ai]._plotDimensions=this._plotDimensions;this.series[ai].canvas._plotDimensions=this._plotDimensions;this._sumy+=this.series[ai]._sumy;this._sumx+=this.series[ai]._sumx}var ag;for(var af=0;af<12;af++){ag=Q[af];var ah=this.axes[ag]._ticks;for(var ai=0;ai<ah.length;ai++){var aj=ah[ai]._elem;if(aj){if(H.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==r){window.G_vmlCanvasManager.uninitElement(aj.get(0))}aj.emptyForce();aj=null;ah._elem=null}}ah=null;this.axes[ag]._plotDimensions=this._plotDimensions;this.axes[ag]._ticks=[]}if(this.sortData){ab(this.series)}this.grid._axes=this.axes;this.legend._series=this.series};function ab(aj){var an,ao,ap,af,am;for(var ak=0;ak<aj.length;ak++){var ag;var al=[aj[ak].data,aj[ak]._stackData,aj[ak]._plotData,aj[ak]._prevPlotData];for(var ah=0;ah<4;ah++){ag=true;an=al[ah];if(aj[ak]._stackAxis=="x"){for(var ai=0;ai<an.length;ai++){if(typeof(an[ai][1])!="number"){ag=false;break}}if(ag){an.sort(function(ar,aq){return ar[1]-aq[1]})}}else{for(var ai=0;ai<an.length;ai++){if(typeof(an[ai][0])!="number"){ag=false;break}}if(ag){an.sort(function(ar,aq){return ar[0]-aq[0]})}}}}}this.computePlotData=function(){this._plotData=[];this._stackData=[];var am,an,ai;for(an=0,ai=this.series.length;an<ai;an++){am=this.series[an];this._plotData.push([]);this._stackData.push([]);var ag=am.data;this._plotData[an]=H.extend(true,[],ag);this._stackData[an]=H.extend(true,[],ag);am._plotData=this._plotData[an];am._stackData=this._stackData[an];var aq={x:[],y:[]};if(this.stackSeries&&!am.disableStack){am._stack=true;var ao=(am._stackAxis==="x")?0:1;for(var aj=0,af=ag.length;aj<af;aj++){var ap=ag[aj][ao];if(ap==null){ap=0}this._plotData[an][aj][ao]=ap;this._stackData[an][aj][ao]=ap;if(an>0){for(var ak=an;ak--;){var ah=this._plotData[ak][aj][ao];if(ap*ah>=0){this._plotData[an][aj][ao]+=ah;this._stackData[an][aj][ao]+=ah;break}}}}}else{for(var al=0;al<am.data.length;al++){aq.x.push(am.data[al][0]);aq.y.push(am.data[al][1])}this._stackData.push(am.data);this.series[an]._stackData=am.data;this._plotData.push(am.data);am._plotData=am.data;am._plotValues=aq}if(an>0){am._prevPlotData=this.series[an-1]._plotData}am._sumy=0;am._sumx=0;for(al=am.data.length-1;al>-1;al--){am._sumy+=am.data[al][1];am._sumx+=am.data[al][0]}}};this.populatePlotData=function(an,ao){this._plotData=[];this._stackData=[];an._stackData=[];an._plotData=[];var ar={x:[],y:[]};if(this.stackSeries&&!an.disableStack){an._stack=true;var aq=(an._stackAxis==="x")?0:1;var at=H.extend(true,[],an.data);var au=H.extend(true,[],an.data);var ah,ag,ai,ap,af;for(var al=0;al<ao;al++){var aj=this.series[al].data;for(var ak=0;ak<aj.length;ak++){ai=aj[ak];ah=(ai[0]!=null)?ai[0]:0;ag=(ai[1]!=null)?ai[1]:0;at[ak][0]+=ah;at[ak][1]+=ag;ap=(aq)?ag:ah;if(an.data[ak][aq]*ap>=0){au[ak][aq]+=ap}}}for(var am=0;am<au.length;am++){ar.x.push(au[am][0]);ar.y.push(au[am][1])}this._plotData.push(au);this._stackData.push(at);an._stackData=at;an._plotData=au;an._plotValues=ar}else{for(var am=0;am<an.data.length;am++){ar.x.push(an.data[am][0]);ar.y.push(an.data[am][1])}this._stackData.push(an.data);this.series[ao]._stackData=an.data;this._plotData.push(an.data);an._plotData=an.data;an._plotValues=ar}if(ao>0){an._prevPlotData=this.series[ao-1]._plotData}an._sumy=0;an._sumx=0;for(am=an.data.length-1;am>-1;am--){an._sumy+=an.data[am][1];an._sumx+=an.data[am][0]}};this.getNextSeriesColor=(function(ag){var af=0;var ah=ag.seriesColors;return function(){if(af<ah.length){return ah[af++]}else{af=0;return ah[af++]}}})(this);this.parseOptions=function(ar){for(var am=0;am<this.preParseOptionsHooks.hooks.length;am++){this.preParseOptionsHooks.hooks[am].call(this,ar)}for(var am=0;am<H.jqplot.preParseOptionsHooks.length;am++){H.jqplot.preParseOptionsHooks[am].call(this,ar)}this.options=H.extend(true,{},this.defaults,ar);var ag=this.options;this.animate=ag.animate;this.animateReplot=ag.animateReplot;this.stackSeries=ag.stackSeries;if(H.isPlainObject(ag.fillBetween)){var aq=["series1","series2","color","baseSeries","fill"],an;for(var am=0,ak=aq.length;am<ak;am++){an=aq[am];if(ag.fillBetween[an]!=null){this.fillBetween[an]=ag.fillBetween[an]}}}if(ag.seriesColors){this.seriesColors=ag.seriesColors}if(ag.negativeSeriesColors){this.negativeSeriesColors=ag.negativeSeriesColors}if(ag.captureRightClick){this.captureRightClick=ag.captureRightClick}this.defaultAxisStart=(ar&&ar.defaultAxisStart!=null)?ar.defaultAxisStart:this.defaultAxisStart;this.colorGenerator.setColors(this.seriesColors);this.negativeColorGenerator.setColors(this.negativeSeriesColors);H.extend(true,this._gridPadding,ag.gridPadding);this.sortData=(ag.sortData!=null)?ag.sortData:this.sortData;for(var am=0;am<12;am++){var ah=Q[am];var aj=this.axes[ah];aj._options=H.extend(true,{},ag.axesDefaults,ag.axes[ah]);H.extend(true,aj,ag.axesDefaults,ag.axes[ah]);aj._plotWidth=this._width;aj._plotHeight=this._height}var ap=function(ax,av,ay){var au=[];var aw,at;av=av||"vertical";if(!H.isArray(ax[0])){for(aw=0,at=ax.length;aw<at;aw++){if(av=="vertical"){au.push([ay+aw,ax[aw]])}else{au.push([ax[aw],ay+aw])}}}else{H.extend(true,au,ax)}return au};var ao=0;this.series=[];for(var am=0;am<this.data.length;am++){var af=H.extend(true,{index:am},{seriesColors:this.seriesColors,negativeSeriesColors:this.negativeSeriesColors},this.options.seriesDefaults,this.options.series[am],{rendererOptions:{animation:{show:this.animate}}});var aq=new O(af);for(var al=0;al<H.jqplot.preParseSeriesOptionsHooks.length;al++){H.jqplot.preParseSeriesOptionsHooks[al].call(aq,this.options.seriesDefaults,this.options.series[am])}for(var al=0;al<this.preParseSeriesOptionsHooks.hooks.length;al++){this.preParseSeriesOptionsHooks.hooks[al].call(aq,this.options.seriesDefaults,this.options.series[am])}H.extend(true,aq,af);var ai="vertical";if(aq.renderer===H.jqplot.BarRenderer&&aq.rendererOptions&&aq.rendererOptions.barDirection=="horizontal"){ai="horizontal";aq._stackAxis="x";aq._primaryAxis="_yaxis"}aq.data=ap(this.data[am],ai,this.defaultAxisStart);switch(aq.xaxis){case"xaxis":aq._xaxis=this.axes.xaxis;break;case"x2axis":aq._xaxis=this.axes.x2axis;break;default:break}aq._yaxis=this.axes[aq.yaxis];aq._xaxis._series.push(aq);aq._yaxis._series.push(aq);if(aq.show){aq._xaxis.show=true;aq._yaxis.show=true}else{if(aq._xaxis.scaleToHiddenSeries){aq._xaxis.show=true}if(aq._yaxis.scaleToHiddenSeries){aq._yaxis.show=true}}if(!aq.label){aq.label="Series "+(am+1).toString()}this.series.push(aq);for(var al=0;al<H.jqplot.postParseSeriesOptionsHooks.length;al++){H.jqplot.postParseSeriesOptionsHooks[al].call(this.series[am],this.options.seriesDefaults,this.options.series[am])}for(var al=0;al<this.postParseSeriesOptionsHooks.hooks.length;al++){this.postParseSeriesOptionsHooks.hooks[al].call(this.series[am],this.options.seriesDefaults,this.options.series[am])}}H.extend(true,this.grid,this.options.grid);for(var am=0,ak=Q.length;am<ak;am++){var ah=Q[am];var aj=this.axes[ah];if(aj.borderWidth==null){aj.borderWidth=this.grid.borderWidth}}if(typeof this.options.title=="string"){this.title.text=this.options.title}else{if(typeof this.options.title=="object"){H.extend(true,this.title,this.options.title)}}this.title._plotWidth=this._width;this.legend.setOptions(this.options.legend);for(var am=0;am<H.jqplot.postParseOptionsHooks.length;am++){H.jqplot.postParseOptionsHooks[am].call(this,ar)}for(var am=0;am<this.postParseOptionsHooks.hooks.length;am++){this.postParseOptionsHooks.hooks[am].call(this,ar)}};this.destroy=function(){this.canvasManager.freeAllCanvases();if(this.eventCanvas&&this.eventCanvas._elem){this.eventCanvas._elem.unbind()}this.target.empty();this.target[0].innerHTML=""};this.replot=function(ag){var ah=ag||{};var aj=ah.data||null;var af=(ah.clear===false)?false:true;var ai=ah.resetAxes||false;delete ah.data;delete ah.clear;delete ah.resetAxes;this.target.trigger("jqplotPreReplot");if(af){this.destroy()}if(aj||!H.isEmptyObject(ah)){this.reInitialize(aj,ah)}else{this.quickInit()}if(ai){this.resetAxesScale(ai,ah.axes)}this.draw();this.target.trigger("jqplotPostReplot")};this.redraw=function(af){af=(af!=null)?af:true;this.target.trigger("jqplotPreRedraw");if(af){this.canvasManager.freeAllCanvases();this.eventCanvas._elem.unbind();this.target.empty()}for(var ah in this.axes){this.axes[ah]._ticks=[]}this.computePlotData();this._sumy=0;this._sumx=0;for(var ag=0,ai=this.series.length;ag<ai;ag++){this._sumy+=this.series[ag]._sumy;this._sumx+=this.series[ag]._sumx}this.draw();this.target.trigger("jqplotPostRedraw")};this.draw=function(){if(this.drawIfHidden||this.target.is(":visible")){this.target.trigger("jqplotPreDraw");var aB,az,ay,ai;for(aB=0,ay=H.jqplot.preDrawHooks.length;aB<ay;aB++){H.jqplot.preDrawHooks[aB].call(this)}for(aB=0,ay=this.preDrawHooks.length;aB<ay;aB++){this.preDrawHooks.hooks[aB].apply(this,this.preDrawSeriesHooks.args[aB])}this.target.append(this.baseCanvas.createElement({left:0,right:0,top:0,bottom:0},"jqplot-base-canvas",null,this));this.baseCanvas.setContext();this.target.append(this.title.draw());this.title.pack({top:0,left:0});var aF=this.legend.draw({},this);var af={top:0,left:0,bottom:0,right:0};if(this.legend.placement=="outsideGrid"){this.target.append(aF);switch(this.legend.location){case"n":af.top+=this.legend.getHeight();break;case"s":af.bottom+=this.legend.getHeight();break;case"ne":case"e":case"se":af.right+=this.legend.getWidth();break;case"nw":case"w":case"sw":af.left+=this.legend.getWidth();break;default:af.right+=this.legend.getWidth();break}aF=aF.detach()}var al=this.axes;var aG;for(aB=0;aB<12;aB++){aG=Q[aB];this.target.append(al[aG].draw(this.baseCanvas._ctx,this));al[aG].set()}if(al.yaxis.show){af.left+=al.yaxis.getWidth()}var aA=["y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];var ar=[0,0,0,0,0,0,0,0];var av=0;var au;for(au=0;au<8;au++){if(al[aA[au]].show){av+=al[aA[au]].getWidth();ar[au]=av}}af.right+=av;if(al.x2axis.show){af.top+=al.x2axis.getHeight()}if(this.title.show){af.top+=this.title.getHeight()}if(al.xaxis.show){af.bottom+=al.xaxis.getHeight()}if(this.options.gridDimensions&&H.isPlainObject(this.options.gridDimensions)){var am=parseInt(this.options.gridDimensions.width,10)||0;var aC=parseInt(this.options.gridDimensions.height,10)||0;var ah=(this._width-af.left-af.right-am)/2;var aE=(this._height-af.top-af.bottom-aC)/2;if(aE>=0&&ah>=0){af.top+=aE;af.bottom+=aE;af.left+=ah;af.right+=ah}}var ag=["top","bottom","left","right"];for(var au in ag){if(this._gridPadding[ag[au]]==null&&af[ag[au]]>0){this._gridPadding[ag[au]]=af[ag[au]]}else{if(this._gridPadding[ag[au]]==null){this._gridPadding[ag[au]]=this._defaultGridPadding[ag[au]]}}}var at=this._gridPadding;if(this.legend.placement==="outsideGrid"){at={top:this.title.getHeight(),left:0,right:0,bottom:0};if(this.legend.location==="s"){at.left=this._gridPadding.left;at.right=this._gridPadding.right}}al.xaxis.pack({position:"absolute",bottom:this._gridPadding.bottom-al.xaxis.getHeight(),left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});al.yaxis.pack({position:"absolute",top:0,left:this._gridPadding.left-al.yaxis.getWidth(),height:this._height},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top});al.x2axis.pack({position:"absolute",top:this._gridPadding.top-al.x2axis.getHeight(),left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});for(aB=8;aB>0;aB--){al[aA[aB-1]].pack({position:"absolute",top:0,right:this._gridPadding.right-ar[aB-1]},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top})}var an=(this._width-this._gridPadding.left-this._gridPadding.right)/2+this._gridPadding.left-al.yMidAxis.getWidth()/2;al.yMidAxis.pack({position:"absolute",top:0,left:an,zIndex:9,textAlign:"center"},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top});this.target.append(this.grid.createElement(this._gridPadding,this));this.grid.draw();var ak=this.series;var aD=ak.length;for(aB=0,ay=aD;aB<ay;aB++){az=this.seriesStack[aB];this.target.append(ak[az].shadowCanvas.createElement(this._gridPadding,"jqplot-series-shadowCanvas",null,this));ak[az].shadowCanvas.setContext();ak[az].shadowCanvas._elem.data("seriesIndex",az)}for(aB=0,ay=aD;aB<ay;aB++){az=this.seriesStack[aB];this.target.append(ak[az].canvas.createElement(this._gridPadding,"jqplot-series-canvas",null,this));ak[az].canvas.setContext();ak[az].canvas._elem.data("seriesIndex",az)}this.target.append(this.eventCanvas.createElement(this._gridPadding,"jqplot-event-canvas",null,this));this.eventCanvas.setContext();this.eventCanvas._ctx.fillStyle="rgba(0,0,0,0)";this.eventCanvas._ctx.fillRect(0,0,this.eventCanvas._ctx.canvas.width,this.eventCanvas._ctx.canvas.height);this.bindCustomEvents();if(this.legend.preDraw){this.eventCanvas._elem.before(aF);this.legend.pack(at);if(this.legend._elem){this.drawSeries({legendInfo:{location:this.legend.location,placement:this.legend.placement,width:this.legend.getWidth(),height:this.legend.getHeight(),xoffset:this.legend.xoffset,yoffset:this.legend.yoffset}})}else{this.drawSeries()}}else{this.drawSeries();if(aD){H(ak[aD-1].canvas._elem).after(aF)}this.legend.pack(at)}for(var aB=0,ay=H.jqplot.eventListenerHooks.length;aB<ay;aB++){this.eventCanvas._elem.bind(H.jqplot.eventListenerHooks[aB][0],{plot:this},H.jqplot.eventListenerHooks[aB][1])}for(var aB=0,ay=this.eventListenerHooks.hooks.length;aB<ay;aB++){this.eventCanvas._elem.bind(this.eventListenerHooks.hooks[aB][0],{plot:this},this.eventListenerHooks.hooks[aB][1])}var aq=this.fillBetween;if(aq.fill&&aq.series1!==aq.series2&&aq.series1<aD&&aq.series2<aD&&ak[aq.series1]._type==="line"&&ak[aq.series2]._type==="line"){this.doFillBetweenLines()}for(var aB=0,ay=H.jqplot.postDrawHooks.length;aB<ay;aB++){H.jqplot.postDrawHooks[aB].call(this)}for(var aB=0,ay=this.postDrawHooks.hooks.length;aB<ay;aB++){this.postDrawHooks.hooks[aB].apply(this,this.postDrawHooks.args[aB])}if(this.target.is(":visible")){this._drawCount+=1}var ao,ap,aw,aj;for(aB=0,ay=aD;aB<ay;aB++){ao=ak[aB];ap=ao.renderer;aw=".jqplot-point-label.jqplot-series-"+aB;if(ap.animation&&ap.animation._supported&&ap.animation.show&&(this._drawCount<2||this.animateReplot)){aj=this.target.find(aw);aj.stop(true,true).hide();ao.canvas._elem.stop(true,true).hide();ao.shadowCanvas._elem.stop(true,true).hide();ao.canvas._elem.jqplotEffect("blind",{mode:"show",direction:ap.animation.direction},ap.animation.speed);ao.shadowCanvas._elem.jqplotEffect("blind",{mode:"show",direction:ap.animation.direction},ap.animation.speed);aj.fadeIn(ap.animation.speed*0.8)}}aj=null;this.target.trigger("jqplotPostDraw",[this])}};N.prototype.doFillBetweenLines=function(){var ah=this.fillBetween;var aq=ah.series1;var ao=ah.series2;var ap=(aq<ao)?aq:ao;var an=(ao>aq)?ao:aq;var al=this.series[ap];var ak=this.series[an];if(ak.renderer.smooth){var aj=ak.renderer._smoothedData.slice(0).reverse()}else{var aj=ak.gridData.slice(0).reverse()}if(al.renderer.smooth){var am=al.renderer._smoothedData.concat(aj)}else{var am=al.gridData.concat(aj)}var ai=(ah.color!==null)?ah.color:this.series[aq].fillColor;var ar=(ah.baseSeries!==null)?ah.baseSeries:ap;var ag=this.series[ar].renderer.shapeRenderer;var af={fillStyle:ai,fill:true,closePath:true};ag.draw(al.shadowCanvas._ctx,am,af)};this.bindCustomEvents=function(){this.eventCanvas._elem.bind("click",{plot:this},this.onClick);this.eventCanvas._elem.bind("dblclick",{plot:this},this.onDblClick);this.eventCanvas._elem.bind("mousedown",{plot:this},this.onMouseDown);this.eventCanvas._elem.bind("mousemove",{plot:this},this.onMouseMove);this.eventCanvas._elem.bind("mouseenter",{plot:this},this.onMouseEnter);this.eventCanvas._elem.bind("mouseleave",{plot:this},this.onMouseLeave);if(this.captureRightClick){this.eventCanvas._elem.bind("mouseup",{plot:this},this.onRightClick);this.eventCanvas._elem.get(0).oncontextmenu=function(){return false}}else{this.eventCanvas._elem.bind("mouseup",{plot:this},this.onMouseUp)}};function ac(ao){var am=ao.data.plot;var ai=am.eventCanvas._elem.offset();var al={x:ao.pageX-ai.left,y:ao.pageY-ai.top};var aj={xaxis:null,yaxis:null,x2axis:null,y2axis:null,y3axis:null,y4axis:null,y5axis:null,y6axis:null,y7axis:null,y8axis:null,y9axis:null,yMidAxis:null};var ak=["xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];var af=am.axes;var ag,ah;for(ag=11;ag>0;ag--){ah=ak[ag-1];if(af[ah].show){aj[ah]=af[ah].series_p2u(al[ah.charAt(0)])}}return{offsets:ai,gridPos:al,dataPos:aj}}function ae(af,ag){var ak=ag.series;var aQ,aO,aN,aI,aJ,aD,aC,ap,an,at,au,aE;var aM,aR,aK,al,aB,aG,aP;var ah,aH;for(aN=ag.seriesStack.length-1;aN>=0;aN--){aQ=ag.seriesStack[aN];aI=ak[aQ];aP=aI._highlightThreshold;switch(aI.renderer.constructor){case H.jqplot.BarRenderer:aD=af.x;aC=af.y;for(aO=0;aO<aI._barPoints.length;aO++){aB=aI._barPoints[aO];aK=aI.gridData[aO];if(aD>aB[0][0]&&aD<aB[2][0]&&aC>aB[2][1]&&aC<aB[0][1]){return{seriesIndex:aI.index,pointIndex:aO,gridData:aK,data:aI.data[aO],points:aI._barPoints[aO]}}}break;case H.jqplot.PyramidRenderer:aD=af.x;aC=af.y;for(aO=0;aO<aI._barPoints.length;aO++){aB=aI._barPoints[aO];aK=aI.gridData[aO];if(aD>aB[0][0]+aP[0][0]&&aD<aB[2][0]+aP[2][0]&&aC>aB[2][1]&&aC<aB[0][1]){return{seriesIndex:aI.index,pointIndex:aO,gridData:aK,data:aI.data[aO],points:aI._barPoints[aO]}}}break;case H.jqplot.DonutRenderer:at=aI.startAngle/180*Math.PI;aD=af.x-aI._center[0];aC=af.y-aI._center[1];aJ=Math.sqrt(Math.pow(aD,2)+Math.pow(aC,2));if(aD>0&&-aC>=0){ap=2*Math.PI-Math.atan(-aC/aD)}else{if(aD>0&&-aC<0){ap=-Math.atan(-aC/aD)}else{if(aD<0){ap=Math.PI-Math.atan(-aC/aD)}else{if(aD==0&&-aC>0){ap=3*Math.PI/2}else{if(aD==0&&-aC<0){ap=Math.PI/2}else{if(aD==0&&aC==0){ap=0}}}}}}if(at){ap-=at;if(ap<0){ap+=2*Math.PI}else{if(ap>2*Math.PI){ap-=2*Math.PI}}}an=aI.sliceMargin/180*Math.PI;if(aJ<aI._radius&&aJ>aI._innerRadius){for(aO=0;aO<aI.gridData.length;aO++){au=(aO>0)?aI.gridData[aO-1][1]+an:an;aE=aI.gridData[aO][1];if(ap>au&&ap<aE){return{seriesIndex:aI.index,pointIndex:aO,gridData:aI.gridData[aO],data:aI.data[aO]}}}}break;case H.jqplot.PieRenderer:at=aI.startAngle/180*Math.PI;aD=af.x-aI._center[0];aC=af.y-aI._center[1];aJ=Math.sqrt(Math.pow(aD,2)+Math.pow(aC,2));if(aD>0&&-aC>=0){ap=2*Math.PI-Math.atan(-aC/aD)}else{if(aD>0&&-aC<0){ap=-Math.atan(-aC/aD)}else{if(aD<0){ap=Math.PI-Math.atan(-aC/aD)}else{if(aD==0&&-aC>0){ap=3*Math.PI/2}else{if(aD==0&&-aC<0){ap=Math.PI/2}else{if(aD==0&&aC==0){ap=0}}}}}}if(at){ap-=at;if(ap<0){ap+=2*Math.PI}else{if(ap>2*Math.PI){ap-=2*Math.PI}}}an=aI.sliceMargin/180*Math.PI;if(aJ<aI._radius){for(aO=0;aO<aI.gridData.length;aO++){au=(aO>0)?aI.gridData[aO-1][1]+an:an;aE=aI.gridData[aO][1];if(ap>au&&ap<aE){return{seriesIndex:aI.index,pointIndex:aO,gridData:aI.gridData[aO],data:aI.data[aO]}}}}break;case H.jqplot.BubbleRenderer:aD=af.x;aC=af.y;var az=null;if(aI.show){for(var aO=0;aO<aI.gridData.length;aO++){aK=aI.gridData[aO];aR=Math.sqrt((aD-aK[0])*(aD-aK[0])+(aC-aK[1])*(aC-aK[1]));if(aR<=aK[2]&&(aR<=aM||aM==null)){aM=aR;az={seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}if(az!=null){return az}}break;case H.jqplot.FunnelRenderer:aD=af.x;aC=af.y;var aF=aI._vertices,aj=aF[0],ai=aF[aF.length-1],am,ay,ar;function aL(aU,aW,aV){var aT=(aW[1]-aV[1])/(aW[0]-aV[0]);var aS=aW[1]-aT*aW[0];var aX=aU+aW[1];return[(aX-aS)/aT,aX]}am=aL(aC,aj[0],ai[3]);ay=aL(aC,aj[1],ai[2]);for(aO=0;aO<aF.length;aO++){ar=aF[aO];if(aC>=ar[0][1]&&aC<=ar[3][1]&&aD>=am[0]&&aD<=ay[0]){return{seriesIndex:aI.index,pointIndex:aO,gridData:null,data:aI.data[aO]}}}break;case H.jqplot.LineRenderer:aD=af.x;aC=af.y;aJ=aI.renderer;if(aI.show){if((aI.fill||(aI.renderer.bands.show&&aI.renderer.bands.fill))&&(!ag.plugins.highlighter||!ag.plugins.highlighter.show)){var aq=false;if(aD>aI._boundingBox[0][0]&&aD<aI._boundingBox[1][0]&&aC>aI._boundingBox[1][1]&&aC<aI._boundingBox[0][1]){var ax=aI._areaPoints.length;var aA;var aO=ax-1;for(var aA=0;aA<ax;aA++){var aw=[aI._areaPoints[aA][0],aI._areaPoints[aA][1]];var av=[aI._areaPoints[aO][0],aI._areaPoints[aO][1]];if(aw[1]<aC&&av[1]>=aC||av[1]<aC&&aw[1]>=aC){if(aw[0]+(aC-aw[1])/(av[1]-aw[1])*(av[0]-aw[0])<aD){aq=!aq}}aO=aA}}if(aq){return{seriesIndex:aQ,pointIndex:null,gridData:aI.gridData,data:aI.data,points:aI._areaPoints}}break}else{aH=aI.markerRenderer.size/2+aI.neighborThreshold;ah=(aH>0)?aH:0;for(var aO=0;aO<aI.gridData.length;aO++){aK=aI.gridData[aO];if(aJ.constructor==H.jqplot.OHLCRenderer){if(aJ.candleStick){var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._bodyWidth/2&&aD<=aK[0]+aJ._bodyWidth/2&&aC>=ao(aI.data[aO][2])&&aC<=ao(aI.data[aO][3])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}else{if(!aJ.hlc){var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._tickLength&&aD<=aK[0]+aJ._tickLength&&aC>=ao(aI.data[aO][2])&&aC<=ao(aI.data[aO][3])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}else{var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._tickLength&&aD<=aK[0]+aJ._tickLength&&aC>=ao(aI.data[aO][1])&&aC<=ao(aI.data[aO][2])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}}}else{if(aK[0]!=null&&aK[1]!=null){aR=Math.sqrt((aD-aK[0])*(aD-aK[0])+(aC-aK[1])*(aC-aK[1]));if(aR<=ah&&(aR<=aM||aM==null)){aM=aR;return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}}}}}break;default:aD=af.x;aC=af.y;aJ=aI.renderer;if(aI.show){aH=aI.markerRenderer.size/2+aI.neighborThreshold;ah=(aH>0)?aH:0;for(var aO=0;aO<aI.gridData.length;aO++){aK=aI.gridData[aO];if(aJ.constructor==H.jqplot.OHLCRenderer){if(aJ.candleStick){var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._bodyWidth/2&&aD<=aK[0]+aJ._bodyWidth/2&&aC>=ao(aI.data[aO][2])&&aC<=ao(aI.data[aO][3])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}else{if(!aJ.hlc){var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._tickLength&&aD<=aK[0]+aJ._tickLength&&aC>=ao(aI.data[aO][2])&&aC<=ao(aI.data[aO][3])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}else{var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._tickLength&&aD<=aK[0]+aJ._tickLength&&aC>=ao(aI.data[aO][1])&&aC<=ao(aI.data[aO][2])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}}}else{aR=Math.sqrt((aD-aK[0])*(aD-aK[0])+(aC-aK[1])*(aC-aK[1]));if(aR<=ah&&(aR<=aM||aM==null)){aM=aR;return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}}}break}}return null}this.onClick=function(ah){var ag=ac(ah);var aj=ah.data.plot;var ai=ae(ag.gridPos,aj);var af=H.Event("jqplotClick");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])};this.onDblClick=function(ah){var ag=ac(ah);var aj=ah.data.plot;var ai=ae(ag.gridPos,aj);var af=H.Event("jqplotDblClick");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])};this.onMouseDown=function(ah){var ag=ac(ah);var aj=ah.data.plot;var ai=ae(ag.gridPos,aj);var af=H.Event("jqplotMouseDown");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])};this.onMouseUp=function(ah){var ag=ac(ah);var af=H.Event("jqplotMouseUp");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,null,ah.data.plot])};this.onRightClick=function(ah){var ag=ac(ah);var aj=ah.data.plot;var ai=ae(ag.gridPos,aj);if(aj.captureRightClick){if(ah.which==3){var af=H.Event("jqplotRightClick");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])}else{var af=H.Event("jqplotMouseUp");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])}}};this.onMouseMove=function(ah){var ag=ac(ah);var aj=ah.data.plot;var ai=ae(ag.gridPos,aj);var af=H.Event("jqplotMouseMove");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])};this.onMouseEnter=function(ah){var ag=ac(ah);var ai=ah.data.plot;var af=H.Event("jqplotMouseEnter");af.pageX=ah.pageX;af.pageY=ah.pageY;af.relatedTarget=ah.relatedTarget;H(this).trigger(af,[ag.gridPos,ag.dataPos,null,ai])};this.onMouseLeave=function(ah){var ag=ac(ah);var ai=ah.data.plot;var af=H.Event("jqplotMouseLeave");af.pageX=ah.pageX;af.pageY=ah.pageY;af.relatedTarget=ah.relatedTarget;H(this).trigger(af,[ag.gridPos,ag.dataPos,null,ai])};this.drawSeries=function(ah,af){var aj,ai,ag;af=(typeof(ah)==="number"&&af==null)?ah:af;ah=(typeof(ah)==="object")?ah:{};if(af!=r){ai=this.series[af];ag=ai.shadowCanvas._ctx;ag.clearRect(0,0,ag.canvas.width,ag.canvas.height);ai.drawShadow(ag,ah,this);ag=ai.canvas._ctx;ag.clearRect(0,0,ag.canvas.width,ag.canvas.height);ai.draw(ag,ah,this);if(ai.renderer.constructor==H.jqplot.BezierCurveRenderer){if(af<this.series.length-1){this.drawSeries(af+1)}}}else{for(aj=0;aj<this.series.length;aj++){ai=this.series[aj];ag=ai.shadowCanvas._ctx;ag.clearRect(0,0,ag.canvas.width,ag.canvas.height);ai.drawShadow(ag,ah,this);ag=ai.canvas._ctx;ag.clearRect(0,0,ag.canvas.width,ag.canvas.height);ai.draw(ag,ah,this)}}ah=af=aj=ai=ag=null};this.moveSeriesToFront=function(ag){ag=parseInt(ag,10);var aj=H.inArray(ag,this.seriesStack);if(aj==-1){return}if(aj==this.seriesStack.length-1){this.previousSeriesStack=this.seriesStack.slice(0);return}var af=this.seriesStack[this.seriesStack.length-1];var ai=this.series[ag].canvas._elem.detach();var ah=this.series[ag].shadowCanvas._elem.detach();this.series[af].shadowCanvas._elem.after(ah);this.series[af].canvas._elem.after(ai);this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack.splice(aj,1);this.seriesStack.push(ag)};this.moveSeriesToBack=function(ag){ag=parseInt(ag,10);var aj=H.inArray(ag,this.seriesStack);if(aj==0||aj==-1){return}var af=this.seriesStack[0];var ai=this.series[ag].canvas._elem.detach();var ah=this.series[ag].shadowCanvas._elem.detach();this.series[af].shadowCanvas._elem.before(ah);this.series[af].canvas._elem.before(ai);this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack.splice(aj,1);this.seriesStack.unshift(ag)};this.restorePreviousSeriesOrder=function(){var al,ak,aj,ai,ah,af,ag;if(this.seriesStack==this.previousSeriesStack){return}for(al=1;al<this.previousSeriesStack.length;al++){af=this.previousSeriesStack[al];ag=this.previousSeriesStack[al-1];aj=this.series[af].canvas._elem.detach();ai=this.series[af].shadowCanvas._elem.detach();this.series[ag].shadowCanvas._elem.after(ai);this.series[ag].canvas._elem.after(aj)}ah=this.seriesStack.slice(0);this.seriesStack=this.previousSeriesStack.slice(0);this.previousSeriesStack=ah};this.restoreOriginalSeriesOrder=function(){var aj,ai,af=[],ah,ag;for(aj=0;aj<this.series.length;aj++){af.push(aj)}if(this.seriesStack==af){return}this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack=af;for(aj=1;aj<this.seriesStack.length;aj++){ah=this.series[aj].canvas._elem.detach();ag=this.series[aj].shadowCanvas._elem.detach();this.series[aj-1].shadowCanvas._elem.after(ag);this.series[aj-1].canvas._elem.after(ah)}};this.activateTheme=function(af){this.themeEngine.activate(this,af)}}H.jqplot.computeHighlightColors=function(ac){var ae;if(H.isArray(ac)){ae=[];for(var ag=0;ag<ac.length;ag++){var af=H.jqplot.getColorComponents(ac[ag]);var ab=[af[0],af[1],af[2]];var ah=ab[0]+ab[1]+ab[2];for(var ad=0;ad<3;ad++){ab[ad]=(ah>660)?ab[ad]*0.85:0.73*ab[ad]+90;ab[ad]=parseInt(ab[ad],10);(ab[ad]>255)?255:ab[ad]}ab[3]=0.3+0.35*af[3];ae.push("rgba("+ab[0]+","+ab[1]+","+ab[2]+","+ab[3]+")")}}else{var af=H.jqplot.getColorComponents(ac);var ab=[af[0],af[1],af[2]];var ah=ab[0]+ab[1]+ab[2];for(var ad=0;ad<3;ad++){ab[ad]=(ah>660)?ab[ad]*0.85:0.73*ab[ad]+90;ab[ad]=parseInt(ab[ad],10);(ab[ad]>255)?255:ab[ad]}ab[3]=0.3+0.35*af[3];ae="rgba("+ab[0]+","+ab[1]+","+ab[2]+","+ab[3]+")"}return ae};H.jqplot.ColorGenerator=function(ac){ac=ac||H.jqplot.config.defaultColors;var ab=0;this.next=function(){if(ab<ac.length){return ac[ab++]}else{ab=0;return ac[ab++]}};this.previous=function(){if(ab>0){return ac[ab--]}else{ab=ac.length-1;return ac[ab]}};this.get=function(ae){var ad=ae-ac.length*Math.floor(ae/ac.length);return ac[ad]};this.setColors=function(ad){ac=ad};this.reset=function(){ab=0};this.getIndex=function(){return ab};this.setIndex=function(ad){ab=ad}};H.jqplot.hex2rgb=function(ad,ab){ad=ad.replace("#","");if(ad.length==3){ad=ad.charAt(0)+ad.charAt(0)+ad.charAt(1)+ad.charAt(1)+ad.charAt(2)+ad.charAt(2)}var ac;ac="rgba("+parseInt(ad.slice(0,2),16)+", "+parseInt(ad.slice(2,4),16)+", "+parseInt(ad.slice(4,6),16);if(ab){ac+=", "+ab}ac+=")";return ac};H.jqplot.rgb2hex=function(ag){var ad=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *(?:, *[0-9.]*)?\)/;var ab=ag.match(ad);var af="#";for(var ae=1;ae<4;ae++){var ac;if(ab[ae].search(/%/)!=-1){ac=parseInt(255*ab[ae]/100,10).toString(16);if(ac.length==1){ac="0"+ac}}else{ac=parseInt(ab[ae],10).toString(16);if(ac.length==1){ac="0"+ac}}af+=ac}return af};H.jqplot.normalize2rgb=function(ac,ab){if(ac.search(/^ *rgba?\(/)!=-1){return ac}else{if(ac.search(/^ *#?[0-9a-fA-F]?[0-9a-fA-F]/)!=-1){return H.jqplot.hex2rgb(ac,ab)}else{throw"invalid color spec"}}};H.jqplot.getColorComponents=function(ag){ag=H.jqplot.colorKeywordMap[ag]||ag;var ae=H.jqplot.normalize2rgb(ag);var ad=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *,? *([0-9.]* *)?\)/;var ab=ae.match(ad);var ac=[];for(var af=1;af<4;af++){if(ab[af].search(/%/)!=-1){ac[af-1]=parseInt(255*ab[af]/100,10)}else{ac[af-1]=parseInt(ab[af],10)}}ac[3]=parseFloat(ab[4])?parseFloat(ab[4]):1;return ac};H.jqplot.colorKeywordMap={aliceblue:"rgb(240, 248, 255)",antiquewhite:"rgb(250, 235, 215)",aqua:"rgb( 0, 255, 255)",aquamarine:"rgb(127, 255, 212)",azure:"rgb(240, 255, 255)",beige:"rgb(245, 245, 220)",bisque:"rgb(255, 228, 196)",black:"rgb( 0, 0, 0)",blanchedalmond:"rgb(255, 235, 205)",blue:"rgb( 0, 0, 255)",blueviolet:"rgb(138, 43, 226)",brown:"rgb(165, 42, 42)",burlywood:"rgb(222, 184, 135)",cadetblue:"rgb( 95, 158, 160)",chartreuse:"rgb(127, 255, 0)",chocolate:"rgb(210, 105, 30)",coral:"rgb(255, 127, 80)",cornflowerblue:"rgb(100, 149, 237)",cornsilk:"rgb(255, 248, 220)",crimson:"rgb(220, 20, 60)",cyan:"rgb( 0, 255, 255)",darkblue:"rgb( 0, 0, 139)",darkcyan:"rgb( 0, 139, 139)",darkgoldenrod:"rgb(184, 134, 11)",darkgray:"rgb(169, 169, 169)",darkgreen:"rgb( 0, 100, 0)",darkgrey:"rgb(169, 169, 169)",darkkhaki:"rgb(189, 183, 107)",darkmagenta:"rgb(139, 0, 139)",darkolivegreen:"rgb( 85, 107, 47)",darkorange:"rgb(255, 140, 0)",darkorchid:"rgb(153, 50, 204)",darkred:"rgb(139, 0, 0)",darksalmon:"rgb(233, 150, 122)",darkseagreen:"rgb(143, 188, 143)",darkslateblue:"rgb( 72, 61, 139)",darkslategray:"rgb( 47, 79, 79)",darkslategrey:"rgb( 47, 79, 79)",darkturquoise:"rgb( 0, 206, 209)",darkviolet:"rgb(148, 0, 211)",deeppink:"rgb(255, 20, 147)",deepskyblue:"rgb( 0, 191, 255)",dimgray:"rgb(105, 105, 105)",dimgrey:"rgb(105, 105, 105)",dodgerblue:"rgb( 30, 144, 255)",firebrick:"rgb(178, 34, 34)",floralwhite:"rgb(255, 250, 240)",forestgreen:"rgb( 34, 139, 34)",fuchsia:"rgb(255, 0, 255)",gainsboro:"rgb(220, 220, 220)",ghostwhite:"rgb(248, 248, 255)",gold:"rgb(255, 215, 0)",goldenrod:"rgb(218, 165, 32)",gray:"rgb(128, 128, 128)",grey:"rgb(128, 128, 128)",green:"rgb( 0, 128, 0)",greenyellow:"rgb(173, 255, 47)",honeydew:"rgb(240, 255, 240)",hotpink:"rgb(255, 105, 180)",indianred:"rgb(205, 92, 92)",indigo:"rgb( 75, 0, 130)",ivory:"rgb(255, 255, 240)",khaki:"rgb(240, 230, 140)",lavender:"rgb(230, 230, 250)",lavenderblush:"rgb(255, 240, 245)",lawngreen:"rgb(124, 252, 0)",lemonchiffon:"rgb(255, 250, 205)",lightblue:"rgb(173, 216, 230)",lightcoral:"rgb(240, 128, 128)",lightcyan:"rgb(224, 255, 255)",lightgoldenrodyellow:"rgb(250, 250, 210)",lightgray:"rgb(211, 211, 211)",lightgreen:"rgb(144, 238, 144)",lightgrey:"rgb(211, 211, 211)",lightpink:"rgb(255, 182, 193)",lightsalmon:"rgb(255, 160, 122)",lightseagreen:"rgb( 32, 178, 170)",lightskyblue:"rgb(135, 206, 250)",lightslategray:"rgb(119, 136, 153)",lightslategrey:"rgb(119, 136, 153)",lightsteelblue:"rgb(176, 196, 222)",lightyellow:"rgb(255, 255, 224)",lime:"rgb( 0, 255, 0)",limegreen:"rgb( 50, 205, 50)",linen:"rgb(250, 240, 230)",magenta:"rgb(255, 0, 255)",maroon:"rgb(128, 0, 0)",mediumaquamarine:"rgb(102, 205, 170)",mediumblue:"rgb( 0, 0, 205)",mediumorchid:"rgb(186, 85, 211)",mediumpurple:"rgb(147, 112, 219)",mediumseagreen:"rgb( 60, 179, 113)",mediumslateblue:"rgb(123, 104, 238)",mediumspringgreen:"rgb( 0, 250, 154)",mediumturquoise:"rgb( 72, 209, 204)",mediumvioletred:"rgb(199, 21, 133)",midnightblue:"rgb( 25, 25, 112)",mintcream:"rgb(245, 255, 250)",mistyrose:"rgb(255, 228, 225)",moccasin:"rgb(255, 228, 181)",navajowhite:"rgb(255, 222, 173)",navy:"rgb( 0, 0, 128)",oldlace:"rgb(253, 245, 230)",olive:"rgb(128, 128, 0)",olivedrab:"rgb(107, 142, 35)",orange:"rgb(255, 165, 0)",orangered:"rgb(255, 69, 0)",orchid:"rgb(218, 112, 214)",palegoldenrod:"rgb(238, 232, 170)",palegreen:"rgb(152, 251, 152)",paleturquoise:"rgb(175, 238, 238)",palevioletred:"rgb(219, 112, 147)",papayawhip:"rgb(255, 239, 213)",peachpuff:"rgb(255, 218, 185)",peru:"rgb(205, 133, 63)",pink:"rgb(255, 192, 203)",plum:"rgb(221, 160, 221)",powderblue:"rgb(176, 224, 230)",purple:"rgb(128, 0, 128)",red:"rgb(255, 0, 0)",rosybrown:"rgb(188, 143, 143)",royalblue:"rgb( 65, 105, 225)",saddlebrown:"rgb(139, 69, 19)",salmon:"rgb(250, 128, 114)",sandybrown:"rgb(244, 164, 96)",seagreen:"rgb( 46, 139, 87)",seashell:"rgb(255, 245, 238)",sienna:"rgb(160, 82, 45)",silver:"rgb(192, 192, 192)",skyblue:"rgb(135, 206, 235)",slateblue:"rgb(106, 90, 205)",slategray:"rgb(112, 128, 144)",slategrey:"rgb(112, 128, 144)",snow:"rgb(255, 250, 250)",springgreen:"rgb( 0, 255, 127)",steelblue:"rgb( 70, 130, 180)",tan:"rgb(210, 180, 140)",teal:"rgb( 0, 128, 128)",thistle:"rgb(216, 191, 216)",tomato:"rgb(255, 99, 71)",turquoise:"rgb( 64, 224, 208)",violet:"rgb(238, 130, 238)",wheat:"rgb(245, 222, 179)",white:"rgb(255, 255, 255)",whitesmoke:"rgb(245, 245, 245)",yellow:"rgb(255, 255, 0)",yellowgreen:"rgb(154, 205, 50)"};H.jqplot.AxisLabelRenderer=function(ab){H.jqplot.ElemContainer.call(this);this.axis;this.show=true;this.label="";this.fontFamily=null;this.fontSize=null;this.textColor=null;this._elem;this.escapeHTML=false;H.extend(true,this,ab)};H.jqplot.AxisLabelRenderer.prototype=new H.jqplot.ElemContainer();H.jqplot.AxisLabelRenderer.prototype.constructor=H.jqplot.AxisLabelRenderer;H.jqplot.AxisLabelRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.AxisLabelRenderer.prototype.draw=function(ab,ac){if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=H('<div style="position:absolute;" class="jqplot-'+this.axis+'-label"></div>');if(Number(this.label)){this._elem.css("white-space","nowrap")}if(!this.escapeHTML){this._elem.html(this.label)}else{this._elem.text(this.label)}if(this.fontFamily){this._elem.css("font-family",this.fontFamily)}if(this.fontSize){this._elem.css("font-size",this.fontSize)}if(this.textColor){this._elem.css("color",this.textColor)}return this._elem};H.jqplot.AxisLabelRenderer.prototype.pack=function(){};H.jqplot.AxisTickRenderer=function(ab){H.jqplot.ElemContainer.call(this);this.mark="outside";this.axis;this.showMark=true;this.showGridline=true;this.isMinorTick=false;this.size=4;this.markSize=6;this.show=true;this.showLabel=true;this.label=null;this.value=null;this._styles={};this.formatter=H.jqplot.DefaultTickFormatter;this.prefix="";this.suffix="";this.formatString="";this.fontFamily;this.fontSize;this.textColor;this.escapeHTML=false;this._elem;this._breakTick=false;H.extend(true,this,ab)};H.jqplot.AxisTickRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.AxisTickRenderer.prototype=new H.jqplot.ElemContainer();H.jqplot.AxisTickRenderer.prototype.constructor=H.jqplot.AxisTickRenderer;H.jqplot.AxisTickRenderer.prototype.setTick=function(ab,ad,ac){this.value=ab;this.axis=ad;if(ac){this.isMinorTick=true}return this};H.jqplot.AxisTickRenderer.prototype.draw=function(){if(this.label===null){this.label=this.prefix+this.formatter(this.formatString,this.value)+this.suffix}var ac={position:"absolute"};if(Number(this.label)){ac.whitSpace="nowrap"}if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=H(document.createElement("div"));this._elem.addClass("jqplot-"+this.axis+"-tick");if(!this.escapeHTML){this._elem.html(this.label)}else{this._elem.text(this.label)}this._elem.css(ac);for(var ab in this._styles){this._elem.css(ab,this._styles[ab])}if(this.fontFamily){this._elem.css("font-family",this.fontFamily)}if(this.fontSize){this._elem.css("font-size",this.fontSize)}if(this.textColor){this._elem.css("color",this.textColor)}if(this._breakTick){this._elem.addClass("jqplot-breakTick")}return this._elem};H.jqplot.DefaultTickFormatter=function(ab,ac){if(typeof ac=="number"){if(!ab){ab=H.jqplot.config.defaultTickFormatString}return H.jqplot.sprintf(ab,ac)}else{return String(ac)}};H.jqplot.PercentTickFormatter=function(ab,ac){if(typeof ac=="number"){ac=100*ac;if(!ab){ab=H.jqplot.config.defaultTickFormatString}return H.jqplot.sprintf(ab,ac)}else{return String(ac)}};H.jqplot.AxisTickRenderer.prototype.pack=function(){};H.jqplot.CanvasGridRenderer=function(){this.shadowRenderer=new H.jqplot.ShadowRenderer()};H.jqplot.CanvasGridRenderer.prototype.init=function(ac){this._ctx;H.extend(true,this,ac);var ab={lineJoin:"miter",lineCap:"round",fill:false,isarc:false,angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.shadowWidth,closePath:false,strokeStyle:this.shadowColor};this.renderer.shadowRenderer.init(ab)};H.jqplot.CanvasGridRenderer.prototype.createElement=function(ae){var ad;if(this._elem){if(H.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==r){ad=this._elem.get(0);window.G_vmlCanvasManager.uninitElement(ad);ad=null}this._elem.emptyForce();this._elem=null}ad=ae.canvasManager.getCanvas();var ab=this._plotDimensions.width;var ac=this._plotDimensions.height;ad.width=ab;ad.height=ac;this._elem=H(ad);this._elem.addClass("jqplot-grid-canvas");this._elem.css({position:"absolute",left:0,top:0});ad=ae.canvasManager.initCanvas(ad);this._top=this._offsets.top;this._bottom=ac-this._offsets.bottom;this._left=this._offsets.left;this._right=ab-this._offsets.right;this._width=this._right-this._left;this._height=this._bottom-this._top;ad=null;return this._elem};H.jqplot.CanvasGridRenderer.prototype.draw=function(){this._ctx=this._elem.get(0).getContext("2d");var am=this._ctx;var ap=this._axes;am.save();am.clearRect(0,0,this._plotDimensions.width,this._plotDimensions.height);am.fillStyle=this.backgroundColor||this.background;am.fillRect(this._left,this._top,this._width,this._height);am.save();am.lineJoin="miter";am.lineCap="butt";am.lineWidth=this.gridLineWidth;am.strokeStyle=this.gridLineColor;var at,ar,aj,ak;var ag=["xaxis","yaxis","x2axis","y2axis"];for(var aq=4;aq>0;aq--){var aw=ag[aq-1];var ab=ap[aw];var au=ab._ticks;var al=au.length;if(ab.show){if(ab.drawBaseline){var av={};if(ab.baselineWidth!==null){av.lineWidth=ab.baselineWidth}if(ab.baselineColor!==null){av.strokeStyle=ab.baselineColor}switch(aw){case"xaxis":ai(this._left,this._bottom,this._right,this._bottom,av);break;case"yaxis":ai(this._left,this._bottom,this._left,this._top,av);break;case"x2axis":ai(this._left,this._bottom,this._right,this._bottom,av);break;case"y2axis":ai(this._right,this._bottom,this._right,this._top,av);break}}for(var an=al;an>0;an--){var ah=au[an-1];if(ah.show){var ae=Math.round(ab.u2p(ah.value))+0.5;switch(aw){case"xaxis":if(ah.showGridline&&this.drawGridlines&&((!ah.isMinorTick&&ab.drawMajorGridlines)||(ah.isMinorTick&&ab.drawMinorGridlines))){ai(ae,this._top,ae,this._bottom)}if(ah.showMark&&ah.mark&&((!ah.isMinorTick&&ab.drawMajorTickMarks)||(ah.isMinorTick&&ab.drawMinorTickMarks))){aj=ah.markSize;ak=ah.mark;var ae=Math.round(ab.u2p(ah.value))+0.5;switch(ak){case"outside":at=this._bottom;ar=this._bottom+aj;break;case"inside":at=this._bottom-aj;ar=this._bottom;break;case"cross":at=this._bottom-aj;ar=this._bottom+aj;break;default:at=this._bottom;ar=this._bottom+aj;break}if(this.shadow){this.renderer.shadowRenderer.draw(am,[[ae,at],[ae,ar]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}ai(ae,at,ae,ar)}break;case"yaxis":if(ah.showGridline&&this.drawGridlines&&((!ah.isMinorTick&&ab.drawMajorGridlines)||(ah.isMinorTick&&ab.drawMinorGridlines))){ai(this._right,ae,this._left,ae)}if(ah.showMark&&ah.mark&&((!ah.isMinorTick&&ab.drawMajorTickMarks)||(ah.isMinorTick&&ab.drawMinorTickMarks))){aj=ah.markSize;ak=ah.mark;var ae=Math.round(ab.u2p(ah.value))+0.5;switch(ak){case"outside":at=this._left-aj;ar=this._left;break;case"inside":at=this._left;ar=this._left+aj;break;case"cross":at=this._left-aj;ar=this._left+aj;break;default:at=this._left-aj;ar=this._left;break}if(this.shadow){this.renderer.shadowRenderer.draw(am,[[at,ae],[ar,ae]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ai(at,ae,ar,ae,{strokeStyle:ab.borderColor})}break;case"x2axis":if(ah.showGridline&&this.drawGridlines&&((!ah.isMinorTick&&ab.drawMajorGridlines)||(ah.isMinorTick&&ab.drawMinorGridlines))){ai(ae,this._bottom,ae,this._top)}if(ah.showMark&&ah.mark&&((!ah.isMinorTick&&ab.drawMajorTickMarks)||(ah.isMinorTick&&ab.drawMinorTickMarks))){aj=ah.markSize;ak=ah.mark;var ae=Math.round(ab.u2p(ah.value))+0.5;switch(ak){case"outside":at=this._top-aj;ar=this._top;break;case"inside":at=this._top;ar=this._top+aj;break;case"cross":at=this._top-aj;ar=this._top+aj;break;default:at=this._top-aj;ar=this._top;break}if(this.shadow){this.renderer.shadowRenderer.draw(am,[[ae,at],[ae,ar]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}ai(ae,at,ae,ar)}break;case"y2axis":if(ah.showGridline&&this.drawGridlines&&((!ah.isMinorTick&&ab.drawMajorGridlines)||(ah.isMinorTick&&ab.drawMinorGridlines))){ai(this._left,ae,this._right,ae)}if(ah.showMark&&ah.mark&&((!ah.isMinorTick&&ab.drawMajorTickMarks)||(ah.isMinorTick&&ab.drawMinorTickMarks))){aj=ah.markSize;ak=ah.mark;var ae=Math.round(ab.u2p(ah.value))+0.5;switch(ak){case"outside":at=this._right;ar=this._right+aj;break;case"inside":at=this._right-aj;ar=this._right;break;case"cross":at=this._right-aj;ar=this._right+aj;break;default:at=this._right;ar=this._right+aj;break}if(this.shadow){this.renderer.shadowRenderer.draw(am,[[at,ae],[ar,ae]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ai(at,ae,ar,ae,{strokeStyle:ab.borderColor})}break;default:break}}}ah=null}ab=null;au=null}ag=["y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];for(var aq=7;aq>0;aq--){var ab=ap[ag[aq-1]];var au=ab._ticks;if(ab.show){var ac=au[ab.numberTicks-1];var af=au[0];var ad=ab.getLeft();var ao=[[ad,ac.getTop()+ac.getHeight()/2],[ad,af.getTop()+af.getHeight()/2+1]];if(this.shadow){this.renderer.shadowRenderer.draw(am,ao,{lineCap:"butt",fill:false,closePath:false})}ai(ao[0][0],ao[0][1],ao[1][0],ao[1][1],{lineCap:"butt",strokeStyle:ab.borderColor,lineWidth:ab.borderWidth});for(var an=au.length;an>0;an--){var ah=au[an-1];aj=ah.markSize;ak=ah.mark;var ae=Math.round(ab.u2p(ah.value))+0.5;if(ah.showMark&&ah.mark){switch(ak){case"outside":at=ad;ar=ad+aj;break;case"inside":at=ad-aj;ar=ad;break;case"cross":at=ad-aj;ar=ad+aj;break;default:at=ad;ar=ad+aj;break}ao=[[at,ae],[ar,ae]];if(this.shadow){this.renderer.shadowRenderer.draw(am,ao,{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ai(at,ae,ar,ae,{strokeStyle:ab.borderColor})}ah=null}af=null}ab=null;au=null}am.restore();function ai(aB,aA,ay,ax,az){am.save();az=az||{};if(az.lineWidth==null||az.lineWidth!=0){H.extend(true,am,az);am.beginPath();am.moveTo(aB,aA);am.lineTo(ay,ax);am.stroke();am.restore()}}if(this.shadow){var ao=[[this._left,this._bottom],[this._right,this._bottom],[this._right,this._top]];this.renderer.shadowRenderer.draw(am,ao)}if(this.borderWidth!=0&&this.drawBorder){ai(this._left,this._top,this._right,this._top,{lineCap:"round",strokeStyle:ap.x2axis.borderColor,lineWidth:ap.x2axis.borderWidth});ai(this._right,this._top,this._right,this._bottom,{lineCap:"round",strokeStyle:ap.y2axis.borderColor,lineWidth:ap.y2axis.borderWidth});ai(this._right,this._bottom,this._left,this._bottom,{lineCap:"round",strokeStyle:ap.xaxis.borderColor,lineWidth:ap.xaxis.borderWidth});ai(this._left,this._bottom,this._left,this._top,{lineCap:"round",strokeStyle:ap.yaxis.borderColor,lineWidth:ap.yaxis.borderWidth})}am.restore();am=null;ap=null};H.jqplot.DivTitleRenderer=function(){};H.jqplot.DivTitleRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.DivTitleRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}var ae=this.renderer;var ad=document.createElement("div");this._elem=H(ad);this._elem.addClass("jqplot-title");if(!this.text){this.show=false;this._elem.height(0);this._elem.width(0)}else{if(this.text){var ab;if(this.color){ab=this.color}else{if(this.textColor){ab=this.textColor}}var ac={position:"absolute",top:"0px",left:"0px"};if(this._plotWidth){ac.width=this._plotWidth+"px"}if(this.fontSize){ac.fontSize=this.fontSize}if(typeof this.textAlign==="string"){ac.textAlign=this.textAlign}else{ac.textAlign="center"}if(ab){ac.color=ab}if(this.paddingBottom){ac.paddingBottom=this.paddingBottom}if(this.fontFamily){ac.fontFamily=this.fontFamily}this._elem.css(ac);if(this.escapeHtml){this._elem.text(this.text)}else{this._elem.html(this.text)}}}ad=null;return this._elem};H.jqplot.DivTitleRenderer.prototype.pack=function(){};var o=0.1;H.jqplot.LinePattern=function(ap,ak){var aj={dotted:[o,H.jqplot.config.dotGapLength],dashed:[H.jqplot.config.dashLength,H.jqplot.config.gapLength],solid:null};if(typeof ak==="string"){if(ak[0]==="."||ak[0]==="-"){var aq=ak;ak=[];for(var ai=0,af=aq.length;ai<af;ai++){if(aq[ai]==="."){ak.push(o)}else{if(aq[ai]==="-"){ak.push(H.jqplot.config.dashLength)}else{continue}}ak.push(H.jqplot.config.gapLength)}}else{ak=aj[ak]}}if(!(ak&&ak.length)){return ap}var ae=0;var al=ak[0];var an=0;var am=0;var ah=0;var ab=0;var ao=function(ar,at){ap.moveTo(ar,at);an=ar;am=at;ah=ar;ab=at};var ad=function(ar,ay){var aw=ap.lineWidth;var au=ar-an;var at=ay-am;var av=Math.sqrt(au*au+at*at);if((av>0)&&(aw>0)){au/=av;at/=av;while(true){var ax=aw*al;if(ax<av){an+=ax*au;am+=ax*at;if((ae&1)==0){ap.lineTo(an,am)}else{ap.moveTo(an,am)}av-=ax;ae++;if(ae>=ak.length){ae=0}al=ak[ae]}else{an=ar;am=ay;if((ae&1)==0){ap.lineTo(an,am)}else{ap.moveTo(an,am)}al-=av/aw;break}}}};var ac=function(){ap.beginPath()};var ag=function(){ad(ah,ab)};return{moveTo:ao,lineTo:ad,beginPath:ac,closePath:ag}};H.jqplot.LineRenderer=function(){this.shapeRenderer=new H.jqplot.ShapeRenderer();this.shadowRenderer=new H.jqplot.ShadowRenderer()};H.jqplot.LineRenderer.prototype.init=function(ac,ah){ac=ac||{};this._type="line";this.renderer.animation={show:false,direction:"left",speed:2500,_supported:true};this.renderer.smooth=false;this.renderer.tension=null;this.renderer.constrainSmoothing=true;this.renderer._smoothedData=[];this.renderer._smoothedPlotData=[];this.renderer._hiBandGridData=[];this.renderer._lowBandGridData=[];this.renderer._hiBandSmoothedData=[];this.renderer._lowBandSmoothedData=[];this.renderer.bandData=[];this.renderer.bands={show:false,hiData:[],lowData:[],color:this.color,showLines:false,fill:true,fillColor:null,_min:null,_max:null,interval:"3%"};var af={highlightMouseOver:ac.highlightMouseOver,highlightMouseDown:ac.highlightMouseDown,highlightColor:ac.highlightColor};delete (ac.highlightMouseOver);delete (ac.highlightMouseDown);delete (ac.highlightColor);H.extend(true,this.renderer,ac);this.renderer.options=ac;if(this.renderer.bandData.length>1&&(!ac.bands||ac.bands.show==null)){this.renderer.bands.show=true}else{if(ac.bands&&ac.bands.show==null&&ac.bands.interval!=null){this.renderer.bands.show=true}}if(this.fill){this.renderer.bands.show=false}if(this.renderer.bands.show){this.renderer.initBands.call(this,this.renderer.options,ah)}if(this._stack){this.renderer.smooth=false}var ag={lineJoin:this.lineJoin,lineCap:this.lineCap,fill:this.fill,isarc:false,strokeStyle:this.color,fillStyle:this.fillColor,lineWidth:this.lineWidth,linePattern:this.linePattern,closePath:this.fill};this.renderer.shapeRenderer.init(ag);var ad=ac.shadowOffset;if(ad==null){if(this.lineWidth>2.5){ad=1.25*(1+(Math.atan((this.lineWidth/2.5))/0.785398163-1)*0.6)}else{ad=1.25*Math.atan((this.lineWidth/2.5))/0.785398163}}var ab={lineJoin:this.lineJoin,lineCap:this.lineCap,fill:this.fill,isarc:false,angle:this.shadowAngle,offset:ad,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.lineWidth,linePattern:this.linePattern,closePath:this.fill};this.renderer.shadowRenderer.init(ab);this._areaPoints=[];this._boundingBox=[[],[]];if(!this.isTrendline&&this.fill||this.renderer.bands.show){this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColor=null;if(af.highlightMouseDown&&af.highlightMouseOver==null){af.highlightMouseOver=false}H.extend(true,this,{highlightMouseOver:af.highlightMouseOver,highlightMouseDown:af.highlightMouseDown,highlightColor:af.highlightColor});if(!this.highlightColor){var ae=(this.renderer.bands.show)?this.renderer.bands.fillColor:this.fillColor;this.highlightColor=H.jqplot.computeHighlightColors(ae)}if(this.highlighter){this.highlighter.show=false}}if(!this.isTrendline&&ah){ah.plugins.lineRenderer={};ah.postInitHooks.addOnce(v);ah.postDrawHooks.addOnce(Z);ah.eventListenerHooks.addOnce("jqplotMouseMove",g);ah.eventListenerHooks.addOnce("jqplotMouseDown",d);ah.eventListenerHooks.addOnce("jqplotMouseUp",Y);ah.eventListenerHooks.addOnce("jqplotClick",f);ah.eventListenerHooks.addOnce("jqplotRightClick",p)}};H.jqplot.LineRenderer.prototype.initBands=function(ae,ao){var af=ae.bandData||[];var ah=this.renderer.bands;ah.hiData=[];ah.lowData=[];var av=this.data;ah._max=null;ah._min=null;if(af.length==2){if(H.isArray(af[0][0])){var ai;var ab=0,al=0;for(var ap=0,am=af[0].length;ap<am;ap++){ai=af[0][ap];if((ai[1]!=null&&ai[1]>ah._max)||ah._max==null){ah._max=ai[1]}if((ai[1]!=null&&ai[1]<ah._min)||ah._min==null){ah._min=ai[1]}}for(var ap=0,am=af[1].length;ap<am;ap++){ai=af[1][ap];if((ai[1]!=null&&ai[1]>ah._max)||ah._max==null){ah._max=ai[1];al=1}if((ai[1]!=null&&ai[1]<ah._min)||ah._min==null){ah._min=ai[1];ab=1}}if(al===ab){ah.show=false}ah.hiData=af[al];ah.lowData=af[ab]}else{if(af[0].length===av.length&&af[1].length===av.length){var ad=(af[0][0]>af[1][0])?0:1;var aw=(ad)?0:1;for(var ap=0,am=av.length;ap<am;ap++){ah.hiData.push([av[ap][0],af[ad][ap]]);ah.lowData.push([av[ap][0],af[aw][ap]])}}else{ah.show=false}}}else{if(af.length>2&&!H.isArray(af[0][0])){var ad=(af[0][0]>af[0][1])?0:1;var aw=(ad)?0:1;for(var ap=0,am=af.length;ap<am;ap++){ah.hiData.push([av[ap][0],af[ap][ad]]);ah.lowData.push([av[ap][0],af[ap][aw]])}}else{var ak=ah.interval;var au=null;var at=null;var ac=null;var an=null;if(H.isArray(ak)){au=ak[0];at=ak[1]}else{au=ak}if(isNaN(au)){if(au.charAt(au.length-1)==="%"){ac="multiply";au=parseFloat(au)/100+1}}else{au=parseFloat(au);ac="add"}if(at!==null&&isNaN(at)){if(at.charAt(at.length-1)==="%"){an="multiply";at=parseFloat(at)/100+1}}else{if(at!==null){at=parseFloat(at);an="add"}}if(au!==null){if(at===null){at=-au;an=ac;if(an==="multiply"){at+=2}}if(au<at){var aq=au;au=at;at=aq;aq=ac;ac=an;an=aq}for(var ap=0,am=av.length;ap<am;ap++){switch(ac){case"add":ah.hiData.push([av[ap][0],av[ap][1]+au]);break;case"multiply":ah.hiData.push([av[ap][0],av[ap][1]*au]);break}switch(an){case"add":ah.lowData.push([av[ap][0],av[ap][1]+at]);break;case"multiply":ah.lowData.push([av[ap][0],av[ap][1]*at]);break}}}else{ah.show=false}}}var ag=ah.hiData;var aj=ah.lowData;for(var ap=0,am=ag.length;ap<am;ap++){if((ag[ap][1]!=null&&ag[ap][1]>ah._max)||ah._max==null){ah._max=ag[ap][1]}}for(var ap=0,am=aj.length;ap<am;ap++){if((aj[ap][1]!=null&&aj[ap][1]<ah._min)||ah._min==null){ah._min=aj[ap][1]}}if(ah.fillColor===null){var ar=H.jqplot.getColorComponents(ah.color);ar[3]=ar[3]*0.5;ah.fillColor="rgba("+ar[0]+", "+ar[1]+", "+ar[2]+", "+ar[3]+")"}};function G(ac,ab){return(3.4182054+ab)*Math.pow(ac,-0.3534992)}function k(ad,ac){var ab=Math.sqrt(Math.pow((ac[0]-ad[0]),2)+Math.pow((ac[1]-ad[1]),2));return 5.7648*Math.log(ab)+7.4456}function w(ab){var ac=(Math.exp(2*ab)-1)/(Math.exp(2*ab)+1);return ac}function F(aD){var am=this.renderer.smooth;var ax=this.canvas.getWidth();var ah=this._xaxis.series_p2u;var aA=this._yaxis.series_p2u;var az=null;var ag=null;var at=aD.length/ax;var ad=[];var ar=[];if(!isNaN(parseFloat(am))){az=parseFloat(am)}else{az=G(at,0.5)}var ap=[];var ae=[];for(var ay=0,au=aD.length;ay<au;ay++){ap.push(aD[ay][1]);ae.push(aD[ay][0])}function ao(aE,aF){if(aE-aF==0){return Math.pow(10,10)}else{return aE-aF}}var aq,al,ak,aj;var ab=aD.length-1;for(var af=1,av=aD.length;af<av;af++){var ac=[];var an=[];for(var aw=0;aw<2;aw++){var ay=af-1+aw;if(ay==0||ay==ab){ac[aw]=Math.pow(10,10)}else{if(ap[ay+1]-ap[ay]==0||ap[ay]-ap[ay-1]==0){ac[aw]=0}else{if(((ae[ay+1]-ae[ay])/(ap[ay+1]-ap[ay])+(ae[ay]-ae[ay-1])/(ap[ay]-ap[ay-1]))==0){ac[aw]=0}else{if((ap[ay+1]-ap[ay])*(ap[ay]-ap[ay-1])<0){ac[aw]=0}else{ac[aw]=2/(ao(ae[ay+1],ae[ay])/(ap[ay+1]-ap[ay])+ao(ae[ay],ae[ay-1])/(ap[ay]-ap[ay-1]))}}}}}if(af==1){ac[0]=3/2*(ap[1]-ap[0])/ao(ae[1],ae[0])-ac[1]/2}else{if(af==ab){ac[1]=3/2*(ap[ab]-ap[ab-1])/ao(ae[ab],ae[ab-1])-ac[0]/2}}an[0]=-2*(ac[1]+2*ac[0])/ao(ae[af],ae[af-1])+6*(ap[af]-ap[af-1])/Math.pow(ao(ae[af],ae[af-1]),2);an[1]=2*(2*ac[1]+ac[0])/ao(ae[af],ae[af-1])-6*(ap[af]-ap[af-1])/Math.pow(ao(ae[af],ae[af-1]),2);aj=1/6*(an[1]-an[0])/ao(ae[af],ae[af-1]);ak=1/2*(ae[af]*an[0]-ae[af-1]*an[1])/ao(ae[af],ae[af-1]);al=(ap[af]-ap[af-1]-ak*(Math.pow(ae[af],2)-Math.pow(ae[af-1],2))-aj*(Math.pow(ae[af],3)-Math.pow(ae[af-1],3)))/ao(ae[af],ae[af-1]);aq=ap[af-1]-al*ae[af-1]-ak*Math.pow(ae[af-1],2)-aj*Math.pow(ae[af-1],3);var aC=(ae[af]-ae[af-1])/az;var aB,ai;for(var aw=0,au=az;aw<au;aw++){aB=[];ai=ae[af-1]+aw*aC;aB.push(ai);aB.push(aq+al*ai+ak*Math.pow(ai,2)+aj*Math.pow(ai,3));ad.push(aB);ar.push([ah(aB[0]),aA(aB[1])])}}ad.push(aD[ay]);ar.push([ah(aD[ay][0]),aA(aD[ay][1])]);return[ad,ar]}function B(aj){var ai=this.renderer.smooth;var aO=this.renderer.tension;var ab=this.canvas.getWidth();var aB=this._xaxis.series_p2u;var ak=this._yaxis.series_p2u;var aC=null;var aD=null;var aN=null;var aI=null;var aG=null;var am=null;var aL=null;var ag=null;var aE,aF,ax,aw,au,ar;var ae,ac,ao,an;var av,at,aH;var ap=[];var ad=[];var af=aj.length/ab;var aM,aq,az,aA,ay;var al=[];var ah=[];if(!isNaN(parseFloat(ai))){aC=parseFloat(ai)}else{aC=G(af,0.5)}if(!isNaN(parseFloat(aO))){aO=parseFloat(aO)}for(var aK=0,aJ=aj.length-1;aK<aJ;aK++){if(aO===null){am=Math.abs((aj[aK+1][1]-aj[aK][1])/(aj[aK+1][0]-aj[aK][0]));aM=0.3;aq=0.6;az=(aq-aM)/2;aA=2.5;ay=-1.4;ag=am/aA+ay;aI=az*w(ag)-az*w(ay)+aM;if(aK>0){aL=Math.abs((aj[aK][1]-aj[aK-1][1])/(aj[aK][0]-aj[aK-1][0]))}ag=aL/aA+ay;aG=az*w(ag)-az*w(ay)+aM;aN=(aI+aG)/2}else{aN=aO}for(aE=0;aE<aC;aE++){aF=aE/aC;ax=(1+2*aF)*Math.pow((1-aF),2);aw=aF*Math.pow((1-aF),2);au=Math.pow(aF,2)*(3-2*aF);ar=Math.pow(aF,2)*(aF-1);if(aj[aK-1]){ae=aN*(aj[aK+1][0]-aj[aK-1][0]);ac=aN*(aj[aK+1][1]-aj[aK-1][1])}else{ae=aN*(aj[aK+1][0]-aj[aK][0]);ac=aN*(aj[aK+1][1]-aj[aK][1])}if(aj[aK+2]){ao=aN*(aj[aK+2][0]-aj[aK][0]);an=aN*(aj[aK+2][1]-aj[aK][1])}else{ao=aN*(aj[aK+1][0]-aj[aK][0]);an=aN*(aj[aK+1][1]-aj[aK][1])}av=ax*aj[aK][0]+au*aj[aK+1][0]+aw*ae+ar*ao;at=ax*aj[aK][1]+au*aj[aK+1][1]+aw*ac+ar*an;aH=[av,at];al.push(aH);ah.push([aB(av),ak(at)])}}al.push(aj[aJ]);ah.push([aB(aj[aJ][0]),ak(aj[aJ][1])]);return[al,ah]}H.jqplot.LineRenderer.prototype.setGridData=function(aj){var af=this._xaxis.series_u2p;var ab=this._yaxis.series_u2p;var ag=this._plotData;var ak=this._prevPlotData;this.gridData=[];this._prevGridData=[];this.renderer._smoothedData=[];this.renderer._smoothedPlotData=[];this.renderer._hiBandGridData=[];this.renderer._lowBandGridData=[];this.renderer._hiBandSmoothedData=[];this.renderer._lowBandSmoothedData=[];var ae=this.renderer.bands;var ac=false;for(var ah=0,ad=ag.length;ah<ad;ah++){if(ag[ah][0]!=null&&ag[ah][1]!=null){this.gridData.push([af.call(this._xaxis,ag[ah][0]),ab.call(this._yaxis,ag[ah][1])])}else{if(ag[ah][0]==null){ac=true;this.gridData.push([null,ab.call(this._yaxis,ag[ah][1])])}else{if(ag[ah][1]==null){ac=true;this.gridData.push([af.call(this._xaxis,ag[ah][0]),null])}}}if(ak[ah]!=null&&ak[ah][0]!=null&&ak[ah][1]!=null){this._prevGridData.push([af.call(this._xaxis,ak[ah][0]),ab.call(this._yaxis,ak[ah][1])])}else{if(ak[ah]!=null&&ak[ah][0]==null){this._prevGridData.push([null,ab.call(this._yaxis,ak[ah][1])])}else{if(ak[ah]!=null&&ak[ah][0]!=null&&ak[ah][1]==null){this._prevGridData.push([af.call(this._xaxis,ak[ah][0]),null])}}}}if(ac){this.renderer.smooth=false;if(this._type==="line"){ae.show=false}}if(this._type==="line"&&ae.show){for(var ah=0,ad=ae.hiData.length;ah<ad;ah++){this.renderer._hiBandGridData.push([af.call(this._xaxis,ae.hiData[ah][0]),ab.call(this._yaxis,ae.hiData[ah][1])])}for(var ah=0,ad=ae.lowData.length;ah<ad;ah++){this.renderer._lowBandGridData.push([af.call(this._xaxis,ae.lowData[ah][0]),ab.call(this._yaxis,ae.lowData[ah][1])])}}if(this._type==="line"&&this.renderer.smooth&&this.gridData.length>2){var ai;if(this.renderer.constrainSmoothing){ai=F.call(this,this.gridData);this.renderer._smoothedData=ai[0];this.renderer._smoothedPlotData=ai[1];if(ae.show){ai=F.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ai[0];ai=F.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ai[0]}ai=null}else{ai=B.call(this,this.gridData);this.renderer._smoothedData=ai[0];this.renderer._smoothedPlotData=ai[1];if(ae.show){ai=B.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ai[0];ai=B.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ai[0]}ai=null}}};H.jqplot.LineRenderer.prototype.makeGridData=function(ai,ak){var ag=this._xaxis.series_u2p;var ab=this._yaxis.series_u2p;var al=[];var ad=[];this.renderer._smoothedData=[];this.renderer._smoothedPlotData=[];this.renderer._hiBandGridData=[];this.renderer._lowBandGridData=[];this.renderer._hiBandSmoothedData=[];this.renderer._lowBandSmoothedData=[];var af=this.renderer.bands;var ac=false;for(var ah=0;ah<ai.length;ah++){if(ai[ah][0]!=null&&ai[ah][1]!=null){al.push([ag.call(this._xaxis,ai[ah][0]),ab.call(this._yaxis,ai[ah][1])])}else{if(ai[ah][0]==null){ac=true;al.push([null,ab.call(this._yaxis,ai[ah][1])])}else{if(ai[ah][1]==null){ac=true;al.push([ag.call(this._xaxis,ai[ah][0]),null])}}}}if(ac){this.renderer.smooth=false;if(this._type==="line"){af.show=false}}if(this._type==="line"&&af.show){for(var ah=0,ae=af.hiData.length;ah<ae;ah++){this.renderer._hiBandGridData.push([ag.call(this._xaxis,af.hiData[ah][0]),ab.call(this._yaxis,af.hiData[ah][1])])}for(var ah=0,ae=af.lowData.length;ah<ae;ah++){this.renderer._lowBandGridData.push([ag.call(this._xaxis,af.lowData[ah][0]),ab.call(this._yaxis,af.lowData[ah][1])])}}if(this._type==="line"&&this.renderer.smooth&&al.length>2){var aj;if(this.renderer.constrainSmoothing){aj=F.call(this,al);this.renderer._smoothedData=aj[0];this.renderer._smoothedPlotData=aj[1];if(af.show){aj=F.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=aj[0];aj=F.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=aj[0]}aj=null}else{aj=B.call(this,al);this.renderer._smoothedData=aj[0];this.renderer._smoothedPlotData=aj[1];if(af.show){aj=B.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=aj[0];aj=B.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=aj[0]}aj=null}}return al};H.jqplot.LineRenderer.prototype.draw=function(aq,aC,ac,av){var aw;var ak=H.extend(true,{},ac);var ae=(ak.shadow!=r)?ak.shadow:this.shadow;var aD=(ak.showLine!=r)?ak.showLine:this.showLine;var au=(ak.fill!=r)?ak.fill:this.fill;var ab=(ak.fillAndStroke!=r)?ak.fillAndStroke:this.fillAndStroke;var al,ar,ao,ay;aq.save();if(aC.length){if(aD){if(au){if(this.fillToZero){var az=this.negativeColor;if(!this.useNegativeColors){az=ak.fillStyle}var ai=false;var aj=ak.fillStyle;if(ab){var aB=aC.slice(0)}if(this.index==0||!this._stack){var ap=[];var aF=(this.renderer.smooth)?this.renderer._smoothedPlotData:this._plotData;this._areaPoints=[];var aA=this._yaxis.series_u2p(this.fillToValue);var ad=this._xaxis.series_u2p(this.fillToValue);ak.closePath=true;if(this.fillAxis=="y"){ap.push([aC[0][0],aA]);this._areaPoints.push([aC[0][0],aA]);for(var aw=0;aw<aC.length-1;aw++){ap.push(aC[aw]);this._areaPoints.push(aC[aw]);if(aF[aw][1]*aF[aw+1][1]<0){if(aF[aw][1]<0){ai=true;ak.fillStyle=az}else{ai=false;ak.fillStyle=aj}var ah=aC[aw][0]+(aC[aw+1][0]-aC[aw][0])*(aA-aC[aw][1])/(aC[aw+1][1]-aC[aw][1]);ap.push([ah,aA]);this._areaPoints.push([ah,aA]);if(ae){this.renderer.shadowRenderer.draw(aq,ap,ak)}this.renderer.shapeRenderer.draw(aq,ap,ak);ap=[[ah,aA]]}}if(aF[aC.length-1][1]<0){ai=true;ak.fillStyle=az}else{ai=false;ak.fillStyle=aj}ap.push(aC[aC.length-1]);this._areaPoints.push(aC[aC.length-1]);ap.push([aC[aC.length-1][0],aA]);this._areaPoints.push([aC[aC.length-1][0],aA])}if(ae){this.renderer.shadowRenderer.draw(aq,ap,ak)}this.renderer.shapeRenderer.draw(aq,ap,ak)}else{var an=this._prevGridData;for(var aw=an.length;aw>0;aw--){aC.push(an[aw-1])}if(ae){this.renderer.shadowRenderer.draw(aq,aC,ak)}this._areaPoints=aC;this.renderer.shapeRenderer.draw(aq,aC,ak)}}else{if(ab){var aB=aC.slice(0)}if(this.index==0||!this._stack){var af=aq.canvas.height;aC.unshift([aC[0][0],af]);var ax=aC.length;aC.push([aC[ax-1][0],af])}else{var an=this._prevGridData;for(var aw=an.length;aw>0;aw--){aC.push(an[aw-1])}}this._areaPoints=aC;if(ae){this.renderer.shadowRenderer.draw(aq,aC,ak)}this.renderer.shapeRenderer.draw(aq,aC,ak)}if(ab){var at=H.extend(true,{},ak,{fill:false,closePath:false});this.renderer.shapeRenderer.draw(aq,aB,at);if(this.markerRenderer.show){if(this.renderer.smooth){aB=this.gridData}for(aw=0;aw<aB.length;aw++){this.markerRenderer.draw(aB[aw][0],aB[aw][1],aq,ak.markerOptions)}}}}else{if(this.renderer.bands.show){var ag;var aE=H.extend(true,{},ak);if(this.renderer.bands.showLines){ag=(this.renderer.smooth)?this.renderer._hiBandSmoothedData:this.renderer._hiBandGridData;this.renderer.shapeRenderer.draw(aq,ag,ak);ag=(this.renderer.smooth)?this.renderer._lowBandSmoothedData:this.renderer._lowBandGridData;this.renderer.shapeRenderer.draw(aq,ag,aE)}if(this.renderer.bands.fill){if(this.renderer.smooth){ag=this.renderer._hiBandSmoothedData.concat(this.renderer._lowBandSmoothedData.reverse())}else{ag=this.renderer._hiBandGridData.concat(this.renderer._lowBandGridData.reverse())}this._areaPoints=ag;aE.closePath=true;aE.fill=true;aE.fillStyle=this.renderer.bands.fillColor;this.renderer.shapeRenderer.draw(aq,ag,aE)}}if(ae){this.renderer.shadowRenderer.draw(aq,aC,ak)}this.renderer.shapeRenderer.draw(aq,aC,ak)}}var al=ao=ar=ay=null;for(aw=0;aw<this._areaPoints.length;aw++){var am=this._areaPoints[aw];if(al>am[0]||al==null){al=am[0]}if(ay<am[1]||ay==null){ay=am[1]}if(ao<am[0]||ao==null){ao=am[0]}if(ar>am[1]||ar==null){ar=am[1]}}if(this.type==="line"&&this.renderer.bands.show){ay=this._yaxis.series_u2p(this.renderer.bands._min);ar=this._yaxis.series_u2p(this.renderer.bands._max)}this._boundingBox=[[al,ay],[ao,ar]];if(this.markerRenderer.show&&!au){if(this.renderer.smooth){aC=this.gridData}for(aw=0;aw<aC.length;aw++){if(aC[aw][0]!=null&&aC[aw][1]!=null){this.markerRenderer.draw(aC[aw][0],aC[aw][1],aq,ak.markerOptions)}}}}aq.restore()};H.jqplot.LineRenderer.prototype.drawShadow=function(ab,ad,ac){};function v(ae,ad,ab){for(var ac=0;ac<this.series.length;ac++){if(this.series[ac].renderer.constructor==H.jqplot.LineRenderer){if(this.series[ac].highlightMouseOver){this.series[ac].highlightMouseDown=false}}}}function Z(){if(this.plugins.lineRenderer&&this.plugins.lineRenderer.highlightCanvas){this.plugins.lineRenderer.highlightCanvas.resetCanvas();this.plugins.lineRenderer.highlightCanvas=null}this.plugins.lineRenderer.highlightedSeriesIndex=null;this.plugins.lineRenderer.highlightCanvas=new H.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.lineRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-lineRenderer-highlight-canvas",this._plotDimensions,this));this.plugins.lineRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(ab){V(ab.data.plot)})}function X(ah,ag,ae,ad){var ac=ah.series[ag];var ab=ah.plugins.lineRenderer.highlightCanvas;ab._ctx.clearRect(0,0,ab._ctx.canvas.width,ab._ctx.canvas.height);ac._highlightedPoint=ae;ah.plugins.lineRenderer.highlightedSeriesIndex=ag;var af={fillStyle:ac.highlightColor};if(ac.type==="line"&&ac.renderer.bands.show){af.fill=true;af.closePath=true}ac.renderer.shapeRenderer.draw(ab._ctx,ad,af);ab=null}function V(ad){var ab=ad.plugins.lineRenderer.highlightCanvas;ab._ctx.clearRect(0,0,ab._ctx.canvas.width,ab._ctx.canvas.height);for(var ac=0;ac<ad.series.length;ac++){ad.series[ac]._highlightedPoint=null}ad.plugins.lineRenderer.highlightedSeriesIndex=null;ad.target.trigger("jqplotDataUnhighlight");ab=null}function g(af,ae,ai,ah,ag){if(ah){var ad=[ah.seriesIndex,ah.pointIndex,ah.data];var ac=jQuery.Event("jqplotDataMouseOver");ac.pageX=af.pageX;ac.pageY=af.pageY;ag.target.trigger(ac,ad);if(ag.series[ad[0]].highlightMouseOver&&!(ad[0]==ag.plugins.lineRenderer.highlightedSeriesIndex)){var ab=jQuery.Event("jqplotDataHighlight");ab.which=af.which;ab.pageX=af.pageX;ab.pageY=af.pageY;ag.target.trigger(ab,ad);X(ag,ah.seriesIndex,ah.pointIndex,ah.points)}}else{if(ah==null){V(ag)}}}function d(ae,ad,ah,ag,af){if(ag){var ac=[ag.seriesIndex,ag.pointIndex,ag.data];if(af.series[ac[0]].highlightMouseDown&&!(ac[0]==af.plugins.lineRenderer.highlightedSeriesIndex)){var ab=jQuery.Event("jqplotDataHighlight");ab.which=ae.which;ab.pageX=ae.pageX;ab.pageY=ae.pageY;af.target.trigger(ab,ac);X(af,ag.seriesIndex,ag.pointIndex,ag.points)}}else{if(ag==null){V(af)}}}function Y(ad,ac,ag,af,ae){var ab=ae.plugins.lineRenderer.highlightedSeriesIndex;if(ab!=null&&ae.series[ab].highlightMouseDown){V(ae)}}function f(ae,ad,ah,ag,af){if(ag){var ac=[ag.seriesIndex,ag.pointIndex,ag.data];var ab=jQuery.Event("jqplotDataClick");ab.which=ae.which;ab.pageX=ae.pageX;ab.pageY=ae.pageY;af.target.trigger(ab,ac)}}function p(af,ae,ai,ah,ag){if(ah){var ad=[ah.seriesIndex,ah.pointIndex,ah.data];var ab=ag.plugins.lineRenderer.highlightedSeriesIndex;if(ab!=null&&ag.series[ab].highlightMouseDown){V(ag)}var ac=jQuery.Event("jqplotDataRightClick");ac.which=af.which;ac.pageX=af.pageX;ac.pageY=af.pageY;ag.target.trigger(ac,ad)}}H.jqplot.LinearAxisRenderer=function(){};H.jqplot.LinearAxisRenderer.prototype.init=function(ab){this.breakPoints=null;this.breakTickLabel="&asymp;";this.drawBaseline=true;this.baselineWidth=null;this.baselineColor=null;this.forceTickAt0=false;this.forceTickAt100=false;this.tickInset=0;this.minorTicks=0;this.alignTicks=false;this._autoFormatString="";this._overrideFormatString=false;this._scalefact=1;H.extend(true,this,ab);if(this.breakPoints){if(!H.isArray(this.breakPoints)){this.breakPoints=null}else{if(this.breakPoints.length<2||this.breakPoints[1]<=this.breakPoints[0]){this.breakPoints=null}}}if(this.numberTicks!=null&&this.numberTicks<2){this.numberTicks=2}this.resetDataBounds()};H.jqplot.LinearAxisRenderer.prototype.draw=function(ab,ai){if(this.show){this.renderer.createTicks.call(this,ai);var ah=0;var ac;if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=H(document.createElement("div"));this._elem.addClass("jqplot-axis jqplot-"+this.name);this._elem.css("position","absolute");if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var ag=this._label.draw(ab,ai);ag.appendTo(this._elem);ag=null}var af=this._ticks;var ae;for(var ad=0;ad<af.length;ad++){ae=af[ad];if(ae.show&&ae.showLabel&&(!ae.isMinorTick||this.showMinorTicks)){this._elem.append(ae.draw(ab,ai))}}ae=null;af=null}return this._elem};H.jqplot.LinearAxisRenderer.prototype.reset=function(){this.min=this._options.min;this.max=this._options.max;this.tickInterval=this._options.tickInterval;this.numberTicks=this._options.numberTicks;this._autoFormatString="";if(this._overrideFormatString&&this.tickOptions&&this.tickOptions.formatString){this.tickOptions.formatString=""}};H.jqplot.LinearAxisRenderer.prototype.set=function(){var ai=0;var ad;var ac=0;var ah=0;var ab=(this._label==null)?false:this._label.show;if(this.show){var ag=this._ticks;var af;for(var ae=0;ae<ag.length;ae++){af=ag[ae];if(!af._breakTick&&af.show&&af.showLabel&&(!af.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){ad=af._elem.outerHeight(true)}else{ad=af._elem.outerWidth(true)}if(ad>ai){ai=ad}}}af=null;ag=null;if(ab){ac=this._label._elem.outerWidth(true);ah=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){ai=ai+ah;this._elem.css({height:ai+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){ai=ai+ah;this._elem.css({height:ai+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){ai=ai+ac;this._elem.css({width:ai+"px",left:"0px",top:"0px"});if(ab&&this._label.constructor==H.jqplot.AxisLabelRenderer){this._label._elem.css("width",ac+"px")}}else{ai=ai+ac;this._elem.css({width:ai+"px",right:"0px",top:"0px"});if(ab&&this._label.constructor==H.jqplot.AxisLabelRenderer){this._label._elem.css("width",ac+"px")}}}}}};H.jqplot.LinearAxisRenderer.prototype.createTicks=function(ad){var aN=this._ticks;var aE=this.ticks;var at=this.name;var av=this._dataBounds;var ab=(this.name.charAt(0)==="x")?this._plotDimensions.width:this._plotDimensions.height;var ah;var a0,aC;var aj,ai;var aY,aU;var aB=this.min;var aZ=this.max;var aQ=this.numberTicks;var a4=this.tickInterval;var ag=30;this._scalefact=(Math.max(ab,ag+1)-ag)/300;if(aE.length){for(aU=0;aU<aE.length;aU++){var aI=aE[aU];var aO=new this.tickRenderer(this.tickOptions);if(H.isArray(aI)){aO.value=aI[0];if(this.breakPoints){if(aI[0]==this.breakPoints[0]){aO.label=this.breakTickLabel;aO._breakTick=true;aO.showGridline=false;aO.showMark=false}else{if(aI[0]>this.breakPoints[0]&&aI[0]<=this.breakPoints[1]){aO.show=false;aO.showGridline=false;aO.label=aI[1]}else{aO.label=aI[1]}}}else{aO.label=aI[1]}aO.setTick(aI[0],this.name);this._ticks.push(aO)}else{if(H.isPlainObject(aI)){H.extend(true,aO,aI);aO.axis=this.name;this._ticks.push(aO)}else{aO.value=aI;if(this.breakPoints){if(aI==this.breakPoints[0]){aO.label=this.breakTickLabel;aO._breakTick=true;aO.showGridline=false;aO.showMark=false}else{if(aI>this.breakPoints[0]&&aI<=this.breakPoints[1]){aO.show=false;aO.showGridline=false}}}aO.setTick(aI,this.name);this._ticks.push(aO)}}}this.numberTicks=aE.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value;this.tickInterval=(this.max-this.min)/(this.numberTicks-1)}else{if(at=="xaxis"||at=="x2axis"){ab=this._plotDimensions.width}else{ab=this._plotDimensions.height}var aq=this.numberTicks;if(this.alignTicks){if(this.name==="x2axis"&&ad.axes.xaxis.show){aq=ad.axes.xaxis.numberTicks}else{if(this.name.charAt(0)==="y"&&this.name!=="yaxis"&&this.name!=="yMidAxis"&&ad.axes.yaxis.show){aq=ad.axes.yaxis.numberTicks}}}a0=((this.min!=null)?this.min:av.min);aC=((this.max!=null)?this.max:av.max);var ao=aC-a0;var aM,ar;var am;if(this.tickOptions==null||!this.tickOptions.formatString){this._overrideFormatString=true}if(this.min==null||this.max==null&&this.tickInterval==null&&!this.autoscale){if(this.forceTickAt0){if(a0>0){a0=0}if(aC<0){aC=0}}if(this.forceTickAt100){if(a0>100){a0=100}if(aC<100){aC=100}}var ay=false,aV=false;if(this.min!=null){ay=true}else{if(this.max!=null){aV=true}}var aJ=H.jqplot.LinearTickGenerator(a0,aC,this._scalefact,aq,ay,aV);var ap=(this.min!=null)?a0:a0+ao*(this.padMin-1);var aK=(this.max!=null)?aC:aC-ao*(this.padMax-1);if(a0<ap||aC>aK){ap=(this.min!=null)?a0:a0-ao*(this.padMin-1);aK=(this.max!=null)?aC:aC+ao*(this.padMax-1);aJ=H.jqplot.LinearTickGenerator(ap,aK,this._scalefact,aq,ay,aV)}this.min=aJ[0];this.max=aJ[1];this.numberTicks=aJ[2];this._autoFormatString=aJ[3];this.tickInterval=aJ[4]}else{if(a0==aC){var ac=0.05;if(a0>0){ac=Math.max(Math.log(a0)/Math.LN10,0.05)}a0-=ac;aC+=ac}if(this.autoscale&&this.min==null&&this.max==null){var ae,af,al;var aw=false;var aH=false;var au={min:null,max:null,average:null,stddev:null};for(var aU=0;aU<this._series.length;aU++){var aP=this._series[aU];var ax=(aP.fillAxis=="x")?aP._xaxis.name:aP._yaxis.name;if(this.name==ax){var aL=aP._plotValues[aP.fillAxis];var aA=aL[0];var aW=aL[0];for(var aT=1;aT<aL.length;aT++){if(aL[aT]<aA){aA=aL[aT]}else{if(aL[aT]>aW){aW=aL[aT]}}}var an=(aW-aA)/aW;if(aP.renderer.constructor==H.jqplot.BarRenderer){if(aA>=0&&(aP.fillToZero||an>0.1)){aw=true}else{aw=false;if(aP.fill&&aP.fillToZero&&aA<0&&aW>0){aH=true}else{aH=false}}}else{if(aP.fill){if(aA>=0&&(aP.fillToZero||an>0.1)){aw=true}else{if(aA<0&&aW>0&&aP.fillToZero){aw=false;aH=true}else{aw=false;aH=false}}}else{if(aA<0){aw=false}}}}}if(aw){this.numberTicks=2+Math.ceil((ab-(this.tickSpacing-1))/this.tickSpacing);this.min=0;aB=0;af=aC/(this.numberTicks-1);am=Math.pow(10,Math.abs(Math.floor(Math.log(af)/Math.LN10)));if(af/am==parseInt(af/am,10)){af+=am}this.tickInterval=Math.ceil(af/am)*am;this.max=this.tickInterval*(this.numberTicks-1)}else{if(aH){this.numberTicks=2+Math.ceil((ab-(this.tickSpacing-1))/this.tickSpacing);var aD=Math.ceil(Math.abs(a0)/ao*(this.numberTicks-1));var a3=this.numberTicks-1-aD;af=Math.max(Math.abs(a0/aD),Math.abs(aC/a3));am=Math.pow(10,Math.abs(Math.floor(Math.log(af)/Math.LN10)));this.tickInterval=Math.ceil(af/am)*am;this.max=this.tickInterval*a3;this.min=-this.tickInterval*aD}else{if(this.numberTicks==null){if(this.tickInterval){this.numberTicks=3+Math.ceil(ao/this.tickInterval)}else{this.numberTicks=2+Math.ceil((ab-(this.tickSpacing-1))/this.tickSpacing)}}if(this.tickInterval==null){af=ao/(this.numberTicks-1);if(af<1){am=Math.pow(10,Math.abs(Math.floor(Math.log(af)/Math.LN10)))}else{am=1}this.tickInterval=Math.ceil(af*am*this.pad)/am}else{am=1/this.tickInterval}ae=this.tickInterval*(this.numberTicks-1);al=(ae-ao)/2;if(this.min==null){this.min=Math.floor(am*(a0-al))/am}if(this.max==null){this.max=this.min+ae}}}var az=H.jqplot.getSignificantFigures(this.tickInterval);var aG;if(az.digitsLeft>=az.significantDigits){aG="%d"}else{var am=Math.max(0,5-az.digitsLeft);am=Math.min(am,az.digitsRight);aG="%."+am+"f"}this._autoFormatString=aG}else{aM=(this.min!=null)?this.min:a0-ao*(this.padMin-1);ar=(this.max!=null)?this.max:aC+ao*(this.padMax-1);ao=ar-aM;if(this.numberTicks==null){if(this.tickInterval!=null){this.numberTicks=Math.ceil((ar-aM)/this.tickInterval)+1}else{if(ab>100){this.numberTicks=parseInt(3+(ab-100)/75,10)}else{this.numberTicks=2}}}if(this.tickInterval==null){this.tickInterval=ao/(this.numberTicks-1)}if(this.max==null){ar=aM+this.tickInterval*(this.numberTicks-1)}if(this.min==null){aM=ar-this.tickInterval*(this.numberTicks-1)}var az=H.jqplot.getSignificantFigures(this.tickInterval);var aG;if(az.digitsLeft>=az.significantDigits){aG="%d"}else{var am=Math.max(0,5-az.digitsLeft);am=Math.min(am,az.digitsRight);aG="%."+am+"f"}this._autoFormatString=aG;this.min=aM;this.max=ar}if(this.renderer.constructor==H.jqplot.LinearAxisRenderer&&this._autoFormatString==""){ao=this.max-this.min;var a1=new this.tickRenderer(this.tickOptions);var aF=a1.formatString||H.jqplot.config.defaultTickFormatString;var aF=aF.match(H.jqplot.sprintf.regex)[0];var aX=0;if(aF){if(aF.search(/[fFeEgGpP]/)>-1){var aS=aF.match(/\%\.(\d{0,})?[eEfFgGpP]/);if(aS){aX=parseInt(aS[1],10)}else{aX=6}}else{if(aF.search(/[di]/)>-1){aX=0}}var ak=Math.pow(10,-aX);if(this.tickInterval<ak){if(aQ==null&&a4==null){this.tickInterval=ak;if(aZ==null&&aB==null){this.min=Math.floor(this._dataBounds.min/ak)*ak;if(this.min==this._dataBounds.min){this.min=this._dataBounds.min-this.tickInterval}this.max=Math.ceil(this._dataBounds.max/ak)*ak;if(this.max==this._dataBounds.max){this.max=this._dataBounds.max+this.tickInterval}var aR=(this.max-this.min)/this.tickInterval;aR=aR.toFixed(11);aR=Math.ceil(aR);this.numberTicks=aR+1}else{if(aZ==null){var aR=(this._dataBounds.max-this.min)/this.tickInterval;aR=aR.toFixed(11);this.numberTicks=Math.ceil(aR)+2;this.max=this.min+this.tickInterval*(this.numberTicks-1)}else{if(aB==null){var aR=(this.max-this._dataBounds.min)/this.tickInterval;aR=aR.toFixed(11);this.numberTicks=Math.ceil(aR)+2;this.min=this.max-this.tickInterval*(this.numberTicks-1)}else{this.numberTicks=Math.ceil((aZ-aB)/this.tickInterval)+1;this.min=Math.floor(aB*Math.pow(10,aX))/Math.pow(10,aX);this.max=Math.ceil(aZ*Math.pow(10,aX))/Math.pow(10,aX);this.numberTicks=Math.ceil((this.max-this.min)/this.tickInterval)+1}}}}}}}}if(this._overrideFormatString&&this._autoFormatString!=""){this.tickOptions=this.tickOptions||{};this.tickOptions.formatString=this._autoFormatString}var aO,a2;for(var aU=0;aU<this.numberTicks;aU++){aY=this.min+aU*this.tickInterval;aO=new this.tickRenderer(this.tickOptions);aO.setTick(aY,this.name);this._ticks.push(aO);if(aU<this.numberTicks-1){for(var aT=0;aT<this.minorTicks;aT++){aY+=this.tickInterval/(this.minorTicks+1);a2=H.extend(true,{},this.tickOptions,{name:this.name,value:aY,label:"",isMinorTick:true});aO=new this.tickRenderer(a2);this._ticks.push(aO)}}aO=null}}if(this.tickInset){this.min=this.min-this.tickInset*this.tickInterval;this.max=this.max+this.tickInset*this.tickInterval}aN=null};H.jqplot.LinearAxisRenderer.prototype.resetTickValues=function(ad){if(H.isArray(ad)&&ad.length==this._ticks.length){var ac;for(var ab=0;ab<ad.length;ab++){ac=this._ticks[ab];ac.value=ad[ab];ac.label=ac.formatter(ac.formatString,ad[ab]);ac.label=ac.prefix+ac.label;ac._elem.html(ac.label)}ac=null;this.min=H.jqplot.arrayMin(ad);this.max=H.jqplot.arrayMax(ad);this.pack()}};H.jqplot.LinearAxisRenderer.prototype.pack=function(ad,ac){ad=ad||{};ac=ac||this._offsets;var ar=this._ticks;var an=this.max;var am=this.min;var ai=ac.max;var ag=ac.min;var ak=(this._label==null)?false:this._label.show;for(var al in ad){this._elem.css(al,ad[al])}this._offsets=ac;var ae=ai-ag;var af=an-am;if(this.breakPoints){af=af-this.breakPoints[1]+this.breakPoints[0];this.p2u=function(au){return(au-ag)*af/ae+am};this.u2p=function(au){if(au>this.breakPoints[0]&&au<this.breakPoints[1]){au=this.breakPoints[0]}if(au<=this.breakPoints[0]){return(au-am)*ae/af+ag}else{return(au-this.breakPoints[1]+this.breakPoints[0]-am)*ae/af+ag}};if(this.name.charAt(0)=="x"){this.series_u2p=function(au){if(au>this.breakPoints[0]&&au<this.breakPoints[1]){au=this.breakPoints[0]}if(au<=this.breakPoints[0]){return(au-am)*ae/af}else{return(au-this.breakPoints[1]+this.breakPoints[0]-am)*ae/af}};this.series_p2u=function(au){return au*af/ae+am}}else{this.series_u2p=function(au){if(au>this.breakPoints[0]&&au<this.breakPoints[1]){au=this.breakPoints[0]}if(au>=this.breakPoints[1]){return(au-an)*ae/af}else{return(au+this.breakPoints[1]-this.breakPoints[0]-an)*ae/af}};this.series_p2u=function(au){return au*af/ae+an}}}else{this.p2u=function(au){return(au-ag)*af/ae+am};this.u2p=function(au){return(au-am)*ae/af+ag};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(au){return(au-am)*ae/af};this.series_p2u=function(au){return au*af/ae+am}}else{this.series_u2p=function(au){return(au-an)*ae/af};this.series_p2u=function(au){return au*af/ae+an}}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(var ao=0;ao<ar.length;ao++){var aj=ar[ao];if(aj.show&&aj.showLabel){var ab;if(aj.constructor==H.jqplot.CanvasAxisTickRenderer&&aj.angle){var aq=(this.name=="xaxis")?1:-1;switch(aj.labelPosition){case"auto":if(aq*aj.angle<0){ab=-aj.getWidth()+aj._textRenderer.height*Math.sin(-aj._textRenderer.angle)/2}else{ab=-aj._textRenderer.height*Math.sin(aj._textRenderer.angle)/2}break;case"end":ab=-aj.getWidth()+aj._textRenderer.height*Math.sin(-aj._textRenderer.angle)/2;break;case"start":ab=-aj._textRenderer.height*Math.sin(aj._textRenderer.angle)/2;break;case"middle":ab=-aj.getWidth()/2+aj._textRenderer.height*Math.sin(-aj._textRenderer.angle)/2;break;default:ab=-aj.getWidth()/2+aj._textRenderer.height*Math.sin(-aj._textRenderer.angle)/2;break}}else{ab=-aj.getWidth()/2}var at=this.u2p(aj.value)+ab+"px";aj._elem.css("left",at);aj.pack()}}if(ak){var ah=this._label._elem.outerWidth(true);this._label._elem.css("left",ag+ae/2-ah/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}}else{for(var ao=0;ao<ar.length;ao++){var aj=ar[ao];if(aj.show&&aj.showLabel){var ab;if(aj.constructor==H.jqplot.CanvasAxisTickRenderer&&aj.angle){var aq=(this.name=="yaxis")?1:-1;switch(aj.labelPosition){case"auto":case"end":if(aq*aj.angle<0){ab=-aj._textRenderer.height*Math.cos(-aj._textRenderer.angle)/2}else{ab=-aj.getHeight()+aj._textRenderer.height*Math.cos(aj._textRenderer.angle)/2}break;case"start":if(aj.angle>0){ab=-aj._textRenderer.height*Math.cos(-aj._textRenderer.angle)/2}else{ab=-aj.getHeight()+aj._textRenderer.height*Math.cos(aj._textRenderer.angle)/2}break;case"middle":ab=-aj.getHeight()/2;break;default:ab=-aj.getHeight()/2;break}}else{ab=-aj.getHeight()/2}var at=this.u2p(aj.value)+ab+"px";aj._elem.css("top",at);aj.pack()}}if(ak){var ap=this._label._elem.outerHeight(true);this._label._elem.css("top",ai-ae/2-ap/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}ar=null};function h(ac){var ab;ac=Math.abs(ac);if(ac>=10){ab="%d"}else{if(ac>1){if(ac===parseInt(ac,10)){ab="%d"}else{ab="%.1f"}}else{var ad=-Math.floor(Math.log(ac)/Math.LN10);ab="%."+ad+"f"}}return ab}var a=[0.1,0.2,0.3,0.4,0.5,0.8,1,2,3,4,5];var b=function(ac){var ab=a.indexOf(ac);if(ab>0){return a[ab-1]}else{return a[a.length-1]/100}};var i=function(ac){var ab=a.indexOf(ac);if(ab<a.length-1){return a[ab+1]}else{return a[0]*100}};function c(af,an,am){var ak=Math.floor(am/2);var ac=Math.ceil(am*1.5);var ae=Number.MAX_VALUE;var ab=(an-af);var aq;var aj;var al;var ar=H.jqplot.getSignificantFigures;var ap;var ah;var ai;var ao;for(var ag=0,ad=ac-ak+1;ag<ad;ag++){ai=ak+ag;aq=ab/(ai-1);aj=ar(aq);aq=Math.abs(am-ai)+aj.digitsRight;if(aq<ae){ae=aq;al=ai;ao=aj.digitsRight}else{if(aq===ae){if(aj.digitsRight<ao){al=ai;ao=aj.digitsRight}}}}ap=Math.max(ao,Math.max(ar(af).digitsRight,ar(an).digitsRight));if(ap===0){ah="%d"}else{ah="%."+ap+"f"}aq=ab/(al-1);return[af,an,al,ah,aq]}function S(ac,af){af=af||7;var ae=ac/(af-1);var ad=Math.pow(10,Math.floor(Math.log(ae)/Math.LN10));var ag=ae/ad;var ab;if(ad<1){if(ag>5){ab=10*ad}else{if(ag>2){ab=5*ad}else{if(ag>1){ab=2*ad}else{ab=ad}}}}else{if(ag>5){ab=10*ad}else{if(ag>4){ab=5*ad}else{if(ag>3){ab=4*ad}else{if(ag>2){ab=3*ad}else{if(ag>1){ab=2*ad}else{ab=ad}}}}}}return ab}function M(ac,ab){ab=ab||1;var ae=Math.floor(Math.log(ac)/Math.LN10);var ag=Math.pow(10,ae);var af=ac/ag;var ad;af=af/ab;if(af<=0.38){ad=0.1}else{if(af<=1.6){ad=0.2}else{if(af<=4){ad=0.5}else{if(af<=8){ad=1}else{if(af<=16){ad=2}else{ad=5}}}}}return ad*ag}function t(ad,ac){var af=Math.floor(Math.log(ad)/Math.LN10);var ah=Math.pow(10,af);var ag=ad/ah;var ab;var ae;ag=ag/ac;if(ag<=0.38){ae=0.1}else{if(ag<=1.6){ae=0.2}else{if(ag<=4){ae=0.5}else{if(ag<=8){ae=1}else{if(ag<=16){ae=2}else{ae=5}}}}}ab=ae*ah;return[ab,ae,ah]}H.jqplot.LinearTickGenerator=function(ah,ak,ad,ae,ai,al){ai=(ai===null)?false:ai;al=(al===null||ai)?false:al;if(ah===ak){ak=(ak)?0:1}ad=ad||1;if(ak<ah){var am=ak;ak=ah;ah=am}var ac=[];var ap=M(ak-ah,ad);var ao=H.jqplot.getSignificantFigures;if(ae==null){if(!ai&&!al){ac[0]=Math.floor(ah/ap)*ap;ac[1]=Math.ceil(ak/ap)*ap;ac[2]=Math.round((ac[1]-ac[0])/ap+1);ac[3]=h(ap);ac[4]=ap}else{if(ai){ac[0]=ah;ac[2]=Math.ceil((ak-ah)/ap+1);ac[1]=ah+(ac[2]-1)*ap;var an=ao(ah).digitsRight;var aj=ao(ap).digitsRight;if(an<aj){ac[3]=h(ap)}else{ac[3]="%."+an+"f"}ac[4]=ap}else{if(al){ac[1]=ak;ac[2]=Math.ceil((ak-ah)/ap+1);ac[0]=ak-(ac[2]-1)*ap;var af=ao(ak).digitsRight;var aj=ao(ap).digitsRight;if(af<aj){ac[3]=h(ap)}else{ac[3]="%."+af+"f"}ac[4]=ap}}}}else{var ag=[];ag[0]=Math.floor(ah/ap)*ap;ag[1]=Math.ceil(ak/ap)*ap;ag[2]=Math.round((ag[1]-ag[0])/ap+1);ag[3]=h(ap);ag[4]=ap;if(ag[2]===ae){ac=ag}else{var ab=S(ag[1]-ag[0],ae);ac[0]=ag[0];ac[2]=ae;ac[4]=ab;ac[3]=h(ab);ac[1]=ac[0]+(ac[2]-1)*ac[4]}}return ac};H.jqplot.LinearTickGenerator.bestLinearInterval=M;H.jqplot.LinearTickGenerator.bestInterval=S;H.jqplot.LinearTickGenerator.bestLinearComponents=t;H.jqplot.LinearTickGenerator.bestConstrainedInterval=c;H.jqplot.MarkerRenderer=function(ab){this.show=true;this.style="filledCircle";this.lineWidth=2;this.size=9;this.color="#666666";this.shadow=true;this.shadowAngle=45;this.shadowOffset=1;this.shadowDepth=3;this.shadowAlpha="0.07";this.shadowRenderer=new H.jqplot.ShadowRenderer();this.shapeRenderer=new H.jqplot.ShapeRenderer();H.extend(true,this,ab)};H.jqplot.MarkerRenderer.prototype.init=function(ab){H.extend(true,this,ab);var ad={angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,lineWidth:this.lineWidth,depth:this.shadowDepth,closePath:true};if(this.style.indexOf("filled")!=-1){ad.fill=true}if(this.style.indexOf("ircle")!=-1){ad.isarc=true;ad.closePath=false}this.shadowRenderer.init(ad);var ac={fill:false,isarc:false,strokeStyle:this.color,fillStyle:this.color,lineWidth:this.lineWidth,closePath:true};if(this.style.indexOf("filled")!=-1){ac.fill=true}if(this.style.indexOf("ircle")!=-1){ac.isarc=true;ac.closePath=false}this.shapeRenderer.init(ac)};H.jqplot.MarkerRenderer.prototype.drawDiamond=function(ad,ac,ag,af,ai){var ab=1.2;var aj=this.size/2/ab;var ah=this.size/2*ab;var ae=[[ad-aj,ac],[ad,ac+ah],[ad+aj,ac],[ad,ac-ah]];if(this.shadow){this.shadowRenderer.draw(ag,ae)}this.shapeRenderer.draw(ag,ae,ai)};H.jqplot.MarkerRenderer.prototype.drawPlus=function(ae,ad,ah,ag,ak){var ac=1;var al=this.size/2*ac;var ai=this.size/2*ac;var aj=[[ae,ad-ai],[ae,ad+ai]];var af=[[ae+al,ad],[ae-al,ad]];var ab=H.extend(true,{},this.options,{closePath:false});if(this.shadow){this.shadowRenderer.draw(ah,aj,{closePath:false});this.shadowRenderer.draw(ah,af,{closePath:false})}this.shapeRenderer.draw(ah,aj,ab);this.shapeRenderer.draw(ah,af,ab)};H.jqplot.MarkerRenderer.prototype.drawX=function(ae,ad,ah,ag,ak){var ac=1;var al=this.size/2*ac;var ai=this.size/2*ac;var ab=H.extend(true,{},this.options,{closePath:false});var aj=[[ae-al,ad-ai],[ae+al,ad+ai]];var af=[[ae-al,ad+ai],[ae+al,ad-ai]];if(this.shadow){this.shadowRenderer.draw(ah,aj,{closePath:false});this.shadowRenderer.draw(ah,af,{closePath:false})}this.shapeRenderer.draw(ah,aj,ab);this.shapeRenderer.draw(ah,af,ab)};H.jqplot.MarkerRenderer.prototype.drawDash=function(ad,ac,ag,af,ai){var ab=1;var aj=this.size/2*ab;var ah=this.size/2*ab;var ae=[[ad-aj,ac],[ad+aj,ac]];if(this.shadow){this.shadowRenderer.draw(ag,ae)}this.shapeRenderer.draw(ag,ae,ai)};H.jqplot.MarkerRenderer.prototype.drawLine=function(ag,af,ab,ae,ac){var ad=[ag,af];if(this.shadow){this.shadowRenderer.draw(ab,ad)}this.shapeRenderer.draw(ab,ad,ac)};H.jqplot.MarkerRenderer.prototype.drawSquare=function(ad,ac,ag,af,ai){var ab=1;var aj=this.size/2/ab;var ah=this.size/2*ab;var ae=[[ad-aj,ac-ah],[ad-aj,ac+ah],[ad+aj,ac+ah],[ad+aj,ac-ah]];if(this.shadow){this.shadowRenderer.draw(ag,ae)}this.shapeRenderer.draw(ag,ae,ai)};H.jqplot.MarkerRenderer.prototype.drawCircle=function(ac,ai,ae,ah,af){var ab=this.size/2;var ad=2*Math.PI;var ag=[ac,ai,ab,0,ad,true];if(this.shadow){this.shadowRenderer.draw(ae,ag)}this.shapeRenderer.draw(ae,ag,af)};H.jqplot.MarkerRenderer.prototype.draw=function(ab,ae,ac,ad){ad=ad||{};if(ad.show==null||ad.show!=false){if(ad.color&&!ad.fillStyle){ad.fillStyle=ad.color}if(ad.color&&!ad.strokeStyle){ad.strokeStyle=ad.color}switch(this.style){case"diamond":this.drawDiamond(ab,ae,ac,false,ad);break;case"filledDiamond":this.drawDiamond(ab,ae,ac,true,ad);break;case"circle":this.drawCircle(ab,ae,ac,false,ad);break;case"filledCircle":this.drawCircle(ab,ae,ac,true,ad);break;case"square":this.drawSquare(ab,ae,ac,false,ad);break;case"filledSquare":this.drawSquare(ab,ae,ac,true,ad);break;case"x":this.drawX(ab,ae,ac,true,ad);break;case"plus":this.drawPlus(ab,ae,ac,true,ad);break;case"dash":this.drawDash(ab,ae,ac,true,ad);break;case"line":this.drawLine(ab,ae,ac,false,ad);break;default:this.drawDiamond(ab,ae,ac,false,ad);break}}};H.jqplot.ShadowRenderer=function(ab){this.angle=45;this.offset=1;this.alpha=0.07;this.lineWidth=1.5;this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.depth=3;this.strokeStyle="rgba(0,0,0,0.1)";this.isarc=false;H.extend(true,this,ab)};H.jqplot.ShadowRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.ShadowRenderer.prototype.draw=function(ao,am,aq){ao.save();var ab=(aq!=null)?aq:{};var an=(ab.fill!=null)?ab.fill:this.fill;var aj=(ab.fillRect!=null)?ab.fillRect:this.fillRect;var ai=(ab.closePath!=null)?ab.closePath:this.closePath;var af=(ab.offset!=null)?ab.offset:this.offset;var ad=(ab.alpha!=null)?ab.alpha:this.alpha;var ah=(ab.depth!=null)?ab.depth:this.depth;var ap=(ab.isarc!=null)?ab.isarc:this.isarc;var ak=(ab.linePattern!=null)?ab.linePattern:this.linePattern;ao.lineWidth=(ab.lineWidth!=null)?ab.lineWidth:this.lineWidth;ao.lineJoin=(ab.lineJoin!=null)?ab.lineJoin:this.lineJoin;ao.lineCap=(ab.lineCap!=null)?ab.lineCap:this.lineCap;ao.strokeStyle=ab.strokeStyle||this.strokeStyle||"rgba(0,0,0,"+ad+")";ao.fillStyle=ab.fillStyle||this.fillStyle||"rgba(0,0,0,"+ad+")";for(var ae=0;ae<ah;ae++){var al=H.jqplot.LinePattern(ao,ak);ao.translate(Math.cos(this.angle*Math.PI/180)*af,Math.sin(this.angle*Math.PI/180)*af);al.beginPath();if(ap){ao.arc(am[0],am[1],am[2],am[3],am[4],true)}else{if(aj){if(aj){ao.fillRect(am[0],am[1],am[2],am[3])}}else{if(am&&am.length){var ac=true;for(var ag=0;ag<am.length;ag++){if(am[ag][0]!=null&&am[ag][1]!=null){if(ac){al.moveTo(am[ag][0],am[ag][1]);ac=false}else{al.lineTo(am[ag][0],am[ag][1])}}else{ac=true}}}}}if(ai){al.closePath()}if(an){ao.fill()}else{ao.stroke()}}ao.restore()};H.jqplot.ShapeRenderer=function(ab){this.lineWidth=1.5;this.linePattern="solid";this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.isarc=false;this.fillRect=false;this.strokeRect=false;this.clearRect=false;this.strokeStyle="#999999";this.fillStyle="#999999";H.extend(true,this,ab)};H.jqplot.ShapeRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.ShapeRenderer.prototype.draw=function(am,ak,ao){am.save();var ab=(ao!=null)?ao:{};var al=(ab.fill!=null)?ab.fill:this.fill;var ag=(ab.closePath!=null)?ab.closePath:this.closePath;var ah=(ab.fillRect!=null)?ab.fillRect:this.fillRect;var ae=(ab.strokeRect!=null)?ab.strokeRect:this.strokeRect;var ac=(ab.clearRect!=null)?ab.clearRect:this.clearRect;var an=(ab.isarc!=null)?ab.isarc:this.isarc;var ai=(ab.linePattern!=null)?ab.linePattern:this.linePattern;var aj=H.jqplot.LinePattern(am,ai);am.lineWidth=ab.lineWidth||this.lineWidth;am.lineJoin=ab.lineJoin||this.lineJoin;am.lineCap=ab.lineCap||this.lineCap;am.strokeStyle=(ab.strokeStyle||ab.color)||this.strokeStyle;am.fillStyle=ab.fillStyle||this.fillStyle;am.beginPath();if(an){am.arc(ak[0],ak[1],ak[2],ak[3],ak[4],true);if(ag){am.closePath()}if(al){am.fill()}else{am.stroke()}am.restore();return}else{if(ac){am.clearRect(ak[0],ak[1],ak[2],ak[3]);am.restore();return}else{if(ah||ae){if(ah){am.fillRect(ak[0],ak[1],ak[2],ak[3])}if(ae){am.strokeRect(ak[0],ak[1],ak[2],ak[3]);am.restore();return}}else{if(ak&&ak.length){var ad=true;for(var af=0;af<ak.length;af++){if(ak[af][0]!=null&&ak[af][1]!=null){if(ad){aj.moveTo(ak[af][0],ak[af][1]);ad=false}else{aj.lineTo(ak[af][0],ak[af][1])}}else{ad=true}}if(ag){aj.closePath()}if(al){am.fill()}else{am.stroke()}}}}}am.restore()};H.jqplot.TableLegendRenderer=function(){};H.jqplot.TableLegendRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.TableLegendRenderer.prototype.addrow=function(ak,ae,ab,ai){var af=(ab)?this.rowSpacing+"px":"0px";var aj;var ad;var ac;var ah;var ag;ac=document.createElement("tr");aj=H(ac);aj.addClass("jqplot-table-legend");ac=null;if(ai){aj.prependTo(this._elem)}else{aj.appendTo(this._elem)}if(this.showSwatches){ad=H(document.createElement("td"));ad.addClass("jqplot-table-legend jqplot-table-legend-swatch");ad.css({textAlign:"center",paddingTop:af});ah=H(document.createElement("div"));ah.addClass("jqplot-table-legend-swatch-outline");ag=H(document.createElement("div"));ag.addClass("jqplot-table-legend-swatch");ag.css({backgroundColor:ae,borderColor:ae});aj.append(ad.append(ah.append(ag)))}if(this.showLabels){ad=H(document.createElement("td"));ad.addClass("jqplot-table-legend jqplot-table-legend-label");ad.css("paddingTop",af);aj.append(ad);if(this.escapeHtml){ad.text(ak)}else{ad.html(ak)}}ad=null;ah=null;ag=null;aj=null;ac=null};H.jqplot.TableLegendRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}if(this.show){var ag=this._series;var ac=document.createElement("table");this._elem=H(ac);this._elem.addClass("jqplot-table-legend");var al={position:"absolute"};if(this.background){al.background=this.background}if(this.border){al.border=this.border}if(this.fontSize){al.fontSize=this.fontSize}if(this.fontFamily){al.fontFamily=this.fontFamily}if(this.textColor){al.textColor=this.textColor}if(this.marginTop!=null){al.marginTop=this.marginTop}if(this.marginBottom!=null){al.marginBottom=this.marginBottom}if(this.marginLeft!=null){al.marginLeft=this.marginLeft}if(this.marginRight!=null){al.marginRight=this.marginRight}var ab=false,ai=false,ak;for(var ah=0;ah<ag.length;ah++){ak=ag[ah];if(ak._stack||ak.renderer.constructor==H.jqplot.BezierCurveRenderer){ai=true}if(ak.show&&ak.showLabel){var af=this.labels[ah]||ak.label.toString();if(af){var ad=ak.color;if(ai&&ah<ag.length-1){ab=true}else{if(ai&&ah==ag.length-1){ab=false}}this.renderer.addrow.call(this,af,ad,ab,ai);ab=true}for(var ae=0;ae<H.jqplot.addLegendRowHooks.length;ae++){var aj=H.jqplot.addLegendRowHooks[ae].call(this,ak);if(aj){this.renderer.addrow.call(this,aj.label,aj.color,ab);ab=true}}af=null}}}return this._elem};H.jqplot.TableLegendRenderer.prototype.pack=function(ad){if(this.show){if(this.placement=="insideGrid"){switch(this.location){case"nw":var ac=ad.left;var ab=ad.top;this._elem.css("left",ac);this._elem.css("top",ab);break;case"n":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;var ab=ad.top;this._elem.css("left",ac);this._elem.css("top",ab);break;case"ne":var ac=ad.right;var ab=ad.top;this._elem.css({right:ac,top:ab});break;case"e":var ac=ad.right;var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({right:ac,top:ab});break;case"se":var ac=ad.right;var ab=ad.bottom;this._elem.css({right:ac,bottom:ab});break;case"s":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;var ab=ad.bottom;this._elem.css({left:ac,bottom:ab});break;case"sw":var ac=ad.left;var ab=ad.bottom;this._elem.css({left:ac,bottom:ab});break;case"w":var ac=ad.left;var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({left:ac,top:ab});break;default:var ac=ad.right;var ab=ad.bottom;this._elem.css({right:ac,bottom:ab});break}}else{if(this.placement=="outside"){switch(this.location){case"nw":var ac=this._plotDimensions.width-ad.left;var ab=ad.top;this._elem.css("right",ac);this._elem.css("top",ab);break;case"n":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;var ab=this._plotDimensions.height-ad.top;this._elem.css("left",ac);this._elem.css("bottom",ab);break;case"ne":var ac=this._plotDimensions.width-ad.right;var ab=ad.top;this._elem.css({left:ac,top:ab});break;case"e":var ac=this._plotDimensions.width-ad.right;var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({left:ac,top:ab});break;case"se":var ac=this._plotDimensions.width-ad.right;var ab=ad.bottom;this._elem.css({left:ac,bottom:ab});break;case"s":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;var ab=this._plotDimensions.height-ad.bottom;this._elem.css({left:ac,top:ab});break;case"sw":var ac=this._plotDimensions.width-ad.left;var ab=ad.bottom;this._elem.css({right:ac,bottom:ab});break;case"w":var ac=this._plotDimensions.width-ad.left;var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({right:ac,top:ab});break;default:var ac=ad.right;var ab=ad.bottom;this._elem.css({right:ac,bottom:ab});break}}else{switch(this.location){case"nw":this._elem.css({left:0,top:ad.top});break;case"n":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;this._elem.css({left:ac,top:ad.top});break;case"ne":this._elem.css({right:0,top:ad.top});break;case"e":var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({right:ad.right,top:ab});break;case"se":this._elem.css({right:ad.right,bottom:ad.bottom});break;case"s":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;this._elem.css({left:ac,bottom:ad.bottom});break;case"sw":this._elem.css({left:ad.left,bottom:ad.bottom});break;case"w":var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({left:ad.left,top:ab});break;default:this._elem.css({right:ad.right,bottom:ad.bottom});break}}}}};H.jqplot.ThemeEngine=function(){this.themes={};this.activeTheme=null};H.jqplot.ThemeEngine.prototype.init=function(){var ae=new H.jqplot.Theme({_name:"Default"});var ah,ac,ag;for(ah in ae.target){if(ah=="textColor"){ae.target[ah]=this.target.css("color")}else{ae.target[ah]=this.target.css(ah)}}if(this.title.show&&this.title._elem){for(ah in ae.title){if(ah=="textColor"){ae.title[ah]=this.title._elem.css("color")}else{ae.title[ah]=this.title._elem.css(ah)}}}for(ah in ae.grid){ae.grid[ah]=this.grid[ah]}if(ae.grid.backgroundColor==null&&this.grid.background!=null){ae.grid.backgroundColor=this.grid.background}if(this.legend.show&&this.legend._elem){for(ah in ae.legend){if(ah=="textColor"){ae.legend[ah]=this.legend._elem.css("color")}else{ae.legend[ah]=this.legend._elem.css(ah)}}}var ad;for(ac=0;ac<this.series.length;ac++){ad=this.series[ac];if(ad.renderer.constructor==H.jqplot.LineRenderer){ae.series.push(new m())}else{if(ad.renderer.constructor==H.jqplot.BarRenderer){ae.series.push(new P())}else{if(ad.renderer.constructor==H.jqplot.PieRenderer){ae.series.push(new e())}else{if(ad.renderer.constructor==H.jqplot.DonutRenderer){ae.series.push(new C())}else{if(ad.renderer.constructor==H.jqplot.FunnelRenderer){ae.series.push(new U())}else{if(ad.renderer.constructor==H.jqplot.MeterGaugeRenderer){ae.series.push(new z())}else{ae.series.push({})}}}}}}for(ah in ae.series[ac]){ae.series[ac][ah]=ad[ah]}}var ab,af;for(ah in this.axes){af=this.axes[ah];ab=ae.axes[ah]=new L();ab.borderColor=af.borderColor;ab.borderWidth=af.borderWidth;if(af._ticks&&af._ticks[0]){for(ag in ab.ticks){if(af._ticks[0].hasOwnProperty(ag)){ab.ticks[ag]=af._ticks[0][ag]}else{if(af._ticks[0]._elem){ab.ticks[ag]=af._ticks[0]._elem.css(ag)}}}}if(af._label&&af._label.show){for(ag in ab.label){if(af._label[ag]){ab.label[ag]=af._label[ag]}else{if(af._label._elem){if(ag=="textColor"){ab.label[ag]=af._label._elem.css("color")}else{ab.label[ag]=af._label._elem.css(ag)}}}}}}this.themeEngine._add(ae);this.themeEngine.activeTheme=this.themeEngine.themes[ae._name]};H.jqplot.ThemeEngine.prototype.get=function(ab){if(!ab){return this.activeTheme}else{return this.themes[ab]}};function K(ac,ab){return ac-ab}H.jqplot.ThemeEngine.prototype.getThemeNames=function(){var ab=[];for(var ac in this.themes){ab.push(ac)}return ab.sort(K)};H.jqplot.ThemeEngine.prototype.getThemes=function(){var ac=[];var ab=[];for(var ae in this.themes){ac.push(ae)}ac.sort(K);for(var ad=0;ad<ac.length;ad++){ab.push(this.themes[ac[ad]])}return ab};H.jqplot.ThemeEngine.prototype.activate=function(ao,au){var ab=false;if(!au&&this.activeTheme&&this.activeTheme._name){au=this.activeTheme._name}if(!this.themes.hasOwnProperty(au)){throw new Error("No theme of that name")}else{var ag=this.themes[au];this.activeTheme=ag;var at,am=false,al=false;var ac=["xaxis","x2axis","yaxis","y2axis"];for(ap=0;ap<ac.length;ap++){var ah=ac[ap];if(ag.axesStyles.borderColor!=null){ao.axes[ah].borderColor=ag.axesStyles.borderColor}if(ag.axesStyles.borderWidth!=null){ao.axes[ah].borderWidth=ag.axesStyles.borderWidth}}for(var ar in ao.axes){var ae=ao.axes[ar];if(ae.show){var ak=ag.axes[ar]||{};var ai=ag.axesStyles;var af=H.jqplot.extend(true,{},ak,ai);at=(ag.axesStyles.borderColor!=null)?ag.axesStyles.borderColor:af.borderColor;if(af.borderColor!=null){ae.borderColor=af.borderColor;ab=true}at=(ag.axesStyles.borderWidth!=null)?ag.axesStyles.borderWidth:af.borderWidth;if(af.borderWidth!=null){ae.borderWidth=af.borderWidth;ab=true}if(ae._ticks&&ae._ticks[0]){for(var ad in af.ticks){at=af.ticks[ad];if(at!=null){ae.tickOptions[ad]=at;ae._ticks=[];ab=true}}}if(ae._label&&ae._label.show){for(var ad in af.label){at=af.label[ad];if(at!=null){ae.labelOptions[ad]=at;ab=true}}}}}for(var an in ag.grid){if(ag.grid[an]!=null){ao.grid[an]=ag.grid[an]}}if(!ab){ao.grid.draw()}if(ao.legend.show){for(an in ag.legend){if(ag.legend[an]!=null){ao.legend[an]=ag.legend[an]}}}if(ao.title.show){for(an in ag.title){if(ag.title[an]!=null){ao.title[an]=ag.title[an]}}}var ap;for(ap=0;ap<ag.series.length;ap++){var aj={};var aq=false;for(an in ag.series[ap]){at=(ag.seriesStyles[an]!=null)?ag.seriesStyles[an]:ag.series[ap][an];if(at!=null){aj[an]=at;if(an=="color"){ao.series[ap].renderer.shapeRenderer.fillStyle=at;ao.series[ap].renderer.shapeRenderer.strokeStyle=at;ao.series[ap][an]=at}else{if((an=="lineWidth")||(an=="linePattern")){ao.series[ap].renderer.shapeRenderer[an]=at;ao.series[ap][an]=at}else{if(an=="markerOptions"){R(ao.series[ap].markerOptions,at);R(ao.series[ap].markerRenderer,at)}else{ao.series[ap][an]=at}}}ab=true}}}if(ab){ao.target.empty();ao.draw()}for(an in ag.target){if(ag.target[an]!=null){ao.target.css(an,ag.target[an])}}}};H.jqplot.ThemeEngine.prototype._add=function(ac,ab){if(ab){ac._name=ab}if(!ac._name){ac._name=Date.parse(new Date())}if(!this.themes.hasOwnProperty(ac._name)){this.themes[ac._name]=ac}else{throw new Error("jqplot.ThemeEngine Error: Theme already in use")}};H.jqplot.ThemeEngine.prototype.remove=function(ab){if(ab=="Default"){return false}return delete this.themes[ab]};H.jqplot.ThemeEngine.prototype.newTheme=function(ab,ad){if(typeof(ab)=="object"){ad=ad||ab;ab=null}if(ad&&ad._name){ab=ad._name}else{ab=ab||Date.parse(new Date())}var ac=this.copy(this.themes.Default._name,ab);H.jqplot.extend(ac,ad);return ac};function x(ad){if(ad==null||typeof(ad)!="object"){return ad}var ab=new ad.constructor();for(var ac in ad){ab[ac]=x(ad[ac])}return ab}H.jqplot.clone=x;function R(ad,ac){if(ac==null||typeof(ac)!="object"){return}for(var ab in ac){if(ab=="highlightColors"){ad[ab]=x(ac[ab])}if(ac[ab]!=null&&typeof(ac[ab])=="object"){if(!ad.hasOwnProperty(ab)){ad[ab]={}}R(ad[ab],ac[ab])}else{ad[ab]=ac[ab]}}}H.jqplot.merge=R;H.jqplot.extend=function(){var ag=arguments[0]||{},ae=1,af=arguments.length,ab=false,ad;if(typeof ag==="boolean"){ab=ag;ag=arguments[1]||{};ae=2}if(typeof ag!=="object"&&!toString.call(ag)==="[object Function]"){ag={}}for(;ae<af;ae++){if((ad=arguments[ae])!=null){for(var ac in ad){var ah=ag[ac],ai=ad[ac];if(ag===ai){continue}if(ab&&ai&&typeof ai==="object"&&!ai.nodeType){ag[ac]=H.jqplot.extend(ab,ah||(ai.length!=null?[]:{}),ai)}else{if(ai!==r){ag[ac]=ai}}}}}return ag};H.jqplot.ThemeEngine.prototype.rename=function(ac,ab){if(ac=="Default"||ab=="Default"){throw new Error("jqplot.ThemeEngine Error: Cannot rename from/to Default")}if(this.themes.hasOwnProperty(ab)){throw new Error("jqplot.ThemeEngine Error: New name already in use.")}else{if(this.themes.hasOwnProperty(ac)){var ad=this.copy(ac,ab);this.remove(ac);return ad}}throw new Error("jqplot.ThemeEngine Error: Old name or new name invalid")};H.jqplot.ThemeEngine.prototype.copy=function(ab,ad,af){if(ad=="Default"){throw new Error("jqplot.ThemeEngine Error: Cannot copy over Default theme")}if(!this.themes.hasOwnProperty(ab)){var ac="jqplot.ThemeEngine Error: Source name invalid";throw new Error(ac)}if(this.themes.hasOwnProperty(ad)){var ac="jqplot.ThemeEngine Error: Target name invalid";throw new Error(ac)}else{var ae=x(this.themes[ab]);ae._name=ad;H.jqplot.extend(true,ae,af);this._add(ae);return ae}};H.jqplot.Theme=function(ab,ac){if(typeof(ab)=="object"){ac=ac||ab;ab=null}ab=ab||Date.parse(new Date());this._name=ab;this.target={backgroundColor:null};this.legend={textColor:null,fontFamily:null,fontSize:null,border:null,background:null};this.title={textColor:null,fontFamily:null,fontSize:null,textAlign:null};this.seriesStyles={};this.series=[];this.grid={drawGridlines:null,gridLineColor:null,gridLineWidth:null,backgroundColor:null,borderColor:null,borderWidth:null,shadow:null};this.axesStyles={label:{},ticks:{}};this.axes={};if(typeof(ac)=="string"){this._name=ac}else{if(typeof(ac)=="object"){H.jqplot.extend(true,this,ac)}}};var L=function(){this.borderColor=null;this.borderWidth=null;this.ticks=new l();this.label=new q()};var l=function(){this.show=null;this.showGridline=null;this.showLabel=null;this.showMark=null;this.size=null;this.textColor=null;this.whiteSpace=null;this.fontSize=null;this.fontFamily=null};var q=function(){this.textColor=null;this.whiteSpace=null;this.fontSize=null;this.fontFamily=null;this.fontWeight=null};var m=function(){this.color=null;this.lineWidth=null;this.linePattern=null;this.shadow=null;this.fillColor=null;this.showMarker=null;this.markerOptions=new E()};var E=function(){this.show=null;this.style=null;this.lineWidth=null;this.size=null;this.color=null;this.shadow=null};var P=function(){this.color=null;this.seriesColors=null;this.lineWidth=null;this.shadow=null;this.barPadding=null;this.barMargin=null;this.barWidth=null;this.highlightColors=null};var e=function(){this.seriesColors=null;this.padding=null;this.sliceMargin=null;this.fill=null;this.shadow=null;this.startAngle=null;this.lineWidth=null;this.highlightColors=null};var C=function(){this.seriesColors=null;this.padding=null;this.sliceMargin=null;this.fill=null;this.shadow=null;this.startAngle=null;this.lineWidth=null;this.innerDiameter=null;this.thickness=null;this.ringMargin=null;this.highlightColors=null};var U=function(){this.color=null;this.lineWidth=null;this.shadow=null;this.padding=null;this.sectionMargin=null;this.seriesColors=null;this.highlightColors=null};var z=function(){this.padding=null;this.backgroundColor=null;this.ringColor=null;this.tickColor=null;this.ringWidth=null;this.intervalColors=null;this.intervalInnerRadius=null;this.intervalOuterRadius=null;this.hubRadius=null;this.needleThickness=null;this.needlePad=null};H.fn.jqplotChildText=function(){return H(this).contents().filter(function(){return this.nodeType==3}).text()};H.fn.jqplotGetComputedFontStyle=function(){var ae=window.getComputedStyle?window.getComputedStyle(this[0],""):this[0].currentStyle;var ac=ae["font-style"]?["font-style","font-weight","font-size","font-family"]:["fontStyle","fontWeight","fontSize","fontFamily"];var af=[];for(var ad=0;ad<ac.length;++ad){var ab=String(ae[ac[ad]]);if(ab&&ab!="normal"){af.push(ab)}}return af.join(" ")};H.fn.jqplotToImageCanvas=function(ad){ad=ad||{};var ao=(ad.x_offset==null)?0:ad.x_offset;var aq=(ad.y_offset==null)?0:ad.y_offset;var af=(ad.backgroundColor==null)?"rgb(255,255,255)":ad.backgroundColor;if(H(this).width()==0||H(this).height()==0){return null}if(H.jqplot.use_excanvas){return null}var ah=document.createElement("canvas");var au=H(this).outerHeight(true);var am=H(this).outerWidth(true);var ag=H(this).offset();var ai=ag.left;var ak=ag.top;var an=0,al=0;var ar=["jqplot-table-legend","jqplot-xaxis-tick","jqplot-x2axis-tick","jqplot-yaxis-tick","jqplot-y2axis-tick","jqplot-y3axis-tick","jqplot-y4axis-tick","jqplot-y5axis-tick","jqplot-y6axis-tick","jqplot-y7axis-tick","jqplot-y8axis-tick","jqplot-y9axis-tick","jqplot-xaxis-label","jqplot-x2axis-label","jqplot-yaxis-label","jqplot-y2axis-label","jqplot-y3axis-label","jqplot-y4axis-label","jqplot-y5axis-label","jqplot-y6axis-label","jqplot-y7axis-label","jqplot-y8axis-label","jqplot-y9axis-label"];var aj,ab,ac,av;for(var at=0;at<ar.length;at++){H(this).find("."+ar[at]).each(function(){aj=H(this).offset().top-ak;ab=H(this).offset().left-ai;av=ab+H(this).outerWidth(true)+an;ac=aj+H(this).outerHeight(true)+al;if(ab<-an){am=am-an-ab;an=-ab}if(aj<-al){au=au-al-aj;al=-aj}if(av>am){am=av}if(ac>au){au=ac}})}ah.width=am+Number(ao);ah.height=au+Number(aq);var ae=ah.getContext("2d");ae.save();ae.fillStyle=af;ae.fillRect(0,0,ah.width,ah.height);ae.restore();ae.translate(an,al);ae.textAlign="left";ae.textBaseline="top";function aw(ay){var az=parseInt(H(ay).css("line-height"),10);if(isNaN(az)){az=parseInt(H(ay).css("font-size"),10)*1.2}return az}function ax(az,ay,aM,aA,aI,aB){var aK=aw(az);var aE=H(az).innerWidth();var aF=H(az).innerHeight();var aH=aM.split(/\s+/);var aL=aH.length;var aJ="";var aG=[];var aO=aI;var aN=aA;for(var aD=0;aD<aL;aD++){aJ+=aH[aD];if(ay.measureText(aJ).width>aE){aG.push(aD);aJ="";aD--}}if(aG.length===0){if(H(az).css("textAlign")==="center"){aN=aA+(aB-ay.measureText(aJ).width)/2-an}ay.fillText(aM,aN,aI)}else{aJ=aH.slice(0,aG[0]).join(" ");if(H(az).css("textAlign")==="center"){aN=aA+(aB-ay.measureText(aJ).width)/2-an}ay.fillText(aJ,aN,aO);aO+=aK;for(var aD=1,aC=aG.length;aD<aC;aD++){aJ=aH.slice(aG[aD-1],aG[aD]).join(" ");if(H(az).css("textAlign")==="center"){aN=aA+(aB-ay.measureText(aJ).width)/2-an}ay.fillText(aJ,aN,aO);aO+=aK}aJ=aH.slice(aG[aD-1],aH.length).join(" ");if(H(az).css("textAlign")==="center"){aN=aA+(aB-ay.measureText(aJ).width)/2-an}ay.fillText(aJ,aN,aO)}}function ap(aA,aD,ay){var aH=aA.tagName.toLowerCase();var az=H(aA).position();var aE=window.getComputedStyle?window.getComputedStyle(aA,""):aA.currentStyle;var aC=aD+az.left+parseInt(aE.marginLeft,10)+parseInt(aE.borderLeftWidth,10)+parseInt(aE.paddingLeft,10);var aF=ay+az.top+parseInt(aE.marginTop,10)+parseInt(aE.borderTopWidth,10)+parseInt(aE.paddingTop,10);var aG=ah.width;if((aH=="div"||aH=="span")&&!H(aA).hasClass("jqplot-highlighter-tooltip")){H(aA).children().each(function(){ap(this,aC,aF)});var aI=H(aA).jqplotChildText();if(aI){ae.font=H(aA).jqplotGetComputedFontStyle();ae.fillStyle=H(aA).css("color");ax(aA,ae,aI,aC,aF,aG)}}else{if(aH==="table"&&H(aA).hasClass("jqplot-table-legend")){ae.strokeStyle=H(aA).css("border-top-color");ae.fillStyle=H(aA).css("background-color");ae.fillRect(aC,aF,H(aA).innerWidth(),H(aA).innerHeight());if(parseInt(H(aA).css("border-top-width"),10)>0){ae.strokeRect(aC,aF,H(aA).innerWidth(),H(aA).innerHeight())}H(aA).find("div.jqplot-table-legend-swatch-outline").each(function(){var aO=H(this);ae.strokeStyle=aO.css("border-top-color");var aK=aC+aO.position().left;var aL=aF+aO.position().top;ae.strokeRect(aK,aL,aO.innerWidth(),aO.innerHeight());aK+=parseInt(aO.css("padding-left"),10);aL+=parseInt(aO.css("padding-top"),10);var aN=aO.innerHeight()-2*parseInt(aO.css("padding-top"),10);var aJ=aO.innerWidth()-2*parseInt(aO.css("padding-left"),10);var aM=aO.children("div.jqplot-table-legend-swatch");ae.fillStyle=aM.css("background-color");ae.fillRect(aK,aL,aJ,aN)});H(aA).find("td.jqplot-table-legend-label").each(function(){var aL=H(this);var aJ=aC+aL.position().left;var aK=aF+aL.position().top+parseInt(aL.css("padding-top"),10);ae.font=aL.jqplotGetComputedFontStyle();ae.fillStyle=aL.css("color");ax(aL,ae,aL.text(),aJ,aK,aG)});var aB=null}else{if(aH=="canvas"){ae.drawImage(aA,aC,aF)}}}}H(this).children().each(function(){ap(this,ao,aq)});return ah};H.fn.jqplotToImageStr=function(ac){var ab=H(this).jqplotToImageCanvas(ac);if(ab){return ab.toDataURL("image/png")}else{return null}};H.fn.jqplotToImageElem=function(ab){var ac=document.createElement("img");var ad=H(this).jqplotToImageStr(ab);ac.src=ad;return ac};H.fn.jqplotToImageElemStr=function(ab){var ac="<img src="+H(this).jqplotToImageStr(ab)+" />";return ac};H.fn.jqplotSaveImage=function(){var ab=H(this).jqplotToImageStr({});if(ab){window.location.href=ab.replace("image/png","image/octet-stream")}};H.fn.jqplotViewImage=function(){var ac=H(this).jqplotToImageElemStr({});var ad=H(this).jqplotToImageStr({});if(ac){var ab=window.open("");ab.document.open("image/png");ab.document.write(ac);ab.document.close();ab=null}};var aa=function(){this.syntax=aa.config.syntax;this._type="jsDate";this.proxy=new Date();this.options={};this.locale=aa.regional.getLocale();this.formatString="";this.defaultCentury=aa.config.defaultCentury;switch(arguments.length){case 0:break;case 1:if(j(arguments[0])=="[object Object]"&&arguments[0]._type!="jsDate"){var ad=this.options=arguments[0];this.syntax=ad.syntax||this.syntax;this.defaultCentury=ad.defaultCentury||this.defaultCentury;this.proxy=aa.createDate(ad.date)}else{this.proxy=aa.createDate(arguments[0])}break;default:var ab=[];for(var ac=0;ac<arguments.length;ac++){ab.push(arguments[ac])}this.proxy=new Date();this.proxy.setFullYear.apply(this.proxy,ab.slice(0,3));if(ab.slice(3).length){this.proxy.setHours.apply(this.proxy,ab.slice(3))}break}};aa.config={defaultLocale:"en",syntax:"perl",defaultCentury:1900};aa.prototype.add=function(ad,ac){var ab=A[ac]||A.day;if(typeof ab=="number"){this.proxy.setTime(this.proxy.getTime()+(ab*ad))}else{ab.add(this,ad)}return this};aa.prototype.clone=function(){return new aa(this.proxy.getTime())};aa.prototype.getUtcOffset=function(){return this.proxy.getTimezoneOffset()*60000};aa.prototype.diff=function(ac,af,ab){ac=new aa(ac);if(ac===null){return null}var ad=A[af]||A.day;if(typeof ad=="number"){var ae=(this.proxy.getTime()-ac.proxy.getTime())/ad}else{var ae=ad.diff(this.proxy,ac.proxy)}return(ab?ae:Math[ae>0?"floor":"ceil"](ae))};aa.prototype.getAbbrDayName=function(){return aa.regional[this.locale]["dayNamesShort"][this.proxy.getDay()]};aa.prototype.getAbbrMonthName=function(){return aa.regional[this.locale]["monthNamesShort"][this.proxy.getMonth()]};aa.prototype.getAMPM=function(){return this.proxy.getHours()>=12?"PM":"AM"};aa.prototype.getAmPm=function(){return this.proxy.getHours()>=12?"pm":"am"};aa.prototype.getCentury=function(){return parseInt(this.proxy.getFullYear()/100,10)};aa.prototype.getDate=function(){return this.proxy.getDate()};aa.prototype.getDay=function(){return this.proxy.getDay()};aa.prototype.getDayOfWeek=function(){var ab=this.proxy.getDay();return ab===0?7:ab};aa.prototype.getDayOfYear=function(){var ac=this.proxy;var ab=ac-new Date(""+ac.getFullYear()+"/1/1 GMT");ab+=ac.getTimezoneOffset()*60000;ac=null;return parseInt(ab/60000/60/24,10)+1};aa.prototype.getDayName=function(){return aa.regional[this.locale]["dayNames"][this.proxy.getDay()]};aa.prototype.getFullWeekOfYear=function(){var ae=this.proxy;var ab=this.getDayOfYear();var ad=6-ae.getDay();var ac=parseInt((ab+ad)/7,10);return ac};aa.prototype.getFullYear=function(){return this.proxy.getFullYear()};aa.prototype.getGmtOffset=function(){var ab=this.proxy.getTimezoneOffset()/60;var ac=ab<0?"+":"-";ab=Math.abs(ab);return ac+J(Math.floor(ab),2)+":"+J((ab%1)*60,2)};aa.prototype.getHours=function(){return this.proxy.getHours()};aa.prototype.getHours12=function(){var ab=this.proxy.getHours();return ab>12?ab-12:(ab==0?12:ab)};aa.prototype.getIsoWeek=function(){var ae=this.proxy;var ad=ae.getWeekOfYear();var ab=(new Date(""+ae.getFullYear()+"/1/1")).getDay();var ac=ad+(ab>4||ab<=1?0:1);if(ac==53&&(new Date(""+ae.getFullYear()+"/12/31")).getDay()<4){ac=1}else{if(ac===0){ae=new aa(new Date(""+(ae.getFullYear()-1)+"/12/31"));ac=ae.getIsoWeek()}}ae=null;return ac};aa.prototype.getMilliseconds=function(){return this.proxy.getMilliseconds()};aa.prototype.getMinutes=function(){return this.proxy.getMinutes()};aa.prototype.getMonth=function(){return this.proxy.getMonth()};aa.prototype.getMonthName=function(){return aa.regional[this.locale]["monthNames"][this.proxy.getMonth()]};aa.prototype.getMonthNumber=function(){return this.proxy.getMonth()+1};aa.prototype.getSeconds=function(){return this.proxy.getSeconds()};aa.prototype.getShortYear=function(){return this.proxy.getYear()%100};aa.prototype.getTime=function(){return this.proxy.getTime()};aa.prototype.getTimezoneAbbr=function(){return this.proxy.toString().replace(/^.*\(([^)]+)\)$/,"$1")};aa.prototype.getTimezoneName=function(){var ab=/(?:\((.+)\)$| ([A-Z]{3}) )/.exec(this.toString());return ab[1]||ab[2]||"GMT"+this.getGmtOffset()};aa.prototype.getTimezoneOffset=function(){return this.proxy.getTimezoneOffset()};aa.prototype.getWeekOfYear=function(){var ab=this.getDayOfYear();var ad=7-this.getDayOfWeek();var ac=parseInt((ab+ad)/7,10);return ac};aa.prototype.getUnix=function(){return Math.round(this.proxy.getTime()/1000,0)};aa.prototype.getYear=function(){return this.proxy.getYear()};aa.prototype.next=function(ab){ab=ab||"day";return this.clone().add(1,ab)};aa.prototype.set=function(){switch(arguments.length){case 0:this.proxy=new Date();break;case 1:if(j(arguments[0])=="[object Object]"&&arguments[0]._type!="jsDate"){var ad=this.options=arguments[0];this.syntax=ad.syntax||this.syntax;this.defaultCentury=ad.defaultCentury||this.defaultCentury;this.proxy=aa.createDate(ad.date)}else{this.proxy=aa.createDate(arguments[0])}break;default:var ab=[];for(var ac=0;ac<arguments.length;ac++){ab.push(arguments[ac])}this.proxy=new Date();this.proxy.setFullYear.apply(this.proxy,ab.slice(0,3));if(ab.slice(3).length){this.proxy.setHours.apply(this.proxy,ab.slice(3))}break}return this};aa.prototype.setDate=function(ab){this.proxy.setDate(ab);return this};aa.prototype.setFullYear=function(){this.proxy.setFullYear.apply(this.proxy,arguments);return this};aa.prototype.setHours=function(){this.proxy.setHours.apply(this.proxy,arguments);return this};aa.prototype.setMilliseconds=function(ab){this.proxy.setMilliseconds(ab);return this};aa.prototype.setMinutes=function(){this.proxy.setMinutes.apply(this.proxy,arguments);return this};aa.prototype.setMonth=function(){this.proxy.setMonth.apply(this.proxy,arguments);return this};aa.prototype.setSeconds=function(){this.proxy.setSeconds.apply(this.proxy,arguments);return this};aa.prototype.setTime=function(ab){this.proxy.setTime(ab);return this};aa.prototype.setYear=function(){this.proxy.setYear.apply(this.proxy,arguments);return this};aa.prototype.strftime=function(ab){ab=ab||this.formatString||aa.regional[this.locale]["formatString"];return aa.strftime(this,ab,this.syntax)};aa.prototype.toString=function(){return this.proxy.toString()};aa.prototype.toYmdInt=function(){return(this.proxy.getFullYear()*10000)+(this.getMonthNumber()*100)+this.proxy.getDate()};aa.regional={en:{monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],formatString:"%Y-%m-%d %H:%M:%S"},fr:{monthNames:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthNamesShort:["Jan","Fév","Mar","Avr","Mai","Jun","Jul","Aoû","Sep","Oct","Nov","Déc"],dayNames:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],dayNamesShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],formatString:"%Y-%m-%d %H:%M:%S"},de:{monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],formatString:"%Y-%m-%d %H:%M:%S"},es:{monthNames:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthNamesShort:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],dayNames:["Domingo","Lunes","Martes","Mi&eacute;rcoles","Jueves","Viernes","S&aacute;bado"],dayNamesShort:["Dom","Lun","Mar","Mi&eacute;","Juv","Vie","S&aacute;b"],formatString:"%Y-%m-%d %H:%M:%S"},ru:{monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],formatString:"%Y-%m-%d %H:%M:%S"},ar:{monthNames:["كانون الثاني","شباط","آذار","نيسان","آذار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["السبت","الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة"],dayNamesShort:["سبت","أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة"],formatString:"%Y-%m-%d %H:%M:%S"},pt:{monthNames:["Janeiro","Fevereiro","Mar&ccedil;o","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Ter&ccedil;a-feira","Quarta-feira","Quinta-feira","Sexta-feira","S&aacute;bado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","S&aacute;b"],formatString:"%Y-%m-%d %H:%M:%S"},"pt-BR":{monthNames:["Janeiro","Fevereiro","Mar&ccedil;o","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Ter&ccedil;a-feira","Quarta-feira","Quinta-feira","Sexta-feira","S&aacute;bado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","S&aacute;b"],formatString:"%Y-%m-%d %H:%M:%S"}};aa.regional["en-US"]=aa.regional["en-GB"]=aa.regional.en;aa.regional.getLocale=function(){var ab=aa.config.defaultLocale;if(document&&document.getElementsByTagName("html")&&document.getElementsByTagName("html")[0].lang){ab=document.getElementsByTagName("html")[0].lang;if(!aa.regional.hasOwnProperty(ab)){ab=aa.config.defaultLocale}}return ab};var y=24*60*60*1000;var J=function(ab,ae){ab=String(ab);var ac=ae-ab.length;var ad=String(Math.pow(10,ac)).slice(1);return ad.concat(ab)};var A={millisecond:1,second:1000,minute:60*1000,hour:60*60*1000,day:y,week:7*y,month:{add:function(ad,ab){A.year.add(ad,Math[ab>0?"floor":"ceil"](ab/12));var ac=ad.getMonth()+(ab%12);if(ac==12){ac=0;ad.setYear(ad.getFullYear()+1)}else{if(ac==-1){ac=11;ad.setYear(ad.getFullYear()-1)}}ad.setMonth(ac)},diff:function(af,ad){var ab=af.getFullYear()-ad.getFullYear();var ac=af.getMonth()-ad.getMonth()+(ab*12);var ae=af.getDate()-ad.getDate();return ac+(ae/30)}},year:{add:function(ac,ab){ac.setYear(ac.getFullYear()+Math[ab>0?"floor":"ceil"](ab))},diff:function(ac,ab){return A.month.diff(ac,ab)/12}}};for(var T in A){if(T.substring(T.length-1)!="s"){A[T+"s"]=A[T]}}var D=function(af,ae,ac){if(aa.formats[ac]["shortcuts"][ae]){return aa.strftime(af,aa.formats[ac]["shortcuts"][ae],ac)}else{var ab=(aa.formats[ac]["codes"][ae]||"").split(".");var ad=af["get"+ab[0]]?af["get"+ab[0]]():"";if(ab[1]){ad=J(ad,ab[1])}return ad}};aa.strftime=function(ah,ae,ad,ai){var ac="perl";var ag=aa.regional.getLocale();if(ad&&aa.formats.hasOwnProperty(ad)){ac=ad}else{if(ad&&aa.regional.hasOwnProperty(ad)){ag=ad}}if(ai&&aa.formats.hasOwnProperty(ai)){ac=ai}else{if(ai&&aa.regional.hasOwnProperty(ai)){ag=ai}}if(j(ah)!="[object Object]"||ah._type!="jsDate"){ah=new aa(ah);ah.locale=ag}if(!ae){ae=ah.formatString||aa.regional[ag]["formatString"]}var ab=ae||"%Y-%m-%d",aj="",af;while(ab.length>0){if(af=ab.match(aa.formats[ac].codes.matcher)){aj+=ab.slice(0,af.index);aj+=(af[1]||"")+D(ah,af[2],ac);ab=ab.slice(af.index+af[0].length)}else{aj+=ab;ab=""}}return aj};aa.formats={ISO:"%Y-%m-%dT%H:%M:%S.%N%G",SQL:"%Y-%m-%d %H:%M:%S"};aa.formats.perl={codes:{matcher:/()%(#?(%|[a-z]))/i,Y:"FullYear",y:"ShortYear.2",m:"MonthNumber.2","#m":"MonthNumber",B:"MonthName",b:"AbbrMonthName",d:"Date.2","#d":"Date",e:"Date",A:"DayName",a:"AbbrDayName",w:"Day",H:"Hours.2","#H":"Hours",I:"Hours12.2","#I":"Hours12",p:"AMPM",M:"Minutes.2","#M":"Minutes",S:"Seconds.2","#S":"Seconds",s:"Unix",N:"Milliseconds.3","#N":"Milliseconds",O:"TimezoneOffset",Z:"TimezoneName",G:"GmtOffset"},shortcuts:{F:"%Y-%m-%d",T:"%H:%M:%S",X:"%H:%M:%S",x:"%m/%d/%y",D:"%m/%d/%y","#c":"%a %b %e %H:%M:%S %Y",v:"%e-%b-%Y",R:"%H:%M",r:"%I:%M:%S %p",t:"\t",n:"\n","%":"%"}};aa.formats.php={codes:{matcher:/()%((%|[a-z]))/i,a:"AbbrDayName",A:"DayName",d:"Date.2",e:"Date",j:"DayOfYear.3",u:"DayOfWeek",w:"Day",U:"FullWeekOfYear.2",V:"IsoWeek.2",W:"WeekOfYear.2",b:"AbbrMonthName",B:"MonthName",m:"MonthNumber.2",h:"AbbrMonthName",C:"Century.2",y:"ShortYear.2",Y:"FullYear",H:"Hours.2",I:"Hours12.2",l:"Hours12",p:"AMPM",P:"AmPm",M:"Minutes.2",S:"Seconds.2",s:"Unix",O:"TimezoneOffset",z:"GmtOffset",Z:"TimezoneAbbr"},shortcuts:{D:"%m/%d/%y",F:"%Y-%m-%d",T:"%H:%M:%S",X:"%H:%M:%S",x:"%m/%d/%y",R:"%H:%M",r:"%I:%M:%S %p",t:"\t",n:"\n","%":"%"}};aa.createDate=function(ad){if(ad==null){return new Date()}if(ad instanceof Date){return ad}if(typeof ad=="number"){return new Date(ad)}var ai=String(ad).replace(/^\s*(.+)\s*$/g,"$1");ai=ai.replace(/^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,4})/,"$1/$2/$3");ai=ai.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{4})/i,"$1 $2 $3");var ah=ai.match(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i);if(ah&&ah.length>3){var am=parseFloat(ah[3]);var ag=aa.config.defaultCentury+am;ag=String(ag);ai=ai.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i,ah[1]+" "+ah[2]+" "+ag)}ah=ai.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})[^0-9]/);function al(aq,ap){var aw=parseFloat(ap[1]);var av=parseFloat(ap[2]);var au=parseFloat(ap[3]);var at=aa.config.defaultCentury;var ao,an,ax,ar;if(aw>31){an=au;ax=av;ao=at+aw}else{an=av;ax=aw;ao=at+au}ar=ax+"/"+an+"/"+ao;return aq.replace(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})/,ar)}if(ah&&ah.length>3){ai=al(ai,ah)}var ah=ai.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})$/);if(ah&&ah.length>3){ai=al(ai,ah)}var af=0;var ac=aa.matchers.length;var ak,ab,aj=ai,ae;while(af<ac){ab=Date.parse(aj);if(!isNaN(ab)){return new Date(ab)}ak=aa.matchers[af];if(typeof ak=="function"){ae=ak.call(aa,aj);if(ae instanceof Date){return ae}}else{aj=ai.replace(ak[0],ak[1])}af++}return NaN};aa.daysInMonth=function(ab,ac){if(ac==2){return new Date(ab,1,29).getDate()==29?29:28}return[r,31,r,31,30,31,30,31,31,30,31,30,31][ac]};aa.matchers=[[/(3[01]|[0-2]\d)\s*\.\s*(1[0-2]|0\d)\s*\.\s*([1-9]\d{3})/,"$2/$1/$3"],[/([1-9]\d{3})\s*-\s*(1[0-2]|0\d)\s*-\s*(3[01]|[0-2]\d)/,"$2/$3/$1"],function(ae){var ac=ae.match(/^(?:(.+)\s+)?([012]?\d)(?:\s*\:\s*(\d\d))?(?:\s*\:\s*(\d\d(\.\d*)?))?\s*(am|pm)?\s*$/i);if(ac){if(ac[1]){var ad=this.createDate(ac[1]);if(isNaN(ad)){return}}else{var ad=new Date();ad.setMilliseconds(0)}var ab=parseFloat(ac[2]);if(ac[6]){ab=ac[6].toLowerCase()=="am"?(ab==12?0:ab):(ab==12?12:ab+12)}ad.setHours(ab,parseInt(ac[3]||0,10),parseInt(ac[4]||0,10),((parseFloat(ac[5]||0))||0)*1000);return ad}else{return ae}},function(ae){var ac=ae.match(/^(?:(.+))[T|\s+]([012]\d)(?:\:(\d\d))(?:\:(\d\d))(?:\.\d+)([\+\-]\d\d\:\d\d)$/i);if(ac){if(ac[1]){var ad=this.createDate(ac[1]);if(isNaN(ad)){return}}else{var ad=new Date();ad.setMilliseconds(0)}var ab=parseFloat(ac[2]);ad.setHours(ab,parseInt(ac[3],10),parseInt(ac[4],10),parseFloat(ac[5])*1000);return ad}else{return ae}},function(af){var ad=af.match(/^([0-3]?\d)\s*[-\/.\s]{1}\s*([a-zA-Z]{3,9})\s*[-\/.\s]{1}\s*([0-3]?\d)$/);if(ad){var ae=new Date();var ag=aa.config.defaultCentury;var ai=parseFloat(ad[1]);var ah=parseFloat(ad[3]);var ac,ab,aj;if(ai>31){ab=ah;ac=ag+ai}else{ab=ai;ac=ag+ah}var aj=W(ad[2],aa.regional[aa.regional.getLocale()]["monthNamesShort"]);if(aj==-1){aj=W(ad[2],aa.regional[aa.regional.getLocale()]["monthNames"])}ae.setFullYear(ac,aj,ab);ae.setHours(0,0,0,0);return ae}else{return af}}];function W(ad,ae){if(ae.indexOf){return ae.indexOf(ad)}for(var ab=0,ac=ae.length;ab<ac;ab++){if(ae[ab]===ad){return ab}}return -1}function j(ab){if(ab===null){return"[object Null]"}return Object.prototype.toString.call(ab)}H.jsDate=aa;H.jqplot.sprintf=function(){function ah(an,aj,ak,am){var al=(an.length>=aj)?"":Array(1+aj-an.length>>>0).join(ak);return am?an+al:al+an}function ae(al){var ak=new String(al);for(var aj=10;aj>0;aj--){if(ak==(ak=ak.replace(/^(\d+)(\d{3})/,"$1"+H.jqplot.sprintf.thousandsSeparator+"$2"))){break}}return ak}function ad(ao,an,aq,al,am,ak){var ap=al-ao.length;if(ap>0){var aj=" ";if(ak){aj="&nbsp;"}if(aq||!am){ao=ah(ao,al,aj,aq)}else{ao=ao.slice(0,an.length)+ah("",ap,"0",true)+ao.slice(an.length)}}return ao}function ai(ar,ak,ap,al,aj,ao,aq,an){var am=ar>>>0;ap=ap&&am&&{"2":"0b","8":"0","16":"0x"}[ak]||"";ar=ap+ah(am.toString(ak),ao||0,"0",false);return ad(ar,ap,al,aj,aq,an)}function ab(an,ao,al,aj,am,ak){if(aj!=null){an=an.slice(0,aj)}return ad(an,"",ao,al,am,ak)}var ac=arguments,af=0,ag=ac[af++];return ag.replace(H.jqplot.sprintf.regex,function(aG,aq,ar,av,aI,aD,ao){if(aG=="%%"){return"%"}var ax=false,at="",au=false,aF=false,ap=false,an=false;for(var aC=0;ar&&aC<ar.length;aC++){switch(ar.charAt(aC)){case" ":at=" ";break;case"+":at="+";break;case"-":ax=true;break;case"0":au=true;break;case"#":aF=true;break;case"&":ap=true;break;case"'":an=true;break}}if(!av){av=0}else{if(av=="*"){av=+ac[af++]}else{if(av.charAt(0)=="*"){av=+ac[av.slice(1,-1)]}else{av=+av}}}if(av<0){av=-av;ax=true}if(!isFinite(av)){throw new Error("$.jqplot.sprintf: (minimum-)width must be finite")}if(!aD){aD="fFeE".indexOf(ao)>-1?6:(ao=="d")?0:void (0)}else{if(aD=="*"){aD=+ac[af++]}else{if(aD.charAt(0)=="*"){aD=+ac[aD.slice(1,-1)]}else{aD=+aD}}}var az=aq?ac[aq.slice(0,-1)]:ac[af++];switch(ao){case"s":if(az==null){return""}return ab(String(az),ax,av,aD,au,ap);case"c":return ab(String.fromCharCode(+az),ax,av,aD,au,ap);case"b":return ai(az,2,aF,ax,av,aD,au,ap);case"o":return ai(az,8,aF,ax,av,aD,au,ap);case"x":return ai(az,16,aF,ax,av,aD,au,ap);case"X":return ai(az,16,aF,ax,av,aD,au,ap).toUpperCase();case"u":return ai(az,10,aF,ax,av,aD,au,ap);case"i":var al=parseInt(+az,10);if(isNaN(al)){return""}var aB=al<0?"-":at;var aE=an?ae(String(Math.abs(al))):String(Math.abs(al));az=aB+ah(aE,aD,"0",false);return ad(az,aB,ax,av,au,ap);case"d":var al=Math.round(+az);if(isNaN(al)){return""}var aB=al<0?"-":at;var aE=an?ae(String(Math.abs(al))):String(Math.abs(al));az=aB+ah(aE,aD,"0",false);return ad(az,aB,ax,av,au,ap);case"e":case"E":case"f":case"F":case"g":case"G":var al=+az;if(isNaN(al)){return""}var aB=al<0?"-":at;var am=["toExponential","toFixed","toPrecision"]["efg".indexOf(ao.toLowerCase())];var aH=["toString","toUpperCase"]["eEfFgG".indexOf(ao)%2];var aE=Math.abs(al)[am](aD);aE=an?ae(aE):aE;az=aB+aE;var aw=ad(az,aB,ax,av,au,ap)[aH]();if(H.jqplot.sprintf.decimalMark!=="."&&H.jqplot.sprintf.decimalMark!==H.jqplot.sprintf.thousandsSeparator){return aw.replace(/\./,H.jqplot.sprintf.decimalMark)}else{return aw}case"p":case"P":var al=+az;if(isNaN(al)){return""}var aB=al<0?"-":at;var ay=String(Number(Math.abs(al)).toExponential()).split(/e|E/);var ak=(ay[0].indexOf(".")!=-1)?ay[0].length-1:ay[0].length;var aA=(ay[1]<0)?-ay[1]-1:0;if(Math.abs(al)<1){if(ak+aA<=aD){az=aB+Math.abs(al).toPrecision(ak)}else{if(ak<=aD-1){az=aB+Math.abs(al).toExponential(ak-1)}else{az=aB+Math.abs(al).toExponential(aD-1)}}}else{var aj=(ak<=aD)?ak:aD;az=aB+Math.abs(al).toPrecision(aj)}var aH=["toString","toUpperCase"]["pP".indexOf(ao)%2];return ad(az,aB,ax,av,au,ap)[aH]();case"n":return"";default:return aG}})};H.jqplot.sprintf.thousandsSeparator=",";H.jqplot.sprintf.decimalMark=".";H.jqplot.sprintf.regex=/%%|%(\d+\$)?([-+#0&\' ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([nAscboxXuidfegpEGP])/g;H.jqplot.getSignificantFigures=function(af){var ah=String(Number(Math.abs(af)).toExponential()).split(/e|E/);var ag=(ah[0].indexOf(".")!=-1)?ah[0].length-1:ah[0].length;var ac=(ah[1]<0)?-ah[1]-1:0;var ab=parseInt(ah[1],10);var ad=(ab+1>0)?ab+1:0;var ae=(ag<=ad)?0:ag-ab-1;return{significantDigits:ag,digitsLeft:ad,digitsRight:ae,zeros:ac,exponent:ab}};H.jqplot.getPrecision=function(ab){return H.jqplot.getSignificantFigures(ab).digitsRight}})(jQuery);var backCompat=$.uiBackCompat!==false;$.jqplot.effects={effect:{}};var dataSpace="jqplot.storage.";$.extend($.jqplot.effects,{version:"1.9pre",save:function(b,c){for(var a=0;a<c.length;a++){if(c[a]!==null){b.data(dataSpace+c[a],b[0].style[c[a]])}}},restore:function(b,c){for(var a=0;a<c.length;a++){if(c[a]!==null){b.css(c[a],b.data(dataSpace+c[a]))}}},setMode:function(a,b){if(b==="toggle"){b=a.is(":hidden")?"show":"hide"}return b},createWrapper:function(b){if(b.parent().is(".ui-effects-wrapper")){return b.parent()}var c={width:b.outerWidth(true),height:b.outerHeight(true),"float":b.css("float")},e=$("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),a={width:b.width(),height:b.height()},d=document.activeElement;b.wrap(e);if(b[0]===d||$.contains(b[0],d)){$(d).focus()}e=b.parent();if(b.css("position")==="static"){e.css({position:"relative"});b.css({position:"relative"})}else{$.extend(c,{position:b.css("position"),zIndex:b.css("z-index")});$.each(["top","left","bottom","right"],function(f,g){c[g]=b.css(g);if(isNaN(parseInt(c[g],10))){c[g]="auto"}});b.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}b.css(a);return e.css(c).show()},removeWrapper:function(a){var b=document.activeElement;if(a.parent().is(".ui-effects-wrapper")){a.parent().replaceWith(a);if(a[0]===b||$.contains(a[0],b)){$(b).focus()}}return a}});function _normalizeArguments(b,a,c,d){if($.isPlainObject(b)){return b}b={effect:b};if(a===undefined){a={}}if($.isFunction(a)){d=a;c=null;a={}}if($.type(a)==="number"||$.fx.speeds[a]){d=c;c=a;a={}}if($.isFunction(c)){d=c;c=null}if(a){$.extend(b,a)}c=c||a.duration;b.duration=$.fx.off?0:typeof c==="number"?c:c in $.fx.speeds?$.fx.speeds[c]:$.fx.speeds._default;b.complete=d||a.complete;return b}function standardSpeed(a){if(!a||typeof a==="number"||$.fx.speeds[a]){return true}if(typeof a==="string"&&!$.jqplot.effects.effect[a]){if(backCompat&&$.jqplot.effects[a]){return false}return true}return false}$.fn.extend({jqplotEffect:function(i,j,b,h){var g=_normalizeArguments.apply(this,arguments),d=g.mode,e=g.queue,f=$.jqplot.effects.effect[g.effect],a=!f&&backCompat&&$.jqplot.effects[g.effect];if($.fx.off||!(f||a)){if(d){return this[d](g.duration,g.complete)}else{return this.each(function(){if(g.complete){g.complete.call(this)}})}}function c(m){var n=$(this),l=g.complete,o=g.mode;function k(){if($.isFunction(l)){l.call(n[0])}if($.isFunction(m)){m()}}if(n.is(":hidden")?o==="hide":o==="show"){k()}else{f.call(n[0],g,k)}}if(f){return e===false?this.each(c):this.queue(e||"fx",c)}else{return a.call(this,{options:g,duration:g.duration,callback:g.complete,mode:g.mode})}}});var rvertical=/up|down|vertical/,rpositivemotion=/up|left|vertical|horizontal/;$.jqplot.effects.effect.blind=function(c,h){var d=$(this),k=["position","top","bottom","left","right","height","width"],i=$.jqplot.effects.setMode(d,c.mode||"hide"),m=c.direction||"up",f=rvertical.test(m),e=f?"height":"width",j=f?"top":"left",p=rpositivemotion.test(m),g={},n=i==="show",b,a,l;if(d.parent().is(".ui-effects-wrapper")){$.jqplot.effects.save(d.parent(),k)}else{$.jqplot.effects.save(d,k)}d.show();l=parseInt(d.css("top"),10);b=$.jqplot.effects.createWrapper(d).css({overflow:"hidden"});a=f?b[e]()+l:b[e]();g[e]=n?String(a):"0";if(!p){d.css(f?"bottom":"right",0).css(f?"top":"left","").css({position:"absolute"});g[j]=n?"0":String(a)}if(n){b.css(e,0);if(!p){b.css(j,a)}}b.animate(g,{duration:c.duration,easing:c.easing,queue:false,complete:function(){if(i==="hide"){d.hide()}$.jqplot.effects.restore(d,k);$.jqplot.effects.removeWrapper(d);h()}})}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.js b/wqflask/wqflask/static/packages/jqplot/jquery.js
new file mode 100644
index 00000000..11e6d067
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/jquery.js
@@ -0,0 +1,9046 @@
+/*!
+ * jQuery JavaScript Library v1.6.4
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon Sep 12 18:54:48 2011 -0400
+ */
+(function( window, undefined ) {
+
+// Use the correct document accordingly with window argument (sandbox)
+var document = window.document,
+ navigator = window.navigator,
+ location = window.location;
+var jQuery = (function() {
+
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ return new jQuery.fn.init( selector, context, rootjQuery );
+ },
+
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+
+ // Map over the $ in case of overwrite
+ _$ = window.$,
+
+ // A central reference to the root jQuery(document)
+ rootjQuery,
+
+ // A simple way to check for HTML strings or ID strings
+ // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+ quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+
+ // Check if a string has a non-whitespace character in it
+ rnotwhite = /\S/,
+
+ // Used for trimming whitespace
+ trimLeft = /^\s+/,
+ trimRight = /\s+$/,
+
+ // Check for digits
+ rdigit = /\d/,
+
+ // Match a standalone tag
+ rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+ // JSON RegExp
+ rvalidchars = /^[\],:{}\s]*$/,
+ rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+ rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+ rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+
+ // Useragent RegExp
+ rwebkit = /(webkit)[ \/]([\w.]+)/,
+ ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+ rmsie = /(msie) ([\w.]+)/,
+ rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+
+ // Matches dashed string for camelizing
+ rdashAlpha = /-([a-z]|[0-9])/ig,
+ rmsPrefix = /^-ms-/,
+
+ // Used by jQuery.camelCase as callback to replace()
+ fcamelCase = function( all, letter ) {
+ return ( letter + "" ).toUpperCase();
+ },
+
+ // Keep a UserAgent string for use with jQuery.browser
+ userAgent = navigator.userAgent,
+
+ // For matching the engine and version of the browser
+ browserMatch,
+
+ // The deferred used on DOM ready
+ readyList,
+
+ // The ready event handler
+ DOMContentLoaded,
+
+ // Save a reference to some core methods
+ toString = Object.prototype.toString,
+ hasOwn = Object.prototype.hasOwnProperty,
+ push = Array.prototype.push,
+ slice = Array.prototype.slice,
+ trim = String.prototype.trim,
+ indexOf = Array.prototype.indexOf,
+
+ // [[Class]] -> type pairs
+ class2type = {};
+
+jQuery.fn = jQuery.prototype = {
+ constructor: jQuery,
+ init: function( selector, context, rootjQuery ) {
+ var match, elem, ret, doc;
+
+ // Handle $(""), $(null), or $(undefined)
+ if ( !selector ) {
+ return this;
+ }
+
+ // Handle $(DOMElement)
+ if ( selector.nodeType ) {
+ this.context = this[0] = selector;
+ this.length = 1;
+ return this;
+ }
+
+ // The body element only exists once, optimize finding it
+ if ( selector === "body" && !context && document.body ) {
+ this.context = document;
+ this[0] = document.body;
+ this.selector = selector;
+ this.length = 1;
+ return this;
+ }
+
+ // Handle HTML strings
+ if ( typeof selector === "string" ) {
+ // Are we dealing with HTML string or an ID?
+ if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [ null, selector, null ];
+
+ } else {
+ match = quickExpr.exec( selector );
+ }
+
+ // Verify a match, and that no context was specified for #id
+ if ( match && (match[1] || !context) ) {
+
+ // HANDLE: $(html) -> $(array)
+ if ( match[1] ) {
+ context = context instanceof jQuery ? context[0] : context;
+ doc = (context ? context.ownerDocument || context : document);
+
+ // If a single string is passed in and it's a single tag
+ // just do a createElement and skip the rest
+ ret = rsingleTag.exec( selector );
+
+ if ( ret ) {
+ if ( jQuery.isPlainObject( context ) ) {
+ selector = [ document.createElement( ret[1] ) ];
+ jQuery.fn.attr.call( selector, context, true );
+
+ } else {
+ selector = [ doc.createElement( ret[1] ) ];
+ }
+
+ } else {
+ ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
+ selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
+ }
+
+ return jQuery.merge( this, selector );
+
+ // HANDLE: $("#id")
+ } else {
+ elem = document.getElementById( match[2] );
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id !== match[2] ) {
+ return rootjQuery.find( selector );
+ }
+
+ // Otherwise, we inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return (context || rootjQuery).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor( context ).find( selector );
+ }
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) ) {
+ return rootjQuery.ready( selector );
+ }
+
+ if (selector.selector !== undefined) {
+ this.selector = selector.selector;
+ this.context = selector.context;
+ }
+
+ return jQuery.makeArray( selector, this );
+ },
+
+ // Start with an empty selector
+ selector: "",
+
+ // The current version of jQuery being used
+ jquery: "1.6.4",
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ // The number of elements contained in the matched element set
+ size: function() {
+ return this.length;
+ },
+
+ toArray: function() {
+ return slice.call( this, 0 );
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+ return num == null ?
+
+ // Return a 'clean' array
+ this.toArray() :
+
+ // Return just the object
+ ( num < 0 ? this[ this.length + num ] : this[ num ] );
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems, name, selector ) {
+ // Build a new jQuery matched element set
+ var ret = this.constructor();
+
+ if ( jQuery.isArray( elems ) ) {
+ push.apply( ret, elems );
+
+ } else {
+ jQuery.merge( ret, elems );
+ }
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+
+ ret.context = this.context;
+
+ if ( name === "find" ) {
+ ret.selector = this.selector + (this.selector ? " " : "") + selector;
+ } else if ( name ) {
+ ret.selector = this.selector + "." + name + "(" + selector + ")";
+ }
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function( callback, args ) {
+ return jQuery.each( this, callback, args );
+ },
+
+ ready: function( fn ) {
+ // Attach the listeners
+ jQuery.bindReady();
+
+ // Add the callback
+ readyList.done( fn );
+
+ return this;
+ },
+
+ eq: function( i ) {
+ return i === -1 ?
+ this.slice( i ) :
+ this.slice( i, +i + 1 );
+ },
+
+ first: function() {
+ return this.eq( 0 );
+ },
+
+ last: function() {
+ return this.eq( -1 );
+ },
+
+ slice: function() {
+ return this.pushStack( slice.apply( this, arguments ),
+ "slice", slice.call(arguments).join(",") );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map(this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ }));
+ },
+
+ end: function() {
+ return this.prevObject || this.constructor(null);
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: push,
+ sort: [].sort,
+ splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[0] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+ target = {};
+ }
+
+ // extend jQuery itself if only one argument is passed
+ if ( length === i ) {
+ target = this;
+ --i;
+ }
+
+ for ( ; i < length; i++ ) {
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null ) {
+ // Extend the base object
+ for ( name in options ) {
+ src = target[ name ];
+ copy = options[ name ];
+
+ // Prevent never-ending loop
+ if ( target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+ if ( copyIsArray ) {
+ copyIsArray = false;
+ clone = src && jQuery.isArray(src) ? src : [];
+
+ } else {
+ clone = src && jQuery.isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend({
+ noConflict: function( deep ) {
+ if ( window.$ === jQuery ) {
+ window.$ = _$;
+ }
+
+ if ( deep && window.jQuery === jQuery ) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
+ },
+
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Hold (or release) the ready event
+ holdReady: function( hold ) {
+ if ( hold ) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready( true );
+ }
+ },
+
+ // Handle when the DOM is ready
+ ready: function( wait ) {
+ // Either a released hold or an DOMready/load event and not yet ready
+ if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( !document.body ) {
+ return setTimeout( jQuery.ready, 1 );
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if ( wait !== true && --jQuery.readyWait > 0 ) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ readyList.resolveWith( document, [ jQuery ] );
+
+ // Trigger any bound ready events
+ if ( jQuery.fn.trigger ) {
+ jQuery( document ).trigger( "ready" ).unbind( "ready" );
+ }
+ }
+ },
+
+ bindReady: function() {
+ if ( readyList ) {
+ return;
+ }
+
+ readyList = jQuery._Deferred();
+
+ // Catch cases where $(document).ready() is called after the
+ // browser event has already occurred.
+ if ( document.readyState === "complete" ) {
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ return setTimeout( jQuery.ready, 1 );
+ }
+
+ // Mozilla, Opera and webkit nightlies currently support this event
+ if ( document.addEventListener ) {
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", jQuery.ready, false );
+
+ // If IE event model is used
+ } else if ( document.attachEvent ) {
+ // ensure firing before onload,
+ // maybe late but safe also for iframes
+ document.attachEvent( "onreadystatechange", DOMContentLoaded );
+
+ // A fallback to window.onload, that will always work
+ window.attachEvent( "onload", jQuery.ready );
+
+ // If IE and not a frame
+ // continually check to see if the document is ready
+ var toplevel = false;
+
+ try {
+ toplevel = window.frameElement == null;
+ } catch(e) {}
+
+ if ( document.documentElement.doScroll && toplevel ) {
+ doScrollCheck();
+ }
+ }
+ },
+
+ // See test/unit/core.js for details concerning isFunction.
+ // Since version 1.3, DOM methods and functions like alert
+ // aren't supported. They return false on IE (#2968).
+ isFunction: function( obj ) {
+ return jQuery.type(obj) === "function";
+ },
+
+ isArray: Array.isArray || function( obj ) {
+ return jQuery.type(obj) === "array";
+ },
+
+ // A crude way of determining if an object is a window
+ isWindow: function( obj ) {
+ return obj && typeof obj === "object" && "setInterval" in obj;
+ },
+
+ isNaN: function( obj ) {
+ return obj == null || !rdigit.test( obj ) || isNaN( obj );
+ },
+
+ type: function( obj ) {
+ return obj == null ?
+ String( obj ) :
+ class2type[ toString.call(obj) ] || "object";
+ },
+
+ isPlainObject: function( obj ) {
+ // Must be an Object.
+ // Because of IE, we also have to check the presence of the constructor property.
+ // Make sure that DOM nodes and window objects don't pass through, as well
+ if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ try {
+ // Not own constructor property must be Object
+ if ( obj.constructor &&
+ !hasOwn.call(obj, "constructor") &&
+ !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+ return false;
+ }
+ } catch ( e ) {
+ // IE8,9 Will throw exceptions on certain host objects #9897
+ return false;
+ }
+
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
+
+ var key;
+ for ( key in obj ) {}
+
+ return key === undefined || hasOwn.call( obj, key );
+ },
+
+ isEmptyObject: function( obj ) {
+ for ( var name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ error: function( msg ) {
+ throw msg;
+ },
+
+ parseJSON: function( data ) {
+ if ( typeof data !== "string" || !data ) {
+ return null;
+ }
+
+ // Make sure leading/trailing whitespace is removed (IE can't handle it)
+ data = jQuery.trim( data );
+
+ // Attempt to parse using the native JSON parser first
+ if ( window.JSON && window.JSON.parse ) {
+ return window.JSON.parse( data );
+ }
+
+ // Make sure the incoming data is actual JSON
+ // Logic borrowed from http://json.org/json2.js
+ if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+ .replace( rvalidtokens, "]" )
+ .replace( rvalidbraces, "")) ) {
+
+ return (new Function( "return " + data ))();
+
+ }
+ jQuery.error( "Invalid JSON: " + data );
+ },
+
+ // Cross-browser xml parsing
+ parseXML: function( data ) {
+ var xml, tmp;
+ try {
+ if ( window.DOMParser ) { // Standard
+ tmp = new DOMParser();
+ xml = tmp.parseFromString( data , "text/xml" );
+ } else { // IE
+ xml = new ActiveXObject( "Microsoft.XMLDOM" );
+ xml.async = "false";
+ xml.loadXML( data );
+ }
+ } catch( e ) {
+ xml = undefined;
+ }
+ if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+ jQuery.error( "Invalid XML: " + data );
+ }
+ return xml;
+ },
+
+ noop: function() {},
+
+ // Evaluates a script in a global context
+ // Workarounds based on findings by Jim Driscoll
+ // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+ globalEval: function( data ) {
+ if ( data && rnotwhite.test( data ) ) {
+ // We use execScript on Internet Explorer
+ // We use an anonymous function so that context is window
+ // rather than jQuery in Firefox
+ ( window.execScript || function( data ) {
+ window[ "eval" ].call( window, data );
+ } )( data );
+ }
+ },
+
+ // Convert dashed to camelCase; used by the css and data modules
+ // Microsoft forgot to hump their vendor prefix (#9572)
+ camelCase: function( string ) {
+ return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+ },
+
+ nodeName: function( elem, name ) {
+ return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+ },
+
+ // args is for internal usage only
+ each: function( object, callback, args ) {
+ var name, i = 0,
+ length = object.length,
+ isObj = length === undefined || jQuery.isFunction( object );
+
+ if ( args ) {
+ if ( isObj ) {
+ for ( name in object ) {
+ if ( callback.apply( object[ name ], args ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( ; i < length; ) {
+ if ( callback.apply( object[ i++ ], args ) === false ) {
+ break;
+ }
+ }
+ }
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if ( isObj ) {
+ for ( name in object ) {
+ if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( ; i < length; ) {
+ if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
+ break;
+ }
+ }
+ }
+ }
+
+ return object;
+ },
+
+ // Use native String.trim function wherever possible
+ trim: trim ?
+ function( text ) {
+ return text == null ?
+ "" :
+ trim.call( text );
+ } :
+
+ // Otherwise use our own trimming functionality
+ function( text ) {
+ return text == null ?
+ "" :
+ text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+ },
+
+ // results is for internal usage only
+ makeArray: function( array, results ) {
+ var ret = results || [];
+
+ if ( array != null ) {
+ // The window, strings (and functions) also have 'length'
+ // The extra typeof function check is to prevent crashes
+ // in Safari 2 (See: #3039)
+ // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+ var type = jQuery.type( array );
+
+ if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
+ push.call( ret, array );
+ } else {
+ jQuery.merge( ret, array );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, array ) {
+ if ( !array ) {
+ return -1;
+ }
+
+ if ( indexOf ) {
+ return indexOf.call( array, elem );
+ }
+
+ for ( var i = 0, length = array.length; i < length; i++ ) {
+ if ( array[ i ] === elem ) {
+ return i;
+ }
+ }
+
+ return -1;
+ },
+
+ merge: function( first, second ) {
+ var i = first.length,
+ j = 0;
+
+ if ( typeof second.length === "number" ) {
+ for ( var l = second.length; j < l; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+
+ } else {
+ while ( second[j] !== undefined ) {
+ first[ i++ ] = second[ j++ ];
+ }
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function( elems, callback, inv ) {
+ var ret = [], retVal;
+ inv = !!inv;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( var i = 0, length = elems.length; i < length; i++ ) {
+ retVal = !!callback( elems[ i ], i );
+ if ( inv !== retVal ) {
+ ret.push( elems[ i ] );
+ }
+ }
+
+ return ret;
+ },
+
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var value, key, ret = [],
+ i = 0,
+ length = elems.length,
+ // jquery objects are treated as arrays
+ isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+
+ // Go through the array, translating each of the items to their
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for ( key in elems ) {
+ value = callback( elems[ key ], key, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return ret.concat.apply( [], ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // Bind a function to a context, optionally partially applying any
+ // arguments.
+ proxy: function( fn, context ) {
+ if ( typeof context === "string" ) {
+ var tmp = fn[ context ];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if ( !jQuery.isFunction( fn ) ) {
+ return undefined;
+ }
+
+ // Simulated bind
+ var args = slice.call( arguments, 2 ),
+ proxy = function() {
+ return fn.apply( context, args.concat( slice.call( arguments ) ) );
+ };
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+
+ return proxy;
+ },
+
+ // Mutifunctional method to get and set values to a collection
+ // The value/s can optionally be executed if it's a function
+ access: function( elems, key, value, exec, fn, pass ) {
+ var length = elems.length;
+
+ // Setting many attributes
+ if ( typeof key === "object" ) {
+ for ( var k in key ) {
+ jQuery.access( elems, k, key[k], exec, fn, value );
+ }
+ return elems;
+ }
+
+ // Setting one attribute
+ if ( value !== undefined ) {
+ // Optionally, function values get executed if exec is true
+ exec = !pass && exec && jQuery.isFunction(value);
+
+ for ( var i = 0; i < length; i++ ) {
+ fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+ }
+
+ return elems;
+ }
+
+ // Getting an attribute
+ return length ? fn( elems[0], key ) : undefined;
+ },
+
+ now: function() {
+ return (new Date()).getTime();
+ },
+
+ // Use of jQuery.browser is frowned upon.
+ // More details: http://docs.jquery.com/Utilities/jQuery.browser
+ uaMatch: function( ua ) {
+ ua = ua.toLowerCase();
+
+ var match = rwebkit.exec( ua ) ||
+ ropera.exec( ua ) ||
+ rmsie.exec( ua ) ||
+ ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+ [];
+
+ return { browser: match[1] || "", version: match[2] || "0" };
+ },
+
+ sub: function() {
+ function jQuerySub( selector, context ) {
+ return new jQuerySub.fn.init( selector, context );
+ }
+ jQuery.extend( true, jQuerySub, this );
+ jQuerySub.superclass = this;
+ jQuerySub.fn = jQuerySub.prototype = this();
+ jQuerySub.fn.constructor = jQuerySub;
+ jQuerySub.sub = this.sub;
+ jQuerySub.fn.init = function init( selector, context ) {
+ if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+ context = jQuerySub( context );
+ }
+
+ return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+ };
+ jQuerySub.fn.init.prototype = jQuerySub.fn;
+ var rootjQuerySub = jQuerySub(document);
+ return jQuerySub;
+ },
+
+ browser: {}
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+browserMatch = jQuery.uaMatch( userAgent );
+if ( browserMatch.browser ) {
+ jQuery.browser[ browserMatch.browser ] = true;
+ jQuery.browser.version = browserMatch.version;
+}
+
+// Deprecated, use jQuery.browser.webkit instead
+if ( jQuery.browser.webkit ) {
+ jQuery.browser.safari = true;
+}
+
+// IE doesn't match non-breaking spaces with \s
+if ( rnotwhite.test( "\xA0" ) ) {
+ trimLeft = /^[\s\xA0]+/;
+ trimRight = /[\s\xA0]+$/;
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+ DOMContentLoaded = function() {
+ document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+ jQuery.ready();
+ };
+
+} else if ( document.attachEvent ) {
+ DOMContentLoaded = function() {
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( document.readyState === "complete" ) {
+ document.detachEvent( "onreadystatechange", DOMContentLoaded );
+ jQuery.ready();
+ }
+ };
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+ if ( jQuery.isReady ) {
+ return;
+ }
+
+ try {
+ // If IE is used, use the trick by Diego Perini
+ // http://javascript.nwbox.com/IEContentLoaded/
+ document.documentElement.doScroll("left");
+ } catch(e) {
+ setTimeout( doScrollCheck, 1 );
+ return;
+ }
+
+ // and execute any waiting functions
+ jQuery.ready();
+}
+
+return jQuery;
+
+})();
+
+
+var // Promise methods
+ promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ),
+ // Static reference to slice
+ sliceDeferred = [].slice;
+
+jQuery.extend({
+ // Create a simple deferred (one callbacks list)
+ _Deferred: function() {
+ var // callbacks list
+ callbacks = [],
+ // stored [ context , args ]
+ fired,
+ // to avoid firing when already doing so
+ firing,
+ // flag to know if the deferred has been cancelled
+ cancelled,
+ // the deferred itself
+ deferred = {
+
+ // done( f1, f2, ...)
+ done: function() {
+ if ( !cancelled ) {
+ var args = arguments,
+ i,
+ length,
+ elem,
+ type,
+ _fired;
+ if ( fired ) {
+ _fired = fired;
+ fired = 0;
+ }
+ for ( i = 0, length = args.length; i < length; i++ ) {
+ elem = args[ i ];
+ type = jQuery.type( elem );
+ if ( type === "array" ) {
+ deferred.done.apply( deferred, elem );
+ } else if ( type === "function" ) {
+ callbacks.push( elem );
+ }
+ }
+ if ( _fired ) {
+ deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
+ }
+ }
+ return this;
+ },
+
+ // resolve with given context and args
+ resolveWith: function( context, args ) {
+ if ( !cancelled && !fired && !firing ) {
+ // make sure args are available (#8421)
+ args = args || [];
+ firing = 1;
+ try {
+ while( callbacks[ 0 ] ) {
+ callbacks.shift().apply( context, args );
+ }
+ }
+ finally {
+ fired = [ context, args ];
+ firing = 0;
+ }
+ }
+ return this;
+ },
+
+ // resolve with this as context and given arguments
+ resolve: function() {
+ deferred.resolveWith( this, arguments );
+ return this;
+ },
+
+ // Has this deferred been resolved?
+ isResolved: function() {
+ return !!( firing || fired );
+ },
+
+ // Cancel
+ cancel: function() {
+ cancelled = 1;
+ callbacks = [];
+ return this;
+ }
+ };
+
+ return deferred;
+ },
+
+ // Full fledged deferred (two callbacks list)
+ Deferred: function( func ) {
+ var deferred = jQuery._Deferred(),
+ failDeferred = jQuery._Deferred(),
+ promise;
+ // Add errorDeferred methods, then and promise
+ jQuery.extend( deferred, {
+ then: function( doneCallbacks, failCallbacks ) {
+ deferred.done( doneCallbacks ).fail( failCallbacks );
+ return this;
+ },
+ always: function() {
+ return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );
+ },
+ fail: failDeferred.done,
+ rejectWith: failDeferred.resolveWith,
+ reject: failDeferred.resolve,
+ isRejected: failDeferred.isResolved,
+ pipe: function( fnDone, fnFail ) {
+ return jQuery.Deferred(function( newDefer ) {
+ jQuery.each( {
+ done: [ fnDone, "resolve" ],
+ fail: [ fnFail, "reject" ]
+ }, function( handler, data ) {
+ var fn = data[ 0 ],
+ action = data[ 1 ],
+ returned;
+ if ( jQuery.isFunction( fn ) ) {
+ deferred[ handler ](function() {
+ returned = fn.apply( this, arguments );
+ if ( returned && jQuery.isFunction( returned.promise ) ) {
+ returned.promise().then( newDefer.resolve, newDefer.reject );
+ } else {
+ newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
+ }
+ });
+ } else {
+ deferred[ handler ]( newDefer[ action ] );
+ }
+ });
+ }).promise();
+ },
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function( obj ) {
+ if ( obj == null ) {
+ if ( promise ) {
+ return promise;
+ }
+ promise = obj = {};
+ }
+ var i = promiseMethods.length;
+ while( i-- ) {
+ obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
+ }
+ return obj;
+ }
+ });
+ // Make sure only one callback list will be used
+ deferred.done( failDeferred.cancel ).fail( deferred.cancel );
+ // Unexpose cancel
+ delete deferred.cancel;
+ // Call given func if any
+ if ( func ) {
+ func.call( deferred, deferred );
+ }
+ return deferred;
+ },
+
+ // Deferred helper
+ when: function( firstParam ) {
+ var args = arguments,
+ i = 0,
+ length = args.length,
+ count = length,
+ deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
+ firstParam :
+ jQuery.Deferred();
+ function resolveFunc( i ) {
+ return function( value ) {
+ args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+ if ( !( --count ) ) {
+ // Strange bug in FF4:
+ // Values changed onto the arguments object sometimes end up as undefined values
+ // outside the $.when method. Cloning the object into a fresh array solves the issue
+ deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );
+ }
+ };
+ }
+ if ( length > 1 ) {
+ for( ; i < length; i++ ) {
+ if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {
+ args[ i ].promise().then( resolveFunc(i), deferred.reject );
+ } else {
+ --count;
+ }
+ }
+ if ( !count ) {
+ deferred.resolveWith( deferred, args );
+ }
+ } else if ( deferred !== firstParam ) {
+ deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
+ }
+ return deferred.promise();
+ }
+});
+
+
+
+jQuery.support = (function() {
+
+ var div = document.createElement( "div" ),
+ documentElement = document.documentElement,
+ all,
+ a,
+ select,
+ opt,
+ input,
+ marginDiv,
+ support,
+ fragment,
+ body,
+ testElementParent,
+ testElement,
+ testElementStyle,
+ tds,
+ events,
+ eventName,
+ i,
+ isSupported;
+
+ // Preliminary tests
+ div.setAttribute("className", "t");
+ div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+
+
+ all = div.getElementsByTagName( "*" );
+ a = div.getElementsByTagName( "a" )[ 0 ];
+
+ // Can't get basic test support
+ if ( !all || !all.length || !a ) {
+ return {};
+ }
+
+ // First batch of supports tests
+ select = document.createElement( "select" );
+ opt = select.appendChild( document.createElement("option") );
+ input = div.getElementsByTagName( "input" )[ 0 ];
+
+ support = {
+ // IE strips leading whitespace when .innerHTML is used
+ leadingWhitespace: ( div.firstChild.nodeType === 3 ),
+
+ // Make sure that tbody elements aren't automatically inserted
+ // IE will insert them into empty tables
+ tbody: !div.getElementsByTagName( "tbody" ).length,
+
+ // Make sure that link elements get serialized correctly by innerHTML
+ // This requires a wrapper element in IE
+ htmlSerialize: !!div.getElementsByTagName( "link" ).length,
+
+ // Get the style information from getAttribute
+ // (IE uses .cssText instead)
+ style: /top/.test( a.getAttribute("style") ),
+
+ // Make sure that URLs aren't manipulated
+ // (IE normalizes it by default)
+ hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
+
+ // Make sure that element opacity exists
+ // (IE uses filter instead)
+ // Use a regex to work around a WebKit issue. See #5145
+ opacity: /^0.55$/.test( a.style.opacity ),
+
+ // Verify style float existence
+ // (IE uses styleFloat instead of cssFloat)
+ cssFloat: !!a.style.cssFloat,
+
+ // Make sure that if no value is specified for a checkbox
+ // that it defaults to "on".
+ // (WebKit defaults to "" instead)
+ checkOn: ( input.value === "on" ),
+
+ // Make sure that a selected-by-default option has a working selected property.
+ // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+ optSelected: opt.selected,
+
+ // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+ getSetAttribute: div.className !== "t",
+
+ // Will be defined later
+ submitBubbles: true,
+ changeBubbles: true,
+ focusinBubbles: false,
+ deleteExpando: true,
+ noCloneEvent: true,
+ inlineBlockNeedsLayout: false,
+ shrinkWrapBlocks: false,
+ reliableMarginRight: true
+ };
+
+ // Make sure checked status is properly cloned
+ input.checked = true;
+ support.noCloneChecked = input.cloneNode( true ).checked;
+
+ // Make sure that the options inside disabled selects aren't marked as disabled
+ // (WebKit marks them as disabled)
+ select.disabled = true;
+ support.optDisabled = !opt.disabled;
+
+ // Test to see if it's possible to delete an expando from an element
+ // Fails in Internet Explorer
+ try {
+ delete div.test;
+ } catch( e ) {
+ support.deleteExpando = false;
+ }
+
+ if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+ div.attachEvent( "onclick", function() {
+ // Cloning a node shouldn't copy over any
+ // bound event handlers (IE does this)
+ support.noCloneEvent = false;
+ });
+ div.cloneNode( true ).fireEvent( "onclick" );
+ }
+
+ // Check if a radio maintains it's value
+ // after being appended to the DOM
+ input = document.createElement("input");
+ input.value = "t";
+ input.setAttribute("type", "radio");
+ support.radioValue = input.value === "t";
+
+ input.setAttribute("checked", "checked");
+ div.appendChild( input );
+ fragment = document.createDocumentFragment();
+ fragment.appendChild( div.firstChild );
+
+ // WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ div.innerHTML = "";
+
+ // Figure out if the W3C box model works as expected
+ div.style.width = div.style.paddingLeft = "1px";
+
+ body = document.getElementsByTagName( "body" )[ 0 ];
+ // We use our own, invisible, body unless the body is already present
+ // in which case we use a div (#9239)
+ testElement = document.createElement( body ? "div" : "body" );
+ testElementStyle = {
+ visibility: "hidden",
+ width: 0,
+ height: 0,
+ border: 0,
+ margin: 0,
+ background: "none"
+ };
+ if ( body ) {
+ jQuery.extend( testElementStyle, {
+ position: "absolute",
+ left: "-1000px",
+ top: "-1000px"
+ });
+ }
+ for ( i in testElementStyle ) {
+ testElement.style[ i ] = testElementStyle[ i ];
+ }
+ testElement.appendChild( div );
+ testElementParent = body || documentElement;
+ testElementParent.insertBefore( testElement, testElementParent.firstChild );
+
+ // Check if a disconnected checkbox will retain its checked
+ // value of true after appended to the DOM (IE6/7)
+ support.appendChecked = input.checked;
+
+ support.boxModel = div.offsetWidth === 2;
+
+ if ( "zoom" in div.style ) {
+ // Check if natively block-level elements act like inline-block
+ // elements when setting their display to 'inline' and giving
+ // them layout
+ // (IE < 8 does this)
+ div.style.display = "inline";
+ div.style.zoom = 1;
+ support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
+
+ // Check if elements with layout shrink-wrap their children
+ // (IE 6 does this)
+ div.style.display = "";
+ div.innerHTML = "<div style='width:4px;'></div>";
+ support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
+ }
+
+ div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
+ tds = div.getElementsByTagName( "td" );
+
+ // Check if table cells still have offsetWidth/Height when they are set
+ // to display:none and there are still other visible table cells in a
+ // table row; if so, offsetWidth/Height are not reliable for use when
+ // determining if an element has been hidden directly using
+ // display:none (it is still safe to use offsets if a parent element is
+ // hidden; don safety goggles and see bug #4512 for more information).
+ // (only IE 8 fails this test)
+ isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+ tds[ 0 ].style.display = "";
+ tds[ 1 ].style.display = "none";
+
+ // Check if empty table cells still have offsetWidth/Height
+ // (IE < 8 fail this test)
+ support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+ div.innerHTML = "";
+
+ // Check if div with explicit width and no margin-right incorrectly
+ // gets computed margin-right based on width of container. For more
+ // info see bug #3333
+ // Fails in WebKit before Feb 2011 nightlies
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ if ( document.defaultView && document.defaultView.getComputedStyle ) {
+ marginDiv = document.createElement( "div" );
+ marginDiv.style.width = "0";
+ marginDiv.style.marginRight = "0";
+ div.appendChild( marginDiv );
+ support.reliableMarginRight =
+ ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
+ }
+
+ // Remove the body element we added
+ testElement.innerHTML = "";
+ testElementParent.removeChild( testElement );
+
+ // Technique from Juriy Zaytsev
+ // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
+ // We only care about the case where non-standard event systems
+ // are used, namely in IE. Short-circuiting here helps us to
+ // avoid an eval call (in setAttribute) which can cause CSP
+ // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+ if ( div.attachEvent ) {
+ for( i in {
+ submit: 1,
+ change: 1,
+ focusin: 1
+ } ) {
+ eventName = "on" + i;
+ isSupported = ( eventName in div );
+ if ( !isSupported ) {
+ div.setAttribute( eventName, "return;" );
+ isSupported = ( typeof div[ eventName ] === "function" );
+ }
+ support[ i + "Bubbles" ] = isSupported;
+ }
+ }
+
+ // Null connected elements to avoid leaks in IE
+ testElement = fragment = select = opt = body = marginDiv = div = input = null;
+
+ return support;
+})();
+
+// Keep track of boxModel
+jQuery.boxModel = jQuery.support.boxModel;
+
+
+
+
+var rbrace = /^(?:\{.*\}|\[.*\])$/,
+ rmultiDash = /([A-Z])/g;
+
+jQuery.extend({
+ cache: {},
+
+ // Please use with caution
+ uuid: 0,
+
+ // Unique for each copy of jQuery on the page
+ // Non-digits removed to match rinlinejQuery
+ expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+
+ // The following elements throw uncatchable exceptions if you
+ // attempt to add expando properties to them.
+ noData: {
+ "embed": true,
+ // Ban all objects except for Flash (which handle expandos)
+ "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+ "applet": true
+ },
+
+ hasData: function( elem ) {
+ elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+
+ return !!elem && !isEmptyDataObject( elem );
+ },
+
+ data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ var thisCache, ret,
+ internalKey = jQuery.expando,
+ getByName = typeof name === "string",
+
+ // We have to handle DOM nodes and JS objects differently because IE6-7
+ // can't GC object references properly across the DOM-JS boundary
+ isNode = elem.nodeType,
+
+ // Only DOM nodes need the global jQuery cache; JS object data is
+ // attached directly to the object so GC can occur automatically
+ cache = isNode ? jQuery.cache : elem,
+
+ // Only defining an ID for JS objects if its cache already exists allows
+ // the code to shortcut on the same path as a DOM node with no cache
+ id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
+
+ // Avoid doing any more work than we need to when trying to get data on an
+ // object that has no data at all
+ if ( (!id || (pvt && id && (cache[ id ] && !cache[ id ][ internalKey ]))) && getByName && data === undefined ) {
+ return;
+ }
+
+ if ( !id ) {
+ // Only DOM nodes need a new unique ID for each element since their data
+ // ends up in the global cache
+ if ( isNode ) {
+ elem[ jQuery.expando ] = id = ++jQuery.uuid;
+ } else {
+ id = jQuery.expando;
+ }
+ }
+
+ if ( !cache[ id ] ) {
+ cache[ id ] = {};
+
+ // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
+ // metadata on plain JS objects when the object is serialized using
+ // JSON.stringify
+ if ( !isNode ) {
+ cache[ id ].toJSON = jQuery.noop;
+ }
+ }
+
+ // An object can be passed to jQuery.data instead of a key/value pair; this gets
+ // shallow copied over onto the existing cache
+ if ( typeof name === "object" || typeof name === "function" ) {
+ if ( pvt ) {
+ cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
+ } else {
+ cache[ id ] = jQuery.extend(cache[ id ], name);
+ }
+ }
+
+ thisCache = cache[ id ];
+
+ // Internal jQuery data is stored in a separate object inside the object's data
+ // cache in order to avoid key collisions between internal data and user-defined
+ // data
+ if ( pvt ) {
+ if ( !thisCache[ internalKey ] ) {
+ thisCache[ internalKey ] = {};
+ }
+
+ thisCache = thisCache[ internalKey ];
+ }
+
+ if ( data !== undefined ) {
+ thisCache[ jQuery.camelCase( name ) ] = data;
+ }
+
+ // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
+ // not attempt to inspect the internal events object using jQuery.data, as this
+ // internal data object is undocumented and subject to change.
+ if ( name === "events" && !thisCache[name] ) {
+ return thisCache[ internalKey ] && thisCache[ internalKey ].events;
+ }
+
+ // Check for both converted-to-camel and non-converted data property names
+ // If a data property was specified
+ if ( getByName ) {
+
+ // First Try to find as-is property data
+ ret = thisCache[ name ];
+
+ // Test for null|undefined property data
+ if ( ret == null ) {
+
+ // Try to find the camelCased property
+ ret = thisCache[ jQuery.camelCase( name ) ];
+ }
+ } else {
+ ret = thisCache;
+ }
+
+ return ret;
+ },
+
+ removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ var thisCache,
+
+ // Reference to internal data cache key
+ internalKey = jQuery.expando,
+
+ isNode = elem.nodeType,
+
+ // See jQuery.data for more information
+ cache = isNode ? jQuery.cache : elem,
+
+ // See jQuery.data for more information
+ id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+ // If there is already no cache entry for this object, there is no
+ // purpose in continuing
+ if ( !cache[ id ] ) {
+ return;
+ }
+
+ if ( name ) {
+
+ thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
+
+ if ( thisCache ) {
+
+ // Support interoperable removal of hyphenated or camelcased keys
+ if ( !thisCache[ name ] ) {
+ name = jQuery.camelCase( name );
+ }
+
+ delete thisCache[ name ];
+
+ // If there is no data left in the cache, we want to continue
+ // and let the cache object itself get destroyed
+ if ( !isEmptyDataObject(thisCache) ) {
+ return;
+ }
+ }
+ }
+
+ // See jQuery.data for more information
+ if ( pvt ) {
+ delete cache[ id ][ internalKey ];
+
+ // Don't destroy the parent cache unless the internal data object
+ // had been the only thing left in it
+ if ( !isEmptyDataObject(cache[ id ]) ) {
+ return;
+ }
+ }
+
+ var internalCache = cache[ id ][ internalKey ];
+
+ // Browsers that fail expando deletion also refuse to delete expandos on
+ // the window, but it will allow it on all other JS objects; other browsers
+ // don't care
+ // Ensure that `cache` is not a window object #10080
+ if ( jQuery.support.deleteExpando || !cache.setInterval ) {
+ delete cache[ id ];
+ } else {
+ cache[ id ] = null;
+ }
+
+ // We destroyed the entire user cache at once because it's faster than
+ // iterating through each key, but we need to continue to persist internal
+ // data if it existed
+ if ( internalCache ) {
+ cache[ id ] = {};
+ // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
+ // metadata on plain JS objects when the object is serialized using
+ // JSON.stringify
+ if ( !isNode ) {
+ cache[ id ].toJSON = jQuery.noop;
+ }
+
+ cache[ id ][ internalKey ] = internalCache;
+
+ // Otherwise, we need to eliminate the expando on the node to avoid
+ // false lookups in the cache for entries that no longer exist
+ } else if ( isNode ) {
+ // IE does not allow us to delete expando properties from nodes,
+ // nor does it have a removeAttribute function on Document nodes;
+ // we must handle all of these cases
+ if ( jQuery.support.deleteExpando ) {
+ delete elem[ jQuery.expando ];
+ } else if ( elem.removeAttribute ) {
+ elem.removeAttribute( jQuery.expando );
+ } else {
+ elem[ jQuery.expando ] = null;
+ }
+ }
+ },
+
+ // For internal use only.
+ _data: function( elem, name, data ) {
+ return jQuery.data( elem, name, data, true );
+ },
+
+ // A method for determining if a DOM node can handle the data expando
+ acceptData: function( elem ) {
+ if ( elem.nodeName ) {
+ var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+ if ( match ) {
+ return !(match === true || elem.getAttribute("classid") !== match);
+ }
+ }
+
+ return true;
+ }
+});
+
+jQuery.fn.extend({
+ data: function( key, value ) {
+ var data = null;
+
+ if ( typeof key === "undefined" ) {
+ if ( this.length ) {
+ data = jQuery.data( this[0] );
+
+ if ( this[0].nodeType === 1 ) {
+ var attr = this[0].attributes, name;
+ for ( var i = 0, l = attr.length; i < l; i++ ) {
+ name = attr[i].name;
+
+ if ( name.indexOf( "data-" ) === 0 ) {
+ name = jQuery.camelCase( name.substring(5) );
+
+ dataAttr( this[0], name, data[ name ] );
+ }
+ }
+ }
+ }
+
+ return data;
+
+ } else if ( typeof key === "object" ) {
+ return this.each(function() {
+ jQuery.data( this, key );
+ });
+ }
+
+ var parts = key.split(".");
+ parts[1] = parts[1] ? "." + parts[1] : "";
+
+ if ( value === undefined ) {
+ data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+
+ // Try to fetch any internally stored data first
+ if ( data === undefined && this.length ) {
+ data = jQuery.data( this[0], key );
+ data = dataAttr( this[0], key, data );
+ }
+
+ return data === undefined && parts[1] ?
+ this.data( parts[0] ) :
+ data;
+
+ } else {
+ return this.each(function() {
+ var $this = jQuery( this ),
+ args = [ parts[0], value ];
+
+ $this.triggerHandler( "setData" + parts[1] + "!", args );
+ jQuery.data( this, key, value );
+ $this.triggerHandler( "changeData" + parts[1] + "!", args );
+ });
+ }
+ },
+
+ removeData: function( key ) {
+ return this.each(function() {
+ jQuery.removeData( this, key );
+ });
+ }
+});
+
+function dataAttr( elem, key, data ) {
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && elem.nodeType === 1 ) {
+
+ var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+ data = elem.getAttribute( name );
+
+ if ( typeof data === "string" ) {
+ try {
+ data = data === "true" ? true :
+ data === "false" ? false :
+ data === "null" ? null :
+ !jQuery.isNaN( data ) ? parseFloat( data ) :
+ rbrace.test( data ) ? jQuery.parseJSON( data ) :
+ data;
+ } catch( e ) {}
+
+ // Make sure we set the data so it isn't changed later
+ jQuery.data( elem, key, data );
+
+ } else {
+ data = undefined;
+ }
+ }
+
+ return data;
+}
+
+// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
+// property to be considered empty objects; this property always exists in
+// order to make sure JSON.stringify does not expose internal metadata
+function isEmptyDataObject( obj ) {
+ for ( var name in obj ) {
+ if ( name !== "toJSON" ) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+
+
+
+function handleQueueMarkDefer( elem, type, src ) {
+ var deferDataKey = type + "defer",
+ queueDataKey = type + "queue",
+ markDataKey = type + "mark",
+ defer = jQuery.data( elem, deferDataKey, undefined, true );
+ if ( defer &&
+ ( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
+ ( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
+ // Give room for hard-coded callbacks to fire first
+ // and eventually mark/queue something else on the element
+ setTimeout( function() {
+ if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
+ !jQuery.data( elem, markDataKey, undefined, true ) ) {
+ jQuery.removeData( elem, deferDataKey, true );
+ defer.resolve();
+ }
+ }, 0 );
+ }
+}
+
+jQuery.extend({
+
+ _mark: function( elem, type ) {
+ if ( elem ) {
+ type = (type || "fx") + "mark";
+ jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
+ }
+ },
+
+ _unmark: function( force, elem, type ) {
+ if ( force !== true ) {
+ type = elem;
+ elem = force;
+ force = false;
+ }
+ if ( elem ) {
+ type = type || "fx";
+ var key = type + "mark",
+ count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
+ if ( count ) {
+ jQuery.data( elem, key, count, true );
+ } else {
+ jQuery.removeData( elem, key, true );
+ handleQueueMarkDefer( elem, type, "mark" );
+ }
+ }
+ },
+
+ queue: function( elem, type, data ) {
+ if ( elem ) {
+ type = (type || "fx") + "queue";
+ var q = jQuery.data( elem, type, undefined, true );
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !q || jQuery.isArray(data) ) {
+ q = jQuery.data( elem, type, jQuery.makeArray(data), true );
+ } else {
+ q.push( data );
+ }
+ }
+ return q || [];
+ }
+ },
+
+ dequeue: function( elem, type ) {
+ type = type || "fx";
+
+ var queue = jQuery.queue( elem, type ),
+ fn = queue.shift(),
+ defer;
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if ( fn === "inprogress" ) {
+ fn = queue.shift();
+ }
+
+ if ( fn ) {
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if ( type === "fx" ) {
+ queue.unshift("inprogress");
+ }
+
+ fn.call(elem, function() {
+ jQuery.dequeue(elem, type);
+ });
+ }
+
+ if ( !queue.length ) {
+ jQuery.removeData( elem, type + "queue", true );
+ handleQueueMarkDefer( elem, type, "queue" );
+ }
+ }
+});
+
+jQuery.fn.extend({
+ queue: function( type, data ) {
+ if ( typeof type !== "string" ) {
+ data = type;
+ type = "fx";
+ }
+
+ if ( data === undefined ) {
+ return jQuery.queue( this[0], type );
+ }
+ return this.each(function() {
+ var queue = jQuery.queue( this, type, data );
+
+ if ( type === "fx" && queue[0] !== "inprogress" ) {
+ jQuery.dequeue( this, type );
+ }
+ });
+ },
+ dequeue: function( type ) {
+ return this.each(function() {
+ jQuery.dequeue( this, type );
+ });
+ },
+ // Based off of the plugin by Clint Helfers, with permission.
+ // http://blindsignals.com/index.php/2009/07/jquery-delay/
+ delay: function( time, type ) {
+ time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
+ type = type || "fx";
+
+ return this.queue( type, function() {
+ var elem = this;
+ setTimeout(function() {
+ jQuery.dequeue( elem, type );
+ }, time );
+ });
+ },
+ clearQueue: function( type ) {
+ return this.queue( type || "fx", [] );
+ },
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function( type, object ) {
+ if ( typeof type !== "string" ) {
+ object = type;
+ type = undefined;
+ }
+ type = type || "fx";
+ var defer = jQuery.Deferred(),
+ elements = this,
+ i = elements.length,
+ count = 1,
+ deferDataKey = type + "defer",
+ queueDataKey = type + "queue",
+ markDataKey = type + "mark",
+ tmp;
+ function resolve() {
+ if ( !( --count ) ) {
+ defer.resolveWith( elements, [ elements ] );
+ }
+ }
+ while( i-- ) {
+ if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
+ ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
+ jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
+ jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
+ count++;
+ tmp.done( resolve );
+ }
+ }
+ resolve();
+ return defer.promise();
+ }
+});
+
+
+
+
+var rclass = /[\n\t\r]/g,
+ rspace = /\s+/,
+ rreturn = /\r/g,
+ rtype = /^(?:button|input)$/i,
+ rfocusable = /^(?:button|input|object|select|textarea)$/i,
+ rclickable = /^a(?:rea)?$/i,
+ rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+ nodeHook, boolHook;
+
+jQuery.fn.extend({
+ attr: function( name, value ) {
+ return jQuery.access( this, name, value, true, jQuery.attr );
+ },
+
+ removeAttr: function( name ) {
+ return this.each(function() {
+ jQuery.removeAttr( this, name );
+ });
+ },
+
+ prop: function( name, value ) {
+ return jQuery.access( this, name, value, true, jQuery.prop );
+ },
+
+ removeProp: function( name ) {
+ name = jQuery.propFix[ name ] || name;
+ return this.each(function() {
+ // try/catch handles cases where IE balks (such as removing a property on window)
+ try {
+ this[ name ] = undefined;
+ delete this[ name ];
+ } catch( e ) {}
+ });
+ },
+
+ addClass: function( value ) {
+ var classNames, i, l, elem,
+ setClass, c, cl;
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( j ) {
+ jQuery( this ).addClass( value.call(this, j, this.className) );
+ });
+ }
+
+ if ( value && typeof value === "string" ) {
+ classNames = value.split( rspace );
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ elem = this[ i ];
+
+ if ( elem.nodeType === 1 ) {
+ if ( !elem.className && classNames.length === 1 ) {
+ elem.className = value;
+
+ } else {
+ setClass = " " + elem.className + " ";
+
+ for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+ if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
+ setClass += classNames[ c ] + " ";
+ }
+ }
+ elem.className = jQuery.trim( setClass );
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ removeClass: function( value ) {
+ var classNames, i, l, elem, className, c, cl;
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( j ) {
+ jQuery( this ).removeClass( value.call(this, j, this.className) );
+ });
+ }
+
+ if ( (value && typeof value === "string") || value === undefined ) {
+ classNames = (value || "").split( rspace );
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ elem = this[ i ];
+
+ if ( elem.nodeType === 1 && elem.className ) {
+ if ( value ) {
+ className = (" " + elem.className + " ").replace( rclass, " " );
+ for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+ className = className.replace(" " + classNames[ c ] + " ", " ");
+ }
+ elem.className = jQuery.trim( className );
+
+ } else {
+ elem.className = "";
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ toggleClass: function( value, stateVal ) {
+ var type = typeof value,
+ isBool = typeof stateVal === "boolean";
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( i ) {
+ jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+ });
+ }
+
+ return this.each(function() {
+ if ( type === "string" ) {
+ // toggle individual class names
+ var className,
+ i = 0,
+ self = jQuery( this ),
+ state = stateVal,
+ classNames = value.split( rspace );
+
+ while ( (className = classNames[ i++ ]) ) {
+ // check each className given, space seperated list
+ state = isBool ? state : !self.hasClass( className );
+ self[ state ? "addClass" : "removeClass" ]( className );
+ }
+
+ } else if ( type === "undefined" || type === "boolean" ) {
+ if ( this.className ) {
+ // store className if set
+ jQuery._data( this, "__className__", this.className );
+ }
+
+ // toggle whole className
+ this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+ }
+ });
+ },
+
+ hasClass: function( selector ) {
+ var className = " " + selector + " ";
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ val: function( value ) {
+ var hooks, ret,
+ elem = this[0];
+
+ if ( !arguments.length ) {
+ if ( elem ) {
+ hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
+
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+ return ret;
+ }
+
+ ret = elem.value;
+
+ return typeof ret === "string" ?
+ // handle most common string cases
+ ret.replace(rreturn, "") :
+ // handle cases where value is null/undef or number
+ ret == null ? "" : ret;
+ }
+
+ return undefined;
+ }
+
+ var isFunction = jQuery.isFunction( value );
+
+ return this.each(function( i ) {
+ var self = jQuery(this), val;
+
+ if ( this.nodeType !== 1 ) {
+ return;
+ }
+
+ if ( isFunction ) {
+ val = value.call( this, i, self.val() );
+ } else {
+ val = value;
+ }
+
+ // Treat null/undefined as ""; convert numbers to string
+ if ( val == null ) {
+ val = "";
+ } else if ( typeof val === "number" ) {
+ val += "";
+ } else if ( jQuery.isArray( val ) ) {
+ val = jQuery.map(val, function ( value ) {
+ return value == null ? "" : value + "";
+ });
+ }
+
+ hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
+
+ // If set returns undefined, fall back to normal setting
+ if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+ this.value = val;
+ }
+ });
+ }
+});
+
+jQuery.extend({
+ valHooks: {
+ option: {
+ get: function( elem ) {
+ // attributes.value is undefined in Blackberry 4.7 but
+ // uses .value. See #6932
+ var val = elem.attributes.value;
+ return !val || val.specified ? elem.value : elem.text;
+ }
+ },
+ select: {
+ get: function( elem ) {
+ var value,
+ index = elem.selectedIndex,
+ values = [],
+ options = elem.options,
+ one = elem.type === "select-one";
+
+ // Nothing was selected
+ if ( index < 0 ) {
+ return null;
+ }
+
+ // Loop through all the selected options
+ for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+ var option = options[ i ];
+
+ // Don't return options that are disabled or in a disabled optgroup
+ if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+ (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+
+ // Get the specific value for the option
+ value = jQuery( option ).val();
+
+ // We don't need an array for one selects
+ if ( one ) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+ if ( one && !values.length && options.length ) {
+ return jQuery( options[ index ] ).val();
+ }
+
+ return values;
+ },
+
+ set: function( elem, value ) {
+ var values = jQuery.makeArray( value );
+
+ jQuery(elem).find("option").each(function() {
+ this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+ });
+
+ if ( !values.length ) {
+ elem.selectedIndex = -1;
+ }
+ return values;
+ }
+ }
+ },
+
+ attrFn: {
+ val: true,
+ css: true,
+ html: true,
+ text: true,
+ data: true,
+ width: true,
+ height: true,
+ offset: true
+ },
+
+ attrFix: {
+ // Always normalize to ensure hook usage
+ tabindex: "tabIndex"
+ },
+
+ attr: function( elem, name, value, pass ) {
+ var nType = elem.nodeType;
+
+ // don't get/set attributes on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return undefined;
+ }
+
+ if ( pass && name in jQuery.attrFn ) {
+ return jQuery( elem )[ name ]( value );
+ }
+
+ // Fallback to prop when attributes are not supported
+ if ( !("getAttribute" in elem) ) {
+ return jQuery.prop( elem, name, value );
+ }
+
+ var ret, hooks,
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+ // Normalize the name if needed
+ if ( notxml ) {
+ name = jQuery.attrFix[ name ] || name;
+
+ hooks = jQuery.attrHooks[ name ];
+
+ if ( !hooks ) {
+ // Use boolHook for boolean attributes
+ if ( rboolean.test( name ) ) {
+ hooks = boolHook;
+
+ // Use nodeHook if available( IE6/7 )
+ } else if ( nodeHook ) {
+ hooks = nodeHook;
+ }
+ }
+ }
+
+ if ( value !== undefined ) {
+
+ if ( value === null ) {
+ jQuery.removeAttr( elem, name );
+ return undefined;
+
+ } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+ return ret;
+
+ } else {
+ elem.setAttribute( name, "" + value );
+ return value;
+ }
+
+ } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
+ return ret;
+
+ } else {
+
+ ret = elem.getAttribute( name );
+
+ // Non-existent attributes return null, we normalize to undefined
+ return ret === null ?
+ undefined :
+ ret;
+ }
+ },
+
+ removeAttr: function( elem, name ) {
+ var propName;
+ if ( elem.nodeType === 1 ) {
+ name = jQuery.attrFix[ name ] || name;
+
+ jQuery.attr( elem, name, "" );
+ elem.removeAttribute( name );
+
+ // Set corresponding property to false for boolean attributes
+ if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {
+ elem[ propName ] = false;
+ }
+ }
+ },
+
+ attrHooks: {
+ type: {
+ set: function( elem, value ) {
+ // We can't allow the type property to be changed (since it causes problems in IE)
+ if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+ jQuery.error( "type property can't be changed" );
+ } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+ // Setting the type on a radio button after the value resets the value in IE6-9
+ // Reset value to it's default in case type is set after value
+ // This is for element creation
+ var val = elem.value;
+ elem.setAttribute( "type", value );
+ if ( val ) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ },
+ // Use the value property for back compat
+ // Use the nodeHook for button elements in IE6/7 (#1954)
+ value: {
+ get: function( elem, name ) {
+ if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+ return nodeHook.get( elem, name );
+ }
+ return name in elem ?
+ elem.value :
+ null;
+ },
+ set: function( elem, value, name ) {
+ if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+ return nodeHook.set( elem, value, name );
+ }
+ // Does not return so that setAttribute is also used
+ elem.value = value;
+ }
+ }
+ },
+
+ propFix: {
+ tabindex: "tabIndex",
+ readonly: "readOnly",
+ "for": "htmlFor",
+ "class": "className",
+ maxlength: "maxLength",
+ cellspacing: "cellSpacing",
+ cellpadding: "cellPadding",
+ rowspan: "rowSpan",
+ colspan: "colSpan",
+ usemap: "useMap",
+ frameborder: "frameBorder",
+ contenteditable: "contentEditable"
+ },
+
+ prop: function( elem, name, value ) {
+ var nType = elem.nodeType;
+
+ // don't get/set properties on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return undefined;
+ }
+
+ var ret, hooks,
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+ if ( notxml ) {
+ // Fix name and attach hooks
+ name = jQuery.propFix[ name ] || name;
+ hooks = jQuery.propHooks[ name ];
+ }
+
+ if ( value !== undefined ) {
+ if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+ return ret;
+
+ } else {
+ return (elem[ name ] = value);
+ }
+
+ } else {
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+ return ret;
+
+ } else {
+ return elem[ name ];
+ }
+ }
+ },
+
+ propHooks: {
+ tabIndex: {
+ get: function( elem ) {
+ // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+ // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+ var attributeNode = elem.getAttributeNode("tabindex");
+
+ return attributeNode && attributeNode.specified ?
+ parseInt( attributeNode.value, 10 ) :
+ rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+ 0 :
+ undefined;
+ }
+ }
+ }
+});
+
+// Add the tabindex propHook to attrHooks for back-compat
+jQuery.attrHooks.tabIndex = jQuery.propHooks.tabIndex;
+
+// Hook for boolean attributes
+boolHook = {
+ get: function( elem, name ) {
+ // Align boolean attributes with corresponding properties
+ // Fall back to attribute presence where some booleans are not supported
+ var attrNode;
+ return jQuery.prop( elem, name ) === true || ( attrNode = elem.getAttributeNode( name ) ) && attrNode.nodeValue !== false ?
+ name.toLowerCase() :
+ undefined;
+ },
+ set: function( elem, value, name ) {
+ var propName;
+ if ( value === false ) {
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr( elem, name );
+ } else {
+ // value is true since we know at this point it's type boolean and not false
+ // Set boolean attributes to the same name and set the DOM property
+ propName = jQuery.propFix[ name ] || name;
+ if ( propName in elem ) {
+ // Only set the IDL specifically if it already exists on the element
+ elem[ propName ] = true;
+ }
+
+ elem.setAttribute( name, name.toLowerCase() );
+ }
+ return name;
+ }
+};
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !jQuery.support.getSetAttribute ) {
+
+ // Use this for any attribute in IE6/7
+ // This fixes almost every IE6/7 issue
+ nodeHook = jQuery.valHooks.button = {
+ get: function( elem, name ) {
+ var ret;
+ ret = elem.getAttributeNode( name );
+ // Return undefined if nodeValue is empty string
+ return ret && ret.nodeValue !== "" ?
+ ret.nodeValue :
+ undefined;
+ },
+ set: function( elem, value, name ) {
+ // Set the existing or create a new attribute node
+ var ret = elem.getAttributeNode( name );
+ if ( !ret ) {
+ ret = document.createAttribute( name );
+ elem.setAttributeNode( ret );
+ }
+ return (ret.nodeValue = value + "");
+ }
+ };
+
+ // Set width and height to auto instead of 0 on empty string( Bug #8150 )
+ // This is for removals
+ jQuery.each([ "width", "height" ], function( i, name ) {
+ jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+ set: function( elem, value ) {
+ if ( value === "" ) {
+ elem.setAttribute( name, "auto" );
+ return value;
+ }
+ }
+ });
+ });
+}
+
+
+// Some attributes require a special call on IE
+if ( !jQuery.support.hrefNormalized ) {
+ jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+ jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+ get: function( elem ) {
+ var ret = elem.getAttribute( name, 2 );
+ return ret === null ? undefined : ret;
+ }
+ });
+ });
+}
+
+if ( !jQuery.support.style ) {
+ jQuery.attrHooks.style = {
+ get: function( elem ) {
+ // Return undefined in the case of empty string
+ // Normalize to lowercase since IE uppercases css property names
+ return elem.style.cssText.toLowerCase() || undefined;
+ },
+ set: function( elem, value ) {
+ return (elem.style.cssText = "" + value);
+ }
+ };
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+ jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+ get: function( elem ) {
+ var parent = elem.parentNode;
+
+ if ( parent ) {
+ parent.selectedIndex;
+
+ // Make sure that it also works with optgroups, see #5701
+ if ( parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ }
+ return null;
+ }
+ });
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+ jQuery.each([ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = {
+ get: function( elem ) {
+ // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ }
+ };
+ });
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+ set: function( elem, value ) {
+ if ( jQuery.isArray( value ) ) {
+ return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
+ }
+ }
+ });
+});
+
+
+
+
+var rnamespaces = /\.(.*)$/,
+ rformElems = /^(?:textarea|input|select)$/i,
+ rperiod = /\./g,
+ rspaces = / /g,
+ rescape = /[^\w\s.|`]/g,
+ fcleanup = function( nm ) {
+ return nm.replace(rescape, "\\$&");
+ };
+
+/*
+ * A number of helper functions used for managing events.
+ * Many of the ideas behind this code originated from
+ * Dean Edwards' addEvent library.
+ */
+jQuery.event = {
+
+ // Bind an event to an element
+ // Original by Dean Edwards
+ add: function( elem, types, handler, data ) {
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ if ( handler === false ) {
+ handler = returnFalse;
+ } else if ( !handler ) {
+ // Fixes bug #7229. Fix recommended by jdalton
+ return;
+ }
+
+ var handleObjIn, handleObj;
+
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ }
+
+ // Make sure that the function being executed has a unique ID
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure
+ var elemData = jQuery._data( elem );
+
+ // If no elemData is found then we must be trying to bind to one of the
+ // banned noData elements
+ if ( !elemData ) {
+ return;
+ }
+
+ var events = elemData.events,
+ eventHandle = elemData.handle;
+
+ if ( !events ) {
+ elemData.events = events = {};
+ }
+
+ if ( !eventHandle ) {
+ elemData.handle = eventHandle = function( e ) {
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+ jQuery.event.handle.apply( eventHandle.elem, arguments ) :
+ undefined;
+ };
+ }
+
+ // Add elem as a property of the handle function
+ // This is to prevent a memory leak with non-native events in IE.
+ eventHandle.elem = elem;
+
+ // Handle multiple events separated by a space
+ // jQuery(...).bind("mouseover mouseout", fn);
+ types = types.split(" ");
+
+ var type, i = 0, namespaces;
+
+ while ( (type = types[ i++ ]) ) {
+ handleObj = handleObjIn ?
+ jQuery.extend({}, handleObjIn) :
+ { handler: handler, data: data };
+
+ // Namespaced event handlers
+ if ( type.indexOf(".") > -1 ) {
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ handleObj.namespace = namespaces.slice(0).sort().join(".");
+
+ } else {
+ namespaces = [];
+ handleObj.namespace = "";
+ }
+
+ handleObj.type = type;
+ if ( !handleObj.guid ) {
+ handleObj.guid = handler.guid;
+ }
+
+ // Get the current list of functions bound to this event
+ var handlers = events[ type ],
+ special = jQuery.event.special[ type ] || {};
+
+ // Init the event handler queue
+ if ( !handlers ) {
+ handlers = events[ type ] = [];
+
+ // Check for a special event handler
+ // Only use addEventListener/attachEvent if the special
+ // events handler returns false
+ if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+ // Bind the global event handler to the element
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle, false );
+
+ } else if ( elem.attachEvent ) {
+ elem.attachEvent( "on" + type, eventHandle );
+ }
+ }
+ }
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add the function to the element's handler list
+ handlers.push( handleObj );
+
+ // Keep track of which events have been used, for event optimization
+ jQuery.event.global[ type ] = true;
+ }
+
+ // Nullify elem to prevent memory leaks in IE
+ elem = null;
+ },
+
+ global: {},
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, pos ) {
+ // don't do events on text and comment nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ if ( handler === false ) {
+ handler = returnFalse;
+ }
+
+ var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
+ elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
+ events = elemData && elemData.events;
+
+ if ( !elemData || !events ) {
+ return;
+ }
+
+ // types is actually an event object here
+ if ( types && types.type ) {
+ handler = types.handler;
+ types = types.type;
+ }
+
+ // Unbind all events for the element
+ if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
+ types = types || "";
+
+ for ( type in events ) {
+ jQuery.event.remove( elem, type + types );
+ }
+
+ return;
+ }
+
+ // Handle multiple events separated by a space
+ // jQuery(...).unbind("mouseover mouseout", fn);
+ types = types.split(" ");
+
+ while ( (type = types[ i++ ]) ) {
+ origType = type;
+ handleObj = null;
+ all = type.indexOf(".") < 0;
+ namespaces = [];
+
+ if ( !all ) {
+ // Namespaced event handlers
+ namespaces = type.split(".");
+ type = namespaces.shift();
+
+ namespace = new RegExp("(^|\\.)" +
+ jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
+ }
+
+ eventType = events[ type ];
+
+ if ( !eventType ) {
+ continue;
+ }
+
+ if ( !handler ) {
+ for ( j = 0; j < eventType.length; j++ ) {
+ handleObj = eventType[ j ];
+
+ if ( all || namespace.test( handleObj.namespace ) ) {
+ jQuery.event.remove( elem, origType, handleObj.handler, j );
+ eventType.splice( j--, 1 );
+ }
+ }
+
+ continue;
+ }
+
+ special = jQuery.event.special[ type ] || {};
+
+ for ( j = pos || 0; j < eventType.length; j++ ) {
+ handleObj = eventType[ j ];
+
+ if ( handler.guid === handleObj.guid ) {
+ // remove the given handler for the given type
+ if ( all || namespace.test( handleObj.namespace ) ) {
+ if ( pos == null ) {
+ eventType.splice( j--, 1 );
+ }
+
+ if ( special.remove ) {
+ special.remove.call( elem, handleObj );
+ }
+ }
+
+ if ( pos != null ) {
+ break;
+ }
+ }
+ }
+
+ // remove generic event handler if no more handlers exist
+ if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
+ if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+ jQuery.removeEvent( elem, type, elemData.handle );
+ }
+
+ ret = null;
+ delete events[ type ];
+ }
+ }
+
+ // Remove the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ var handle = elemData.handle;
+ if ( handle ) {
+ handle.elem = null;
+ }
+
+ delete elemData.events;
+ delete elemData.handle;
+
+ if ( jQuery.isEmptyObject( elemData ) ) {
+ jQuery.removeData( elem, undefined, true );
+ }
+ }
+ },
+
+ // Events that are safe to short-circuit if no handlers are attached.
+ // Native DOM events should not be added, they may have inline handlers.
+ customEvent: {
+ "getData": true,
+ "setData": true,
+ "changeData": true
+ },
+
+ trigger: function( event, data, elem, onlyHandlers ) {
+ // Event object or event type
+ var type = event.type || event,
+ namespaces = [],
+ exclusive;
+
+ if ( type.indexOf("!") >= 0 ) {
+ // Exclusive events trigger only for the exact event (no namespaces)
+ type = type.slice(0, -1);
+ exclusive = true;
+ }
+
+ if ( type.indexOf(".") >= 0 ) {
+ // Namespaced trigger; create a regexp to match event type in handle()
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ namespaces.sort();
+ }
+
+ if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+ // No jQuery handlers for this event type, and it can't have inline handlers
+ return;
+ }
+
+ // Caller can pass in an Event, Object, or just an event type string
+ event = typeof event === "object" ?
+ // jQuery.Event object
+ event[ jQuery.expando ] ? event :
+ // Object literal
+ new jQuery.Event( type, event ) :
+ // Just the event type (string)
+ new jQuery.Event( type );
+
+ event.type = type;
+ event.exclusive = exclusive;
+ event.namespace = namespaces.join(".");
+ event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
+
+ // triggerHandler() and global events don't bubble or run the default action
+ if ( onlyHandlers || !elem ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+
+ // Handle a global trigger
+ if ( !elem ) {
+ // TODO: Stop taunting the data cache; remove global events and always attach to document
+ jQuery.each( jQuery.cache, function() {
+ // internalKey variable is just used to make it easier to find
+ // and potentially change this stuff later; currently it just
+ // points to jQuery.expando
+ var internalKey = jQuery.expando,
+ internalCache = this[ internalKey ];
+ if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
+ jQuery.event.trigger( event, data, internalCache.handle.elem );
+ }
+ });
+ return;
+ }
+
+ // Don't do events on text and comment nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ // Clean up the event in case it is being reused
+ event.result = undefined;
+ event.target = elem;
+
+ // Clone any incoming data and prepend the event, creating the handler arg list
+ data = data != null ? jQuery.makeArray( data ) : [];
+ data.unshift( event );
+
+ var cur = elem,
+ // IE doesn't like method names with a colon (#3533, #8272)
+ ontype = type.indexOf(":") < 0 ? "on" + type : "";
+
+ // Fire event on the current element, then bubble up the DOM tree
+ do {
+ var handle = jQuery._data( cur, "handle" );
+
+ event.currentTarget = cur;
+ if ( handle ) {
+ handle.apply( cur, data );
+ }
+
+ // Trigger an inline bound script
+ if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {
+ event.result = false;
+ event.preventDefault();
+ }
+
+ // Bubble up to document, then to window
+ cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;
+ } while ( cur && !event.isPropagationStopped() );
+
+ // If nobody prevented the default action, do it now
+ if ( !event.isDefaultPrevented() ) {
+ var old,
+ special = jQuery.event.special[ type ] || {};
+
+ if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&
+ !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+ // Call a native DOM method on the target with the same name name as the event.
+ // Can't use an .isFunction)() check here because IE6/7 fails that test.
+ // IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.
+ try {
+ if ( ontype && elem[ type ] ) {
+ // Don't re-trigger an onFOO event when we call its FOO() method
+ old = elem[ ontype ];
+
+ if ( old ) {
+ elem[ ontype ] = null;
+ }
+
+ jQuery.event.triggered = type;
+ elem[ type ]();
+ }
+ } catch ( ieError ) {}
+
+ if ( old ) {
+ elem[ ontype ] = old;
+ }
+
+ jQuery.event.triggered = undefined;
+ }
+ }
+
+ return event.result;
+ },
+
+ handle: function( event ) {
+ event = jQuery.event.fix( event || window.event );
+ // Snapshot the handlers list since a called handler may add/remove events.
+ var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0),
+ run_all = !event.exclusive && !event.namespace,
+ args = Array.prototype.slice.call( arguments, 0 );
+
+ // Use the fix-ed Event rather than the (read-only) native event
+ args[0] = event;
+ event.currentTarget = this;
+
+ for ( var j = 0, l = handlers.length; j < l; j++ ) {
+ var handleObj = handlers[ j ];
+
+ // Triggered event must 1) be non-exclusive and have no namespace, or
+ // 2) have namespace(s) a subset or equal to those in the bound event.
+ if ( run_all || event.namespace_re.test( handleObj.namespace ) ) {
+ // Pass in a reference to the handler function itself
+ // So that we can later remove it
+ event.handler = handleObj.handler;
+ event.data = handleObj.data;
+ event.handleObj = handleObj;
+
+ var ret = handleObj.handler.apply( this, args );
+
+ if ( ret !== undefined ) {
+ event.result = ret;
+ if ( ret === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+
+ if ( event.isImmediatePropagationStopped() ) {
+ break;
+ }
+ }
+ }
+ return event.result;
+ },
+
+ props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+
+ fix: function( event ) {
+ if ( event[ jQuery.expando ] ) {
+ return event;
+ }
+
+ // store a copy of the original event object
+ // and "clone" to set read-only properties
+ var originalEvent = event;
+ event = jQuery.Event( originalEvent );
+
+ for ( var i = this.props.length, prop; i; ) {
+ prop = this.props[ --i ];
+ event[ prop ] = originalEvent[ prop ];
+ }
+
+ // Fix target property, if necessary
+ if ( !event.target ) {
+ // Fixes #1925 where srcElement might not be defined either
+ event.target = event.srcElement || document;
+ }
+
+ // check if target is a textnode (safari)
+ if ( event.target.nodeType === 3 ) {
+ event.target = event.target.parentNode;
+ }
+
+ // Add relatedTarget, if necessary
+ if ( !event.relatedTarget && event.fromElement ) {
+ event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
+ }
+
+ // Calculate pageX/Y if missing and clientX/Y available
+ if ( event.pageX == null && event.clientX != null ) {
+ var eventDocument = event.target.ownerDocument || document,
+ doc = eventDocument.documentElement,
+ body = eventDocument.body;
+
+ event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
+ event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
+ }
+
+ // Add which for key events
+ if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
+ event.which = event.charCode != null ? event.charCode : event.keyCode;
+ }
+
+ // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
+ if ( !event.metaKey && event.ctrlKey ) {
+ event.metaKey = event.ctrlKey;
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ // Note: button is not normalized, so don't use it
+ if ( !event.which && event.button !== undefined ) {
+ event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
+ }
+
+ return event;
+ },
+
+ // Deprecated, use jQuery.guid instead
+ guid: 1E8,
+
+ // Deprecated, use jQuery.proxy instead
+ proxy: jQuery.proxy,
+
+ special: {
+ ready: {
+ // Make sure the ready event is setup
+ setup: jQuery.bindReady,
+ teardown: jQuery.noop
+ },
+
+ live: {
+ add: function( handleObj ) {
+ jQuery.event.add( this,
+ liveConvert( handleObj.origType, handleObj.selector ),
+ jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
+ },
+
+ remove: function( handleObj ) {
+ jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
+ }
+ },
+
+ beforeunload: {
+ setup: function( data, namespaces, eventHandle ) {
+ // We only want to do this special case on windows
+ if ( jQuery.isWindow( this ) ) {
+ this.onbeforeunload = eventHandle;
+ }
+ },
+
+ teardown: function( namespaces, eventHandle ) {
+ if ( this.onbeforeunload === eventHandle ) {
+ this.onbeforeunload = null;
+ }
+ }
+ }
+ }
+};
+
+jQuery.removeEvent = document.removeEventListener ?
+ function( elem, type, handle ) {
+ if ( elem.removeEventListener ) {
+ elem.removeEventListener( type, handle, false );
+ }
+ } :
+ function( elem, type, handle ) {
+ if ( elem.detachEvent ) {
+ elem.detachEvent( "on" + type, handle );
+ }
+ };
+
+jQuery.Event = function( src, props ) {
+ // Allow instantiation without the 'new' keyword
+ if ( !this.preventDefault ) {
+ return new jQuery.Event( src, props );
+ }
+
+ // Event object
+ if ( src && src.type ) {
+ this.originalEvent = src;
+ this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
+ src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
+
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // Put explicitly provided properties onto the event object
+ if ( props ) {
+ jQuery.extend( this, props );
+ }
+
+ // timeStamp is buggy for some events on Firefox(#3843)
+ // So we won't rely on the native value
+ this.timeStamp = jQuery.now();
+
+ // Mark it as fixed
+ this[ jQuery.expando ] = true;
+};
+
+function returnFalse() {
+ return false;
+}
+function returnTrue() {
+ return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+ preventDefault: function() {
+ this.isDefaultPrevented = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+
+ // if preventDefault exists run it on the original event
+ if ( e.preventDefault ) {
+ e.preventDefault();
+
+ // otherwise set the returnValue property of the original event to false (IE)
+ } else {
+ e.returnValue = false;
+ }
+ },
+ stopPropagation: function() {
+ this.isPropagationStopped = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+ // if stopPropagation exists run it on the original event
+ if ( e.stopPropagation ) {
+ e.stopPropagation();
+ }
+ // otherwise set the cancelBubble property of the original event to true (IE)
+ e.cancelBubble = true;
+ },
+ stopImmediatePropagation: function() {
+ this.isImmediatePropagationStopped = returnTrue;
+ this.stopPropagation();
+ },
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse
+};
+
+// Checks if an event happened on an element within another element
+// Used in jQuery.event.special.mouseenter and mouseleave handlers
+var withinElement = function( event ) {
+
+ // Check if mouse(over|out) are still within the same parent element
+ var related = event.relatedTarget,
+ inside = false,
+ eventType = event.type;
+
+ event.type = event.data;
+
+ if ( related !== this ) {
+
+ if ( related ) {
+ inside = jQuery.contains( this, related );
+ }
+
+ if ( !inside ) {
+
+ jQuery.event.handle.apply( this, arguments );
+
+ event.type = eventType;
+ }
+ }
+},
+
+// In case of event delegation, we only need to rename the event.type,
+// liveHandler will take care of the rest.
+delegate = function( event ) {
+ event.type = event.data;
+ jQuery.event.handle.apply( this, arguments );
+};
+
+// Create mouseenter and mouseleave events
+jQuery.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+}, function( orig, fix ) {
+ jQuery.event.special[ orig ] = {
+ setup: function( data ) {
+ jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
+ },
+ teardown: function( data ) {
+ jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
+ }
+ };
+});
+
+// submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+ jQuery.event.special.submit = {
+ setup: function( data, namespaces ) {
+ if ( !jQuery.nodeName( this, "form" ) ) {
+ jQuery.event.add(this, "click.specialSubmit", function( e ) {
+ // Avoid triggering error on non-existent type attribute in IE VML (#7071)
+ var elem = e.target,
+ type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : "";
+
+ if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
+ trigger( "submit", this, arguments );
+ }
+ });
+
+ jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
+ var elem = e.target,
+ type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : "";
+
+ if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
+ trigger( "submit", this, arguments );
+ }
+ });
+
+ } else {
+ return false;
+ }
+ },
+
+ teardown: function( namespaces ) {
+ jQuery.event.remove( this, ".specialSubmit" );
+ }
+ };
+
+}
+
+// change delegation, happens here so we have bind.
+if ( !jQuery.support.changeBubbles ) {
+
+ var changeFilters,
+
+ getVal = function( elem ) {
+ var type = jQuery.nodeName( elem, "input" ) ? elem.type : "",
+ val = elem.value;
+
+ if ( type === "radio" || type === "checkbox" ) {
+ val = elem.checked;
+
+ } else if ( type === "select-multiple" ) {
+ val = elem.selectedIndex > -1 ?
+ jQuery.map( elem.options, function( elem ) {
+ return elem.selected;
+ }).join("-") :
+ "";
+
+ } else if ( jQuery.nodeName( elem, "select" ) ) {
+ val = elem.selectedIndex;
+ }
+
+ return val;
+ },
+
+ testChange = function testChange( e ) {
+ var elem = e.target, data, val;
+
+ if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
+ return;
+ }
+
+ data = jQuery._data( elem, "_change_data" );
+ val = getVal(elem);
+
+ // the current data will be also retrieved by beforeactivate
+ if ( e.type !== "focusout" || elem.type !== "radio" ) {
+ jQuery._data( elem, "_change_data", val );
+ }
+
+ if ( data === undefined || val === data ) {
+ return;
+ }
+
+ if ( data != null || val ) {
+ e.type = "change";
+ e.liveFired = undefined;
+ jQuery.event.trigger( e, arguments[1], elem );
+ }
+ };
+
+ jQuery.event.special.change = {
+ filters: {
+ focusout: testChange,
+
+ beforedeactivate: testChange,
+
+ click: function( e ) {
+ var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
+
+ if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) {
+ testChange.call( this, e );
+ }
+ },
+
+ // Change has to be called before submit
+ // Keydown will be called before keypress, which is used in submit-event delegation
+ keydown: function( e ) {
+ var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
+
+ if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) ||
+ (e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
+ type === "select-multiple" ) {
+ testChange.call( this, e );
+ }
+ },
+
+ // Beforeactivate happens also before the previous element is blurred
+ // with this event you can't trigger a change event, but you can store
+ // information
+ beforeactivate: function( e ) {
+ var elem = e.target;
+ jQuery._data( elem, "_change_data", getVal(elem) );
+ }
+ },
+
+ setup: function( data, namespaces ) {
+ if ( this.type === "file" ) {
+ return false;
+ }
+
+ for ( var type in changeFilters ) {
+ jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
+ }
+
+ return rformElems.test( this.nodeName );
+ },
+
+ teardown: function( namespaces ) {
+ jQuery.event.remove( this, ".specialChange" );
+
+ return rformElems.test( this.nodeName );
+ }
+ };
+
+ changeFilters = jQuery.event.special.change.filters;
+
+ // Handle when the input is .focus()'d
+ changeFilters.focus = changeFilters.beforeactivate;
+}
+
+function trigger( type, elem, args ) {
+ // Piggyback on a donor event to simulate a different one.
+ // Fake originalEvent to avoid donor's stopPropagation, but if the
+ // simulated event prevents default then we do the same on the donor.
+ // Don't pass args or remember liveFired; they apply to the donor event.
+ var event = jQuery.extend( {}, args[ 0 ] );
+ event.type = type;
+ event.originalEvent = {};
+ event.liveFired = undefined;
+ jQuery.event.handle.call( elem, event );
+ if ( event.isDefaultPrevented() ) {
+ args[ 0 ].preventDefault();
+ }
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+ jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+ // Attach a single capturing handler while someone wants focusin/focusout
+ var attaches = 0;
+
+ jQuery.event.special[ fix ] = {
+ setup: function() {
+ if ( attaches++ === 0 ) {
+ document.addEventListener( orig, handler, true );
+ }
+ },
+ teardown: function() {
+ if ( --attaches === 0 ) {
+ document.removeEventListener( orig, handler, true );
+ }
+ }
+ };
+
+ function handler( donor ) {
+ // Donor event is always a native one; fix it and switch its type.
+ // Let focusin/out handler cancel the donor focus/blur event.
+ var e = jQuery.event.fix( donor );
+ e.type = fix;
+ e.originalEvent = {};
+ jQuery.event.trigger( e, null, e.target );
+ if ( e.isDefaultPrevented() ) {
+ donor.preventDefault();
+ }
+ }
+ });
+}
+
+jQuery.each(["bind", "one"], function( i, name ) {
+ jQuery.fn[ name ] = function( type, data, fn ) {
+ var handler;
+
+ // Handle object literals
+ if ( typeof type === "object" ) {
+ for ( var key in type ) {
+ this[ name ](key, data, type[key], fn);
+ }
+ return this;
+ }
+
+ if ( arguments.length === 2 || data === false ) {
+ fn = data;
+ data = undefined;
+ }
+
+ if ( name === "one" ) {
+ handler = function( event ) {
+ jQuery( this ).unbind( event, handler );
+ return fn.apply( this, arguments );
+ };
+ handler.guid = fn.guid || jQuery.guid++;
+ } else {
+ handler = fn;
+ }
+
+ if ( type === "unload" && name !== "one" ) {
+ this.one( type, data, fn );
+
+ } else {
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ jQuery.event.add( this[i], type, handler, data );
+ }
+ }
+
+ return this;
+ };
+});
+
+jQuery.fn.extend({
+ unbind: function( type, fn ) {
+ // Handle object literals
+ if ( typeof type === "object" && !type.preventDefault ) {
+ for ( var key in type ) {
+ this.unbind(key, type[key]);
+ }
+
+ } else {
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ jQuery.event.remove( this[i], type, fn );
+ }
+ }
+
+ return this;
+ },
+
+ delegate: function( selector, types, data, fn ) {
+ return this.live( types, data, fn, selector );
+ },
+
+ undelegate: function( selector, types, fn ) {
+ if ( arguments.length === 0 ) {
+ return this.unbind( "live" );
+
+ } else {
+ return this.die( types, null, fn, selector );
+ }
+ },
+
+ trigger: function( type, data ) {
+ return this.each(function() {
+ jQuery.event.trigger( type, data, this );
+ });
+ },
+
+ triggerHandler: function( type, data ) {
+ if ( this[0] ) {
+ return jQuery.event.trigger( type, data, this[0], true );
+ }
+ },
+
+ toggle: function( fn ) {
+ // Save reference to arguments for access in closure
+ var args = arguments,
+ guid = fn.guid || jQuery.guid++,
+ i = 0,
+ toggler = function( event ) {
+ // Figure out which function to execute
+ var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+ jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+ // Make sure that clicks stop
+ event.preventDefault();
+
+ // and execute the function
+ return args[ lastToggle ].apply( this, arguments ) || false;
+ };
+
+ // link all the functions, so any of them can unbind this click handler
+ toggler.guid = guid;
+ while ( i < args.length ) {
+ args[ i++ ].guid = guid;
+ }
+
+ return this.click( toggler );
+ },
+
+ hover: function( fnOver, fnOut ) {
+ return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+ }
+});
+
+var liveMap = {
+ focus: "focusin",
+ blur: "focusout",
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+};
+
+jQuery.each(["live", "die"], function( i, name ) {
+ jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
+ var type, i = 0, match, namespaces, preType,
+ selector = origSelector || this.selector,
+ context = origSelector ? this : jQuery( this.context );
+
+ if ( typeof types === "object" && !types.preventDefault ) {
+ for ( var key in types ) {
+ context[ name ]( key, data, types[key], selector );
+ }
+
+ return this;
+ }
+
+ if ( name === "die" && !types &&
+ origSelector && origSelector.charAt(0) === "." ) {
+
+ context.unbind( origSelector );
+
+ return this;
+ }
+
+ if ( data === false || jQuery.isFunction( data ) ) {
+ fn = data || returnFalse;
+ data = undefined;
+ }
+
+ types = (types || "").split(" ");
+
+ while ( (type = types[ i++ ]) != null ) {
+ match = rnamespaces.exec( type );
+ namespaces = "";
+
+ if ( match ) {
+ namespaces = match[0];
+ type = type.replace( rnamespaces, "" );
+ }
+
+ if ( type === "hover" ) {
+ types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
+ continue;
+ }
+
+ preType = type;
+
+ if ( liveMap[ type ] ) {
+ types.push( liveMap[ type ] + namespaces );
+ type = type + namespaces;
+
+ } else {
+ type = (liveMap[ type ] || type) + namespaces;
+ }
+
+ if ( name === "live" ) {
+ // bind live handler
+ for ( var j = 0, l = context.length; j < l; j++ ) {
+ jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
+ { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
+ }
+
+ } else {
+ // unbind live handler
+ context.unbind( "live." + liveConvert( type, selector ), fn );
+ }
+ }
+
+ return this;
+ };
+});
+
+function liveHandler( event ) {
+ var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
+ elems = [],
+ selectors = [],
+ events = jQuery._data( this, "events" );
+
+ // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
+ if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
+ return;
+ }
+
+ if ( event.namespace ) {
+ namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
+ }
+
+ event.liveFired = this;
+
+ var live = events.live.slice(0);
+
+ for ( j = 0; j < live.length; j++ ) {
+ handleObj = live[j];
+
+ if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
+ selectors.push( handleObj.selector );
+
+ } else {
+ live.splice( j--, 1 );
+ }
+ }
+
+ match = jQuery( event.target ).closest( selectors, event.currentTarget );
+
+ for ( i = 0, l = match.length; i < l; i++ ) {
+ close = match[i];
+
+ for ( j = 0; j < live.length; j++ ) {
+ handleObj = live[j];
+
+ if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
+ elem = close.elem;
+ related = null;
+
+ // Those two events require additional checking
+ if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
+ event.type = handleObj.preType;
+ related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
+
+ // Make sure not to accidentally match a child element with the same selector
+ if ( related && jQuery.contains( elem, related ) ) {
+ related = elem;
+ }
+ }
+
+ if ( !related || related !== elem ) {
+ elems.push({ elem: elem, handleObj: handleObj, level: close.level });
+ }
+ }
+ }
+ }
+
+ for ( i = 0, l = elems.length; i < l; i++ ) {
+ match = elems[i];
+
+ if ( maxLevel && match.level > maxLevel ) {
+ break;
+ }
+
+ event.currentTarget = match.elem;
+ event.data = match.handleObj.data;
+ event.handleObj = match.handleObj;
+
+ ret = match.handleObj.origHandler.apply( match.elem, arguments );
+
+ if ( ret === false || event.isPropagationStopped() ) {
+ maxLevel = match.level;
+
+ if ( ret === false ) {
+ stop = false;
+ }
+ if ( event.isImmediatePropagationStopped() ) {
+ break;
+ }
+ }
+ }
+
+ return stop;
+}
+
+function liveConvert( type, selector ) {
+ return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&");
+}
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+ "change select submit keydown keypress keyup error").split(" "), function( i, name ) {
+
+ // Handle event binding
+ jQuery.fn[ name ] = function( data, fn ) {
+ if ( fn == null ) {
+ fn = data;
+ data = null;
+ }
+
+ return arguments.length > 0 ?
+ this.bind( name, data, fn ) :
+ this.trigger( name );
+ };
+
+ if ( jQuery.attrFn ) {
+ jQuery.attrFn[ name ] = true;
+ }
+});
+
+
+
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+ done = 0,
+ toString = Object.prototype.toString,
+ hasDuplicate = false,
+ baseHasDuplicate = true,
+ rBackslash = /\\/g,
+ rNonWord = /\W/;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+// Thus far that includes Google Chrome.
+[0, 0].sort(function() {
+ baseHasDuplicate = false;
+ return 0;
+});
+
+var Sizzle = function( selector, context, results, seed ) {
+ results = results || [];
+ context = context || document;
+
+ var origContext = context;
+
+ if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+ return [];
+ }
+
+ if ( !selector || typeof selector !== "string" ) {
+ return results;
+ }
+
+ var m, set, checkSet, extra, ret, cur, pop, i,
+ prune = true,
+ contextXML = Sizzle.isXML( context ),
+ parts = [],
+ soFar = selector;
+
+ // Reset the position of the chunker regexp (start from head)
+ do {
+ chunker.exec( "" );
+ m = chunker.exec( soFar );
+
+ if ( m ) {
+ soFar = m[3];
+
+ parts.push( m[1] );
+
+ if ( m[2] ) {
+ extra = m[3];
+ break;
+ }
+ }
+ } while ( m );
+
+ if ( parts.length > 1 && origPOS.exec( selector ) ) {
+
+ if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+ set = posProcess( parts[0] + parts[1], context );
+
+ } else {
+ set = Expr.relative[ parts[0] ] ?
+ [ context ] :
+ Sizzle( parts.shift(), context );
+
+ while ( parts.length ) {
+ selector = parts.shift();
+
+ if ( Expr.relative[ selector ] ) {
+ selector += parts.shift();
+ }
+
+ set = posProcess( selector, set );
+ }
+ }
+
+ } else {
+ // Take a shortcut and set the context if the root selector is an ID
+ // (but not if it'll be faster if the inner selector is an ID)
+ if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+ Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+
+ ret = Sizzle.find( parts.shift(), context, contextXML );
+ context = ret.expr ?
+ Sizzle.filter( ret.expr, ret.set )[0] :
+ ret.set[0];
+ }
+
+ if ( context ) {
+ ret = seed ?
+ { expr: parts.pop(), set: makeArray(seed) } :
+ Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+
+ set = ret.expr ?
+ Sizzle.filter( ret.expr, ret.set ) :
+ ret.set;
+
+ if ( parts.length > 0 ) {
+ checkSet = makeArray( set );
+
+ } else {
+ prune = false;
+ }
+
+ while ( parts.length ) {
+ cur = parts.pop();
+ pop = cur;
+
+ if ( !Expr.relative[ cur ] ) {
+ cur = "";
+ } else {
+ pop = parts.pop();
+ }
+
+ if ( pop == null ) {
+ pop = context;
+ }
+
+ Expr.relative[ cur ]( checkSet, pop, contextXML );
+ }
+
+ } else {
+ checkSet = parts = [];
+ }
+ }
+
+ if ( !checkSet ) {
+ checkSet = set;
+ }
+
+ if ( !checkSet ) {
+ Sizzle.error( cur || selector );
+ }
+
+ if ( toString.call(checkSet) === "[object Array]" ) {
+ if ( !prune ) {
+ results.push.apply( results, checkSet );
+
+ } else if ( context && context.nodeType === 1 ) {
+ for ( i = 0; checkSet[i] != null; i++ ) {
+ if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+ results.push( set[i] );
+ }
+ }
+
+ } else {
+ for ( i = 0; checkSet[i] != null; i++ ) {
+ if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+ results.push( set[i] );
+ }
+ }
+ }
+
+ } else {
+ makeArray( checkSet, results );
+ }
+
+ if ( extra ) {
+ Sizzle( extra, origContext, results, seed );
+ Sizzle.uniqueSort( results );
+ }
+
+ return results;
+};
+
+Sizzle.uniqueSort = function( results ) {
+ if ( sortOrder ) {
+ hasDuplicate = baseHasDuplicate;
+ results.sort( sortOrder );
+
+ if ( hasDuplicate ) {
+ for ( var i = 1; i < results.length; i++ ) {
+ if ( results[i] === results[ i - 1 ] ) {
+ results.splice( i--, 1 );
+ }
+ }
+ }
+ }
+
+ return results;
+};
+
+Sizzle.matches = function( expr, set ) {
+ return Sizzle( expr, null, null, set );
+};
+
+Sizzle.matchesSelector = function( node, expr ) {
+ return Sizzle( expr, null, null, [node] ).length > 0;
+};
+
+Sizzle.find = function( expr, context, isXML ) {
+ var set;
+
+ if ( !expr ) {
+ return [];
+ }
+
+ for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
+ var match,
+ type = Expr.order[i];
+
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+ var left = match[1];
+ match.splice( 1, 1 );
+
+ if ( left.substr( left.length - 1 ) !== "\\" ) {
+ match[1] = (match[1] || "").replace( rBackslash, "" );
+ set = Expr.find[ type ]( match, context, isXML );
+
+ if ( set != null ) {
+ expr = expr.replace( Expr.match[ type ], "" );
+ break;
+ }
+ }
+ }
+ }
+
+ if ( !set ) {
+ set = typeof context.getElementsByTagName !== "undefined" ?
+ context.getElementsByTagName( "*" ) :
+ [];
+ }
+
+ return { set: set, expr: expr };
+};
+
+Sizzle.filter = function( expr, set, inplace, not ) {
+ var match, anyFound,
+ old = expr,
+ result = [],
+ curLoop = set,
+ isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
+
+ while ( expr && set.length ) {
+ for ( var type in Expr.filter ) {
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+ var found, item,
+ filter = Expr.filter[ type ],
+ left = match[1];
+
+ anyFound = false;
+
+ match.splice(1,1);
+
+ if ( left.substr( left.length - 1 ) === "\\" ) {
+ continue;
+ }
+
+ if ( curLoop === result ) {
+ result = [];
+ }
+
+ if ( Expr.preFilter[ type ] ) {
+ match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+ if ( !match ) {
+ anyFound = found = true;
+
+ } else if ( match === true ) {
+ continue;
+ }
+ }
+
+ if ( match ) {
+ for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
+ if ( item ) {
+ found = filter( item, match, i, curLoop );
+ var pass = not ^ !!found;
+
+ if ( inplace && found != null ) {
+ if ( pass ) {
+ anyFound = true;
+
+ } else {
+ curLoop[i] = false;
+ }
+
+ } else if ( pass ) {
+ result.push( item );
+ anyFound = true;
+ }
+ }
+ }
+ }
+
+ if ( found !== undefined ) {
+ if ( !inplace ) {
+ curLoop = result;
+ }
+
+ expr = expr.replace( Expr.match[ type ], "" );
+
+ if ( !anyFound ) {
+ return [];
+ }
+
+ break;
+ }
+ }
+ }
+
+ // Improper expression
+ if ( expr === old ) {
+ if ( anyFound == null ) {
+ Sizzle.error( expr );
+
+ } else {
+ break;
+ }
+ }
+
+ old = expr;
+ }
+
+ return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+ throw "Syntax error, unrecognized expression: " + msg;
+};
+
+var Expr = Sizzle.selectors = {
+ order: [ "ID", "NAME", "TAG" ],
+
+ match: {
+ ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+ TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+ CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
+ POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+ PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+ },
+
+ leftMatch: {},
+
+ attrMap: {
+ "class": "className",
+ "for": "htmlFor"
+ },
+
+ attrHandle: {
+ href: function( elem ) {
+ return elem.getAttribute( "href" );
+ },
+ type: function( elem ) {
+ return elem.getAttribute( "type" );
+ }
+ },
+
+ relative: {
+ "+": function(checkSet, part){
+ var isPartStr = typeof part === "string",
+ isTag = isPartStr && !rNonWord.test( part ),
+ isPartStrNotTag = isPartStr && !isTag;
+
+ if ( isTag ) {
+ part = part.toLowerCase();
+ }
+
+ for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+ if ( (elem = checkSet[i]) ) {
+ while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+ checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+ elem || false :
+ elem === part;
+ }
+ }
+
+ if ( isPartStrNotTag ) {
+ Sizzle.filter( part, checkSet, true );
+ }
+ },
+
+ ">": function( checkSet, part ) {
+ var elem,
+ isPartStr = typeof part === "string",
+ i = 0,
+ l = checkSet.length;
+
+ if ( isPartStr && !rNonWord.test( part ) ) {
+ part = part.toLowerCase();
+
+ for ( ; i < l; i++ ) {
+ elem = checkSet[i];
+
+ if ( elem ) {
+ var parent = elem.parentNode;
+ checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+ }
+ }
+
+ } else {
+ for ( ; i < l; i++ ) {
+ elem = checkSet[i];
+
+ if ( elem ) {
+ checkSet[i] = isPartStr ?
+ elem.parentNode :
+ elem.parentNode === part;
+ }
+ }
+
+ if ( isPartStr ) {
+ Sizzle.filter( part, checkSet, true );
+ }
+ }
+ },
+
+ "": function(checkSet, part, isXML){
+ var nodeCheck,
+ doneName = done++,
+ checkFn = dirCheck;
+
+ if ( typeof part === "string" && !rNonWord.test( part ) ) {
+ part = part.toLowerCase();
+ nodeCheck = part;
+ checkFn = dirNodeCheck;
+ }
+
+ checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
+ },
+
+ "~": function( checkSet, part, isXML ) {
+ var nodeCheck,
+ doneName = done++,
+ checkFn = dirCheck;
+
+ if ( typeof part === "string" && !rNonWord.test( part ) ) {
+ part = part.toLowerCase();
+ nodeCheck = part;
+ checkFn = dirNodeCheck;
+ }
+
+ checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
+ }
+ },
+
+ find: {
+ ID: function( match, context, isXML ) {
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
+ var m = context.getElementById(match[1]);
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ return m && m.parentNode ? [m] : [];
+ }
+ },
+
+ NAME: function( match, context ) {
+ if ( typeof context.getElementsByName !== "undefined" ) {
+ var ret = [],
+ results = context.getElementsByName( match[1] );
+
+ for ( var i = 0, l = results.length; i < l; i++ ) {
+ if ( results[i].getAttribute("name") === match[1] ) {
+ ret.push( results[i] );
+ }
+ }
+
+ return ret.length === 0 ? null : ret;
+ }
+ },
+
+ TAG: function( match, context ) {
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ return context.getElementsByTagName( match[1] );
+ }
+ }
+ },
+ preFilter: {
+ CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+ match = " " + match[1].replace( rBackslash, "" ) + " ";
+
+ if ( isXML ) {
+ return match;
+ }
+
+ for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+ if ( elem ) {
+ if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
+ if ( !inplace ) {
+ result.push( elem );
+ }
+
+ } else if ( inplace ) {
+ curLoop[i] = false;
+ }
+ }
+ }
+
+ return false;
+ },
+
+ ID: function( match ) {
+ return match[1].replace( rBackslash, "" );
+ },
+
+ TAG: function( match, curLoop ) {
+ return match[1].replace( rBackslash, "" ).toLowerCase();
+ },
+
+ CHILD: function( match ) {
+ if ( match[1] === "nth" ) {
+ if ( !match[2] ) {
+ Sizzle.error( match[0] );
+ }
+
+ match[2] = match[2].replace(/^\+|\s*/g, '');
+
+ // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+ var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
+ match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+ !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+ // calculate the numbers (first)n+(last) including if they are negative
+ match[2] = (test[1] + (test[2] || 1)) - 0;
+ match[3] = test[3] - 0;
+ }
+ else if ( match[2] ) {
+ Sizzle.error( match[0] );
+ }
+
+ // TODO: Move to normal caching system
+ match[0] = done++;
+
+ return match;
+ },
+
+ ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+ var name = match[1] = match[1].replace( rBackslash, "" );
+
+ if ( !isXML && Expr.attrMap[name] ) {
+ match[1] = Expr.attrMap[name];
+ }
+
+ // Handle if an un-quoted value was used
+ match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+
+ if ( match[2] === "~=" ) {
+ match[4] = " " + match[4] + " ";
+ }
+
+ return match;
+ },
+
+ PSEUDO: function( match, curLoop, inplace, result, not ) {
+ if ( match[1] === "not" ) {
+ // If we're dealing with a complex expression, or a simple one
+ if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+ match[3] = Sizzle(match[3], null, null, curLoop);
+
+ } else {
+ var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+
+ if ( !inplace ) {
+ result.push.apply( result, ret );
+ }
+
+ return false;
+ }
+
+ } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+ return true;
+ }
+
+ return match;
+ },
+
+ POS: function( match ) {
+ match.unshift( true );
+
+ return match;
+ }
+ },
+
+ filters: {
+ enabled: function( elem ) {
+ return elem.disabled === false && elem.type !== "hidden";
+ },
+
+ disabled: function( elem ) {
+ return elem.disabled === true;
+ },
+
+ checked: function( elem ) {
+ return elem.checked === true;
+ },
+
+ selected: function( elem ) {
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ if ( elem.parentNode ) {
+ elem.parentNode.selectedIndex;
+ }
+
+ return elem.selected === true;
+ },
+
+ parent: function( elem ) {
+ return !!elem.firstChild;
+ },
+
+ empty: function( elem ) {
+ return !elem.firstChild;
+ },
+
+ has: function( elem, i, match ) {
+ return !!Sizzle( match[3], elem ).length;
+ },
+
+ header: function( elem ) {
+ return (/h\d/i).test( elem.nodeName );
+ },
+
+ text: function( elem ) {
+ var attr = elem.getAttribute( "type" ), type = elem.type;
+ // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+ // use getAttribute instead to test this case
+ return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
+ },
+
+ radio: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
+ },
+
+ checkbox: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
+ },
+
+ file: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
+ },
+
+ password: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
+ },
+
+ submit: function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && "submit" === elem.type;
+ },
+
+ image: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
+ },
+
+ reset: function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && "reset" === elem.type;
+ },
+
+ button: function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && "button" === elem.type || name === "button";
+ },
+
+ input: function( elem ) {
+ return (/input|select|textarea|button/i).test( elem.nodeName );
+ },
+
+ focus: function( elem ) {
+ return elem === elem.ownerDocument.activeElement;
+ }
+ },
+ setFilters: {
+ first: function( elem, i ) {
+ return i === 0;
+ },
+
+ last: function( elem, i, match, array ) {
+ return i === array.length - 1;
+ },
+
+ even: function( elem, i ) {
+ return i % 2 === 0;
+ },
+
+ odd: function( elem, i ) {
+ return i % 2 === 1;
+ },
+
+ lt: function( elem, i, match ) {
+ return i < match[3] - 0;
+ },
+
+ gt: function( elem, i, match ) {
+ return i > match[3] - 0;
+ },
+
+ nth: function( elem, i, match ) {
+ return match[3] - 0 === i;
+ },
+
+ eq: function( elem, i, match ) {
+ return match[3] - 0 === i;
+ }
+ },
+ filter: {
+ PSEUDO: function( elem, match, i, array ) {
+ var name = match[1],
+ filter = Expr.filters[ name ];
+
+ if ( filter ) {
+ return filter( elem, i, match, array );
+
+ } else if ( name === "contains" ) {
+ return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
+
+ } else if ( name === "not" ) {
+ var not = match[3];
+
+ for ( var j = 0, l = not.length; j < l; j++ ) {
+ if ( not[j] === elem ) {
+ return false;
+ }
+ }
+
+ return true;
+
+ } else {
+ Sizzle.error( name );
+ }
+ },
+
+ CHILD: function( elem, match ) {
+ var type = match[1],
+ node = elem;
+
+ switch ( type ) {
+ case "only":
+ case "first":
+ while ( (node = node.previousSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+
+ if ( type === "first" ) {
+ return true;
+ }
+
+ node = elem;
+
+ case "last":
+ while ( (node = node.nextSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+
+ return true;
+
+ case "nth":
+ var first = match[2],
+ last = match[3];
+
+ if ( first === 1 && last === 0 ) {
+ return true;
+ }
+
+ var doneName = match[0],
+ parent = elem.parentNode;
+
+ if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
+ var count = 0;
+
+ for ( node = parent.firstChild; node; node = node.nextSibling ) {
+ if ( node.nodeType === 1 ) {
+ node.nodeIndex = ++count;
+ }
+ }
+
+ parent.sizcache = doneName;
+ }
+
+ var diff = elem.nodeIndex - last;
+
+ if ( first === 0 ) {
+ return diff === 0;
+
+ } else {
+ return ( diff % first === 0 && diff / first >= 0 );
+ }
+ }
+ },
+
+ ID: function( elem, match ) {
+ return elem.nodeType === 1 && elem.getAttribute("id") === match;
+ },
+
+ TAG: function( elem, match ) {
+ return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
+ },
+
+ CLASS: function( elem, match ) {
+ return (" " + (elem.className || elem.getAttribute("class")) + " ")
+ .indexOf( match ) > -1;
+ },
+
+ ATTR: function( elem, match ) {
+ var name = match[1],
+ result = Expr.attrHandle[ name ] ?
+ Expr.attrHandle[ name ]( elem ) :
+ elem[ name ] != null ?
+ elem[ name ] :
+ elem.getAttribute( name ),
+ value = result + "",
+ type = match[2],
+ check = match[4];
+
+ return result == null ?
+ type === "!=" :
+ type === "=" ?
+ value === check :
+ type === "*=" ?
+ value.indexOf(check) >= 0 :
+ type === "~=" ?
+ (" " + value + " ").indexOf(check) >= 0 :
+ !check ?
+ value && result !== false :
+ type === "!=" ?
+ value !== check :
+ type === "^=" ?
+ value.indexOf(check) === 0 :
+ type === "$=" ?
+ value.substr(value.length - check.length) === check :
+ type === "|=" ?
+ value === check || value.substr(0, check.length + 1) === check + "-" :
+ false;
+ },
+
+ POS: function( elem, match, i, array ) {
+ var name = match[2],
+ filter = Expr.setFilters[ name ];
+
+ if ( filter ) {
+ return filter( elem, i, match, array );
+ }
+ }
+ }
+};
+
+var origPOS = Expr.match.POS,
+ fescape = function(all, num){
+ return "\\" + (num - 0 + 1);
+ };
+
+for ( var type in Expr.match ) {
+ Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
+ Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+}
+
+var makeArray = function( array, results ) {
+ array = Array.prototype.slice.call( array, 0 );
+
+ if ( results ) {
+ results.push.apply( results, array );
+ return results;
+ }
+
+ return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+ Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch( e ) {
+ makeArray = function( array, results ) {
+ var i = 0,
+ ret = results || [];
+
+ if ( toString.call(array) === "[object Array]" ) {
+ Array.prototype.push.apply( ret, array );
+
+ } else {
+ if ( typeof array.length === "number" ) {
+ for ( var l = array.length; i < l; i++ ) {
+ ret.push( array[i] );
+ }
+
+ } else {
+ for ( ; array[i]; i++ ) {
+ ret.push( array[i] );
+ }
+ }
+ }
+
+ return ret;
+ };
+}
+
+var sortOrder, siblingCheck;
+
+if ( document.documentElement.compareDocumentPosition ) {
+ sortOrder = function( a, b ) {
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+ return a.compareDocumentPosition ? -1 : 1;
+ }
+
+ return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+ };
+
+} else {
+ sortOrder = function( a, b ) {
+ // The nodes are identical, we can exit early
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+
+ // Fallback to using sourceIndex (in IE) if it's available on both nodes
+ } else if ( a.sourceIndex && b.sourceIndex ) {
+ return a.sourceIndex - b.sourceIndex;
+ }
+
+ var al, bl,
+ ap = [],
+ bp = [],
+ aup = a.parentNode,
+ bup = b.parentNode,
+ cur = aup;
+
+ // If the nodes are siblings (or identical) we can do a quick check
+ if ( aup === bup ) {
+ return siblingCheck( a, b );
+
+ // If no parents were found then the nodes are disconnected
+ } else if ( !aup ) {
+ return -1;
+
+ } else if ( !bup ) {
+ return 1;
+ }
+
+ // Otherwise they're somewhere else in the tree so we need
+ // to build up a full list of the parentNodes for comparison
+ while ( cur ) {
+ ap.unshift( cur );
+ cur = cur.parentNode;
+ }
+
+ cur = bup;
+
+ while ( cur ) {
+ bp.unshift( cur );
+ cur = cur.parentNode;
+ }
+
+ al = ap.length;
+ bl = bp.length;
+
+ // Start walking down the tree looking for a discrepancy
+ for ( var i = 0; i < al && i < bl; i++ ) {
+ if ( ap[i] !== bp[i] ) {
+ return siblingCheck( ap[i], bp[i] );
+ }
+ }
+
+ // We ended someplace up the tree so do a sibling check
+ return i === al ?
+ siblingCheck( a, bp[i], -1 ) :
+ siblingCheck( ap[i], b, 1 );
+ };
+
+ siblingCheck = function( a, b, ret ) {
+ if ( a === b ) {
+ return ret;
+ }
+
+ var cur = a.nextSibling;
+
+ while ( cur ) {
+ if ( cur === b ) {
+ return -1;
+ }
+
+ cur = cur.nextSibling;
+ }
+
+ return 1;
+ };
+}
+
+// Utility function for retreiving the text value of an array of DOM nodes
+Sizzle.getText = function( elems ) {
+ var ret = "", elem;
+
+ for ( var i = 0; elems[i]; i++ ) {
+ elem = elems[i];
+
+ // Get the text from text nodes and CDATA nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
+ ret += elem.nodeValue;
+
+ // Traverse everything else, except comment nodes
+ } else if ( elem.nodeType !== 8 ) {
+ ret += Sizzle.getText( elem.childNodes );
+ }
+ }
+
+ return ret;
+};
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+ // We're going to inject a fake input element with a specified name
+ var form = document.createElement("div"),
+ id = "script" + (new Date()).getTime(),
+ root = document.documentElement;
+
+ form.innerHTML = "<a name='" + id + "'/>";
+
+ // Inject it into the root element, check its status, and remove it quickly
+ root.insertBefore( form, root.firstChild );
+
+ // The workaround has to do additional checks after a getElementById
+ // Which slows things down for other browsers (hence the branching)
+ if ( document.getElementById( id ) ) {
+ Expr.find.ID = function( match, context, isXML ) {
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
+ var m = context.getElementById(match[1]);
+
+ return m ?
+ m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
+ [m] :
+ undefined :
+ [];
+ }
+ };
+
+ Expr.filter.ID = function( elem, match ) {
+ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+
+ return elem.nodeType === 1 && node && node.nodeValue === match;
+ };
+ }
+
+ root.removeChild( form );
+
+ // release memory in IE
+ root = form = null;
+})();
+
+(function(){
+ // Check to see if the browser returns only elements
+ // when doing getElementsByTagName("*")
+
+ // Create a fake element
+ var div = document.createElement("div");
+ div.appendChild( document.createComment("") );
+
+ // Make sure no comments are found
+ if ( div.getElementsByTagName("*").length > 0 ) {
+ Expr.find.TAG = function( match, context ) {
+ var results = context.getElementsByTagName( match[1] );
+
+ // Filter out possible comments
+ if ( match[1] === "*" ) {
+ var tmp = [];
+
+ for ( var i = 0; results[i]; i++ ) {
+ if ( results[i].nodeType === 1 ) {
+ tmp.push( results[i] );
+ }
+ }
+
+ results = tmp;
+ }
+
+ return results;
+ };
+ }
+
+ // Check to see if an attribute returns normalized href attributes
+ div.innerHTML = "<a href='#'></a>";
+
+ if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+ div.firstChild.getAttribute("href") !== "#" ) {
+
+ Expr.attrHandle.href = function( elem ) {
+ return elem.getAttribute( "href", 2 );
+ };
+ }
+
+ // release memory in IE
+ div = null;
+})();
+
+if ( document.querySelectorAll ) {
+ (function(){
+ var oldSizzle = Sizzle,
+ div = document.createElement("div"),
+ id = "__sizzle__";
+
+ div.innerHTML = "<p class='TEST'></p>";
+
+ // Safari can't handle uppercase or unicode characters when
+ // in quirks mode.
+ if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+ return;
+ }
+
+ Sizzle = function( query, context, extra, seed ) {
+ context = context || document;
+
+ // Only use querySelectorAll on non-XML documents
+ // (ID selectors don't work in non-HTML documents)
+ if ( !seed && !Sizzle.isXML(context) ) {
+ // See if we find a selector to speed up
+ var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+
+ if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+ // Speed-up: Sizzle("TAG")
+ if ( match[1] ) {
+ return makeArray( context.getElementsByTagName( query ), extra );
+
+ // Speed-up: Sizzle(".CLASS")
+ } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+ return makeArray( context.getElementsByClassName( match[2] ), extra );
+ }
+ }
+
+ if ( context.nodeType === 9 ) {
+ // Speed-up: Sizzle("body")
+ // The body element only exists once, optimize finding it
+ if ( query === "body" && context.body ) {
+ return makeArray( [ context.body ], extra );
+
+ // Speed-up: Sizzle("#ID")
+ } else if ( match && match[3] ) {
+ var elem = context.getElementById( match[3] );
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id === match[3] ) {
+ return makeArray( [ elem ], extra );
+ }
+
+ } else {
+ return makeArray( [], extra );
+ }
+ }
+
+ try {
+ return makeArray( context.querySelectorAll(query), extra );
+ } catch(qsaError) {}
+
+ // qSA works strangely on Element-rooted queries
+ // We can work around this by specifying an extra ID on the root
+ // and working up from there (Thanks to Andrew Dupont for the technique)
+ // IE 8 doesn't work on object elements
+ } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+ var oldContext = context,
+ old = context.getAttribute( "id" ),
+ nid = old || id,
+ hasParent = context.parentNode,
+ relativeHierarchySelector = /^\s*[+~]/.test( query );
+
+ if ( !old ) {
+ context.setAttribute( "id", nid );
+ } else {
+ nid = nid.replace( /'/g, "\\$&" );
+ }
+ if ( relativeHierarchySelector && hasParent ) {
+ context = context.parentNode;
+ }
+
+ try {
+ if ( !relativeHierarchySelector || hasParent ) {
+ return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+ }
+
+ } catch(pseudoError) {
+ } finally {
+ if ( !old ) {
+ oldContext.removeAttribute( "id" );
+ }
+ }
+ }
+ }
+
+ return oldSizzle(query, context, extra, seed);
+ };
+
+ for ( var prop in oldSizzle ) {
+ Sizzle[ prop ] = oldSizzle[ prop ];
+ }
+
+ // release memory in IE
+ div = null;
+ })();
+}
+
+(function(){
+ var html = document.documentElement,
+ matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
+
+ if ( matches ) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9 fails this)
+ var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+ pseudoWorks = false;
+
+ try {
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call( document.documentElement, "[test!='']:sizzle" );
+
+ } catch( pseudoError ) {
+ pseudoWorks = true;
+ }
+
+ Sizzle.matchesSelector = function( node, expr ) {
+ // Make sure that attribute selectors are quoted
+ expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+
+ if ( !Sizzle.isXML( node ) ) {
+ try {
+ if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+ var ret = matches.call( node, expr );
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if ( ret || !disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9, so check for that
+ node.document && node.document.nodeType !== 11 ) {
+ return ret;
+ }
+ }
+ } catch(e) {}
+ }
+
+ return Sizzle(expr, null, null, [node]).length > 0;
+ };
+ }
+})();
+
+(function(){
+ var div = document.createElement("div");
+
+ div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+ // Opera can't find a second classname (in 9.6)
+ // Also, make sure that getElementsByClassName actually exists
+ if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+ return;
+ }
+
+ // Safari caches class attributes, doesn't catch changes (in 3.2)
+ div.lastChild.className = "e";
+
+ if ( div.getElementsByClassName("e").length === 1 ) {
+ return;
+ }
+
+ Expr.order.splice(1, 0, "CLASS");
+ Expr.find.CLASS = function( match, context, isXML ) {
+ if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+ return context.getElementsByClassName(match[1]);
+ }
+ };
+
+ // release memory in IE
+ div = null;
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+
+ if ( elem ) {
+ var match = false;
+
+ elem = elem[dir];
+
+ while ( elem ) {
+ if ( elem.sizcache === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 && !isXML ){
+ elem.sizcache = doneName;
+ elem.sizset = i;
+ }
+
+ if ( elem.nodeName.toLowerCase() === cur ) {
+ match = elem;
+ break;
+ }
+
+ elem = elem[dir];
+ }
+
+ checkSet[i] = match;
+ }
+ }
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+
+ if ( elem ) {
+ var match = false;
+
+ elem = elem[dir];
+
+ while ( elem ) {
+ if ( elem.sizcache === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 ) {
+ if ( !isXML ) {
+ elem.sizcache = doneName;
+ elem.sizset = i;
+ }
+
+ if ( typeof cur !== "string" ) {
+ if ( elem === cur ) {
+ match = true;
+ break;
+ }
+
+ } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+ match = elem;
+ break;
+ }
+ }
+
+ elem = elem[dir];
+ }
+
+ checkSet[i] = match;
+ }
+ }
+}
+
+if ( document.documentElement.contains ) {
+ Sizzle.contains = function( a, b ) {
+ return a !== b && (a.contains ? a.contains(b) : true);
+ };
+
+} else if ( document.documentElement.compareDocumentPosition ) {
+ Sizzle.contains = function( a, b ) {
+ return !!(a.compareDocumentPosition(b) & 16);
+ };
+
+} else {
+ Sizzle.contains = function() {
+ return false;
+ };
+}
+
+Sizzle.isXML = function( elem ) {
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function( selector, context ) {
+ var match,
+ tmpSet = [],
+ later = "",
+ root = context.nodeType ? [context] : context;
+
+ // Position selectors must be done after the filter
+ // And so must :not(positional) so we move all PSEUDOs to the end
+ while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+ later += match[0];
+ selector = selector.replace( Expr.match.PSEUDO, "" );
+ }
+
+ selector = Expr.relative[selector] ? selector + "*" : selector;
+
+ for ( var i = 0, l = root.length; i < l; i++ ) {
+ Sizzle( selector, root[i], tmpSet );
+ }
+
+ return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.filters;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})();
+
+
+var runtil = /Until$/,
+ rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+ // Note: This RegExp should be improved, or likely pulled from Sizzle
+ rmultiselector = /,/,
+ isSimple = /^.[^:#\[\.,]*$/,
+ slice = Array.prototype.slice,
+ POS = jQuery.expr.match.POS,
+ // methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+
+jQuery.fn.extend({
+ find: function( selector ) {
+ var self = this,
+ i, l;
+
+ if ( typeof selector !== "string" ) {
+ return jQuery( selector ).filter(function() {
+ for ( i = 0, l = self.length; i < l; i++ ) {
+ if ( jQuery.contains( self[ i ], this ) ) {
+ return true;
+ }
+ }
+ });
+ }
+
+ var ret = this.pushStack( "", "find", selector ),
+ length, n, r;
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ length = ret.length;
+ jQuery.find( selector, this[i], ret );
+
+ if ( i > 0 ) {
+ // Make sure that the results are unique
+ for ( n = length; n < ret.length; n++ ) {
+ for ( r = 0; r < length; r++ ) {
+ if ( ret[r] === ret[n] ) {
+ ret.splice(n--, 1);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ return ret;
+ },
+
+ has: function( target ) {
+ var targets = jQuery( target );
+ return this.filter(function() {
+ for ( var i = 0, l = targets.length; i < l; i++ ) {
+ if ( jQuery.contains( this, targets[i] ) ) {
+ return true;
+ }
+ }
+ });
+ },
+
+ not: function( selector ) {
+ return this.pushStack( winnow(this, selector, false), "not", selector);
+ },
+
+ filter: function( selector ) {
+ return this.pushStack( winnow(this, selector, true), "filter", selector );
+ },
+
+ is: function( selector ) {
+ return !!selector && ( typeof selector === "string" ?
+ jQuery.filter( selector, this ).length > 0 :
+ this.filter( selector ).length > 0 );
+ },
+
+ closest: function( selectors, context ) {
+ var ret = [], i, l, cur = this[0];
+
+ // Array
+ if ( jQuery.isArray( selectors ) ) {
+ var match, selector,
+ matches = {},
+ level = 1;
+
+ if ( cur && selectors.length ) {
+ for ( i = 0, l = selectors.length; i < l; i++ ) {
+ selector = selectors[i];
+
+ if ( !matches[ selector ] ) {
+ matches[ selector ] = POS.test( selector ) ?
+ jQuery( selector, context || this.context ) :
+ selector;
+ }
+ }
+
+ while ( cur && cur.ownerDocument && cur !== context ) {
+ for ( selector in matches ) {
+ match = matches[ selector ];
+
+ if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {
+ ret.push({ selector: selector, elem: cur, level: level });
+ }
+ }
+
+ cur = cur.parentNode;
+ level++;
+ }
+ }
+
+ return ret;
+ }
+
+ // String
+ var pos = POS.test( selectors ) || typeof selectors !== "string" ?
+ jQuery( selectors, context || this.context ) :
+ 0;
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ cur = this[i];
+
+ while ( cur ) {
+ if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+ ret.push( cur );
+ break;
+
+ } else {
+ cur = cur.parentNode;
+ if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
+ break;
+ }
+ }
+ }
+ }
+
+ ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+
+ return this.pushStack( ret, "closest", selectors );
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ index: function( elem ) {
+
+ // No argument, return index in parent
+ if ( !elem ) {
+ return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
+ }
+
+ // index in selector
+ if ( typeof elem === "string" ) {
+ return jQuery.inArray( this[0], jQuery( elem ) );
+ }
+
+ // Locate the position of the desired element
+ return jQuery.inArray(
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[0] : elem, this );
+ },
+
+ add: function( selector, context ) {
+ var set = typeof selector === "string" ?
+ jQuery( selector, context ) :
+ jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+ all = jQuery.merge( this.get(), set );
+
+ return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+ all :
+ jQuery.unique( all ) );
+ },
+
+ andSelf: function() {
+ return this.add( this.prevObject );
+ }
+});
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+ return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+jQuery.each({
+ parent: function( elem ) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function( elem ) {
+ return jQuery.dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return jQuery.nth( elem, 2, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return jQuery.nth( elem, 2, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return jQuery.dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return jQuery.dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return jQuery.sibling( elem.parentNode.firstChild, elem );
+ },
+ children: function( elem ) {
+ return jQuery.sibling( elem.firstChild );
+ },
+ contents: function( elem ) {
+ return jQuery.nodeName( elem, "iframe" ) ?
+ elem.contentDocument || elem.contentWindow.document :
+ jQuery.makeArray( elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var ret = jQuery.map( this, fn, until ),
+ // The variable 'args' was introduced in
+ // https://github.com/jquery/jquery/commit/52a0238
+ // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
+ // http://code.google.com/p/v8/issues/detail?id=1050
+ args = slice.call(arguments);
+
+ if ( !runtil.test( name ) ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ ret = jQuery.filter( selector, ret );
+ }
+
+ ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+ if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+ ret = ret.reverse();
+ }
+
+ return this.pushStack( ret, name, args.join(",") );
+ };
+});
+
+jQuery.extend({
+ filter: function( expr, elems, not ) {
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ return elems.length === 1 ?
+ jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+ jQuery.find.matches(expr, elems);
+ },
+
+ dir: function( elem, dir, until ) {
+ var matched = [],
+ cur = elem[ dir ];
+
+ while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+ if ( cur.nodeType === 1 ) {
+ matched.push( cur );
+ }
+ cur = cur[dir];
+ }
+ return matched;
+ },
+
+ nth: function( cur, result, dir, elem ) {
+ result = result || 1;
+ var num = 0;
+
+ for ( ; cur; cur = cur[dir] ) {
+ if ( cur.nodeType === 1 && ++num === result ) {
+ break;
+ }
+ }
+
+ return cur;
+ },
+
+ sibling: function( n, elem ) {
+ var r = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ r.push( n );
+ }
+ }
+
+ return r;
+ }
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+ // Can't pass null or undefined to indexOf in Firefox 4
+ // Set to 0 to skip string check
+ qualifier = qualifier || 0;
+
+ if ( jQuery.isFunction( qualifier ) ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ var retVal = !!qualifier.call( elem, i, elem );
+ return retVal === keep;
+ });
+
+ } else if ( qualifier.nodeType ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ return (elem === qualifier) === keep;
+ });
+
+ } else if ( typeof qualifier === "string" ) {
+ var filtered = jQuery.grep(elements, function( elem ) {
+ return elem.nodeType === 1;
+ });
+
+ if ( isSimple.test( qualifier ) ) {
+ return jQuery.filter(qualifier, filtered, !keep);
+ } else {
+ qualifier = jQuery.filter( qualifier, filtered );
+ }
+ }
+
+ return jQuery.grep(elements, function( elem, i ) {
+ return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
+ });
+}
+
+
+
+
+var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+ rleadingWhitespace = /^\s+/,
+ rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+ rtagName = /<([\w:]+)/,
+ rtbody = /<tbody/i,
+ rhtml = /<|&#?\w+;/,
+ rnocache = /<(?:script|object|embed|option|style)/i,
+ // checked="checked" or checked
+ rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+ rscriptType = /\/(java|ecma)script/i,
+ rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
+ wrapMap = {
+ option: [ 1, "<select multiple='multiple'>", "</select>" ],
+ legend: [ 1, "<fieldset>", "</fieldset>" ],
+ thead: [ 1, "<table>", "</table>" ],
+ tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+ td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+ col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+ area: [ 1, "<map>", "</map>" ],
+ _default: [ 0, "", "" ]
+ };
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE can't serialize <link> and <script> tags normally
+if ( !jQuery.support.htmlSerialize ) {
+ wrapMap._default = [ 1, "div<div>", "</div>" ];
+}
+
+jQuery.fn.extend({
+ text: function( text ) {
+ if ( jQuery.isFunction(text) ) {
+ return this.each(function(i) {
+ var self = jQuery( this );
+
+ self.text( text.call(this, i, self.text()) );
+ });
+ }
+
+ if ( typeof text !== "object" && text !== undefined ) {
+ return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+ }
+
+ return jQuery.text( this );
+ },
+
+ wrapAll: function( html ) {
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function(i) {
+ jQuery(this).wrapAll( html.call(this, i) );
+ });
+ }
+
+ if ( this[0] ) {
+ // The elements to wrap the target around
+ var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+ if ( this[0].parentNode ) {
+ wrap.insertBefore( this[0] );
+ }
+
+ wrap.map(function() {
+ var elem = this;
+
+ while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+ elem = elem.firstChild;
+ }
+
+ return elem;
+ }).append( this );
+ }
+
+ return this;
+ },
+
+ wrapInner: function( html ) {
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function(i) {
+ jQuery(this).wrapInner( html.call(this, i) );
+ });
+ }
+
+ return this.each(function() {
+ var self = jQuery( this ),
+ contents = self.contents();
+
+ if ( contents.length ) {
+ contents.wrapAll( html );
+
+ } else {
+ self.append( html );
+ }
+ });
+ },
+
+ wrap: function( html ) {
+ return this.each(function() {
+ jQuery( this ).wrapAll( html );
+ });
+ },
+
+ unwrap: function() {
+ return this.parent().each(function() {
+ if ( !jQuery.nodeName( this, "body" ) ) {
+ jQuery( this ).replaceWith( this.childNodes );
+ }
+ }).end();
+ },
+
+ append: function() {
+ return this.domManip(arguments, true, function( elem ) {
+ if ( this.nodeType === 1 ) {
+ this.appendChild( elem );
+ }
+ });
+ },
+
+ prepend: function() {
+ return this.domManip(arguments, true, function( elem ) {
+ if ( this.nodeType === 1 ) {
+ this.insertBefore( elem, this.firstChild );
+ }
+ });
+ },
+
+ before: function() {
+ if ( this[0] && this[0].parentNode ) {
+ return this.domManip(arguments, false, function( elem ) {
+ this.parentNode.insertBefore( elem, this );
+ });
+ } else if ( arguments.length ) {
+ var set = jQuery(arguments[0]);
+ set.push.apply( set, this.toArray() );
+ return this.pushStack( set, "before", arguments );
+ }
+ },
+
+ after: function() {
+ if ( this[0] && this[0].parentNode ) {
+ return this.domManip(arguments, false, function( elem ) {
+ this.parentNode.insertBefore( elem, this.nextSibling );
+ });
+ } else if ( arguments.length ) {
+ var set = this.pushStack( this, "after", arguments );
+ set.push.apply( set, jQuery(arguments[0]).toArray() );
+ return set;
+ }
+ },
+
+ // keepData is for internal use only--do not document
+ remove: function( selector, keepData ) {
+ for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+ if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+ if ( !keepData && elem.nodeType === 1 ) {
+ jQuery.cleanData( elem.getElementsByTagName("*") );
+ jQuery.cleanData( [ elem ] );
+ }
+
+ if ( elem.parentNode ) {
+ elem.parentNode.removeChild( elem );
+ }
+ }
+ }
+
+ return this;
+ },
+
+ empty: function() {
+ for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+ // Remove element nodes and prevent memory leaks
+ if ( elem.nodeType === 1 ) {
+ jQuery.cleanData( elem.getElementsByTagName("*") );
+ }
+
+ // Remove any remaining nodes
+ while ( elem.firstChild ) {
+ elem.removeChild( elem.firstChild );
+ }
+ }
+
+ return this;
+ },
+
+ clone: function( dataAndEvents, deepDataAndEvents ) {
+ dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+ deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+ return this.map( function () {
+ return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+ });
+ },
+
+ html: function( value ) {
+ if ( value === undefined ) {
+ return this[0] && this[0].nodeType === 1 ?
+ this[0].innerHTML.replace(rinlinejQuery, "") :
+ null;
+
+ // See if we can take a shortcut and just use innerHTML
+ } else if ( typeof value === "string" && !rnocache.test( value ) &&
+ (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
+ !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
+
+ value = value.replace(rxhtmlTag, "<$1></$2>");
+
+ try {
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ // Remove element nodes and prevent memory leaks
+ if ( this[i].nodeType === 1 ) {
+ jQuery.cleanData( this[i].getElementsByTagName("*") );
+ this[i].innerHTML = value;
+ }
+ }
+
+ // If using innerHTML throws an exception, use the fallback method
+ } catch(e) {
+ this.empty().append( value );
+ }
+
+ } else if ( jQuery.isFunction( value ) ) {
+ this.each(function(i){
+ var self = jQuery( this );
+
+ self.html( value.call(this, i, self.html()) );
+ });
+
+ } else {
+ this.empty().append( value );
+ }
+
+ return this;
+ },
+
+ replaceWith: function( value ) {
+ if ( this[0] && this[0].parentNode ) {
+ // Make sure that the elements are removed from the DOM before they are inserted
+ // this can help fix replacing a parent with child elements
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function(i) {
+ var self = jQuery(this), old = self.html();
+ self.replaceWith( value.call( this, i, old ) );
+ });
+ }
+
+ if ( typeof value !== "string" ) {
+ value = jQuery( value ).detach();
+ }
+
+ return this.each(function() {
+ var next = this.nextSibling,
+ parent = this.parentNode;
+
+ jQuery( this ).remove();
+
+ if ( next ) {
+ jQuery(next).before( value );
+ } else {
+ jQuery(parent).append( value );
+ }
+ });
+ } else {
+ return this.length ?
+ this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+ this;
+ }
+ },
+
+ detach: function( selector ) {
+ return this.remove( selector, true );
+ },
+
+ domManip: function( args, table, callback ) {
+ var results, first, fragment, parent,
+ value = args[0],
+ scripts = [];
+
+ // We can't cloneNode fragments that contain checked, in WebKit
+ if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+ return this.each(function() {
+ jQuery(this).domManip( args, table, callback, true );
+ });
+ }
+
+ if ( jQuery.isFunction(value) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ args[0] = value.call(this, i, table ? self.html() : undefined);
+ self.domManip( args, table, callback );
+ });
+ }
+
+ if ( this[0] ) {
+ parent = value && value.parentNode;
+
+ // If we're in a fragment, just use that instead of building a new one
+ if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+ results = { fragment: parent };
+
+ } else {
+ results = jQuery.buildFragment( args, this, scripts );
+ }
+
+ fragment = results.fragment;
+
+ if ( fragment.childNodes.length === 1 ) {
+ first = fragment = fragment.firstChild;
+ } else {
+ first = fragment.firstChild;
+ }
+
+ if ( first ) {
+ table = table && jQuery.nodeName( first, "tr" );
+
+ for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
+ callback.call(
+ table ?
+ root(this[i], first) :
+ this[i],
+ // Make sure that we do not leak memory by inadvertently discarding
+ // the original fragment (which might have attached data) instead of
+ // using it; in addition, use the original fragment object for the last
+ // item instead of first because it can end up being emptied incorrectly
+ // in certain situations (Bug #8070).
+ // Fragments from the fragment cache must always be cloned and never used
+ // in place.
+ results.cacheable || (l > 1 && i < lastIndex) ?
+ jQuery.clone( fragment, true, true ) :
+ fragment
+ );
+ }
+ }
+
+ if ( scripts.length ) {
+ jQuery.each( scripts, evalScript );
+ }
+ }
+
+ return this;
+ }
+});
+
+function root( elem, cur ) {
+ return jQuery.nodeName(elem, "table") ?
+ (elem.getElementsByTagName("tbody")[0] ||
+ elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+ elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+
+ if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+ return;
+ }
+
+ var internalKey = jQuery.expando,
+ oldData = jQuery.data( src ),
+ curData = jQuery.data( dest, oldData );
+
+ // Switch to use the internal data object, if it exists, for the next
+ // stage of data copying
+ if ( (oldData = oldData[ internalKey ]) ) {
+ var events = oldData.events;
+ curData = curData[ internalKey ] = jQuery.extend({}, oldData);
+
+ if ( events ) {
+ delete curData.handle;
+ curData.events = {};
+
+ for ( var type in events ) {
+ for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
+ jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
+ }
+ }
+ }
+ }
+}
+
+function cloneFixAttributes( src, dest ) {
+ var nodeName;
+
+ // We do not need to do anything for non-Elements
+ if ( dest.nodeType !== 1 ) {
+ return;
+ }
+
+ // clearAttributes removes the attributes, which we don't want,
+ // but also removes the attachEvent events, which we *do* want
+ if ( dest.clearAttributes ) {
+ dest.clearAttributes();
+ }
+
+ // mergeAttributes, in contrast, only merges back on the
+ // original attributes, not the events
+ if ( dest.mergeAttributes ) {
+ dest.mergeAttributes( src );
+ }
+
+ nodeName = dest.nodeName.toLowerCase();
+
+ // IE6-8 fail to clone children inside object elements that use
+ // the proprietary classid attribute value (rather than the type
+ // attribute) to identify the type of content to display
+ if ( nodeName === "object" ) {
+ dest.outerHTML = src.outerHTML;
+
+ } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
+ // IE6-8 fails to persist the checked state of a cloned checkbox
+ // or radio button. Worse, IE6-7 fail to give the cloned element
+ // a checked appearance if the defaultChecked value isn't also set
+ if ( src.checked ) {
+ dest.defaultChecked = dest.checked = src.checked;
+ }
+
+ // IE6-7 get confused and end up setting the value of a cloned
+ // checkbox/radio button to an empty string instead of "on"
+ if ( dest.value !== src.value ) {
+ dest.value = src.value;
+ }
+
+ // IE6-8 fails to return the selected option to the default selected
+ // state when cloning options
+ } else if ( nodeName === "option" ) {
+ dest.selected = src.defaultSelected;
+
+ // IE6-8 fails to set the defaultValue to the correct value when
+ // cloning other types of input fields
+ } else if ( nodeName === "input" || nodeName === "textarea" ) {
+ dest.defaultValue = src.defaultValue;
+ }
+
+ // Event data gets referenced instead of copied if the expando
+ // gets copied too
+ dest.removeAttribute( jQuery.expando );
+}
+
+jQuery.buildFragment = function( args, nodes, scripts ) {
+ var fragment, cacheable, cacheresults, doc;
+
+ // nodes may contain either an explicit document object,
+ // a jQuery collection or context object.
+ // If nodes[0] contains a valid object to assign to doc
+ if ( nodes && nodes[0] ) {
+ doc = nodes[0].ownerDocument || nodes[0];
+ }
+
+ // Ensure that an attr object doesn't incorrectly stand in as a document object
+ // Chrome and Firefox seem to allow this to occur and will throw exception
+ // Fixes #8950
+ if ( !doc.createDocumentFragment ) {
+ doc = document;
+ }
+
+ // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
+ // Cloning options loses the selected state, so don't cache them
+ // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+ // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+ if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
+ args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
+
+ cacheable = true;
+
+ cacheresults = jQuery.fragments[ args[0] ];
+ if ( cacheresults && cacheresults !== 1 ) {
+ fragment = cacheresults;
+ }
+ }
+
+ if ( !fragment ) {
+ fragment = doc.createDocumentFragment();
+ jQuery.clean( args, doc, fragment, scripts );
+ }
+
+ if ( cacheable ) {
+ jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
+ }
+
+ return { fragment: fragment, cacheable: cacheable };
+};
+
+jQuery.fragments = {};
+
+jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+}, function( name, original ) {
+ jQuery.fn[ name ] = function( selector ) {
+ var ret = [],
+ insert = jQuery( selector ),
+ parent = this.length === 1 && this[0].parentNode;
+
+ if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+ insert[ original ]( this[0] );
+ return this;
+
+ } else {
+ for ( var i = 0, l = insert.length; i < l; i++ ) {
+ var elems = (i > 0 ? this.clone(true) : this).get();
+ jQuery( insert[i] )[ original ]( elems );
+ ret = ret.concat( elems );
+ }
+
+ return this.pushStack( ret, name, insert.selector );
+ }
+ };
+});
+
+function getAll( elem ) {
+ if ( "getElementsByTagName" in elem ) {
+ return elem.getElementsByTagName( "*" );
+
+ } else if ( "querySelectorAll" in elem ) {
+ return elem.querySelectorAll( "*" );
+
+ } else {
+ return [];
+ }
+}
+
+// Used in clean, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+ if ( elem.type === "checkbox" || elem.type === "radio" ) {
+ elem.defaultChecked = elem.checked;
+ }
+}
+// Finds all inputs and passes them to fixDefaultChecked
+function findInputs( elem ) {
+ if ( jQuery.nodeName( elem, "input" ) ) {
+ fixDefaultChecked( elem );
+ } else if ( "getElementsByTagName" in elem ) {
+ jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+ }
+}
+
+jQuery.extend({
+ clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+ var clone = elem.cloneNode(true),
+ srcElements,
+ destElements,
+ i;
+
+ if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+ (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+ // IE copies events bound via attachEvent when using cloneNode.
+ // Calling detachEvent on the clone will also remove the events
+ // from the original. In order to get around this, we use some
+ // proprietary methods to clear the events. Thanks to MooTools
+ // guys for this hotness.
+
+ cloneFixAttributes( elem, clone );
+
+ // Using Sizzle here is crazy slow, so we use getElementsByTagName
+ // instead
+ srcElements = getAll( elem );
+ destElements = getAll( clone );
+
+ // Weird iteration because IE will replace the length property
+ // with an element if you are cloning the body and one of the
+ // elements on the page has a name or id of "length"
+ for ( i = 0; srcElements[i]; ++i ) {
+ // Ensure that the destination node is not null; Fixes #9587
+ if ( destElements[i] ) {
+ cloneFixAttributes( srcElements[i], destElements[i] );
+ }
+ }
+ }
+
+ // Copy the events from the original to the clone
+ if ( dataAndEvents ) {
+ cloneCopyEvent( elem, clone );
+
+ if ( deepDataAndEvents ) {
+ srcElements = getAll( elem );
+ destElements = getAll( clone );
+
+ for ( i = 0; srcElements[i]; ++i ) {
+ cloneCopyEvent( srcElements[i], destElements[i] );
+ }
+ }
+ }
+
+ srcElements = destElements = null;
+
+ // Return the cloned set
+ return clone;
+ },
+
+ clean: function( elems, context, fragment, scripts ) {
+ var checkScriptType;
+
+ context = context || document;
+
+ // !context.createElement fails in IE with an error but returns typeof 'object'
+ if ( typeof context.createElement === "undefined" ) {
+ context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+ }
+
+ var ret = [], j;
+
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ if ( typeof elem === "number" ) {
+ elem += "";
+ }
+
+ if ( !elem ) {
+ continue;
+ }
+
+ // Convert html string into DOM nodes
+ if ( typeof elem === "string" ) {
+ if ( !rhtml.test( elem ) ) {
+ elem = context.createTextNode( elem );
+ } else {
+ // Fix "XHTML"-style tags in all browsers
+ elem = elem.replace(rxhtmlTag, "<$1></$2>");
+
+ // Trim whitespace, otherwise indexOf won't work as expected
+ var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
+ wrap = wrapMap[ tag ] || wrapMap._default,
+ depth = wrap[0],
+ div = context.createElement("div");
+
+ // Go to html and back, then peel off extra wrappers
+ div.innerHTML = wrap[1] + elem + wrap[2];
+
+ // Move to the right depth
+ while ( depth-- ) {
+ div = div.lastChild;
+ }
+
+ // Remove IE's autoinserted <tbody> from table fragments
+ if ( !jQuery.support.tbody ) {
+
+ // String was a <table>, *may* have spurious <tbody>
+ var hasBody = rtbody.test(elem),
+ tbody = tag === "table" && !hasBody ?
+ div.firstChild && div.firstChild.childNodes :
+
+ // String was a bare <thead> or <tfoot>
+ wrap[1] === "<table>" && !hasBody ?
+ div.childNodes :
+ [];
+
+ for ( j = tbody.length - 1; j >= 0 ; --j ) {
+ if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+ tbody[ j ].parentNode.removeChild( tbody[ j ] );
+ }
+ }
+ }
+
+ // IE completely kills leading whitespace when innerHTML is used
+ if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+ div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+ }
+
+ elem = div.childNodes;
+ }
+ }
+
+ // Resets defaultChecked for any radios and checkboxes
+ // about to be appended to the DOM in IE 6/7 (#8060)
+ var len;
+ if ( !jQuery.support.appendChecked ) {
+ if ( elem[0] && typeof (len = elem.length) === "number" ) {
+ for ( j = 0; j < len; j++ ) {
+ findInputs( elem[j] );
+ }
+ } else {
+ findInputs( elem );
+ }
+ }
+
+ if ( elem.nodeType ) {
+ ret.push( elem );
+ } else {
+ ret = jQuery.merge( ret, elem );
+ }
+ }
+
+ if ( fragment ) {
+ checkScriptType = function( elem ) {
+ return !elem.type || rscriptType.test( elem.type );
+ };
+ for ( i = 0; ret[i]; i++ ) {
+ if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
+ scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
+
+ } else {
+ if ( ret[i].nodeType === 1 ) {
+ var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
+
+ ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+ }
+ fragment.appendChild( ret[i] );
+ }
+ }
+ }
+
+ return ret;
+ },
+
+ cleanData: function( elems ) {
+ var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
+ deleteExpando = jQuery.support.deleteExpando;
+
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+ continue;
+ }
+
+ id = elem[ jQuery.expando ];
+
+ if ( id ) {
+ data = cache[ id ] && cache[ id ][ internalKey ];
+
+ if ( data && data.events ) {
+ for ( var type in data.events ) {
+ if ( special[ type ] ) {
+ jQuery.event.remove( elem, type );
+
+ // This is a shortcut to avoid jQuery.event.remove's overhead
+ } else {
+ jQuery.removeEvent( elem, type, data.handle );
+ }
+ }
+
+ // Null the DOM reference to avoid IE6/7/8 leak (#7054)
+ if ( data.handle ) {
+ data.handle.elem = null;
+ }
+ }
+
+ if ( deleteExpando ) {
+ delete elem[ jQuery.expando ];
+
+ } else if ( elem.removeAttribute ) {
+ elem.removeAttribute( jQuery.expando );
+ }
+
+ delete cache[ id ];
+ }
+ }
+ }
+});
+
+function evalScript( i, elem ) {
+ if ( elem.src ) {
+ jQuery.ajax({
+ url: elem.src,
+ async: false,
+ dataType: "script"
+ });
+ } else {
+ jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
+ }
+
+ if ( elem.parentNode ) {
+ elem.parentNode.removeChild( elem );
+ }
+}
+
+
+
+
+var ralpha = /alpha\([^)]*\)/i,
+ ropacity = /opacity=([^)]*)/,
+ // fixed for IE9, see #8346
+ rupper = /([A-Z]|^ms)/g,
+ rnumpx = /^-?\d+(?:px)?$/i,
+ rnum = /^-?\d/,
+ rrelNum = /^([\-+])=([\-+.\de]+)/,
+
+ cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+ cssWidth = [ "Left", "Right" ],
+ cssHeight = [ "Top", "Bottom" ],
+ curCSS,
+
+ getComputedStyle,
+ currentStyle;
+
+jQuery.fn.css = function( name, value ) {
+ // Setting 'undefined' is a no-op
+ if ( arguments.length === 2 && value === undefined ) {
+ return this;
+ }
+
+ return jQuery.access( this, name, value, true, function( elem, name, value ) {
+ return value !== undefined ?
+ jQuery.style( elem, name, value ) :
+ jQuery.css( elem, name );
+ });
+};
+
+jQuery.extend({
+ // Add in style property hooks for overriding the default
+ // behavior of getting and setting a style property
+ cssHooks: {
+ opacity: {
+ get: function( elem, computed ) {
+ if ( computed ) {
+ // We should always get a number back from opacity
+ var ret = curCSS( elem, "opacity", "opacity" );
+ return ret === "" ? "1" : ret;
+
+ } else {
+ return elem.style.opacity;
+ }
+ }
+ }
+ },
+
+ // Exclude the following css properties to add px
+ cssNumber: {
+ "fillOpacity": true,
+ "fontWeight": true,
+ "lineHeight": true,
+ "opacity": true,
+ "orphans": true,
+ "widows": true,
+ "zIndex": true,
+ "zoom": true
+ },
+
+ // Add in properties whose names you wish to fix before
+ // setting or getting the value
+ cssProps: {
+ // normalize float css property
+ "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+ },
+
+ // Get and set the style property on a DOM Node
+ style: function( elem, name, value, extra ) {
+ // Don't set styles on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+ return;
+ }
+
+ // Make sure that we're working with the right name
+ var ret, type, origName = jQuery.camelCase( name ),
+ style = elem.style, hooks = jQuery.cssHooks[ origName ];
+
+ name = jQuery.cssProps[ origName ] || origName;
+
+ // Check if we're setting a value
+ if ( value !== undefined ) {
+ type = typeof value;
+
+ // convert relative number strings (+= or -=) to relative numbers. #7345
+ if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+ value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
+ // Fixes bug #9237
+ type = "number";
+ }
+
+ // Make sure that NaN and null values aren't set. See: #7116
+ if ( value == null || type === "number" && isNaN( value ) ) {
+ return;
+ }
+
+ // If a number was passed in, add 'px' to the (except for certain CSS properties)
+ if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+ value += "px";
+ }
+
+ // If a hook was provided, use that value, otherwise just set the specified value
+ if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
+ // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+ // Fixes bug #5509
+ try {
+ style[ name ] = value;
+ } catch(e) {}
+ }
+
+ } else {
+ // If a hook was provided get the non-computed value from there
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+ return ret;
+ }
+
+ // Otherwise just get the value from the style object
+ return style[ name ];
+ }
+ },
+
+ css: function( elem, name, extra ) {
+ var ret, hooks;
+
+ // Make sure that we're working with the right name
+ name = jQuery.camelCase( name );
+ hooks = jQuery.cssHooks[ name ];
+ name = jQuery.cssProps[ name ] || name;
+
+ // cssFloat needs a special treatment
+ if ( name === "cssFloat" ) {
+ name = "float";
+ }
+
+ // If a hook was provided get the computed value from there
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
+ return ret;
+
+ // Otherwise, if a way to get the computed value exists, use that
+ } else if ( curCSS ) {
+ return curCSS( elem, name );
+ }
+ },
+
+ // A method for quickly swapping in/out CSS properties to get correct calculations
+ swap: function( elem, options, callback ) {
+ var old = {};
+
+ // Remember the old values, and insert the new ones
+ for ( var name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ callback.call( elem );
+
+ // Revert the old values
+ for ( name in options ) {
+ elem.style[ name ] = old[ name ];
+ }
+ }
+});
+
+// DEPRECATED, Use jQuery.css() instead
+jQuery.curCSS = jQuery.css;
+
+jQuery.each(["height", "width"], function( i, name ) {
+ jQuery.cssHooks[ name ] = {
+ get: function( elem, computed, extra ) {
+ var val;
+
+ if ( computed ) {
+ if ( elem.offsetWidth !== 0 ) {
+ return getWH( elem, name, extra );
+ } else {
+ jQuery.swap( elem, cssShow, function() {
+ val = getWH( elem, name, extra );
+ });
+ }
+
+ return val;
+ }
+ },
+
+ set: function( elem, value ) {
+ if ( rnumpx.test( value ) ) {
+ // ignore negative width and height values #1599
+ value = parseFloat( value );
+
+ if ( value >= 0 ) {
+ return value + "px";
+ }
+
+ } else {
+ return value;
+ }
+ }
+ };
+});
+
+if ( !jQuery.support.opacity ) {
+ jQuery.cssHooks.opacity = {
+ get: function( elem, computed ) {
+ // IE uses filters for opacity
+ return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+ ( parseFloat( RegExp.$1 ) / 100 ) + "" :
+ computed ? "1" : "";
+ },
+
+ set: function( elem, value ) {
+ var style = elem.style,
+ currentStyle = elem.currentStyle,
+ opacity = jQuery.isNaN( value ) ? "" : "alpha(opacity=" + value * 100 + ")",
+ filter = currentStyle && currentStyle.filter || style.filter || "";
+
+ // IE has trouble with opacity if it does not have layout
+ // Force it by setting the zoom level
+ style.zoom = 1;
+
+ // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+ if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
+
+ // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+ // if "filter:" is present at all, clearType is disabled, we want to avoid this
+ // style.removeAttribute is IE Only, but so apparently is this code path...
+ style.removeAttribute( "filter" );
+
+ // if there there is no filter style applied in a css rule, we are done
+ if ( currentStyle && !currentStyle.filter ) {
+ return;
+ }
+ }
+
+ // otherwise, set new filter values
+ style.filter = ralpha.test( filter ) ?
+ filter.replace( ralpha, opacity ) :
+ filter + " " + opacity;
+ }
+ };
+}
+
+jQuery(function() {
+ // This hook cannot be added until DOM ready because the support test
+ // for it is not run until after DOM ready
+ if ( !jQuery.support.reliableMarginRight ) {
+ jQuery.cssHooks.marginRight = {
+ get: function( elem, computed ) {
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ // Work around by temporarily setting element display to inline-block
+ var ret;
+ jQuery.swap( elem, { "display": "inline-block" }, function() {
+ if ( computed ) {
+ ret = curCSS( elem, "margin-right", "marginRight" );
+ } else {
+ ret = elem.style.marginRight;
+ }
+ });
+ return ret;
+ }
+ };
+ }
+});
+
+if ( document.defaultView && document.defaultView.getComputedStyle ) {
+ getComputedStyle = function( elem, name ) {
+ var ret, defaultView, computedStyle;
+
+ name = name.replace( rupper, "-$1" ).toLowerCase();
+
+ if ( !(defaultView = elem.ownerDocument.defaultView) ) {
+ return undefined;
+ }
+
+ if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
+ ret = computedStyle.getPropertyValue( name );
+ if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+ ret = jQuery.style( elem, name );
+ }
+ }
+
+ return ret;
+ };
+}
+
+if ( document.documentElement.currentStyle ) {
+ currentStyle = function( elem, name ) {
+ var left,
+ ret = elem.currentStyle && elem.currentStyle[ name ],
+ rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
+ style = elem.style;
+
+ // From the awesome hack by Dean Edwards
+ // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+ // If we're not dealing with a regular pixel number
+ // but a number that has a weird ending, we need to convert it to pixels
+ if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
+ // Remember the original values
+ left = style.left;
+
+ // Put in the new values to get a computed value out
+ if ( rsLeft ) {
+ elem.runtimeStyle.left = elem.currentStyle.left;
+ }
+ style.left = name === "fontSize" ? "1em" : (ret || 0);
+ ret = style.pixelLeft + "px";
+
+ // Revert the changed values
+ style.left = left;
+ if ( rsLeft ) {
+ elem.runtimeStyle.left = rsLeft;
+ }
+ }
+
+ return ret === "" ? "auto" : ret;
+ };
+}
+
+curCSS = getComputedStyle || currentStyle;
+
+function getWH( elem, name, extra ) {
+
+ // Start with offset property
+ var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+ which = name === "width" ? cssWidth : cssHeight;
+
+ if ( val > 0 ) {
+ if ( extra !== "border" ) {
+ jQuery.each( which, function() {
+ if ( !extra ) {
+ val -= parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
+ }
+ if ( extra === "margin" ) {
+ val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
+ } else {
+ val -= parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
+ }
+ });
+ }
+
+ return val + "px";
+ }
+
+ // Fall back to computed then uncomputed css if necessary
+ val = curCSS( elem, name, name );
+ if ( val < 0 || val == null ) {
+ val = elem.style[ name ] || 0;
+ }
+ // Normalize "", auto, and prepare for extra
+ val = parseFloat( val ) || 0;
+
+ // Add padding, border, margin
+ if ( extra ) {
+ jQuery.each( which, function() {
+ val += parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
+ if ( extra !== "padding" ) {
+ val += parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
+ }
+ if ( extra === "margin" ) {
+ val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
+ }
+ });
+ }
+
+ return val + "px";
+}
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+ jQuery.expr.filters.hidden = function( elem ) {
+ var width = elem.offsetWidth,
+ height = elem.offsetHeight;
+
+ return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
+ };
+
+ jQuery.expr.filters.visible = function( elem ) {
+ return !jQuery.expr.filters.hidden( elem );
+ };
+}
+
+
+
+
+var r20 = /%20/g,
+ rbracket = /\[\]$/,
+ rCRLF = /\r?\n/g,
+ rhash = /#.*$/,
+ rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+ rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+ // #7653, #8125, #8152: local protocol detection
+ rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
+ rnoContent = /^(?:GET|HEAD)$/,
+ rprotocol = /^\/\//,
+ rquery = /\?/,
+ rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+ rselectTextarea = /^(?:select|textarea)/i,
+ rspacesAjax = /\s+/,
+ rts = /([?&])_=[^&]*/,
+ rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
+
+ // Keep a copy of the old load method
+ _load = jQuery.fn.load,
+
+ /* Prefilters
+ * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+ * 2) These are called:
+ * - BEFORE asking for a transport
+ * - AFTER param serialization (s.data is a string if s.processData is true)
+ * 3) key is the dataType
+ * 4) the catchall symbol "*" can be used
+ * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+ */
+ prefilters = {},
+
+ /* Transports bindings
+ * 1) key is the dataType
+ * 2) the catchall symbol "*" can be used
+ * 3) selection will start with transport dataType and THEN go to "*" if needed
+ */
+ transports = {},
+
+ // Document location
+ ajaxLocation,
+
+ // Document location segments
+ ajaxLocParts,
+
+ // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+ allTypes = ["*/"] + ["*"];
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+ ajaxLocation = location.href;
+} catch( e ) {
+ // Use the href attribute of an A element
+ // since IE will modify it given document.location
+ ajaxLocation = document.createElement( "a" );
+ ajaxLocation.href = "";
+ ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+ // dataTypeExpression is optional and defaults to "*"
+ return function( dataTypeExpression, func ) {
+
+ if ( typeof dataTypeExpression !== "string" ) {
+ func = dataTypeExpression;
+ dataTypeExpression = "*";
+ }
+
+ if ( jQuery.isFunction( func ) ) {
+ var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
+ i = 0,
+ length = dataTypes.length,
+ dataType,
+ list,
+ placeBefore;
+
+ // For each dataType in the dataTypeExpression
+ for(; i < length; i++ ) {
+ dataType = dataTypes[ i ];
+ // We control if we're asked to add before
+ // any existing element
+ placeBefore = /^\+/.test( dataType );
+ if ( placeBefore ) {
+ dataType = dataType.substr( 1 ) || "*";
+ }
+ list = structure[ dataType ] = structure[ dataType ] || [];
+ // then we add to the structure accordingly
+ list[ placeBefore ? "unshift" : "push" ]( func );
+ }
+ }
+ };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+ dataType /* internal */, inspected /* internal */ ) {
+
+ dataType = dataType || options.dataTypes[ 0 ];
+ inspected = inspected || {};
+
+ inspected[ dataType ] = true;
+
+ var list = structure[ dataType ],
+ i = 0,
+ length = list ? list.length : 0,
+ executeOnly = ( structure === prefilters ),
+ selection;
+
+ for(; i < length && ( executeOnly || !selection ); i++ ) {
+ selection = list[ i ]( options, originalOptions, jqXHR );
+ // If we got redirected to another dataType
+ // we try there if executing only and not done already
+ if ( typeof selection === "string" ) {
+ if ( !executeOnly || inspected[ selection ] ) {
+ selection = undefined;
+ } else {
+ options.dataTypes.unshift( selection );
+ selection = inspectPrefiltersOrTransports(
+ structure, options, originalOptions, jqXHR, selection, inspected );
+ }
+ }
+ }
+ // If we're only executing or nothing was selected
+ // we try the catchall dataType if not done already
+ if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+ selection = inspectPrefiltersOrTransports(
+ structure, options, originalOptions, jqXHR, "*", inspected );
+ }
+ // unnecessary when only executing (prefilters)
+ // but it'll be ignored by the caller in that case
+ return selection;
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+ var key, deep,
+ flatOptions = jQuery.ajaxSettings.flatOptions || {};
+ for( key in src ) {
+ if ( src[ key ] !== undefined ) {
+ ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+ }
+ }
+ if ( deep ) {
+ jQuery.extend( true, target, deep );
+ }
+}
+
+jQuery.fn.extend({
+ load: function( url, params, callback ) {
+ if ( typeof url !== "string" && _load ) {
+ return _load.apply( this, arguments );
+
+ // Don't do a request if no elements are being requested
+ } else if ( !this.length ) {
+ return this;
+ }
+
+ var off = url.indexOf( " " );
+ if ( off >= 0 ) {
+ var selector = url.slice( off, url.length );
+ url = url.slice( 0, off );
+ }
+
+ // Default to a GET request
+ var type = "GET";
+
+ // If the second parameter was provided
+ if ( params ) {
+ // If it's a function
+ if ( jQuery.isFunction( params ) ) {
+ // We assume that it's the callback
+ callback = params;
+ params = undefined;
+
+ // Otherwise, build a param string
+ } else if ( typeof params === "object" ) {
+ params = jQuery.param( params, jQuery.ajaxSettings.traditional );
+ type = "POST";
+ }
+ }
+
+ var self = this;
+
+ // Request the remote document
+ jQuery.ajax({
+ url: url,
+ type: type,
+ dataType: "html",
+ data: params,
+ // Complete callback (responseText is used internally)
+ complete: function( jqXHR, status, responseText ) {
+ // Store the response as specified by the jqXHR object
+ responseText = jqXHR.responseText;
+ // If successful, inject the HTML into all the matched elements
+ if ( jqXHR.isResolved() ) {
+ // #4825: Get the actual response in case
+ // a dataFilter is present in ajaxSettings
+ jqXHR.done(function( r ) {
+ responseText = r;
+ });
+ // See if a selector was specified
+ self.html( selector ?
+ // Create a dummy div to hold the results
+ jQuery("<div>")
+ // inject the contents of the document in, removing the scripts
+ // to avoid any 'Permission Denied' errors in IE
+ .append(responseText.replace(rscript, ""))
+
+ // Locate the specified elements
+ .find(selector) :
+
+ // If not, just inject the full result
+ responseText );
+ }
+
+ if ( callback ) {
+ self.each( callback, [ responseText, status, jqXHR ] );
+ }
+ }
+ });
+
+ return this;
+ },
+
+ serialize: function() {
+ return jQuery.param( this.serializeArray() );
+ },
+
+ serializeArray: function() {
+ return this.map(function(){
+ return this.elements ? jQuery.makeArray( this.elements ) : this;
+ })
+ .filter(function(){
+ return this.name && !this.disabled &&
+ ( this.checked || rselectTextarea.test( this.nodeName ) ||
+ rinput.test( this.type ) );
+ })
+ .map(function( i, elem ){
+ var val = jQuery( this ).val();
+
+ return val == null ?
+ null :
+ jQuery.isArray( val ) ?
+ jQuery.map( val, function( val, i ){
+ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ }) :
+ { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ }).get();
+ }
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
+ jQuery.fn[ o ] = function( f ){
+ return this.bind( o, f );
+ };
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+ jQuery[ method ] = function( url, data, callback, type ) {
+ // shift arguments if data argument was omitted
+ if ( jQuery.isFunction( data ) ) {
+ type = type || callback;
+ callback = data;
+ data = undefined;
+ }
+
+ return jQuery.ajax({
+ type: method,
+ url: url,
+ data: data,
+ success: callback,
+ dataType: type
+ });
+ };
+});
+
+jQuery.extend({
+
+ getScript: function( url, callback ) {
+ return jQuery.get( url, undefined, callback, "script" );
+ },
+
+ getJSON: function( url, data, callback ) {
+ return jQuery.get( url, data, callback, "json" );
+ },
+
+ // Creates a full fledged settings object into target
+ // with both ajaxSettings and settings fields.
+ // If target is omitted, writes into ajaxSettings.
+ ajaxSetup: function( target, settings ) {
+ if ( settings ) {
+ // Building a settings object
+ ajaxExtend( target, jQuery.ajaxSettings );
+ } else {
+ // Extending ajaxSettings
+ settings = target;
+ target = jQuery.ajaxSettings;
+ }
+ ajaxExtend( target, settings );
+ return target;
+ },
+
+ ajaxSettings: {
+ url: ajaxLocation,
+ isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+ global: true,
+ type: "GET",
+ contentType: "application/x-www-form-urlencoded",
+ processData: true,
+ async: true,
+ /*
+ timeout: 0,
+ data: null,
+ dataType: null,
+ username: null,
+ password: null,
+ cache: null,
+ traditional: false,
+ headers: {},
+ */
+
+ accepts: {
+ xml: "application/xml, text/xml",
+ html: "text/html",
+ text: "text/plain",
+ json: "application/json, text/javascript",
+ "*": allTypes
+ },
+
+ contents: {
+ xml: /xml/,
+ html: /html/,
+ json: /json/
+ },
+
+ responseFields: {
+ xml: "responseXML",
+ text: "responseText"
+ },
+
+ // List of data converters
+ // 1) key format is "source_type destination_type" (a single space in-between)
+ // 2) the catchall symbol "*" can be used for source_type
+ converters: {
+
+ // Convert anything to text
+ "* text": window.String,
+
+ // Text to html (true = no transformation)
+ "text html": true,
+
+ // Evaluate text as a json expression
+ "text json": jQuery.parseJSON,
+
+ // Parse text as xml
+ "text xml": jQuery.parseXML
+ },
+
+ // For options that shouldn't be deep extended:
+ // you can add your own custom options here if
+ // and when you create one that shouldn't be
+ // deep extended (see ajaxExtend)
+ flatOptions: {
+ context: true,
+ url: true
+ }
+ },
+
+ ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+ ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+ // Main method
+ ajax: function( url, options ) {
+
+ // If url is an object, simulate pre-1.5 signature
+ if ( typeof url === "object" ) {
+ options = url;
+ url = undefined;
+ }
+
+ // Force options to be an object
+ options = options || {};
+
+ var // Create the final options object
+ s = jQuery.ajaxSetup( {}, options ),
+ // Callbacks context
+ callbackContext = s.context || s,
+ // Context for global events
+ // It's the callbackContext if one was provided in the options
+ // and if it's a DOM node or a jQuery collection
+ globalEventContext = callbackContext !== s &&
+ ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+ jQuery( callbackContext ) : jQuery.event,
+ // Deferreds
+ deferred = jQuery.Deferred(),
+ completeDeferred = jQuery._Deferred(),
+ // Status-dependent callbacks
+ statusCode = s.statusCode || {},
+ // ifModified key
+ ifModifiedKey,
+ // Headers (they are sent all at once)
+ requestHeaders = {},
+ requestHeadersNames = {},
+ // Response headers
+ responseHeadersString,
+ responseHeaders,
+ // transport
+ transport,
+ // timeout handle
+ timeoutTimer,
+ // Cross-domain detection vars
+ parts,
+ // The jqXHR state
+ state = 0,
+ // To know if global events are to be dispatched
+ fireGlobals,
+ // Loop variable
+ i,
+ // Fake xhr
+ jqXHR = {
+
+ readyState: 0,
+
+ // Caches the header
+ setRequestHeader: function( name, value ) {
+ if ( !state ) {
+ var lname = name.toLowerCase();
+ name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+ requestHeaders[ name ] = value;
+ }
+ return this;
+ },
+
+ // Raw string
+ getAllResponseHeaders: function() {
+ return state === 2 ? responseHeadersString : null;
+ },
+
+ // Builds headers hashtable if needed
+ getResponseHeader: function( key ) {
+ var match;
+ if ( state === 2 ) {
+ if ( !responseHeaders ) {
+ responseHeaders = {};
+ while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+ responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+ }
+ }
+ match = responseHeaders[ key.toLowerCase() ];
+ }
+ return match === undefined ? null : match;
+ },
+
+ // Overrides response content-type header
+ overrideMimeType: function( type ) {
+ if ( !state ) {
+ s.mimeType = type;
+ }
+ return this;
+ },
+
+ // Cancel the request
+ abort: function( statusText ) {
+ statusText = statusText || "abort";
+ if ( transport ) {
+ transport.abort( statusText );
+ }
+ done( 0, statusText );
+ return this;
+ }
+ };
+
+ // Callback for when everything is done
+ // It is defined here because jslint complains if it is declared
+ // at the end of the function (which would be more logical and readable)
+ function done( status, nativeStatusText, responses, headers ) {
+
+ // Called once
+ if ( state === 2 ) {
+ return;
+ }
+
+ // State is "done" now
+ state = 2;
+
+ // Clear timeout if it exists
+ if ( timeoutTimer ) {
+ clearTimeout( timeoutTimer );
+ }
+
+ // Dereference transport for early garbage collection
+ // (no matter how long the jqXHR object will be used)
+ transport = undefined;
+
+ // Cache response headers
+ responseHeadersString = headers || "";
+
+ // Set readyState
+ jqXHR.readyState = status > 0 ? 4 : 0;
+
+ var isSuccess,
+ success,
+ error,
+ statusText = nativeStatusText,
+ response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
+ lastModified,
+ etag;
+
+ // If successful, handle type chaining
+ if ( status >= 200 && status < 300 || status === 304 ) {
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+
+ if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
+ jQuery.lastModified[ ifModifiedKey ] = lastModified;
+ }
+ if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
+ jQuery.etag[ ifModifiedKey ] = etag;
+ }
+ }
+
+ // If not modified
+ if ( status === 304 ) {
+
+ statusText = "notmodified";
+ isSuccess = true;
+
+ // If we have data
+ } else {
+
+ try {
+ success = ajaxConvert( s, response );
+ statusText = "success";
+ isSuccess = true;
+ } catch(e) {
+ // We have a parsererror
+ statusText = "parsererror";
+ error = e;
+ }
+ }
+ } else {
+ // We extract error from statusText
+ // then normalize statusText and status for non-aborts
+ error = statusText;
+ if( !statusText || status ) {
+ statusText = "error";
+ if ( status < 0 ) {
+ status = 0;
+ }
+ }
+ }
+
+ // Set data for the fake xhr object
+ jqXHR.status = status;
+ jqXHR.statusText = "" + ( nativeStatusText || statusText );
+
+ // Success/Error
+ if ( isSuccess ) {
+ deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+ } else {
+ deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+ }
+
+ // Status-dependent callbacks
+ jqXHR.statusCode( statusCode );
+ statusCode = undefined;
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+ [ jqXHR, s, isSuccess ? success : error ] );
+ }
+
+ // Complete
+ completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+ // Handle the global AJAX counter
+ if ( !( --jQuery.active ) ) {
+ jQuery.event.trigger( "ajaxStop" );
+ }
+ }
+ }
+
+ // Attach deferreds
+ deferred.promise( jqXHR );
+ jqXHR.success = jqXHR.done;
+ jqXHR.error = jqXHR.fail;
+ jqXHR.complete = completeDeferred.done;
+
+ // Status-dependent callbacks
+ jqXHR.statusCode = function( map ) {
+ if ( map ) {
+ var tmp;
+ if ( state < 2 ) {
+ for( tmp in map ) {
+ statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
+ }
+ } else {
+ tmp = map[ jqXHR.status ];
+ jqXHR.then( tmp, tmp );
+ }
+ }
+ return this;
+ };
+
+ // Remove hash character (#7531: and string promotion)
+ // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+ // We also use the url parameter if available
+ s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+ // Extract dataTypes list
+ s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
+
+ // Determine if a cross-domain request is in order
+ if ( s.crossDomain == null ) {
+ parts = rurl.exec( s.url.toLowerCase() );
+ s.crossDomain = !!( parts &&
+ ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
+ ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+ ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+ );
+ }
+
+ // Convert data if not already a string
+ if ( s.data && s.processData && typeof s.data !== "string" ) {
+ s.data = jQuery.param( s.data, s.traditional );
+ }
+
+ // Apply prefilters
+ inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+ // If request was aborted inside a prefiler, stop there
+ if ( state === 2 ) {
+ return false;
+ }
+
+ // We can fire global events as of now if asked to
+ fireGlobals = s.global;
+
+ // Uppercase the type
+ s.type = s.type.toUpperCase();
+
+ // Determine if request has content
+ s.hasContent = !rnoContent.test( s.type );
+
+ // Watch for a new set of requests
+ if ( fireGlobals && jQuery.active++ === 0 ) {
+ jQuery.event.trigger( "ajaxStart" );
+ }
+
+ // More options handling for requests with no content
+ if ( !s.hasContent ) {
+
+ // If data is available, append data to url
+ if ( s.data ) {
+ s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+ // #9682: remove data so that it's not used in an eventual retry
+ delete s.data;
+ }
+
+ // Get ifModifiedKey before adding the anti-cache parameter
+ ifModifiedKey = s.url;
+
+ // Add anti-cache in url if needed
+ if ( s.cache === false ) {
+
+ var ts = jQuery.now(),
+ // try replacing _= if it is there
+ ret = s.url.replace( rts, "$1_=" + ts );
+
+ // if nothing was replaced, add timestamp to the end
+ s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
+ }
+ }
+
+ // Set the correct header, if data is being sent
+ if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+ jqXHR.setRequestHeader( "Content-Type", s.contentType );
+ }
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ ifModifiedKey = ifModifiedKey || s.url;
+ if ( jQuery.lastModified[ ifModifiedKey ] ) {
+ jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+ }
+ if ( jQuery.etag[ ifModifiedKey ] ) {
+ jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+ }
+ }
+
+ // Set the Accepts header for the server, depending on the dataType
+ jqXHR.setRequestHeader(
+ "Accept",
+ s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+ s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+ s.accepts[ "*" ]
+ );
+
+ // Check for headers option
+ for ( i in s.headers ) {
+ jqXHR.setRequestHeader( i, s.headers[ i ] );
+ }
+
+ // Allow custom headers/mimetypes and early abort
+ if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+ // Abort if not done already
+ jqXHR.abort();
+ return false;
+
+ }
+
+ // Install callbacks on deferreds
+ for ( i in { success: 1, error: 1, complete: 1 } ) {
+ jqXHR[ i ]( s[ i ] );
+ }
+
+ // Get transport
+ transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+ // If no transport, we auto-abort
+ if ( !transport ) {
+ done( -1, "No Transport" );
+ } else {
+ jqXHR.readyState = 1;
+ // Send global event
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+ }
+ // Timeout
+ if ( s.async && s.timeout > 0 ) {
+ timeoutTimer = setTimeout( function(){
+ jqXHR.abort( "timeout" );
+ }, s.timeout );
+ }
+
+ try {
+ state = 1;
+ transport.send( requestHeaders, done );
+ } catch (e) {
+ // Propagate exception as error if not done
+ if ( state < 2 ) {
+ done( -1, e );
+ // Simply rethrow otherwise
+ } else {
+ jQuery.error( e );
+ }
+ }
+ }
+
+ return jqXHR;
+ },
+
+ // Serialize an array of form elements or a set of
+ // key/values into a query string
+ param: function( a, traditional ) {
+ var s = [],
+ add = function( key, value ) {
+ // If value is a function, invoke it and return its value
+ value = jQuery.isFunction( value ) ? value() : value;
+ s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+ };
+
+ // Set traditional to true for jQuery <= 1.3.2 behavior.
+ if ( traditional === undefined ) {
+ traditional = jQuery.ajaxSettings.traditional;
+ }
+
+ // If an array was passed in, assume that it is an array of form elements.
+ if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+ // Serialize the form elements
+ jQuery.each( a, function() {
+ add( this.name, this.value );
+ });
+
+ } else {
+ // If traditional, encode the "old" way (the way 1.3.2 or older
+ // did it), otherwise encode params recursively.
+ for ( var prefix in a ) {
+ buildParams( prefix, a[ prefix ], traditional, add );
+ }
+ }
+
+ // Return the resulting serialization
+ return s.join( "&" ).replace( r20, "+" );
+ }
+});
+
+function buildParams( prefix, obj, traditional, add ) {
+ if ( jQuery.isArray( obj ) ) {
+ // Serialize array item.
+ jQuery.each( obj, function( i, v ) {
+ if ( traditional || rbracket.test( prefix ) ) {
+ // Treat each array item as a scalar.
+ add( prefix, v );
+
+ } else {
+ // If array item is non-scalar (array or object), encode its
+ // numeric index to resolve deserialization ambiguity issues.
+ // Note that rack (as of 1.0.0) can't currently deserialize
+ // nested arrays properly, and attempting to do so may cause
+ // a server error. Possible fixes are to modify rack's
+ // deserialization algorithm or to provide an option or flag
+ // to force array serialization to be shallow.
+ buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
+ }
+ });
+
+ } else if ( !traditional && obj != null && typeof obj === "object" ) {
+ // Serialize object item.
+ for ( var name in obj ) {
+ buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+ }
+
+ } else {
+ // Serialize scalar item.
+ add( prefix, obj );
+ }
+}
+
+// This is still on the jQuery object... for now
+// Want to move this to jQuery.ajax some day
+jQuery.extend({
+
+ // Counter for holding the number of active queries
+ active: 0,
+
+ // Last-Modified header cache for next request
+ lastModified: {},
+ etag: {}
+
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+ var contents = s.contents,
+ dataTypes = s.dataTypes,
+ responseFields = s.responseFields,
+ ct,
+ type,
+ finalDataType,
+ firstDataType;
+
+ // Fill responseXXX fields
+ for( type in responseFields ) {
+ if ( type in responses ) {
+ jqXHR[ responseFields[type] ] = responses[ type ];
+ }
+ }
+
+ // Remove auto dataType and get content-type in the process
+ while( dataTypes[ 0 ] === "*" ) {
+ dataTypes.shift();
+ if ( ct === undefined ) {
+ ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
+ }
+ }
+
+ // Check if we're dealing with a known content-type
+ if ( ct ) {
+ for ( type in contents ) {
+ if ( contents[ type ] && contents[ type ].test( ct ) ) {
+ dataTypes.unshift( type );
+ break;
+ }
+ }
+ }
+
+ // Check to see if we have a response for the expected dataType
+ if ( dataTypes[ 0 ] in responses ) {
+ finalDataType = dataTypes[ 0 ];
+ } else {
+ // Try convertible dataTypes
+ for ( type in responses ) {
+ if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+ finalDataType = type;
+ break;
+ }
+ if ( !firstDataType ) {
+ firstDataType = type;
+ }
+ }
+ // Or just use first one
+ finalDataType = finalDataType || firstDataType;
+ }
+
+ // If we found a dataType
+ // We add the dataType to the list if needed
+ // and return the corresponding response
+ if ( finalDataType ) {
+ if ( finalDataType !== dataTypes[ 0 ] ) {
+ dataTypes.unshift( finalDataType );
+ }
+ return responses[ finalDataType ];
+ }
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+
+ // Apply the dataFilter if provided
+ if ( s.dataFilter ) {
+ response = s.dataFilter( response, s.dataType );
+ }
+
+ var dataTypes = s.dataTypes,
+ converters = {},
+ i,
+ key,
+ length = dataTypes.length,
+ tmp,
+ // Current and previous dataTypes
+ current = dataTypes[ 0 ],
+ prev,
+ // Conversion expression
+ conversion,
+ // Conversion function
+ conv,
+ // Conversion functions (transitive conversion)
+ conv1,
+ conv2;
+
+ // For each dataType in the chain
+ for( i = 1; i < length; i++ ) {
+
+ // Create converters map
+ // with lowercased keys
+ if ( i === 1 ) {
+ for( key in s.converters ) {
+ if( typeof key === "string" ) {
+ converters[ key.toLowerCase() ] = s.converters[ key ];
+ }
+ }
+ }
+
+ // Get the dataTypes
+ prev = current;
+ current = dataTypes[ i ];
+
+ // If current is auto dataType, update it to prev
+ if( current === "*" ) {
+ current = prev;
+ // If no auto and dataTypes are actually different
+ } else if ( prev !== "*" && prev !== current ) {
+
+ // Get the converter
+ conversion = prev + " " + current;
+ conv = converters[ conversion ] || converters[ "* " + current ];
+
+ // If there is no direct converter, search transitively
+ if ( !conv ) {
+ conv2 = undefined;
+ for( conv1 in converters ) {
+ tmp = conv1.split( " " );
+ if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
+ conv2 = converters[ tmp[1] + " " + current ];
+ if ( conv2 ) {
+ conv1 = converters[ conv1 ];
+ if ( conv1 === true ) {
+ conv = conv2;
+ } else if ( conv2 === true ) {
+ conv = conv1;
+ }
+ break;
+ }
+ }
+ }
+ }
+ // If we found no converter, dispatch an error
+ if ( !( conv || conv2 ) ) {
+ jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
+ }
+ // If found converter is not an equivalence
+ if ( conv !== true ) {
+ // Convert with 1 or 2 converters accordingly
+ response = conv ? conv( response ) : conv2( conv1(response) );
+ }
+ }
+ }
+ return response;
+}
+
+
+
+
+var jsc = jQuery.now(),
+ jsre = /(\=)\?(&|$)|\?\?/i;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+ jsonp: "callback",
+ jsonpCallback: function() {
+ return jQuery.expando + "_" + ( jsc++ );
+ }
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+ var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
+ ( typeof s.data === "string" );
+
+ if ( s.dataTypes[ 0 ] === "jsonp" ||
+ s.jsonp !== false && ( jsre.test( s.url ) ||
+ inspectData && jsre.test( s.data ) ) ) {
+
+ var responseContainer,
+ jsonpCallback = s.jsonpCallback =
+ jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
+ previous = window[ jsonpCallback ],
+ url = s.url,
+ data = s.data,
+ replace = "$1" + jsonpCallback + "$2";
+
+ if ( s.jsonp !== false ) {
+ url = url.replace( jsre, replace );
+ if ( s.url === url ) {
+ if ( inspectData ) {
+ data = data.replace( jsre, replace );
+ }
+ if ( s.data === data ) {
+ // Add callback manually
+ url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
+ }
+ }
+ }
+
+ s.url = url;
+ s.data = data;
+
+ // Install callback
+ window[ jsonpCallback ] = function( response ) {
+ responseContainer = [ response ];
+ };
+
+ // Clean-up function
+ jqXHR.always(function() {
+ // Set callback back to previous value
+ window[ jsonpCallback ] = previous;
+ // Call if it was a function and we have a response
+ if ( responseContainer && jQuery.isFunction( previous ) ) {
+ window[ jsonpCallback ]( responseContainer[ 0 ] );
+ }
+ });
+
+ // Use data converter to retrieve json after script execution
+ s.converters["script json"] = function() {
+ if ( !responseContainer ) {
+ jQuery.error( jsonpCallback + " was not called" );
+ }
+ return responseContainer[ 0 ];
+ };
+
+ // force json dataType
+ s.dataTypes[ 0 ] = "json";
+
+ // Delegate to script
+ return "script";
+ }
+});
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup({
+ accepts: {
+ script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+ },
+ contents: {
+ script: /javascript|ecmascript/
+ },
+ converters: {
+ "text script": function( text ) {
+ jQuery.globalEval( text );
+ return text;
+ }
+ }
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+ if ( s.cache === undefined ) {
+ s.cache = false;
+ }
+ if ( s.crossDomain ) {
+ s.type = "GET";
+ s.global = false;
+ }
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+ // This transport only deals with cross domain requests
+ if ( s.crossDomain ) {
+
+ var script,
+ head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+
+ return {
+
+ send: function( _, callback ) {
+
+ script = document.createElement( "script" );
+
+ script.async = "async";
+
+ if ( s.scriptCharset ) {
+ script.charset = s.scriptCharset;
+ }
+
+ script.src = s.url;
+
+ // Attach handlers for all browsers
+ script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+ if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+ // Handle memory leak in IE
+ script.onload = script.onreadystatechange = null;
+
+ // Remove the script
+ if ( head && script.parentNode ) {
+ head.removeChild( script );
+ }
+
+ // Dereference the script
+ script = undefined;
+
+ // Callback if not abort
+ if ( !isAbort ) {
+ callback( 200, "success" );
+ }
+ }
+ };
+ // Use insertBefore instead of appendChild to circumvent an IE6 bug.
+ // This arises when a base node is used (#2709 and #4378).
+ head.insertBefore( script, head.firstChild );
+ },
+
+ abort: function() {
+ if ( script ) {
+ script.onload( 0, 1 );
+ }
+ }
+ };
+ }
+});
+
+
+
+
+var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+ xhrOnUnloadAbort = window.ActiveXObject ? function() {
+ // Abort all pending requests
+ for ( var key in xhrCallbacks ) {
+ xhrCallbacks[ key ]( 0, 1 );
+ }
+ } : false,
+ xhrId = 0,
+ xhrCallbacks;
+
+// Functions to create xhrs
+function createStandardXHR() {
+ try {
+ return new window.XMLHttpRequest();
+ } catch( e ) {}
+}
+
+function createActiveXHR() {
+ try {
+ return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+ } catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+ /* Microsoft failed to properly
+ * implement the XMLHttpRequest in IE7 (can't request local files),
+ * so we use the ActiveXObject when it is available
+ * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+ * we need a fallback.
+ */
+ function() {
+ return !this.isLocal && createStandardXHR() || createActiveXHR();
+ } :
+ // For all other browsers, use the standard XMLHttpRequest object
+ createStandardXHR;
+
+// Determine support properties
+(function( xhr ) {
+ jQuery.extend( jQuery.support, {
+ ajax: !!xhr,
+ cors: !!xhr && ( "withCredentials" in xhr )
+ });
+})( jQuery.ajaxSettings.xhr() );
+
+// Create transport if the browser can provide an xhr
+if ( jQuery.support.ajax ) {
+
+ jQuery.ajaxTransport(function( s ) {
+ // Cross domain only allowed if supported through XMLHttpRequest
+ if ( !s.crossDomain || jQuery.support.cors ) {
+
+ var callback;
+
+ return {
+ send: function( headers, complete ) {
+
+ // Get a new xhr
+ var xhr = s.xhr(),
+ handle,
+ i;
+
+ // Open the socket
+ // Passing null username, generates a login popup on Opera (#2865)
+ if ( s.username ) {
+ xhr.open( s.type, s.url, s.async, s.username, s.password );
+ } else {
+ xhr.open( s.type, s.url, s.async );
+ }
+
+ // Apply custom fields if provided
+ if ( s.xhrFields ) {
+ for ( i in s.xhrFields ) {
+ xhr[ i ] = s.xhrFields[ i ];
+ }
+ }
+
+ // Override mime type if needed
+ if ( s.mimeType && xhr.overrideMimeType ) {
+ xhr.overrideMimeType( s.mimeType );
+ }
+
+ // X-Requested-With header
+ // For cross-domain requests, seeing as conditions for a preflight are
+ // akin to a jigsaw puzzle, we simply never set it to be sure.
+ // (it can always be set on a per-request basis or even using ajaxSetup)
+ // For same-domain requests, won't change header if already provided.
+ if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+ headers[ "X-Requested-With" ] = "XMLHttpRequest";
+ }
+
+ // Need an extra try/catch for cross domain requests in Firefox 3
+ try {
+ for ( i in headers ) {
+ xhr.setRequestHeader( i, headers[ i ] );
+ }
+ } catch( _ ) {}
+
+ // Do send the request
+ // This may raise an exception which is actually
+ // handled in jQuery.ajax (so no try/catch here)
+ xhr.send( ( s.hasContent && s.data ) || null );
+
+ // Listener
+ callback = function( _, isAbort ) {
+
+ var status,
+ statusText,
+ responseHeaders,
+ responses,
+ xml;
+
+ // Firefox throws exceptions when accessing properties
+ // of an xhr when a network error occured
+ // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+ try {
+
+ // Was never called and is aborted or complete
+ if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+ // Only called once
+ callback = undefined;
+
+ // Do not keep as active anymore
+ if ( handle ) {
+ xhr.onreadystatechange = jQuery.noop;
+ if ( xhrOnUnloadAbort ) {
+ delete xhrCallbacks[ handle ];
+ }
+ }
+
+ // If it's an abort
+ if ( isAbort ) {
+ // Abort it manually if needed
+ if ( xhr.readyState !== 4 ) {
+ xhr.abort();
+ }
+ } else {
+ status = xhr.status;
+ responseHeaders = xhr.getAllResponseHeaders();
+ responses = {};
+ xml = xhr.responseXML;
+
+ // Construct response list
+ if ( xml && xml.documentElement /* #4958 */ ) {
+ responses.xml = xml;
+ }
+ responses.text = xhr.responseText;
+
+ // Firefox throws an exception when accessing
+ // statusText for faulty cross-domain requests
+ try {
+ statusText = xhr.statusText;
+ } catch( e ) {
+ // We normalize with Webkit giving an empty statusText
+ statusText = "";
+ }
+
+ // Filter status for non standard behaviors
+
+ // If the request is local and we have data: assume a success
+ // (success with no data won't get notified, that's the best we
+ // can do given current implementations)
+ if ( !status && s.isLocal && !s.crossDomain ) {
+ status = responses.text ? 200 : 404;
+ // IE - #1450: sometimes returns 1223 when it should be 204
+ } else if ( status === 1223 ) {
+ status = 204;
+ }
+ }
+ }
+ } catch( firefoxAccessException ) {
+ if ( !isAbort ) {
+ complete( -1, firefoxAccessException );
+ }
+ }
+
+ // Call complete if needed
+ if ( responses ) {
+ complete( status, statusText, responses, responseHeaders );
+ }
+ };
+
+ // if we're in sync mode or it's in cache
+ // and has been retrieved directly (IE6 & IE7)
+ // we need to manually fire the callback
+ if ( !s.async || xhr.readyState === 4 ) {
+ callback();
+ } else {
+ handle = ++xhrId;
+ if ( xhrOnUnloadAbort ) {
+ // Create the active xhrs callbacks list if needed
+ // and attach the unload handler
+ if ( !xhrCallbacks ) {
+ xhrCallbacks = {};
+ jQuery( window ).unload( xhrOnUnloadAbort );
+ }
+ // Add to list of active xhrs callbacks
+ xhrCallbacks[ handle ] = callback;
+ }
+ xhr.onreadystatechange = callback;
+ }
+ },
+
+ abort: function() {
+ if ( callback ) {
+ callback(0,1);
+ }
+ }
+ };
+ }
+ });
+}
+
+
+
+
+var elemdisplay = {},
+ iframe, iframeDoc,
+ rfxtypes = /^(?:toggle|show|hide)$/,
+ rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
+ timerId,
+ fxAttrs = [
+ // height animations
+ [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+ // width animations
+ [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+ // opacity animations
+ [ "opacity" ]
+ ],
+ fxNow;
+
+jQuery.fn.extend({
+ show: function( speed, easing, callback ) {
+ var elem, display;
+
+ if ( speed || speed === 0 ) {
+ return this.animate( genFx("show", 3), speed, easing, callback);
+
+ } else {
+ for ( var i = 0, j = this.length; i < j; i++ ) {
+ elem = this[i];
+
+ if ( elem.style ) {
+ display = elem.style.display;
+
+ // Reset the inline display of this element to learn if it is
+ // being hidden by cascaded rules or not
+ if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
+ display = elem.style.display = "";
+ }
+
+ // Set elements which have been overridden with display: none
+ // in a stylesheet to whatever the default browser style is
+ // for such an element
+ if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
+ jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
+ }
+ }
+ }
+
+ // Set the display of most of the elements in a second loop
+ // to avoid the constant reflow
+ for ( i = 0; i < j; i++ ) {
+ elem = this[i];
+
+ if ( elem.style ) {
+ display = elem.style.display;
+
+ if ( display === "" || display === "none" ) {
+ elem.style.display = jQuery._data(elem, "olddisplay") || "";
+ }
+ }
+ }
+
+ return this;
+ }
+ },
+
+ hide: function( speed, easing, callback ) {
+ if ( speed || speed === 0 ) {
+ return this.animate( genFx("hide", 3), speed, easing, callback);
+
+ } else {
+ for ( var i = 0, j = this.length; i < j; i++ ) {
+ if ( this[i].style ) {
+ var display = jQuery.css( this[i], "display" );
+
+ if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
+ jQuery._data( this[i], "olddisplay", display );
+ }
+ }
+ }
+
+ // Set the display of the elements in a second loop
+ // to avoid the constant reflow
+ for ( i = 0; i < j; i++ ) {
+ if ( this[i].style ) {
+ this[i].style.display = "none";
+ }
+ }
+
+ return this;
+ }
+ },
+
+ // Save the old toggle function
+ _toggle: jQuery.fn.toggle,
+
+ toggle: function( fn, fn2, callback ) {
+ var bool = typeof fn === "boolean";
+
+ if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+ this._toggle.apply( this, arguments );
+
+ } else if ( fn == null || bool ) {
+ this.each(function() {
+ var state = bool ? fn : jQuery(this).is(":hidden");
+ jQuery(this)[ state ? "show" : "hide" ]();
+ });
+
+ } else {
+ this.animate(genFx("toggle", 3), fn, fn2, callback);
+ }
+
+ return this;
+ },
+
+ fadeTo: function( speed, to, easing, callback ) {
+ return this.filter(":hidden").css("opacity", 0).show().end()
+ .animate({opacity: to}, speed, easing, callback);
+ },
+
+ animate: function( prop, speed, easing, callback ) {
+ var optall = jQuery.speed(speed, easing, callback);
+
+ if ( jQuery.isEmptyObject( prop ) ) {
+ return this.each( optall.complete, [ false ] );
+ }
+
+ // Do not change referenced properties as per-property easing will be lost
+ prop = jQuery.extend( {}, prop );
+
+ return this[ optall.queue === false ? "each" : "queue" ](function() {
+ // XXX 'this' does not always have a nodeName when running the
+ // test suite
+
+ if ( optall.queue === false ) {
+ jQuery._mark( this );
+ }
+
+ var opt = jQuery.extend( {}, optall ),
+ isElement = this.nodeType === 1,
+ hidden = isElement && jQuery(this).is(":hidden"),
+ name, val, p,
+ display, e,
+ parts, start, end, unit;
+
+ // will store per property easing and be used to determine when an animation is complete
+ opt.animatedProperties = {};
+
+ for ( p in prop ) {
+
+ // property name normalization
+ name = jQuery.camelCase( p );
+ if ( p !== name ) {
+ prop[ name ] = prop[ p ];
+ delete prop[ p ];
+ }
+
+ val = prop[ name ];
+
+ // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
+ if ( jQuery.isArray( val ) ) {
+ opt.animatedProperties[ name ] = val[ 1 ];
+ val = prop[ name ] = val[ 0 ];
+ } else {
+ opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
+ }
+
+ if ( val === "hide" && hidden || val === "show" && !hidden ) {
+ return opt.complete.call( this );
+ }
+
+ if ( isElement && ( name === "height" || name === "width" ) ) {
+ // Make sure that nothing sneaks out
+ // Record all 3 overflow attributes because IE does not
+ // change the overflow attribute when overflowX and
+ // overflowY are set to the same value
+ opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
+
+ // Set display property to inline-block for height/width
+ // animations on inline elements that are having width/height
+ // animated
+ if ( jQuery.css( this, "display" ) === "inline" &&
+ jQuery.css( this, "float" ) === "none" ) {
+ if ( !jQuery.support.inlineBlockNeedsLayout ) {
+ this.style.display = "inline-block";
+
+ } else {
+ display = defaultDisplay( this.nodeName );
+
+ // inline-level elements accept inline-block;
+ // block-level elements need to be inline with layout
+ if ( display === "inline" ) {
+ this.style.display = "inline-block";
+
+ } else {
+ this.style.display = "inline";
+ this.style.zoom = 1;
+ }
+ }
+ }
+ }
+ }
+
+ if ( opt.overflow != null ) {
+ this.style.overflow = "hidden";
+ }
+
+ for ( p in prop ) {
+ e = new jQuery.fx( this, opt, p );
+ val = prop[ p ];
+
+ if ( rfxtypes.test(val) ) {
+ e[ val === "toggle" ? hidden ? "show" : "hide" : val ]();
+
+ } else {
+ parts = rfxnum.exec( val );
+ start = e.cur();
+
+ if ( parts ) {
+ end = parseFloat( parts[2] );
+ unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
+
+ // We need to compute starting value
+ if ( unit !== "px" ) {
+ jQuery.style( this, p, (end || 1) + unit);
+ start = ((end || 1) / e.cur()) * start;
+ jQuery.style( this, p, start + unit);
+ }
+
+ // If a +=/-= token was provided, we're doing a relative animation
+ if ( parts[1] ) {
+ end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
+ }
+
+ e.custom( start, end, unit );
+
+ } else {
+ e.custom( start, val, "" );
+ }
+ }
+ }
+
+ // For JS strict compliance
+ return true;
+ });
+ },
+
+ stop: function( clearQueue, gotoEnd ) {
+ if ( clearQueue ) {
+ this.queue([]);
+ }
+
+ this.each(function() {
+ var timers = jQuery.timers,
+ i = timers.length;
+ // clear marker counters if we know they won't be
+ if ( !gotoEnd ) {
+ jQuery._unmark( true, this );
+ }
+ while ( i-- ) {
+ if ( timers[i].elem === this ) {
+ if (gotoEnd) {
+ // force the next step to be the last
+ timers[i](true);
+ }
+
+ timers.splice(i, 1);
+ }
+ }
+ });
+
+ // start the next in the queue if the last step wasn't forced
+ if ( !gotoEnd ) {
+ this.dequeue();
+ }
+
+ return this;
+ }
+
+});
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+ setTimeout( clearFxNow, 0 );
+ return ( fxNow = jQuery.now() );
+}
+
+function clearFxNow() {
+ fxNow = undefined;
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, num ) {
+ var obj = {};
+
+ jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
+ obj[ this ] = type;
+ });
+
+ return obj;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+ slideDown: genFx("show", 1),
+ slideUp: genFx("hide", 1),
+ slideToggle: genFx("toggle", 1),
+ fadeIn: { opacity: "show" },
+ fadeOut: { opacity: "hide" },
+ fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return this.animate( props, speed, easing, callback );
+ };
+});
+
+jQuery.extend({
+ speed: function( speed, easing, fn ) {
+ var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
+ complete: fn || !fn && easing ||
+ jQuery.isFunction( speed ) && speed,
+ duration: speed,
+ easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
+ };
+
+ opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+ opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
+
+ // Queueing
+ opt.old = opt.complete;
+ opt.complete = function( noUnmark ) {
+ if ( jQuery.isFunction( opt.old ) ) {
+ opt.old.call( this );
+ }
+
+ if ( opt.queue !== false ) {
+ jQuery.dequeue( this );
+ } else if ( noUnmark !== false ) {
+ jQuery._unmark( this );
+ }
+ };
+
+ return opt;
+ },
+
+ easing: {
+ linear: function( p, n, firstNum, diff ) {
+ return firstNum + diff * p;
+ },
+ swing: function( p, n, firstNum, diff ) {
+ return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
+ }
+ },
+
+ timers: [],
+
+ fx: function( elem, options, prop ) {
+ this.options = options;
+ this.elem = elem;
+ this.prop = prop;
+
+ options.orig = options.orig || {};
+ }
+
+});
+
+jQuery.fx.prototype = {
+ // Simple function for setting a style value
+ update: function() {
+ if ( this.options.step ) {
+ this.options.step.call( this.elem, this.now, this );
+ }
+
+ (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
+ },
+
+ // Get the current size
+ cur: function() {
+ if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
+ return this.elem[ this.prop ];
+ }
+
+ var parsed,
+ r = jQuery.css( this.elem, this.prop );
+ // Empty strings, null, undefined and "auto" are converted to 0,
+ // complex values such as "rotate(1rad)" are returned as is,
+ // simple values such as "10px" are parsed to Float.
+ return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
+ },
+
+ // Start an animation from one number to another
+ custom: function( from, to, unit ) {
+ var self = this,
+ fx = jQuery.fx;
+
+ this.startTime = fxNow || createFxNow();
+ this.start = from;
+ this.end = to;
+ this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
+ this.now = this.start;
+ this.pos = this.state = 0;
+
+ function t( gotoEnd ) {
+ return self.step(gotoEnd);
+ }
+
+ t.elem = this.elem;
+
+ if ( t() && jQuery.timers.push(t) && !timerId ) {
+ timerId = setInterval( fx.tick, fx.interval );
+ }
+ },
+
+ // Simple 'show' function
+ show: function() {
+ // Remember where we started, so that we can go back to it later
+ this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+ this.options.show = true;
+
+ // Begin the animation
+ // Make sure that we start at a small width/height to avoid any
+ // flash of content
+ this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
+
+ // Start by showing the element
+ jQuery( this.elem ).show();
+ },
+
+ // Simple 'hide' function
+ hide: function() {
+ // Remember where we started, so that we can go back to it later
+ this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+ this.options.hide = true;
+
+ // Begin the animation
+ this.custom(this.cur(), 0);
+ },
+
+ // Each step of an animation
+ step: function( gotoEnd ) {
+ var t = fxNow || createFxNow(),
+ done = true,
+ elem = this.elem,
+ options = this.options,
+ i, n;
+
+ if ( gotoEnd || t >= options.duration + this.startTime ) {
+ this.now = this.end;
+ this.pos = this.state = 1;
+ this.update();
+
+ options.animatedProperties[ this.prop ] = true;
+
+ for ( i in options.animatedProperties ) {
+ if ( options.animatedProperties[i] !== true ) {
+ done = false;
+ }
+ }
+
+ if ( done ) {
+ // Reset the overflow
+ if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
+
+ jQuery.each( [ "", "X", "Y" ], function (index, value) {
+ elem.style[ "overflow" + value ] = options.overflow[index];
+ });
+ }
+
+ // Hide the element if the "hide" operation was done
+ if ( options.hide ) {
+ jQuery(elem).hide();
+ }
+
+ // Reset the properties, if the item has been hidden or shown
+ if ( options.hide || options.show ) {
+ for ( var p in options.animatedProperties ) {
+ jQuery.style( elem, p, options.orig[p] );
+ }
+ }
+
+ // Execute the complete function
+ options.complete.call( elem );
+ }
+
+ return false;
+
+ } else {
+ // classical easing cannot be used with an Infinity duration
+ if ( options.duration == Infinity ) {
+ this.now = t;
+ } else {
+ n = t - this.startTime;
+ this.state = n / options.duration;
+
+ // Perform the easing function, defaults to swing
+ this.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration );
+ this.now = this.start + ((this.end - this.start) * this.pos);
+ }
+ // Perform the next step of the animation
+ this.update();
+ }
+
+ return true;
+ }
+};
+
+jQuery.extend( jQuery.fx, {
+ tick: function() {
+ for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) {
+ if ( !timers[i]() ) {
+ timers.splice(i--, 1);
+ }
+ }
+
+ if ( !timers.length ) {
+ jQuery.fx.stop();
+ }
+ },
+
+ interval: 13,
+
+ stop: function() {
+ clearInterval( timerId );
+ timerId = null;
+ },
+
+ speeds: {
+ slow: 600,
+ fast: 200,
+ // Default speed
+ _default: 400
+ },
+
+ step: {
+ opacity: function( fx ) {
+ jQuery.style( fx.elem, "opacity", fx.now );
+ },
+
+ _default: function( fx ) {
+ if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+ fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
+ } else {
+ fx.elem[ fx.prop ] = fx.now;
+ }
+ }
+ }
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+ jQuery.expr.filters.animated = function( elem ) {
+ return jQuery.grep(jQuery.timers, function( fn ) {
+ return elem === fn.elem;
+ }).length;
+ };
+}
+
+// Try to restore the default display value of an element
+function defaultDisplay( nodeName ) {
+
+ if ( !elemdisplay[ nodeName ] ) {
+
+ var body = document.body,
+ elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
+ display = elem.css( "display" );
+
+ elem.remove();
+
+ // If the simple way fails,
+ // get element's real default display by attaching it to a temp iframe
+ if ( display === "none" || display === "" ) {
+ // No iframe to use yet, so create it
+ if ( !iframe ) {
+ iframe = document.createElement( "iframe" );
+ iframe.frameBorder = iframe.width = iframe.height = 0;
+ }
+
+ body.appendChild( iframe );
+
+ // Create a cacheable copy of the iframe document on first call.
+ // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
+ // document to it; WebKit & Firefox won't allow reusing the iframe document.
+ if ( !iframeDoc || !iframe.createElement ) {
+ iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+ iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" );
+ iframeDoc.close();
+ }
+
+ elem = iframeDoc.createElement( nodeName );
+
+ iframeDoc.body.appendChild( elem );
+
+ display = jQuery.css( elem, "display" );
+
+ body.removeChild( iframe );
+ }
+
+ // Store the correct default display
+ elemdisplay[ nodeName ] = display;
+ }
+
+ return elemdisplay[ nodeName ];
+}
+
+
+
+
+var rtable = /^t(?:able|d|h)$/i,
+ rroot = /^(?:body|html)$/i;
+
+if ( "getBoundingClientRect" in document.documentElement ) {
+ jQuery.fn.offset = function( options ) {
+ var elem = this[0], box;
+
+ if ( options ) {
+ return this.each(function( i ) {
+ jQuery.offset.setOffset( this, options, i );
+ });
+ }
+
+ if ( !elem || !elem.ownerDocument ) {
+ return null;
+ }
+
+ if ( elem === elem.ownerDocument.body ) {
+ return jQuery.offset.bodyOffset( elem );
+ }
+
+ try {
+ box = elem.getBoundingClientRect();
+ } catch(e) {}
+
+ var doc = elem.ownerDocument,
+ docElem = doc.documentElement;
+
+ // Make sure we're not dealing with a disconnected DOM node
+ if ( !box || !jQuery.contains( docElem, elem ) ) {
+ return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
+ }
+
+ var body = doc.body,
+ win = getWindow(doc),
+ clientTop = docElem.clientTop || body.clientTop || 0,
+ clientLeft = docElem.clientLeft || body.clientLeft || 0,
+ scrollTop = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop,
+ scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
+ top = box.top + scrollTop - clientTop,
+ left = box.left + scrollLeft - clientLeft;
+
+ return { top: top, left: left };
+ };
+
+} else {
+ jQuery.fn.offset = function( options ) {
+ var elem = this[0];
+
+ if ( options ) {
+ return this.each(function( i ) {
+ jQuery.offset.setOffset( this, options, i );
+ });
+ }
+
+ if ( !elem || !elem.ownerDocument ) {
+ return null;
+ }
+
+ if ( elem === elem.ownerDocument.body ) {
+ return jQuery.offset.bodyOffset( elem );
+ }
+
+ jQuery.offset.initialize();
+
+ var computedStyle,
+ offsetParent = elem.offsetParent,
+ prevOffsetParent = elem,
+ doc = elem.ownerDocument,
+ docElem = doc.documentElement,
+ body = doc.body,
+ defaultView = doc.defaultView,
+ prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
+ top = elem.offsetTop,
+ left = elem.offsetLeft;
+
+ while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
+ if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+ break;
+ }
+
+ computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+ top -= elem.scrollTop;
+ left -= elem.scrollLeft;
+
+ if ( elem === offsetParent ) {
+ top += elem.offsetTop;
+ left += elem.offsetLeft;
+
+ if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
+ top += parseFloat( computedStyle.borderTopWidth ) || 0;
+ left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+ }
+
+ prevOffsetParent = offsetParent;
+ offsetParent = elem.offsetParent;
+ }
+
+ if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+ top += parseFloat( computedStyle.borderTopWidth ) || 0;
+ left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+ }
+
+ prevComputedStyle = computedStyle;
+ }
+
+ if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+ top += body.offsetTop;
+ left += body.offsetLeft;
+ }
+
+ if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+ top += Math.max( docElem.scrollTop, body.scrollTop );
+ left += Math.max( docElem.scrollLeft, body.scrollLeft );
+ }
+
+ return { top: top, left: left };
+ };
+}
+
+jQuery.offset = {
+ initialize: function() {
+ var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
+ html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
+
+ jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
+
+ container.innerHTML = html;
+ body.insertBefore( container, body.firstChild );
+ innerDiv = container.firstChild;
+ checkDiv = innerDiv.firstChild;
+ td = innerDiv.nextSibling.firstChild.firstChild;
+
+ this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
+ this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
+
+ checkDiv.style.position = "fixed";
+ checkDiv.style.top = "20px";
+
+ // safari subtracts parent border width here which is 5px
+ this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
+ checkDiv.style.position = checkDiv.style.top = "";
+
+ innerDiv.style.overflow = "hidden";
+ innerDiv.style.position = "relative";
+
+ this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
+
+ this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
+
+ body.removeChild( container );
+ jQuery.offset.initialize = jQuery.noop;
+ },
+
+ bodyOffset: function( body ) {
+ var top = body.offsetTop,
+ left = body.offsetLeft;
+
+ jQuery.offset.initialize();
+
+ if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
+ top += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+ left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+ }
+
+ return { top: top, left: left };
+ },
+
+ setOffset: function( elem, options, i ) {
+ var position = jQuery.css( elem, "position" );
+
+ // set position first, in-case top/left are set even on static elem
+ if ( position === "static" ) {
+ elem.style.position = "relative";
+ }
+
+ var curElem = jQuery( elem ),
+ curOffset = curElem.offset(),
+ curCSSTop = jQuery.css( elem, "top" ),
+ curCSSLeft = jQuery.css( elem, "left" ),
+ calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+ props = {}, curPosition = {}, curTop, curLeft;
+
+ // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+ if ( calculatePosition ) {
+ curPosition = curElem.position();
+ curTop = curPosition.top;
+ curLeft = curPosition.left;
+ } else {
+ curTop = parseFloat( curCSSTop ) || 0;
+ curLeft = parseFloat( curCSSLeft ) || 0;
+ }
+
+ if ( jQuery.isFunction( options ) ) {
+ options = options.call( elem, i, curOffset );
+ }
+
+ if (options.top != null) {
+ props.top = (options.top - curOffset.top) + curTop;
+ }
+ if (options.left != null) {
+ props.left = (options.left - curOffset.left) + curLeft;
+ }
+
+ if ( "using" in options ) {
+ options.using.call( elem, props );
+ } else {
+ curElem.css( props );
+ }
+ }
+};
+
+
+jQuery.fn.extend({
+ position: function() {
+ if ( !this[0] ) {
+ return null;
+ }
+
+ var elem = this[0],
+
+ // Get *real* offsetParent
+ offsetParent = this.offsetParent(),
+
+ // Get correct offsets
+ offset = this.offset(),
+ parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+ // Subtract element margins
+ // note: when an element has margin: auto the offsetLeft and marginLeft
+ // are the same in Safari causing offset.left to incorrectly be 0
+ offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+ offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+
+ // Add offsetParent borders
+ parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+ parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+
+ // Subtract the two offsets
+ return {
+ top: offset.top - parentOffset.top,
+ left: offset.left - parentOffset.left
+ };
+ },
+
+ offsetParent: function() {
+ return this.map(function() {
+ var offsetParent = this.offsetParent || document.body;
+ while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+ offsetParent = offsetParent.offsetParent;
+ }
+ return offsetParent;
+ });
+ }
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( ["Left", "Top"], function( i, name ) {
+ var method = "scroll" + name;
+
+ jQuery.fn[ method ] = function( val ) {
+ var elem, win;
+
+ if ( val === undefined ) {
+ elem = this[ 0 ];
+
+ if ( !elem ) {
+ return null;
+ }
+
+ win = getWindow( elem );
+
+ // Return the scroll offset
+ return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
+ jQuery.support.boxModel && win.document.documentElement[ method ] ||
+ win.document.body[ method ] :
+ elem[ method ];
+ }
+
+ // Set the scroll offset
+ return this.each(function() {
+ win = getWindow( this );
+
+ if ( win ) {
+ win.scrollTo(
+ !i ? val : jQuery( win ).scrollLeft(),
+ i ? val : jQuery( win ).scrollTop()
+ );
+
+ } else {
+ this[ method ] = val;
+ }
+ });
+ };
+});
+
+function getWindow( elem ) {
+ return jQuery.isWindow( elem ) ?
+ elem :
+ elem.nodeType === 9 ?
+ elem.defaultView || elem.parentWindow :
+ false;
+}
+
+
+
+
+// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
+jQuery.each([ "Height", "Width" ], function( i, name ) {
+
+ var type = name.toLowerCase();
+
+ // innerHeight and innerWidth
+ jQuery.fn[ "inner" + name ] = function() {
+ var elem = this[0];
+ return elem && elem.style ?
+ parseFloat( jQuery.css( elem, type, "padding" ) ) :
+ null;
+ };
+
+ // outerHeight and outerWidth
+ jQuery.fn[ "outer" + name ] = function( margin ) {
+ var elem = this[0];
+ return elem && elem.style ?
+ parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
+ null;
+ };
+
+ jQuery.fn[ type ] = function( size ) {
+ // Get window width or height
+ var elem = this[0];
+ if ( !elem ) {
+ return size == null ? null : this;
+ }
+
+ if ( jQuery.isFunction( size ) ) {
+ return this.each(function( i ) {
+ var self = jQuery( this );
+ self[ type ]( size.call( this, i, self[ type ]() ) );
+ });
+ }
+
+ if ( jQuery.isWindow( elem ) ) {
+ // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
+ // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
+ var docElemProp = elem.document.documentElement[ "client" + name ],
+ body = elem.document.body;
+ return elem.document.compatMode === "CSS1Compat" && docElemProp ||
+ body && body[ "client" + name ] || docElemProp;
+
+ // Get document width or height
+ } else if ( elem.nodeType === 9 ) {
+ // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+ return Math.max(
+ elem.documentElement["client" + name],
+ elem.body["scroll" + name], elem.documentElement["scroll" + name],
+ elem.body["offset" + name], elem.documentElement["offset" + name]
+ );
+
+ // Get or set width or height on the element
+ } else if ( size === undefined ) {
+ var orig = jQuery.css( elem, type ),
+ ret = parseFloat( orig );
+
+ return jQuery.isNaN( ret ) ? orig : ret;
+
+ // Set the width or height on the element (default to pixels if value is unitless)
+ } else {
+ return this.css( type, typeof size === "string" ? size : size + "px" );
+ }
+ };
+
+});
+
+
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+})(window);
diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.min.js b/wqflask/wqflask/static/packages/jqplot/jquery.min.js
new file mode 100644
index 00000000..628ed9b3
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/jquery.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
+(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete
+t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean
+(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.validate.js b/wqflask/wqflask/static/packages/jqplot/jquery.validate.js
new file mode 100644
index 00000000..794e9017
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/jquery.validate.js
@@ -0,0 +1,1248 @@
+/*! jQuery Validation Plugin - v1.10.0 - 9/7/2012
+* https://github.com/jzaefferer/jquery-validation
+* Copyright (c) 2012 Jörn Zaefferer; Licensed MIT, GPL */
+
+(function($) {
+
+$.extend($.fn, {
+ // http://docs.jquery.com/Plugins/Validation/validate
+ validate: function( options ) {
+
+ // if nothing is selected, return nothing; can't chain anyway
+ if (!this.length) {
+ if (options && options.debug && window.console) {
+ console.warn( "nothing selected, can't validate, returning nothing" );
+ }
+ return;
+ }
+
+ // check if a validator for this form was already created
+ var validator = $.data(this[0], 'validator');
+ if ( validator ) {
+ return validator;
+ }
+
+ // Add novalidate tag if HTML5.
+ this.attr('novalidate', 'novalidate');
+
+ validator = new $.validator( options, this[0] );
+ $.data(this[0], 'validator', validator);
+
+ if ( validator.settings.onsubmit ) {
+
+ this.validateDelegate( ":submit", "click", function(ev) {
+ if ( validator.settings.submitHandler ) {
+ validator.submitButton = ev.target;
+ }
+ // allow suppressing validation by adding a cancel class to the submit button
+ if ( $(ev.target).hasClass('cancel') ) {
+ validator.cancelSubmit = true;
+ }
+ });
+
+ // validate the form on submit
+ this.submit( function( event ) {
+ if ( validator.settings.debug ) {
+ // prevent form submit to be able to see console output
+ event.preventDefault();
+ }
+ function handle() {
+ var hidden;
+ if ( validator.settings.submitHandler ) {
+ if (validator.submitButton) {
+ // insert a hidden input as a replacement for the missing submit button
+ hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);
+ }
+ validator.settings.submitHandler.call( validator, validator.currentForm, event );
+ if (validator.submitButton) {
+ // and clean up afterwards; thanks to no-block-scope, hidden can be referenced
+ hidden.remove();
+ }
+ return false;
+ }
+ return true;
+ }
+
+ // prevent submit for invalid forms or custom submit handlers
+ if ( validator.cancelSubmit ) {
+ validator.cancelSubmit = false;
+ return handle();
+ }
+ if ( validator.form() ) {
+ if ( validator.pendingRequest ) {
+ validator.formSubmitted = true;
+ return false;
+ }
+ return handle();
+ } else {
+ validator.focusInvalid();
+ return false;
+ }
+ });
+ }
+
+ return validator;
+ },
+ // http://docs.jquery.com/Plugins/Validation/valid
+ valid: function() {
+ if ( $(this[0]).is('form')) {
+ return this.validate().form();
+ } else {
+ var valid = true;
+ var validator = $(this[0].form).validate();
+ this.each(function() {
+ valid &= validator.element(this);
+ });
+ return valid;
+ }
+ },
+ // attributes: space seperated list of attributes to retrieve and remove
+ removeAttrs: function(attributes) {
+ var result = {},
+ $element = this;
+ $.each(attributes.split(/\s/), function(index, value) {
+ result[value] = $element.attr(value);
+ $element.removeAttr(value);
+ });
+ return result;
+ },
+ // http://docs.jquery.com/Plugins/Validation/rules
+ rules: function(command, argument) {
+ var element = this[0];
+
+ if (command) {
+ var settings = $.data(element.form, 'validator').settings;
+ var staticRules = settings.rules;
+ var existingRules = $.validator.staticRules(element);
+ switch(command) {
+ case "add":
+ $.extend(existingRules, $.validator.normalizeRule(argument));
+ staticRules[element.name] = existingRules;
+ if (argument.messages) {
+ settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );
+ }
+ break;
+ case "remove":
+ if (!argument) {
+ delete staticRules[element.name];
+ return existingRules;
+ }
+ var filtered = {};
+ $.each(argument.split(/\s/), function(index, method) {
+ filtered[method] = existingRules[method];
+ delete existingRules[method];
+ });
+ return filtered;
+ }
+ }
+
+ var data = $.validator.normalizeRules(
+ $.extend(
+ {},
+ $.validator.metadataRules(element),
+ $.validator.classRules(element),
+ $.validator.attributeRules(element),
+ $.validator.staticRules(element)
+ ), element);
+
+ // make sure required is at front
+ if (data.required) {
+ var param = data.required;
+ delete data.required;
+ data = $.extend({required: param}, data);
+ }
+
+ return data;
+ }
+});
+
+// Custom selectors
+$.extend($.expr[":"], {
+ // http://docs.jquery.com/Plugins/Validation/blank
+ blank: function(a) {return !$.trim("" + a.value);},
+ // http://docs.jquery.com/Plugins/Validation/filled
+ filled: function(a) {return !!$.trim("" + a.value);},
+ // http://docs.jquery.com/Plugins/Validation/unchecked
+ unchecked: function(a) {return !a.checked;}
+});
+
+// constructor for validator
+$.validator = function( options, form ) {
+ this.settings = $.extend( true, {}, $.validator.defaults, options );
+ this.currentForm = form;
+ this.init();
+};
+
+$.validator.format = function(source, params) {
+ if ( arguments.length === 1 ) {
+ return function() {
+ var args = $.makeArray(arguments);
+ args.unshift(source);
+ return $.validator.format.apply( this, args );
+ };
+ }
+ if ( arguments.length > 2 && params.constructor !== Array ) {
+ params = $.makeArray(arguments).slice(1);
+ }
+ if ( params.constructor !== Array ) {
+ params = [ params ];
+ }
+ $.each(params, function(i, n) {
+ source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
+ });
+ return source;
+};
+
+$.extend($.validator, {
+
+ defaults: {
+ messages: {},
+ groups: {},
+ rules: {},
+ errorClass: "error",
+ validClass: "valid",
+ errorElement: "label",
+ focusInvalid: true,
+ errorContainer: $( [] ),
+ errorLabelContainer: $( [] ),
+ onsubmit: true,
+ ignore: ":hidden",
+ ignoreTitle: false,
+ onfocusin: function(element, event) {
+ this.lastActive = element;
+
+ // hide error label and remove error class on focus if enabled
+ if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {
+ if ( this.settings.unhighlight ) {
+ this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
+ }
+ this.addWrapper(this.errorsFor(element)).hide();
+ }
+ },
+ onfocusout: function(element, event) {
+ if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
+ this.element(element);
+ }
+ },
+ onkeyup: function(element, event) {
+ if ( event.which === 9 && this.elementValue(element) === '' ) {
+ return;
+ } else if ( element.name in this.submitted || element === this.lastActive ) {
+ this.element(element);
+ }
+ },
+ onclick: function(element, event) {
+ // click on selects, radiobuttons and checkboxes
+ if ( element.name in this.submitted ) {
+ this.element(element);
+ }
+ // or option elements, check parent select in that case
+ else if (element.parentNode.name in this.submitted) {
+ this.element(element.parentNode);
+ }
+ },
+ highlight: function(element, errorClass, validClass) {
+ if (element.type === 'radio') {
+ this.findByName(element.name).addClass(errorClass).removeClass(validClass);
+ } else {
+ $(element).addClass(errorClass).removeClass(validClass);
+ }
+ },
+ unhighlight: function(element, errorClass, validClass) {
+ if (element.type === 'radio') {
+ this.findByName(element.name).removeClass(errorClass).addClass(validClass);
+ } else {
+ $(element).removeClass(errorClass).addClass(validClass);
+ }
+ }
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/setDefaults
+ setDefaults: function(settings) {
+ $.extend( $.validator.defaults, settings );
+ },
+
+ messages: {
+ required: "This field is required.",
+ remote: "Please fix this field.",
+ email: "Please enter a valid email address.",
+ url: "Please enter a valid URL.",
+ date: "Please enter a valid date.",
+ dateISO: "Please enter a valid date (ISO).",
+ number: "Please enter a valid number.",
+ digits: "Please enter only digits.",
+ creditcard: "Please enter a valid credit card number.",
+ equalTo: "Please enter the same value again.",
+ maxlength: $.validator.format("Please enter no more than {0} characters."),
+ minlength: $.validator.format("Please enter at least {0} characters."),
+ rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
+ range: $.validator.format("Please enter a value between {0} and {1}."),
+ max: $.validator.format("Please enter a value less than or equal to {0}."),
+ min: $.validator.format("Please enter a value greater than or equal to {0}.")
+ },
+
+ autoCreateRanges: false,
+
+ prototype: {
+
+ init: function() {
+ this.labelContainer = $(this.settings.errorLabelContainer);
+ this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);
+ this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );
+ this.submitted = {};
+ this.valueCache = {};
+ this.pendingRequest = 0;
+ this.pending = {};
+ this.invalid = {};
+ this.reset();
+
+ var groups = (this.groups = {});
+ $.each(this.settings.groups, function(key, value) {
+ $.each(value.split(/\s/), function(index, name) {
+ groups[name] = key;
+ });
+ });
+ var rules = this.settings.rules;
+ $.each(rules, function(key, value) {
+ rules[key] = $.validator.normalizeRule(value);
+ });
+
+ function delegate(event) {
+ var validator = $.data(this[0].form, "validator"),
+ eventType = "on" + event.type.replace(/^validate/, "");
+ if (validator.settings[eventType]) {
+ validator.settings[eventType].call(validator, this[0], event);
+ }
+ }
+ $(this.currentForm)
+ .validateDelegate(":text, [type='password'], [type='file'], select, textarea, " +
+ "[type='number'], [type='search'] ,[type='tel'], [type='url'], " +
+ "[type='email'], [type='datetime'], [type='date'], [type='month'], " +
+ "[type='week'], [type='time'], [type='datetime-local'], " +
+ "[type='range'], [type='color'] ",
+ "focusin focusout keyup", delegate)
+ .validateDelegate("[type='radio'], [type='checkbox'], select, option", "click", delegate);
+
+ if (this.settings.invalidHandler) {
+ $(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);
+ }
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/form
+ form: function() {
+ this.checkForm();
+ $.extend(this.submitted, this.errorMap);
+ this.invalid = $.extend({}, this.errorMap);
+ if (!this.valid()) {
+ $(this.currentForm).triggerHandler("invalid-form", [this]);
+ }
+ this.showErrors();
+ return this.valid();
+ },
+
+ checkForm: function() {
+ this.prepareForm();
+ for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
+ this.check( elements[i] );
+ }
+ return this.valid();
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/element
+ element: function( element ) {
+ element = this.validationTargetFor( this.clean( element ) );
+ this.lastElement = element;
+ this.prepareElement( element );
+ this.currentElements = $(element);
+ var result = this.check( element ) !== false;
+ if (result) {
+ delete this.invalid[element.name];
+ } else {
+ this.invalid[element.name] = true;
+ }
+ if ( !this.numberOfInvalids() ) {
+ // Hide error containers on last error
+ this.toHide = this.toHide.add( this.containers );
+ }
+ this.showErrors();
+ return result;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/showErrors
+ showErrors: function(errors) {
+ if(errors) {
+ // add items to error list and map
+ $.extend( this.errorMap, errors );
+ this.errorList = [];
+ for ( var name in errors ) {
+ this.errorList.push({
+ message: errors[name],
+ element: this.findByName(name)[0]
+ });
+ }
+ // remove items from success list
+ this.successList = $.grep( this.successList, function(element) {
+ return !(element.name in errors);
+ });
+ }
+ if (this.settings.showErrors) {
+ this.settings.showErrors.call( this, this.errorMap, this.errorList );
+ } else {
+ this.defaultShowErrors();
+ }
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/resetForm
+ resetForm: function() {
+ if ( $.fn.resetForm ) {
+ $( this.currentForm ).resetForm();
+ }
+ this.submitted = {};
+ this.lastElement = null;
+ this.prepareForm();
+ this.hideErrors();
+ this.elements().removeClass( this.settings.errorClass ).removeData( "previousValue" );
+ },
+
+ numberOfInvalids: function() {
+ return this.objectLength(this.invalid);
+ },
+
+ objectLength: function( obj ) {
+ var count = 0;
+ for ( var i in obj ) {
+ count++;
+ }
+ return count;
+ },
+
+ hideErrors: function() {
+ this.addWrapper( this.toHide ).hide();
+ },
+
+ valid: function() {
+ return this.size() === 0;
+ },
+
+ size: function() {
+ return this.errorList.length;
+ },
+
+ focusInvalid: function() {
+ if( this.settings.focusInvalid ) {
+ try {
+ $(this.findLastActive() || this.errorList.length && this.errorList[0].element || [])
+ .filter(":visible")
+ .focus()
+ // manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find
+ .trigger("focusin");
+ } catch(e) {
+ // ignore IE throwing errors when focusing hidden elements
+ }
+ }
+ },
+
+ findLastActive: function() {
+ var lastActive = this.lastActive;
+ return lastActive && $.grep(this.errorList, function(n) {
+ return n.element.name === lastActive.name;
+ }).length === 1 && lastActive;
+ },
+
+ elements: function() {
+ var validator = this,
+ rulesCache = {};
+
+ // select all valid inputs inside the form (no submit or reset buttons)
+ return $(this.currentForm)
+ .find("input, select, textarea")
+ .not(":submit, :reset, :image, [disabled]")
+ .not( this.settings.ignore )
+ .filter(function() {
+ if ( !this.name && validator.settings.debug && window.console ) {
+ console.error( "%o has no name assigned", this);
+ }
+
+ // select only the first element for each name, and only those with rules specified
+ if ( this.name in rulesCache || !validator.objectLength($(this).rules()) ) {
+ return false;
+ }
+
+ rulesCache[this.name] = true;
+ return true;
+ });
+ },
+
+ clean: function( selector ) {
+ return $( selector )[0];
+ },
+
+ errors: function() {
+ var errorClass = this.settings.errorClass.replace(' ', '.');
+ return $( this.settings.errorElement + "." + errorClass, this.errorContext );
+ },
+
+ reset: function() {
+ this.successList = [];
+ this.errorList = [];
+ this.errorMap = {};
+ this.toShow = $([]);
+ this.toHide = $([]);
+ this.currentElements = $([]);
+ },
+
+ prepareForm: function() {
+ this.reset();
+ this.toHide = this.errors().add( this.containers );
+ },
+
+ prepareElement: function( element ) {
+ this.reset();
+ this.toHide = this.errorsFor(element);
+ },
+
+ elementValue: function( element ) {
+ var type = $(element).attr('type'),
+ val = $(element).val();
+
+ if ( type === 'radio' || type === 'checkbox' ) {
+ return $('input[name="' + $(element).attr('name') + '"]:checked').val();
+ }
+
+ if ( typeof val === 'string' ) {
+ return val.replace(/\r/g, "");
+ }
+ return val;
+ },
+
+ check: function( element ) {
+ element = this.validationTargetFor( this.clean( element ) );
+
+ var rules = $(element).rules();
+ var dependencyMismatch = false;
+ var val = this.elementValue(element);
+ var result;
+
+ for (var method in rules ) {
+ var rule = { method: method, parameters: rules[method] };
+ try {
+
+ result = $.validator.methods[method].call( this, val, element, rule.parameters );
+
+ // if a method indicates that the field is optional and therefore valid,
+ // don't mark it as valid when there are no other rules
+ if ( result === "dependency-mismatch" ) {
+ dependencyMismatch = true;
+ continue;
+ }
+ dependencyMismatch = false;
+
+ if ( result === "pending" ) {
+ this.toHide = this.toHide.not( this.errorsFor(element) );
+ return;
+ }
+
+ if( !result ) {
+ this.formatAndAdd( element, rule );
+ return false;
+ }
+ } catch(e) {
+ if ( this.settings.debug && window.console ) {
+ console.log("exception occured when checking element " + element.id + ", check the '" + rule.method + "' method", e);
+ }
+ throw e;
+ }
+ }
+ if (dependencyMismatch) {
+ return;
+ }
+ if ( this.objectLength(rules) ) {
+ this.successList.push(element);
+ }
+ return true;
+ },
+
+ // return the custom message for the given element and validation method
+ // specified in the element's "messages" metadata
+ customMetaMessage: function(element, method) {
+ if (!$.metadata) {
+ return;
+ }
+ var meta = this.settings.meta ? $(element).metadata()[this.settings.meta] : $(element).metadata();
+ return meta && meta.messages && meta.messages[method];
+ },
+
+ // return the custom message for the given element and validation method
+ // specified in the element's HTML5 data attribute
+ customDataMessage: function(element, method) {
+ return $(element).data('msg-' + method.toLowerCase()) || (element.attributes && $(element).attr('data-msg-' + method.toLowerCase()));
+ },
+
+ // return the custom message for the given element name and validation method
+ customMessage: function( name, method ) {
+ var m = this.settings.messages[name];
+ return m && (m.constructor === String ? m : m[method]);
+ },
+
+ // return the first defined argument, allowing empty strings
+ findDefined: function() {
+ for(var i = 0; i < arguments.length; i++) {
+ if (arguments[i] !== undefined) {
+ return arguments[i];
+ }
+ }
+ return undefined;
+ },
+
+ defaultMessage: function( element, method) {
+ return this.findDefined(
+ this.customMessage( element.name, method ),
+ this.customDataMessage( element, method ),
+ this.customMetaMessage( element, method ),
+ // title is never undefined, so handle empty string as undefined
+ !this.settings.ignoreTitle && element.title || undefined,
+ $.validator.messages[method],
+ "<strong>Warning: No message defined for " + element.name + "</strong>"
+ );
+ },
+
+ formatAndAdd: function( element, rule ) {
+ var message = this.defaultMessage( element, rule.method ),
+ theregex = /\$?\{(\d+)\}/g;
+ if ( typeof message === "function" ) {
+ message = message.call(this, rule.parameters, element);
+ } else if (theregex.test(message)) {
+ message = $.validator.format(message.replace(theregex, '{$1}'), rule.parameters);
+ }
+ this.errorList.push({
+ message: message,
+ element: element
+ });
+
+ this.errorMap[element.name] = message;
+ this.submitted[element.name] = message;
+ },
+
+ addWrapper: function(toToggle) {
+ if ( this.settings.wrapper ) {
+ toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
+ }
+ return toToggle;
+ },
+
+ defaultShowErrors: function() {
+ var i, elements;
+ for ( i = 0; this.errorList[i]; i++ ) {
+ var error = this.errorList[i];
+ if ( this.settings.highlight ) {
+ this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
+ }
+ this.showLabel( error.element, error.message );
+ }
+ if( this.errorList.length ) {
+ this.toShow = this.toShow.add( this.containers );
+ }
+ if (this.settings.success) {
+ for ( i = 0; this.successList[i]; i++ ) {
+ this.showLabel( this.successList[i] );
+ }
+ }
+ if (this.settings.unhighlight) {
+ for ( i = 0, elements = this.validElements(); elements[i]; i++ ) {
+ this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );
+ }
+ }
+ this.toHide = this.toHide.not( this.toShow );
+ this.hideErrors();
+ this.addWrapper( this.toShow ).show();
+ },
+
+ validElements: function() {
+ return this.currentElements.not(this.invalidElements());
+ },
+
+ invalidElements: function() {
+ return $(this.errorList).map(function() {
+ return this.element;
+ });
+ },
+
+ showLabel: function(element, message) {
+ var label = this.errorsFor( element );
+ if ( label.length ) {
+ // refresh error/success class
+ label.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );
+
+ // check if we have a generated label, replace the message then
+ if ( label.attr("generated") ) {
+ label.html(message);
+ }
+ } else {
+ // create label
+ label = $("<" + this.settings.errorElement + "/>")
+ .attr({"for": this.idOrName(element), generated: true})
+ .addClass(this.settings.errorClass)
+ .html(message || "");
+ if ( this.settings.wrapper ) {
+ // make sure the element is visible, even in IE
+ // actually showing the wrapped element is handled elsewhere
+ label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();
+ }
+ if ( !this.labelContainer.append(label).length ) {
+ if ( this.settings.errorPlacement ) {
+ this.settings.errorPlacement(label, $(element) );
+ } else {
+ label.insertAfter(element);
+ }
+ }
+ }
+ if ( !message && this.settings.success ) {
+ label.text("");
+ if ( typeof this.settings.success === "string" ) {
+ label.addClass( this.settings.success );
+ } else {
+ this.settings.success( label, element );
+ }
+ }
+ this.toShow = this.toShow.add(label);
+ },
+
+ errorsFor: function(element) {
+ var name = this.idOrName(element);
+ return this.errors().filter(function() {
+ return $(this).attr('for') === name;
+ });
+ },
+
+ idOrName: function(element) {
+ return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);
+ },
+
+ validationTargetFor: function(element) {
+ // if radio/checkbox, validate first element in group instead
+ if (this.checkable(element)) {
+ element = this.findByName( element.name ).not(this.settings.ignore)[0];
+ }
+ return element;
+ },
+
+ checkable: function( element ) {
+ return (/radio|checkbox/i).test(element.type);
+ },
+
+ findByName: function( name ) {
+ return $(this.currentForm).find('[name="' + name + '"]');
+ },
+
+ getLength: function(value, element) {
+ switch( element.nodeName.toLowerCase() ) {
+ case 'select':
+ return $("option:selected", element).length;
+ case 'input':
+ if( this.checkable( element) ) {
+ return this.findByName(element.name).filter(':checked').length;
+ }
+ }
+ return value.length;
+ },
+
+ depend: function(param, element) {
+ return this.dependTypes[typeof param] ? this.dependTypes[typeof param](param, element) : true;
+ },
+
+ dependTypes: {
+ "boolean": function(param, element) {
+ return param;
+ },
+ "string": function(param, element) {
+ return !!$(param, element.form).length;
+ },
+ "function": function(param, element) {
+ return param(element);
+ }
+ },
+
+ optional: function(element) {
+ var val = this.elementValue(element);
+ return !$.validator.methods.required.call(this, val, element) && "dependency-mismatch";
+ },
+
+ startRequest: function(element) {
+ if (!this.pending[element.name]) {
+ this.pendingRequest++;
+ this.pending[element.name] = true;
+ }
+ },
+
+ stopRequest: function(element, valid) {
+ this.pendingRequest--;
+ // sometimes synchronization fails, make sure pendingRequest is never < 0
+ if (this.pendingRequest < 0) {
+ this.pendingRequest = 0;
+ }
+ delete this.pending[element.name];
+ if ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {
+ $(this.currentForm).submit();
+ this.formSubmitted = false;
+ } else if (!valid && this.pendingRequest === 0 && this.formSubmitted) {
+ $(this.currentForm).triggerHandler("invalid-form", [this]);
+ this.formSubmitted = false;
+ }
+ },
+
+ previousValue: function(element) {
+ return $.data(element, "previousValue") || $.data(element, "previousValue", {
+ old: null,
+ valid: true,
+ message: this.defaultMessage( element, "remote" )
+ });
+ }
+
+ },
+
+ classRuleSettings: {
+ required: {required: true},
+ email: {email: true},
+ url: {url: true},
+ date: {date: true},
+ dateISO: {dateISO: true},
+ number: {number: true},
+ digits: {digits: true},
+ creditcard: {creditcard: true}
+ },
+
+ addClassRules: function(className, rules) {
+ if ( className.constructor === String ) {
+ this.classRuleSettings[className] = rules;
+ } else {
+ $.extend(this.classRuleSettings, className);
+ }
+ },
+
+ classRules: function(element) {
+ var rules = {};
+ var classes = $(element).attr('class');
+ if ( classes ) {
+ $.each(classes.split(' '), function() {
+ if (this in $.validator.classRuleSettings) {
+ $.extend(rules, $.validator.classRuleSettings[this]);
+ }
+ });
+ }
+ return rules;
+ },
+
+ attributeRules: function(element) {
+ var rules = {};
+ var $element = $(element);
+
+ for (var method in $.validator.methods) {
+ var value;
+
+ // support for <input required> in both html5 and older browsers
+ if (method === 'required') {
+ value = $element.get(0).getAttribute(method);
+ // Some browsers return an empty string for the required attribute
+ // and non-HTML5 browsers might have required="" markup
+ if (value === "") {
+ value = true;
+ }
+ // force non-HTML5 browsers to return bool
+ value = !!value;
+ } else {
+ value = $element.attr(method);
+ }
+
+ if (value) {
+ rules[method] = value;
+ } else if ($element[0].getAttribute("type") === method) {
+ rules[method] = true;
+ }
+ }
+
+ // maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs
+ if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {
+ delete rules.maxlength;
+ }
+
+ return rules;
+ },
+
+ metadataRules: function(element) {
+ if (!$.metadata) {
+ return {};
+ }
+
+ var meta = $.data(element.form, 'validator').settings.meta;
+ return meta ?
+ $(element).metadata()[meta] :
+ $(element).metadata();
+ },
+
+ staticRules: function(element) {
+ var rules = {};
+ var validator = $.data(element.form, 'validator');
+ if (validator.settings.rules) {
+ rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};
+ }
+ return rules;
+ },
+
+ normalizeRules: function(rules, element) {
+ // handle dependency check
+ $.each(rules, function(prop, val) {
+ // ignore rule when param is explicitly false, eg. required:false
+ if (val === false) {
+ delete rules[prop];
+ return;
+ }
+ if (val.param || val.depends) {
+ var keepRule = true;
+ switch (typeof val.depends) {
+ case "string":
+ keepRule = !!$(val.depends, element.form).length;
+ break;
+ case "function":
+ keepRule = val.depends.call(element, element);
+ break;
+ }
+ if (keepRule) {
+ rules[prop] = val.param !== undefined ? val.param : true;
+ } else {
+ delete rules[prop];
+ }
+ }
+ });
+
+ // evaluate parameters
+ $.each(rules, function(rule, parameter) {
+ rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;
+ });
+
+ // clean number parameters
+ $.each(['minlength', 'maxlength', 'min', 'max'], function() {
+ if (rules[this]) {
+ rules[this] = Number(rules[this]);
+ }
+ });
+ $.each(['rangelength', 'range'], function() {
+ if (rules[this]) {
+ rules[this] = [Number(rules[this][0]), Number(rules[this][1])];
+ }
+ });
+
+ if ($.validator.autoCreateRanges) {
+ // auto-create ranges
+ if (rules.min && rules.max) {
+ rules.range = [rules.min, rules.max];
+ delete rules.min;
+ delete rules.max;
+ }
+ if (rules.minlength && rules.maxlength) {
+ rules.rangelength = [rules.minlength, rules.maxlength];
+ delete rules.minlength;
+ delete rules.maxlength;
+ }
+ }
+
+ // To support custom messages in metadata ignore rule methods titled "messages"
+ if (rules.messages) {
+ delete rules.messages;
+ }
+
+ return rules;
+ },
+
+ // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
+ normalizeRule: function(data) {
+ if( typeof data === "string" ) {
+ var transformed = {};
+ $.each(data.split(/\s/), function() {
+ transformed[this] = true;
+ });
+ data = transformed;
+ }
+ return data;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/addMethod
+ addMethod: function(name, method, message) {
+ $.validator.methods[name] = method;
+ $.validator.messages[name] = message !== undefined ? message : $.validator.messages[name];
+ if (method.length < 3) {
+ $.validator.addClassRules(name, $.validator.normalizeRule(name));
+ }
+ },
+
+ methods: {
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/required
+ required: function(value, element, param) {
+ // check if dependency is met
+ if ( !this.depend(param, element) ) {
+ return "dependency-mismatch";
+ }
+ if ( element.nodeName.toLowerCase() === "select" ) {
+ // could be an array for select-multiple or a string, both are fine this way
+ var val = $(element).val();
+ return val && val.length > 0;
+ }
+ if ( this.checkable(element) ) {
+ return this.getLength(value, element) > 0;
+ }
+ return $.trim(value).length > 0;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/remote
+ remote: function(value, element, param) {
+ if ( this.optional(element) ) {
+ return "dependency-mismatch";
+ }
+
+ var previous = this.previousValue(element);
+ if (!this.settings.messages[element.name] ) {
+ this.settings.messages[element.name] = {};
+ }
+ previous.originalMessage = this.settings.messages[element.name].remote;
+ this.settings.messages[element.name].remote = previous.message;
+
+ param = typeof param === "string" && {url:param} || param;
+
+ if ( this.pending[element.name] ) {
+ return "pending";
+ }
+ if ( previous.old === value ) {
+ return previous.valid;
+ }
+
+ previous.old = value;
+ var validator = this;
+ this.startRequest(element);
+ var data = {};
+ data[element.name] = value;
+ $.ajax($.extend(true, {
+ url: param,
+ mode: "abort",
+ port: "validate" + element.name,
+ dataType: "json",
+ data: data,
+ success: function(response) {
+ validator.settings.messages[element.name].remote = previous.originalMessage;
+ var valid = response === true || response === "true";
+ if ( valid ) {
+ var submitted = validator.formSubmitted;
+ validator.prepareElement(element);
+ validator.formSubmitted = submitted;
+ validator.successList.push(element);
+ delete validator.invalid[element.name];
+ validator.showErrors();
+ } else {
+ var errors = {};
+ var message = response || validator.defaultMessage( element, "remote" );
+ errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;
+ validator.invalid[element.name] = true;
+ validator.showErrors(errors);
+ }
+ previous.valid = valid;
+ validator.stopRequest(element, valid);
+ }
+ }, param));
+ return "pending";
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/minlength
+ minlength: function(value, element, param) {
+ var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);
+ return this.optional(element) || length >= param;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/maxlength
+ maxlength: function(value, element, param) {
+ var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);
+ return this.optional(element) || length <= param;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/rangelength
+ rangelength: function(value, element, param) {
+ var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);
+ return this.optional(element) || ( length >= param[0] && length <= param[1] );
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/min
+ min: function( value, element, param ) {
+ return this.optional(element) || value >= param;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/max
+ max: function( value, element, param ) {
+ return this.optional(element) || value <= param;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/range
+ range: function( value, element, param ) {
+ return this.optional(element) || ( value >= param[0] && value <= param[1] );
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/email
+ email: function(value, element) {
+ // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
+ return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/url
+ url: function(value, element) {
+ // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
+ return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/date
+ date: function(value, element) {
+ return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/dateISO
+ dateISO: function(value, element) {
+ return this.optional(element) || /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/number
+ number: function(value, element) {
+ return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/digits
+ digits: function(value, element) {
+ return this.optional(element) || /^\d+$/.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/creditcard
+ // based on http://en.wikipedia.org/wiki/Luhn
+ creditcard: function(value, element) {
+ if ( this.optional(element) ) {
+ return "dependency-mismatch";
+ }
+ // accept only spaces, digits and dashes
+ if (/[^0-9 \-]+/.test(value)) {
+ return false;
+ }
+ var nCheck = 0,
+ nDigit = 0,
+ bEven = false;
+
+ value = value.replace(/\D/g, "");
+
+ for (var n = value.length - 1; n >= 0; n--) {
+ var cDigit = value.charAt(n);
+ nDigit = parseInt(cDigit, 10);
+ if (bEven) {
+ if ((nDigit *= 2) > 9) {
+ nDigit -= 9;
+ }
+ }
+ nCheck += nDigit;
+ bEven = !bEven;
+ }
+
+ return (nCheck % 10) === 0;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/equalTo
+ equalTo: function(value, element, param) {
+ // bind to the blur event of the target in order to revalidate whenever the target field is updated
+ // TODO find a way to bind the event just once, avoiding the unbind-rebind overhead
+ var target = $(param);
+ if (this.settings.onfocusout) {
+ target.unbind(".validate-equalTo").bind("blur.validate-equalTo", function() {
+ $(element).valid();
+ });
+ }
+ return value === target.val();
+ }
+
+ }
+
+});
+
+// deprecated, use $.validator.format instead
+$.format = $.validator.format;
+
+}(jQuery));
+
+// ajax mode: abort
+// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
+// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()
+(function($) {
+ var pendingRequests = {};
+ // Use a prefilter if available (1.5+)
+ if ( $.ajaxPrefilter ) {
+ $.ajaxPrefilter(function(settings, _, xhr) {
+ var port = settings.port;
+ if (settings.mode === "abort") {
+ if ( pendingRequests[port] ) {
+ pendingRequests[port].abort();
+ }
+ pendingRequests[port] = xhr;
+ }
+ });
+ } else {
+ // Proxy ajax
+ var ajax = $.ajax;
+ $.ajax = function(settings) {
+ var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode,
+ port = ( "port" in settings ? settings : $.ajaxSettings ).port;
+ if (mode === "abort") {
+ if ( pendingRequests[port] ) {
+ pendingRequests[port].abort();
+ }
+ return (pendingRequests[port] = ajax.apply(this, arguments));
+ }
+ return ajax.apply(this, arguments);
+ };
+ }
+}(jQuery));
+
+// provides cross-browser focusin and focusout events
+// IE has native support, in other browsers, use event caputuring (neither bubbles)
+
+// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
+// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target
+(function($) {
+ // only implement if not provided by jQuery core (since 1.4)
+ // TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs
+ if (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) {
+ $.each({
+ focus: 'focusin',
+ blur: 'focusout'
+ }, function( original, fix ){
+ $.event.special[fix] = {
+ setup:function() {
+ this.addEventListener( original, handler, true );
+ },
+ teardown:function() {
+ this.removeEventListener( original, handler, true );
+ },
+ handler: function(e) {
+ var args = arguments;
+ args[0] = $.event.fix(e);
+ args[0].type = fix;
+ return $.event.handle.apply(this, args);
+ }
+ };
+ function handler(e) {
+ e = $.event.fix(e);
+ e.type = fix;
+ return $.event.handle.call(this, e);
+ }
+ });
+ }
+ $.extend($.fn, {
+ validateDelegate: function(delegate, type, handler) {
+ return this.bind(type, function(event) {
+ var target = $(event.target);
+ if (target.is(delegate)) {
+ return handler.apply(target, arguments);
+ }
+ });
+ }
+ });
+}(jQuery));
diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.validate.min.js b/wqflask/wqflask/static/packages/jqplot/jquery.validate.min.js
new file mode 100644
index 00000000..85afad53
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/jquery.validate.min.js
@@ -0,0 +1,4 @@
+/*! jQuery Validation Plugin - v1.10.0 - 9/7/2012
+* https://github.com/jzaefferer/jquery-validation
+* Copyright (c) 2012 Jörn Zaefferer; Licensed MIT, GPL */
+(function(a){a.extend(a.fn,{validate:function(b){if(!this.length){b&&b.debug&&window.console&&console.warn("nothing selected, can't validate, returning nothing");return}var c=a.data(this[0],"validator");return c?c:(this.attr("novalidate","novalidate"),c=new a.validator(b,this[0]),a.data(this[0],"validator",c),c.settings.onsubmit&&(this.validateDelegate(":submit","click",function(b){c.settings.submitHandler&&(c.submitButton=b.target),a(b.target).hasClass("cancel")&&(c.cancelSubmit=!0)}),this.submit(function(b){function d(){var d;return c.settings.submitHandler?(c.submitButton&&(d=a("<input type='hidden'/>").attr("name",c.submitButton.name).val(c.submitButton.value).appendTo(c.currentForm)),c.settings.submitHandler.call(c,c.currentForm,b),c.submitButton&&d.remove(),!1):!0}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){if(a(this[0]).is("form"))return this.validate().form();var b=!0,c=a(this[0].form).validate();return this.each(function(){b&=c.element(this)}),b},removeAttrs:function(b){var c={},d=this;return a.each(b.split(/\s/),function(a,b){c[b]=d.attr(b),d.removeAttr(b)}),c},rules:function(b,c){var d=this[0];if(b){var e=a.data(d.form,"validator").settings,f=e.rules,g=a.validator.staticRules(d);switch(b){case"add":a.extend(g,a.validator.normalizeRule(c)),f[d.name]=g,c.messages&&(e.messages[d.name]=a.extend(e.messages[d.name],c.messages));break;case"remove":if(!c)return delete f[d.name],g;var h={};return a.each(c.split(/\s/),function(a,b){h[b]=g[b],delete g[b]}),h}}var i=a.validator.normalizeRules(a.extend({},a.validator.metadataRules(d),a.validator.classRules(d),a.validator.attributeRules(d),a.validator.staticRules(d)),d);if(i.required){var j=i.required;delete i.required,i=a.extend({required:j},i)}return i}}),a.extend(a.expr[":"],{blank:function(b){return!a.trim(""+b.value)},filled:function(b){return!!a.trim(""+b.value)},unchecked:function(a){return!a.checked}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return arguments.length===1?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),c)}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a,b){this.lastActive=a,this.settings.focusCleanup&&!this.blockFocusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.addWrapper(this.errorsFor(a)).hide())},onfocusout:function(a,b){!this.checkable(a)&&(a.name in this.submitted||!this.optional(a))&&this.element(a)},onkeyup:function(a,b){if(b.which===9&&this.elementValue(a)==="")return;(a.name in this.submitted||a===this.lastActive)&&this.element(a)},onclick:function(a,b){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){b.type==="radio"?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){b.type==="radio"?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:!1,prototype:{init:function(){function d(b){var c=a.data(this[0].form,"validator"),d="on"+b.type.replace(/^validate/,"");c.settings[d]&&c.settings[d].call(c,this[0],b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var b=this.groups={};a.each(this.settings.groups,function(c,d){a.each(d.split(/\s/),function(a,d){b[d]=c})});var c=this.settings.rules;a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).validateDelegate(":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'] ","focusin focusout keyup",d).validateDelegate("[type='radio'], [type='checkbox'], select, option","click",d),this.settings.invalidHandler&&a(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler)},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){b=this.validationTargetFor(this.clean(b)),this.lastElement=b,this.prepareElement(b),this.currentElements=a(b);var c=this.check(b)!==!1;return c?delete this.invalid[b.name]:this.invalid[b.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),c},showErrors:function(b){if(b){a.extend(this.errorMap,b),this.errorList=[];for(var c in b)this.errorList.push({message:b[c],element:this.findByName(c)[0]});this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.submitted={},this.lastElement=null,this.prepareForm(),this.hideErrors(),this.elements().removeClass(this.settings.errorClass).removeData("previousValue")},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b=0;for(var c in a)b++;return b},hideErrors:function(){this.addWrapper(this.toHide).hide()},valid:function(){return this.size()===0},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&a.grep(this.errorList,function(a){return a.element.name===b.name}).length===1&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){return!this.name&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.name in c||!b.objectLength(a(this).rules())?!1:(c[this.name]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.replace(" ",".");return a(this.settings.errorElement+"."+b,this.errorContext)},reset:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([]),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c=a(b).attr("type"),d=a(b).val();return c==="radio"||c==="checkbox"?a('input[name="'+a(b).attr("name")+'"]:checked').val():typeof d=="string"?d.replace(/\r/g,""):d},check:function(b){b=this.validationTargetFor(this.clean(b));var c=a(b).rules(),d=!1,e=this.elementValue(b),f;for(var g in c){var h={method:g,parameters:c[g]};try{f=a.validator.methods[g].call(this,e,b,h.parameters);if(f==="dependency-mismatch"){d=!0;continue}d=!1;if(f==="pending"){this.toHide=this.toHide.not(this.errorsFor(b));return}if(!f)return this.formatAndAdd(b,h),!1}catch(i){throw this.settings.debug&&window.console&&console.log("exception occured when checking element "+b.id+", check the '"+h.method+"' method",i),i}}if(d)return;return this.objectLength(c)&&this.successList.push(b),!0},customMetaMessage:function(b,c){if(!a.metadata)return;var d=this.settings.meta?a(b).metadata()[this.settings.meta]:a(b).metadata();return d&&d.messages&&d.messages[c]},customDataMessage:function(b,c){return a(b).data("msg-"+c.toLowerCase())||b.attributes&&a(b).attr("data-msg-"+c.toLowerCase())},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;a<arguments.length;a++)if(arguments[a]!==undefined)return arguments[a];return undefined},defaultMessage:function(b,c){return this.findDefined(this.customMessage(b.name,c),this.customDataMessage(b,c),this.customMetaMessage(b,c),!this.settings.ignoreTitle&&b.title||undefined,a.validator.messages[c],"<strong>Warning: No message defined for "+b.name+"</strong>")},formatAndAdd:function(b,c){var d=this.defaultMessage(b,c.method),e=/\$?\{(\d+)\}/g;typeof d=="function"?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),this.errorList.push({message:d,element:b}),this.errorMap[b.name]=d,this.submitted[b.name]=d},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b;for(a=0;this.errorList[a];a++){var c=this.errorList[a];this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message)}this.errorList.length&&(this.toShow=this.toShow.add(this.containers));if(this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d=this.errorsFor(b);d.length?(d.removeClass(this.settings.validClass).addClass(this.settings.errorClass),d.attr("generated")&&d.html(c)):(d=a("<"+this.settings.errorElement+"/>").attr({"for":this.idOrName(b),generated:!0}).addClass(this.settings.errorClass).html(c||""),this.settings.wrapper&&(d=d.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.append(d).length||(this.settings.errorPlacement?this.settings.errorPlacement(d,a(b)):d.insertAfter(b))),!c&&this.settings.success&&(d.text(""),typeof this.settings.success=="string"?d.addClass(this.settings.success):this.settings.success(d,b)),this.toShow=this.toShow.add(d)},errorsFor:function(b){var c=this.idOrName(b);return this.errors().filter(function(){return a(this).attr("for")===c})},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(a){return this.checkable(a)&&(a=this.findByName(a.name).not(this.settings.ignore)[0]),a},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find('[name="'+b+'"]')},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):!0},dependTypes:{"boolean":function(a,b){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(a){this.pending[a.name]||(this.pendingRequest++,this.pending[a.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],c&&this.pendingRequest===0&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.formSubmitted=!1):!c&&this.pendingRequest===0&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b){return a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,"remote")})}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},attributeRules:function(b){var c={},d=a(b);for(var e in a.validator.methods){var f;e==="required"?(f=d.get(0).getAttribute(e),f===""&&(f=!0),f=!!f):f=d.attr(e),f?c[e]=f:d[0].getAttribute("type")===e&&(c[e]=!0)}return c.maxlength&&/-1|2147483647|524288/.test(c.maxlength)&&delete c.maxlength,c},metadataRules:function(b){if(!a.metadata)return{};var c=a.data(b.form,"validator").settings.meta;return c?a(b).metadata()[c]:a(b).metadata()},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1){delete b[d];return}if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=e.param!==undefined?e.param:!0:delete b[d]}}),a.each(b,function(d,e){b[d]=a.isFunction(e)?e(c):e}),a.each(["minlength","maxlength","min","max"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){b[this]&&(b[this]=[Number(b[this][0]),Number(b[this][1])])}),a.validator.autoCreateRanges&&(b.min&&b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),b.minlength&&b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b.messages&&delete b.messages,b},normalizeRule:function(b){if(typeof b=="string"){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=d!==undefined?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if(c.nodeName.toLowerCase()==="select"){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:a.trim(b).length>0},remote:function(b,c,d){if(this.optional(c))return"dependency-mismatch";var e=this.previousValue(c);this.settings.messages[c.name]||(this.settings.messages[c.name]={}),e.originalMessage=this.settings.messages[c.name].remote,this.settings.messages[c.name].remote=e.message,d=typeof d=="string"&&{url:d}||d;if(this.pending[c.name])return"pending";if(e.old===b)return e.valid;e.old=b;var f=this;this.startRequest(c);var g={};return g[c.name]=b,a.ajax(a.extend(!0,{url:d,mode:"abort",port:"validate"+c.name,dataType:"json",data:g,success:function(d){f.settings.messages[c.name].remote=e.originalMessage;var g=d===!0||d==="true";if(g){var h=f.formSubmitted;f.prepareElement(c),f.formSubmitted=h,f.successList.push(c),delete f.invalid[c.name],f.showErrors()}else{var i={},j=d||f.defaultMessage(c,"remote");i[c.name]=e.message=a.isFunction(j)?j(b):j,f.invalid[c.name]=!0,f.showErrors(i)}e.valid=g,f.stopRequest(c,g)}},d)),"pending"},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(a.trim(b),c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(a.trim(b),c);return this.optional(c)||e<=d},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(a.trim(b),c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||a<=c},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},email:function(a,b){return this.optional(b)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(a)},url:function(a,b){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a))},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(a)},number:function(a,b){return this.optional(b)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},creditcard:function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9 \-]+/.test(a))return!1;var c=0,d=0,e=!1;a=a.replace(/\D/g,"");for(var f=a.length-1;f>=0;f--){var g=a.charAt(f);d=parseInt(g,10),e&&(d*=2)>9&&(d-=9),c+=d,e=!e}return c%10===0},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()}}}),a.format=a.validator.format})(jQuery),function(a){var b={};if(a.ajaxPrefilter)a.ajaxPrefilter(function(a,c,d){var e=a.port;a.mode==="abort"&&(b[e]&&b[e].abort(),b[e]=d)});else{var c=a.ajax;a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return e==="abort"?(b[f]&&b[f].abort(),b[f]=c.apply(this,arguments)):c.apply(this,arguments)}}}(jQuery),function(a){!jQuery.event.special.focusin&&!jQuery.event.special.focusout&&document.addEventListener&&a.each({focus:"focusin",blur:"focusout"},function(b,c){function d(b){return b=a.event.fix(b),b.type=c,a.event.handle.call(this,b)}a.event.special[c]={setup:function(){this.addEventListener(b,d,!0)},teardown:function(){this.removeEventListener(b,d,!0)},handler:function(b){var d=arguments;return d[0]=a.event.fix(b),d[0].type=c,a.event.handle.apply(this,d)}}}),a.extend(a.fn,{validateDelegate:function(b,c,d){return this.bind(c,function(c){var e=a(c.target);if(e.is(b))return d.apply(e,arguments)})}})}(jQuery) \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/optionsTutorial.txt b/wqflask/wqflask/static/packages/jqplot/optionsTutorial.txt
new file mode 100644
index 00000000..4ec4fe9b
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/optionsTutorial.txt
@@ -0,0 +1,240 @@
+Title: Options Tutorial
+
+This document will help you understand how jqPlot's options
+relate to the API documentation and the jqPlot object
+itself. For a listing of options available to jqPlot,
+see <jqPlot Options> in the jqPlotOptions.txt file.
+
+The key to effectively using jqPlot is understanding jqPlot's
+options. The online documentation is API documentation. While
+it explains what attributes and methods various objects posses,
+it doesn't explain how to use or set those attributes through
+options. This tutorial will help explain that.
+
+Lets assume you are creating a plot
+like this:
+
+> chart = $.jqplot('chart', dataSeries, optionsObj);
+
+First, note that you shouldn't try to directly set attributes on the
+"chart" object (like chart.grid.shadow) after your call to $.jqplot().
+At best this won't do anything **(see below). You should pass options in via
+the "optionsObj".
+
+the optionsObj really represents the plot object (jqPlot object, not
+to be confused with the $.jqplot function which will create a jqPlot
+object). Attributes you specify on that object will be merged with
+attributes in the jqPlot object. The axes, legend, series, etc. are
+attributes on the jqPlot object. The jqPlot/optionsObj object looks
+something like (only some attributes shown):
+
+> jqPlot-|
+> |-seriesColors
+> |-textColor
+> |-fontFamily
+> |-fontSize
+> |-stackSeries
+> |-series(Array)-|
+> | |-Series1-|
+> | | |-lineWidth
+> | | |-linePattern
+> | | |-shadow
+> | | |-showLine
+> | | |-showMarker
+> | | |-color
+> | |-Series2...
+> | |-...
+> | |-SeriesN
+> |
+> |-grid(Object)-|
+> | |-drawGridLines
+> | |-background
+> | |-borderColor
+> | |-borderWidth
+> | |-shadow
+> |
+> |-title(Object)-|
+> | |-text
+> | |-show
+> | |-fontFamily
+> | |-fontSize
+> | |-textAlign
+> | |-textColor
+> |
+> |-axes(Object)-|
+> | |-xais-|
+> | | |-min
+> | | |-max
+> | | |-numberTicks
+> | | |-showTicks
+> | | |-showTickMarks
+> | | |-pad
+> |
+> | ... and so on
+
+The optionsObj should follow the same construction as if it were a
+jqPlot object (with some exceptions/shortcuts I'll mention in a
+moment). So generally, when you see something like
+"this.drawGridLines" in the grid properties in the docs, just replace
+"this" with "grid" in your options object. So it becomes
+optionsObj.grid.drawGridLines. Do likewise with the other objects in
+the plot, replacing "this", with the respective attribute on the plot
+like "legend" or "title". Series and Axes are handled a little
+different, because series is an array and axes has 4 distinct children
+"xaxis", "yaxis", "x2axis" and "y2axis".
+
+So, to remove the shadow from the grid and change the grid border size
+you would do:
+
+> optionObj = {grid:{shadow:false, borderWidth:9.0}};
+
+To do the same as above but also make all the text in the plot red you
+would do:
+
+> optionObj = {
+> textColor:"#ff0000",
+> grid:{shadow:false, borderWidth:9.0}
+> }
+
+Here is a more deeply nested example. Say you want to specify a min
+and max on your y axis and use a specific color for your second
+series. That would look like:
+
+> optionsObj = {
+> axes:{yaxis:{min:5, max:230}},
+> series:[{},{color:"#33ff66"}]
+> }
+
+Note that series options are an array in order of the series data you
+sent in to your plot. To get to the second series, you have to put an
+object (even if empty) in place of the first series.
+
+There is a handy shortcut to assign options to all axes or all series
+at one go. Use axesDefaults and seriesDefaults. So, if you wanted
+both x and y axes to start at 0 and you wanted all series to not show
+markers, you could do:
+
+> optionsObj = {axesDefaults:{min:0}, seriesDefaults:{showMarker:false}}
+
+Another shortcut is for the plot title. Normally, you would assign
+options to the title as an object. If you specify a title option as a
+string, it will assign that to the title.text property automatically.
+So these two are equivalent:
+
+> optionsObj = {title:{text:"My Plot"}}
+
+and
+
+> optionsObj = {title:"My Plot"}
+
+Where things need more explaination is with renderers, plugins and
+their options. Briefly, what's renderer, what's a plugin.
+
+A renderer is an object that is used to draw something and gets
+attached to an existing object in the plot in order to draw it. A
+plugin does more than just provide drawing functionality to an
+object. It will do more like calculate a trend line, change the
+cursor, provide event driven functionality, etc. I consider renderers
+plugins, but plugins don't have to be renderers.
+
+So, how do you use renderers, plugins, and specify their options?
+Some common renderes are for bar charts and category axes. If you
+want to render your series as a bar chart with each set of bars
+showing up in a category on the x axis, you do:
+
+> optionsObj = {
+> seriesDefaults:{renderer:$.jqplot.BarRenderer},
+> axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}
+> }
+
+This replaces the default renderer used for all series in the plot
+with a bar renderer and the x axis default renderer (but not any other
+axis) with a category renderer.
+
+Now, how would I assign options to those renderers? The renderer's
+attributes may not be present in the pre-existing jqPlot object, they
+may be specific to the renderer. This is done through the
+"rendererOptions" option on the appropriate object. So, if I wanted my
+bars to be 25 pixels wide, I would do:
+
+
+> optionsObj = {
+> seriesDefaults:{
+> renderer:$.jqplot.BarRenderer},
+> rendererOptions:{
+> barWidth:25
+> },
+> axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}
+> }
+
+Again, this is using the "seriesDefaults" option, which will apply
+options to all series in the plot. You could do the same on any
+particular series in the plot through the "series" options array.
+
+Plugins are free to add their own options. For example, the
+highlighter plugin has it's own set of options that are unique to it.
+As a result, it responds to options placed in the "highlighter"
+attribute of your options object. So, if I wanted to change the
+highlighter tooltip to fade in and out slowly and be positioned
+directly above the point I'm highlighting:
+
+> optionsObj = {
+> highlighter:{tooltipFadeSpeed:'slow', tooltipLocation:'n'}
+> }
+
+Other plugins, like dragable and trendlines, add their options in with
+the series. This is because both of those plugins can have different
+options for different series in the plot. So, if you wanted to specify the
+color of the dragable and constrain it to drag only on the x axis as well
+as specify the color of the trend line you could do:
+
+> series:[{
+> dragable: {
+> color: '#ff3366',
+> constrainTo: 'x'
+> },
+> trendline: {
+> color: '#cccccc'
+> }
+> }]
+
+This would apply those options to the first series only. If you had 2 series
+and wanted to turn off dragging and trend lines on the second series, you could do:
+
+> series:[{
+> dragable: {
+> color: '#ff3366',
+> constrainTo: 'x'
+> },
+> trendline: {
+> color: '#cccccc'
+> }
+> }, {
+> isDragable: false,
+> trendline:{
+> show: false
+> }
+> }]
+
+Note, series dragability is turned off with the "isDragable" option directly on
+the series itself, not with a suboption of "dragable". This may be improved
+in the future.
+
+I hope this is helpful.
+A few key points to remember:
+
+- When you see "this" in the api docs, you generally replace it with
+the name of the object (in lowercase) you are looking at in your
+options object.
+- seriesDefaults and axesDefaults are convenient shortcuts.
+- to assign options to a renderer, generally use the "rendererOptions"
+- plugins may add their own options attribute, like "highlighter" or
+"cursor".
+
+** Note: you can set attributes after the plot is created (like
+plot.grid.shadow = false), but you'll have to issue the appropriate
+calls to possibly reinitialize and redraw the plot. jqPlot can
+definitely handle this to change the plot after creation (this is how
+the dragable plugin updates the plot data and the trend line plugin
+recomputes itself when data changes). This hasn't been documented
+yet, however. \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.js
new file mode 100644
index 00000000..00b33815
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.js
@@ -0,0 +1,313 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ // Class: $.jqplot.BezierCurveRenderer.js
+ // Renderer which draws lines as stacked bezier curves.
+ // Data for the line will not be specified as an array of
+ // [x, y] data point values, but as a an array of [start piont, bezier curve]
+ // So, the line is specified as: [[xstart, ystart], [cp1x, cp1y, cp2x, cp2y, xend, yend]].
+ $.jqplot.BezierCurveRenderer = function(){
+ $.jqplot.LineRenderer.call(this);
+ };
+
+ $.jqplot.BezierCurveRenderer.prototype = new $.jqplot.LineRenderer();
+ $.jqplot.BezierCurveRenderer.prototype.constructor = $.jqplot.BezierCurveRenderer;
+
+
+ // Method: setGridData
+ // converts the user data values to grid coordinates and stores them
+ // in the gridData array.
+ // Called with scope of a series.
+ $.jqplot.BezierCurveRenderer.prototype.setGridData = function(plot) {
+ // recalculate the grid data
+ var xp = this._xaxis.series_u2p;
+ var yp = this._yaxis.series_u2p;
+ // this._plotData should be same as this.data
+ var data = this.data;
+ this.gridData = [];
+ this._prevGridData = [];
+ // if seriesIndex = 0, fill to x axis.
+ // if seriesIndex > 0, fill to previous series data.
+ var idx = this.index;
+ if (data.length == 2) {
+ if (idx == 0) {
+ this.gridData = [
+ [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])],
+ [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]),
+ xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]),
+ xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])],
+ [xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, this._yaxis.min)],
+ [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)]
+ ];
+ }
+ else {
+ var psd = plot.series[idx-1].data;
+ this.gridData = [
+ [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])],
+ [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]),
+ xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]),
+ xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])],
+ [xp.call(this._xaxis, psd[1][4]), yp.call(this._yaxis, psd[1][5])],
+ [xp.call(this._xaxis, psd[1][2]), yp.call(this._yaxis, psd[1][3]),
+ xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]),
+ xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])]
+ ];
+ }
+ }
+ else {
+ if (idx == 0) {
+ this.gridData = [
+ [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])],
+ [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]),
+ xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]),
+ xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])],
+ [xp.call(this._xaxis, data[3][1]), yp.call(this._yaxis, this._yaxis.min)],
+ [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)]
+ ];
+ }
+ else {
+ var psd = plot.series[idx-1].data;
+ this.gridData = [
+ [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])],
+ [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]),
+ xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]),
+ xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])],
+ [xp.call(this._xaxis, psd[3][0]), yp.call(this._yaxis, psd[3][1])],
+ [xp.call(this._xaxis, psd[2][0]), yp.call(this._yaxis, psd[2][1]),
+ xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]),
+ xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])]
+ ];
+ }
+ }
+ };
+
+ // Method: makeGridData
+ // converts any arbitrary data values to grid coordinates and
+ // returns them. This method exists so that plugins can use a series'
+ // linerenderer to generate grid data points without overwriting the
+ // grid data associated with that series.
+ // Called with scope of a series.
+ $.jqplot.BezierCurveRenderer.prototype.makeGridData = function(data, plot) {
+ // recalculate the grid data
+ var xp = this._xaxis.series_u2p;
+ var yp = this._yaxis.series_u2p;
+ var gd = [];
+ var pgd = [];
+ // if seriesIndex = 0, fill to x axis.
+ // if seriesIndex > 0, fill to previous series data.
+ var idx = this.index;
+ if (data.length == 2) {
+ if (idx == 0) {
+ gd = [
+ [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])],
+ [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]),
+ xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]),
+ xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])],
+ [xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, this._yaxis.min)],
+ [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)]
+ ];
+ }
+ else {
+ var psd = plot.series[idx-1].data;
+ gd = [
+ [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])],
+ [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]),
+ xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]),
+ xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])],
+ [xp.call(this._xaxis, psd[1][4]), yp.call(this._yaxis, psd[1][5])],
+ [xp.call(this._xaxis, psd[1][2]), yp.call(this._yaxis, psd[1][3]),
+ xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]),
+ xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])]
+ ];
+ }
+ }
+ else {
+ if (idx == 0) {
+ gd = [
+ [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])],
+ [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]),
+ xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]),
+ xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])],
+ [xp.call(this._xaxis, data[3][1]), yp.call(this._yaxis, this._yaxis.min)],
+ [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)]
+ ];
+ }
+ else {
+ var psd = plot.series[idx-1].data;
+ gd = [
+ [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])],
+ [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]),
+ xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]),
+ xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])],
+ [xp.call(this._xaxis, psd[3][0]), yp.call(this._yaxis, psd[3][1])],
+ [xp.call(this._xaxis, psd[2][0]), yp.call(this._yaxis, psd[2][1]),
+ xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]),
+ xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])]
+ ];
+ }
+ }
+ return gd;
+ };
+
+
+ // called within scope of series.
+ $.jqplot.BezierCurveRenderer.prototype.draw = function(ctx, gd, options) {
+ var i;
+ ctx.save();
+ if (gd.length) {
+ if (this.showLine) {
+ ctx.save();
+ var opts = (options != null) ? options : {};
+ ctx.fillStyle = opts.fillStyle || this.color;
+ ctx.beginPath();
+ ctx.moveTo(gd[0][0], gd[0][1]);
+ ctx.bezierCurveTo(gd[1][0], gd[1][1], gd[1][2], gd[1][3], gd[1][4], gd[1][5]);
+ ctx.lineTo(gd[2][0], gd[2][1]);
+ if (gd[3].length == 2) {
+ ctx.lineTo(gd[3][0], gd[3][1]);
+ }
+ else {
+ ctx.bezierCurveTo(gd[3][0], gd[3][1], gd[3][2], gd[3][3], gd[3][4], gd[3][5]);
+ }
+ ctx.closePath();
+ ctx.fill();
+ ctx.restore();
+ }
+ }
+
+ ctx.restore();
+ };
+
+ $.jqplot.BezierCurveRenderer.prototype.drawShadow = function(ctx, gd, options) {
+ // This is a no-op, shadows drawn with lines.
+ };
+
+ $.jqplot.BezierAxisRenderer = function() {
+ $.jqplot.LinearAxisRenderer.call(this);
+ };
+
+ $.jqplot.BezierAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
+ $.jqplot.BezierAxisRenderer.prototype.constructor = $.jqplot.BezierAxisRenderer;
+
+
+ // Axes on a plot with Bezier Curves
+ $.jqplot.BezierAxisRenderer.prototype.init = function(options){
+ $.extend(true, this, options);
+ var db = this._dataBounds;
+ // Go through all the series attached to this axis and find
+ // the min/max bounds for this axis.
+ for (var i=0; i<this._series.length; i++) {
+ var s = this._series[i];
+ var d = s.data;
+ if (d.length == 4) {
+ for (var j=0; j<d.length; j++) {
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ if (d[j][0] < db.min || db.min == null) {
+ db.min = d[j][0];
+ }
+ if (d[j][0] > db.max || db.max == null) {
+ db.max = d[j][0];
+ }
+ }
+ else {
+ if (d[j][1] < db.min || db.min == null) {
+ db.min = d[j][1];
+ }
+ if (d[j][1] > db.max || db.max == null) {
+ db.max = d[j][1];
+ }
+ }
+ }
+ }
+ else {
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ if (d[0][0] < db.min || db.min == null) {
+ db.min = d[0][0];
+ }
+ if (d[0][0] > db.max || db.max == null) {
+ db.max = d[0][0];
+ }
+ for (var j=0; j<5; j+=2) {
+ if (d[1][j] < db.min || db.min == null) {
+ db.min = d[1][j];
+ }
+ if (d[1][j] > db.max || db.max == null) {
+ db.max = d[1][j];
+ }
+ }
+ }
+ else {
+ if (d[0][1] < db.min || db.min == null) {
+ db.min = d[0][1];
+ }
+ if (d[0][1] > db.max || db.max == null) {
+ db.max = d[0][1];
+ }
+ for (var j=1; j<6; j+=2) {
+ if (d[1][j] < db.min || db.min == null) {
+ db.min = d[1][j];
+ }
+ if (d[1][j] > db.max || db.max == null) {
+ db.max = d[1][j];
+ }
+ }
+ }
+ }
+ }
+ };
+
+ // setup default renderers for axes and legend so user doesn't have to
+ // called with scope of plot
+ function preInit(target, data, options) {
+ options = options || {};
+ options.axesDefaults = $.extend(true, {pad:0}, options.axesDefaults);
+ options.legend = $.extend(true, {placement:'outside'}, options.legend);
+ // only set these if there is a pie series
+ var setopts = false;
+ if (options.seriesDefaults.renderer == $.jqplot.BezierCurveRenderer) {
+ setopts = true;
+ }
+ else if (options.series) {
+ for (var i=0; i < options.series.length; i++) {
+ if (options.series[i].renderer == $.jqplot.BezierCurveRenderer) {
+ setopts = true;
+ }
+ }
+ }
+
+ if (setopts) {
+ options.axesDefaults.renderer = $.jqplot.BezierAxisRenderer;
+ }
+ }
+
+ $.jqplot.preInitHooks.push(preInit);
+
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.min.js
new file mode 100644
index 00000000..f68f1e6f
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(b){b.jqplot.BezierCurveRenderer=function(){b.jqplot.LineRenderer.call(this)};b.jqplot.BezierCurveRenderer.prototype=new b.jqplot.LineRenderer();b.jqplot.BezierCurveRenderer.prototype.constructor=b.jqplot.BezierCurveRenderer;b.jqplot.BezierCurveRenderer.prototype.setGridData=function(h){var e=this._xaxis.series_u2p;var g=this._yaxis.series_u2p;var f=this.data;this.gridData=[];this._prevGridData=[];var d=this.index;if(f.length==2){if(d==0){this.gridData=[[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,f[0][1])],[e.call(this._xaxis,f[1][0]),g.call(this._yaxis,f[1][1]),e.call(this._xaxis,f[1][2]),g.call(this._yaxis,f[1][3]),e.call(this._xaxis,f[1][4]),g.call(this._yaxis,f[1][5])],[e.call(this._xaxis,f[1][4]),g.call(this._yaxis,this._yaxis.min)],[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,this._yaxis.min)]]}else{var c=h.series[d-1].data;this.gridData=[[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,f[0][1])],[e.call(this._xaxis,f[1][0]),g.call(this._yaxis,f[1][1]),e.call(this._xaxis,f[1][2]),g.call(this._yaxis,f[1][3]),e.call(this._xaxis,f[1][4]),g.call(this._yaxis,f[1][5])],[e.call(this._xaxis,c[1][4]),g.call(this._yaxis,c[1][5])],[e.call(this._xaxis,c[1][2]),g.call(this._yaxis,c[1][3]),e.call(this._xaxis,c[1][0]),g.call(this._yaxis,c[1][1]),e.call(this._xaxis,c[0][0]),g.call(this._yaxis,c[0][1])]]}}else{if(d==0){this.gridData=[[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,f[0][1])],[e.call(this._xaxis,f[1][0]),g.call(this._yaxis,f[1][1]),e.call(this._xaxis,f[2][0]),g.call(this._yaxis,f[2][1]),e.call(this._xaxis,f[3][0]),g.call(this._yaxis,f[3][1])],[e.call(this._xaxis,f[3][1]),g.call(this._yaxis,this._yaxis.min)],[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,this._yaxis.min)]]}else{var c=h.series[d-1].data;this.gridData=[[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,f[0][1])],[e.call(this._xaxis,f[1][0]),g.call(this._yaxis,f[1][1]),e.call(this._xaxis,f[2][0]),g.call(this._yaxis,f[2][1]),e.call(this._xaxis,f[3][0]),g.call(this._yaxis,f[3][1])],[e.call(this._xaxis,c[3][0]),g.call(this._yaxis,c[3][1])],[e.call(this._xaxis,c[2][0]),g.call(this._yaxis,c[2][1]),e.call(this._xaxis,c[1][0]),g.call(this._yaxis,c[1][1]),e.call(this._xaxis,c[0][0]),g.call(this._yaxis,c[0][1])]]}}};b.jqplot.BezierCurveRenderer.prototype.makeGridData=function(g,i){var f=this._xaxis.series_u2p;var h=this._yaxis.series_u2p;var e=[];var j=[];var d=this.index;if(g.length==2){if(d==0){e=[[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,g[0][1])],[f.call(this._xaxis,g[1][0]),h.call(this._yaxis,g[1][1]),f.call(this._xaxis,g[1][2]),h.call(this._yaxis,g[1][3]),f.call(this._xaxis,g[1][4]),h.call(this._yaxis,g[1][5])],[f.call(this._xaxis,g[1][4]),h.call(this._yaxis,this._yaxis.min)],[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,this._yaxis.min)]]}else{var c=i.series[d-1].data;e=[[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,g[0][1])],[f.call(this._xaxis,g[1][0]),h.call(this._yaxis,g[1][1]),f.call(this._xaxis,g[1][2]),h.call(this._yaxis,g[1][3]),f.call(this._xaxis,g[1][4]),h.call(this._yaxis,g[1][5])],[f.call(this._xaxis,c[1][4]),h.call(this._yaxis,c[1][5])],[f.call(this._xaxis,c[1][2]),h.call(this._yaxis,c[1][3]),f.call(this._xaxis,c[1][0]),h.call(this._yaxis,c[1][1]),f.call(this._xaxis,c[0][0]),h.call(this._yaxis,c[0][1])]]}}else{if(d==0){e=[[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,g[0][1])],[f.call(this._xaxis,g[1][0]),h.call(this._yaxis,g[1][1]),f.call(this._xaxis,g[2][0]),h.call(this._yaxis,g[2][1]),f.call(this._xaxis,g[3][0]),h.call(this._yaxis,g[3][1])],[f.call(this._xaxis,g[3][1]),h.call(this._yaxis,this._yaxis.min)],[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,this._yaxis.min)]]}else{var c=i.series[d-1].data;e=[[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,g[0][1])],[f.call(this._xaxis,g[1][0]),h.call(this._yaxis,g[1][1]),f.call(this._xaxis,g[2][0]),h.call(this._yaxis,g[2][1]),f.call(this._xaxis,g[3][0]),h.call(this._yaxis,g[3][1])],[f.call(this._xaxis,c[3][0]),h.call(this._yaxis,c[3][1])],[f.call(this._xaxis,c[2][0]),h.call(this._yaxis,c[2][1]),f.call(this._xaxis,c[1][0]),h.call(this._yaxis,c[1][1]),f.call(this._xaxis,c[0][0]),h.call(this._yaxis,c[0][1])]]}}return e};b.jqplot.BezierCurveRenderer.prototype.draw=function(c,g,d){var e;c.save();if(g.length){if(this.showLine){c.save();var f=(d!=null)?d:{};c.fillStyle=f.fillStyle||this.color;c.beginPath();c.moveTo(g[0][0],g[0][1]);c.bezierCurveTo(g[1][0],g[1][1],g[1][2],g[1][3],g[1][4],g[1][5]);c.lineTo(g[2][0],g[2][1]);if(g[3].length==2){c.lineTo(g[3][0],g[3][1])}else{c.bezierCurveTo(g[3][0],g[3][1],g[3][2],g[3][3],g[3][4],g[3][5])}c.closePath();c.fill();c.restore()}}c.restore()};b.jqplot.BezierCurveRenderer.prototype.drawShadow=function(c,e,d){};b.jqplot.BezierAxisRenderer=function(){b.jqplot.LinearAxisRenderer.call(this)};b.jqplot.BezierAxisRenderer.prototype=new b.jqplot.LinearAxisRenderer();b.jqplot.BezierAxisRenderer.prototype.constructor=b.jqplot.BezierAxisRenderer;b.jqplot.BezierAxisRenderer.prototype.init=function(f){b.extend(true,this,f);var c=this._dataBounds;for(var g=0;g<this._series.length;g++){var h=this._series[g];var k=h.data;if(k.length==4){for(var e=0;e<k.length;e++){if(this.name=="xaxis"||this.name=="x2axis"){if(k[e][0]<c.min||c.min==null){c.min=k[e][0]}if(k[e][0]>c.max||c.max==null){c.max=k[e][0]}}else{if(k[e][1]<c.min||c.min==null){c.min=k[e][1]}if(k[e][1]>c.max||c.max==null){c.max=k[e][1]}}}}else{if(this.name=="xaxis"||this.name=="x2axis"){if(k[0][0]<c.min||c.min==null){c.min=k[0][0]}if(k[0][0]>c.max||c.max==null){c.max=k[0][0]}for(var e=0;e<5;e+=2){if(k[1][e]<c.min||c.min==null){c.min=k[1][e]}if(k[1][e]>c.max||c.max==null){c.max=k[1][e]}}}else{if(k[0][1]<c.min||c.min==null){c.min=k[0][1]}if(k[0][1]>c.max||c.max==null){c.max=k[0][1]}for(var e=1;e<6;e+=2){if(k[1][e]<c.min||c.min==null){c.min=k[1][e]}if(k[1][e]>c.max||c.max==null){c.max=k[1][e]}}}}}};function a(g,f,d){d=d||{};d.axesDefaults=b.extend(true,{pad:0},d.axesDefaults);d.legend=b.extend(true,{placement:"outside"},d.legend);var c=false;if(d.seriesDefaults.renderer==b.jqplot.BezierCurveRenderer){c=true}else{if(d.series){for(var e=0;e<d.series.length;e++){if(d.series[e].renderer==b.jqplot.BezierCurveRenderer){c=true}}}}if(c){d.axesDefaults.renderer=b.jqplot.BezierAxisRenderer}}b.jqplot.preInitHooks.push(a)})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.js
new file mode 100644
index 00000000..c1be235d
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.js
@@ -0,0 +1,797 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+
+ // Class: $.jqplot.BarRenderer
+ // A plugin renderer for jqPlot to draw a bar plot.
+ // Draws series as a line.
+
+ $.jqplot.BarRenderer = function(){
+ $.jqplot.LineRenderer.call(this);
+ };
+
+ $.jqplot.BarRenderer.prototype = new $.jqplot.LineRenderer();
+ $.jqplot.BarRenderer.prototype.constructor = $.jqplot.BarRenderer;
+
+ // called with scope of series.
+ $.jqplot.BarRenderer.prototype.init = function(options, plot) {
+ // Group: Properties
+ //
+ // prop: barPadding
+ // Number of pixels between adjacent bars at the same axis value.
+ this.barPadding = 8;
+ // prop: barMargin
+ // Number of pixels between groups of bars at adjacent axis values.
+ this.barMargin = 10;
+ // prop: barDirection
+ // 'vertical' = up and down bars, 'horizontal' = side to side bars
+ this.barDirection = 'vertical';
+ // prop: barWidth
+ // Width of the bar in pixels (auto by devaul). null = calculated automatically.
+ this.barWidth = null;
+ // prop: shadowOffset
+ // offset of the shadow from the slice and offset of
+ // each succesive stroke of the shadow from the last.
+ this.shadowOffset = 2;
+ // prop: shadowDepth
+ // number of strokes to apply to the shadow,
+ // each stroke offset shadowOffset from the last.
+ this.shadowDepth = 5;
+ // prop: shadowAlpha
+ // transparency of the shadow (0 = transparent, 1 = opaque)
+ this.shadowAlpha = 0.08;
+ // prop: waterfall
+ // true to enable waterfall plot.
+ this.waterfall = false;
+ // prop: groups
+ // group bars into this many groups
+ this.groups = 1;
+ // prop: varyBarColor
+ // true to color each bar of a series separately rather than
+ // have every bar of a given series the same color.
+ // If used for non-stacked multiple series bar plots, user should
+ // specify a separate 'seriesColors' array for each series.
+ // Otherwise, each series will set their bars to the same color array.
+ // This option has no Effect for stacked bar charts and is disabled.
+ this.varyBarColor = false;
+ // prop: highlightMouseOver
+ // True to highlight slice when moused over.
+ // This must be false to enable highlightMouseDown to highlight when clicking on a slice.
+ this.highlightMouseOver = true;
+ // prop: highlightMouseDown
+ // True to highlight when a mouse button is pressed over a slice.
+ // This will be disabled if highlightMouseOver is true.
+ this.highlightMouseDown = false;
+ // prop: highlightColors
+ // an array of colors to use when highlighting a bar.
+ this.highlightColors = [];
+ // prop: transposedData
+ // NOT IMPLEMENTED YET. True if this is a horizontal bar plot and
+ // x and y values are "transposed". Tranposed, or "swapped", data is
+ // required prior to rev. 894 builds of jqPlot with horizontal bars.
+ // Allows backward compatability of bar renderer horizontal bars with
+ // old style data sets.
+ this.transposedData = true;
+ this.renderer.animation = {
+ show: false,
+ direction: 'down',
+ speed: 3000,
+ _supported: true
+ };
+ this._type = 'bar';
+
+ // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
+ if (options.highlightMouseDown && options.highlightMouseOver == null) {
+ options.highlightMouseOver = false;
+ }
+
+ //////
+ // This is probably wrong here.
+ // After going back and forth on wether renderer should be the thing
+ // or extend the thing, it seems that it it best if it is a property
+ // on the thing. This should be something that is commonized
+ // among series renderers in the future.
+ //////
+ $.extend(true, this, options);
+
+ // really should probably do this
+ $.extend(true, this.renderer, options);
+ // fill is still needed to properly draw the legend.
+ // bars have to be filled.
+ this.fill = true;
+
+ // if horizontal bar and animating, reset the default direction
+ if (this.barDirection === 'horizontal' && this.rendererOptions.animation && this.rendererOptions.animation.direction == null) {
+ this.renderer.animation.direction = 'left';
+ }
+
+ if (this.waterfall) {
+ this.fillToZero = false;
+ this.disableStack = true;
+ }
+
+ if (this.barDirection == 'vertical' ) {
+ this._primaryAxis = '_xaxis';
+ this._stackAxis = 'y';
+ this.fillAxis = 'y';
+ }
+ else {
+ this._primaryAxis = '_yaxis';
+ this._stackAxis = 'x';
+ this.fillAxis = 'x';
+ }
+ // index of the currenty highlighted point, if any
+ this._highlightedPoint = null;
+ // total number of values for all bar series, total number of bar series, and position of this series
+ this._plotSeriesInfo = null;
+ // Array of actual data colors used for each data point.
+ this._dataColors = [];
+ this._barPoints = [];
+
+ // set the shape renderer options
+ var opts = {lineJoin:'miter', lineCap:'round', fill:true, isarc:false, strokeStyle:this.color, fillStyle:this.color, closePath:this.fill};
+ this.renderer.shapeRenderer.init(opts);
+ // set the shadow renderer options
+ var sopts = {lineJoin:'miter', lineCap:'round', fill:true, isarc:false, angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, depth:this.shadowDepth, closePath:this.fill};
+ this.renderer.shadowRenderer.init(sopts);
+
+ plot.postInitHooks.addOnce(postInit);
+ plot.postDrawHooks.addOnce(postPlotDraw);
+ plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
+ plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
+ plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
+ plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
+ plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick);
+ };
+
+ // called with scope of series
+ function barPreInit(target, data, seriesDefaults, options) {
+ if (this.rendererOptions.barDirection == 'horizontal') {
+ this._stackAxis = 'x';
+ this._primaryAxis = '_yaxis';
+ }
+ if (this.rendererOptions.waterfall == true) {
+ this._data = $.extend(true, [], this.data);
+ var sum = 0;
+ var pos = (!this.rendererOptions.barDirection || this.rendererOptions.barDirection === 'vertical' || this.transposedData === false) ? 1 : 0;
+ for(var i=0; i<this.data.length; i++) {
+ sum += this.data[i][pos];
+ if (i>0) {
+ this.data[i][pos] += this.data[i-1][pos];
+ }
+ }
+ this.data[this.data.length] = (pos == 1) ? [this.data.length+1, sum] : [sum, this.data.length+1];
+ this._data[this._data.length] = (pos == 1) ? [this._data.length+1, sum] : [sum, this._data.length+1];
+ }
+ if (this.rendererOptions.groups > 1) {
+ this.breakOnNull = true;
+ var l = this.data.length;
+ var skip = parseInt(l/this.rendererOptions.groups, 10);
+ var count = 0;
+ for (var i=skip; i<l; i+=skip) {
+ this.data.splice(i+count, 0, [null, null]);
+ this._plotData.splice(i+count, 0, [null, null]);
+ this._stackData.splice(i+count, 0, [null, null]);
+ count++;
+ }
+ for (i=0; i<this.data.length; i++) {
+ if (this._primaryAxis == '_xaxis') {
+ this.data[i][0] = i+1;
+ this._plotData[i][0] = i+1;
+ this._stackData[i][0] = i+1;
+ }
+ else {
+ this.data[i][1] = i+1;
+ this._plotData[i][1] = i+1;
+ this._stackData[i][1] = i+1;
+ }
+ }
+ }
+ }
+
+ $.jqplot.preSeriesInitHooks.push(barPreInit);
+
+ // needs to be called with scope of series, not renderer.
+ $.jqplot.BarRenderer.prototype.calcSeriesNumbers = function() {
+ var nvals = 0;
+ var nseries = 0;
+ var paxis = this[this._primaryAxis];
+ var s, series, pos;
+ // loop through all series on this axis
+ for (var i=0; i < paxis._series.length; i++) {
+ series = paxis._series[i];
+ if (series === this) {
+ pos = i;
+ }
+ // is the series rendered as a bar?
+ if (series.renderer.constructor == $.jqplot.BarRenderer) {
+ // gridData may not be computed yet, use data length insted
+ nvals += series.data.length;
+ nseries += 1;
+ }
+ }
+ // return total number of values for all bar series, total number of bar series, and position of this series
+ return [nvals, nseries, pos];
+ };
+
+ $.jqplot.BarRenderer.prototype.setBarWidth = function() {
+ // need to know how many data values we have on the approprate axis and figure it out.
+ var i;
+ var nvals = 0;
+ var nseries = 0;
+ var paxis = this[this._primaryAxis];
+ var s, series, pos;
+ var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this);
+ nvals = temp[0];
+ nseries = temp[1];
+ var nticks = paxis.numberTicks;
+ var nbins = (nticks-1)/2;
+ // so, now we have total number of axis values.
+ if (paxis.name == 'xaxis' || paxis.name == 'x2axis') {
+ if (this._stack) {
+ this.barWidth = (paxis._offsets.max - paxis._offsets.min) / nvals * nseries - this.barMargin;
+ }
+ else {
+ this.barWidth = ((paxis._offsets.max - paxis._offsets.min)/nbins - this.barPadding * (nseries-1) - this.barMargin*2)/nseries;
+ // this.barWidth = (paxis._offsets.max - paxis._offsets.min) / nvals - this.barPadding - this.barMargin/nseries;
+ }
+ }
+ else {
+ if (this._stack) {
+ this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals * nseries - this.barMargin;
+ }
+ else {
+ this.barWidth = ((paxis._offsets.min - paxis._offsets.max)/nbins - this.barPadding * (nseries-1) - this.barMargin*2)/nseries;
+ // this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals - this.barPadding - this.barMargin/nseries;
+ }
+ }
+ return [nvals, nseries];
+ };
+
+ function computeHighlightColors (colors) {
+ var ret = [];
+ for (var i=0; i<colors.length; i++){
+ var rgba = $.jqplot.getColorComponents(colors[i]);
+ var newrgb = [rgba[0], rgba[1], rgba[2]];
+ var sum = newrgb[0] + newrgb[1] + newrgb[2];
+ for (var j=0; j<3; j++) {
+ // when darkening, lowest color component can be is 60.
+ newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]);
+ newrgb[j] = parseInt(newrgb[j], 10);
+ }
+ ret.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')');
+ }
+ return ret;
+ }
+
+ function getStart(sidx, didx, comp, plot, axis) {
+ // check if sign change
+ var seriesIndex = sidx,
+ prevSeriesIndex = sidx - 1,
+ start,
+ prevVal,
+ aidx = (axis === 'x') ? 0 : 1;
+
+ // is this not the first series?
+ if (seriesIndex > 0) {
+ prevVal = plot.series[prevSeriesIndex]._plotData[didx][aidx];
+
+ // is there a sign change
+ if ((comp * prevVal) < 0) {
+ start = getStart(prevSeriesIndex, didx, comp, plot, axis);
+ }
+
+ // no sign change.
+ else {
+ start = plot.series[prevSeriesIndex].gridData[didx][aidx];
+ }
+
+ }
+
+ // if first series, return value at 0
+ else {
+
+ start = (aidx === 0) ? plot.series[seriesIndex]._xaxis.series_u2p(0) : plot.series[seriesIndex]._yaxis.series_u2p(0);
+ }
+
+ return start;
+ }
+
+
+ $.jqplot.BarRenderer.prototype.draw = function(ctx, gridData, options, plot) {
+ var i;
+ // Ughhh, have to make a copy of options b/c it may be modified later.
+ var opts = $.extend({}, options);
+ var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
+ var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
+ var fill = (opts.fill != undefined) ? opts.fill : this.fill;
+ var xaxis = this.xaxis;
+ var yaxis = this.yaxis;
+ var xp = this._xaxis.series_u2p;
+ var yp = this._yaxis.series_u2p;
+ var pointx, pointy;
+ // clear out data colors.
+ this._dataColors = [];
+ this._barPoints = [];
+
+ if (this.barWidth == null) {
+ this.renderer.setBarWidth.call(this);
+ }
+
+ var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this);
+ var nvals = temp[0];
+ var nseries = temp[1];
+ var pos = temp[2];
+ var points = [];
+
+ if (this._stack) {
+ this._barNudge = 0;
+ }
+ else {
+ this._barNudge = (-Math.abs(nseries/2 - 0.5) + pos) * (this.barWidth + this.barPadding);
+ }
+ if (showLine) {
+ var negativeColors = new $.jqplot.ColorGenerator(this.negativeSeriesColors);
+ var positiveColors = new $.jqplot.ColorGenerator(this.seriesColors);
+ var negativeColor = negativeColors.get(this.index);
+ if (! this.useNegativeColors) {
+ negativeColor = opts.fillStyle;
+ }
+ var positiveColor = opts.fillStyle;
+ var base;
+ var xstart;
+ var ystart;
+
+ if (this.barDirection == 'vertical') {
+ for (var i=0; i<gridData.length; i++) {
+ if (!this._stack && this.data[i][1] == null) {
+ continue;
+ }
+ points = [];
+ base = gridData[i][0] + this._barNudge;
+
+ // stacked
+ if (this._stack && this._prevGridData.length) {
+ ystart = getStart(this.index, i, this._plotData[i][1], plot, 'y');
+ }
+
+ // not stacked
+ else {
+ if (this.fillToZero) {
+ ystart = this._yaxis.series_u2p(0);
+ }
+ else if (this.waterfall && i > 0 && i < this.gridData.length-1) {
+ ystart = this.gridData[i-1][1];
+ }
+ else if (this.waterfall && i == 0 && i < this.gridData.length-1) {
+ if (this._yaxis.min <= 0 && this._yaxis.max >= 0) {
+ ystart = this._yaxis.series_u2p(0);
+ }
+ else if (this._yaxis.min > 0) {
+ ystart = ctx.canvas.height;
+ }
+ else {
+ ystart = 0;
+ }
+ }
+ else if (this.waterfall && i == this.gridData.length - 1) {
+ if (this._yaxis.min <= 0 && this._yaxis.max >= 0) {
+ ystart = this._yaxis.series_u2p(0);
+ }
+ else if (this._yaxis.min > 0) {
+ ystart = ctx.canvas.height;
+ }
+ else {
+ ystart = 0;
+ }
+ }
+ else {
+ ystart = ctx.canvas.height;
+ }
+ }
+ if ((this.fillToZero && this._plotData[i][1] < 0) || (this.waterfall && this._data[i][1] < 0)) {
+ if (this.varyBarColor && !this._stack) {
+ if (this.useNegativeColors) {
+ opts.fillStyle = negativeColors.next();
+ }
+ else {
+ opts.fillStyle = positiveColors.next();
+ }
+ }
+ else {
+ opts.fillStyle = negativeColor;
+ }
+ }
+ else {
+ if (this.varyBarColor && !this._stack) {
+ opts.fillStyle = positiveColors.next();
+ }
+ else {
+ opts.fillStyle = positiveColor;
+ }
+ }
+
+ if (!this.fillToZero || this._plotData[i][1] >= 0) {
+ points.push([base-this.barWidth/2, ystart]);
+ points.push([base-this.barWidth/2, gridData[i][1]]);
+ points.push([base+this.barWidth/2, gridData[i][1]]);
+ points.push([base+this.barWidth/2, ystart]);
+ }
+ // for negative bars make sure points are always ordered clockwise
+ else {
+ points.push([base-this.barWidth/2, gridData[i][1]]);
+ points.push([base-this.barWidth/2, ystart]);
+ points.push([base+this.barWidth/2, ystart]);
+ points.push([base+this.barWidth/2, gridData[i][1]]);
+ }
+ this._barPoints.push(points);
+ // now draw the shadows if not stacked.
+ // for stacked plots, they are predrawn by drawShadow
+ if (shadow && !this._stack) {
+ var sopts = $.extend(true, {}, opts);
+ // need to get rid of fillStyle on shadow.
+ delete sopts.fillStyle;
+ this.renderer.shadowRenderer.draw(ctx, points, sopts);
+ }
+ var clr = opts.fillStyle || this.color;
+ this._dataColors.push(clr);
+ this.renderer.shapeRenderer.draw(ctx, points, opts);
+ }
+ }
+
+ else if (this.barDirection == 'horizontal'){
+ for (var i=0; i<gridData.length; i++) {
+ if (!this._stack && this.data[i][0] == null) {
+ continue;
+ }
+ points = [];
+ base = gridData[i][1] - this._barNudge;
+ xstart;
+
+ if (this._stack && this._prevGridData.length) {
+ xstart = getStart(this.index, i, this._plotData[i][0], plot, 'x');
+ }
+ // not stacked
+ else {
+ if (this.fillToZero) {
+ xstart = this._xaxis.series_u2p(0);
+ }
+ else if (this.waterfall && i > 0 && i < this.gridData.length-1) {
+ xstart = this.gridData[i-1][0];
+ }
+ else if (this.waterfall && i == 0 && i < this.gridData.length-1) {
+ if (this._xaxis.min <= 0 && this._xaxis.max >= 0) {
+ xstart = this._xaxis.series_u2p(0);
+ }
+ else if (this._xaxis.min > 0) {
+ xstart = 0;
+ }
+ else {
+ xstart = 0;
+ }
+ }
+ else if (this.waterfall && i == this.gridData.length - 1) {
+ if (this._xaxis.min <= 0 && this._xaxis.max >= 0) {
+ xstart = this._xaxis.series_u2p(0);
+ }
+ else if (this._xaxis.min > 0) {
+ xstart = 0;
+ }
+ else {
+ xstart = ctx.canvas.width;
+ }
+ }
+ else {
+ xstart = 0;
+ }
+ }
+ if ((this.fillToZero && this._plotData[i][1] < 0) || (this.waterfall && this._data[i][1] < 0)) {
+ if (this.varyBarColor && !this._stack) {
+ if (this.useNegativeColors) {
+ opts.fillStyle = negativeColors.next();
+ }
+ else {
+ opts.fillStyle = positiveColors.next();
+ }
+ }
+ }
+ else {
+ if (this.varyBarColor && !this._stack) {
+ opts.fillStyle = positiveColors.next();
+ }
+ else {
+ opts.fillStyle = positiveColor;
+ }
+ }
+
+
+ if (!this.fillToZero || this._plotData[i][0] >= 0) {
+ points.push([xstart, base + this.barWidth / 2]);
+ points.push([xstart, base - this.barWidth / 2]);
+ points.push([gridData[i][0], base - this.barWidth / 2]);
+ points.push([gridData[i][0], base + this.barWidth / 2]);
+ }
+ else {
+ points.push([gridData[i][0], base + this.barWidth / 2]);
+ points.push([gridData[i][0], base - this.barWidth / 2]);
+ points.push([xstart, base - this.barWidth / 2]);
+ points.push([xstart, base + this.barWidth / 2]);
+ }
+
+ this._barPoints.push(points);
+ // now draw the shadows if not stacked.
+ // for stacked plots, they are predrawn by drawShadow
+ if (shadow && !this._stack) {
+ var sopts = $.extend(true, {}, opts);
+ delete sopts.fillStyle;
+ this.renderer.shadowRenderer.draw(ctx, points, sopts);
+ }
+ var clr = opts.fillStyle || this.color;
+ this._dataColors.push(clr);
+ this.renderer.shapeRenderer.draw(ctx, points, opts);
+ }
+ }
+ }
+
+ if (this.highlightColors.length == 0) {
+ this.highlightColors = $.jqplot.computeHighlightColors(this._dataColors);
+ }
+
+ else if (typeof(this.highlightColors) == 'string') {
+ var temp = this.highlightColors;
+ this.highlightColors = [];
+ for (var i=0; i<this._dataColors.length; i++) {
+ this.highlightColors.push(temp);
+ }
+ }
+
+ };
+
+
+ // for stacked plots, shadows will be pre drawn by drawShadow.
+ $.jqplot.BarRenderer.prototype.drawShadow = function(ctx, gridData, options, plot) {
+ var i;
+ var opts = (options != undefined) ? options : {};
+ var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
+ var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
+ var fill = (opts.fill != undefined) ? opts.fill : this.fill;
+ var xaxis = this.xaxis;
+ var yaxis = this.yaxis;
+ var xp = this._xaxis.series_u2p;
+ var yp = this._yaxis.series_u2p;
+ var pointx, points, pointy, nvals, nseries, pos;
+
+ if (this._stack && this.shadow) {
+ if (this.barWidth == null) {
+ this.renderer.setBarWidth.call(this);
+ }
+
+ var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this);
+ nvals = temp[0];
+ nseries = temp[1];
+ pos = temp[2];
+
+ if (this._stack) {
+ this._barNudge = 0;
+ }
+ else {
+ this._barNudge = (-Math.abs(nseries/2 - 0.5) + pos) * (this.barWidth + this.barPadding);
+ }
+ if (showLine) {
+
+ if (this.barDirection == 'vertical') {
+ for (var i=0; i<gridData.length; i++) {
+ if (this.data[i][1] == null) {
+ continue;
+ }
+ points = [];
+ var base = gridData[i][0] + this._barNudge;
+ var ystart;
+
+ if (this._stack && this._prevGridData.length) {
+ ystart = getStart(this.index, i, this._plotData[i][1], plot, 'y');
+ }
+ else {
+ if (this.fillToZero) {
+ ystart = this._yaxis.series_u2p(0);
+ }
+ else {
+ ystart = ctx.canvas.height;
+ }
+ }
+
+ points.push([base-this.barWidth/2, ystart]);
+ points.push([base-this.barWidth/2, gridData[i][1]]);
+ points.push([base+this.barWidth/2, gridData[i][1]]);
+ points.push([base+this.barWidth/2, ystart]);
+ this.renderer.shadowRenderer.draw(ctx, points, opts);
+ }
+ }
+
+ else if (this.barDirection == 'horizontal'){
+ for (var i=0; i<gridData.length; i++) {
+ if (this.data[i][0] == null) {
+ continue;
+ }
+ points = [];
+ var base = gridData[i][1] - this._barNudge;
+ var xstart;
+
+ if (this._stack && this._prevGridData.length) {
+ xstart = getStart(this.index, i, this._plotData[i][0], plot, 'x');
+ }
+ else {
+ if (this.fillToZero) {
+ xstart = this._xaxis.series_u2p(0);
+ }
+ else {
+ xstart = 0;
+ }
+ }
+
+ points.push([xstart, base+this.barWidth/2]);
+ points.push([gridData[i][0], base+this.barWidth/2]);
+ points.push([gridData[i][0], base-this.barWidth/2]);
+ points.push([xstart, base-this.barWidth/2]);
+ this.renderer.shadowRenderer.draw(ctx, points, opts);
+ }
+ }
+ }
+
+ }
+ };
+
+ function postInit(target, data, options) {
+ for (var i=0; i<this.series.length; i++) {
+ if (this.series[i].renderer.constructor == $.jqplot.BarRenderer) {
+ // don't allow mouseover and mousedown at same time.
+ if (this.series[i].highlightMouseOver) {
+ this.series[i].highlightMouseDown = false;
+ }
+ }
+ }
+ }
+
+ // called within context of plot
+ // create a canvas which we can draw on.
+ // insert it before the eventCanvas, so eventCanvas will still capture events.
+ function postPlotDraw() {
+ // Memory Leaks patch
+ if (this.plugins.barRenderer && this.plugins.barRenderer.highlightCanvas) {
+
+ this.plugins.barRenderer.highlightCanvas.resetCanvas();
+ this.plugins.barRenderer.highlightCanvas = null;
+ }
+
+ this.plugins.barRenderer = {highlightedSeriesIndex:null};
+ this.plugins.barRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
+
+ this.eventCanvas._elem.before(this.plugins.barRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-barRenderer-highlight-canvas', this._plotDimensions, this));
+ this.plugins.barRenderer.highlightCanvas.setContext();
+ this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); });
+ }
+
+ function highlight (plot, sidx, pidx, points) {
+ var s = plot.series[sidx];
+ var canvas = plot.plugins.barRenderer.highlightCanvas;
+ canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height);
+ s._highlightedPoint = pidx;
+ plot.plugins.barRenderer.highlightedSeriesIndex = sidx;
+ var opts = {fillStyle: s.highlightColors[pidx]};
+ s.renderer.shapeRenderer.draw(canvas._ctx, points, opts);
+ canvas = null;
+ }
+
+ function unhighlight (plot) {
+ var canvas = plot.plugins.barRenderer.highlightCanvas;
+ canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
+ for (var i=0; i<plot.series.length; i++) {
+ plot.series[i]._highlightedPoint = null;
+ }
+ plot.plugins.barRenderer.highlightedSeriesIndex = null;
+ plot.target.trigger('jqplotDataUnhighlight');
+ canvas = null;
+ }
+
+
+ function handleMove(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ var evt1 = jQuery.Event('jqplotDataMouseOver');
+ evt1.pageX = ev.pageX;
+ evt1.pageY = ev.pageY;
+ plot.target.trigger(evt1, ins);
+ if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.barRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
+ var evt = jQuery.Event('jqplotDataHighlight');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points);
+ }
+ }
+ else if (neighbor == null) {
+ unhighlight (plot);
+ }
+ }
+
+ function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.barRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
+ var evt = jQuery.Event('jqplotDataHighlight');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points);
+ }
+ }
+ else if (neighbor == null) {
+ unhighlight (plot);
+ }
+ }
+
+ function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
+ var idx = plot.plugins.barRenderer.highlightedSeriesIndex;
+ if (idx != null && plot.series[idx].highlightMouseDown) {
+ unhighlight(plot);
+ }
+ }
+
+ function handleClick(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ var evt = jQuery.Event('jqplotDataClick');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ }
+ }
+
+ function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ var idx = plot.plugins.barRenderer.highlightedSeriesIndex;
+ if (idx != null && plot.series[idx].highlightMouseDown) {
+ unhighlight(plot);
+ }
+ var evt = jQuery.Event('jqplotDataRightClick');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ }
+ }
+
+
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.min.js
new file mode 100644
index 00000000..02a32857
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(d){d.jqplot.BarRenderer=function(){d.jqplot.LineRenderer.call(this)};d.jqplot.BarRenderer.prototype=new d.jqplot.LineRenderer();d.jqplot.BarRenderer.prototype.constructor=d.jqplot.BarRenderer;d.jqplot.BarRenderer.prototype.init=function(o,q){this.barPadding=8;this.barMargin=10;this.barDirection="vertical";this.barWidth=null;this.shadowOffset=2;this.shadowDepth=5;this.shadowAlpha=0.08;this.waterfall=false;this.groups=1;this.varyBarColor=false;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.transposedData=true;this.renderer.animation={show:false,direction:"down",speed:3000,_supported:true};this._type="bar";if(o.highlightMouseDown&&o.highlightMouseOver==null){o.highlightMouseOver=false}d.extend(true,this,o);d.extend(true,this.renderer,o);this.fill=true;if(this.barDirection==="horizontal"&&this.rendererOptions.animation&&this.rendererOptions.animation.direction==null){this.renderer.animation.direction="left"}if(this.waterfall){this.fillToZero=false;this.disableStack=true}if(this.barDirection=="vertical"){this._primaryAxis="_xaxis";this._stackAxis="y";this.fillAxis="y"}else{this._primaryAxis="_yaxis";this._stackAxis="x";this.fillAxis="x"}this._highlightedPoint=null;this._plotSeriesInfo=null;this._dataColors=[];this._barPoints=[];var p={lineJoin:"miter",lineCap:"round",fill:true,isarc:false,strokeStyle:this.color,fillStyle:this.color,closePath:this.fill};this.renderer.shapeRenderer.init(p);var n={lineJoin:"miter",lineCap:"round",fill:true,isarc:false,angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,depth:this.shadowDepth,closePath:this.fill};this.renderer.shadowRenderer.init(n);q.postInitHooks.addOnce(h);q.postDrawHooks.addOnce(j);q.eventListenerHooks.addOnce("jqplotMouseMove",b);q.eventListenerHooks.addOnce("jqplotMouseDown",a);q.eventListenerHooks.addOnce("jqplotMouseUp",l);q.eventListenerHooks.addOnce("jqplotClick",e);q.eventListenerHooks.addOnce("jqplotRightClick",m)};function g(t,p,o,w){if(this.rendererOptions.barDirection=="horizontal"){this._stackAxis="x";this._primaryAxis="_yaxis"}if(this.rendererOptions.waterfall==true){this._data=d.extend(true,[],this.data);var s=0;var u=(!this.rendererOptions.barDirection||this.rendererOptions.barDirection==="vertical"||this.transposedData===false)?1:0;for(var q=0;q<this.data.length;q++){s+=this.data[q][u];if(q>0){this.data[q][u]+=this.data[q-1][u]}}this.data[this.data.length]=(u==1)?[this.data.length+1,s]:[s,this.data.length+1];this._data[this._data.length]=(u==1)?[this._data.length+1,s]:[s,this._data.length+1]}if(this.rendererOptions.groups>1){this.breakOnNull=true;var n=this.data.length;var v=parseInt(n/this.rendererOptions.groups,10);var r=0;for(var q=v;q<n;q+=v){this.data.splice(q+r,0,[null,null]);this._plotData.splice(q+r,0,[null,null]);this._stackData.splice(q+r,0,[null,null]);r++}for(q=0;q<this.data.length;q++){if(this._primaryAxis=="_xaxis"){this.data[q][0]=q+1;this._plotData[q][0]=q+1;this._stackData[q][0]=q+1}else{this.data[q][1]=q+1;this._plotData[q][1]=q+1;this._stackData[q][1]=q+1}}}}d.jqplot.preSeriesInitHooks.push(g);d.jqplot.BarRenderer.prototype.calcSeriesNumbers=function(){var r=0;var t=0;var q=this[this._primaryAxis];var p,o,u;for(var n=0;n<q._series.length;n++){o=q._series[n];if(o===this){u=n}if(o.renderer.constructor==d.jqplot.BarRenderer){r+=o.data.length;t+=1}}return[r,t,u]};d.jqplot.BarRenderer.prototype.setBarWidth=function(){var q;var n=0;var o=0;var t=this[this._primaryAxis];var x,r,v;var w=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);n=w[0];o=w[1];var u=t.numberTicks;var p=(u-1)/2;if(t.name=="xaxis"||t.name=="x2axis"){if(this._stack){this.barWidth=(t._offsets.max-t._offsets.min)/n*o-this.barMargin}else{this.barWidth=((t._offsets.max-t._offsets.min)/p-this.barPadding*(o-1)-this.barMargin*2)/o}}else{if(this._stack){this.barWidth=(t._offsets.min-t._offsets.max)/n*o-this.barMargin}else{this.barWidth=((t._offsets.min-t._offsets.max)/p-this.barPadding*(o-1)-this.barMargin*2)/o}}return[n,o]};function f(o){var q=[];for(var s=0;s<o.length;s++){var r=d.jqplot.getColorComponents(o[s]);var n=[r[0],r[1],r[2]];var t=n[0]+n[1]+n[2];for(var p=0;p<3;p++){n[p]=(t>570)?n[p]*0.8:n[p]+0.3*(255-n[p]);n[p]=parseInt(n[p],10)}q.push("rgb("+n[0]+","+n[1]+","+n[2]+")")}return q}function i(v,u,s,t,o){var q=v,w=v-1,n,p,r=(o==="x")?0:1;if(q>0){p=t.series[w]._plotData[u][r];if((s*p)<0){n=i(w,u,s,t,o)}else{n=t.series[w].gridData[u][r]}}else{n=(r===0)?t.series[q]._xaxis.series_u2p(0):t.series[q]._yaxis.series_u2p(0)}return n}d.jqplot.BarRenderer.prototype.draw=function(E,L,q,G){var I;var A=d.extend({},q);var w=(A.shadow!=undefined)?A.shadow:this.shadow;var O=(A.showLine!=undefined)?A.showLine:this.showLine;var F=(A.fill!=undefined)?A.fill:this.fill;var p=this.xaxis;var J=this.yaxis;var y=this._xaxis.series_u2p;var K=this._yaxis.series_u2p;var D,C;this._dataColors=[];this._barPoints=[];if(this.barWidth==null){this.renderer.setBarWidth.call(this)}var N=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);var x=N[0];var v=N[1];var s=N[2];var H=[];if(this._stack){this._barNudge=0}else{this._barNudge=(-Math.abs(v/2-0.5)+s)*(this.barWidth+this.barPadding)}if(O){var u=new d.jqplot.ColorGenerator(this.negativeSeriesColors);var B=new d.jqplot.ColorGenerator(this.seriesColors);var M=u.get(this.index);if(!this.useNegativeColors){M=A.fillStyle}var t=A.fillStyle;var r;var P;var o;if(this.barDirection=="vertical"){for(var I=0;I<L.length;I++){if(!this._stack&&this.data[I][1]==null){continue}H=[];r=L[I][0]+this._barNudge;if(this._stack&&this._prevGridData.length){o=i(this.index,I,this._plotData[I][1],G,"y")}else{if(this.fillToZero){o=this._yaxis.series_u2p(0)}else{if(this.waterfall&&I>0&&I<this.gridData.length-1){o=this.gridData[I-1][1]}else{if(this.waterfall&&I==0&&I<this.gridData.length-1){if(this._yaxis.min<=0&&this._yaxis.max>=0){o=this._yaxis.series_u2p(0)}else{if(this._yaxis.min>0){o=E.canvas.height}else{o=0}}}else{if(this.waterfall&&I==this.gridData.length-1){if(this._yaxis.min<=0&&this._yaxis.max>=0){o=this._yaxis.series_u2p(0)}else{if(this._yaxis.min>0){o=E.canvas.height}else{o=0}}}else{o=E.canvas.height}}}}}if((this.fillToZero&&this._plotData[I][1]<0)||(this.waterfall&&this._data[I][1]<0)){if(this.varyBarColor&&!this._stack){if(this.useNegativeColors){A.fillStyle=u.next()}else{A.fillStyle=B.next()}}else{A.fillStyle=M}}else{if(this.varyBarColor&&!this._stack){A.fillStyle=B.next()}else{A.fillStyle=t}}if(!this.fillToZero||this._plotData[I][1]>=0){H.push([r-this.barWidth/2,o]);H.push([r-this.barWidth/2,L[I][1]]);H.push([r+this.barWidth/2,L[I][1]]);H.push([r+this.barWidth/2,o])}else{H.push([r-this.barWidth/2,L[I][1]]);H.push([r-this.barWidth/2,o]);H.push([r+this.barWidth/2,o]);H.push([r+this.barWidth/2,L[I][1]])}this._barPoints.push(H);if(w&&!this._stack){var z=d.extend(true,{},A);delete z.fillStyle;this.renderer.shadowRenderer.draw(E,H,z)}var n=A.fillStyle||this.color;this._dataColors.push(n);this.renderer.shapeRenderer.draw(E,H,A)}}else{if(this.barDirection=="horizontal"){for(var I=0;I<L.length;I++){if(!this._stack&&this.data[I][0]==null){continue}H=[];r=L[I][1]-this._barNudge;P;if(this._stack&&this._prevGridData.length){P=i(this.index,I,this._plotData[I][0],G,"x")}else{if(this.fillToZero){P=this._xaxis.series_u2p(0)}else{if(this.waterfall&&I>0&&I<this.gridData.length-1){P=this.gridData[I-1][0]}else{if(this.waterfall&&I==0&&I<this.gridData.length-1){if(this._xaxis.min<=0&&this._xaxis.max>=0){P=this._xaxis.series_u2p(0)}else{if(this._xaxis.min>0){P=0}else{P=0}}}else{if(this.waterfall&&I==this.gridData.length-1){if(this._xaxis.min<=0&&this._xaxis.max>=0){P=this._xaxis.series_u2p(0)}else{if(this._xaxis.min>0){P=0}else{P=E.canvas.width}}}else{P=0}}}}}if((this.fillToZero&&this._plotData[I][1]<0)||(this.waterfall&&this._data[I][1]<0)){if(this.varyBarColor&&!this._stack){if(this.useNegativeColors){A.fillStyle=u.next()}else{A.fillStyle=B.next()}}}else{if(this.varyBarColor&&!this._stack){A.fillStyle=B.next()}else{A.fillStyle=t}}if(!this.fillToZero||this._plotData[I][0]>=0){H.push([P,r+this.barWidth/2]);H.push([P,r-this.barWidth/2]);H.push([L[I][0],r-this.barWidth/2]);H.push([L[I][0],r+this.barWidth/2])}else{H.push([L[I][0],r+this.barWidth/2]);H.push([L[I][0],r-this.barWidth/2]);H.push([P,r-this.barWidth/2]);H.push([P,r+this.barWidth/2])}this._barPoints.push(H);if(w&&!this._stack){var z=d.extend(true,{},A);delete z.fillStyle;this.renderer.shadowRenderer.draw(E,H,z)}var n=A.fillStyle||this.color;this._dataColors.push(n);this.renderer.shapeRenderer.draw(E,H,A)}}}}if(this.highlightColors.length==0){this.highlightColors=d.jqplot.computeHighlightColors(this._dataColors)}else{if(typeof(this.highlightColors)=="string"){var N=this.highlightColors;this.highlightColors=[];for(var I=0;I<this._dataColors.length;I++){this.highlightColors.push(N)}}}};d.jqplot.BarRenderer.prototype.drawShadow=function(z,G,p,B){var D;var w=(p!=undefined)?p:{};var t=(w.shadow!=undefined)?w.shadow:this.shadow;var I=(w.showLine!=undefined)?w.showLine:this.showLine;var A=(w.fill!=undefined)?w.fill:this.fill;var o=this.xaxis;var E=this.yaxis;var v=this._xaxis.series_u2p;var F=this._yaxis.series_u2p;var y,C,x,u,s,r;if(this._stack&&this.shadow){if(this.barWidth==null){this.renderer.setBarWidth.call(this)}var H=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);u=H[0];s=H[1];r=H[2];if(this._stack){this._barNudge=0}else{this._barNudge=(-Math.abs(s/2-0.5)+r)*(this.barWidth+this.barPadding)}if(I){if(this.barDirection=="vertical"){for(var D=0;D<G.length;D++){if(this.data[D][1]==null){continue}C=[];var q=G[D][0]+this._barNudge;var n;if(this._stack&&this._prevGridData.length){n=i(this.index,D,this._plotData[D][1],B,"y")}else{if(this.fillToZero){n=this._yaxis.series_u2p(0)}else{n=z.canvas.height}}C.push([q-this.barWidth/2,n]);C.push([q-this.barWidth/2,G[D][1]]);C.push([q+this.barWidth/2,G[D][1]]);C.push([q+this.barWidth/2,n]);this.renderer.shadowRenderer.draw(z,C,w)}}else{if(this.barDirection=="horizontal"){for(var D=0;D<G.length;D++){if(this.data[D][0]==null){continue}C=[];var q=G[D][1]-this._barNudge;var J;if(this._stack&&this._prevGridData.length){J=i(this.index,D,this._plotData[D][0],B,"x")}else{if(this.fillToZero){J=this._xaxis.series_u2p(0)}else{J=0}}C.push([J,q+this.barWidth/2]);C.push([G[D][0],q+this.barWidth/2]);C.push([G[D][0],q-this.barWidth/2]);C.push([J,q-this.barWidth/2]);this.renderer.shadowRenderer.draw(z,C,w)}}}}}};function h(q,p,n){for(var o=0;o<this.series.length;o++){if(this.series[o].renderer.constructor==d.jqplot.BarRenderer){if(this.series[o].highlightMouseOver){this.series[o].highlightMouseDown=false}}}}function j(){if(this.plugins.barRenderer&&this.plugins.barRenderer.highlightCanvas){this.plugins.barRenderer.highlightCanvas.resetCanvas();this.plugins.barRenderer.highlightCanvas=null}this.plugins.barRenderer={highlightedSeriesIndex:null};this.plugins.barRenderer.highlightCanvas=new d.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.barRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-barRenderer-highlight-canvas",this._plotDimensions,this));this.plugins.barRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(n){k(n.data.plot)})}function c(u,t,q,p){var o=u.series[t];var n=u.plugins.barRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);o._highlightedPoint=q;u.plugins.barRenderer.highlightedSeriesIndex=t;var r={fillStyle:o.highlightColors[q]};o.renderer.shapeRenderer.draw(n._ctx,p,r);n=null}function k(p){var n=p.plugins.barRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);for(var o=0;o<p.series.length;o++){p.series[o]._highlightedPoint=null}p.plugins.barRenderer.highlightedSeriesIndex=null;p.target.trigger("jqplotDataUnhighlight");n=null}function b(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataMouseOver");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);if(s.series[p[0]].highlightMouseOver&&!(p[0]==s.plugins.barRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.which=r.which;n.pageX=r.pageX;n.pageY=r.pageY;s.target.trigger(n,p);c(s,t.seriesIndex,t.pointIndex,t.points)}}else{if(t==null){k(s)}}}function a(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];if(r.series[o[0]].highlightMouseDown&&!(o[0]==r.plugins.barRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o);c(r,s.seriesIndex,s.pointIndex,s.points)}}else{if(s==null){k(r)}}}function l(p,o,s,r,q){var n=q.plugins.barRenderer.highlightedSeriesIndex;if(n!=null&&q.series[n].highlightMouseDown){k(q)}}function e(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var n=jQuery.Event("jqplotDataClick");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o)}}function m(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var n=s.plugins.barRenderer.highlightedSeriesIndex;if(n!=null&&s.series[n].highlightMouseDown){k(s)}var o=jQuery.Event("jqplotDataRightClick");o.which=r.which;o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.js
new file mode 100644
index 00000000..5f2bc341
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.js
@@ -0,0 +1,235 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ /**
+ * Class: $.jqplot.BlockRenderer
+ * Plugin renderer to draw a x-y block chart. A Block chart has data points displayed as
+ * colored squares with a text label inside. Data must be supplied in the form:
+ *
+ * > [[x1, y1, "label 1", {css}], [x2, y2, "label 2", {css}], ...]
+ *
+ * The label and css object are optional. If the label is ommitted, the
+ * box will collapse unless a css height and/or width is specified.
+ *
+ * The css object is an object specifying css properties
+ * such as:
+ *
+ * > {background:'#4f98a5', border:'3px solid gray', padding:'1px'}
+ *
+ * Note that css properties specified with the data point override defaults
+ * specified with the series.
+ *
+ */
+ $.jqplot.BlockRenderer = function(){
+ $.jqplot.LineRenderer.call(this);
+ };
+
+ $.jqplot.BlockRenderer.prototype = new $.jqplot.LineRenderer();
+ $.jqplot.BlockRenderer.prototype.constructor = $.jqplot.BlockRenderer;
+
+ // called with scope of a series
+ $.jqplot.BlockRenderer.prototype.init = function(options) {
+ // Group: Properties
+ //
+ // prop: css
+ // default css styles that will be applied to all data blocks.
+ // these values will be overridden by css styles supplied with the
+ // individulal data points.
+ this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'};
+ // prop: escapeHtml
+ // true to escape html in the box label.
+ this.escapeHtml = false;
+ // prop: insertBreaks
+ // true to turn spaces in data block label into html breaks <br />.
+ this.insertBreaks = true;
+ // prop: varyBlockColors
+ // true to vary the color of each block in this series according to
+ // the seriesColors array. False to set each block to the color
+ // specified on this series. This has no effect if a css background color
+ // option is specified in the renderer css options.
+ this.varyBlockColors = false;
+ $.extend(true, this, options);
+ if (this.css.backgroundColor) {
+ this.color = this.css.backgroundColor;
+ }
+ else if (this.css.background) {
+ this.color = this.css.background;
+ }
+ else if (!this.varyBlockColors) {
+ this.css.background = this.color;
+ }
+ this.canvas = new $.jqplot.BlockCanvas();
+ this.shadowCanvas = new $.jqplot.BlockCanvas();
+ this.canvas._plotDimensions = this._plotDimensions;
+ this.shadowCanvas._plotDimensions = this._plotDimensions;
+ this._type = 'block';
+
+ // group: Methods
+ //
+ // Method: moveBlock
+ // Moves an individual block. More efficient than redrawing
+ // the whole series by calling plot.drawSeries().
+ // Properties:
+ // idx - the 0 based index of the block or point in this series.
+ // x - the x coordinate in data units (value on x axis) to move the block to.
+ // y - the y coordinate in data units (value on the y axis) to move the block to.
+ // duration - optional parameter to create an animated movement. Can be a
+ // number (higher is slower animation) or 'fast', 'normal' or 'slow'. If not
+ // provided, the element is moved without any animation.
+ this.moveBlock = function (idx, x, y, duration) {
+ // update plotData, stackData, data and gridData
+ // x and y are in data coordinates.
+ var el = this.canvas._elem.children(':eq('+idx+')');
+ this.data[idx][0] = x;
+ this.data[idx][1] = y;
+ this._plotData[idx][0] = x;
+ this._plotData[idx][1] = y;
+ this._stackData[idx][0] = x;
+ this._stackData[idx][1] = y;
+ this.gridData[idx][0] = this._xaxis.series_u2p(x);
+ this.gridData[idx][1] = this._yaxis.series_u2p(y);
+ var w = el.outerWidth();
+ var h = el.outerHeight();
+ var left = this.gridData[idx][0] - w/2 + 'px';
+ var top = this.gridData[idx][1] - h/2 + 'px';
+ if (duration) {
+ if (parseInt(duration, 10)) {
+ duration = parseInt(duration, 10);
+ }
+ el.animate({left:left, top:top}, duration);
+ }
+ else {
+ el.css({left:left, top:top});
+ }
+ el = null;
+ };
+ };
+
+ // called with scope of series
+ $.jqplot.BlockRenderer.prototype.draw = function (ctx, gd, options) {
+ if (this.plugins.pointLabels) {
+ this.plugins.pointLabels.show = false;
+ }
+ var i, el, d, gd, t, css, w, h, left, top;
+ var opts = (options != undefined) ? options : {};
+ var colorGenerator = new $.jqplot.ColorGenerator(this.seriesColors);
+ this.canvas._elem.empty();
+ for (i=0; i<this.gridData.length; i++) {
+ d = this.data[i];
+ gd = this.gridData[i];
+ t = '';
+ css = {};
+ if (typeof d[2] == 'string') {
+ t = d[2];
+ }
+ else if (typeof d[2] == 'object') {
+ css = d[2];
+ }
+ if (typeof d[3] == 'object') {
+ css = d[3];
+ }
+ if (this.insertBreaks){
+ t = t.replace(/ /g, '<br />');
+ }
+ css = $.extend(true, {}, this.css, css);
+ // create a div
+ el = $('<div style="position:absolute;margin-left:auto;margin-right:auto;"></div>');
+ this.canvas._elem.append(el);
+ // set text
+ this.escapeHtml ? el.text(t) : el.html(t);
+ // style it
+ // remove styles we don't want overridden.
+ delete css.position;
+ delete css.marginRight;
+ delete css.marginLeft;
+ if (!css.background && !css.backgroundColor && !css.backgroundImage){
+ css.background = colorGenerator.next();
+ }
+ el.css(css);
+ w = el.outerWidth();
+ h = el.outerHeight();
+ left = gd[0] - w/2 + 'px';
+ top = gd[1] - h/2 + 'px';
+ el.css({left:left, top:top});
+ el = null;
+ }
+ };
+
+ $.jqplot.BlockCanvas = function() {
+ $.jqplot.ElemContainer.call(this);
+ this._ctx;
+ };
+
+ $.jqplot.BlockCanvas.prototype = new $.jqplot.ElemContainer();
+ $.jqplot.BlockCanvas.prototype.constructor = $.jqplot.BlockCanvas;
+
+ $.jqplot.BlockCanvas.prototype.createElement = function(offsets, clss, plotDimensions) {
+ this._offsets = offsets;
+ var klass = 'jqplot-blockCanvas';
+ if (clss != undefined) {
+ klass = clss;
+ }
+ var elem;
+ // if this canvas already has a dom element, don't make a new one.
+ if (this._elem) {
+ elem = this._elem.get(0);
+ }
+ else {
+ elem = document.createElement('div');
+ }
+ // if new plotDimensions supplied, use them.
+ if (plotDimensions != undefined) {
+ this._plotDimensions = plotDimensions;
+ }
+
+ var w = this._plotDimensions.width - this._offsets.left - this._offsets.right + 'px';
+ var h = this._plotDimensions.height - this._offsets.top - this._offsets.bottom + 'px';
+ this._elem = $(elem);
+ this._elem.css({ position: 'absolute', width:w, height:h, left: this._offsets.left, top: this._offsets.top });
+
+ this._elem.addClass(klass);
+ return this._elem;
+ };
+
+ $.jqplot.BlockCanvas.prototype.setContext = function() {
+ this._ctx = {
+ canvas:{
+ width:0,
+ height:0
+ },
+ clearRect:function(){return null;}
+ };
+ return this._ctx;
+ };
+
+})(jQuery);
+
+ \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.min.js
new file mode 100644
index 00000000..2d5207a9
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(a){a.jqplot.BlockRenderer=function(){a.jqplot.LineRenderer.call(this)};a.jqplot.BlockRenderer.prototype=new a.jqplot.LineRenderer();a.jqplot.BlockRenderer.prototype.constructor=a.jqplot.BlockRenderer;a.jqplot.BlockRenderer.prototype.init=function(b){this.css={padding:"2px",border:"1px solid #999",textAlign:"center"};this.escapeHtml=false;this.insertBreaks=true;this.varyBlockColors=false;a.extend(true,this,b);if(this.css.backgroundColor){this.color=this.css.backgroundColor}else{if(this.css.background){this.color=this.css.background}else{if(!this.varyBlockColors){this.css.background=this.color}}}this.canvas=new a.jqplot.BlockCanvas();this.shadowCanvas=new a.jqplot.BlockCanvas();this.canvas._plotDimensions=this._plotDimensions;this.shadowCanvas._plotDimensions=this._plotDimensions;this._type="block";this.moveBlock=function(l,j,i,e){var c=this.canvas._elem.children(":eq("+l+")");this.data[l][0]=j;this.data[l][1]=i;this._plotData[l][0]=j;this._plotData[l][1]=i;this._stackData[l][0]=j;this._stackData[l][1]=i;this.gridData[l][0]=this._xaxis.series_u2p(j);this.gridData[l][1]=this._yaxis.series_u2p(i);var k=c.outerWidth();var f=c.outerHeight();var d=this.gridData[l][0]-k/2+"px";var g=this.gridData[l][1]-f/2+"px";if(e){if(parseInt(e,10)){e=parseInt(e,10)}c.animate({left:d,top:g},e)}else{c.css({left:d,top:g})}c=null}};a.jqplot.BlockRenderer.prototype.draw=function(q,o,r){if(this.plugins.pointLabels){this.plugins.pointLabels.show=false}var f,c,l,o,p,k,n,g,e,m;var b=(r!=undefined)?r:{};var j=new a.jqplot.ColorGenerator(this.seriesColors);this.canvas._elem.empty();for(f=0;f<this.gridData.length;f++){l=this.data[f];o=this.gridData[f];p="";k={};if(typeof l[2]=="string"){p=l[2]}else{if(typeof l[2]=="object"){k=l[2]}}if(typeof l[3]=="object"){k=l[3]}if(this.insertBreaks){p=p.replace(/ /g,"<br />")}k=a.extend(true,{},this.css,k);c=a('<div style="position:absolute;margin-left:auto;margin-right:auto;"></div>');this.canvas._elem.append(c);this.escapeHtml?c.text(p):c.html(p);delete k.position;delete k.marginRight;delete k.marginLeft;if(!k.background&&!k.backgroundColor&&!k.backgroundImage){k.background=j.next()}c.css(k);n=c.outerWidth();g=c.outerHeight();e=o[0]-n/2+"px";m=o[1]-g/2+"px";c.css({left:e,top:m});c=null}};a.jqplot.BlockCanvas=function(){a.jqplot.ElemContainer.call(this);this._ctx};a.jqplot.BlockCanvas.prototype=new a.jqplot.ElemContainer();a.jqplot.BlockCanvas.prototype.constructor=a.jqplot.BlockCanvas;a.jqplot.BlockCanvas.prototype.createElement=function(i,e,c){this._offsets=i;var b="jqplot-blockCanvas";if(e!=undefined){b=e}var g;if(this._elem){g=this._elem.get(0)}else{g=document.createElement("div")}if(c!=undefined){this._plotDimensions=c}var d=this._plotDimensions.width-this._offsets.left-this._offsets.right+"px";var f=this._plotDimensions.height-this._offsets.top-this._offsets.bottom+"px";this._elem=a(g);this._elem.css({position:"absolute",width:d,height:f,left:this._offsets.left,top:this._offsets.top});this._elem.addClass(b);return this._elem};a.jqplot.BlockCanvas.prototype.setContext=function(){this._ctx={canvas:{width:0,height:0},clearRect:function(){return null}};return this._ctx}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.js
new file mode 100644
index 00000000..d46f7b77
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.js
@@ -0,0 +1,759 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ var arrayMax = function( array ){
+ return Math.max.apply( Math, array );
+ };
+ var arrayMin = function( array ){
+ return Math.min.apply( Math, array );
+ };
+
+ /**
+ * Class: $.jqplot.BubbleRenderer
+ * Plugin renderer to draw a bubble chart. A Bubble chart has data points displayed as
+ * colored circles with an optional text label inside. To use
+ * the bubble renderer, you must include the bubble renderer like:
+ *
+ * > <script language="javascript" type="text/javascript" src="../src/plugins/jqplot.bubbleRenderer.js"></script>
+ *
+ * Data must be supplied in
+ * the form:
+ *
+ * > [[x1, y1, r1, <label or {label:'text', color:color}>], ...]
+ *
+ * where the label or options
+ * object is optional.
+ *
+ * Note that all bubble colors will be the same
+ * unless the "varyBubbleColors" option is set to true. Colors can be specified in the data array
+ * or in the seriesColors array option on the series. If no colors are defined, the default jqPlot
+ * series of 16 colors are used. Colors are automatically cycled around again if there are more
+ * bubbles than colors.
+ *
+ * Bubbles are autoscaled by default to fit within the chart area while maintaining
+ * relative sizes. If the "autoscaleBubbles" option is set to false, the r(adius) values
+ * in the data array a treated as literal pixel values for the radii of the bubbles.
+ *
+ * Properties are passed into the bubble renderer in the rendererOptions object of
+ * the series options like:
+ *
+ * > seriesDefaults: {
+ * > renderer: $.jqplot.BubbleRenderer,
+ * > rendererOptions: {
+ * > bubbleAlpha: 0.7,
+ * > varyBubbleColors: false
+ * > }
+ * > }
+ *
+ */
+ $.jqplot.BubbleRenderer = function(){
+ $.jqplot.LineRenderer.call(this);
+ };
+
+ $.jqplot.BubbleRenderer.prototype = new $.jqplot.LineRenderer();
+ $.jqplot.BubbleRenderer.prototype.constructor = $.jqplot.BubbleRenderer;
+
+ // called with scope of a series
+ $.jqplot.BubbleRenderer.prototype.init = function(options, plot) {
+ // Group: Properties
+ //
+ // prop: varyBubbleColors
+ // True to vary the color of each bubble in this series according to
+ // the seriesColors array. False to set each bubble to the color
+ // specified on this series. This has no effect if a css background color
+ // option is specified in the renderer css options.
+ this.varyBubbleColors = true;
+ // prop: autoscaleBubbles
+ // True to scale the bubble radius based on plot size.
+ // False will use the radius value as provided as a raw pixel value for
+ // bubble radius.
+ this.autoscaleBubbles = true;
+ // prop: autoscaleMultiplier
+ // Multiplier the bubble size if autoscaleBubbles is true.
+ this.autoscaleMultiplier = 1.0;
+ // prop: autoscalePointsFactor
+ // Factor which decreases bubble size based on how many bubbles on on the chart.
+ // 0 means no adjustment for number of bubbles. Negative values will decrease
+ // size of bubbles as more bubbles are added. Values between 0 and -0.2
+ // should work well.
+ this.autoscalePointsFactor = -0.07;
+ // prop: escapeHtml
+ // True to escape html in bubble label text.
+ this.escapeHtml = true;
+ // prop: highlightMouseOver
+ // True to highlight bubbles when moused over.
+ // This must be false to enable highlightMouseDown to highlight when clicking on a slice.
+ this.highlightMouseOver = true;
+ // prop: highlightMouseDown
+ // True to highlight when a mouse button is pressed over a bubble.
+ // This will be disabled if highlightMouseOver is true.
+ this.highlightMouseDown = false;
+ // prop: highlightColors
+ // An array of colors to use when highlighting a slice. Calculated automatically
+ // if not supplied.
+ this.highlightColors = [];
+ // prop: bubbleAlpha
+ // Alpha transparency to apply to all bubbles in this series.
+ this.bubbleAlpha = 1.0;
+ // prop: highlightAlpha
+ // Alpha transparency to apply when highlighting bubble.
+ // Set to value of bubbleAlpha by default.
+ this.highlightAlpha = null;
+ // prop: bubbleGradients
+ // True to color the bubbles with gradient fills instead of flat colors.
+ // NOT AVAILABLE IN IE due to lack of excanvas support for radial gradient fills.
+ // will be ignored in IE.
+ this.bubbleGradients = false;
+ // prop: showLabels
+ // True to show labels on bubbles (if any), false to not show.
+ this.showLabels = true;
+ // array of [point index, radius] which will be sorted in descending order to plot
+ // largest points below smaller points.
+ this.radii = [];
+ this.maxRadius = 0;
+ // index of the currenty highlighted point, if any
+ this._highlightedPoint = null;
+ // array of jQuery labels.
+ this.labels = [];
+ this.bubbleCanvases = [];
+ this._type = 'bubble';
+
+ // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
+ if (options.highlightMouseDown && options.highlightMouseOver == null) {
+ options.highlightMouseOver = false;
+ }
+
+ $.extend(true, this, options);
+
+ if (this.highlightAlpha == null) {
+ this.highlightAlpha = this.bubbleAlpha;
+ if (this.bubbleGradients) {
+ this.highlightAlpha = 0.35;
+ }
+ }
+
+ this.autoscaleMultiplier = this.autoscaleMultiplier * Math.pow(this.data.length, this.autoscalePointsFactor);
+
+ // index of the currenty highlighted point, if any
+ this._highlightedPoint = null;
+
+ // adjust the series colors for options colors passed in with data or for alpha.
+ // note, this can leave undefined holes in the seriesColors array.
+ var comps;
+ for (var i=0; i<this.data.length; i++) {
+ var color = null;
+ var d = this.data[i];
+ this.maxRadius = Math.max(this.maxRadius, d[2]);
+ if (d[3]) {
+ if (typeof(d[3]) == 'object') {
+ color = d[3]['color'];
+ }
+ }
+
+ if (color == null) {
+ if (this.seriesColors[i] != null) {
+ color = this.seriesColors[i];
+ }
+ }
+
+ if (color && this.bubbleAlpha < 1.0) {
+ comps = $.jqplot.getColorComponents(color);
+ color = 'rgba('+comps[0]+', '+comps[1]+', '+comps[2]+', '+this.bubbleAlpha+')';
+ }
+
+ if (color) {
+ this.seriesColors[i] = color;
+ }
+ }
+
+ if (!this.varyBubbleColors) {
+ this.seriesColors = [this.color];
+ }
+
+ this.colorGenerator = new $.jqplot.ColorGenerator(this.seriesColors);
+
+ // set highlight colors if none provided
+ if (this.highlightColors.length == 0) {
+ for (var i=0; i<this.seriesColors.length; i++){
+ var rgba = $.jqplot.getColorComponents(this.seriesColors[i]);
+ var newrgb = [rgba[0], rgba[1], rgba[2]];
+ var sum = newrgb[0] + newrgb[1] + newrgb[2];
+ for (var j=0; j<3; j++) {
+ // when darkening, lowest color component can be is 60.
+ newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]);
+ newrgb[j] = parseInt(newrgb[j], 10);
+ }
+ this.highlightColors.push('rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+', '+this.highlightAlpha+')');
+ }
+ }
+
+ this.highlightColorGenerator = new $.jqplot.ColorGenerator(this.highlightColors);
+
+ var sopts = {fill:true, isarc:true, angle:this.shadowAngle, alpha:this.shadowAlpha, closePath:true};
+
+ this.renderer.shadowRenderer.init(sopts);
+
+ this.canvas = new $.jqplot.DivCanvas();
+ this.canvas._plotDimensions = this._plotDimensions;
+
+ plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
+ plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
+ plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
+ plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
+ plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick);
+ plot.postDrawHooks.addOnce(postPlotDraw);
+
+ };
+
+
+ // converts the user data values to grid coordinates and stores them
+ // in the gridData array.
+ // Called with scope of a series.
+ $.jqplot.BubbleRenderer.prototype.setGridData = function(plot) {
+ // recalculate the grid data
+ var xp = this._xaxis.series_u2p;
+ var yp = this._yaxis.series_u2p;
+ var data = this._plotData;
+ this.gridData = [];
+ var radii = [];
+ this.radii = [];
+ var dim = Math.min(plot._height, plot._width);
+ for (var i=0; i<this.data.length; i++) {
+ if (data[i] != null) {
+ this.gridData.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1]), data[i][2]]);
+ this.radii.push([i, data[i][2]]);
+ radii.push(data[i][2]);
+ }
+ }
+ var r, val, maxr = this.maxRadius = arrayMax(radii);
+ var l = this.gridData.length;
+ if (this.autoscaleBubbles) {
+ for (var i=0; i<l; i++) {
+ val = radii[i]/maxr;
+ r = this.autoscaleMultiplier * dim / 6;
+ this.gridData[i][2] = r * val;
+ }
+ }
+
+ this.radii.sort(function(a, b) { return b[1] - a[1]; });
+ };
+
+ // converts any arbitrary data values to grid coordinates and
+ // returns them. This method exists so that plugins can use a series'
+ // linerenderer to generate grid data points without overwriting the
+ // grid data associated with that series.
+ // Called with scope of a series.
+ $.jqplot.BubbleRenderer.prototype.makeGridData = function(data, plot) {
+ // recalculate the grid data
+ var xp = this._xaxis.series_u2p;
+ var yp = this._yaxis.series_u2p;
+ var gd = [];
+ var radii = [];
+ this.radii = [];
+ var dim = Math.min(plot._height, plot._width);
+ for (var i=0; i<data.length; i++) {
+ if (data[i] != null) {
+ gd.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1]), data[i][2]]);
+ radii.push(data[i][2]);
+ this.radii.push([i, data[i][2]]);
+ }
+ }
+ var r, val, maxr = this.maxRadius = arrayMax(radii);
+ var l = this.gridData.length;
+ if (this.autoscaleBubbles) {
+ for (var i=0; i<l; i++) {
+ val = radii[i]/maxr;
+ r = this.autoscaleMultiplier * dim / 6;
+ gd[i][2] = r * val;
+ }
+ }
+ this.radii.sort(function(a, b) { return b[1] - a[1]; });
+ return gd;
+ };
+
+ // called with scope of series
+ $.jqplot.BubbleRenderer.prototype.draw = function (ctx, gd, options) {
+ if (this.plugins.pointLabels) {
+ this.plugins.pointLabels.show = false;
+ }
+ var opts = (options != undefined) ? options : {};
+ var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
+ this.canvas._elem.empty();
+ for (var i=0; i<this.radii.length; i++) {
+ var idx = this.radii[i][0];
+ var t=null;
+ var color = null;
+ var el = null;
+ var tel = null;
+ var d = this.data[idx];
+ var gd = this.gridData[idx];
+ if (d[3]) {
+ if (typeof(d[3]) == 'object') {
+ t = d[3]['label'];
+ }
+ else if (typeof(d[3]) == 'string') {
+ t = d[3];
+ }
+ }
+
+ // color = (this.varyBubbleColors) ? this.colorGenerator.get(idx) : this.color;
+ color = this.colorGenerator.get(idx);
+
+ // If we're drawing a shadow, expand the canvas dimensions to accomodate.
+ var canvasRadius = gd[2];
+ var offset, depth;
+ if (this.shadow) {
+ offset = (0.7 + gd[2]/40).toFixed(1);
+ depth = 1 + Math.ceil(gd[2]/15);
+ canvasRadius += offset*depth;
+ }
+ this.bubbleCanvases[idx] = new $.jqplot.BubbleCanvas();
+ this.canvas._elem.append(this.bubbleCanvases[idx].createElement(gd[0], gd[1], canvasRadius));
+ this.bubbleCanvases[idx].setContext();
+ var ctx = this.bubbleCanvases[idx]._ctx;
+ var x = ctx.canvas.width/2;
+ var y = ctx.canvas.height/2;
+ if (this.shadow) {
+ this.renderer.shadowRenderer.draw(ctx, [x, y, gd[2], 0, 2*Math.PI], {offset: offset, depth: depth});
+ }
+ this.bubbleCanvases[idx].draw(gd[2], color, this.bubbleGradients, this.shadowAngle/180*Math.PI);
+
+ // now draw label.
+ if (t && this.showLabels) {
+ tel = $('<div style="position:absolute;" class="jqplot-bubble-label"></div>');
+ if (this.escapeHtml) {
+ tel.text(t);
+ }
+ else {
+ tel.html(t);
+ }
+ this.canvas._elem.append(tel);
+ var h = $(tel).outerHeight();
+ var w = $(tel).outerWidth();
+ var top = gd[1] - 0.5*h;
+ var left = gd[0] - 0.5*w;
+ tel.css({top: top, left: left});
+ this.labels[idx] = $(tel);
+ }
+ }
+ };
+
+
+ $.jqplot.DivCanvas = function() {
+ $.jqplot.ElemContainer.call(this);
+ this._ctx;
+ };
+
+ $.jqplot.DivCanvas.prototype = new $.jqplot.ElemContainer();
+ $.jqplot.DivCanvas.prototype.constructor = $.jqplot.DivCanvas;
+
+ $.jqplot.DivCanvas.prototype.createElement = function(offsets, clss, plotDimensions) {
+ this._offsets = offsets;
+ var klass = 'jqplot-DivCanvas';
+ if (clss != undefined) {
+ klass = clss;
+ }
+ var elem;
+ // if this canvas already has a dom element, don't make a new one.
+ if (this._elem) {
+ elem = this._elem.get(0);
+ }
+ else {
+ elem = document.createElement('div');
+ }
+ // if new plotDimensions supplied, use them.
+ if (plotDimensions != undefined) {
+ this._plotDimensions = plotDimensions;
+ }
+
+ var w = this._plotDimensions.width - this._offsets.left - this._offsets.right + 'px';
+ var h = this._plotDimensions.height - this._offsets.top - this._offsets.bottom + 'px';
+ this._elem = $(elem);
+ this._elem.css({ position: 'absolute', width:w, height:h, left: this._offsets.left, top: this._offsets.top });
+
+ this._elem.addClass(klass);
+ return this._elem;
+ };
+
+ $.jqplot.DivCanvas.prototype.setContext = function() {
+ this._ctx = {
+ canvas:{
+ width:0,
+ height:0
+ },
+ clearRect:function(){return null;}
+ };
+ return this._ctx;
+ };
+
+ $.jqplot.BubbleCanvas = function() {
+ $.jqplot.ElemContainer.call(this);
+ this._ctx;
+ };
+
+ $.jqplot.BubbleCanvas.prototype = new $.jqplot.ElemContainer();
+ $.jqplot.BubbleCanvas.prototype.constructor = $.jqplot.BubbleCanvas;
+
+ // initialize with the x,y pont of bubble center and the bubble radius.
+ $.jqplot.BubbleCanvas.prototype.createElement = function(x, y, r) {
+ var klass = 'jqplot-bubble-point';
+
+ var elem;
+ // if this canvas already has a dom element, don't make a new one.
+ if (this._elem) {
+ elem = this._elem.get(0);
+ }
+ else {
+ elem = document.createElement('canvas');
+ }
+
+ elem.width = (r != null) ? 2*r : elem.width;
+ elem.height = (r != null) ? 2*r : elem.height;
+ this._elem = $(elem);
+ var l = (x != null && r != null) ? x - r : this._elem.css('left');
+ var t = (y != null && r != null) ? y - r : this._elem.css('top');
+ this._elem.css({ position: 'absolute', left: l, top: t });
+
+ this._elem.addClass(klass);
+ if ($.jqplot.use_excanvas) {
+ window.G_vmlCanvasManager.init_(document);
+ elem = window.G_vmlCanvasManager.initElement(elem);
+ }
+
+ return this._elem;
+ };
+
+ $.jqplot.BubbleCanvas.prototype.draw = function(r, color, gradients, angle) {
+ var ctx = this._ctx;
+ // r = Math.floor(r*1.04);
+ // var x = Math.round(ctx.canvas.width/2);
+ // var y = Math.round(ctx.canvas.height/2);
+ var x = ctx.canvas.width/2;
+ var y = ctx.canvas.height/2;
+ ctx.save();
+ if (gradients && !$.jqplot.use_excanvas) {
+ r = r*1.04;
+ var comps = $.jqplot.getColorComponents(color);
+ var colorinner = 'rgba('+Math.round(comps[0]+0.8*(255-comps[0]))+', '+Math.round(comps[1]+0.8*(255-comps[1]))+', '+Math.round(comps[2]+0.8*(255-comps[2]))+', '+comps[3]+')';
+ var colorend = 'rgba('+comps[0]+', '+comps[1]+', '+comps[2]+', 0)';
+ // var rinner = Math.round(0.35 * r);
+ // var xinner = Math.round(x - Math.cos(angle) * 0.33 * r);
+ // var yinner = Math.round(y - Math.sin(angle) * 0.33 * r);
+ var rinner = 0.35 * r;
+ var xinner = x - Math.cos(angle) * 0.33 * r;
+ var yinner = y - Math.sin(angle) * 0.33 * r;
+ var radgrad = ctx.createRadialGradient(xinner, yinner, rinner, x, y, r);
+ radgrad.addColorStop(0, colorinner);
+ radgrad.addColorStop(0.93, color);
+ radgrad.addColorStop(0.96, colorend);
+ radgrad.addColorStop(1, colorend);
+ // radgrad.addColorStop(.98, colorend);
+ ctx.fillStyle = radgrad;
+ ctx.fillRect(0,0, ctx.canvas.width, ctx.canvas.height);
+ }
+ else {
+ ctx.fillStyle = color;
+ ctx.strokeStyle = color;
+ ctx.lineWidth = 1;
+ ctx.beginPath();
+ var ang = 2*Math.PI;
+ ctx.arc(x, y, r, 0, ang, 0);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.restore();
+ };
+
+ $.jqplot.BubbleCanvas.prototype.setContext = function() {
+ this._ctx = this._elem.get(0).getContext("2d");
+ return this._ctx;
+ };
+
+ $.jqplot.BubbleAxisRenderer = function() {
+ $.jqplot.LinearAxisRenderer.call(this);
+ };
+
+ $.jqplot.BubbleAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
+ $.jqplot.BubbleAxisRenderer.prototype.constructor = $.jqplot.BubbleAxisRenderer;
+
+ // called with scope of axis object.
+ $.jqplot.BubbleAxisRenderer.prototype.init = function(options){
+ $.extend(true, this, options);
+ var db = this._dataBounds;
+ var minsidx = 0,
+ minpidx = 0,
+ maxsidx = 0,
+ maxpidx = 0,
+ maxr = 0,
+ minr = 0,
+ minMaxRadius = 0,
+ maxMaxRadius = 0,
+ maxMult = 0,
+ minMult = 0;
+ // Go through all the series attached to this axis and find
+ // the min/max bounds for this axis.
+ for (var i=0; i<this._series.length; i++) {
+ var s = this._series[i];
+ var d = s._plotData;
+
+ for (var j=0; j<d.length; j++) {
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ if (d[j][0] < db.min || db.min == null) {
+ db.min = d[j][0];
+ minsidx=i;
+ minpidx=j;
+ minr = d[j][2];
+ minMaxRadius = s.maxRadius;
+ minMult = s.autoscaleMultiplier;
+ }
+ if (d[j][0] > db.max || db.max == null) {
+ db.max = d[j][0];
+ maxsidx=i;
+ maxpidx=j;
+ maxr = d[j][2];
+ maxMaxRadius = s.maxRadius;
+ maxMult = s.autoscaleMultiplier;
+ }
+ }
+ else {
+ if (d[j][1] < db.min || db.min == null) {
+ db.min = d[j][1];
+ minsidx=i;
+ minpidx=j;
+ minr = d[j][2];
+ minMaxRadius = s.maxRadius;
+ minMult = s.autoscaleMultiplier;
+ }
+ if (d[j][1] > db.max || db.max == null) {
+ db.max = d[j][1];
+ maxsidx=i;
+ maxpidx=j;
+ maxr = d[j][2];
+ maxMaxRadius = s.maxRadius;
+ maxMult = s.autoscaleMultiplier;
+ }
+ }
+ }
+ }
+
+ var minRatio = minr/minMaxRadius;
+ var maxRatio = maxr/maxMaxRadius;
+
+ // need to estimate the effect of the radius on total axis span and adjust axis accordingly.
+ var span = db.max - db.min;
+ // var dim = (this.name == 'xaxis' || this.name == 'x2axis') ? this._plotDimensions.width : this._plotDimensions.height;
+ var dim = Math.min(this._plotDimensions.width, this._plotDimensions.height);
+
+ var minfact = minRatio * minMult/3 * span;
+ var maxfact = maxRatio * maxMult/3 * span;
+ db.max += maxfact;
+ db.min -= minfact;
+ };
+
+ function highlight (plot, sidx, pidx) {
+ plot.plugins.bubbleRenderer.highlightLabelCanvas.empty();
+ var s = plot.series[sidx];
+ var canvas = plot.plugins.bubbleRenderer.highlightCanvas;
+ var ctx = canvas._ctx;
+ ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
+ s._highlightedPoint = pidx;
+ plot.plugins.bubbleRenderer.highlightedSeriesIndex = sidx;
+
+ var color = s.highlightColorGenerator.get(pidx);
+ var x = s.gridData[pidx][0],
+ y = s.gridData[pidx][1],
+ r = s.gridData[pidx][2];
+ ctx.save();
+ ctx.fillStyle = color;
+ ctx.strokeStyle = color;
+ ctx.lineWidth = 1;
+ ctx.beginPath();
+ ctx.arc(x, y, r, 0, 2*Math.PI, 0);
+ ctx.closePath();
+ ctx.fill();
+ ctx.restore();
+ // bring label to front
+ if (s.labels[pidx]) {
+ plot.plugins.bubbleRenderer.highlightLabel = s.labels[pidx].clone();
+ plot.plugins.bubbleRenderer.highlightLabel.appendTo(plot.plugins.bubbleRenderer.highlightLabelCanvas);
+ plot.plugins.bubbleRenderer.highlightLabel.addClass('jqplot-bubble-label-highlight');
+ }
+ }
+
+ function unhighlight (plot) {
+ var canvas = plot.plugins.bubbleRenderer.highlightCanvas;
+ var sidx = plot.plugins.bubbleRenderer.highlightedSeriesIndex;
+ plot.plugins.bubbleRenderer.highlightLabelCanvas.empty();
+ canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
+ for (var i=0; i<plot.series.length; i++) {
+ plot.series[i]._highlightedPoint = null;
+ }
+ plot.plugins.bubbleRenderer.highlightedSeriesIndex = null;
+ plot.target.trigger('jqplotDataUnhighlight');
+ }
+
+
+ function handleMove(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var si = neighbor.seriesIndex;
+ var pi = neighbor.pointIndex;
+ var ins = [si, pi, neighbor.data, plot.series[si].gridData[pi][2]];
+ var evt1 = jQuery.Event('jqplotDataMouseOver');
+ evt1.pageX = ev.pageX;
+ evt1.pageY = ev.pageY;
+ plot.target.trigger(evt1, ins);
+ if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.bubbleRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
+ var evt = jQuery.Event('jqplotDataHighlight');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ highlight (plot, ins[0], ins[1]);
+ }
+ }
+ else if (neighbor == null) {
+ unhighlight (plot);
+ }
+ }
+
+ function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var si = neighbor.seriesIndex;
+ var pi = neighbor.pointIndex;
+ var ins = [si, pi, neighbor.data, plot.series[si].gridData[pi][2]];
+ if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.bubbleRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
+ var evt = jQuery.Event('jqplotDataHighlight');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ highlight (plot, ins[0], ins[1]);
+ }
+ }
+ else if (neighbor == null) {
+ unhighlight (plot);
+ }
+ }
+
+ function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
+ var idx = plot.plugins.bubbleRenderer.highlightedSeriesIndex;
+ if (idx != null && plot.series[idx].highlightMouseDown) {
+ unhighlight(plot);
+ }
+ }
+
+ function handleClick(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var si = neighbor.seriesIndex;
+ var pi = neighbor.pointIndex;
+ var ins = [si, pi, neighbor.data, plot.series[si].gridData[pi][2]];
+ var evt = jQuery.Event('jqplotDataClick');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ }
+ }
+
+ function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var si = neighbor.seriesIndex;
+ var pi = neighbor.pointIndex;
+ var ins = [si, pi, neighbor.data, plot.series[si].gridData[pi][2]];
+ var idx = plot.plugins.bubbleRenderer.highlightedSeriesIndex;
+ if (idx != null && plot.series[idx].highlightMouseDown) {
+ unhighlight(plot);
+ }
+ var evt = jQuery.Event('jqplotDataRightClick');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ }
+ }
+
+ // called within context of plot
+ // create a canvas which we can draw on.
+ // insert it before the eventCanvas, so eventCanvas will still capture events.
+ function postPlotDraw() {
+ // Memory Leaks patch
+ if (this.plugins.bubbleRenderer && this.plugins.bubbleRenderer.highlightCanvas) {
+ this.plugins.bubbleRenderer.highlightCanvas.resetCanvas();
+ this.plugins.bubbleRenderer.highlightCanvas = null;
+ }
+
+ this.plugins.bubbleRenderer = {highlightedSeriesIndex:null};
+ this.plugins.bubbleRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
+ this.plugins.bubbleRenderer.highlightLabel = null;
+ this.plugins.bubbleRenderer.highlightLabelCanvas = $('<div style="position:absolute;"></div>');
+ var top = this._gridPadding.top;
+ var left = this._gridPadding.left;
+ var width = this._plotDimensions.width - this._gridPadding.left - this._gridPadding.right;
+ var height = this._plotDimensions.height - this._gridPadding.top - this._gridPadding.bottom;
+ this.plugins.bubbleRenderer.highlightLabelCanvas.css({top:top, left:left, width:width+'px', height:height+'px'});
+
+ this.eventCanvas._elem.before(this.plugins.bubbleRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-bubbleRenderer-highlight-canvas', this._plotDimensions, this));
+ this.eventCanvas._elem.before(this.plugins.bubbleRenderer.highlightLabelCanvas);
+
+ var hctx = this.plugins.bubbleRenderer.highlightCanvas.setContext();
+ }
+
+
+ // setup default renderers for axes and legend so user doesn't have to
+ // called with scope of plot
+ function preInit(target, data, options) {
+ options = options || {};
+ options.axesDefaults = options.axesDefaults || {};
+ options.seriesDefaults = options.seriesDefaults || {};
+ // only set these if there is a Bubble series
+ var setopts = false;
+ if (options.seriesDefaults.renderer == $.jqplot.BubbleRenderer) {
+ setopts = true;
+ }
+ else if (options.series) {
+ for (var i=0; i < options.series.length; i++) {
+ if (options.series[i].renderer == $.jqplot.BubbleRenderer) {
+ setopts = true;
+ }
+ }
+ }
+
+ if (setopts) {
+ options.axesDefaults.renderer = $.jqplot.BubbleAxisRenderer;
+ options.sortData = false;
+ }
+ }
+
+ $.jqplot.preInitHooks.push(preInit);
+
+})(jQuery);
+
+ \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.min.js
new file mode 100644
index 00000000..295e4399
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(f){var d=function(m){return Math.max.apply(Math,m)};var j=function(m){return Math.min.apply(Math,m)};f.jqplot.BubbleRenderer=function(){f.jqplot.LineRenderer.call(this)};f.jqplot.BubbleRenderer.prototype=new f.jqplot.LineRenderer();f.jqplot.BubbleRenderer.prototype.constructor=f.jqplot.BubbleRenderer;f.jqplot.BubbleRenderer.prototype.init=function(w,t){this.varyBubbleColors=true;this.autoscaleBubbles=true;this.autoscaleMultiplier=1;this.autoscalePointsFactor=-0.07;this.escapeHtml=true;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.bubbleAlpha=1;this.highlightAlpha=null;this.bubbleGradients=false;this.showLabels=true;this.radii=[];this.maxRadius=0;this._highlightedPoint=null;this.labels=[];this.bubbleCanvases=[];this._type="bubble";if(w.highlightMouseDown&&w.highlightMouseOver==null){w.highlightMouseOver=false}f.extend(true,this,w);if(this.highlightAlpha==null){this.highlightAlpha=this.bubbleAlpha;if(this.bubbleGradients){this.highlightAlpha=0.35}}this.autoscaleMultiplier=this.autoscaleMultiplier*Math.pow(this.data.length,this.autoscalePointsFactor);this._highlightedPoint=null;var n;for(var r=0;r<this.data.length;r++){var p=null;var v=this.data[r];this.maxRadius=Math.max(this.maxRadius,v[2]);if(v[3]){if(typeof(v[3])=="object"){p=v[3]["color"]}}if(p==null){if(this.seriesColors[r]!=null){p=this.seriesColors[r]}}if(p&&this.bubbleAlpha<1){n=f.jqplot.getColorComponents(p);p="rgba("+n[0]+", "+n[1]+", "+n[2]+", "+this.bubbleAlpha+")"}if(p){this.seriesColors[r]=p}}if(!this.varyBubbleColors){this.seriesColors=[this.color]}this.colorGenerator=new f.jqplot.ColorGenerator(this.seriesColors);if(this.highlightColors.length==0){for(var r=0;r<this.seriesColors.length;r++){var o=f.jqplot.getColorComponents(this.seriesColors[r]);var u=[o[0],o[1],o[2]];var s=u[0]+u[1]+u[2];for(var q=0;q<3;q++){u[q]=(s>570)?u[q]*0.8:u[q]+0.3*(255-u[q]);u[q]=parseInt(u[q],10)}this.highlightColors.push("rgba("+u[0]+","+u[1]+","+u[2]+", "+this.highlightAlpha+")")}}this.highlightColorGenerator=new f.jqplot.ColorGenerator(this.highlightColors);var m={fill:true,isarc:true,angle:this.shadowAngle,alpha:this.shadowAlpha,closePath:true};this.renderer.shadowRenderer.init(m);this.canvas=new f.jqplot.DivCanvas();this.canvas._plotDimensions=this._plotDimensions;t.eventListenerHooks.addOnce("jqplotMouseMove",a);t.eventListenerHooks.addOnce("jqplotMouseDown",b);t.eventListenerHooks.addOnce("jqplotMouseUp",k);t.eventListenerHooks.addOnce("jqplotClick",g);t.eventListenerHooks.addOnce("jqplotRightClick",l);t.postDrawHooks.addOnce(h)};f.jqplot.BubbleRenderer.prototype.setGridData=function(w){var q=this._xaxis.series_u2p;var m=this._yaxis.series_u2p;var t=this._plotData;this.gridData=[];var s=[];this.radii=[];var v=Math.min(w._height,w._width);for(var u=0;u<this.data.length;u++){if(t[u]!=null){this.gridData.push([q.call(this._xaxis,t[u][0]),m.call(this._yaxis,t[u][1]),t[u][2]]);this.radii.push([u,t[u][2]]);s.push(t[u][2])}}var n,o,x=this.maxRadius=d(s);var p=this.gridData.length;if(this.autoscaleBubbles){for(var u=0;u<p;u++){o=s[u]/x;n=this.autoscaleMultiplier*v/6;this.gridData[u][2]=n*o}}this.radii.sort(function(y,r){return r[1]-y[1]})};f.jqplot.BubbleRenderer.prototype.makeGridData=function(t,w){var q=this._xaxis.series_u2p;var n=this._yaxis.series_u2p;var x=[];var s=[];this.radii=[];var v=Math.min(w._height,w._width);for(var u=0;u<t.length;u++){if(t[u]!=null){x.push([q.call(this._xaxis,t[u][0]),n.call(this._yaxis,t[u][1]),t[u][2]]);s.push(t[u][2]);this.radii.push([u,t[u][2]])}}var m,o,y=this.maxRadius=d(s);var p=this.gridData.length;if(this.autoscaleBubbles){for(var u=0;u<p;u++){o=s[u]/y;m=this.autoscaleMultiplier*v/6;x[u][2]=m*o}}this.radii.sort(function(z,r){return r[1]-z[1]});return x};f.jqplot.BubbleRenderer.prototype.draw=function(D,J,n){if(this.plugins.pointLabels){this.plugins.pointLabels.show=false}var A=(n!=undefined)?n:{};var r=(A.shadow!=undefined)?A.shadow:this.shadow;this.canvas._elem.empty();for(var G=0;G<this.radii.length;G++){var C=this.radii[G][0];var z=null;var F=null;var m=null;var p=null;var I=this.data[C];var J=this.gridData[C];if(I[3]){if(typeof(I[3])=="object"){z=I[3]["label"]}else{if(typeof(I[3])=="string"){z=I[3]}}}F=this.colorGenerator.get(C);var E=J[2];var q,K;if(this.shadow){q=(0.7+J[2]/40).toFixed(1);K=1+Math.ceil(J[2]/15);E+=q*K}this.bubbleCanvases[C]=new f.jqplot.BubbleCanvas();this.canvas._elem.append(this.bubbleCanvases[C].createElement(J[0],J[1],E));this.bubbleCanvases[C].setContext();var D=this.bubbleCanvases[C]._ctx;var u=D.canvas.width/2;var s=D.canvas.height/2;if(this.shadow){this.renderer.shadowRenderer.draw(D,[u,s,J[2],0,2*Math.PI],{offset:q,depth:K})}this.bubbleCanvases[C].draw(J[2],F,this.bubbleGradients,this.shadowAngle/180*Math.PI);if(z&&this.showLabels){p=f('<div style="position:absolute;" class="jqplot-bubble-label"></div>');if(this.escapeHtml){p.text(z)}else{p.html(z)}this.canvas._elem.append(p);var H=f(p).outerHeight();var v=f(p).outerWidth();var B=J[1]-0.5*H;var o=J[0]-0.5*v;p.css({top:B,left:o});this.labels[C]=f(p)}}};f.jqplot.DivCanvas=function(){f.jqplot.ElemContainer.call(this);this._ctx};f.jqplot.DivCanvas.prototype=new f.jqplot.ElemContainer();f.jqplot.DivCanvas.prototype.constructor=f.jqplot.DivCanvas;f.jqplot.DivCanvas.prototype.createElement=function(s,p,n){this._offsets=s;var m="jqplot-DivCanvas";if(p!=undefined){m=p}var r;if(this._elem){r=this._elem.get(0)}else{r=document.createElement("div")}if(n!=undefined){this._plotDimensions=n}var o=this._plotDimensions.width-this._offsets.left-this._offsets.right+"px";var q=this._plotDimensions.height-this._offsets.top-this._offsets.bottom+"px";this._elem=f(r);this._elem.css({position:"absolute",width:o,height:q,left:this._offsets.left,top:this._offsets.top});this._elem.addClass(m);return this._elem};f.jqplot.DivCanvas.prototype.setContext=function(){this._ctx={canvas:{width:0,height:0},clearRect:function(){return null}};return this._ctx};f.jqplot.BubbleCanvas=function(){f.jqplot.ElemContainer.call(this);this._ctx};f.jqplot.BubbleCanvas.prototype=new f.jqplot.ElemContainer();f.jqplot.BubbleCanvas.prototype.constructor=f.jqplot.BubbleCanvas;f.jqplot.BubbleCanvas.prototype.createElement=function(n,u,s){var m="jqplot-bubble-point";var q;if(this._elem){q=this._elem.get(0)}else{q=document.createElement("canvas")}q.width=(s!=null)?2*s:q.width;q.height=(s!=null)?2*s:q.height;this._elem=f(q);var o=(n!=null&&s!=null)?n-s:this._elem.css("left");var p=(u!=null&&s!=null)?u-s:this._elem.css("top");this._elem.css({position:"absolute",left:o,top:p});this._elem.addClass(m);if(f.jqplot.use_excanvas){window.G_vmlCanvasManager.init_(document);q=window.G_vmlCanvasManager.initElement(q)}return this._elem};f.jqplot.BubbleCanvas.prototype.draw=function(m,s,v,p){var D=this._ctx;var B=D.canvas.width/2;var z=D.canvas.height/2;D.save();if(v&&!f.jqplot.use_excanvas){m=m*1.04;var o=f.jqplot.getColorComponents(s);var u="rgba("+Math.round(o[0]+0.8*(255-o[0]))+", "+Math.round(o[1]+0.8*(255-o[1]))+", "+Math.round(o[2]+0.8*(255-o[2]))+", "+o[3]+")";var t="rgba("+o[0]+", "+o[1]+", "+o[2]+", 0)";var C=0.35*m;var A=B-Math.cos(p)*0.33*m;var n=z-Math.sin(p)*0.33*m;var w=D.createRadialGradient(A,n,C,B,z,m);w.addColorStop(0,u);w.addColorStop(0.93,s);w.addColorStop(0.96,t);w.addColorStop(1,t);D.fillStyle=w;D.fillRect(0,0,D.canvas.width,D.canvas.height)}else{D.fillStyle=s;D.strokeStyle=s;D.lineWidth=1;D.beginPath();var q=2*Math.PI;D.arc(B,z,m,0,q,0);D.closePath();D.fill()}D.restore()};f.jqplot.BubbleCanvas.prototype.setContext=function(){this._ctx=this._elem.get(0).getContext("2d");return this._ctx};f.jqplot.BubbleAxisRenderer=function(){f.jqplot.LinearAxisRenderer.call(this)};f.jqplot.BubbleAxisRenderer.prototype=new f.jqplot.LinearAxisRenderer();f.jqplot.BubbleAxisRenderer.prototype.constructor=f.jqplot.BubbleAxisRenderer;f.jqplot.BubbleAxisRenderer.prototype.init=function(n){f.extend(true,this,n);var I=this._dataBounds;var H=0,v=0,m=0,y=0,q=0,r=0,D=0,t=0,F=0,z=0;for(var E=0;E<this._series.length;E++){var x=this._series[E];var G=x._plotData;for(var B=0;B<G.length;B++){if(this.name=="xaxis"||this.name=="x2axis"){if(G[B][0]<I.min||I.min==null){I.min=G[B][0];H=E;v=B;r=G[B][2];D=x.maxRadius;z=x.autoscaleMultiplier}if(G[B][0]>I.max||I.max==null){I.max=G[B][0];m=E;y=B;q=G[B][2];t=x.maxRadius;F=x.autoscaleMultiplier}}else{if(G[B][1]<I.min||I.min==null){I.min=G[B][1];H=E;v=B;r=G[B][2];D=x.maxRadius;z=x.autoscaleMultiplier}if(G[B][1]>I.max||I.max==null){I.max=G[B][1];m=E;y=B;q=G[B][2];t=x.maxRadius;F=x.autoscaleMultiplier}}}}var o=r/D;var w=q/t;var C=I.max-I.min;var A=Math.min(this._plotDimensions.width,this._plotDimensions.height);var p=o*z/3*C;var u=w*F/3*C;I.max+=u;I.min-=p};function e(p,v,q){p.plugins.bubbleRenderer.highlightLabelCanvas.empty();var z=p.series[v];var n=p.plugins.bubbleRenderer.highlightCanvas;var w=n._ctx;w.clearRect(0,0,w.canvas.width,w.canvas.height);z._highlightedPoint=q;p.plugins.bubbleRenderer.highlightedSeriesIndex=v;var o=z.highlightColorGenerator.get(q);var u=z.gridData[q][0],t=z.gridData[q][1],m=z.gridData[q][2];w.save();w.fillStyle=o;w.strokeStyle=o;w.lineWidth=1;w.beginPath();w.arc(u,t,m,0,2*Math.PI,0);w.closePath();w.fill();w.restore();if(z.labels[q]){p.plugins.bubbleRenderer.highlightLabel=z.labels[q].clone();p.plugins.bubbleRenderer.highlightLabel.appendTo(p.plugins.bubbleRenderer.highlightLabelCanvas);p.plugins.bubbleRenderer.highlightLabel.addClass("jqplot-bubble-label-highlight")}}function i(p){var m=p.plugins.bubbleRenderer.highlightCanvas;var o=p.plugins.bubbleRenderer.highlightedSeriesIndex;p.plugins.bubbleRenderer.highlightLabelCanvas.empty();m._ctx.clearRect(0,0,m._ctx.canvas.width,m._ctx.canvas.height);for(var n=0;n<p.series.length;n++){p.series[n]._highlightedPoint=null}p.plugins.bubbleRenderer.highlightedSeriesIndex=null;p.target.trigger("jqplotDataUnhighlight")}function a(s,p,m,v,r){if(v){var n=v.seriesIndex;var o=v.pointIndex;var q=[n,o,v.data,r.series[n].gridData[o][2]];var t=jQuery.Event("jqplotDataMouseOver");t.pageX=s.pageX;t.pageY=s.pageY;r.target.trigger(t,q);if(r.series[q[0]].highlightMouseOver&&!(q[0]==r.plugins.bubbleRenderer.highlightedSeriesIndex&&q[1]==r.series[q[0]]._highlightedPoint)){var u=jQuery.Event("jqplotDataHighlight");u.which=s.which;u.pageX=s.pageX;u.pageY=s.pageY;r.target.trigger(u,q);e(r,q[0],q[1])}}else{if(v==null){i(r)}}}function b(s,p,m,u,r){if(u){var n=u.seriesIndex;var o=u.pointIndex;var q=[n,o,u.data,r.series[n].gridData[o][2]];if(r.series[q[0]].highlightMouseDown&&!(q[0]==r.plugins.bubbleRenderer.highlightedSeriesIndex&&q[1]==r.series[q[0]]._highlightedPoint)){var t=jQuery.Event("jqplotDataHighlight");t.which=s.which;t.pageX=s.pageX;t.pageY=s.pageY;r.target.trigger(t,q);e(r,q[0],q[1])}}else{if(u==null){i(r)}}}function k(o,n,r,q,p){var m=p.plugins.bubbleRenderer.highlightedSeriesIndex;if(m!=null&&p.series[m].highlightMouseDown){i(p)}}function g(s,p,m,u,r){if(u){var n=u.seriesIndex;var o=u.pointIndex;var q=[n,o,u.data,r.series[n].gridData[o][2]];var t=jQuery.Event("jqplotDataClick");t.which=s.which;t.pageX=s.pageX;t.pageY=s.pageY;r.target.trigger(t,q)}}function l(s,p,m,v,r){if(v){var n=v.seriesIndex;var o=v.pointIndex;var q=[n,o,v.data,r.series[n].gridData[o][2]];var t=r.plugins.bubbleRenderer.highlightedSeriesIndex;if(t!=null&&r.series[t].highlightMouseDown){i(r)}var u=jQuery.Event("jqplotDataRightClick");u.which=s.which;u.pageX=s.pageX;u.pageY=s.pageY;r.target.trigger(u,q)}}function h(){if(this.plugins.bubbleRenderer&&this.plugins.bubbleRenderer.highlightCanvas){this.plugins.bubbleRenderer.highlightCanvas.resetCanvas();this.plugins.bubbleRenderer.highlightCanvas=null}this.plugins.bubbleRenderer={highlightedSeriesIndex:null};this.plugins.bubbleRenderer.highlightCanvas=new f.jqplot.GenericCanvas();this.plugins.bubbleRenderer.highlightLabel=null;this.plugins.bubbleRenderer.highlightLabelCanvas=f('<div style="position:absolute;"></div>');var q=this._gridPadding.top;var p=this._gridPadding.left;var n=this._plotDimensions.width-this._gridPadding.left-this._gridPadding.right;var m=this._plotDimensions.height-this._gridPadding.top-this._gridPadding.bottom;this.plugins.bubbleRenderer.highlightLabelCanvas.css({top:q,left:p,width:n+"px",height:m+"px"});this.eventCanvas._elem.before(this.plugins.bubbleRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-bubbleRenderer-highlight-canvas",this._plotDimensions,this));this.eventCanvas._elem.before(this.plugins.bubbleRenderer.highlightLabelCanvas);var o=this.plugins.bubbleRenderer.highlightCanvas.setContext()}function c(q,p,n){n=n||{};n.axesDefaults=n.axesDefaults||{};n.seriesDefaults=n.seriesDefaults||{};var m=false;if(n.seriesDefaults.renderer==f.jqplot.BubbleRenderer){m=true}else{if(n.series){for(var o=0;o<n.series.length;o++){if(n.series[o].renderer==f.jqplot.BubbleRenderer){m=true}}}}if(m){n.axesDefaults.renderer=f.jqplot.BubbleAxisRenderer;n.sortData=false}}f.jqplot.preInitHooks.push(c)})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js
new file mode 100644
index 00000000..18404399
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js
@@ -0,0 +1,203 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ /**
+ * Class: $.jqplot.CanvasAxisLabelRenderer
+ * Renderer to draw axis labels with a canvas element to support advanced
+ * featrues such as rotated text. This renderer uses a separate rendering engine
+ * to draw the text on the canvas. Two modes of rendering the text are available.
+ * If the browser has native font support for canvas fonts (currently Mozila 3.5
+ * and Safari 4), you can enable text rendering with the canvas fillText method.
+ * You do so by setting the "enableFontSupport" option to true.
+ *
+ * Browsers lacking native font support will have the text drawn on the canvas
+ * using the Hershey font metrics. Even if the "enableFontSupport" option is true
+ * non-supporting browsers will still render with the Hershey font.
+ *
+ */
+ $.jqplot.CanvasAxisLabelRenderer = function(options) {
+ // Group: Properties
+
+ // prop: angle
+ // angle of text, measured clockwise from x axis.
+ this.angle = 0;
+ // name of the axis associated with this tick
+ this.axis;
+ // prop: show
+ // wether or not to show the tick (mark and label).
+ this.show = true;
+ // prop: showLabel
+ // wether or not to show the label.
+ this.showLabel = true;
+ // prop: label
+ // label for the axis.
+ this.label = '';
+ // prop: fontFamily
+ // CSS spec for the font-family css attribute.
+ // Applies only to browsers supporting native font rendering in the
+ // canvas tag. Currently Mozilla 3.5 and Safari 4.
+ this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif';
+ // prop: fontSize
+ // CSS spec for font size.
+ this.fontSize = '11pt';
+ // prop: fontWeight
+ // CSS spec for fontWeight: normal, bold, bolder, lighter or a number 100 - 900
+ this.fontWeight = 'normal';
+ // prop: fontStretch
+ // Multiplier to condense or expand font width.
+ // Applies only to browsers which don't support canvas native font rendering.
+ this.fontStretch = 1.0;
+ // prop: textColor
+ // css spec for the color attribute.
+ this.textColor = '#666666';
+ // prop: enableFontSupport
+ // true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
+ // If true, label will be drawn with canvas tag native support for fonts.
+ // If false, label will be drawn with Hershey font metrics.
+ this.enableFontSupport = true;
+ // prop: pt2px
+ // Point to pixel scaling factor, used for computing height of bounding box
+ // around a label. The labels text renderer has a default setting of 1.4, which
+ // should be suitable for most fonts. Leave as null to use default. If tops of
+ // letters appear clipped, increase this. If bounding box seems too big, decrease.
+ // This is an issue only with the native font renderering capabilities of Mozilla
+ // 3.5 and Safari 4 since they do not provide a method to determine the font height.
+ this.pt2px = null;
+
+ this._elem;
+ this._ctx;
+ this._plotWidth;
+ this._plotHeight;
+ this._plotDimensions = {height:null, width:null};
+
+ $.extend(true, this, options);
+
+ if (options.angle == null && this.axis != 'xaxis' && this.axis != 'x2axis') {
+ this.angle = -90;
+ }
+
+ var ropts = {fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily};
+ if (this.pt2px) {
+ ropts.pt2px = this.pt2px;
+ }
+
+ if (this.enableFontSupport) {
+ if ($.jqplot.support_canvas_text()) {
+ this._textRenderer = new $.jqplot.CanvasFontRenderer(ropts);
+ }
+
+ else {
+ this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts);
+ }
+ }
+ else {
+ this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts);
+ }
+ };
+
+ $.jqplot.CanvasAxisLabelRenderer.prototype.init = function(options) {
+ $.extend(true, this, options);
+ this._textRenderer.init({fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily});
+ };
+
+ // return width along the x axis
+ // will check first to see if an element exists.
+ // if not, will return the computed text box width.
+ $.jqplot.CanvasAxisLabelRenderer.prototype.getWidth = function(ctx) {
+ if (this._elem) {
+ return this._elem.outerWidth(true);
+ }
+ else {
+ var tr = this._textRenderer;
+ var l = tr.getWidth(ctx);
+ var h = tr.getHeight(ctx);
+ var w = Math.abs(Math.sin(tr.angle)*h) + Math.abs(Math.cos(tr.angle)*l);
+ return w;
+ }
+ };
+
+ // return height along the y axis.
+ $.jqplot.CanvasAxisLabelRenderer.prototype.getHeight = function(ctx) {
+ if (this._elem) {
+ return this._elem.outerHeight(true);
+ }
+ else {
+ var tr = this._textRenderer;
+ var l = tr.getWidth(ctx);
+ var h = tr.getHeight(ctx);
+ var w = Math.abs(Math.cos(tr.angle)*h) + Math.abs(Math.sin(tr.angle)*l);
+ return w;
+ }
+ };
+
+ $.jqplot.CanvasAxisLabelRenderer.prototype.getAngleRad = function() {
+ var a = this.angle * Math.PI/180;
+ return a;
+ };
+
+ $.jqplot.CanvasAxisLabelRenderer.prototype.draw = function(ctx, plot) {
+ // Memory Leaks patch
+ if (this._elem) {
+ if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) {
+ window.G_vmlCanvasManager.uninitElement(this._elem.get(0));
+ }
+
+ this._elem.emptyForce();
+ this._elem = null;
+ }
+
+ // create a canvas here, but can't draw on it untill it is appended
+ // to dom for IE compatability.
+ var elem = plot.canvasManager.getCanvas();
+
+ this._textRenderer.setText(this.label, ctx);
+ var w = this.getWidth(ctx);
+ var h = this.getHeight(ctx);
+ elem.width = w;
+ elem.height = h;
+ elem.style.width = w;
+ elem.style.height = h;
+
+ elem = plot.canvasManager.initCanvas(elem);
+
+ this._elem = $(elem);
+ this._elem.css({ position: 'absolute'});
+ this._elem.addClass('jqplot-'+this.axis+'-label');
+
+ elem = null;
+ return this._elem;
+ };
+
+ $.jqplot.CanvasAxisLabelRenderer.prototype.pack = function() {
+ this._textRenderer.draw(this._elem.get(0).getContext("2d"), this.label);
+ };
+
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js
new file mode 100644
index 00000000..2b71c097
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(a){a.jqplot.CanvasAxisLabelRenderer=function(b){this.angle=0;this.axis;this.show=true;this.showLabel=true;this.label="";this.fontFamily='"Trebuchet MS", Arial, Helvetica, sans-serif';this.fontSize="11pt";this.fontWeight="normal";this.fontStretch=1;this.textColor="#666666";this.enableFontSupport=true;this.pt2px=null;this._elem;this._ctx;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null};a.extend(true,this,b);if(b.angle==null&&this.axis!="xaxis"&&this.axis!="x2axis"){this.angle=-90}var c={fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily};if(this.pt2px){c.pt2px=this.pt2px}if(this.enableFontSupport){if(a.jqplot.support_canvas_text()){this._textRenderer=new a.jqplot.CanvasFontRenderer(c)}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}};a.jqplot.CanvasAxisLabelRenderer.prototype.init=function(b){a.extend(true,this,b);this._textRenderer.init({fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily})};a.jqplot.CanvasAxisLabelRenderer.prototype.getWidth=function(d){if(this._elem){return this._elem.outerWidth(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.sin(f.angle)*e)+Math.abs(Math.cos(f.angle)*c);return b}};a.jqplot.CanvasAxisLabelRenderer.prototype.getHeight=function(d){if(this._elem){return this._elem.outerHeight(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.cos(f.angle)*e)+Math.abs(Math.sin(f.angle)*c);return b}};a.jqplot.CanvasAxisLabelRenderer.prototype.getAngleRad=function(){var b=this.angle*Math.PI/180;return b};a.jqplot.CanvasAxisLabelRenderer.prototype.draw=function(c,f){if(this._elem){if(a.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==undefined){window.G_vmlCanvasManager.uninitElement(this._elem.get(0))}this._elem.emptyForce();this._elem=null}var e=f.canvasManager.getCanvas();this._textRenderer.setText(this.label,c);var b=this.getWidth(c);var d=this.getHeight(c);e.width=b;e.height=d;e.style.width=b;e.style.height=d;e=f.canvasManager.initCanvas(e);this._elem=a(e);this._elem.css({position:"absolute"});this._elem.addClass("jqplot-"+this.axis+"-label");e=null;return this._elem};a.jqplot.CanvasAxisLabelRenderer.prototype.pack=function(){this._textRenderer.draw(this._elem.get(0).getContext("2d"),this.label)}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.js
new file mode 100644
index 00000000..1550c7d0
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.js
@@ -0,0 +1,243 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ /**
+ * Class: $.jqplot.CanvasAxisTickRenderer
+ * Renderer to draw axis ticks with a canvas element to support advanced
+ * featrues such as rotated text. This renderer uses a separate rendering engine
+ * to draw the text on the canvas. Two modes of rendering the text are available.
+ * If the browser has native font support for canvas fonts (currently Mozila 3.5
+ * and Safari 4), you can enable text rendering with the canvas fillText method.
+ * You do so by setting the "enableFontSupport" option to true.
+ *
+ * Browsers lacking native font support will have the text drawn on the canvas
+ * using the Hershey font metrics. Even if the "enableFontSupport" option is true
+ * non-supporting browsers will still render with the Hershey font.
+ */
+ $.jqplot.CanvasAxisTickRenderer = function(options) {
+ // Group: Properties
+
+ // prop: mark
+ // tick mark on the axis. One of 'inside', 'outside', 'cross', '' or null.
+ this.mark = 'outside';
+ // prop: showMark
+ // wether or not to show the mark on the axis.
+ this.showMark = true;
+ // prop: showGridline
+ // wether or not to draw the gridline on the grid at this tick.
+ this.showGridline = true;
+ // prop: isMinorTick
+ // if this is a minor tick.
+ this.isMinorTick = false;
+ // prop: angle
+ // angle of text, measured clockwise from x axis.
+ this.angle = 0;
+ // prop: markSize
+ // Length of the tick marks in pixels. For 'cross' style, length
+ // will be stoked above and below axis, so total length will be twice this.
+ this.markSize = 4;
+ // prop: show
+ // wether or not to show the tick (mark and label).
+ this.show = true;
+ // prop: showLabel
+ // wether or not to show the label.
+ this.showLabel = true;
+ // prop: labelPosition
+ // 'auto', 'start', 'middle' or 'end'.
+ // Whether tick label should be positioned so the start, middle, or end
+ // of the tick mark.
+ this.labelPosition = 'auto';
+ this.label = '';
+ this.value = null;
+ this._styles = {};
+ // prop: formatter
+ // A class of a formatter for the tick text.
+ // The default $.jqplot.DefaultTickFormatter uses sprintf.
+ this.formatter = $.jqplot.DefaultTickFormatter;
+ // prop: formatString
+ // string passed to the formatter.
+ this.formatString = '';
+ // prop: prefix
+ // String to prepend to the tick label.
+ // Prefix is prepended to the formatted tick label.
+ this.prefix = '';
+ // prop: fontFamily
+ // css spec for the font-family css attribute.
+ this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif';
+ // prop: fontSize
+ // CSS spec for font size.
+ this.fontSize = '10pt';
+ // prop: fontWeight
+ // CSS spec for fontWeight
+ this.fontWeight = 'normal';
+ // prop: fontStretch
+ // Multiplier to condense or expand font width.
+ // Applies only to browsers which don't support canvas native font rendering.
+ this.fontStretch = 1.0;
+ // prop: textColor
+ // css spec for the color attribute.
+ this.textColor = '#666666';
+ // prop: enableFontSupport
+ // true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
+ // If true, tick label will be drawn with canvas tag native support for fonts.
+ // If false, tick label will be drawn with Hershey font metrics.
+ this.enableFontSupport = true;
+ // prop: pt2px
+ // Point to pixel scaling factor, used for computing height of bounding box
+ // around a label. The labels text renderer has a default setting of 1.4, which
+ // should be suitable for most fonts. Leave as null to use default. If tops of
+ // letters appear clipped, increase this. If bounding box seems too big, decrease.
+ // This is an issue only with the native font renderering capabilities of Mozilla
+ // 3.5 and Safari 4 since they do not provide a method to determine the font height.
+ this.pt2px = null;
+
+ this._elem;
+ this._ctx;
+ this._plotWidth;
+ this._plotHeight;
+ this._plotDimensions = {height:null, width:null};
+
+ $.extend(true, this, options);
+
+ var ropts = {fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily};
+ if (this.pt2px) {
+ ropts.pt2px = this.pt2px;
+ }
+
+ if (this.enableFontSupport) {
+ if ($.jqplot.support_canvas_text()) {
+ this._textRenderer = new $.jqplot.CanvasFontRenderer(ropts);
+ }
+
+ else {
+ this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts);
+ }
+ }
+ else {
+ this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts);
+ }
+ };
+
+ $.jqplot.CanvasAxisTickRenderer.prototype.init = function(options) {
+ $.extend(true, this, options);
+ this._textRenderer.init({fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily});
+ };
+
+ // return width along the x axis
+ // will check first to see if an element exists.
+ // if not, will return the computed text box width.
+ $.jqplot.CanvasAxisTickRenderer.prototype.getWidth = function(ctx) {
+ if (this._elem) {
+ return this._elem.outerWidth(true);
+ }
+ else {
+ var tr = this._textRenderer;
+ var l = tr.getWidth(ctx);
+ var h = tr.getHeight(ctx);
+ var w = Math.abs(Math.sin(tr.angle)*h) + Math.abs(Math.cos(tr.angle)*l);
+ return w;
+ }
+ };
+
+ // return height along the y axis.
+ $.jqplot.CanvasAxisTickRenderer.prototype.getHeight = function(ctx) {
+ if (this._elem) {
+ return this._elem.outerHeight(true);
+ }
+ else {
+ var tr = this._textRenderer;
+ var l = tr.getWidth(ctx);
+ var h = tr.getHeight(ctx);
+ var w = Math.abs(Math.cos(tr.angle)*h) + Math.abs(Math.sin(tr.angle)*l);
+ return w;
+ }
+ };
+
+ $.jqplot.CanvasAxisTickRenderer.prototype.getAngleRad = function() {
+ var a = this.angle * Math.PI/180;
+ return a;
+ };
+
+
+ $.jqplot.CanvasAxisTickRenderer.prototype.setTick = function(value, axisName, isMinor) {
+ this.value = value;
+ if (isMinor) {
+ this.isMinorTick = true;
+ }
+ return this;
+ };
+
+ $.jqplot.CanvasAxisTickRenderer.prototype.draw = function(ctx, plot) {
+ if (!this.label) {
+ this.label = this.prefix + this.formatter(this.formatString, this.value);
+ }
+
+ // Memory Leaks patch
+ if (this._elem) {
+ if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) {
+ window.G_vmlCanvasManager.uninitElement(this._elem.get(0));
+ }
+
+ this._elem.emptyForce();
+ this._elem = null;
+ }
+
+ // create a canvas here, but can't draw on it untill it is appended
+ // to dom for IE compatability.
+
+ var elem = plot.canvasManager.getCanvas();
+
+ this._textRenderer.setText(this.label, ctx);
+ var w = this.getWidth(ctx);
+ var h = this.getHeight(ctx);
+ // canvases seem to need to have width and heigh attributes directly set.
+ elem.width = w;
+ elem.height = h;
+ elem.style.width = w;
+ elem.style.height = h;
+ elem.style.textAlign = 'left';
+ elem.style.position = 'absolute';
+
+ elem = plot.canvasManager.initCanvas(elem);
+
+ this._elem = $(elem);
+ this._elem.css(this._styles);
+ this._elem.addClass('jqplot-'+this.axis+'-tick');
+
+ elem = null;
+ return this._elem;
+ };
+
+ $.jqplot.CanvasAxisTickRenderer.prototype.pack = function() {
+ this._textRenderer.draw(this._elem.get(0).getContext("2d"), this.label);
+ };
+
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js
new file mode 100644
index 00000000..54d028d1
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(a){a.jqplot.CanvasAxisTickRenderer=function(b){this.mark="outside";this.showMark=true;this.showGridline=true;this.isMinorTick=false;this.angle=0;this.markSize=4;this.show=true;this.showLabel=true;this.labelPosition="auto";this.label="";this.value=null;this._styles={};this.formatter=a.jqplot.DefaultTickFormatter;this.formatString="";this.prefix="";this.fontFamily='"Trebuchet MS", Arial, Helvetica, sans-serif';this.fontSize="10pt";this.fontWeight="normal";this.fontStretch=1;this.textColor="#666666";this.enableFontSupport=true;this.pt2px=null;this._elem;this._ctx;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null};a.extend(true,this,b);var c={fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily};if(this.pt2px){c.pt2px=this.pt2px}if(this.enableFontSupport){if(a.jqplot.support_canvas_text()){this._textRenderer=new a.jqplot.CanvasFontRenderer(c)}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}};a.jqplot.CanvasAxisTickRenderer.prototype.init=function(b){a.extend(true,this,b);this._textRenderer.init({fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily})};a.jqplot.CanvasAxisTickRenderer.prototype.getWidth=function(d){if(this._elem){return this._elem.outerWidth(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.sin(f.angle)*e)+Math.abs(Math.cos(f.angle)*c);return b}};a.jqplot.CanvasAxisTickRenderer.prototype.getHeight=function(d){if(this._elem){return this._elem.outerHeight(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.cos(f.angle)*e)+Math.abs(Math.sin(f.angle)*c);return b}};a.jqplot.CanvasAxisTickRenderer.prototype.getAngleRad=function(){var b=this.angle*Math.PI/180;return b};a.jqplot.CanvasAxisTickRenderer.prototype.setTick=function(b,d,c){this.value=b;if(c){this.isMinorTick=true}return this};a.jqplot.CanvasAxisTickRenderer.prototype.draw=function(c,f){if(!this.label){this.label=this.prefix+this.formatter(this.formatString,this.value)}if(this._elem){if(a.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==undefined){window.G_vmlCanvasManager.uninitElement(this._elem.get(0))}this._elem.emptyForce();this._elem=null}var e=f.canvasManager.getCanvas();this._textRenderer.setText(this.label,c);var b=this.getWidth(c);var d=this.getHeight(c);e.width=b;e.height=d;e.style.width=b;e.style.height=d;e.style.textAlign="left";e.style.position="absolute";e=f.canvasManager.initCanvas(e);this._elem=a(e);this._elem.css(this._styles);this._elem.addClass("jqplot-"+this.axis+"-tick");e=null;return this._elem};a.jqplot.CanvasAxisTickRenderer.prototype.pack=function(){this._textRenderer.draw(this._elem.get(0).getContext("2d"),this.label)}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.js
new file mode 100644
index 00000000..03766206
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.js
@@ -0,0 +1,865 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ var objCounter = 0;
+ // class: $.jqplot.CanvasOverlay
+ $.jqplot.CanvasOverlay = function(opts){
+ var options = opts || {};
+ this.options = {
+ show: $.jqplot.config.enablePlugins,
+ deferDraw: false
+ };
+ // prop: objects
+ this.objects = [];
+ this.objectNames = [];
+ this.canvas = null;
+ this.markerRenderer = new $.jqplot.MarkerRenderer({style:'line'});
+ this.markerRenderer.init();
+ this.highlightObjectIndex = null;
+ if (options.objects) {
+ var objs = options.objects,
+ obj;
+ for (var i=0; i<objs.length; i++) {
+ obj = objs[i];
+ for (var n in obj) {
+ switch (n) {
+ case 'line':
+ this.addLine(obj[n]);
+ break;
+ case 'horizontalLine':
+ this.addHorizontalLine(obj[n]);
+ break;
+ case 'dashedHorizontalLine':
+ this.addDashedHorizontalLine(obj[n]);
+ break;
+ case 'verticalLine':
+ this.addVerticalLine(obj[n]);
+ break;
+ case 'dashedVerticalLine':
+ this.addDashedVerticalLine(obj[n]);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+ $.extend(true, this.options, options);
+ };
+
+ // called with scope of a plot object
+ $.jqplot.CanvasOverlay.postPlotInit = function (target, data, opts) {
+ var options = opts || {};
+ // add a canvasOverlay attribute to the plot
+ this.plugins.canvasOverlay = new $.jqplot.CanvasOverlay(options.canvasOverlay);
+ };
+
+
+ function LineBase() {
+ this.uid = null;
+ this.type = null;
+ this.gridStart = null;
+ this.gridStop = null;
+ this.tooltipWidthFactor = 0;
+ this.options = {
+ // prop: name
+ // Optional name for the overlay object.
+ // Can be later used to retrieve the object by name.
+ name: null,
+ // prop: show
+ // true to show (draw), false to not draw.
+ show: true,
+ // prop: lineWidth
+ // Width of the line.
+ lineWidth: 2,
+ // prop: lineCap
+ // Type of ending placed on the line ['round', 'butt', 'square']
+ lineCap: 'round',
+ // prop: color
+ // color of the line
+ color: '#666666',
+ // prop: shadow
+ // wether or not to draw a shadow on the line
+ shadow: true,
+ // prop: shadowAngle
+ // Shadow angle in degrees
+ shadowAngle: 45,
+ // prop: shadowOffset
+ // Shadow offset from line in pixels
+ shadowOffset: 1,
+ // prop: shadowDepth
+ // Number of times shadow is stroked, each stroke offset shadowOffset from the last.
+ shadowDepth: 3,
+ // prop: shadowAlpha
+ // Alpha channel transparency of shadow. 0 = transparent.
+ shadowAlpha: '0.07',
+ // prop: xaxis
+ // X axis to use for positioning/scaling the line.
+ xaxis: 'xaxis',
+ // prop: yaxis
+ // Y axis to use for positioning/scaling the line.
+ yaxis: 'yaxis',
+ // prop: showTooltip
+ // Show a tooltip with data point values.
+ showTooltip: false,
+ // prop: showTooltipPrecision
+ // Controls how close to line cursor must be to show tooltip.
+ // Higher number = closer to line, lower number = farther from line.
+ // 1.0 = cursor must be over line.
+ showTooltipPrecision: 0.6,
+ // prop: tooltipLocation
+ // Where to position tooltip, 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'
+ tooltipLocation: 'nw',
+ // prop: fadeTooltip
+ // true = fade in/out tooltip, flase = show/hide tooltip
+ fadeTooltip: true,
+ // prop: tooltipFadeSpeed
+ // 'slow', 'def', 'fast', or number of milliseconds.
+ tooltipFadeSpeed: "fast",
+ // prop: tooltipOffset
+ // Pixel offset of tooltip from the highlight.
+ tooltipOffset: 4,
+ // prop: tooltipFormatString
+ // Format string passed the x and y values of the cursor on the line.
+ // e.g., 'Dogs: %.2f, Cats: %d'.
+ tooltipFormatString: '%d, %d'
+ };
+ }
+
+ /**
+ * Class: Line
+ * A straight line.
+ */
+ function Line(options) {
+ LineBase.call(this);
+ this.type = 'line';
+ var opts = {
+ // prop: start
+ // [x, y] coordinates for the start of the line.
+ start: [],
+ // prop: stop
+ // [x, y] coordinates for the end of the line.
+ stop: []
+ };
+ $.extend(true, this.options, opts, options);
+
+ if (this.options.showTooltipPrecision < 0.01) {
+ this.options.showTooltipPrecision = 0.01;
+ }
+ }
+
+ Line.prototype = new LineBase();
+ Line.prototype.constructor = Line;
+
+
+ /**
+ * Class: HorizontalLine
+ * A straight horizontal line.
+ */
+ function HorizontalLine(options) {
+ LineBase.call(this);
+ this.type = 'horizontalLine';
+ var opts = {
+ // prop: y
+ // y value to position the line
+ y: null,
+ // prop: xmin
+ // x value for the start of the line, null to scale to axis min.
+ xmin: null,
+ // prop: xmax
+ // x value for the end of the line, null to scale to axis max.
+ xmax: null,
+ // prop xOffset
+ // offset ends of the line inside the grid. Number
+ xOffset: '6px', // number or string. Number interpreted as units, string as pixels.
+ xminOffset: null,
+ xmaxOffset: null
+ };
+ $.extend(true, this.options, opts, options);
+
+ if (this.options.showTooltipPrecision < 0.01) {
+ this.options.showTooltipPrecision = 0.01;
+ }
+ }
+
+ HorizontalLine.prototype = new LineBase();
+ HorizontalLine.prototype.constructor = HorizontalLine;
+
+
+ /**
+ * Class: DashedHorizontalLine
+ * A straight dashed horizontal line.
+ */
+ function DashedHorizontalLine(options) {
+ LineBase.call(this);
+ this.type = 'dashedHorizontalLine';
+ var opts = {
+ y: null,
+ xmin: null,
+ xmax: null,
+ xOffset: '6px', // number or string. Number interpreted as units, string as pixels.
+ xminOffset: null,
+ xmaxOffset: null,
+ // prop: dashPattern
+ // Array of line, space settings in pixels.
+ // Default is 8 pixel of line, 8 pixel of space.
+ // Note, limit to a 2 element array b/c of bug with higher order arrays.
+ dashPattern: [8,8]
+ };
+ $.extend(true, this.options, opts, options);
+
+ if (this.options.showTooltipPrecision < 0.01) {
+ this.options.showTooltipPrecision = 0.01;
+ }
+ }
+
+ DashedHorizontalLine.prototype = new LineBase();
+ DashedHorizontalLine.prototype.constructor = DashedHorizontalLine;
+
+
+ /**
+ * Class: VerticalLine
+ * A straight vertical line.
+ */
+ function VerticalLine(options) {
+ LineBase.call(this);
+ this.type = 'verticalLine';
+ var opts = {
+ x: null,
+ ymin: null,
+ ymax: null,
+ yOffset: '6px', // number or string. Number interpreted as units, string as pixels.
+ yminOffset: null,
+ ymaxOffset: null
+ };
+ $.extend(true, this.options, opts, options);
+
+ if (this.options.showTooltipPrecision < 0.01) {
+ this.options.showTooltipPrecision = 0.01;
+ }
+ }
+
+ VerticalLine.prototype = new LineBase();
+ VerticalLine.prototype.constructor = VerticalLine;
+
+
+ /**
+ * Class: DashedVerticalLine
+ * A straight dashed vertical line.
+ */
+ function DashedVerticalLine(options) {
+ LineBase.call(this);
+ this.type = 'dashedVerticalLine';
+ this.start = null;
+ this.stop = null;
+ var opts = {
+ x: null,
+ ymin: null,
+ ymax: null,
+ yOffset: '6px', // number or string. Number interpreted as units, string as pixels.
+ yminOffset: null,
+ ymaxOffset: null,
+ // prop: dashPattern
+ // Array of line, space settings in pixels.
+ // Default is 8 pixel of line, 8 pixel of space.
+ // Note, limit to a 2 element array b/c of bug with higher order arrays.
+ dashPattern: [8,8]
+ };
+ $.extend(true, this.options, opts, options);
+
+ if (this.options.showTooltipPrecision < 0.01) {
+ this.options.showTooltipPrecision = 0.01;
+ }
+ }
+
+ DashedVerticalLine.prototype = new LineBase();
+ DashedVerticalLine.prototype.constructor = DashedVerticalLine;
+
+ $.jqplot.CanvasOverlay.prototype.addLine = function(opts) {
+ var line = new Line(opts);
+ line.uid = objCounter++;
+ this.objects.push(line);
+ this.objectNames.push(line.options.name);
+ };
+
+ $.jqplot.CanvasOverlay.prototype.addHorizontalLine = function(opts) {
+ var line = new HorizontalLine(opts);
+ line.uid = objCounter++;
+ this.objects.push(line);
+ this.objectNames.push(line.options.name);
+ };
+
+ $.jqplot.CanvasOverlay.prototype.addDashedHorizontalLine = function(opts) {
+ var line = new DashedHorizontalLine(opts);
+ line.uid = objCounter++;
+ this.objects.push(line);
+ this.objectNames.push(line.options.name);
+ };
+
+ $.jqplot.CanvasOverlay.prototype.addVerticalLine = function(opts) {
+ var line = new VerticalLine(opts);
+ line.uid = objCounter++;
+ this.objects.push(line);
+ this.objectNames.push(line.options.name);
+ };
+
+ $.jqplot.CanvasOverlay.prototype.addDashedVerticalLine = function(opts) {
+ var line = new DashedVerticalLine(opts);
+ line.uid = objCounter++;
+ this.objects.push(line);
+ this.objectNames.push(line.options.name);
+ };
+
+ $.jqplot.CanvasOverlay.prototype.removeObject = function(idx) {
+ // check if integer, remove by index
+ if ($.type(idx) == 'number') {
+ this.objects.splice(idx, 1);
+ this.objectNames.splice(idx, 1);
+ }
+ // if string, remove by name
+ else {
+ var id = $.inArray(idx, this.objectNames);
+ if (id != -1) {
+ this.objects.splice(id, 1);
+ this.objectNames.splice(id, 1);
+ }
+ }
+ };
+
+ $.jqplot.CanvasOverlay.prototype.getObject = function(idx) {
+ // check if integer, remove by index
+ if ($.type(idx) == 'number') {
+ return this.objects[idx];
+ }
+ // if string, remove by name
+ else {
+ var id = $.inArray(idx, this.objectNames);
+ if (id != -1) {
+ return this.objects[id];
+ }
+ }
+ };
+
+ // Set get as alias for getObject.
+ $.jqplot.CanvasOverlay.prototype.get = $.jqplot.CanvasOverlay.prototype.getObject;
+
+ $.jqplot.CanvasOverlay.prototype.clear = function(plot) {
+ this.canvas._ctx.clearRect(0,0,this.canvas.getWidth(), this.canvas.getHeight());
+ };
+
+ $.jqplot.CanvasOverlay.prototype.draw = function(plot) {
+ var obj,
+ objs = this.objects,
+ mr = this.markerRenderer,
+ start,
+ stop;
+ if (this.options.show) {
+ this.canvas._ctx.clearRect(0,0,this.canvas.getWidth(), this.canvas.getHeight());
+ for (var k=0; k<objs.length; k++) {
+ obj = objs[k];
+ var opts = $.extend(true, {}, obj.options);
+ if (obj.options.show) {
+ // style and shadow properties should be set before
+ // every draw of marker renderer.
+ mr.shadow = obj.options.shadow;
+ obj.tooltipWidthFactor = obj.options.lineWidth / obj.options.showTooltipPrecision;
+ switch (obj.type) {
+ case 'line':
+ // style and shadow properties should be set before
+ // every draw of marker renderer.
+ mr.style = 'line';
+ opts.closePath = false;
+ start = [plot.axes[obj.options.xaxis].series_u2p(obj.options.start[0]), plot.axes[obj.options.yaxis].series_u2p(obj.options.start[1])];
+ stop = [plot.axes[obj.options.xaxis].series_u2p(obj.options.stop[0]), plot.axes[obj.options.yaxis].series_u2p(obj.options.stop[1])];
+ obj.gridStart = start;
+ obj.gridStop = stop;
+ mr.draw(start, stop, this.canvas._ctx, opts);
+ break;
+ case 'horizontalLine':
+
+ // style and shadow properties should be set before
+ // every draw of marker renderer.
+ if (obj.options.y != null) {
+ mr.style = 'line';
+ opts.closePath = false;
+ var xaxis = plot.axes[obj.options.xaxis],
+ xstart,
+ xstop,
+ y = plot.axes[obj.options.yaxis].series_u2p(obj.options.y),
+ xminoff = obj.options.xminOffset || obj.options.xOffset,
+ xmaxoff = obj.options.xmaxOffset || obj.options.xOffset;
+ if (obj.options.xmin != null) {
+ xstart = xaxis.series_u2p(obj.options.xmin);
+ }
+ else if (xminoff != null) {
+ if ($.type(xminoff) == "number") {
+ xstart = xaxis.series_u2p(xaxis.min + xminoff);
+ }
+ else if ($.type(xminoff) == "string") {
+ xstart = xaxis.series_u2p(xaxis.min) + parseFloat(xminoff);
+ }
+ }
+ if (obj.options.xmax != null) {
+ xstop = xaxis.series_u2p(obj.options.xmax);
+ }
+ else if (xmaxoff != null) {
+ if ($.type(xmaxoff) == "number") {
+ xstop = xaxis.series_u2p(xaxis.max - xmaxoff);
+ }
+ else if ($.type(xmaxoff) == "string") {
+ xstop = xaxis.series_u2p(xaxis.max) - parseFloat(xmaxoff);
+ }
+ }
+ if (xstop != null && xstart != null) {
+ obj.gridStart = [xstart, y];
+ obj.gridStop = [xstop, y];
+ mr.draw([xstart, y], [xstop, y], this.canvas._ctx, opts);
+ }
+ }
+ break;
+
+ case 'dashedHorizontalLine':
+
+ var dashPat = obj.options.dashPattern;
+ var dashPatLen = 0;
+ for (var i=0; i<dashPat.length; i++) {
+ dashPatLen += dashPat[i];
+ }
+
+ // style and shadow properties should be set before
+ // every draw of marker renderer.
+ if (obj.options.y != null) {
+ mr.style = 'line';
+ opts.closePath = false;
+ var xaxis = plot.axes[obj.options.xaxis],
+ xstart,
+ xstop,
+ y = plot.axes[obj.options.yaxis].series_u2p(obj.options.y),
+ xminoff = obj.options.xminOffset || obj.options.xOffset,
+ xmaxoff = obj.options.xmaxOffset || obj.options.xOffset;
+ if (obj.options.xmin != null) {
+ xstart = xaxis.series_u2p(obj.options.xmin);
+ }
+ else if (xminoff != null) {
+ if ($.type(xminoff) == "number") {
+ xstart = xaxis.series_u2p(xaxis.min + xminoff);
+ }
+ else if ($.type(xminoff) == "string") {
+ xstart = xaxis.series_u2p(xaxis.min) + parseFloat(xminoff);
+ }
+ }
+ if (obj.options.xmax != null) {
+ xstop = xaxis.series_u2p(obj.options.xmax);
+ }
+ else if (xmaxoff != null) {
+ if ($.type(xmaxoff) == "number") {
+ xstop = xaxis.series_u2p(xaxis.max - xmaxoff);
+ }
+ else if ($.type(xmaxoff) == "string") {
+ xstop = xaxis.series_u2p(xaxis.max) - parseFloat(xmaxoff);
+ }
+ }
+ if (xstop != null && xstart != null) {
+ obj.gridStart = [xstart, y];
+ obj.gridStop = [xstop, y];
+ var numDash = Math.ceil((xstop - xstart)/dashPatLen);
+ var b=xstart, e;
+ for (var i=0; i<numDash; i++) {
+ for (var j=0; j<dashPat.length; j+=2) {
+ e = b+dashPat[j];
+ mr.draw([b, y], [e, y], this.canvas._ctx, opts);
+ b += dashPat[j];
+ if (j < dashPat.length-1) {
+ b += dashPat[j+1];
+ }
+ }
+ }
+ }
+ }
+ break;
+
+ case 'verticalLine':
+
+ // style and shadow properties should be set before
+ // every draw of marker renderer.
+ if (obj.options.x != null) {
+ mr.style = 'line';
+ opts.closePath = false;
+ var yaxis = plot.axes[obj.options.yaxis],
+ ystart,
+ ystop,
+ x = plot.axes[obj.options.xaxis].series_u2p(obj.options.x),
+ yminoff = obj.options.yminOffset || obj.options.yOffset,
+ ymaxoff = obj.options.ymaxOffset || obj.options.yOffset;
+ if (obj.options.ymin != null) {
+ ystart = yaxis.series_u2p(obj.options.ymin);
+ }
+ else if (yminoff != null) {
+ if ($.type(yminoff) == "number") {
+ ystart = yaxis.series_u2p(yaxis.min - yminoff);
+ }
+ else if ($.type(yminoff) == "string") {
+ ystart = yaxis.series_u2p(yaxis.min) - parseFloat(yminoff);
+ }
+ }
+ if (obj.options.ymax != null) {
+ ystop = yaxis.series_u2p(obj.options.ymax);
+ }
+ else if (ymaxoff != null) {
+ if ($.type(ymaxoff) == "number") {
+ ystop = yaxis.series_u2p(yaxis.max + ymaxoff);
+ }
+ else if ($.type(ymaxoff) == "string") {
+ ystop = yaxis.series_u2p(yaxis.max) + parseFloat(ymaxoff);
+ }
+ }
+ if (ystop != null && ystart != null) {
+ obj.gridStart = [x, ystart];
+ obj.gridStop = [x, ystop];
+ mr.draw([x, ystart], [x, ystop], this.canvas._ctx, opts);
+ }
+ }
+ break;
+
+ case 'dashedVerticalLine':
+
+ var dashPat = obj.options.dashPattern;
+ var dashPatLen = 0;
+ for (var i=0; i<dashPat.length; i++) {
+ dashPatLen += dashPat[i];
+ }
+
+ // style and shadow properties should be set before
+ // every draw of marker renderer.
+ if (obj.options.x != null) {
+ mr.style = 'line';
+ opts.closePath = false;
+ var yaxis = plot.axes[obj.options.yaxis],
+ ystart,
+ ystop,
+ x = plot.axes[obj.options.xaxis].series_u2p(obj.options.x),
+ yminoff = obj.options.yminOffset || obj.options.yOffset,
+ ymaxoff = obj.options.ymaxOffset || obj.options.yOffset;
+ if (obj.options.ymin != null) {
+ ystart = yaxis.series_u2p(obj.options.ymin);
+ }
+ else if (yminoff != null) {
+ if ($.type(yminoff) == "number") {
+ ystart = yaxis.series_u2p(yaxis.min - yminoff);
+ }
+ else if ($.type(yminoff) == "string") {
+ ystart = yaxis.series_u2p(yaxis.min) - parseFloat(yminoff);
+ }
+ }
+ if (obj.options.ymax != null) {
+ ystop = yaxis.series_u2p(obj.options.ymax);
+ }
+ else if (ymaxoff != null) {
+ if ($.type(ymaxoff) == "number") {
+ ystop = yaxis.series_u2p(yaxis.max + ymaxoff);
+ }
+ else if ($.type(ymaxoff) == "string") {
+ ystop = yaxis.series_u2p(yaxis.max) + parseFloat(ymaxoff);
+ }
+ }
+
+
+ if (ystop != null && ystart != null) {
+ obj.gridStart = [x, ystart];
+ obj.gridStop = [x, ystop];
+ var numDash = Math.ceil((ystart - ystop)/dashPatLen);
+ var firstDashAdjust = ((numDash * dashPatLen) - (ystart - ystop))/2.0;
+ var b=ystart, e, bs, es;
+ for (var i=0; i<numDash; i++) {
+ for (var j=0; j<dashPat.length; j+=2) {
+ e = b - dashPat[j];
+ if (e < ystop) {
+ e = ystop;
+ }
+ if (b < ystop) {
+ b = ystop;
+ }
+ // es = e;
+ // if (i == 0) {
+ // es += firstDashAdjust;
+ // }
+ mr.draw([x, b], [x, e], this.canvas._ctx, opts);
+ b -= dashPat[j];
+ if (j < dashPat.length-1) {
+ b -= dashPat[j+1];
+ }
+ }
+ }
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+ }
+ };
+
+ // called within context of plot
+ // create a canvas which we can draw on.
+ // insert it before the eventCanvas, so eventCanvas will still capture events.
+ $.jqplot.CanvasOverlay.postPlotDraw = function() {
+ var co = this.plugins.canvasOverlay;
+ // Memory Leaks patch
+ if (co && co.highlightCanvas) {
+ co.highlightCanvas.resetCanvas();
+ co.highlightCanvas = null;
+ }
+ co.canvas = new $.jqplot.GenericCanvas();
+
+ this.eventCanvas._elem.before(co.canvas.createElement(this._gridPadding, 'jqplot-overlayCanvas-canvas', this._plotDimensions, this));
+ co.canvas.setContext();
+ if (!co.deferDraw) {
+ co.draw(this);
+ }
+
+ var elem = document.createElement('div');
+ co._tooltipElem = $(elem);
+ elem = null;
+ co._tooltipElem.addClass('jqplot-canvasOverlay-tooltip');
+ co._tooltipElem.css({position:'absolute', display:'none'});
+
+ this.eventCanvas._elem.before(co._tooltipElem);
+ this.eventCanvas._elem.bind('mouseleave', { elem: co._tooltipElem }, function (ev) { ev.data.elem.hide(); });
+
+ var co = null;
+ };
+
+
+ function showTooltip(plot, obj, gridpos, datapos) {
+ var co = plot.plugins.canvasOverlay;
+ var elem = co._tooltipElem;
+
+ var opts = obj.options, x, y;
+
+ elem.html($.jqplot.sprintf(opts.tooltipFormatString, datapos[0], datapos[1]));
+
+ switch (opts.tooltipLocation) {
+ case 'nw':
+ x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset;
+ y = gridpos[1] + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true);
+ break;
+ case 'n':
+ x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true)/2;
+ y = gridpos[1] + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true);
+ break;
+ case 'ne':
+ x = gridpos[0] + plot._gridPadding.left + opts.tooltipOffset;
+ y = gridpos[1] + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true);
+ break;
+ case 'e':
+ x = gridpos[0] + plot._gridPadding.left + opts.tooltipOffset;
+ y = gridpos[1] + plot._gridPadding.top - elem.outerHeight(true)/2;
+ break;
+ case 'se':
+ x = gridpos[0] + plot._gridPadding.left + opts.tooltipOffset;
+ y = gridpos[1] + plot._gridPadding.top + opts.tooltipOffset;
+ break;
+ case 's':
+ x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true)/2;
+ y = gridpos[1] + plot._gridPadding.top + opts.tooltipOffset;
+ break;
+ case 'sw':
+ x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset;
+ y = gridpos[1] + plot._gridPadding.top + opts.tooltipOffset;
+ break;
+ case 'w':
+ x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset;
+ y = gridpos[1] + plot._gridPadding.top - elem.outerHeight(true)/2;
+ break;
+ default: // same as 'nw'
+ x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset;
+ y = gridpos[1] + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true);
+ break;
+ }
+
+ elem.css('left', x);
+ elem.css('top', y);
+ if (opts.fadeTooltip) {
+ // Fix for stacked up animations. Thnanks Trevor!
+ elem.stop(true,true).fadeIn(opts.tooltipFadeSpeed);
+ }
+ else {
+ elem.show();
+ }
+ elem = null;
+ }
+
+
+ function isNearLine(point, lstart, lstop, width) {
+ // r is point to test, p and q are end points.
+ var rx = point[0];
+ var ry = point[1];
+ var px = Math.round(lstop[0]);
+ var py = Math.round(lstop[1]);
+ var qx = Math.round(lstart[0]);
+ var qy = Math.round(lstart[1]);
+
+ var l = Math.sqrt(Math.pow(px-qx, 2) + Math.pow(py-qy, 2));
+
+ // scale error term by length of line.
+ var eps = width*l;
+ var res = Math.abs((qx-px) * (ry-py) - (qy-py) * (rx-px));
+ var ret = (res < eps) ? true : false;
+ return ret;
+ }
+
+
+ function handleMove(ev, gridpos, datapos, neighbor, plot) {
+ var co = plot.plugins.canvasOverlay;
+ var objs = co.objects;
+ var l = objs.length;
+ var obj, haveHighlight=false;
+ var elem;
+ for (var i=0; i<l; i++) {
+ obj = objs[i];
+ if (obj.options.showTooltip) {
+ var n = isNearLine([gridpos.x, gridpos.y], obj.gridStart, obj.gridStop, obj.tooltipWidthFactor);
+ datapos = [plot.axes[obj.options.xaxis].series_p2u(gridpos.x), plot.axes[obj.options.yaxis].series_p2u(gridpos.y)];
+
+ // cases:
+ // near line, no highlighting
+ // near line, highliting on this line
+ // near line, highlighting another line
+ // not near any line, highlighting
+ // not near any line, no highlighting
+
+ // near line, not currently highlighting
+ if (n && co.highlightObjectIndex == null) {
+ switch (obj.type) {
+ case 'line':
+ showTooltip(plot, obj, [gridpos.x, gridpos.y], datapos);
+ break;
+
+ case 'horizontalLine':
+ case 'dashedHorizontalLine':
+ showTooltip(plot, obj, [gridpos.x, obj.gridStart[1]], [datapos[0], obj.options.y]);
+ break;
+
+ case 'verticalLine':
+ case 'dashedVerticalLine':
+ showTooltip(plot, obj, [obj.gridStart[0], gridpos.y], [obj.options.x, datapos[1]]);
+ break;
+ default:
+ break;
+ }
+ co.highlightObjectIndex = i;
+ haveHighlight = true;
+ break;
+ }
+
+ // near line, highlighting another line.
+ else if (n && co.highlightObjectIndex !== i) {
+ // turn off tooltip.
+ elem = co._tooltipElem;
+ if (obj.fadeTooltip) {
+ elem.fadeOut(obj.tooltipFadeSpeed);
+ }
+ else {
+ elem.hide();
+ }
+
+ // turn on right tooltip.
+ switch (obj.type) {
+ case 'line':
+ showTooltip(plot, obj, [gridpos.x, gridpos.y], datapos);
+ break;
+
+ case 'horizontalLine':
+ case 'dashedHorizontalLine':
+ showTooltip(plot, obj, [gridpos.x, obj.gridStart[1]], [datapos[0], obj.options.y]);
+ break;
+
+ case 'verticalLine':
+ case 'dashedVerticalLine':
+ showTooltip(plot, obj, [obj.gridStart[0], gridpos.y], [obj.options.x, datapos[1]]);
+ break;
+ default:
+ break;
+ }
+
+ co.highlightObjectIndex = i;
+ haveHighlight = true;
+ break;
+ }
+
+ // near line, already highlighting this line, update
+ else if (n) {
+ switch (obj.type) {
+ case 'line':
+ showTooltip(plot, obj, [gridpos.x, gridpos.y], datapos);
+ break;
+
+ case 'horizontalLine':
+ case 'dashedHorizontalLine':
+ showTooltip(plot, obj, [gridpos.x, obj.gridStart[1]], [datapos[0], obj.options.y]);
+ break;
+
+ case 'verticalLine':
+ case 'dashedVerticalLine':
+ showTooltip(plot, obj, [obj.gridStart[0], gridpos.y], [obj.options.x, datapos[1]]);
+ break;
+ default:
+ break;
+ }
+
+ haveHighlight = true;
+ break;
+ }
+ }
+ }
+
+ // check if we are highlighting and not near a line, turn it off.
+ if (!haveHighlight && co.highlightObjectIndex !== null) {
+ elem = co._tooltipElem;
+ obj = co.getObject(co.highlightObjectIndex);
+ if (obj.fadeTooltip) {
+ elem.fadeOut(obj.tooltipFadeSpeed);
+ }
+ else {
+ elem.hide();
+ }
+ co.highlightObjectIndex = null;
+ }
+ }
+
+ $.jqplot.postInitHooks.push($.jqplot.CanvasOverlay.postPlotInit);
+ $.jqplot.postDrawHooks.push($.jqplot.CanvasOverlay.postPlotDraw);
+ $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMove]);
+
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.min.js
new file mode 100644
index 00000000..b33a9da1
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(d){var f=0;d.jqplot.CanvasOverlay=function(o){var l=o||{};this.options={show:d.jqplot.config.enablePlugins,deferDraw:false};this.objects=[];this.objectNames=[];this.canvas=null;this.markerRenderer=new d.jqplot.MarkerRenderer({style:"line"});this.markerRenderer.init();this.highlightObjectIndex=null;if(l.objects){var q=l.objects,p;for(var m=0;m<q.length;m++){p=q[m];for(var r in p){switch(r){case"line":this.addLine(p[r]);break;case"horizontalLine":this.addHorizontalLine(p[r]);break;case"dashedHorizontalLine":this.addDashedHorizontalLine(p[r]);break;case"verticalLine":this.addVerticalLine(p[r]);break;case"dashedVerticalLine":this.addDashedVerticalLine(p[r]);break;default:break}}}}d.extend(true,this.options,l)};d.jqplot.CanvasOverlay.postPlotInit=function(o,n,m){var l=m||{};this.plugins.canvasOverlay=new d.jqplot.CanvasOverlay(l.canvasOverlay)};function h(){this.uid=null;this.type=null;this.gridStart=null;this.gridStop=null;this.tooltipWidthFactor=0;this.options={name:null,show:true,lineWidth:2,lineCap:"round",color:"#666666",shadow:true,shadowAngle:45,shadowOffset:1,shadowDepth:3,shadowAlpha:"0.07",xaxis:"xaxis",yaxis:"yaxis",showTooltip:false,showTooltipPrecision:0.6,tooltipLocation:"nw",fadeTooltip:true,tooltipFadeSpeed:"fast",tooltipOffset:4,tooltipFormatString:"%d, %d"}}function b(l){h.call(this);this.type="line";var m={start:[],stop:[]};d.extend(true,this.options,m,l);if(this.options.showTooltipPrecision<0.01){this.options.showTooltipPrecision=0.01}}b.prototype=new h();b.prototype.constructor=b;function e(l){h.call(this);this.type="horizontalLine";var m={y:null,xmin:null,xmax:null,xOffset:"6px",xminOffset:null,xmaxOffset:null};d.extend(true,this.options,m,l);if(this.options.showTooltipPrecision<0.01){this.options.showTooltipPrecision=0.01}}e.prototype=new h();e.prototype.constructor=e;function i(l){h.call(this);this.type="dashedHorizontalLine";var m={y:null,xmin:null,xmax:null,xOffset:"6px",xminOffset:null,xmaxOffset:null,dashPattern:[8,8]};d.extend(true,this.options,m,l);if(this.options.showTooltipPrecision<0.01){this.options.showTooltipPrecision=0.01}}i.prototype=new h();i.prototype.constructor=i;function c(l){h.call(this);this.type="verticalLine";var m={x:null,ymin:null,ymax:null,yOffset:"6px",yminOffset:null,ymaxOffset:null};d.extend(true,this.options,m,l);if(this.options.showTooltipPrecision<0.01){this.options.showTooltipPrecision=0.01}}c.prototype=new h();c.prototype.constructor=c;function k(l){h.call(this);this.type="dashedVerticalLine";this.start=null;this.stop=null;var m={x:null,ymin:null,ymax:null,yOffset:"6px",yminOffset:null,ymaxOffset:null,dashPattern:[8,8]};d.extend(true,this.options,m,l);if(this.options.showTooltipPrecision<0.01){this.options.showTooltipPrecision=0.01}}k.prototype=new h();k.prototype.constructor=k;d.jqplot.CanvasOverlay.prototype.addLine=function(m){var l=new b(m);l.uid=f++;this.objects.push(l);this.objectNames.push(l.options.name)};d.jqplot.CanvasOverlay.prototype.addHorizontalLine=function(m){var l=new e(m);l.uid=f++;this.objects.push(l);this.objectNames.push(l.options.name)};d.jqplot.CanvasOverlay.prototype.addDashedHorizontalLine=function(m){var l=new i(m);l.uid=f++;this.objects.push(l);this.objectNames.push(l.options.name)};d.jqplot.CanvasOverlay.prototype.addVerticalLine=function(m){var l=new c(m);l.uid=f++;this.objects.push(l);this.objectNames.push(l.options.name)};d.jqplot.CanvasOverlay.prototype.addDashedVerticalLine=function(m){var l=new k(m);l.uid=f++;this.objects.push(l);this.objectNames.push(l.options.name)};d.jqplot.CanvasOverlay.prototype.removeObject=function(l){if(d.type(l)=="number"){this.objects.splice(l,1);this.objectNames.splice(l,1)}else{var m=d.inArray(l,this.objectNames);if(m!=-1){this.objects.splice(m,1);this.objectNames.splice(m,1)}}};d.jqplot.CanvasOverlay.prototype.getObject=function(l){if(d.type(l)=="number"){return this.objects[l]}else{var m=d.inArray(l,this.objectNames);if(m!=-1){return this.objects[m]}}};d.jqplot.CanvasOverlay.prototype.get=d.jqplot.CanvasOverlay.prototype.getObject;d.jqplot.CanvasOverlay.prototype.clear=function(l){this.canvas._ctx.clearRect(0,0,this.canvas.getWidth(),this.canvas.getHeight())};d.jqplot.CanvasOverlay.prototype.draw=function(I){var w,t=this.objects,D=this.markerRenderer,q,E;if(this.options.show){this.canvas._ctx.clearRect(0,0,this.canvas.getWidth(),this.canvas.getHeight());for(var F=0;F<t.length;F++){w=t[F];var z=d.extend(true,{},w.options);if(w.options.show){D.shadow=w.options.shadow;w.tooltipWidthFactor=w.options.lineWidth/w.options.showTooltipPrecision;switch(w.type){case"line":D.style="line";z.closePath=false;q=[I.axes[w.options.xaxis].series_u2p(w.options.start[0]),I.axes[w.options.yaxis].series_u2p(w.options.start[1])];E=[I.axes[w.options.xaxis].series_u2p(w.options.stop[0]),I.axes[w.options.yaxis].series_u2p(w.options.stop[1])];w.gridStart=q;w.gridStop=E;D.draw(q,E,this.canvas._ctx,z);break;case"horizontalLine":if(w.options.y!=null){D.style="line";z.closePath=false;var n=I.axes[w.options.xaxis],Q,J,u=I.axes[w.options.yaxis].series_u2p(w.options.y),G=w.options.xminOffset||w.options.xOffset,r=w.options.xmaxOffset||w.options.xOffset;if(w.options.xmin!=null){Q=n.series_u2p(w.options.xmin)}else{if(G!=null){if(d.type(G)=="number"){Q=n.series_u2p(n.min+G)}else{if(d.type(G)=="string"){Q=n.series_u2p(n.min)+parseFloat(G)}}}}if(w.options.xmax!=null){J=n.series_u2p(w.options.xmax)}else{if(r!=null){if(d.type(r)=="number"){J=n.series_u2p(n.max-r)}else{if(d.type(r)=="string"){J=n.series_u2p(n.max)-parseFloat(r)}}}}if(J!=null&&Q!=null){w.gridStart=[Q,u];w.gridStop=[J,u];D.draw([Q,u],[J,u],this.canvas._ctx,z)}}break;case"dashedHorizontalLine":var m=w.options.dashPattern;var C=0;for(var K=0;K<m.length;K++){C+=m[K]}if(w.options.y!=null){D.style="line";z.closePath=false;var n=I.axes[w.options.xaxis],Q,J,u=I.axes[w.options.yaxis].series_u2p(w.options.y),G=w.options.xminOffset||w.options.xOffset,r=w.options.xmaxOffset||w.options.xOffset;if(w.options.xmin!=null){Q=n.series_u2p(w.options.xmin)}else{if(G!=null){if(d.type(G)=="number"){Q=n.series_u2p(n.min+G)}else{if(d.type(G)=="string"){Q=n.series_u2p(n.min)+parseFloat(G)}}}}if(w.options.xmax!=null){J=n.series_u2p(w.options.xmax)}else{if(r!=null){if(d.type(r)=="number"){J=n.series_u2p(n.max-r)}else{if(d.type(r)=="string"){J=n.series_u2p(n.max)-parseFloat(r)}}}}if(J!=null&&Q!=null){w.gridStart=[Q,u];w.gridStop=[J,u];var p=Math.ceil((J-Q)/C);var O=Q,M;for(var K=0;K<p;K++){for(var H=0;H<m.length;H+=2){M=O+m[H];D.draw([O,u],[M,u],this.canvas._ctx,z);O+=m[H];if(H<m.length-1){O+=m[H+1]}}}}}break;case"verticalLine":if(w.options.x!=null){D.style="line";z.closePath=false;var L=I.axes[w.options.yaxis],l,s,v=I.axes[w.options.xaxis].series_u2p(w.options.x),B=w.options.yminOffset||w.options.yOffset,o=w.options.ymaxOffset||w.options.yOffset;if(w.options.ymin!=null){l=L.series_u2p(w.options.ymin)}else{if(B!=null){if(d.type(B)=="number"){l=L.series_u2p(L.min-B)}else{if(d.type(B)=="string"){l=L.series_u2p(L.min)-parseFloat(B)}}}}if(w.options.ymax!=null){s=L.series_u2p(w.options.ymax)}else{if(o!=null){if(d.type(o)=="number"){s=L.series_u2p(L.max+o)}else{if(d.type(o)=="string"){s=L.series_u2p(L.max)+parseFloat(o)}}}}if(s!=null&&l!=null){w.gridStart=[v,l];w.gridStop=[v,s];D.draw([v,l],[v,s],this.canvas._ctx,z)}}break;case"dashedVerticalLine":var m=w.options.dashPattern;var C=0;for(var K=0;K<m.length;K++){C+=m[K]}if(w.options.x!=null){D.style="line";z.closePath=false;var L=I.axes[w.options.yaxis],l,s,v=I.axes[w.options.xaxis].series_u2p(w.options.x),B=w.options.yminOffset||w.options.yOffset,o=w.options.ymaxOffset||w.options.yOffset;if(w.options.ymin!=null){l=L.series_u2p(w.options.ymin)}else{if(B!=null){if(d.type(B)=="number"){l=L.series_u2p(L.min-B)}else{if(d.type(B)=="string"){l=L.series_u2p(L.min)-parseFloat(B)}}}}if(w.options.ymax!=null){s=L.series_u2p(w.options.ymax)}else{if(o!=null){if(d.type(o)=="number"){s=L.series_u2p(L.max+o)}else{if(d.type(o)=="string"){s=L.series_u2p(L.max)+parseFloat(o)}}}}if(s!=null&&l!=null){w.gridStart=[v,l];w.gridStop=[v,s];var p=Math.ceil((l-s)/C);var A=((p*C)-(l-s))/2;var O=l,M,N,P;for(var K=0;K<p;K++){for(var H=0;H<m.length;H+=2){M=O-m[H];if(M<s){M=s}if(O<s){O=s}D.draw([v,O],[v,M],this.canvas._ctx,z);O-=m[H];if(H<m.length-1){O-=m[H+1]}}}}}break;default:break}}}}};d.jqplot.CanvasOverlay.postPlotDraw=function(){var m=this.plugins.canvasOverlay;if(m&&m.highlightCanvas){m.highlightCanvas.resetCanvas();m.highlightCanvas=null}m.canvas=new d.jqplot.GenericCanvas();this.eventCanvas._elem.before(m.canvas.createElement(this._gridPadding,"jqplot-overlayCanvas-canvas",this._plotDimensions,this));m.canvas.setContext();if(!m.deferDraw){m.draw(this)}var l=document.createElement("div");m._tooltipElem=d(l);l=null;m._tooltipElem.addClass("jqplot-canvasOverlay-tooltip");m._tooltipElem.css({position:"absolute",display:"none"});this.eventCanvas._elem.before(m._tooltipElem);this.eventCanvas._elem.bind("mouseleave",{elem:m._tooltipElem},function(n){n.data.elem.hide()});var m=null};function j(q,o,p,n){var s=q.plugins.canvasOverlay;var m=s._tooltipElem;var l=o.options,t,r;m.html(d.jqplot.sprintf(l.tooltipFormatString,n[0],n[1]));switch(l.tooltipLocation){case"nw":t=p[0]+q._gridPadding.left-m.outerWidth(true)-l.tooltipOffset;r=p[1]+q._gridPadding.top-l.tooltipOffset-m.outerHeight(true);break;case"n":t=p[0]+q._gridPadding.left-m.outerWidth(true)/2;r=p[1]+q._gridPadding.top-l.tooltipOffset-m.outerHeight(true);break;case"ne":t=p[0]+q._gridPadding.left+l.tooltipOffset;r=p[1]+q._gridPadding.top-l.tooltipOffset-m.outerHeight(true);break;case"e":t=p[0]+q._gridPadding.left+l.tooltipOffset;r=p[1]+q._gridPadding.top-m.outerHeight(true)/2;break;case"se":t=p[0]+q._gridPadding.left+l.tooltipOffset;r=p[1]+q._gridPadding.top+l.tooltipOffset;break;case"s":t=p[0]+q._gridPadding.left-m.outerWidth(true)/2;r=p[1]+q._gridPadding.top+l.tooltipOffset;break;case"sw":t=p[0]+q._gridPadding.left-m.outerWidth(true)-l.tooltipOffset;r=p[1]+q._gridPadding.top+l.tooltipOffset;break;case"w":t=p[0]+q._gridPadding.left-m.outerWidth(true)-l.tooltipOffset;r=p[1]+q._gridPadding.top-m.outerHeight(true)/2;break;default:t=p[0]+q._gridPadding.left-m.outerWidth(true)-l.tooltipOffset;r=p[1]+q._gridPadding.top-l.tooltipOffset-m.outerHeight(true);break}m.css("left",t);m.css("top",r);if(l.fadeTooltip){m.stop(true,true).fadeIn(l.tooltipFadeSpeed)}else{m.show()}m=null}function g(y,p,r,o){var n=y[0];var m=y[1];var x=Math.round(r[0]);var w=Math.round(r[1]);var t=Math.round(p[0]);var s=Math.round(p[1]);var q=Math.sqrt(Math.pow(x-t,2)+Math.pow(w-s,2));var z=o*q;var v=Math.abs((t-x)*(m-w)-(s-w)*(n-x));var u=(v<z)?true:false;return u}function a(y,v,q,z,w){var x=w.plugins.canvasOverlay;var u=x.objects;var r=u.length;var t,m=false;var p;for(var s=0;s<r;s++){t=u[s];if(t.options.showTooltip){var o=g([v.x,v.y],t.gridStart,t.gridStop,t.tooltipWidthFactor);q=[w.axes[t.options.xaxis].series_p2u(v.x),w.axes[t.options.yaxis].series_p2u(v.y)];if(o&&x.highlightObjectIndex==null){switch(t.type){case"line":j(w,t,[v.x,v.y],q);break;case"horizontalLine":case"dashedHorizontalLine":j(w,t,[v.x,t.gridStart[1]],[q[0],t.options.y]);break;case"verticalLine":case"dashedVerticalLine":j(w,t,[t.gridStart[0],v.y],[t.options.x,q[1]]);break;default:break}x.highlightObjectIndex=s;m=true;break}else{if(o&&x.highlightObjectIndex!==s){p=x._tooltipElem;if(t.fadeTooltip){p.fadeOut(t.tooltipFadeSpeed)}else{p.hide()}switch(t.type){case"line":j(w,t,[v.x,v.y],q);break;case"horizontalLine":case"dashedHorizontalLine":j(w,t,[v.x,t.gridStart[1]],[q[0],t.options.y]);break;case"verticalLine":case"dashedVerticalLine":j(w,t,[t.gridStart[0],v.y],[t.options.x,q[1]]);break;default:break}x.highlightObjectIndex=s;m=true;break}else{if(o){switch(t.type){case"line":j(w,t,[v.x,v.y],q);break;case"horizontalLine":case"dashedHorizontalLine":j(w,t,[v.x,t.gridStart[1]],[q[0],t.options.y]);break;case"verticalLine":case"dashedVerticalLine":j(w,t,[t.gridStart[0],v.y],[t.options.x,q[1]]);break;default:break}m=true;break}}}}}if(!m&&x.highlightObjectIndex!==null){p=x._tooltipElem;t=x.getObject(x.highlightObjectIndex);if(t.fadeTooltip){p.fadeOut(t.tooltipFadeSpeed)}else{p.hide()}x.highlightObjectIndex=null}}d.jqplot.postInitHooks.push(d.jqplot.CanvasOverlay.postPlotInit);d.jqplot.postDrawHooks.push(d.jqplot.CanvasOverlay.postPlotDraw);d.jqplot.eventListenerHooks.push(["jqplotMouseMove",a])})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.js
new file mode 100644
index 00000000..53f25305
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.js
@@ -0,0 +1,449 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2012 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+
+(function($) {
+ // This code is a modified version of the canvastext.js code, copyright below:
+ //
+ // This code is released to the public domain by Jim Studt, 2007.
+ // He may keep some sort of up to date copy at http://www.federated.com/~jim/canvastext/
+ //
+ $.jqplot.CanvasTextRenderer = function(options){
+ this.fontStyle = 'normal'; // normal, italic, oblique [not implemented]
+ this.fontVariant = 'normal'; // normal, small caps [not implemented]
+ this.fontWeight = 'normal'; // normal, bold, bolder, lighter, 100 - 900
+ this.fontSize = '10px';
+ this.fontFamily = 'sans-serif';
+ this.fontStretch = 1.0;
+ this.fillStyle = '#666666';
+ this.angle = 0;
+ this.textAlign = 'start';
+ this.textBaseline = 'alphabetic';
+ this.text;
+ this.width;
+ this.height;
+ this.pt2px = 1.28;
+
+ $.extend(true, this, options);
+ this.normalizedFontSize = this.normalizeFontSize(this.fontSize);
+ this.setHeight();
+ };
+
+ $.jqplot.CanvasTextRenderer.prototype.init = function(options) {
+ $.extend(true, this, options);
+ this.normalizedFontSize = this.normalizeFontSize(this.fontSize);
+ this.setHeight();
+ };
+
+ // convert css spec into point size
+ // returns float
+ $.jqplot.CanvasTextRenderer.prototype.normalizeFontSize = function(sz) {
+ sz = String(sz);
+ var n = parseFloat(sz);
+ if (sz.indexOf('px') > -1) {
+ return n/this.pt2px;
+ }
+ else if (sz.indexOf('pt') > -1) {
+ return n;
+ }
+ else if (sz.indexOf('em') > -1) {
+ return n*12;
+ }
+ else if (sz.indexOf('%') > -1) {
+ return n*12/100;
+ }
+ // default to pixels;
+ else {
+ return n/this.pt2px;
+ }
+ };
+
+
+ $.jqplot.CanvasTextRenderer.prototype.fontWeight2Float = function(w) {
+ // w = normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900
+ // return values adjusted for Hershey font.
+ if (Number(w)) {
+ return w/400;
+ }
+ else {
+ switch (w) {
+ case 'normal':
+ return 1;
+ break;
+ case 'bold':
+ return 1.75;
+ break;
+ case 'bolder':
+ return 2.25;
+ break;
+ case 'lighter':
+ return 0.75;
+ break;
+ default:
+ return 1;
+ break;
+ }
+ }
+ };
+
+ $.jqplot.CanvasTextRenderer.prototype.getText = function() {
+ return this.text;
+ };
+
+ $.jqplot.CanvasTextRenderer.prototype.setText = function(t, ctx) {
+ this.text = t;
+ this.setWidth(ctx);
+ return this;
+ };
+
+ $.jqplot.CanvasTextRenderer.prototype.getWidth = function(ctx) {
+ return this.width;
+ };
+
+ $.jqplot.CanvasTextRenderer.prototype.setWidth = function(ctx, w) {
+ if (!w) {
+ this.width = this.measure(ctx, this.text);
+ }
+ else {
+ this.width = w;
+ }
+ return this;
+ };
+
+ // return height in pixels.
+ $.jqplot.CanvasTextRenderer.prototype.getHeight = function(ctx) {
+ return this.height;
+ };
+
+ // w - height in pt
+ // set heigh in px
+ $.jqplot.CanvasTextRenderer.prototype.setHeight = function(w) {
+ if (!w) {
+ //height = this.fontSize /0.75;
+ this.height = this.normalizedFontSize * this.pt2px;
+ }
+ else {
+ this.height = w;
+ }
+ return this;
+ };
+
+ $.jqplot.CanvasTextRenderer.prototype.letter = function (ch)
+ {
+ return this.letters[ch];
+ };
+
+ $.jqplot.CanvasTextRenderer.prototype.ascent = function()
+ {
+ return this.normalizedFontSize;
+ };
+
+ $.jqplot.CanvasTextRenderer.prototype.descent = function()
+ {
+ return 7.0*this.normalizedFontSize/25.0;
+ };
+
+ $.jqplot.CanvasTextRenderer.prototype.measure = function(ctx, str)
+ {
+ var total = 0;
+ var len = str.length;
+
+ for (var i = 0; i < len; i++) {
+ var c = this.letter(str.charAt(i));
+ if (c) {
+ total += c.width * this.normalizedFontSize / 25.0 * this.fontStretch;
+ }
+ }
+ return total;
+ };
+
+ $.jqplot.CanvasTextRenderer.prototype.draw = function(ctx,str)
+ {
+ var x = 0;
+ // leave room at bottom for descenders.
+ var y = this.height*0.72;
+ var total = 0;
+ var len = str.length;
+ var mag = this.normalizedFontSize / 25.0;
+
+ ctx.save();
+ var tx, ty;
+
+ // 1st quadrant
+ if ((-Math.PI/2 <= this.angle && this.angle <= 0) || (Math.PI*3/2 <= this.angle && this.angle <= Math.PI*2)) {
+ tx = 0;
+ ty = -Math.sin(this.angle) * this.width;
+ }
+ // 4th quadrant
+ else if ((0 < this.angle && this.angle <= Math.PI/2) || (-Math.PI*2 <= this.angle && this.angle <= -Math.PI*3/2)) {
+ tx = Math.sin(this.angle) * this.height;
+ ty = 0;
+ }
+ // 2nd quadrant
+ else if ((-Math.PI < this.angle && this.angle < -Math.PI/2) || (Math.PI <= this.angle && this.angle <= Math.PI*3/2)) {
+ tx = -Math.cos(this.angle) * this.width;
+ ty = -Math.sin(this.angle) * this.width - Math.cos(this.angle) * this.height;
+ }
+ // 3rd quadrant
+ else if ((-Math.PI*3/2 < this.angle && this.angle < Math.PI) || (Math.PI/2 < this.angle && this.angle < Math.PI)) {
+ tx = Math.sin(this.angle) * this.height - Math.cos(this.angle)*this.width;
+ ty = -Math.cos(this.angle) * this.height;
+ }
+
+ ctx.strokeStyle = this.fillStyle;
+ ctx.fillStyle = this.fillStyle;
+ ctx.translate(tx, ty);
+ ctx.rotate(this.angle);
+ ctx.lineCap = "round";
+ // multiplier was 2.0
+ var fact = (this.normalizedFontSize > 30) ? 2.0 : 2 + (30 - this.normalizedFontSize)/20;
+ ctx.lineWidth = fact * mag * this.fontWeight2Float(this.fontWeight);
+
+ for ( var i = 0; i < len; i++) {
+ var c = this.letter( str.charAt(i));
+ if ( !c) {
+ continue;
+ }
+
+ ctx.beginPath();
+
+ var penUp = 1;
+ var needStroke = 0;
+ for ( var j = 0; j < c.points.length; j++) {
+ var a = c.points[j];
+ if ( a[0] == -1 && a[1] == -1) {
+ penUp = 1;
+ continue;
+ }
+ if ( penUp) {
+ ctx.moveTo( x + a[0]*mag*this.fontStretch, y - a[1]*mag);
+ penUp = false;
+ } else {
+ ctx.lineTo( x + a[0]*mag*this.fontStretch, y - a[1]*mag);
+ }
+ }
+ ctx.stroke();
+ x += c.width*mag*this.fontStretch;
+ }
+ ctx.restore();
+ return total;
+ };
+
+ $.jqplot.CanvasTextRenderer.prototype.letters = {
+ ' ': { width: 16, points: [] },
+ '!': { width: 10, points: [[5,21],[5,7],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] },
+ '"': { width: 16, points: [[4,21],[4,14],[-1,-1],[12,21],[12,14]] },
+ '#': { width: 21, points: [[11,25],[4,-7],[-1,-1],[17,25],[10,-7],[-1,-1],[4,12],[18,12],[-1,-1],[3,6],[17,6]] },
+ '$': { width: 20, points: [[8,25],[8,-4],[-1,-1],[12,25],[12,-4],[-1,-1],[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]] },
+ '%': { width: 24, points: [[21,21],[3,0],[-1,-1],[8,21],[10,19],[10,17],[9,15],[7,14],[5,14],[3,16],[3,18],[4,20],[6,21],[8,21],[10,20],[13,19],[16,19],[19,20],[21,21],[-1,-1],[17,7],[15,6],[14,4],[14,2],[16,0],[18,0],[20,1],[21,3],[21,5],[19,7],[17,7]] },
+ '&': { width: 26, points: [[23,12],[23,13],[22,14],[21,14],[20,13],[19,11],[17,6],[15,3],[13,1],[11,0],[7,0],[5,1],[4,2],[3,4],[3,6],[4,8],[5,9],[12,13],[13,14],[14,16],[14,18],[13,20],[11,21],[9,20],[8,18],[8,16],[9,13],[11,10],[16,3],[18,1],[20,0],[22,0],[23,1],[23,2]] },
+ '\'': { width: 10, points: [[5,19],[4,20],[5,21],[6,20],[6,18],[5,16],[4,15]] },
+ '(': { width: 14, points: [[11,25],[9,23],[7,20],[5,16],[4,11],[4,7],[5,2],[7,-2],[9,-5],[11,-7]] },
+ ')': { width: 14, points: [[3,25],[5,23],[7,20],[9,16],[10,11],[10,7],[9,2],[7,-2],[5,-5],[3,-7]] },
+ '*': { width: 16, points: [[8,21],[8,9],[-1,-1],[3,18],[13,12],[-1,-1],[13,18],[3,12]] },
+ '+': { width: 26, points: [[13,18],[13,0],[-1,-1],[4,9],[22,9]] },
+ ',': { width: 10, points: [[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] },
+ '-': { width: 18, points: [[6,9],[12,9]] },
+ '.': { width: 10, points: [[5,2],[4,1],[5,0],[6,1],[5,2]] },
+ '/': { width: 22, points: [[20,25],[2,-7]] },
+ '0': { width: 20, points: [[9,21],[6,20],[4,17],[3,12],[3,9],[4,4],[6,1],[9,0],[11,0],[14,1],[16,4],[17,9],[17,12],[16,17],[14,20],[11,21],[9,21]] },
+ '1': { width: 20, points: [[6,17],[8,18],[11,21],[11,0]] },
+ '2': { width: 20, points: [[4,16],[4,17],[5,19],[6,20],[8,21],[12,21],[14,20],[15,19],[16,17],[16,15],[15,13],[13,10],[3,0],[17,0]] },
+ '3': { width: 20, points: [[5,21],[16,21],[10,13],[13,13],[15,12],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] },
+ '4': { width: 20, points: [[13,21],[3,7],[18,7],[-1,-1],[13,21],[13,0]] },
+ '5': { width: 20, points: [[15,21],[5,21],[4,12],[5,13],[8,14],[11,14],[14,13],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] },
+ '6': { width: 20, points: [[16,18],[15,20],[12,21],[10,21],[7,20],[5,17],[4,12],[4,7],[5,3],[7,1],[10,0],[11,0],[14,1],[16,3],[17,6],[17,7],[16,10],[14,12],[11,13],[10,13],[7,12],[5,10],[4,7]] },
+ '7': { width: 20, points: [[17,21],[7,0],[-1,-1],[3,21],[17,21]] },
+ '8': { width: 20, points: [[8,21],[5,20],[4,18],[4,16],[5,14],[7,13],[11,12],[14,11],[16,9],[17,7],[17,4],[16,2],[15,1],[12,0],[8,0],[5,1],[4,2],[3,4],[3,7],[4,9],[6,11],[9,12],[13,13],[15,14],[16,16],[16,18],[15,20],[12,21],[8,21]] },
+ '9': { width: 20, points: [[16,14],[15,11],[13,9],[10,8],[9,8],[6,9],[4,11],[3,14],[3,15],[4,18],[6,20],[9,21],[10,21],[13,20],[15,18],[16,14],[16,9],[15,4],[13,1],[10,0],[8,0],[5,1],[4,3]] },
+ ':': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] },
+ ';': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] },
+ '<': { width: 24, points: [[20,18],[4,9],[20,0]] },
+ '=': { width: 26, points: [[4,12],[22,12],[-1,-1],[4,6],[22,6]] },
+ '>': { width: 24, points: [[4,18],[20,9],[4,0]] },
+ '?': { width: 18, points: [[3,16],[3,17],[4,19],[5,20],[7,21],[11,21],[13,20],[14,19],[15,17],[15,15],[14,13],[13,12],[9,10],[9,7],[-1,-1],[9,2],[8,1],[9,0],[10,1],[9,2]] },
+ '@': { width: 27, points: [[18,13],[17,15],[15,16],[12,16],[10,15],[9,14],[8,11],[8,8],[9,6],[11,5],[14,5],[16,6],[17,8],[-1,-1],[12,16],[10,14],[9,11],[9,8],[10,6],[11,5],[-1,-1],[18,16],[17,8],[17,6],[19,5],[21,5],[23,7],[24,10],[24,12],[23,15],[22,17],[20,19],[18,20],[15,21],[12,21],[9,20],[7,19],[5,17],[4,15],[3,12],[3,9],[4,6],[5,4],[7,2],[9,1],[12,0],[15,0],[18,1],[20,2],[21,3],[-1,-1],[19,16],[18,8],[18,6],[19,5]] },
+ 'A': { width: 18, points: [[9,21],[1,0],[-1,-1],[9,21],[17,0],[-1,-1],[4,7],[14,7]] },
+ 'B': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[-1,-1],[4,11],[13,11],[16,10],[17,9],[18,7],[18,4],[17,2],[16,1],[13,0],[4,0]] },
+ 'C': { width: 21, points: [[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5]] },
+ 'D': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[11,21],[14,20],[16,18],[17,16],[18,13],[18,8],[17,5],[16,3],[14,1],[11,0],[4,0]] },
+ 'E': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11],[-1,-1],[4,0],[17,0]] },
+ 'F': { width: 18, points: [[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11]] },
+ 'G': { width: 21, points: [[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[18,8],[-1,-1],[13,8],[18,8]] },
+ 'H': { width: 22, points: [[4,21],[4,0],[-1,-1],[18,21],[18,0],[-1,-1],[4,11],[18,11]] },
+ 'I': { width: 8, points: [[4,21],[4,0]] },
+ 'J': { width: 16, points: [[12,21],[12,5],[11,2],[10,1],[8,0],[6,0],[4,1],[3,2],[2,5],[2,7]] },
+ 'K': { width: 21, points: [[4,21],[4,0],[-1,-1],[18,21],[4,7],[-1,-1],[9,12],[18,0]] },
+ 'L': { width: 17, points: [[4,21],[4,0],[-1,-1],[4,0],[16,0]] },
+ 'M': { width: 24, points: [[4,21],[4,0],[-1,-1],[4,21],[12,0],[-1,-1],[20,21],[12,0],[-1,-1],[20,21],[20,0]] },
+ 'N': { width: 22, points: [[4,21],[4,0],[-1,-1],[4,21],[18,0],[-1,-1],[18,21],[18,0]] },
+ 'O': { width: 22, points: [[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21]] },
+ 'P': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,14],[17,12],[16,11],[13,10],[4,10]] },
+ 'Q': { width: 22, points: [[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21],[-1,-1],[12,4],[18,-2]] },
+ 'R': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[4,11],[-1,-1],[11,11],[18,0]] },
+ 'S': { width: 20, points: [[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]] },
+ 'T': { width: 16, points: [[8,21],[8,0],[-1,-1],[1,21],[15,21]] },
+ 'U': { width: 22, points: [[4,21],[4,6],[5,3],[7,1],[10,0],[12,0],[15,1],[17,3],[18,6],[18,21]] },
+ 'V': { width: 18, points: [[1,21],[9,0],[-1,-1],[17,21],[9,0]] },
+ 'W': { width: 24, points: [[2,21],[7,0],[-1,-1],[12,21],[7,0],[-1,-1],[12,21],[17,0],[-1,-1],[22,21],[17,0]] },
+ 'X': { width: 20, points: [[3,21],[17,0],[-1,-1],[17,21],[3,0]] },
+ 'Y': { width: 18, points: [[1,21],[9,11],[9,0],[-1,-1],[17,21],[9,11]] },
+ 'Z': { width: 20, points: [[17,21],[3,0],[-1,-1],[3,21],[17,21],[-1,-1],[3,0],[17,0]] },
+ '[': { width: 14, points: [[4,25],[4,-7],[-1,-1],[5,25],[5,-7],[-1,-1],[4,25],[11,25],[-1,-1],[4,-7],[11,-7]] },
+ '\\': { width: 14, points: [[0,21],[14,-3]] },
+ ']': { width: 14, points: [[9,25],[9,-7],[-1,-1],[10,25],[10,-7],[-1,-1],[3,25],[10,25],[-1,-1],[3,-7],[10,-7]] },
+ '^': { width: 16, points: [[6,15],[8,18],[10,15],[-1,-1],[3,12],[8,17],[13,12],[-1,-1],[8,17],[8,0]] },
+ '_': { width: 16, points: [[0,-2],[16,-2]] },
+ '`': { width: 10, points: [[6,21],[5,20],[4,18],[4,16],[5,15],[6,16],[5,17]] },
+ 'a': { width: 19, points: [[15,14],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'b': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]] },
+ 'c': { width: 18, points: [[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'd': { width: 19, points: [[15,21],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'e': { width: 18, points: [[3,8],[15,8],[15,10],[14,12],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'f': { width: 12, points: [[10,21],[8,21],[6,20],[5,17],[5,0],[-1,-1],[2,14],[9,14]] },
+ 'g': { width: 19, points: [[15,14],[15,-2],[14,-5],[13,-6],[11,-7],[8,-7],[6,-6],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'h': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]] },
+ 'i': { width: 8, points: [[3,21],[4,20],[5,21],[4,22],[3,21],[-1,-1],[4,14],[4,0]] },
+ 'j': { width: 10, points: [[5,21],[6,20],[7,21],[6,22],[5,21],[-1,-1],[6,14],[6,-3],[5,-6],[3,-7],[1,-7]] },
+ 'k': { width: 17, points: [[4,21],[4,0],[-1,-1],[14,14],[4,4],[-1,-1],[8,8],[15,0]] },
+ 'l': { width: 8, points: [[4,21],[4,0]] },
+ 'm': { width: 30, points: [[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0],[-1,-1],[15,10],[18,13],[20,14],[23,14],[25,13],[26,10],[26,0]] },
+ 'n': { width: 19, points: [[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]] },
+ 'o': { width: 19, points: [[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3],[16,6],[16,8],[15,11],[13,13],[11,14],[8,14]] },
+ 'p': { width: 19, points: [[4,14],[4,-7],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]] },
+ 'q': { width: 19, points: [[15,14],[15,-7],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'r': { width: 13, points: [[4,14],[4,0],[-1,-1],[4,8],[5,11],[7,13],[9,14],[12,14]] },
+ 's': { width: 17, points: [[14,11],[13,13],[10,14],[7,14],[4,13],[3,11],[4,9],[6,8],[11,7],[13,6],[14,4],[14,3],[13,1],[10,0],[7,0],[4,1],[3,3]] },
+ 't': { width: 12, points: [[5,21],[5,4],[6,1],[8,0],[10,0],[-1,-1],[2,14],[9,14]] },
+ 'u': { width: 19, points: [[4,14],[4,4],[5,1],[7,0],[10,0],[12,1],[15,4],[-1,-1],[15,14],[15,0]] },
+ 'v': { width: 16, points: [[2,14],[8,0],[-1,-1],[14,14],[8,0]] },
+ 'w': { width: 22, points: [[3,14],[7,0],[-1,-1],[11,14],[7,0],[-1,-1],[11,14],[15,0],[-1,-1],[19,14],[15,0]] },
+ 'x': { width: 17, points: [[3,14],[14,0],[-1,-1],[14,14],[3,0]] },
+ 'y': { width: 16, points: [[2,14],[8,0],[-1,-1],[14,14],[8,0],[6,-4],[4,-6],[2,-7],[1,-7]] },
+ 'z': { width: 17, points: [[14,14],[3,0],[-1,-1],[3,14],[14,14],[-1,-1],[3,0],[14,0]] },
+ '{': { width: 14, points: [[9,25],[7,24],[6,23],[5,21],[5,19],[6,17],[7,16],[8,14],[8,12],[6,10],[-1,-1],[7,24],[6,22],[6,20],[7,18],[8,17],[9,15],[9,13],[8,11],[4,9],[8,7],[9,5],[9,3],[8,1],[7,0],[6,-2],[6,-4],[7,-6],[-1,-1],[6,8],[8,6],[8,4],[7,2],[6,1],[5,-1],[5,-3],[6,-5],[7,-6],[9,-7]] },
+ '|': { width: 8, points: [[4,25],[4,-7]] },
+ '}': { width: 14, points: [[5,25],[7,24],[8,23],[9,21],[9,19],[8,17],[7,16],[6,14],[6,12],[8,10],[-1,-1],[7,24],[8,22],[8,20],[7,18],[6,17],[5,15],[5,13],[6,11],[10,9],[6,7],[5,5],[5,3],[6,1],[7,0],[8,-2],[8,-4],[7,-6],[-1,-1],[8,8],[6,6],[6,4],[7,2],[8,1],[9,-1],[9,-3],[8,-5],[7,-6],[5,-7]] },
+ '~': { width: 24, points: [[3,6],[3,8],[4,11],[6,12],[8,12],[10,11],[14,8],[16,7],[18,7],[20,8],[21,10],[-1,-1],[3,8],[4,10],[6,11],[8,11],[10,10],[14,7],[16,6],[18,6],[20,7],[21,10],[21,12]] }
+ };
+
+ $.jqplot.CanvasFontRenderer = function(options) {
+ options = options || {};
+ if (!options.pt2px) {
+ options.pt2px = 1.5;
+ }
+ $.jqplot.CanvasTextRenderer.call(this, options);
+ };
+
+ $.jqplot.CanvasFontRenderer.prototype = new $.jqplot.CanvasTextRenderer({});
+ $.jqplot.CanvasFontRenderer.prototype.constructor = $.jqplot.CanvasFontRenderer;
+
+ $.jqplot.CanvasFontRenderer.prototype.measure = function(ctx, str)
+ {
+ // var fstyle = this.fontStyle+' '+this.fontVariant+' '+this.fontWeight+' '+this.fontSize+' '+this.fontFamily;
+ var fstyle = this.fontSize+' '+this.fontFamily;
+ ctx.save();
+ ctx.font = fstyle;
+ var w = ctx.measureText(str).width;
+ ctx.restore();
+ return w;
+ };
+
+ $.jqplot.CanvasFontRenderer.prototype.draw = function(ctx, str)
+ {
+ var x = 0;
+ // leave room at bottom for descenders.
+ var y = this.height*0.72;
+ //var y = 12;
+
+ ctx.save();
+ var tx, ty;
+
+ // 1st quadrant
+ if ((-Math.PI/2 <= this.angle && this.angle <= 0) || (Math.PI*3/2 <= this.angle && this.angle <= Math.PI*2)) {
+ tx = 0;
+ ty = -Math.sin(this.angle) * this.width;
+ }
+ // 4th quadrant
+ else if ((0 < this.angle && this.angle <= Math.PI/2) || (-Math.PI*2 <= this.angle && this.angle <= -Math.PI*3/2)) {
+ tx = Math.sin(this.angle) * this.height;
+ ty = 0;
+ }
+ // 2nd quadrant
+ else if ((-Math.PI < this.angle && this.angle < -Math.PI/2) || (Math.PI <= this.angle && this.angle <= Math.PI*3/2)) {
+ tx = -Math.cos(this.angle) * this.width;
+ ty = -Math.sin(this.angle) * this.width - Math.cos(this.angle) * this.height;
+ }
+ // 3rd quadrant
+ else if ((-Math.PI*3/2 < this.angle && this.angle < Math.PI) || (Math.PI/2 < this.angle && this.angle < Math.PI)) {
+ tx = Math.sin(this.angle) * this.height - Math.cos(this.angle)*this.width;
+ ty = -Math.cos(this.angle) * this.height;
+ }
+ ctx.strokeStyle = this.fillStyle;
+ ctx.fillStyle = this.fillStyle;
+ // var fstyle = this.fontStyle+' '+this.fontVariant+' '+this.fontWeight+' '+this.fontSize+' '+this.fontFamily;
+ var fstyle = this.fontSize+' '+this.fontFamily;
+ ctx.font = fstyle;
+ ctx.translate(tx, ty);
+ ctx.rotate(this.angle);
+ ctx.fillText(str, x, y);
+ // ctx.strokeText(str, x, y);
+
+ ctx.restore();
+ };
+
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.min.js
new file mode 100644
index 00000000..451e6c64
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(a){a.jqplot.CanvasTextRenderer=function(b){this.fontStyle="normal";this.fontVariant="normal";this.fontWeight="normal";this.fontSize="10px";this.fontFamily="sans-serif";this.fontStretch=1;this.fillStyle="#666666";this.angle=0;this.textAlign="start";this.textBaseline="alphabetic";this.text;this.width;this.height;this.pt2px=1.28;a.extend(true,this,b);this.normalizedFontSize=this.normalizeFontSize(this.fontSize);this.setHeight()};a.jqplot.CanvasTextRenderer.prototype.init=function(b){a.extend(true,this,b);this.normalizedFontSize=this.normalizeFontSize(this.fontSize);this.setHeight()};a.jqplot.CanvasTextRenderer.prototype.normalizeFontSize=function(b){b=String(b);var c=parseFloat(b);if(b.indexOf("px")>-1){return c/this.pt2px}else{if(b.indexOf("pt")>-1){return c}else{if(b.indexOf("em")>-1){return c*12}else{if(b.indexOf("%")>-1){return c*12/100}else{return c/this.pt2px}}}}};a.jqplot.CanvasTextRenderer.prototype.fontWeight2Float=function(b){if(Number(b)){return b/400}else{switch(b){case"normal":return 1;break;case"bold":return 1.75;break;case"bolder":return 2.25;break;case"lighter":return 0.75;break;default:return 1;break}}};a.jqplot.CanvasTextRenderer.prototype.getText=function(){return this.text};a.jqplot.CanvasTextRenderer.prototype.setText=function(c,b){this.text=c;this.setWidth(b);return this};a.jqplot.CanvasTextRenderer.prototype.getWidth=function(b){return this.width};a.jqplot.CanvasTextRenderer.prototype.setWidth=function(c,b){if(!b){this.width=this.measure(c,this.text)}else{this.width=b}return this};a.jqplot.CanvasTextRenderer.prototype.getHeight=function(b){return this.height};a.jqplot.CanvasTextRenderer.prototype.setHeight=function(b){if(!b){this.height=this.normalizedFontSize*this.pt2px}else{this.height=b}return this};a.jqplot.CanvasTextRenderer.prototype.letter=function(b){return this.letters[b]};a.jqplot.CanvasTextRenderer.prototype.ascent=function(){return this.normalizedFontSize};a.jqplot.CanvasTextRenderer.prototype.descent=function(){return 7*this.normalizedFontSize/25};a.jqplot.CanvasTextRenderer.prototype.measure=function(d,g){var f=0;var b=g.length;for(var e=0;e<b;e++){var h=this.letter(g.charAt(e));if(h){f+=h.width*this.normalizedFontSize/25*this.fontStretch}}return f};a.jqplot.CanvasTextRenderer.prototype.draw=function(s,n){var r=0;var o=this.height*0.72;var p=0;var l=n.length;var k=this.normalizedFontSize/25;s.save();var h,f;if((-Math.PI/2<=this.angle&&this.angle<=0)||(Math.PI*3/2<=this.angle&&this.angle<=Math.PI*2)){h=0;f=-Math.sin(this.angle)*this.width}else{if((0<this.angle&&this.angle<=Math.PI/2)||(-Math.PI*2<=this.angle&&this.angle<=-Math.PI*3/2)){h=Math.sin(this.angle)*this.height;f=0}else{if((-Math.PI<this.angle&&this.angle<-Math.PI/2)||(Math.PI<=this.angle&&this.angle<=Math.PI*3/2)){h=-Math.cos(this.angle)*this.width;f=-Math.sin(this.angle)*this.width-Math.cos(this.angle)*this.height}else{if((-Math.PI*3/2<this.angle&&this.angle<Math.PI)||(Math.PI/2<this.angle&&this.angle<Math.PI)){h=Math.sin(this.angle)*this.height-Math.cos(this.angle)*this.width;f=-Math.cos(this.angle)*this.height}}}}s.strokeStyle=this.fillStyle;s.fillStyle=this.fillStyle;s.translate(h,f);s.rotate(this.angle);s.lineCap="round";var t=(this.normalizedFontSize>30)?2:2+(30-this.normalizedFontSize)/20;s.lineWidth=t*k*this.fontWeight2Float(this.fontWeight);for(var g=0;g<l;g++){var m=this.letter(n.charAt(g));if(!m){continue}s.beginPath();var e=1;var b=0;for(var d=0;d<m.points.length;d++){var q=m.points[d];if(q[0]==-1&&q[1]==-1){e=1;continue}if(e){s.moveTo(r+q[0]*k*this.fontStretch,o-q[1]*k);e=false}else{s.lineTo(r+q[0]*k*this.fontStretch,o-q[1]*k)}}s.stroke();r+=m.width*k*this.fontStretch}s.restore();return p};a.jqplot.CanvasTextRenderer.prototype.letters={" ":{width:16,points:[]},"!":{width:10,points:[[5,21],[5,7],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]]},'"':{width:16,points:[[4,21],[4,14],[-1,-1],[12,21],[12,14]]},"#":{width:21,points:[[11,25],[4,-7],[-1,-1],[17,25],[10,-7],[-1,-1],[4,12],[18,12],[-1,-1],[3,6],[17,6]]},"$":{width:20,points:[[8,25],[8,-4],[-1,-1],[12,25],[12,-4],[-1,-1],[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]]},"%":{width:24,points:[[21,21],[3,0],[-1,-1],[8,21],[10,19],[10,17],[9,15],[7,14],[5,14],[3,16],[3,18],[4,20],[6,21],[8,21],[10,20],[13,19],[16,19],[19,20],[21,21],[-1,-1],[17,7],[15,6],[14,4],[14,2],[16,0],[18,0],[20,1],[21,3],[21,5],[19,7],[17,7]]},"&":{width:26,points:[[23,12],[23,13],[22,14],[21,14],[20,13],[19,11],[17,6],[15,3],[13,1],[11,0],[7,0],[5,1],[4,2],[3,4],[3,6],[4,8],[5,9],[12,13],[13,14],[14,16],[14,18],[13,20],[11,21],[9,20],[8,18],[8,16],[9,13],[11,10],[16,3],[18,1],[20,0],[22,0],[23,1],[23,2]]},"'":{width:10,points:[[5,19],[4,20],[5,21],[6,20],[6,18],[5,16],[4,15]]},"(":{width:14,points:[[11,25],[9,23],[7,20],[5,16],[4,11],[4,7],[5,2],[7,-2],[9,-5],[11,-7]]},")":{width:14,points:[[3,25],[5,23],[7,20],[9,16],[10,11],[10,7],[9,2],[7,-2],[5,-5],[3,-7]]},"*":{width:16,points:[[8,21],[8,9],[-1,-1],[3,18],[13,12],[-1,-1],[13,18],[3,12]]},"+":{width:26,points:[[13,18],[13,0],[-1,-1],[4,9],[22,9]]},",":{width:10,points:[[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]]},"-":{width:18,points:[[6,9],[12,9]]},".":{width:10,points:[[5,2],[4,1],[5,0],[6,1],[5,2]]},"/":{width:22,points:[[20,25],[2,-7]]},"0":{width:20,points:[[9,21],[6,20],[4,17],[3,12],[3,9],[4,4],[6,1],[9,0],[11,0],[14,1],[16,4],[17,9],[17,12],[16,17],[14,20],[11,21],[9,21]]},"1":{width:20,points:[[6,17],[8,18],[11,21],[11,0]]},"2":{width:20,points:[[4,16],[4,17],[5,19],[6,20],[8,21],[12,21],[14,20],[15,19],[16,17],[16,15],[15,13],[13,10],[3,0],[17,0]]},"3":{width:20,points:[[5,21],[16,21],[10,13],[13,13],[15,12],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]]},"4":{width:20,points:[[13,21],[3,7],[18,7],[-1,-1],[13,21],[13,0]]},"5":{width:20,points:[[15,21],[5,21],[4,12],[5,13],[8,14],[11,14],[14,13],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]]},"6":{width:20,points:[[16,18],[15,20],[12,21],[10,21],[7,20],[5,17],[4,12],[4,7],[5,3],[7,1],[10,0],[11,0],[14,1],[16,3],[17,6],[17,7],[16,10],[14,12],[11,13],[10,13],[7,12],[5,10],[4,7]]},"7":{width:20,points:[[17,21],[7,0],[-1,-1],[3,21],[17,21]]},"8":{width:20,points:[[8,21],[5,20],[4,18],[4,16],[5,14],[7,13],[11,12],[14,11],[16,9],[17,7],[17,4],[16,2],[15,1],[12,0],[8,0],[5,1],[4,2],[3,4],[3,7],[4,9],[6,11],[9,12],[13,13],[15,14],[16,16],[16,18],[15,20],[12,21],[8,21]]},"9":{width:20,points:[[16,14],[15,11],[13,9],[10,8],[9,8],[6,9],[4,11],[3,14],[3,15],[4,18],[6,20],[9,21],[10,21],[13,20],[15,18],[16,14],[16,9],[15,4],[13,1],[10,0],[8,0],[5,1],[4,3]]},":":{width:10,points:[[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]]},";":{width:10,points:[[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]]},"<":{width:24,points:[[20,18],[4,9],[20,0]]},"=":{width:26,points:[[4,12],[22,12],[-1,-1],[4,6],[22,6]]},">":{width:24,points:[[4,18],[20,9],[4,0]]},"?":{width:18,points:[[3,16],[3,17],[4,19],[5,20],[7,21],[11,21],[13,20],[14,19],[15,17],[15,15],[14,13],[13,12],[9,10],[9,7],[-1,-1],[9,2],[8,1],[9,0],[10,1],[9,2]]},"@":{width:27,points:[[18,13],[17,15],[15,16],[12,16],[10,15],[9,14],[8,11],[8,8],[9,6],[11,5],[14,5],[16,6],[17,8],[-1,-1],[12,16],[10,14],[9,11],[9,8],[10,6],[11,5],[-1,-1],[18,16],[17,8],[17,6],[19,5],[21,5],[23,7],[24,10],[24,12],[23,15],[22,17],[20,19],[18,20],[15,21],[12,21],[9,20],[7,19],[5,17],[4,15],[3,12],[3,9],[4,6],[5,4],[7,2],[9,1],[12,0],[15,0],[18,1],[20,2],[21,3],[-1,-1],[19,16],[18,8],[18,6],[19,5]]},A:{width:18,points:[[9,21],[1,0],[-1,-1],[9,21],[17,0],[-1,-1],[4,7],[14,7]]},B:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[-1,-1],[4,11],[13,11],[16,10],[17,9],[18,7],[18,4],[17,2],[16,1],[13,0],[4,0]]},C:{width:21,points:[[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5]]},D:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[11,21],[14,20],[16,18],[17,16],[18,13],[18,8],[17,5],[16,3],[14,1],[11,0],[4,0]]},E:{width:19,points:[[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11],[-1,-1],[4,0],[17,0]]},F:{width:18,points:[[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11]]},G:{width:21,points:[[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[18,8],[-1,-1],[13,8],[18,8]]},H:{width:22,points:[[4,21],[4,0],[-1,-1],[18,21],[18,0],[-1,-1],[4,11],[18,11]]},I:{width:8,points:[[4,21],[4,0]]},J:{width:16,points:[[12,21],[12,5],[11,2],[10,1],[8,0],[6,0],[4,1],[3,2],[2,5],[2,7]]},K:{width:21,points:[[4,21],[4,0],[-1,-1],[18,21],[4,7],[-1,-1],[9,12],[18,0]]},L:{width:17,points:[[4,21],[4,0],[-1,-1],[4,0],[16,0]]},M:{width:24,points:[[4,21],[4,0],[-1,-1],[4,21],[12,0],[-1,-1],[20,21],[12,0],[-1,-1],[20,21],[20,0]]},N:{width:22,points:[[4,21],[4,0],[-1,-1],[4,21],[18,0],[-1,-1],[18,21],[18,0]]},O:{width:22,points:[[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21]]},P:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,14],[17,12],[16,11],[13,10],[4,10]]},Q:{width:22,points:[[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21],[-1,-1],[12,4],[18,-2]]},R:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[4,11],[-1,-1],[11,11],[18,0]]},S:{width:20,points:[[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]]},T:{width:16,points:[[8,21],[8,0],[-1,-1],[1,21],[15,21]]},U:{width:22,points:[[4,21],[4,6],[5,3],[7,1],[10,0],[12,0],[15,1],[17,3],[18,6],[18,21]]},V:{width:18,points:[[1,21],[9,0],[-1,-1],[17,21],[9,0]]},W:{width:24,points:[[2,21],[7,0],[-1,-1],[12,21],[7,0],[-1,-1],[12,21],[17,0],[-1,-1],[22,21],[17,0]]},X:{width:20,points:[[3,21],[17,0],[-1,-1],[17,21],[3,0]]},Y:{width:18,points:[[1,21],[9,11],[9,0],[-1,-1],[17,21],[9,11]]},Z:{width:20,points:[[17,21],[3,0],[-1,-1],[3,21],[17,21],[-1,-1],[3,0],[17,0]]},"[":{width:14,points:[[4,25],[4,-7],[-1,-1],[5,25],[5,-7],[-1,-1],[4,25],[11,25],[-1,-1],[4,-7],[11,-7]]},"\\":{width:14,points:[[0,21],[14,-3]]},"]":{width:14,points:[[9,25],[9,-7],[-1,-1],[10,25],[10,-7],[-1,-1],[3,25],[10,25],[-1,-1],[3,-7],[10,-7]]},"^":{width:16,points:[[6,15],[8,18],[10,15],[-1,-1],[3,12],[8,17],[13,12],[-1,-1],[8,17],[8,0]]},_:{width:16,points:[[0,-2],[16,-2]]},"`":{width:10,points:[[6,21],[5,20],[4,18],[4,16],[5,15],[6,16],[5,17]]},a:{width:19,points:[[15,14],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},b:{width:19,points:[[4,21],[4,0],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]]},c:{width:18,points:[[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},d:{width:19,points:[[15,21],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},e:{width:18,points:[[3,8],[15,8],[15,10],[14,12],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},f:{width:12,points:[[10,21],[8,21],[6,20],[5,17],[5,0],[-1,-1],[2,14],[9,14]]},g:{width:19,points:[[15,14],[15,-2],[14,-5],[13,-6],[11,-7],[8,-7],[6,-6],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},h:{width:19,points:[[4,21],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]]},i:{width:8,points:[[3,21],[4,20],[5,21],[4,22],[3,21],[-1,-1],[4,14],[4,0]]},j:{width:10,points:[[5,21],[6,20],[7,21],[6,22],[5,21],[-1,-1],[6,14],[6,-3],[5,-6],[3,-7],[1,-7]]},k:{width:17,points:[[4,21],[4,0],[-1,-1],[14,14],[4,4],[-1,-1],[8,8],[15,0]]},l:{width:8,points:[[4,21],[4,0]]},m:{width:30,points:[[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0],[-1,-1],[15,10],[18,13],[20,14],[23,14],[25,13],[26,10],[26,0]]},n:{width:19,points:[[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]]},o:{width:19,points:[[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3],[16,6],[16,8],[15,11],[13,13],[11,14],[8,14]]},p:{width:19,points:[[4,14],[4,-7],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]]},q:{width:19,points:[[15,14],[15,-7],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},r:{width:13,points:[[4,14],[4,0],[-1,-1],[4,8],[5,11],[7,13],[9,14],[12,14]]},s:{width:17,points:[[14,11],[13,13],[10,14],[7,14],[4,13],[3,11],[4,9],[6,8],[11,7],[13,6],[14,4],[14,3],[13,1],[10,0],[7,0],[4,1],[3,3]]},t:{width:12,points:[[5,21],[5,4],[6,1],[8,0],[10,0],[-1,-1],[2,14],[9,14]]},u:{width:19,points:[[4,14],[4,4],[5,1],[7,0],[10,0],[12,1],[15,4],[-1,-1],[15,14],[15,0]]},v:{width:16,points:[[2,14],[8,0],[-1,-1],[14,14],[8,0]]},w:{width:22,points:[[3,14],[7,0],[-1,-1],[11,14],[7,0],[-1,-1],[11,14],[15,0],[-1,-1],[19,14],[15,0]]},x:{width:17,points:[[3,14],[14,0],[-1,-1],[14,14],[3,0]]},y:{width:16,points:[[2,14],[8,0],[-1,-1],[14,14],[8,0],[6,-4],[4,-6],[2,-7],[1,-7]]},z:{width:17,points:[[14,14],[3,0],[-1,-1],[3,14],[14,14],[-1,-1],[3,0],[14,0]]},"{":{width:14,points:[[9,25],[7,24],[6,23],[5,21],[5,19],[6,17],[7,16],[8,14],[8,12],[6,10],[-1,-1],[7,24],[6,22],[6,20],[7,18],[8,17],[9,15],[9,13],[8,11],[4,9],[8,7],[9,5],[9,3],[8,1],[7,0],[6,-2],[6,-4],[7,-6],[-1,-1],[6,8],[8,6],[8,4],[7,2],[6,1],[5,-1],[5,-3],[6,-5],[7,-6],[9,-7]]},"|":{width:8,points:[[4,25],[4,-7]]},"}":{width:14,points:[[5,25],[7,24],[8,23],[9,21],[9,19],[8,17],[7,16],[6,14],[6,12],[8,10],[-1,-1],[7,24],[8,22],[8,20],[7,18],[6,17],[5,15],[5,13],[6,11],[10,9],[6,7],[5,5],[5,3],[6,1],[7,0],[8,-2],[8,-4],[7,-6],[-1,-1],[8,8],[6,6],[6,4],[7,2],[8,1],[9,-1],[9,-3],[8,-5],[7,-6],[5,-7]]},"~":{width:24,points:[[3,6],[3,8],[4,11],[6,12],[8,12],[10,11],[14,8],[16,7],[18,7],[20,8],[21,10],[-1,-1],[3,8],[4,10],[6,11],[8,11],[10,10],[14,7],[16,6],[18,6],[20,7],[21,10],[21,12]]}};a.jqplot.CanvasFontRenderer=function(b){b=b||{};if(!b.pt2px){b.pt2px=1.5}a.jqplot.CanvasTextRenderer.call(this,b)};a.jqplot.CanvasFontRenderer.prototype=new a.jqplot.CanvasTextRenderer({});a.jqplot.CanvasFontRenderer.prototype.constructor=a.jqplot.CanvasFontRenderer;a.jqplot.CanvasFontRenderer.prototype.measure=function(c,e){var d=this.fontSize+" "+this.fontFamily;c.save();c.font=d;var b=c.measureText(e).width;c.restore();return b};a.jqplot.CanvasFontRenderer.prototype.draw=function(e,g){var c=0;var h=this.height*0.72;e.save();var d,b;if((-Math.PI/2<=this.angle&&this.angle<=0)||(Math.PI*3/2<=this.angle&&this.angle<=Math.PI*2)){d=0;b=-Math.sin(this.angle)*this.width}else{if((0<this.angle&&this.angle<=Math.PI/2)||(-Math.PI*2<=this.angle&&this.angle<=-Math.PI*3/2)){d=Math.sin(this.angle)*this.height;b=0}else{if((-Math.PI<this.angle&&this.angle<-Math.PI/2)||(Math.PI<=this.angle&&this.angle<=Math.PI*3/2)){d=-Math.cos(this.angle)*this.width;b=-Math.sin(this.angle)*this.width-Math.cos(this.angle)*this.height}else{if((-Math.PI*3/2<this.angle&&this.angle<Math.PI)||(Math.PI/2<this.angle&&this.angle<Math.PI)){d=Math.sin(this.angle)*this.height-Math.cos(this.angle)*this.width;b=-Math.cos(this.angle)*this.height}}}}e.strokeStyle=this.fillStyle;e.fillStyle=this.fillStyle;var f=this.fontSize+" "+this.fontFamily;e.font=f;e.translate(d,b);e.rotate(this.angle);e.fillText(g,c,h);e.restore()}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.js
new file mode 100644
index 00000000..4cea2de6
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.js
@@ -0,0 +1,673 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ /**
+ * class: $.jqplot.CategoryAxisRenderer
+ * A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.
+ *
+ * To use this renderer, include the plugin in your source
+ * > <script type="text/javascript" language="javascript" src="plugins/jqplot.categoryAxisRenderer.js"></script>
+ *
+ * and supply the appropriate options to your plot
+ *
+ * > {axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}}
+ **/
+ $.jqplot.CategoryAxisRenderer = function(options) {
+ $.jqplot.LinearAxisRenderer.call(this);
+ // prop: sortMergedLabels
+ // True to sort tick labels when labels are created by merging
+ // x axis values from multiple series. That is, say you have
+ // two series like:
+ // > line1 = [[2006, 4], [2008, 9], [2009, 16]];
+ // > line2 = [[2006, 3], [2007, 7], [2008, 6]];
+ // If no label array is specified, tick labels will be collected
+ // from the x values of the series. With sortMergedLabels
+ // set to true, tick labels will be:
+ // > [2006, 2007, 2008, 2009]
+ // With sortMergedLabels set to false, tick labels will be:
+ // > [2006, 2008, 2009, 2007]
+ //
+ // Note, this property is specified on the renderOptions for the
+ // axes when creating a plot:
+ // > axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer, rendererOptions:{sortMergedLabels:true}}}
+ this.sortMergedLabels = false;
+ };
+
+ $.jqplot.CategoryAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
+ $.jqplot.CategoryAxisRenderer.prototype.constructor = $.jqplot.CategoryAxisRenderer;
+
+ $.jqplot.CategoryAxisRenderer.prototype.init = function(options){
+ this.groups = 1;
+ this.groupLabels = [];
+ this._groupLabels = [];
+ this._grouped = false;
+ this._barsPerGroup = null;
+ this.reverse = false;
+ // prop: tickRenderer
+ // A class of a rendering engine for creating the ticks labels displayed on the plot,
+ // See <$.jqplot.AxisTickRenderer>.
+ // this.tickRenderer = $.jqplot.AxisTickRenderer;
+ // this.labelRenderer = $.jqplot.AxisLabelRenderer;
+ $.extend(true, this, {tickOptions:{formatString:'%d'}}, options);
+ var db = this._dataBounds;
+ // Go through all the series attached to this axis and find
+ // the min/max bounds for this axis.
+ for (var i=0; i<this._series.length; i++) {
+ var s = this._series[i];
+ if (s.groups) {
+ this.groups = s.groups;
+ }
+ var d = s.data;
+
+ for (var j=0; j<d.length; j++) {
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ if (d[j][0] < db.min || db.min == null) {
+ db.min = d[j][0];
+ }
+ if (d[j][0] > db.max || db.max == null) {
+ db.max = d[j][0];
+ }
+ }
+ else {
+ if (d[j][1] < db.min || db.min == null) {
+ db.min = d[j][1];
+ }
+ if (d[j][1] > db.max || db.max == null) {
+ db.max = d[j][1];
+ }
+ }
+ }
+ }
+
+ if (this.groupLabels.length) {
+ this.groups = this.groupLabels.length;
+ }
+ };
+
+
+ $.jqplot.CategoryAxisRenderer.prototype.createTicks = function() {
+ // we're are operating on an axis here
+ var ticks = this._ticks;
+ var userTicks = this.ticks;
+ var name = this.name;
+ // databounds were set on axis initialization.
+ var db = this._dataBounds;
+ var dim, interval;
+ var min, max;
+ var pos1, pos2;
+ var tt, i;
+
+ // if we already have ticks, use them.
+ if (userTicks.length) {
+ // adjust with blanks if we have groups
+ if (this.groups > 1 && !this._grouped) {
+ var l = userTicks.length;
+ var skip = parseInt(l/this.groups, 10);
+ var count = 0;
+ for (var i=skip; i<l; i+=skip) {
+ userTicks.splice(i+count, 0, ' ');
+ count++;
+ }
+ this._grouped = true;
+ }
+ this.min = 0.5;
+ this.max = userTicks.length + 0.5;
+ var range = this.max - this.min;
+ this.numberTicks = 2*userTicks.length + 1;
+ for (i=0; i<userTicks.length; i++){
+ tt = this.min + 2 * i * range / (this.numberTicks-1);
+ // need a marker before and after the tick
+ var t = new this.tickRenderer(this.tickOptions);
+ t.showLabel = false;
+ // t.showMark = true;
+ t.setTick(tt, this.name);
+ this._ticks.push(t);
+ var t = new this.tickRenderer(this.tickOptions);
+ t.label = userTicks[i];
+ // t.showLabel = true;
+ t.showMark = false;
+ t.showGridline = false;
+ t.setTick(tt+0.5, this.name);
+ this._ticks.push(t);
+ }
+ // now add the last tick at the end
+ var t = new this.tickRenderer(this.tickOptions);
+ t.showLabel = false;
+ // t.showMark = true;
+ t.setTick(tt+1, this.name);
+ this._ticks.push(t);
+ }
+
+ // we don't have any ticks yet, let's make some!
+ else {
+ if (name == 'xaxis' || name == 'x2axis') {
+ dim = this._plotDimensions.width;
+ }
+ else {
+ dim = this._plotDimensions.height;
+ }
+
+ // if min, max and number of ticks specified, user can't specify interval.
+ if (this.min != null && this.max != null && this.numberTicks != null) {
+ this.tickInterval = null;
+ }
+
+ // if max, min, and interval specified and interval won't fit, ignore interval.
+ if (this.min != null && this.max != null && this.tickInterval != null) {
+ if (parseInt((this.max-this.min)/this.tickInterval, 10) != (this.max-this.min)/this.tickInterval) {
+ this.tickInterval = null;
+ }
+ }
+
+ // find out how many categories are in the lines and collect labels
+ var labels = [];
+ var numcats = 0;
+ var min = 0.5;
+ var max, val;
+ var isMerged = false;
+ for (var i=0; i<this._series.length; i++) {
+ var s = this._series[i];
+ for (var j=0; j<s.data.length; j++) {
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ val = s.data[j][0];
+ }
+ else {
+ val = s.data[j][1];
+ }
+ if ($.inArray(val, labels) == -1) {
+ isMerged = true;
+ numcats += 1;
+ labels.push(val);
+ }
+ }
+ }
+
+ if (isMerged && this.sortMergedLabels) {
+ labels.sort(function(a,b) { return a - b; });
+ }
+
+ // keep a reference to these tick labels to use for redrawing plot (see bug #57)
+ this.ticks = labels;
+
+ // now bin the data values to the right lables.
+ for (var i=0; i<this._series.length; i++) {
+ var s = this._series[i];
+ for (var j=0; j<s.data.length; j++) {
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ val = s.data[j][0];
+ }
+ else {
+ val = s.data[j][1];
+ }
+ // for category axis, force the values into category bins.
+ // we should have the value in the label array now.
+ var idx = $.inArray(val, labels)+1;
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ s.data[j][0] = idx;
+ }
+ else {
+ s.data[j][1] = idx;
+ }
+ }
+ }
+
+ // adjust with blanks if we have groups
+ if (this.groups > 1 && !this._grouped) {
+ var l = labels.length;
+ var skip = parseInt(l/this.groups, 10);
+ var count = 0;
+ for (var i=skip; i<l; i+=skip+1) {
+ labels[i] = ' ';
+ }
+ this._grouped = true;
+ }
+
+ max = numcats + 0.5;
+ if (this.numberTicks == null) {
+ this.numberTicks = 2*numcats + 1;
+ }
+
+ var range = max - min;
+ this.min = min;
+ this.max = max;
+ var track = 0;
+
+ // todo: adjust this so more ticks displayed.
+ var maxVisibleTicks = parseInt(3+dim/10, 10);
+ var skip = parseInt(numcats/maxVisibleTicks, 10);
+
+ if (this.tickInterval == null) {
+
+ this.tickInterval = range / (this.numberTicks-1);
+
+ }
+ // if tickInterval is specified, we will ignore any computed maximum.
+ for (var i=0; i<this.numberTicks; i++){
+ tt = this.min + i * this.tickInterval;
+ var t = new this.tickRenderer(this.tickOptions);
+ // if even tick, it isn't a category, it's a divider
+ if (i/2 == parseInt(i/2, 10)) {
+ t.showLabel = false;
+ t.showMark = true;
+ }
+ else {
+ if (skip>0 && track<skip) {
+ t.showLabel = false;
+ track += 1;
+ }
+ else {
+ t.showLabel = true;
+ track = 0;
+ }
+ t.label = t.formatter(t.formatString, labels[(i-1)/2]);
+ t.showMark = false;
+ t.showGridline = false;
+ }
+ t.setTick(tt, this.name);
+ this._ticks.push(t);
+ }
+ }
+
+ };
+
+ // called with scope of axis
+ $.jqplot.CategoryAxisRenderer.prototype.draw = function(ctx, plot) {
+ if (this.show) {
+ // populate the axis label and value properties.
+ // createTicks is a method on the renderer, but
+ // call it within the scope of the axis.
+ this.renderer.createTicks.call(this);
+ // fill a div with axes labels in the right direction.
+ // Need to pregenerate each axis to get it's bounds and
+ // position it and the labels correctly on the plot.
+ var dim=0;
+ var temp;
+ // Added for theming.
+ if (this._elem) {
+ // this._elem.empty();
+ // Memory Leaks patch
+ this._elem.emptyForce();
+ }
+
+ this._elem = this._elem || $('<div class="jqplot-axis jqplot-'+this.name+'" style="position:absolute;"></div>');
+
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ this._elem.width(this._plotDimensions.width);
+ }
+ else {
+ this._elem.height(this._plotDimensions.height);
+ }
+
+ // create a _label object.
+ this.labelOptions.axis = this.name;
+ this._label = new this.labelRenderer(this.labelOptions);
+ if (this._label.show) {
+ var elem = this._label.draw(ctx, plot);
+ elem.appendTo(this._elem);
+ }
+
+ var t = this._ticks;
+ for (var i=0; i<t.length; i++) {
+ var tick = t[i];
+ if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
+ var elem = tick.draw(ctx, plot);
+ elem.appendTo(this._elem);
+ }
+ }
+
+ this._groupLabels = [];
+ // now make group labels
+ for (var i=0; i<this.groupLabels.length; i++)
+ {
+ var elem = $('<div style="position:absolute;" class="jqplot-'+this.name+'-groupLabel"></div>');
+ elem.html(this.groupLabels[i]);
+ this._groupLabels.push(elem);
+ elem.appendTo(this._elem);
+ }
+ }
+ return this._elem;
+ };
+
+ // called with scope of axis
+ $.jqplot.CategoryAxisRenderer.prototype.set = function() {
+ var dim = 0;
+ var temp;
+ var w = 0;
+ var h = 0;
+ var lshow = (this._label == null) ? false : this._label.show;
+ if (this.show) {
+ var t = this._ticks;
+ for (var i=0; i<t.length; i++) {
+ var tick = t[i];
+ if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ temp = tick._elem.outerHeight(true);
+ }
+ else {
+ temp = tick._elem.outerWidth(true);
+ }
+ if (temp > dim) {
+ dim = temp;
+ }
+ }
+ }
+
+ var dim2 = 0;
+ for (var i=0; i<this._groupLabels.length; i++) {
+ var l = this._groupLabels[i];
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ temp = l.outerHeight(true);
+ }
+ else {
+ temp = l.outerWidth(true);
+ }
+ if (temp > dim2) {
+ dim2 = temp;
+ }
+ }
+
+ if (lshow) {
+ w = this._label._elem.outerWidth(true);
+ h = this._label._elem.outerHeight(true);
+ }
+ if (this.name == 'xaxis') {
+ dim += dim2 + h;
+ this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'});
+ }
+ else if (this.name == 'x2axis') {
+ dim += dim2 + h;
+ this._elem.css({'height':dim+'px', left:'0px', top:'0px'});
+ }
+ else if (this.name == 'yaxis') {
+ dim += dim2 + w;
+ this._elem.css({'width':dim+'px', left:'0px', top:'0px'});
+ if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
+ this._label._elem.css('width', w+'px');
+ }
+ }
+ else {
+ dim += dim2 + w;
+ this._elem.css({'width':dim+'px', right:'0px', top:'0px'});
+ if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
+ this._label._elem.css('width', w+'px');
+ }
+ }
+ }
+ };
+
+ // called with scope of axis
+ $.jqplot.CategoryAxisRenderer.prototype.pack = function(pos, offsets) {
+ var ticks = this._ticks;
+ var max = this.max;
+ var min = this.min;
+ var offmax = offsets.max;
+ var offmin = offsets.min;
+ var lshow = (this._label == null) ? false : this._label.show;
+ var i;
+
+ for (var p in pos) {
+ this._elem.css(p, pos[p]);
+ }
+
+ this._offsets = offsets;
+ // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left.
+ var pixellength = offmax - offmin;
+ var unitlength = max - min;
+
+ if (!this.reverse) {
+ // point to unit and unit to point conversions references to Plot DOM element top left corner.
+
+ this.u2p = function(u){
+ return (u - min) * pixellength / unitlength + offmin;
+ };
+
+ this.p2u = function(p){
+ return (p - offmin) * unitlength / pixellength + min;
+ };
+
+ if (this.name == 'xaxis' || this.name == 'x2axis'){
+ this.series_u2p = function(u){
+ return (u - min) * pixellength / unitlength;
+ };
+ this.series_p2u = function(p){
+ return p * unitlength / pixellength + min;
+ };
+ }
+
+ else {
+ this.series_u2p = function(u){
+ return (u - max) * pixellength / unitlength;
+ };
+ this.series_p2u = function(p){
+ return p * unitlength / pixellength + max;
+ };
+ }
+ }
+
+ else {
+ // point to unit and unit to point conversions references to Plot DOM element top left corner.
+
+ this.u2p = function(u){
+ return offmin + (max - u) * pixellength / unitlength;
+ };
+
+ this.p2u = function(p){
+ return min + (p - offmin) * unitlength / pixellength;
+ };
+
+ if (this.name == 'xaxis' || this.name == 'x2axis'){
+ this.series_u2p = function(u){
+ return (max - u) * pixellength / unitlength;
+ };
+ this.series_p2u = function(p){
+ return p * unitlength / pixellength + max;
+ };
+ }
+
+ else {
+ this.series_u2p = function(u){
+ return (min - u) * pixellength / unitlength;
+ };
+ this.series_p2u = function(p){
+ return p * unitlength / pixellength + min;
+ };
+ }
+
+ }
+
+
+ if (this.show) {
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ for (i=0; i<ticks.length; i++) {
+ var t = ticks[i];
+ if (t.show && t.showLabel) {
+ var shim;
+
+ if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
+ // will need to adjust auto positioning based on which axis this is.
+ var temp = (this.name == 'xaxis') ? 1 : -1;
+ switch (t.labelPosition) {
+ case 'auto':
+ // position at end
+ if (temp * t.angle < 0) {
+ shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ }
+ // position at start
+ else {
+ shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
+ }
+ break;
+ case 'end':
+ shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ break;
+ case 'start':
+ shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
+ break;
+ case 'middle':
+ shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ break;
+ default:
+ shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ break;
+ }
+ }
+ else {
+ shim = -t.getWidth()/2;
+ }
+ var val = this.u2p(t.value) + shim + 'px';
+ t._elem.css('left', val);
+ t.pack();
+ }
+ }
+
+ var labeledge=['bottom', 0];
+ if (lshow) {
+ var w = this._label._elem.outerWidth(true);
+ this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px');
+ if (this.name == 'xaxis') {
+ this._label._elem.css('bottom', '0px');
+ labeledge = ['bottom', this._label._elem.outerHeight(true)];
+ }
+ else {
+ this._label._elem.css('top', '0px');
+ labeledge = ['top', this._label._elem.outerHeight(true)];
+ }
+ this._label.pack();
+ }
+
+ // draw the group labels
+ var step = parseInt(this._ticks.length/this.groups, 10);
+ for (i=0; i<this._groupLabels.length; i++) {
+ var mid = 0;
+ var count = 0;
+ for (var j=i*step; j<=(i+1)*step; j++) {
+ if (this._ticks[j]._elem && this._ticks[j].label != " ") {
+ var t = this._ticks[j]._elem;
+ var p = t.position();
+ mid += p.left + t.outerWidth(true)/2;
+ count++;
+ }
+ }
+ mid = mid/count;
+ this._groupLabels[i].css({'left':(mid - this._groupLabels[i].outerWidth(true)/2)});
+ this._groupLabels[i].css(labeledge[0], labeledge[1]);
+ }
+ }
+ else {
+ for (i=0; i<ticks.length; i++) {
+ var t = ticks[i];
+ if (t.show && t.showLabel) {
+ var shim;
+ if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
+ // will need to adjust auto positioning based on which axis this is.
+ var temp = (this.name == 'yaxis') ? 1 : -1;
+ switch (t.labelPosition) {
+ case 'auto':
+ // position at end
+ case 'end':
+ if (temp * t.angle < 0) {
+ shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
+ }
+ else {
+ shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
+ }
+ break;
+ case 'start':
+ if (t.angle > 0) {
+ shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
+ }
+ else {
+ shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
+ }
+ break;
+ case 'middle':
+ // if (t.angle > 0) {
+ // shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ // }
+ // else {
+ // shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
+ // }
+ shim = -t.getHeight()/2;
+ break;
+ default:
+ shim = -t.getHeight()/2;
+ break;
+ }
+ }
+ else {
+ shim = -t.getHeight()/2;
+ }
+
+ var val = this.u2p(t.value) + shim + 'px';
+ t._elem.css('top', val);
+ t.pack();
+ }
+ }
+
+ var labeledge=['left', 0];
+ if (lshow) {
+ var h = this._label._elem.outerHeight(true);
+ this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px');
+ if (this.name == 'yaxis') {
+ this._label._elem.css('left', '0px');
+ labeledge = ['left', this._label._elem.outerWidth(true)];
+ }
+ else {
+ this._label._elem.css('right', '0px');
+ labeledge = ['right', this._label._elem.outerWidth(true)];
+ }
+ this._label.pack();
+ }
+
+ // draw the group labels, position top here, do left after label position.
+ var step = parseInt(this._ticks.length/this.groups, 10);
+ for (i=0; i<this._groupLabels.length; i++) {
+ var mid = 0;
+ var count = 0;
+ for (var j=i*step; j<=(i+1)*step; j++) {
+ if (this._ticks[j]._elem && this._ticks[j].label != " ") {
+ var t = this._ticks[j]._elem;
+ var p = t.position();
+ mid += p.top + t.outerHeight()/2;
+ count++;
+ }
+ }
+ mid = mid/count;
+ this._groupLabels[i].css({'top':mid - this._groupLabels[i].outerHeight()/2});
+ this._groupLabels[i].css(labeledge[0], labeledge[1]);
+
+ }
+ }
+ }
+ };
+
+
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.min.js
new file mode 100644
index 00000000..f3d7ee1f
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(a){a.jqplot.CategoryAxisRenderer=function(b){a.jqplot.LinearAxisRenderer.call(this);this.sortMergedLabels=false};a.jqplot.CategoryAxisRenderer.prototype=new a.jqplot.LinearAxisRenderer();a.jqplot.CategoryAxisRenderer.prototype.constructor=a.jqplot.CategoryAxisRenderer;a.jqplot.CategoryAxisRenderer.prototype.init=function(e){this.groups=1;this.groupLabels=[];this._groupLabels=[];this._grouped=false;this._barsPerGroup=null;this.reverse=false;a.extend(true,this,{tickOptions:{formatString:"%d"}},e);var b=this._dataBounds;for(var f=0;f<this._series.length;f++){var g=this._series[f];if(g.groups){this.groups=g.groups}var h=g.data;for(var c=0;c<h.length;c++){if(this.name=="xaxis"||this.name=="x2axis"){if(h[c][0]<b.min||b.min==null){b.min=h[c][0]}if(h[c][0]>b.max||b.max==null){b.max=h[c][0]}}else{if(h[c][1]<b.min||b.min==null){b.min=h[c][1]}if(h[c][1]>b.max||b.max==null){b.max=h[c][1]}}}}if(this.groupLabels.length){this.groups=this.groupLabels.length}};a.jqplot.CategoryAxisRenderer.prototype.createTicks=function(){var D=this._ticks;var z=this.ticks;var F=this.name;var C=this._dataBounds;var v,A;var q,w;var d,c;var b,x;if(z.length){if(this.groups>1&&!this._grouped){var r=z.length;var p=parseInt(r/this.groups,10);var e=0;for(var x=p;x<r;x+=p){z.splice(x+e,0," ");e++}this._grouped=true}this.min=0.5;this.max=z.length+0.5;var m=this.max-this.min;this.numberTicks=2*z.length+1;for(x=0;x<z.length;x++){b=this.min+2*x*m/(this.numberTicks-1);var h=new this.tickRenderer(this.tickOptions);h.showLabel=false;h.setTick(b,this.name);this._ticks.push(h);var h=new this.tickRenderer(this.tickOptions);h.label=z[x];h.showMark=false;h.showGridline=false;h.setTick(b+0.5,this.name);this._ticks.push(h)}var h=new this.tickRenderer(this.tickOptions);h.showLabel=false;h.setTick(b+1,this.name);this._ticks.push(h)}else{if(F=="xaxis"||F=="x2axis"){v=this._plotDimensions.width}else{v=this._plotDimensions.height}if(this.min!=null&&this.max!=null&&this.numberTicks!=null){this.tickInterval=null}if(this.min!=null&&this.max!=null&&this.tickInterval!=null){if(parseInt((this.max-this.min)/this.tickInterval,10)!=(this.max-this.min)/this.tickInterval){this.tickInterval=null}}var y=[];var B=0;var q=0.5;var w,E;var f=false;for(var x=0;x<this._series.length;x++){var k=this._series[x];for(var u=0;u<k.data.length;u++){if(this.name=="xaxis"||this.name=="x2axis"){E=k.data[u][0]}else{E=k.data[u][1]}if(a.inArray(E,y)==-1){f=true;B+=1;y.push(E)}}}if(f&&this.sortMergedLabels){y.sort(function(j,i){return j-i})}this.ticks=y;for(var x=0;x<this._series.length;x++){var k=this._series[x];for(var u=0;u<k.data.length;u++){if(this.name=="xaxis"||this.name=="x2axis"){E=k.data[u][0]}else{E=k.data[u][1]}var n=a.inArray(E,y)+1;if(this.name=="xaxis"||this.name=="x2axis"){k.data[u][0]=n}else{k.data[u][1]=n}}}if(this.groups>1&&!this._grouped){var r=y.length;var p=parseInt(r/this.groups,10);var e=0;for(var x=p;x<r;x+=p+1){y[x]=" "}this._grouped=true}w=B+0.5;if(this.numberTicks==null){this.numberTicks=2*B+1}var m=w-q;this.min=q;this.max=w;var o=0;var g=parseInt(3+v/10,10);var p=parseInt(B/g,10);if(this.tickInterval==null){this.tickInterval=m/(this.numberTicks-1)}for(var x=0;x<this.numberTicks;x++){b=this.min+x*this.tickInterval;var h=new this.tickRenderer(this.tickOptions);if(x/2==parseInt(x/2,10)){h.showLabel=false;h.showMark=true}else{if(p>0&&o<p){h.showLabel=false;o+=1}else{h.showLabel=true;o=0}h.label=h.formatter(h.formatString,y[(x-1)/2]);h.showMark=false;h.showGridline=false}h.setTick(b,this.name);this._ticks.push(h)}}};a.jqplot.CategoryAxisRenderer.prototype.draw=function(b,j){if(this.show){this.renderer.createTicks.call(this);var h=0;var c;if(this._elem){this._elem.emptyForce()}this._elem=this._elem||a('<div class="jqplot-axis jqplot-'+this.name+'" style="position:absolute;"></div>');if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var g=this._label.draw(b,j);g.appendTo(this._elem)}var f=this._ticks;for(var e=0;e<f.length;e++){var d=f[e];if(d.showLabel&&(!d.isMinorTick||this.showMinorTicks)){var g=d.draw(b,j);g.appendTo(this._elem)}}this._groupLabels=[];for(var e=0;e<this.groupLabels.length;e++){var g=a('<div style="position:absolute;" class="jqplot-'+this.name+'-groupLabel"></div>');g.html(this.groupLabels[e]);this._groupLabels.push(g);g.appendTo(this._elem)}}return this._elem};a.jqplot.CategoryAxisRenderer.prototype.set=function(){var e=0;var m;var k=0;var f=0;var d=(this._label==null)?false:this._label.show;if(this.show){var n=this._ticks;for(var c=0;c<n.length;c++){var g=n[c];if(g.showLabel&&(!g.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){m=g._elem.outerHeight(true)}else{m=g._elem.outerWidth(true)}if(m>e){e=m}}}var j=0;for(var c=0;c<this._groupLabels.length;c++){var b=this._groupLabels[c];if(this.name=="xaxis"||this.name=="x2axis"){m=b.outerHeight(true)}else{m=b.outerWidth(true)}if(m>j){j=m}}if(d){k=this._label._elem.outerWidth(true);f=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){e+=j+f;this._elem.css({height:e+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){e+=j+f;this._elem.css({height:e+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){e+=j+k;this._elem.css({width:e+"px",left:"0px",top:"0px"});if(d&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",k+"px")}}else{e+=j+k;this._elem.css({width:e+"px",right:"0px",top:"0px"});if(d&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",k+"px")}}}}}};a.jqplot.CategoryAxisRenderer.prototype.pack=function(e,c){var C=this._ticks;var v=this.max;var s=this.min;var n=c.max;var l=c.min;var q=(this._label==null)?false:this._label.show;var x;for(var r in e){this._elem.css(r,e[r])}this._offsets=c;var g=n-l;var k=v-s;if(!this.reverse){this.u2p=function(h){return(h-s)*g/k+l};this.p2u=function(h){return(h-l)*k/g+s};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(h){return(h-s)*g/k};this.series_p2u=function(h){return h*k/g+s}}else{this.series_u2p=function(h){return(h-v)*g/k};this.series_p2u=function(h){return h*k/g+v}}}else{this.u2p=function(h){return l+(v-h)*g/k};this.p2u=function(h){return s+(h-l)*k/g};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(h){return(v-h)*g/k};this.series_p2u=function(h){return h*k/g+v}}else{this.series_u2p=function(h){return(s-h)*g/k};this.series_p2u=function(h){return h*k/g+s}}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(x=0;x<C.length;x++){var o=C[x];if(o.show&&o.showLabel){var b;if(o.constructor==a.jqplot.CanvasAxisTickRenderer&&o.angle){var A=(this.name=="xaxis")?1:-1;switch(o.labelPosition){case"auto":if(A*o.angle<0){b=-o.getWidth()+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2}else{b=-o._textRenderer.height*Math.sin(o._textRenderer.angle)/2}break;case"end":b=-o.getWidth()+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2;break;case"start":b=-o._textRenderer.height*Math.sin(o._textRenderer.angle)/2;break;case"middle":b=-o.getWidth()/2+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2;break;default:b=-o.getWidth()/2+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2;break}}else{b=-o.getWidth()/2}var D=this.u2p(o.value)+b+"px";o._elem.css("left",D);o.pack()}}var z=["bottom",0];if(q){var m=this._label._elem.outerWidth(true);this._label._elem.css("left",l+g/2-m/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px");z=["bottom",this._label._elem.outerHeight(true)]}else{this._label._elem.css("top","0px");z=["top",this._label._elem.outerHeight(true)]}this._label.pack()}var d=parseInt(this._ticks.length/this.groups,10);for(x=0;x<this._groupLabels.length;x++){var B=0;var f=0;for(var u=x*d;u<=(x+1)*d;u++){if(this._ticks[u]._elem&&this._ticks[u].label!=" "){var o=this._ticks[u]._elem;var r=o.position();B+=r.left+o.outerWidth(true)/2;f++}}B=B/f;this._groupLabels[x].css({left:(B-this._groupLabels[x].outerWidth(true)/2)});this._groupLabels[x].css(z[0],z[1])}}else{for(x=0;x<C.length;x++){var o=C[x];if(o.show&&o.showLabel){var b;if(o.constructor==a.jqplot.CanvasAxisTickRenderer&&o.angle){var A=(this.name=="yaxis")?1:-1;switch(o.labelPosition){case"auto":case"end":if(A*o.angle<0){b=-o._textRenderer.height*Math.cos(-o._textRenderer.angle)/2}else{b=-o.getHeight()+o._textRenderer.height*Math.cos(o._textRenderer.angle)/2}break;case"start":if(o.angle>0){b=-o._textRenderer.height*Math.cos(-o._textRenderer.angle)/2}else{b=-o.getHeight()+o._textRenderer.height*Math.cos(o._textRenderer.angle)/2}break;case"middle":b=-o.getHeight()/2;break;default:b=-o.getHeight()/2;break}}else{b=-o.getHeight()/2}var D=this.u2p(o.value)+b+"px";o._elem.css("top",D);o.pack()}}var z=["left",0];if(q){var y=this._label._elem.outerHeight(true);this._label._elem.css("top",n-g/2-y/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px");z=["left",this._label._elem.outerWidth(true)]}else{this._label._elem.css("right","0px");z=["right",this._label._elem.outerWidth(true)]}this._label.pack()}var d=parseInt(this._ticks.length/this.groups,10);for(x=0;x<this._groupLabels.length;x++){var B=0;var f=0;for(var u=x*d;u<=(x+1)*d;u++){if(this._ticks[u]._elem&&this._ticks[u].label!=" "){var o=this._ticks[u]._elem;var r=o.position();B+=r.top+o.outerHeight()/2;f++}}B=B/f;this._groupLabels[x].css({top:B-this._groupLabels[x].outerHeight()/2});this._groupLabels[x].css(z[0],z[1])}}}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.js
new file mode 100644
index 00000000..22401dc7
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.js
@@ -0,0 +1,116 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ /**
+ * Class: $.jqplot.ciParser
+ * Data Renderer function which converts a custom JSON data object into jqPlot data format.
+ * Set this as a callable on the jqplot dataRenderer plot option:
+ *
+ * > plot = $.jqplot('mychart', [data], { dataRenderer: $.jqplot.ciParser, ... });
+ *
+ * Where data is an object in JSON format or a JSON encoded string conforming to the
+ * City Index API spec.
+ *
+ * Note that calling the renderer function is handled internally by jqPlot. The
+ * user does not have to call the function. The parameters described below will
+ * automatically be passed to the ciParser function.
+ *
+ * Parameters:
+ * data - JSON encoded string or object.
+ * plot - reference to jqPlot Plot object.
+ *
+ * Returns:
+ * data array in jqPlot format.
+ *
+ */
+ $.jqplot.ciParser = function (data, plot) {
+ var ret = [],
+ line,
+ temp,
+ i, j, k, kk;
+
+ if (typeof(data) == "string") {
+ data = $.jqplot.JSON.parse(data, handleStrings);
+ }
+
+ else if (typeof(data) == "object") {
+ for (k in data) {
+ for (i=0; i<data[k].length; i++) {
+ for (kk in data[k][i]) {
+ data[k][i][kk] = handleStrings(kk, data[k][i][kk]);
+ }
+ }
+ }
+ }
+
+ else {
+ return null;
+ }
+
+ // function handleStrings
+ // Checks any JSON encoded strings to see if they are
+ // encoded dates. If so, pull out the timestamp.
+ // Expects dates to be represented by js timestamps.
+
+ function handleStrings(key, value) {
+ var a;
+ if (value != null) {
+ if (value.toString().indexOf('Date') >= 0) {
+ //here we will try to extract the ticks from the Date string in the "value" fields of JSON returned data
+ a = /^\/Date\((-?[0-9]+)\)\/$/.exec(value);
+ if (a) {
+ return parseInt(a[1], 10);
+ }
+ }
+ return value;
+ }
+ }
+
+ for (var prop in data) {
+ line = [];
+ temp = data[prop];
+ switch (prop) {
+ case "PriceTicks":
+ for (i=0; i<temp.length; i++) {
+ line.push([temp[i]['TickDate'], temp[i]['Price']]);
+ }
+ break;
+ case "PriceBars":
+ for (i=0; i<temp.length; i++) {
+ line.push([temp[i]['BarDate'], temp[i]['Open'], temp[i]['High'], temp[i]['Low'], temp[i]['Close']]);
+ }
+ break;
+ }
+ ret.push(line);
+ }
+ return ret;
+ };
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.min.js
new file mode 100644
index 00000000..165d4b5c
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(a){a.jqplot.ciParser=function(g,l){var m=[],o,n,h,f,e,c;if(typeof(g)=="string"){g=a.jqplot.JSON.parse(g,d)}else{if(typeof(g)=="object"){for(e in g){for(h=0;h<g[e].length;h++){for(c in g[e][h]){g[e][h][c]=d(c,g[e][h][c])}}}}else{return null}}function d(j,k){var i;if(k!=null){if(k.toString().indexOf("Date")>=0){i=/^\/Date\((-?[0-9]+)\)\/$/.exec(k);if(i){return parseInt(i[1],10)}}return k}}for(var b in g){o=[];n=g[b];switch(b){case"PriceTicks":for(h=0;h<n.length;h++){o.push([n[h]["TickDate"],n[h]["Price"]])}break;case"PriceBars":for(h=0;h<n.length;h++){o.push([n[h]["BarDate"],n[h]["Open"],n[h]["High"],n[h]["Low"],n[h]["Close"]])}break}m.push(o)}return m}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.js
new file mode 100644
index 00000000..0e583682
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.js
@@ -0,0 +1,1108 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+
+ /**
+ * Class: $.jqplot.Cursor
+ * Plugin class representing the cursor as displayed on the plot.
+ */
+ $.jqplot.Cursor = function(options) {
+ // Group: Properties
+ //
+ // prop: style
+ // CSS spec for cursor style
+ this.style = 'crosshair';
+ this.previousCursor = 'auto';
+ // prop: show
+ // wether to show the cursor or not.
+ this.show = $.jqplot.config.enablePlugins;
+ // prop: showTooltip
+ // show a cursor position tooltip. Location of the tooltip
+ // will be controlled by followMouse and tooltipLocation.
+ this.showTooltip = true;
+ // prop: followMouse
+ // Tooltip follows the mouse, it is not at a fixed location.
+ // Tooltip will show on the grid at the location given by
+ // tooltipLocation, offset from the grid edge by tooltipOffset.
+ this.followMouse = false;
+ // prop: tooltipLocation
+ // Where to position tooltip. If followMouse is true, this is
+ // relative to the cursor, otherwise, it is relative to the grid.
+ // One of 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'
+ this.tooltipLocation = 'se';
+ // prop: tooltipOffset
+ // Pixel offset of tooltip from the grid boudaries or cursor center.
+ this.tooltipOffset = 6;
+ // prop: showTooltipGridPosition
+ // show the grid pixel coordinates of the mouse.
+ this.showTooltipGridPosition = false;
+ // prop: showTooltipUnitPosition
+ // show the unit (data) coordinates of the mouse.
+ this.showTooltipUnitPosition = true;
+ // prop: showTooltipDataPosition
+ // Used with showVerticalLine to show intersecting data points in the tooltip.
+ this.showTooltipDataPosition = false;
+ // prop: tooltipFormatString
+ // sprintf format string for the tooltip.
+ // Uses Ash Searle's javascript sprintf implementation
+ // found here: http://hexmen.com/blog/2007/03/printf-sprintf/
+ // See http://perldoc.perl.org/functions/sprintf.html for reference
+ // Note, if showTooltipDataPosition is true, the default tooltipFormatString
+ // will be set to the cursorLegendFormatString, not the default given here.
+ this.tooltipFormatString = '%.4P, %.4P';
+ // prop: useAxesFormatters
+ // Use the x and y axes formatters to format the text in the tooltip.
+ this.useAxesFormatters = true;
+ // prop: tooltipAxisGroups
+ // Show position for the specified axes.
+ // This is an array like [['xaxis', 'yaxis'], ['xaxis', 'y2axis']]
+ // Default is to compute automatically for all visible axes.
+ this.tooltipAxisGroups = [];
+ // prop: zoom
+ // Enable plot zooming.
+ this.zoom = false;
+ // zoomProxy and zoomTarget properties are not directly set by user.
+ // They Will be set through call to zoomProxy method.
+ this.zoomProxy = false;
+ this.zoomTarget = false;
+ // prop: looseZoom
+ // Will expand zoom range to provide more rounded tick values.
+ // Works only with linear, log and date axes.
+ this.looseZoom = true;
+ // prop: clickReset
+ // Will reset plot zoom if single click on plot without drag.
+ this.clickReset = false;
+ // prop: dblClickReset
+ // Will reset plot zoom if double click on plot without drag.
+ this.dblClickReset = true;
+ // prop: showVerticalLine
+ // draw a vertical line across the plot which follows the cursor.
+ // When the line is near a data point, a special legend and/or tooltip can
+ // be updated with the data values.
+ this.showVerticalLine = false;
+ // prop: showHorizontalLine
+ // draw a horizontal line across the plot which follows the cursor.
+ this.showHorizontalLine = false;
+ // prop: constrainZoomTo
+ // 'none', 'x' or 'y'
+ this.constrainZoomTo = 'none';
+ // // prop: autoscaleConstraint
+ // // when a constrained axis is specified, true will
+ // // auatoscale the adjacent axis.
+ // this.autoscaleConstraint = true;
+ this.shapeRenderer = new $.jqplot.ShapeRenderer();
+ this._zoom = {start:[], end:[], started: false, zooming:false, isZoomed:false, axes:{start:{}, end:{}}, gridpos:{}, datapos:{}};
+ this._tooltipElem;
+ this.zoomCanvas;
+ this.cursorCanvas;
+ // prop: intersectionThreshold
+ // pixel distance from data point or marker to consider cursor lines intersecting with point.
+ // If data point markers are not shown, this should be >= 1 or will often miss point intersections.
+ this.intersectionThreshold = 2;
+ // prop: showCursorLegend
+ // Replace the plot legend with an enhanced legend displaying intersection information.
+ this.showCursorLegend = false;
+ // prop: cursorLegendFormatString
+ // Format string used in the cursor legend. If showTooltipDataPosition is true,
+ // this will also be the default format string used by tooltipFormatString.
+ this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString;
+ // whether the cursor is over the grid or not.
+ this._oldHandlers = {onselectstart: null, ondrag: null, onmousedown: null};
+ // prop: constrainOutsideZoom
+ // True to limit actual zoom area to edges of grid, even when zooming
+ // outside of plot area. That is, can't zoom out by mousing outside plot.
+ this.constrainOutsideZoom = true;
+ // prop: showTooltipOutsideZoom
+ // True will keep updating the tooltip when zooming of the grid.
+ this.showTooltipOutsideZoom = false;
+ // true if mouse is over grid, false if not.
+ this.onGrid = false;
+ $.extend(true, this, options);
+ };
+
+ $.jqplot.Cursor.cursorLegendFormatString = '%s x:%s, y:%s';
+
+ // called with scope of plot
+ $.jqplot.Cursor.init = function (target, data, opts){
+ // add a cursor attribute to the plot
+ var options = opts || {};
+ this.plugins.cursor = new $.jqplot.Cursor(options.cursor);
+ var c = this.plugins.cursor;
+
+ if (c.show) {
+ $.jqplot.eventListenerHooks.push(['jqplotMouseEnter', handleMouseEnter]);
+ $.jqplot.eventListenerHooks.push(['jqplotMouseLeave', handleMouseLeave]);
+ $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMouseMove]);
+
+ if (c.showCursorLegend) {
+ opts.legend = opts.legend || {};
+ opts.legend.renderer = $.jqplot.CursorLegendRenderer;
+ opts.legend.formatString = this.plugins.cursor.cursorLegendFormatString;
+ opts.legend.show = true;
+ }
+
+ if (c.zoom) {
+ $.jqplot.eventListenerHooks.push(['jqplotMouseDown', handleMouseDown]);
+
+ if (c.clickReset) {
+ $.jqplot.eventListenerHooks.push(['jqplotClick', handleClick]);
+ }
+
+ if (c.dblClickReset) {
+ $.jqplot.eventListenerHooks.push(['jqplotDblClick', handleDblClick]);
+ }
+ }
+
+ this.resetZoom = function() {
+ var axes = this.axes;
+ if (!c.zoomProxy) {
+ for (var ax in axes) {
+ axes[ax].reset();
+ axes[ax]._ticks = [];
+ // fake out tick creation algorithm to make sure original auto
+ // computed format string is used if _overrideFormatString is true
+ if (c._zoom.axes[ax] !== undefined) {
+ axes[ax]._autoFormatString = c._zoom.axes[ax].tickFormatString;
+ }
+ }
+ this.redraw();
+ }
+ else {
+ var ctx = this.plugins.cursor.zoomCanvas._ctx;
+ ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
+ ctx = null;
+ }
+ this.plugins.cursor._zoom.isZoomed = false;
+ this.target.trigger('jqplotResetZoom', [this, this.plugins.cursor]);
+ };
+
+
+ if (c.showTooltipDataPosition) {
+ c.showTooltipUnitPosition = false;
+ c.showTooltipGridPosition = false;
+ if (options.cursor.tooltipFormatString == undefined) {
+ c.tooltipFormatString = $.jqplot.Cursor.cursorLegendFormatString;
+ }
+ }
+ }
+ };
+
+ // called with context of plot
+ $.jqplot.Cursor.postDraw = function() {
+ var c = this.plugins.cursor;
+
+ // Memory Leaks patch
+ if (c.zoomCanvas) {
+ c.zoomCanvas.resetCanvas();
+ c.zoomCanvas = null;
+ }
+
+ if (c.cursorCanvas) {
+ c.cursorCanvas.resetCanvas();
+ c.cursorCanvas = null;
+ }
+
+ if (c._tooltipElem) {
+ c._tooltipElem.emptyForce();
+ c._tooltipElem = null;
+ }
+
+
+ if (c.zoom) {
+ c.zoomCanvas = new $.jqplot.GenericCanvas();
+ this.eventCanvas._elem.before(c.zoomCanvas.createElement(this._gridPadding, 'jqplot-zoom-canvas', this._plotDimensions, this));
+ c.zoomCanvas.setContext();
+ }
+
+ var elem = document.createElement('div');
+ c._tooltipElem = $(elem);
+ elem = null;
+ c._tooltipElem.addClass('jqplot-cursor-tooltip');
+ c._tooltipElem.css({position:'absolute', display:'none'});
+
+
+ if (c.zoomCanvas) {
+ c.zoomCanvas._elem.before(c._tooltipElem);
+ }
+
+ else {
+ this.eventCanvas._elem.before(c._tooltipElem);
+ }
+
+ if (c.showVerticalLine || c.showHorizontalLine) {
+ c.cursorCanvas = new $.jqplot.GenericCanvas();
+ this.eventCanvas._elem.before(c.cursorCanvas.createElement(this._gridPadding, 'jqplot-cursor-canvas', this._plotDimensions, this));
+ c.cursorCanvas.setContext();
+ }
+
+ // if we are showing the positions in unit coordinates, and no axes groups
+ // were specified, create a default set.
+ if (c.showTooltipUnitPosition){
+ if (c.tooltipAxisGroups.length === 0) {
+ var series = this.series;
+ var s;
+ var temp = [];
+ for (var i=0; i<series.length; i++) {
+ s = series[i];
+ var ax = s.xaxis+','+s.yaxis;
+ if ($.inArray(ax, temp) == -1) {
+ temp.push(ax);
+ }
+ }
+ for (var i=0; i<temp.length; i++) {
+ c.tooltipAxisGroups.push(temp[i].split(','));
+ }
+ }
+ }
+ };
+
+ // Group: methods
+ //
+ // method: $.jqplot.Cursor.zoomProxy
+ // links targetPlot to controllerPlot so that plot zooming of
+ // targetPlot will be controlled by zooming on the controllerPlot.
+ // controllerPlot will not actually zoom, but acts as an
+ // overview plot. Note, the zoom options must be set to true for
+ // zoomProxy to work.
+ $.jqplot.Cursor.zoomProxy = function(targetPlot, controllerPlot) {
+ var tc = targetPlot.plugins.cursor;
+ var cc = controllerPlot.plugins.cursor;
+ tc.zoomTarget = true;
+ tc.zoom = true;
+ tc.style = 'auto';
+ tc.dblClickReset = false;
+ cc.zoom = true;
+ cc.zoomProxy = true;
+
+ controllerPlot.target.bind('jqplotZoom', plotZoom);
+ controllerPlot.target.bind('jqplotResetZoom', plotReset);
+
+ function plotZoom(ev, gridpos, datapos, plot, cursor) {
+ tc.doZoom(gridpos, datapos, targetPlot, cursor);
+ }
+
+ function plotReset(ev, plot, cursor) {
+ targetPlot.resetZoom();
+ }
+ };
+
+ $.jqplot.Cursor.prototype.resetZoom = function(plot, cursor) {
+ var axes = plot.axes;
+ var cax = cursor._zoom.axes;
+ if (!plot.plugins.cursor.zoomProxy && cursor._zoom.isZoomed) {
+ for (var ax in axes) {
+ // axes[ax]._ticks = [];
+ // axes[ax].min = cax[ax].min;
+ // axes[ax].max = cax[ax].max;
+ // axes[ax].numberTicks = cax[ax].numberTicks;
+ // axes[ax].tickInterval = cax[ax].tickInterval;
+ // // for date axes
+ // axes[ax].daTickInterval = cax[ax].daTickInterval;
+ axes[ax].reset();
+ axes[ax]._ticks = [];
+ // fake out tick creation algorithm to make sure original auto
+ // computed format string is used if _overrideFormatString is true
+ axes[ax]._autoFormatString = cax[ax].tickFormatString;
+ }
+ plot.redraw();
+ cursor._zoom.isZoomed = false;
+ }
+ else {
+ var ctx = cursor.zoomCanvas._ctx;
+ ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
+ ctx = null;
+ }
+ plot.target.trigger('jqplotResetZoom', [plot, cursor]);
+ };
+
+ $.jqplot.Cursor.resetZoom = function(plot) {
+ plot.resetZoom();
+ };
+
+ $.jqplot.Cursor.prototype.doZoom = function (gridpos, datapos, plot, cursor) {
+ var c = cursor;
+ var axes = plot.axes;
+ var zaxes = c._zoom.axes;
+ var start = zaxes.start;
+ var end = zaxes.end;
+ var min, max, dp, span,
+ newmin, newmax, curax, _numberTicks, ret;
+ var ctx = plot.plugins.cursor.zoomCanvas._ctx;
+ // don't zoom if zoom area is too small (in pixels)
+ if ((c.constrainZoomTo == 'none' && Math.abs(gridpos.x - c._zoom.start[0]) > 6 && Math.abs(gridpos.y - c._zoom.start[1]) > 6) || (c.constrainZoomTo == 'x' && Math.abs(gridpos.x - c._zoom.start[0]) > 6) || (c.constrainZoomTo == 'y' && Math.abs(gridpos.y - c._zoom.start[1]) > 6)) {
+ if (!plot.plugins.cursor.zoomProxy) {
+ for (var ax in datapos) {
+ // make a copy of the original axes to revert back.
+ if (c._zoom.axes[ax] == undefined) {
+ c._zoom.axes[ax] = {};
+ c._zoom.axes[ax].numberTicks = axes[ax].numberTicks;
+ c._zoom.axes[ax].tickInterval = axes[ax].tickInterval;
+ // for date axes...
+ c._zoom.axes[ax].daTickInterval = axes[ax].daTickInterval;
+ c._zoom.axes[ax].min = axes[ax].min;
+ c._zoom.axes[ax].max = axes[ax].max;
+ c._zoom.axes[ax].tickFormatString = (axes[ax].tickOptions != null) ? axes[ax].tickOptions.formatString : '';
+ }
+
+
+ if ((c.constrainZoomTo == 'none') || (c.constrainZoomTo == 'x' && ax.charAt(0) == 'x') || (c.constrainZoomTo == 'y' && ax.charAt(0) == 'y')) {
+ dp = datapos[ax];
+ if (dp != null) {
+ if (dp > start[ax]) {
+ newmin = start[ax];
+ newmax = dp;
+ }
+ else {
+ span = start[ax] - dp;
+ newmin = dp;
+ newmax = start[ax];
+ }
+
+ curax = axes[ax];
+
+ _numberTicks = null;
+
+ // if aligning this axis, use number of ticks from previous axis.
+ // Do I need to reset somehow if alignTicks is changed and then graph is replotted??
+ if (curax.alignTicks) {
+ if (curax.name === 'x2axis' && plot.axes.xaxis.show) {
+ _numberTicks = plot.axes.xaxis.numberTicks;
+ }
+ else if (curax.name.charAt(0) === 'y' && curax.name !== 'yaxis' && curax.name !== 'yMidAxis' && plot.axes.yaxis.show) {
+ _numberTicks = plot.axes.yaxis.numberTicks;
+ }
+ }
+
+ if (this.looseZoom && (axes[ax].renderer.constructor === $.jqplot.LinearAxisRenderer || axes[ax].renderer.constructor === $.jqplot.LogAxisRenderer )) { //} || axes[ax].renderer.constructor === $.jqplot.DateAxisRenderer)) {
+
+ ret = $.jqplot.LinearTickGenerator(newmin, newmax, curax._scalefact, _numberTicks);
+
+ // if new minimum is less than "true" minimum of axis display, adjust it
+ if (axes[ax].tickInset && ret[0] < axes[ax].min + axes[ax].tickInset * axes[ax].tickInterval) {
+ ret[0] += ret[4];
+ ret[2] -= 1;
+ }
+
+ // if new maximum is greater than "true" max of axis display, adjust it
+ if (axes[ax].tickInset && ret[1] > axes[ax].max - axes[ax].tickInset * axes[ax].tickInterval) {
+ ret[1] -= ret[4];
+ ret[2] -= 1;
+ }
+
+ // for log axes, don't fall below current minimum, this will look bad and can't have 0 in range anyway.
+ if (axes[ax].renderer.constructor === $.jqplot.LogAxisRenderer && ret[0] < axes[ax].min) {
+ // remove a tick and shift min up
+ ret[0] += ret[4];
+ ret[2] -= 1;
+ }
+
+ axes[ax].min = ret[0];
+ axes[ax].max = ret[1];
+ axes[ax]._autoFormatString = ret[3];
+ axes[ax].numberTicks = ret[2];
+ axes[ax].tickInterval = ret[4];
+ // for date axes...
+ axes[ax].daTickInterval = [ret[4]/1000, 'seconds'];
+ }
+ else {
+ axes[ax].min = newmin;
+ axes[ax].max = newmax;
+ axes[ax].tickInterval = null;
+ axes[ax].numberTicks = null;
+ // for date axes...
+ axes[ax].daTickInterval = null;
+ }
+
+ axes[ax]._ticks = [];
+ }
+ }
+
+ // if ((c.constrainZoomTo == 'x' && ax.charAt(0) == 'y' && c.autoscaleConstraint) || (c.constrainZoomTo == 'y' && ax.charAt(0) == 'x' && c.autoscaleConstraint)) {
+ // dp = datapos[ax];
+ // if (dp != null) {
+ // axes[ax].max == null;
+ // axes[ax].min = null;
+ // }
+ // }
+ }
+ ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
+ plot.redraw();
+ c._zoom.isZoomed = true;
+ ctx = null;
+ }
+ plot.target.trigger('jqplotZoom', [gridpos, datapos, plot, cursor]);
+ }
+ };
+
+ $.jqplot.preInitHooks.push($.jqplot.Cursor.init);
+ $.jqplot.postDrawHooks.push($.jqplot.Cursor.postDraw);
+
+ function updateTooltip(gridpos, datapos, plot) {
+ var c = plot.plugins.cursor;
+ var s = '';
+ var addbr = false;
+ if (c.showTooltipGridPosition) {
+ s = gridpos.x+', '+gridpos.y;
+ addbr = true;
+ }
+ if (c.showTooltipUnitPosition) {
+ var g;
+ for (var i=0; i<c.tooltipAxisGroups.length; i++) {
+ g = c.tooltipAxisGroups[i];
+ if (addbr) {
+ s += '<br />';
+ }
+ if (c.useAxesFormatters) {
+ for (var j=0; j<g.length; j++) {
+ if (j) {
+ s += ', ';
+ }
+ var af = plot.axes[g[j]]._ticks[0].formatter;
+ var afstr = plot.axes[g[j]]._ticks[0].formatString;
+ s += af(afstr, datapos[g[j]]);
+ }
+ }
+ else {
+ s += $.jqplot.sprintf(c.tooltipFormatString, datapos[g[0]], datapos[g[1]]);
+ }
+ addbr = true;
+ }
+ }
+
+ if (c.showTooltipDataPosition) {
+ var series = plot.series;
+ var ret = getIntersectingPoints(plot, gridpos.x, gridpos.y);
+ var addbr = false;
+
+ for (var i = 0; i< series.length; i++) {
+ if (series[i].show) {
+ var idx = series[i].index;
+ var label = series[i].label.toString();
+ var cellid = $.inArray(idx, ret.indices);
+ var sx = undefined;
+ var sy = undefined;
+ if (cellid != -1) {
+ var data = ret.data[cellid].data;
+ if (c.useAxesFormatters) {
+ var xf = series[i]._xaxis._ticks[0].formatter;
+ var yf = series[i]._yaxis._ticks[0].formatter;
+ var xfstr = series[i]._xaxis._ticks[0].formatString;
+ var yfstr = series[i]._yaxis._ticks[0].formatString;
+ sx = xf(xfstr, data[0]);
+ sy = yf(yfstr, data[1]);
+ }
+ else {
+ sx = data[0];
+ sy = data[1];
+ }
+ if (addbr) {
+ s += '<br />';
+ }
+ s += $.jqplot.sprintf(c.tooltipFormatString, label, sx, sy);
+ addbr = true;
+ }
+ }
+ }
+
+ }
+ c._tooltipElem.html(s);
+ }
+
+ function moveLine(gridpos, plot) {
+ var c = plot.plugins.cursor;
+ var ctx = c.cursorCanvas._ctx;
+ ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
+ if (c.showVerticalLine) {
+ c.shapeRenderer.draw(ctx, [[gridpos.x, 0], [gridpos.x, ctx.canvas.height]]);
+ }
+ if (c.showHorizontalLine) {
+ c.shapeRenderer.draw(ctx, [[0, gridpos.y], [ctx.canvas.width, gridpos.y]]);
+ }
+ var ret = getIntersectingPoints(plot, gridpos.x, gridpos.y);
+ if (c.showCursorLegend) {
+ var cells = $(plot.targetId + ' td.jqplot-cursor-legend-label');
+ for (var i=0; i<cells.length; i++) {
+ var idx = $(cells[i]).data('seriesIndex');
+ var series = plot.series[idx];
+ var label = series.label.toString();
+ var cellid = $.inArray(idx, ret.indices);
+ var sx = undefined;
+ var sy = undefined;
+ if (cellid != -1) {
+ var data = ret.data[cellid].data;
+ if (c.useAxesFormatters) {
+ var xf = series._xaxis._ticks[0].formatter;
+ var yf = series._yaxis._ticks[0].formatter;
+ var xfstr = series._xaxis._ticks[0].formatString;
+ var yfstr = series._yaxis._ticks[0].formatString;
+ sx = xf(xfstr, data[0]);
+ sy = yf(yfstr, data[1]);
+ }
+ else {
+ sx = data[0];
+ sy = data[1];
+ }
+ }
+ if (plot.legend.escapeHtml) {
+ $(cells[i]).text($.jqplot.sprintf(c.cursorLegendFormatString, label, sx, sy));
+ }
+ else {
+ $(cells[i]).html($.jqplot.sprintf(c.cursorLegendFormatString, label, sx, sy));
+ }
+ }
+ }
+ ctx = null;
+ }
+
+ function getIntersectingPoints(plot, x, y) {
+ var ret = {indices:[], data:[]};
+ var s, i, d0, d, j, r, p;
+ var threshold;
+ var c = plot.plugins.cursor;
+ for (var i=0; i<plot.series.length; i++) {
+ s = plot.series[i];
+ r = s.renderer;
+ if (s.show) {
+ threshold = c.intersectionThreshold;
+ if (s.showMarker) {
+ threshold += s.markerRenderer.size/2;
+ }
+ for (var j=0; j<s.gridData.length; j++) {
+ p = s.gridData[j];
+ // check vertical line
+ if (c.showVerticalLine) {
+ if (Math.abs(x-p[0]) <= threshold) {
+ ret.indices.push(i);
+ ret.data.push({seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]});
+ }
+ }
+ }
+ }
+ }
+ return ret;
+ }
+
+ function moveTooltip(gridpos, plot) {
+ var c = plot.plugins.cursor;
+ var elem = c._tooltipElem;
+ switch (c.tooltipLocation) {
+ case 'nw':
+ var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - c.tooltipOffset;
+ var y = gridpos.y + plot._gridPadding.top - c.tooltipOffset - elem.outerHeight(true);
+ break;
+ case 'n':
+ var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2;
+ var y = gridpos.y + plot._gridPadding.top - c.tooltipOffset - elem.outerHeight(true);
+ break;
+ case 'ne':
+ var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset;
+ var y = gridpos.y + plot._gridPadding.top - c.tooltipOffset - elem.outerHeight(true);
+ break;
+ case 'e':
+ var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset;
+ var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2;
+ break;
+ case 'se':
+ var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset;
+ var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset;
+ break;
+ case 's':
+ var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2;
+ var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset;
+ break;
+ case 'sw':
+ var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - c.tooltipOffset;
+ var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset;
+ break;
+ case 'w':
+ var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - c.tooltipOffset;
+ var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2;
+ break;
+ default:
+ var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset;
+ var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset;
+ break;
+ }
+
+ elem.css('left', x);
+ elem.css('top', y);
+ elem = null;
+ }
+
+ function positionTooltip(plot) {
+ // fake a grid for positioning
+ var grid = plot._gridPadding;
+ var c = plot.plugins.cursor;
+ var elem = c._tooltipElem;
+ switch (c.tooltipLocation) {
+ case 'nw':
+ var a = grid.left + c.tooltipOffset;
+ var b = grid.top + c.tooltipOffset;
+ elem.css('left', a);
+ elem.css('top', b);
+ break;
+ case 'n':
+ var a = (grid.left + (plot._plotDimensions.width - grid.right))/2 - elem.outerWidth(true)/2;
+ var b = grid.top + c.tooltipOffset;
+ elem.css('left', a);
+ elem.css('top', b);
+ break;
+ case 'ne':
+ var a = grid.right + c.tooltipOffset;
+ var b = grid.top + c.tooltipOffset;
+ elem.css({right:a, top:b});
+ break;
+ case 'e':
+ var a = grid.right + c.tooltipOffset;
+ var b = (grid.top + (plot._plotDimensions.height - grid.bottom))/2 - elem.outerHeight(true)/2;
+ elem.css({right:a, top:b});
+ break;
+ case 'se':
+ var a = grid.right + c.tooltipOffset;
+ var b = grid.bottom + c.tooltipOffset;
+ elem.css({right:a, bottom:b});
+ break;
+ case 's':
+ var a = (grid.left + (plot._plotDimensions.width - grid.right))/2 - elem.outerWidth(true)/2;
+ var b = grid.bottom + c.tooltipOffset;
+ elem.css({left:a, bottom:b});
+ break;
+ case 'sw':
+ var a = grid.left + c.tooltipOffset;
+ var b = grid.bottom + c.tooltipOffset;
+ elem.css({left:a, bottom:b});
+ break;
+ case 'w':
+ var a = grid.left + c.tooltipOffset;
+ var b = (grid.top + (plot._plotDimensions.height - grid.bottom))/2 - elem.outerHeight(true)/2;
+ elem.css({left:a, top:b});
+ break;
+ default: // same as 'se'
+ var a = grid.right - c.tooltipOffset;
+ var b = grid.bottom + c.tooltipOffset;
+ elem.css({right:a, bottom:b});
+ break;
+ }
+ elem = null;
+ }
+
+ function handleClick (ev, gridpos, datapos, neighbor, plot) {
+ ev.preventDefault();
+ ev.stopImmediatePropagation();
+ var c = plot.plugins.cursor;
+ if (c.clickReset) {
+ c.resetZoom(plot, c);
+ }
+ var sel = window.getSelection;
+ if (document.selection && document.selection.empty)
+ {
+ document.selection.empty();
+ }
+ else if (sel && !sel().isCollapsed) {
+ sel().collapse();
+ }
+ return false;
+ }
+
+ function handleDblClick (ev, gridpos, datapos, neighbor, plot) {
+ ev.preventDefault();
+ ev.stopImmediatePropagation();
+ var c = plot.plugins.cursor;
+ if (c.dblClickReset) {
+ c.resetZoom(plot, c);
+ }
+ var sel = window.getSelection;
+ if (document.selection && document.selection.empty)
+ {
+ document.selection.empty();
+ }
+ else if (sel && !sel().isCollapsed) {
+ sel().collapse();
+ }
+ return false;
+ }
+
+ function handleMouseLeave(ev, gridpos, datapos, neighbor, plot) {
+ var c = plot.plugins.cursor;
+ c.onGrid = false;
+ if (c.show) {
+ $(ev.target).css('cursor', c.previousCursor);
+ if (c.showTooltip && !(c._zoom.zooming && c.showTooltipOutsideZoom && !c.constrainOutsideZoom)) {
+ c._tooltipElem.empty();
+ c._tooltipElem.hide();
+ }
+ if (c.zoom) {
+ c._zoom.gridpos = gridpos;
+ c._zoom.datapos = datapos;
+ }
+ if (c.showVerticalLine || c.showHorizontalLine) {
+ var ctx = c.cursorCanvas._ctx;
+ ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
+ ctx = null;
+ }
+ if (c.showCursorLegend) {
+ var cells = $(plot.targetId + ' td.jqplot-cursor-legend-label');
+ for (var i=0; i<cells.length; i++) {
+ var idx = $(cells[i]).data('seriesIndex');
+ var series = plot.series[idx];
+ var label = series.label.toString();
+ if (plot.legend.escapeHtml) {
+ $(cells[i]).text($.jqplot.sprintf(c.cursorLegendFormatString, label, undefined, undefined));
+ }
+ else {
+ $(cells[i]).html($.jqplot.sprintf(c.cursorLegendFormatString, label, undefined, undefined));
+ }
+
+ }
+ }
+ }
+ }
+
+ function handleMouseEnter(ev, gridpos, datapos, neighbor, plot) {
+ var c = plot.plugins.cursor;
+ c.onGrid = true;
+ if (c.show) {
+ c.previousCursor = ev.target.style.cursor;
+ ev.target.style.cursor = c.style;
+ if (c.showTooltip) {
+ updateTooltip(gridpos, datapos, plot);
+ if (c.followMouse) {
+ moveTooltip(gridpos, plot);
+ }
+ else {
+ positionTooltip(plot);
+ }
+ c._tooltipElem.show();
+ }
+ if (c.showVerticalLine || c.showHorizontalLine) {
+ moveLine(gridpos, plot);
+ }
+ }
+
+ }
+
+ function handleMouseMove(ev, gridpos, datapos, neighbor, plot) {
+ var c = plot.plugins.cursor;
+ if (c.show) {
+ if (c.showTooltip) {
+ updateTooltip(gridpos, datapos, plot);
+ if (c.followMouse) {
+ moveTooltip(gridpos, plot);
+ }
+ }
+ if (c.showVerticalLine || c.showHorizontalLine) {
+ moveLine(gridpos, plot);
+ }
+ }
+ }
+
+ function getEventPosition(ev) {
+ var plot = ev.data.plot;
+ var go = plot.eventCanvas._elem.offset();
+ var gridPos = {x:ev.pageX - go.left, y:ev.pageY - go.top};
+ //////
+ // TO DO: handle yMidAxis
+ //////
+ var dataPos = {xaxis:null, yaxis:null, x2axis:null, y2axis:null, y3axis:null, y4axis:null, y5axis:null, y6axis:null, y7axis:null, y8axis:null, y9axis:null, yMidAxis:null};
+ var an = ['xaxis', 'yaxis', 'x2axis', 'y2axis', 'y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis', 'yMidAxis'];
+ var ax = plot.axes;
+ var n, axis;
+ for (n=11; n>0; n--) {
+ axis = an[n-1];
+ if (ax[axis].show) {
+ dataPos[axis] = ax[axis].series_p2u(gridPos[axis.charAt(0)]);
+ }
+ }
+
+ return {offsets:go, gridPos:gridPos, dataPos:dataPos};
+ }
+
+ function handleZoomMove(ev) {
+ var plot = ev.data.plot;
+ var c = plot.plugins.cursor;
+ // don't do anything if not on grid.
+ if (c.show && c.zoom && c._zoom.started && !c.zoomTarget) {
+ ev.preventDefault();
+ var ctx = c.zoomCanvas._ctx;
+ var positions = getEventPosition(ev);
+ var gridpos = positions.gridPos;
+ var datapos = positions.dataPos;
+ c._zoom.gridpos = gridpos;
+ c._zoom.datapos = datapos;
+ c._zoom.zooming = true;
+ var xpos = gridpos.x;
+ var ypos = gridpos.y;
+ var height = ctx.canvas.height;
+ var width = ctx.canvas.width;
+ if (c.showTooltip && !c.onGrid && c.showTooltipOutsideZoom) {
+ updateTooltip(gridpos, datapos, plot);
+ if (c.followMouse) {
+ moveTooltip(gridpos, plot);
+ }
+ }
+ if (c.constrainZoomTo == 'x') {
+ c._zoom.end = [xpos, height];
+ }
+ else if (c.constrainZoomTo == 'y') {
+ c._zoom.end = [width, ypos];
+ }
+ else {
+ c._zoom.end = [xpos, ypos];
+ }
+ var sel = window.getSelection;
+ if (document.selection && document.selection.empty)
+ {
+ document.selection.empty();
+ }
+ else if (sel && !sel().isCollapsed) {
+ sel().collapse();
+ }
+ drawZoomBox.call(c);
+ ctx = null;
+ }
+ }
+
+ function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
+ var c = plot.plugins.cursor;
+ if(plot.plugins.mobile){
+ $(document).one('vmouseup.jqplot_cursor', {plot:plot}, handleMouseUp);
+ } else {
+ $(document).one('mouseup.jqplot_cursor', {plot:plot}, handleMouseUp);
+ }
+ var axes = plot.axes;
+ if (document.onselectstart != undefined) {
+ c._oldHandlers.onselectstart = document.onselectstart;
+ document.onselectstart = function () { return false; };
+ }
+ if (document.ondrag != undefined) {
+ c._oldHandlers.ondrag = document.ondrag;
+ document.ondrag = function () { return false; };
+ }
+ if (document.onmousedown != undefined) {
+ c._oldHandlers.onmousedown = document.onmousedown;
+ document.onmousedown = function () { return false; };
+ }
+ if (c.zoom) {
+ if (!c.zoomProxy) {
+ var ctx = c.zoomCanvas._ctx;
+ ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
+ ctx = null;
+ }
+ if (c.constrainZoomTo == 'x') {
+ c._zoom.start = [gridpos.x, 0];
+ }
+ else if (c.constrainZoomTo == 'y') {
+ c._zoom.start = [0, gridpos.y];
+ }
+ else {
+ c._zoom.start = [gridpos.x, gridpos.y];
+ }
+ c._zoom.started = true;
+ for (var ax in datapos) {
+ // get zoom starting position.
+ c._zoom.axes.start[ax] = datapos[ax];
+ }
+ if(plot.plugins.mobile){
+ $(document).bind('vmousemove.jqplotCursor', {plot:plot}, handleZoomMove);
+ } else {
+ $(document).bind('mousemove.jqplotCursor', {plot:plot}, handleZoomMove);
+ }
+
+ }
+ }
+
+ function handleMouseUp(ev) {
+ var plot = ev.data.plot;
+ var c = plot.plugins.cursor;
+ if (c.zoom && c._zoom.zooming && !c.zoomTarget) {
+ var xpos = c._zoom.gridpos.x;
+ var ypos = c._zoom.gridpos.y;
+ var datapos = c._zoom.datapos;
+ var height = c.zoomCanvas._ctx.canvas.height;
+ var width = c.zoomCanvas._ctx.canvas.width;
+ var axes = plot.axes;
+
+ if (c.constrainOutsideZoom && !c.onGrid) {
+ if (xpos < 0) { xpos = 0; }
+ else if (xpos > width) { xpos = width; }
+ if (ypos < 0) { ypos = 0; }
+ else if (ypos > height) { ypos = height; }
+
+ for (var axis in datapos) {
+ if (datapos[axis]) {
+ if (axis.charAt(0) == 'x') {
+ datapos[axis] = axes[axis].series_p2u(xpos);
+ }
+ else {
+ datapos[axis] = axes[axis].series_p2u(ypos);
+ }
+ }
+ }
+ }
+
+ if (c.constrainZoomTo == 'x') {
+ ypos = height;
+ }
+ else if (c.constrainZoomTo == 'y') {
+ xpos = width;
+ }
+ c._zoom.end = [xpos, ypos];
+ c._zoom.gridpos = {x:xpos, y:ypos};
+
+ c.doZoom(c._zoom.gridpos, datapos, plot, c);
+ }
+ c._zoom.started = false;
+ c._zoom.zooming = false;
+
+ $(document).unbind('mousemove.jqplotCursor', handleZoomMove);
+
+ if (document.onselectstart != undefined && c._oldHandlers.onselectstart != null){
+ document.onselectstart = c._oldHandlers.onselectstart;
+ c._oldHandlers.onselectstart = null;
+ }
+ if (document.ondrag != undefined && c._oldHandlers.ondrag != null){
+ document.ondrag = c._oldHandlers.ondrag;
+ c._oldHandlers.ondrag = null;
+ }
+ if (document.onmousedown != undefined && c._oldHandlers.onmousedown != null){
+ document.onmousedown = c._oldHandlers.onmousedown;
+ c._oldHandlers.onmousedown = null;
+ }
+
+ }
+
+ function drawZoomBox() {
+ var start = this._zoom.start;
+ var end = this._zoom.end;
+ var ctx = this.zoomCanvas._ctx;
+ var l, t, h, w;
+ if (end[0] > start[0]) {
+ l = start[0];
+ w = end[0] - start[0];
+ }
+ else {
+ l = end[0];
+ w = start[0] - end[0];
+ }
+ if (end[1] > start[1]) {
+ t = start[1];
+ h = end[1] - start[1];
+ }
+ else {
+ t = end[1];
+ h = start[1] - end[1];
+ }
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.strokeStyle = '#999999';
+ ctx.lineWidth = 1.0;
+ ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
+ ctx.fillRect(0,0,ctx.canvas.width, ctx.canvas.height);
+ ctx.clearRect(l, t, w, h);
+ // IE won't show transparent fill rect, so stroke a rect also.
+ ctx.strokeRect(l,t,w,h);
+ ctx = null;
+ }
+
+ $.jqplot.CursorLegendRenderer = function(options) {
+ $.jqplot.TableLegendRenderer.call(this, options);
+ this.formatString = '%s';
+ };
+
+ $.jqplot.CursorLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
+ $.jqplot.CursorLegendRenderer.prototype.constructor = $.jqplot.CursorLegendRenderer;
+
+ // called in context of a Legend
+ $.jqplot.CursorLegendRenderer.prototype.draw = function() {
+ if (this._elem) {
+ this._elem.emptyForce();
+ this._elem = null;
+ }
+ if (this.show) {
+ var series = this._series, s;
+ // make a table. one line label per row.
+ var elem = document.createElement('div');
+ this._elem = $(elem);
+ elem = null;
+ this._elem.addClass('jqplot-legend jqplot-cursor-legend');
+ this._elem.css('position', 'absolute');
+
+ var pad = false;
+ for (var i = 0; i< series.length; i++) {
+ s = series[i];
+ if (s.show && s.showLabel) {
+ var lt = $.jqplot.sprintf(this.formatString, s.label.toString());
+ if (lt) {
+ var color = s.color;
+ if (s._stack && !s.fill) {
+ color = '';
+ }
+ addrow.call(this, lt, color, pad, i);
+ pad = true;
+ }
+ // let plugins add more rows to legend. Used by trend line plugin.
+ for (var j=0; j<$.jqplot.addLegendRowHooks.length; j++) {
+ var item = $.jqplot.addLegendRowHooks[j].call(this, s);
+ if (item) {
+ addrow.call(this, item.label, item.color, pad);
+ pad = true;
+ }
+ }
+ }
+ }
+ series = s = null;
+ delete series;
+ delete s;
+ }
+
+ function addrow(label, color, pad, idx) {
+ var rs = (pad) ? this.rowSpacing : '0';
+ var tr = $('<tr class="jqplot-legend jqplot-cursor-legend"></tr>').appendTo(this._elem);
+ tr.data('seriesIndex', idx);
+ $('<td class="jqplot-legend jqplot-cursor-legend-swatch" style="padding-top:'+rs+';">'+
+ '<div style="border:1px solid #cccccc;padding:0.2em;">'+
+ '<div class="jqplot-cursor-legend-swatch" style="background-color:'+color+';"></div>'+
+ '</div></td>').appendTo(tr);
+ var td = $('<td class="jqplot-legend jqplot-cursor-legend-label" style="vertical-align:middle;padding-top:'+rs+';"></td>');
+ td.appendTo(tr);
+ td.data('seriesIndex', idx);
+ if (this.escapeHtml) {
+ td.text(label);
+ }
+ else {
+ td.html(label);
+ }
+ tr = null;
+ td = null;
+ }
+ return this._elem;
+ };
+
+})(jQuery);
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.min.js
new file mode 100644
index 00000000..0de0ca14
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(j){j.jqplot.Cursor=function(q){this.style="crosshair";this.previousCursor="auto";this.show=j.jqplot.config.enablePlugins;this.showTooltip=true;this.followMouse=false;this.tooltipLocation="se";this.tooltipOffset=6;this.showTooltipGridPosition=false;this.showTooltipUnitPosition=true;this.showTooltipDataPosition=false;this.tooltipFormatString="%.4P, %.4P";this.useAxesFormatters=true;this.tooltipAxisGroups=[];this.zoom=false;this.zoomProxy=false;this.zoomTarget=false;this.looseZoom=true;this.clickReset=false;this.dblClickReset=true;this.showVerticalLine=false;this.showHorizontalLine=false;this.constrainZoomTo="none";this.shapeRenderer=new j.jqplot.ShapeRenderer();this._zoom={start:[],end:[],started:false,zooming:false,isZoomed:false,axes:{start:{},end:{}},gridpos:{},datapos:{}};this._tooltipElem;this.zoomCanvas;this.cursorCanvas;this.intersectionThreshold=2;this.showCursorLegend=false;this.cursorLegendFormatString=j.jqplot.Cursor.cursorLegendFormatString;this._oldHandlers={onselectstart:null,ondrag:null,onmousedown:null};this.constrainOutsideZoom=true;this.showTooltipOutsideZoom=false;this.onGrid=false;j.extend(true,this,q)};j.jqplot.Cursor.cursorLegendFormatString="%s x:%s, y:%s";j.jqplot.Cursor.init=function(t,s,r){var q=r||{};this.plugins.cursor=new j.jqplot.Cursor(q.cursor);var u=this.plugins.cursor;if(u.show){j.jqplot.eventListenerHooks.push(["jqplotMouseEnter",b]);j.jqplot.eventListenerHooks.push(["jqplotMouseLeave",f]);j.jqplot.eventListenerHooks.push(["jqplotMouseMove",i]);if(u.showCursorLegend){r.legend=r.legend||{};r.legend.renderer=j.jqplot.CursorLegendRenderer;r.legend.formatString=this.plugins.cursor.cursorLegendFormatString;r.legend.show=true}if(u.zoom){j.jqplot.eventListenerHooks.push(["jqplotMouseDown",a]);if(u.clickReset){j.jqplot.eventListenerHooks.push(["jqplotClick",k])}if(u.dblClickReset){j.jqplot.eventListenerHooks.push(["jqplotDblClick",c])}}this.resetZoom=function(){var x=this.axes;if(!u.zoomProxy){for(var w in x){x[w].reset();x[w]._ticks=[];if(u._zoom.axes[w]!==undefined){x[w]._autoFormatString=u._zoom.axes[w].tickFormatString}}this.redraw()}else{var v=this.plugins.cursor.zoomCanvas._ctx;v.clearRect(0,0,v.canvas.width,v.canvas.height);v=null}this.plugins.cursor._zoom.isZoomed=false;this.target.trigger("jqplotResetZoom",[this,this.plugins.cursor])};if(u.showTooltipDataPosition){u.showTooltipUnitPosition=false;u.showTooltipGridPosition=false;if(q.cursor.tooltipFormatString==undefined){u.tooltipFormatString=j.jqplot.Cursor.cursorLegendFormatString}}}};j.jqplot.Cursor.postDraw=function(){var x=this.plugins.cursor;if(x.zoomCanvas){x.zoomCanvas.resetCanvas();x.zoomCanvas=null}if(x.cursorCanvas){x.cursorCanvas.resetCanvas();x.cursorCanvas=null}if(x._tooltipElem){x._tooltipElem.emptyForce();x._tooltipElem=null}if(x.zoom){x.zoomCanvas=new j.jqplot.GenericCanvas();this.eventCanvas._elem.before(x.zoomCanvas.createElement(this._gridPadding,"jqplot-zoom-canvas",this._plotDimensions,this));x.zoomCanvas.setContext()}var v=document.createElement("div");x._tooltipElem=j(v);v=null;x._tooltipElem.addClass("jqplot-cursor-tooltip");x._tooltipElem.css({position:"absolute",display:"none"});if(x.zoomCanvas){x.zoomCanvas._elem.before(x._tooltipElem)}else{this.eventCanvas._elem.before(x._tooltipElem)}if(x.showVerticalLine||x.showHorizontalLine){x.cursorCanvas=new j.jqplot.GenericCanvas();this.eventCanvas._elem.before(x.cursorCanvas.createElement(this._gridPadding,"jqplot-cursor-canvas",this._plotDimensions,this));x.cursorCanvas.setContext()}if(x.showTooltipUnitPosition){if(x.tooltipAxisGroups.length===0){var t=this.series;var u;var q=[];for(var r=0;r<t.length;r++){u=t[r];var w=u.xaxis+","+u.yaxis;if(j.inArray(w,q)==-1){q.push(w)}}for(var r=0;r<q.length;r++){x.tooltipAxisGroups.push(q[r].split(","))}}}};j.jqplot.Cursor.zoomProxy=function(v,r){var q=v.plugins.cursor;var u=r.plugins.cursor;q.zoomTarget=true;q.zoom=true;q.style="auto";q.dblClickReset=false;u.zoom=true;u.zoomProxy=true;r.target.bind("jqplotZoom",t);r.target.bind("jqplotResetZoom",s);function t(x,w,z,y,A){q.doZoom(w,z,v,A)}function s(w,x,y){v.resetZoom()}};j.jqplot.Cursor.prototype.resetZoom=function(u,v){var t=u.axes;var s=v._zoom.axes;if(!u.plugins.cursor.zoomProxy&&v._zoom.isZoomed){for(var r in t){t[r].reset();t[r]._ticks=[];t[r]._autoFormatString=s[r].tickFormatString}u.redraw();v._zoom.isZoomed=false}else{var q=v.zoomCanvas._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);q=null}u.target.trigger("jqplotResetZoom",[u,v])};j.jqplot.Cursor.resetZoom=function(q){q.resetZoom()};j.jqplot.Cursor.prototype.doZoom=function(G,t,C,u){var I=u;var F=C.axes;var r=I._zoom.axes;var w=r.start;var s=r.end;var B,E,z,D,v,x,q,H,J;var A=C.plugins.cursor.zoomCanvas._ctx;if((I.constrainZoomTo=="none"&&Math.abs(G.x-I._zoom.start[0])>6&&Math.abs(G.y-I._zoom.start[1])>6)||(I.constrainZoomTo=="x"&&Math.abs(G.x-I._zoom.start[0])>6)||(I.constrainZoomTo=="y"&&Math.abs(G.y-I._zoom.start[1])>6)){if(!C.plugins.cursor.zoomProxy){for(var y in t){if(I._zoom.axes[y]==undefined){I._zoom.axes[y]={};I._zoom.axes[y].numberTicks=F[y].numberTicks;I._zoom.axes[y].tickInterval=F[y].tickInterval;I._zoom.axes[y].daTickInterval=F[y].daTickInterval;I._zoom.axes[y].min=F[y].min;I._zoom.axes[y].max=F[y].max;I._zoom.axes[y].tickFormatString=(F[y].tickOptions!=null)?F[y].tickOptions.formatString:""}if((I.constrainZoomTo=="none")||(I.constrainZoomTo=="x"&&y.charAt(0)=="x")||(I.constrainZoomTo=="y"&&y.charAt(0)=="y")){z=t[y];if(z!=null){if(z>w[y]){v=w[y];x=z}else{D=w[y]-z;v=z;x=w[y]}q=F[y];H=null;if(q.alignTicks){if(q.name==="x2axis"&&C.axes.xaxis.show){H=C.axes.xaxis.numberTicks}else{if(q.name.charAt(0)==="y"&&q.name!=="yaxis"&&q.name!=="yMidAxis"&&C.axes.yaxis.show){H=C.axes.yaxis.numberTicks}}}if(this.looseZoom&&(F[y].renderer.constructor===j.jqplot.LinearAxisRenderer||F[y].renderer.constructor===j.jqplot.LogAxisRenderer)){J=j.jqplot.LinearTickGenerator(v,x,q._scalefact,H);if(F[y].tickInset&&J[0]<F[y].min+F[y].tickInset*F[y].tickInterval){J[0]+=J[4];J[2]-=1}if(F[y].tickInset&&J[1]>F[y].max-F[y].tickInset*F[y].tickInterval){J[1]-=J[4];J[2]-=1}if(F[y].renderer.constructor===j.jqplot.LogAxisRenderer&&J[0]<F[y].min){J[0]+=J[4];J[2]-=1}F[y].min=J[0];F[y].max=J[1];F[y]._autoFormatString=J[3];F[y].numberTicks=J[2];F[y].tickInterval=J[4];F[y].daTickInterval=[J[4]/1000,"seconds"]}else{F[y].min=v;F[y].max=x;F[y].tickInterval=null;F[y].numberTicks=null;F[y].daTickInterval=null}F[y]._ticks=[]}}}A.clearRect(0,0,A.canvas.width,A.canvas.height);C.redraw();I._zoom.isZoomed=true;A=null}C.target.trigger("jqplotZoom",[G,t,C,u])}};j.jqplot.preInitHooks.push(j.jqplot.Cursor.init);j.jqplot.postDrawHooks.push(j.jqplot.Cursor.postDraw);function e(G,r,C){var J=C.plugins.cursor;var w="";var N=false;if(J.showTooltipGridPosition){w=G.x+", "+G.y;N=true}if(J.showTooltipUnitPosition){var F;for(var E=0;E<J.tooltipAxisGroups.length;E++){F=J.tooltipAxisGroups[E];if(N){w+="<br />"}if(J.useAxesFormatters){for(var D=0;D<F.length;D++){if(D){w+=", "}var H=C.axes[F[D]]._ticks[0].formatter;var B=C.axes[F[D]]._ticks[0].formatString;w+=H(B,r[F[D]])}}else{w+=j.jqplot.sprintf(J.tooltipFormatString,r[F[0]],r[F[1]])}N=true}}if(J.showTooltipDataPosition){var u=C.series;var M=d(C,G.x,G.y);var N=false;for(var E=0;E<u.length;E++){if(u[E].show){var y=u[E].index;var t=u[E].label.toString();var I=j.inArray(y,M.indices);var z=undefined;var x=undefined;if(I!=-1){var L=M.data[I].data;if(J.useAxesFormatters){var A=u[E]._xaxis._ticks[0].formatter;var q=u[E]._yaxis._ticks[0].formatter;var K=u[E]._xaxis._ticks[0].formatString;var v=u[E]._yaxis._ticks[0].formatString;z=A(K,L[0]);x=q(v,L[1])}else{z=L[0];x=L[1]}if(N){w+="<br />"}w+=j.jqplot.sprintf(J.tooltipFormatString,t,z,x);N=true}}}}J._tooltipElem.html(w)}function g(C,A){var E=A.plugins.cursor;var z=E.cursorCanvas._ctx;z.clearRect(0,0,z.canvas.width,z.canvas.height);if(E.showVerticalLine){E.shapeRenderer.draw(z,[[C.x,0],[C.x,z.canvas.height]])}if(E.showHorizontalLine){E.shapeRenderer.draw(z,[[0,C.y],[z.canvas.width,C.y]])}var G=d(A,C.x,C.y);if(E.showCursorLegend){var r=j(A.targetId+" td.jqplot-cursor-legend-label");for(var B=0;B<r.length;B++){var v=j(r[B]).data("seriesIndex");var t=A.series[v];var s=t.label.toString();var D=j.inArray(v,G.indices);var x=undefined;var w=undefined;if(D!=-1){var H=G.data[D].data;if(E.useAxesFormatters){var y=t._xaxis._ticks[0].formatter;var q=t._yaxis._ticks[0].formatter;var F=t._xaxis._ticks[0].formatString;var u=t._yaxis._ticks[0].formatString;x=y(F,H[0]);w=q(u,H[1])}else{x=H[0];w=H[1]}}if(A.legend.escapeHtml){j(r[B]).text(j.jqplot.sprintf(E.cursorLegendFormatString,s,x,w))}else{j(r[B]).html(j.jqplot.sprintf(E.cursorLegendFormatString,s,x,w))}}}z=null}function d(A,F,E){var B={indices:[],data:[]};var G,w,u,C,v,q,t;var z;var D=A.plugins.cursor;for(var w=0;w<A.series.length;w++){G=A.series[w];q=G.renderer;if(G.show){z=D.intersectionThreshold;if(G.showMarker){z+=G.markerRenderer.size/2}for(var v=0;v<G.gridData.length;v++){t=G.gridData[v];if(D.showVerticalLine){if(Math.abs(F-t[0])<=z){B.indices.push(w);B.data.push({seriesIndex:w,pointIndex:v,gridData:t,data:G.data[v]})}}}}}return B}function n(r,t){var v=t.plugins.cursor;var s=v._tooltipElem;switch(v.tooltipLocation){case"nw":var q=r.x+t._gridPadding.left-s.outerWidth(true)-v.tooltipOffset;var u=r.y+t._gridPadding.top-v.tooltipOffset-s.outerHeight(true);break;case"n":var q=r.x+t._gridPadding.left-s.outerWidth(true)/2;var u=r.y+t._gridPadding.top-v.tooltipOffset-s.outerHeight(true);break;case"ne":var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top-v.tooltipOffset-s.outerHeight(true);break;case"e":var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top-s.outerHeight(true)/2;break;case"se":var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top+v.tooltipOffset;break;case"s":var q=r.x+t._gridPadding.left-s.outerWidth(true)/2;var u=r.y+t._gridPadding.top+v.tooltipOffset;break;case"sw":var q=r.x+t._gridPadding.left-s.outerWidth(true)-v.tooltipOffset;var u=r.y+t._gridPadding.top+v.tooltipOffset;break;case"w":var q=r.x+t._gridPadding.left-s.outerWidth(true)-v.tooltipOffset;var u=r.y+t._gridPadding.top-s.outerHeight(true)/2;break;default:var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top+v.tooltipOffset;break}s.css("left",q);s.css("top",u);s=null}function m(u){var s=u._gridPadding;var v=u.plugins.cursor;var t=v._tooltipElem;switch(v.tooltipLocation){case"nw":var r=s.left+v.tooltipOffset;var q=s.top+v.tooltipOffset;t.css("left",r);t.css("top",q);break;case"n":var r=(s.left+(u._plotDimensions.width-s.right))/2-t.outerWidth(true)/2;var q=s.top+v.tooltipOffset;t.css("left",r);t.css("top",q);break;case"ne":var r=s.right+v.tooltipOffset;var q=s.top+v.tooltipOffset;t.css({right:r,top:q});break;case"e":var r=s.right+v.tooltipOffset;var q=(s.top+(u._plotDimensions.height-s.bottom))/2-t.outerHeight(true)/2;t.css({right:r,top:q});break;case"se":var r=s.right+v.tooltipOffset;var q=s.bottom+v.tooltipOffset;t.css({right:r,bottom:q});break;case"s":var r=(s.left+(u._plotDimensions.width-s.right))/2-t.outerWidth(true)/2;var q=s.bottom+v.tooltipOffset;t.css({left:r,bottom:q});break;case"sw":var r=s.left+v.tooltipOffset;var q=s.bottom+v.tooltipOffset;t.css({left:r,bottom:q});break;case"w":var r=s.left+v.tooltipOffset;var q=(s.top+(u._plotDimensions.height-s.bottom))/2-t.outerHeight(true)/2;t.css({left:r,top:q});break;default:var r=s.right-v.tooltipOffset;var q=s.bottom+v.tooltipOffset;t.css({right:r,bottom:q});break}t=null}function k(r,q,v,u,t){r.preventDefault();r.stopImmediatePropagation();var w=t.plugins.cursor;if(w.clickReset){w.resetZoom(t,w)}var s=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(s&&!s().isCollapsed){s().collapse()}}return false}function c(r,q,v,u,t){r.preventDefault();r.stopImmediatePropagation();var w=t.plugins.cursor;if(w.dblClickReset){w.resetZoom(t,w)}var s=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(s&&!s().isCollapsed){s().collapse()}}return false}function f(w,t,q,z,u){var v=u.plugins.cursor;v.onGrid=false;if(v.show){j(w.target).css("cursor",v.previousCursor);if(v.showTooltip&&!(v._zoom.zooming&&v.showTooltipOutsideZoom&&!v.constrainOutsideZoom)){v._tooltipElem.empty();v._tooltipElem.hide()}if(v.zoom){v._zoom.gridpos=t;v._zoom.datapos=q}if(v.showVerticalLine||v.showHorizontalLine){var B=v.cursorCanvas._ctx;B.clearRect(0,0,B.canvas.width,B.canvas.height);B=null}if(v.showCursorLegend){var A=j(u.targetId+" td.jqplot-cursor-legend-label");for(var s=0;s<A.length;s++){var y=j(A[s]).data("seriesIndex");var r=u.series[y];var x=r.label.toString();if(u.legend.escapeHtml){j(A[s]).text(j.jqplot.sprintf(v.cursorLegendFormatString,x,undefined,undefined))}else{j(A[s]).html(j.jqplot.sprintf(v.cursorLegendFormatString,x,undefined,undefined))}}}}}function b(r,q,u,t,s){var v=s.plugins.cursor;v.onGrid=true;if(v.show){v.previousCursor=r.target.style.cursor;r.target.style.cursor=v.style;if(v.showTooltip){e(q,u,s);if(v.followMouse){n(q,s)}else{m(s)}v._tooltipElem.show()}if(v.showVerticalLine||v.showHorizontalLine){g(q,s)}}}function i(r,q,u,t,s){var v=s.plugins.cursor;if(v.show){if(v.showTooltip){e(q,u,s);if(v.followMouse){n(q,s)}}if(v.showVerticalLine||v.showHorizontalLine){g(q,s)}}}function o(y){var x=y.data.plot;var t=x.eventCanvas._elem.offset();var w={x:y.pageX-t.left,y:y.pageY-t.top};var u={xaxis:null,yaxis:null,x2axis:null,y2axis:null,y3axis:null,y4axis:null,y5axis:null,y6axis:null,y7axis:null,y8axis:null,y9axis:null,yMidAxis:null};var v=["xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];var q=x.axes;var r,s;for(r=11;r>0;r--){s=v[r-1];if(q[s].show){u[s]=q[s].series_p2u(w[s.charAt(0)])}}return{offsets:t,gridPos:w,dataPos:u}}function h(z){var x=z.data.plot;var y=x.plugins.cursor;if(y.show&&y.zoom&&y._zoom.started&&!y.zoomTarget){z.preventDefault();var B=y.zoomCanvas._ctx;var v=o(z);var w=v.gridPos;var t=v.dataPos;y._zoom.gridpos=w;y._zoom.datapos=t;y._zoom.zooming=true;var u=w.x;var s=w.y;var A=B.canvas.height;var q=B.canvas.width;if(y.showTooltip&&!y.onGrid&&y.showTooltipOutsideZoom){e(w,t,x);if(y.followMouse){n(w,x)}}if(y.constrainZoomTo=="x"){y._zoom.end=[u,A]}else{if(y.constrainZoomTo=="y"){y._zoom.end=[q,s]}else{y._zoom.end=[u,s]}}var r=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(r&&!r().isCollapsed){r().collapse()}}l.call(y);B=null}}function a(w,s,r,x,t){var v=t.plugins.cursor;if(t.plugins.mobile){j(document).one("vmouseup.jqplot_cursor",{plot:t},p)}else{j(document).one("mouseup.jqplot_cursor",{plot:t},p)}var u=t.axes;if(document.onselectstart!=undefined){v._oldHandlers.onselectstart=document.onselectstart;document.onselectstart=function(){return false}}if(document.ondrag!=undefined){v._oldHandlers.ondrag=document.ondrag;document.ondrag=function(){return false}}if(document.onmousedown!=undefined){v._oldHandlers.onmousedown=document.onmousedown;document.onmousedown=function(){return false}}if(v.zoom){if(!v.zoomProxy){var y=v.zoomCanvas._ctx;y.clearRect(0,0,y.canvas.width,y.canvas.height);y=null}if(v.constrainZoomTo=="x"){v._zoom.start=[s.x,0]}else{if(v.constrainZoomTo=="y"){v._zoom.start=[0,s.y]}else{v._zoom.start=[s.x,s.y]}}v._zoom.started=true;for(var q in r){v._zoom.axes.start[q]=r[q]}if(t.plugins.mobile){j(document).bind("vmousemove.jqplotCursor",{plot:t},h)}else{j(document).bind("mousemove.jqplotCursor",{plot:t},h)}}}function p(y){var v=y.data.plot;var x=v.plugins.cursor;if(x.zoom&&x._zoom.zooming&&!x.zoomTarget){var u=x._zoom.gridpos.x;var r=x._zoom.gridpos.y;var t=x._zoom.datapos;var z=x.zoomCanvas._ctx.canvas.height;var q=x.zoomCanvas._ctx.canvas.width;var w=v.axes;if(x.constrainOutsideZoom&&!x.onGrid){if(u<0){u=0}else{if(u>q){u=q}}if(r<0){r=0}else{if(r>z){r=z}}for(var s in t){if(t[s]){if(s.charAt(0)=="x"){t[s]=w[s].series_p2u(u)}else{t[s]=w[s].series_p2u(r)}}}}if(x.constrainZoomTo=="x"){r=z}else{if(x.constrainZoomTo=="y"){u=q}}x._zoom.end=[u,r];x._zoom.gridpos={x:u,y:r};x.doZoom(x._zoom.gridpos,t,v,x)}x._zoom.started=false;x._zoom.zooming=false;j(document).unbind("mousemove.jqplotCursor",h);if(document.onselectstart!=undefined&&x._oldHandlers.onselectstart!=null){document.onselectstart=x._oldHandlers.onselectstart;x._oldHandlers.onselectstart=null}if(document.ondrag!=undefined&&x._oldHandlers.ondrag!=null){document.ondrag=x._oldHandlers.ondrag;x._oldHandlers.ondrag=null}if(document.onmousedown!=undefined&&x._oldHandlers.onmousedown!=null){document.onmousedown=x._oldHandlers.onmousedown;x._oldHandlers.onmousedown=null}}function l(){var y=this._zoom.start;var u=this._zoom.end;var s=this.zoomCanvas._ctx;var r,v,x,q;if(u[0]>y[0]){r=y[0];q=u[0]-y[0]}else{r=u[0];q=y[0]-u[0]}if(u[1]>y[1]){v=y[1];x=u[1]-y[1]}else{v=u[1];x=y[1]-u[1]}s.fillStyle="rgba(0,0,0,0.2)";s.strokeStyle="#999999";s.lineWidth=1;s.clearRect(0,0,s.canvas.width,s.canvas.height);s.fillRect(0,0,s.canvas.width,s.canvas.height);s.clearRect(r,v,q,x);s.strokeRect(r,v,q,x);s=null}j.jqplot.CursorLegendRenderer=function(q){j.jqplot.TableLegendRenderer.call(this,q);this.formatString="%s"};j.jqplot.CursorLegendRenderer.prototype=new j.jqplot.TableLegendRenderer();j.jqplot.CursorLegendRenderer.prototype.constructor=j.jqplot.CursorLegendRenderer;j.jqplot.CursorLegendRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}if(this.show){var w=this._series,A;var r=document.createElement("div");this._elem=j(r);r=null;this._elem.addClass("jqplot-legend jqplot-cursor-legend");this._elem.css("position","absolute");var q=false;for(var x=0;x<w.length;x++){A=w[x];if(A.show&&A.showLabel){var v=j.jqplot.sprintf(this.formatString,A.label.toString());if(v){var t=A.color;if(A._stack&&!A.fill){t=""}z.call(this,v,t,q,x);q=true}for(var u=0;u<j.jqplot.addLegendRowHooks.length;u++){var y=j.jqplot.addLegendRowHooks[u].call(this,A);if(y){z.call(this,y.label,y.color,q);q=true}}}}w=A=null;delete w;delete A}function z(D,C,F,s){var B=(F)?this.rowSpacing:"0";var E=j('<tr class="jqplot-legend jqplot-cursor-legend"></tr>').appendTo(this._elem);E.data("seriesIndex",s);j('<td class="jqplot-legend jqplot-cursor-legend-swatch" style="padding-top:'+B+';"><div style="border:1px solid #cccccc;padding:0.2em;"><div class="jqplot-cursor-legend-swatch" style="background-color:'+C+';"></div></div></td>').appendTo(E);var G=j('<td class="jqplot-legend jqplot-cursor-legend-label" style="vertical-align:middle;padding-top:'+B+';"></td>');G.appendTo(E);G.data("seriesIndex",s);if(this.escapeHtml){G.text(D)}else{G.html(D)}E=null;G=null}return this._elem}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.js
new file mode 100644
index 00000000..ec4211d4
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.js
@@ -0,0 +1,737 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ /**
+ * Class: $.jqplot.DateAxisRenderer
+ * A plugin for a jqPlot to render an axis as a series of date values.
+ * This renderer has no options beyond those supplied by the <Axis> class.
+ * It supplies it's own tick formatter, so the tickOptions.formatter option
+ * should not be overridden.
+ *
+ * Thanks to Ken Synder for his enhanced Date instance methods which are
+ * included with this code <http://kendsnyder.com/sandbox/date/>.
+ *
+ * To use this renderer, include the plugin in your source
+ * > <script type="text/javascript" language="javascript" src="plugins/jqplot.dateAxisRenderer.js"></script>
+ *
+ * and supply the appropriate options to your plot
+ *
+ * > {axes:{xaxis:{renderer:$.jqplot.DateAxisRenderer}}}
+ *
+ * Dates can be passed into the axis in almost any recognizable value and
+ * will be parsed. They will be rendered on the axis in the format
+ * specified by tickOptions.formatString. e.g. tickOptions.formatString = '%Y-%m-%d'.
+ *
+ * Accecptable format codes
+ * are:
+ *
+ * > Code Result Description
+ * > == Years ==
+ * > %Y 2008 Four-digit year
+ * > %y 08 Two-digit year
+ * > == Months ==
+ * > %m 09 Two-digit month
+ * > %#m 9 One or two-digit month
+ * > %B September Full month name
+ * > %b Sep Abbreviated month name
+ * > == Days ==
+ * > %d 05 Two-digit day of month
+ * > %#d 5 One or two-digit day of month
+ * > %e 5 One or two-digit day of month
+ * > %A Sunday Full name of the day of the week
+ * > %a Sun Abbreviated name of the day of the week
+ * > %w 0 Number of the day of the week (0 = Sunday, 6 = Saturday)
+ * > %o th The ordinal suffix string following the day of the month
+ * > == Hours ==
+ * > %H 23 Hours in 24-hour format (two digits)
+ * > %#H 3 Hours in 24-hour integer format (one or two digits)
+ * > %I 11 Hours in 12-hour format (two digits)
+ * > %#I 3 Hours in 12-hour integer format (one or two digits)
+ * > %p PM AM or PM
+ * > == Minutes ==
+ * > %M 09 Minutes (two digits)
+ * > %#M 9 Minutes (one or two digits)
+ * > == Seconds ==
+ * > %S 02 Seconds (two digits)
+ * > %#S 2 Seconds (one or two digits)
+ * > %s 1206567625723 Unix timestamp (Seconds past 1970-01-01 00:00:00)
+ * > == Milliseconds ==
+ * > %N 008 Milliseconds (three digits)
+ * > %#N 8 Milliseconds (one to three digits)
+ * > == Timezone ==
+ * > %O 360 difference in minutes between local time and GMT
+ * > %Z Mountain Standard Time Name of timezone as reported by browser
+ * > %G -06:00 Hours and minutes between GMT
+ * > == Shortcuts ==
+ * > %F 2008-03-26 %Y-%m-%d
+ * > %T 05:06:30 %H:%M:%S
+ * > %X 05:06:30 %H:%M:%S
+ * > %x 03/26/08 %m/%d/%y
+ * > %D 03/26/08 %m/%d/%y
+ * > %#c Wed Mar 26 15:31:00 2008 %a %b %e %H:%M:%S %Y
+ * > %v 3-Sep-2008 %e-%b-%Y
+ * > %R 15:31 %H:%M
+ * > %r 3:31:00 PM %I:%M:%S %p
+ * > == Characters ==
+ * > %n \n Newline
+ * > %t \t Tab
+ * > %% % Percent Symbol
+ */
+ $.jqplot.DateAxisRenderer = function() {
+ $.jqplot.LinearAxisRenderer.call(this);
+ this.date = new $.jsDate();
+ };
+
+ var second = 1000;
+ var minute = 60 * second;
+ var hour = 60 * minute;
+ var day = 24 * hour;
+ var week = 7 * day;
+
+ // these are less definitive
+ var month = 30.4368499 * day;
+ var year = 365.242199 * day;
+
+ var daysInMonths = [31,28,31,30,31,30,31,30,31,30,31,30];
+ // array of consistent nice intervals. Longer intervals
+ // will depend on days in month, days in year, etc.
+ var niceFormatStrings = ['%M:%S.%#N', '%M:%S.%#N', '%M:%S.%#N', '%M:%S', '%M:%S', '%M:%S', '%M:%S', '%H:%M:%S', '%H:%M:%S', '%H:%M', '%H:%M', '%H:%M', '%H:%M', '%H:%M', '%H:%M', '%a %H:%M', '%a %H:%M', '%b %e %H:%M', '%b %e %H:%M', '%b %e %H:%M', '%b %e %H:%M', '%v', '%v', '%v', '%v', '%v', '%v', '%v'];
+ var niceIntervals = [0.1*second, 0.2*second, 0.5*second, second, 2*second, 5*second, 10*second, 15*second, 30*second, minute, 2*minute, 5*minute, 10*minute, 15*minute, 30*minute, hour, 2*hour, 4*hour, 6*hour, 8*hour, 12*hour, day, 2*day, 3*day, 4*day, 5*day, week, 2*week];
+
+ var niceMonthlyIntervals = [];
+
+ function bestDateInterval(min, max, titarget) {
+ // iterate through niceIntervals to find one closest to titarget
+ var badness = Number.MAX_VALUE;
+ var temp, bestTi, bestfmt;
+ for (var i=0, l=niceIntervals.length; i < l; i++) {
+ temp = Math.abs(titarget - niceIntervals[i]);
+ if (temp < badness) {
+ badness = temp;
+ bestTi = niceIntervals[i];
+ bestfmt = niceFormatStrings[i];
+ }
+ }
+
+ return [bestTi, bestfmt];
+ }
+
+ $.jqplot.DateAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
+ $.jqplot.DateAxisRenderer.prototype.constructor = $.jqplot.DateAxisRenderer;
+
+ $.jqplot.DateTickFormatter = function(format, val) {
+ if (!format) {
+ format = '%Y/%m/%d';
+ }
+ return $.jsDate.strftime(val, format);
+ };
+
+ $.jqplot.DateAxisRenderer.prototype.init = function(options){
+ // prop: tickRenderer
+ // A class of a rendering engine for creating the ticks labels displayed on the plot,
+ // See <$.jqplot.AxisTickRenderer>.
+ // this.tickRenderer = $.jqplot.AxisTickRenderer;
+ // this.labelRenderer = $.jqplot.AxisLabelRenderer;
+ this.tickOptions.formatter = $.jqplot.DateTickFormatter;
+ // prop: tickInset
+ // Controls the amount to inset the first and last ticks from
+ // the edges of the grid, in multiples of the tick interval.
+ // 0 is no inset, 0.5 is one half a tick interval, 1 is a full
+ // tick interval, etc.
+ this.tickInset = 0;
+ // prop: drawBaseline
+ // True to draw the axis baseline.
+ this.drawBaseline = true;
+ // prop: baselineWidth
+ // width of the baseline in pixels.
+ this.baselineWidth = null;
+ // prop: baselineColor
+ // CSS color spec for the baseline.
+ this.baselineColor = null;
+ this.daTickInterval = null;
+ this._daTickInterval = null;
+
+ $.extend(true, this, options);
+
+ var db = this._dataBounds,
+ stats,
+ sum,
+ s,
+ d,
+ pd,
+ sd,
+ intv;
+
+ // Go through all the series attached to this axis and find
+ // the min/max bounds for this axis.
+ for (var i=0; i<this._series.length; i++) {
+ stats = {intervals:[], frequencies:{}, sortedIntervals:[], min:null, max:null, mean:null};
+ sum = 0;
+ s = this._series[i];
+ d = s.data;
+ pd = s._plotData;
+ sd = s._stackData;
+ intv = 0;
+
+ for (var j=0; j<d.length; j++) {
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ d[j][0] = new $.jsDate(d[j][0]).getTime();
+ pd[j][0] = new $.jsDate(d[j][0]).getTime();
+ sd[j][0] = new $.jsDate(d[j][0]).getTime();
+ if ((d[j][0] != null && d[j][0] < db.min) || db.min == null) {
+ db.min = d[j][0];
+ }
+ if ((d[j][0] != null && d[j][0] > db.max) || db.max == null) {
+ db.max = d[j][0];
+ }
+ if (j>0) {
+ intv = Math.abs(d[j][0] - d[j-1][0]);
+ stats.intervals.push(intv);
+ if (stats.frequencies.hasOwnProperty(intv)) {
+ stats.frequencies[intv] += 1;
+ }
+ else {
+ stats.frequencies[intv] = 1;
+ }
+ }
+ sum += intv;
+
+ }
+ else {
+ d[j][1] = new $.jsDate(d[j][1]).getTime();
+ pd[j][1] = new $.jsDate(d[j][1]).getTime();
+ sd[j][1] = new $.jsDate(d[j][1]).getTime();
+ if ((d[j][1] != null && d[j][1] < db.min) || db.min == null) {
+ db.min = d[j][1];
+ }
+ if ((d[j][1] != null && d[j][1] > db.max) || db.max == null) {
+ db.max = d[j][1];
+ }
+ if (j>0) {
+ intv = Math.abs(d[j][1] - d[j-1][1]);
+ stats.intervals.push(intv);
+ if (stats.frequencies.hasOwnProperty(intv)) {
+ stats.frequencies[intv] += 1;
+ }
+ else {
+ stats.frequencies[intv] = 1;
+ }
+ }
+ }
+ sum += intv;
+ }
+
+ if (s.renderer.bands) {
+ if (s.renderer.bands.hiData.length) {
+ var bd = s.renderer.bands.hiData;
+ for (var j=0, l=bd.length; j < l; j++) {
+ if (this.name === 'xaxis' || this.name === 'x2axis') {
+ bd[j][0] = new $.jsDate(bd[j][0]).getTime();
+ if ((bd[j][0] != null && bd[j][0] > db.max) || db.max == null) {
+ db.max = bd[j][0];
+ }
+ }
+ else {
+ bd[j][1] = new $.jsDate(bd[j][1]).getTime();
+ if ((bd[j][1] != null && bd[j][1] > db.max) || db.max == null) {
+ db.max = bd[j][1];
+ }
+ }
+ }
+ }
+ if (s.renderer.bands.lowData.length) {
+ var bd = s.renderer.bands.lowData;
+ for (var j=0, l=bd.length; j < l; j++) {
+ if (this.name === 'xaxis' || this.name === 'x2axis') {
+ bd[j][0] = new $.jsDate(bd[j][0]).getTime();
+ if ((bd[j][0] != null && bd[j][0] < db.min) || db.min == null) {
+ db.min = bd[j][0];
+ }
+ }
+ else {
+ bd[j][1] = new $.jsDate(bd[j][1]).getTime();
+ if ((bd[j][1] != null && bd[j][1] < db.min) || db.min == null) {
+ db.min = bd[j][1];
+ }
+ }
+ }
+ }
+ }
+
+ var tempf = 0,
+ tempn=0;
+ for (var n in stats.frequencies) {
+ stats.sortedIntervals.push({interval:n, frequency:stats.frequencies[n]});
+ }
+ stats.sortedIntervals.sort(function(a, b){
+ return b.frequency - a.frequency;
+ });
+
+ stats.min = $.jqplot.arrayMin(stats.intervals);
+ stats.max = $.jqplot.arrayMax(stats.intervals);
+ stats.mean = sum/d.length;
+ this._intervalStats.push(stats);
+ stats = sum = s = d = pd = sd = null;
+ }
+ db = null;
+
+ };
+
+ // called with scope of an axis
+ $.jqplot.DateAxisRenderer.prototype.reset = function() {
+ this.min = this._options.min;
+ this.max = this._options.max;
+ this.tickInterval = this._options.tickInterval;
+ this.numberTicks = this._options.numberTicks;
+ this._autoFormatString = '';
+ if (this._overrideFormatString && this.tickOptions && this.tickOptions.formatString) {
+ this.tickOptions.formatString = '';
+ }
+ this.daTickInterval = this._daTickInterval;
+ // this._ticks = this.__ticks;
+ };
+
+ $.jqplot.DateAxisRenderer.prototype.createTicks = function(plot) {
+ // we're are operating on an axis here
+ var ticks = this._ticks;
+ var userTicks = this.ticks;
+ var name = this.name;
+ // databounds were set on axis initialization.
+ var db = this._dataBounds;
+ var iv = this._intervalStats;
+ var dim = (this.name.charAt(0) === 'x') ? this._plotDimensions.width : this._plotDimensions.height;
+ var interval;
+ var min, max;
+ var pos1, pos2;
+ var tt, i;
+ var threshold = 30;
+ var insetMult = 1;
+
+ var tickInterval = this.tickInterval;
+
+ // if we already have ticks, use them.
+ // ticks must be in order of increasing value.
+
+ min = ((this.min != null) ? new $.jsDate(this.min).getTime() : db.min);
+ max = ((this.max != null) ? new $.jsDate(this.max).getTime() : db.max);
+
+ // see if we're zooming. if we are, don't use the min and max we're given,
+ // but compute some nice ones. They will be reset later.
+
+ var cursor = plot.plugins.cursor;
+
+ if (cursor && cursor._zoom && cursor._zoom.zooming) {
+ this.min = null;
+ this.max = null;
+ }
+
+ var range = max - min;
+
+ if (this.tickOptions == null || !this.tickOptions.formatString) {
+ this._overrideFormatString = true;
+ }
+
+ if (userTicks.length) {
+ // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed
+ for (i=0; i<userTicks.length; i++){
+ var ut = userTicks[i];
+ var t = new this.tickRenderer(this.tickOptions);
+ if (ut.constructor == Array) {
+ t.value = new $.jsDate(ut[0]).getTime();
+ t.label = ut[1];
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ t.setTick(t.value, this.name);
+ this._ticks.push(t);
+ }
+
+ else {
+ t.value = new $.jsDate(ut).getTime();
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ t.setTick(t.value, this.name);
+ this._ticks.push(t);
+ }
+ }
+ this.numberTicks = userTicks.length;
+ this.min = this._ticks[0].value;
+ this.max = this._ticks[this.numberTicks-1].value;
+ this.daTickInterval = [(this.max - this.min) / (this.numberTicks - 1)/1000, 'seconds'];
+ }
+
+ ////////
+ // We don't have any ticks yet, let's make some!
+ ////////
+
+ // special case when there is only one point, make three tick marks to center the point
+ else if (this.min == null && this.max == null && db.min == db.max)
+ {
+ var onePointOpts = $.extend(true, {}, this.tickOptions, {name: this.name, value: null});
+ var delta = 300000;
+ this.min = db.min - delta;
+ this.max = db.max + delta;
+ this.numberTicks = 3;
+
+ for(var i=this.min;i<=this.max;i+= delta)
+ {
+ onePointOpts.value = i;
+
+ var t = new this.tickRenderer(onePointOpts);
+
+ if (this._overrideFormatString && this._autoFormatString != '') {
+ t.formatString = this._autoFormatString;
+ }
+
+ t.showLabel = false;
+ t.showMark = false;
+
+ this._ticks.push(t);
+ }
+
+ if(this.showTicks) {
+ this._ticks[1].showLabel = true;
+ }
+ if(this.showTickMarks) {
+ this._ticks[1].showTickMarks = true;
+ }
+ }
+ // if user specified min and max are null, we set those to make best ticks.
+ else if (this.min == null && this.max == null) {
+
+ var opts = $.extend(true, {}, this.tickOptions, {name: this.name, value: null});
+
+ // want to find a nice interval
+ var nttarget,
+ titarget;
+
+ // if no tickInterval or numberTicks options specified, make a good guess.
+ if (!this.tickInterval && !this.numberTicks) {
+ var tdim = Math.max(dim, threshold+1);
+ // how many ticks to put on the axis?
+ // date labels tend to be long. If ticks not rotated,
+ // don't use too many and have a high spacing factor.
+ // If we are rotating ticks, use a lower factor.
+ var spacingFactor = 115;
+ if (this.tickRenderer === $.jqplot.CanvasAxisTickRenderer && this.tickOptions.angle) {
+ spacingFactor = 115 - 40 * Math.abs(Math.sin(this.tickOptions.angle/180*Math.PI));
+ }
+
+ nttarget = Math.ceil((tdim-threshold)/spacingFactor + 1);
+ titarget = (max - min) / (nttarget - 1);
+ }
+
+ // If tickInterval is specified, we'll try to honor it.
+ // Not gauranteed to get this interval, but we'll get as close as
+ // we can.
+ // tickInterval will be used before numberTicks, that is if
+ // both are specified, numberTicks will be ignored.
+ else if (this.tickInterval) {
+ titarget = this.tickInterval;
+ }
+
+ // if numberTicks specified, try to honor it.
+ // Not gauranteed, but will try to get close.
+ else if (this.numberTicks) {
+ nttarget = this.numberTicks;
+ titarget = (max - min) / (nttarget - 1);
+ }
+
+ // If we can use an interval of 2 weeks or less, pick best one
+ if (titarget <= 19*day) {
+ var ret = bestDateInterval(min, max, titarget);
+ var tempti = ret[0];
+ this._autoFormatString = ret[1];
+
+ min = Math.floor(min/tempti) * tempti;
+ min = new $.jsDate(min);
+ min = min.getTime() + min.getUtcOffset();
+
+ nttarget = Math.ceil((max - min) / tempti) + 1;
+ this.min = min;
+ this.max = min + (nttarget - 1) * tempti;
+
+ // if max is less than max, add an interval
+ if (this.max < max) {
+ this.max += tempti;
+ nttarget += 1;
+ }
+ this.tickInterval = tempti;
+ this.numberTicks = nttarget;
+
+ for (var i=0; i<nttarget; i++) {
+ opts.value = this.min + i * tempti;
+ t = new this.tickRenderer(opts);
+
+ if (this._overrideFormatString && this._autoFormatString != '') {
+ t.formatString = this._autoFormatString;
+ }
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ this._ticks.push(t);
+ }
+
+ insetMult = this.tickInterval;
+ }
+
+ // should we use a monthly interval?
+ else if (titarget <= 9 * month) {
+
+ this._autoFormatString = '%v';
+
+ // how many months in an interval?
+ var intv = Math.round(titarget/month);
+ if (intv < 1) {
+ intv = 1;
+ }
+ else if (intv > 6) {
+ intv = 6;
+ }
+
+ // figure out the starting month and ending month.
+ var mstart = new $.jsDate(min).setDate(1).setHours(0,0,0,0);
+
+ // See if max ends exactly on a month
+ var tempmend = new $.jsDate(max);
+ var mend = new $.jsDate(max).setDate(1).setHours(0,0,0,0);
+
+ if (tempmend.getTime() !== mend.getTime()) {
+ mend = mend.add(1, 'month');
+ }
+
+ var nmonths = mend.diff(mstart, 'month');
+
+ nttarget = Math.ceil(nmonths/intv) + 1;
+
+ this.min = mstart.getTime();
+ this.max = mstart.clone().add((nttarget - 1) * intv, 'month').getTime();
+ this.numberTicks = nttarget;
+
+ for (var i=0; i<nttarget; i++) {
+ if (i === 0) {
+ opts.value = mstart.getTime();
+ }
+ else {
+ opts.value = mstart.add(intv, 'month').getTime();
+ }
+ t = new this.tickRenderer(opts);
+
+ if (this._overrideFormatString && this._autoFormatString != '') {
+ t.formatString = this._autoFormatString;
+ }
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ this._ticks.push(t);
+ }
+
+ insetMult = intv * month;
+ }
+
+ // use yearly intervals
+ else {
+
+ this._autoFormatString = '%v';
+
+ // how many years in an interval?
+ var intv = Math.round(titarget/year);
+ if (intv < 1) {
+ intv = 1;
+ }
+
+ // figure out the starting and ending years.
+ var mstart = new $.jsDate(min).setMonth(0, 1).setHours(0,0,0,0);
+ var mend = new $.jsDate(max).add(1, 'year').setMonth(0, 1).setHours(0,0,0,0);
+
+ var nyears = mend.diff(mstart, 'year');
+
+ nttarget = Math.ceil(nyears/intv) + 1;
+
+ this.min = mstart.getTime();
+ this.max = mstart.clone().add((nttarget - 1) * intv, 'year').getTime();
+ this.numberTicks = nttarget;
+
+ for (var i=0; i<nttarget; i++) {
+ if (i === 0) {
+ opts.value = mstart.getTime();
+ }
+ else {
+ opts.value = mstart.add(intv, 'year').getTime();
+ }
+ t = new this.tickRenderer(opts);
+
+ if (this._overrideFormatString && this._autoFormatString != '') {
+ t.formatString = this._autoFormatString;
+ }
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ this._ticks.push(t);
+ }
+
+ insetMult = intv * year;
+ }
+ }
+
+ ////////
+ // Some option(s) specified, work around that.
+ ////////
+
+ else {
+ if (name == 'xaxis' || name == 'x2axis') {
+ dim = this._plotDimensions.width;
+ }
+ else {
+ dim = this._plotDimensions.height;
+ }
+
+ // if min, max and number of ticks specified, user can't specify interval.
+ if (this.min != null && this.max != null && this.numberTicks != null) {
+ this.tickInterval = null;
+ }
+
+ // if user specified a tick interval, convert to usable.
+ if (this.tickInterval != null)
+ {
+ // if interval is a number or can be converted to one, use it.
+ // Assume it is in SECONDS!!!
+ if (Number(this.tickInterval)) {
+ this.daTickInterval = [Number(this.tickInterval), 'seconds'];
+ }
+ // else, parse out something we can build from.
+ else if (typeof this.tickInterval == "string") {
+ var parts = this.tickInterval.split(' ');
+ if (parts.length == 1) {
+ this.daTickInterval = [1, parts[0]];
+ }
+ else if (parts.length == 2) {
+ this.daTickInterval = [parts[0], parts[1]];
+ }
+ }
+ }
+
+ // if min and max are same, space them out a bit
+ if (min == max) {
+ var adj = 24*60*60*500; // 1/2 day
+ min -= adj;
+ max += adj;
+ }
+
+ range = max - min;
+
+ var optNumTicks = 2 + parseInt(Math.max(0, dim-100)/100, 10);
+
+
+ var rmin, rmax;
+
+ rmin = (this.min != null) ? new $.jsDate(this.min).getTime() : min - range/2*(this.padMin - 1);
+ rmax = (this.max != null) ? new $.jsDate(this.max).getTime() : max + range/2*(this.padMax - 1);
+ this.min = rmin;
+ this.max = rmax;
+ range = this.max - this.min;
+
+ if (this.numberTicks == null){
+ // if tickInterval is specified by user, we will ignore computed maximum.
+ // max will be equal or greater to fit even # of ticks.
+ if (this.daTickInterval != null) {
+ var nc = new $.jsDate(this.max).diff(this.min, this.daTickInterval[1], true);
+ this.numberTicks = Math.ceil(nc/this.daTickInterval[0]) +1;
+ // this.max = new $.jsDate(this.min).add(this.numberTicks-1, this.daTickInterval[1]).getTime();
+ this.max = new $.jsDate(this.min).add((this.numberTicks-1) * this.daTickInterval[0], this.daTickInterval[1]).getTime();
+ }
+ else if (dim > 200) {
+ this.numberTicks = parseInt(3+(dim-200)/100, 10);
+ }
+ else {
+ this.numberTicks = 2;
+ }
+ }
+
+ insetMult = range / (this.numberTicks-1)/1000;
+
+ if (this.daTickInterval == null) {
+ this.daTickInterval = [insetMult, 'seconds'];
+ }
+
+
+ for (var i=0; i<this.numberTicks; i++){
+ var min = new $.jsDate(this.min);
+ tt = min.add(i*this.daTickInterval[0], this.daTickInterval[1]).getTime();
+ var t = new this.tickRenderer(this.tickOptions);
+ // var t = new $.jqplot.AxisTickRenderer(this.tickOptions);
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ t.setTick(tt, this.name);
+ this._ticks.push(t);
+ }
+ }
+
+ if (this.tickInset) {
+ this.min = this.min - this.tickInset * insetMult;
+ this.max = this.max + this.tickInset * insetMult;
+ }
+
+ if (this._daTickInterval == null) {
+ this._daTickInterval = this.daTickInterval;
+ }
+
+ ticks = null;
+ };
+
+})(jQuery);
+
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.min.js
new file mode 100644
index 00000000..756f5095
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(h){h.jqplot.DateAxisRenderer=function(){h.jqplot.LinearAxisRenderer.call(this);this.date=new h.jsDate()};var c=1000;var e=60*c;var f=60*e;var l=24*f;var b=7*l;var j=30.4368499*l;var k=365.242199*l;var g=[31,28,31,30,31,30,31,30,31,30,31,30];var i=["%M:%S.%#N","%M:%S.%#N","%M:%S.%#N","%M:%S","%M:%S","%M:%S","%M:%S","%H:%M:%S","%H:%M:%S","%H:%M","%H:%M","%H:%M","%H:%M","%H:%M","%H:%M","%a %H:%M","%a %H:%M","%b %e %H:%M","%b %e %H:%M","%b %e %H:%M","%b %e %H:%M","%v","%v","%v","%v","%v","%v","%v"];var m=[0.1*c,0.2*c,0.5*c,c,2*c,5*c,10*c,15*c,30*c,e,2*e,5*e,10*e,15*e,30*e,f,2*f,4*f,6*f,8*f,12*f,l,2*l,3*l,4*l,5*l,b,2*b];var d=[];function a(p,s,t){var o=Number.MAX_VALUE;var u,r,v;for(var q=0,n=m.length;q<n;q++){u=Math.abs(t-m[q]);if(u<o){o=u;r=m[q];v=i[q]}}return[r,v]}h.jqplot.DateAxisRenderer.prototype=new h.jqplot.LinearAxisRenderer();h.jqplot.DateAxisRenderer.prototype.constructor=h.jqplot.DateAxisRenderer;h.jqplot.DateTickFormatter=function(n,o){if(!n){n="%Y/%m/%d"}return h.jsDate.strftime(o,n)};h.jqplot.DateAxisRenderer.prototype.init=function(E){this.tickOptions.formatter=h.jqplot.DateTickFormatter;this.tickInset=0;this.drawBaseline=true;this.baselineWidth=null;this.baselineColor=null;this.daTickInterval=null;this._daTickInterval=null;h.extend(true,this,E);var C=this._dataBounds,u,x,D,y,A,z,o;for(var t=0;t<this._series.length;t++){u={intervals:[],frequencies:{},sortedIntervals:[],min:null,max:null,mean:null};x=0;D=this._series[t];y=D.data;A=D._plotData;z=D._stackData;o=0;for(var r=0;r<y.length;r++){if(this.name=="xaxis"||this.name=="x2axis"){y[r][0]=new h.jsDate(y[r][0]).getTime();A[r][0]=new h.jsDate(y[r][0]).getTime();z[r][0]=new h.jsDate(y[r][0]).getTime();if((y[r][0]!=null&&y[r][0]<C.min)||C.min==null){C.min=y[r][0]}if((y[r][0]!=null&&y[r][0]>C.max)||C.max==null){C.max=y[r][0]}if(r>0){o=Math.abs(y[r][0]-y[r-1][0]);u.intervals.push(o);if(u.frequencies.hasOwnProperty(o)){u.frequencies[o]+=1}else{u.frequencies[o]=1}}x+=o}else{y[r][1]=new h.jsDate(y[r][1]).getTime();A[r][1]=new h.jsDate(y[r][1]).getTime();z[r][1]=new h.jsDate(y[r][1]).getTime();if((y[r][1]!=null&&y[r][1]<C.min)||C.min==null){C.min=y[r][1]}if((y[r][1]!=null&&y[r][1]>C.max)||C.max==null){C.max=y[r][1]}if(r>0){o=Math.abs(y[r][1]-y[r-1][1]);u.intervals.push(o);if(u.frequencies.hasOwnProperty(o)){u.frequencies[o]+=1}else{u.frequencies[o]=1}}}x+=o}if(D.renderer.bands){if(D.renderer.bands.hiData.length){var w=D.renderer.bands.hiData;for(var r=0,q=w.length;r<q;r++){if(this.name==="xaxis"||this.name==="x2axis"){w[r][0]=new h.jsDate(w[r][0]).getTime();if((w[r][0]!=null&&w[r][0]>C.max)||C.max==null){C.max=w[r][0]}}else{w[r][1]=new h.jsDate(w[r][1]).getTime();if((w[r][1]!=null&&w[r][1]>C.max)||C.max==null){C.max=w[r][1]}}}}if(D.renderer.bands.lowData.length){var w=D.renderer.bands.lowData;for(var r=0,q=w.length;r<q;r++){if(this.name==="xaxis"||this.name==="x2axis"){w[r][0]=new h.jsDate(w[r][0]).getTime();if((w[r][0]!=null&&w[r][0]<C.min)||C.min==null){C.min=w[r][0]}}else{w[r][1]=new h.jsDate(w[r][1]).getTime();if((w[r][1]!=null&&w[r][1]<C.min)||C.min==null){C.min=w[r][1]}}}}}var B=0,v=0;for(var p in u.frequencies){u.sortedIntervals.push({interval:p,frequency:u.frequencies[p]})}u.sortedIntervals.sort(function(s,n){return n.frequency-s.frequency});u.min=h.jqplot.arrayMin(u.intervals);u.max=h.jqplot.arrayMax(u.intervals);u.mean=x/y.length;this._intervalStats.push(u);u=x=D=y=A=z=null}C=null};h.jqplot.DateAxisRenderer.prototype.reset=function(){this.min=this._options.min;this.max=this._options.max;this.tickInterval=this._options.tickInterval;this.numberTicks=this._options.numberTicks;this._autoFormatString="";if(this._overrideFormatString&&this.tickOptions&&this.tickOptions.formatString){this.tickOptions.formatString=""}this.daTickInterval=this._daTickInterval};h.jqplot.DateAxisRenderer.prototype.createTicks=function(p){var W=this._ticks;var L=this.ticks;var F=this.name;var H=this._dataBounds;var M=this._intervalStats;var n=(this.name.charAt(0)==="x")?this._plotDimensions.width:this._plotDimensions.height;var w;var ad,J;var y,x;var ac,Z;var s=30;var O=1;var v=this.tickInterval;ad=((this.min!=null)?new h.jsDate(this.min).getTime():H.min);J=((this.max!=null)?new h.jsDate(this.max).getTime():H.max);var A=p.plugins.cursor;if(A&&A._zoom&&A._zoom.zooming){this.min=null;this.max=null}var B=J-ad;if(this.tickOptions==null||!this.tickOptions.formatString){this._overrideFormatString=true}if(L.length){for(Z=0;Z<L.length;Z++){var P=L[Z];var X=new this.tickRenderer(this.tickOptions);if(P.constructor==Array){X.value=new h.jsDate(P[0]).getTime();X.label=P[1];if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}X.setTick(X.value,this.name);this._ticks.push(X)}else{X.value=new h.jsDate(P).getTime();if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}X.setTick(X.value,this.name);this._ticks.push(X)}}this.numberTicks=L.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value;this.daTickInterval=[(this.max-this.min)/(this.numberTicks-1)/1000,"seconds"]}else{if(this.min==null&&this.max==null&&H.min==H.max){var E=h.extend(true,{},this.tickOptions,{name:this.name,value:null});var S=300000;this.min=H.min-S;this.max=H.max+S;this.numberTicks=3;for(var Z=this.min;Z<=this.max;Z+=S){E.value=Z;var X=new this.tickRenderer(E);if(this._overrideFormatString&&this._autoFormatString!=""){X.formatString=this._autoFormatString}X.showLabel=false;X.showMark=false;this._ticks.push(X)}if(this.showTicks){this._ticks[1].showLabel=true}if(this.showTickMarks){this._ticks[1].showTickMarks=true}}else{if(this.min==null&&this.max==null){var N=h.extend(true,{},this.tickOptions,{name:this.name,value:null});var ab,I;if(!this.tickInterval&&!this.numberTicks){var R=Math.max(n,s+1);var Y=115;if(this.tickRenderer===h.jqplot.CanvasAxisTickRenderer&&this.tickOptions.angle){Y=115-40*Math.abs(Math.sin(this.tickOptions.angle/180*Math.PI))}ab=Math.ceil((R-s)/Y+1);I=(J-ad)/(ab-1)}else{if(this.tickInterval){I=this.tickInterval}else{if(this.numberTicks){ab=this.numberTicks;I=(J-ad)/(ab-1)}}}if(I<=19*l){var Q=a(ad,J,I);var r=Q[0];this._autoFormatString=Q[1];ad=Math.floor(ad/r)*r;ad=new h.jsDate(ad);ad=ad.getTime()+ad.getUtcOffset();ab=Math.ceil((J-ad)/r)+1;this.min=ad;this.max=ad+(ab-1)*r;if(this.max<J){this.max+=r;ab+=1}this.tickInterval=r;this.numberTicks=ab;for(var Z=0;Z<ab;Z++){N.value=this.min+Z*r;X=new this.tickRenderer(N);if(this._overrideFormatString&&this._autoFormatString!=""){X.formatString=this._autoFormatString}if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}this._ticks.push(X)}O=this.tickInterval}else{if(I<=9*j){this._autoFormatString="%v";var D=Math.round(I/j);if(D<1){D=1}else{if(D>6){D=6}}var U=new h.jsDate(ad).setDate(1).setHours(0,0,0,0);var q=new h.jsDate(J);var z=new h.jsDate(J).setDate(1).setHours(0,0,0,0);if(q.getTime()!==z.getTime()){z=z.add(1,"month")}var T=z.diff(U,"month");ab=Math.ceil(T/D)+1;this.min=U.getTime();this.max=U.clone().add((ab-1)*D,"month").getTime();this.numberTicks=ab;for(var Z=0;Z<ab;Z++){if(Z===0){N.value=U.getTime()}else{N.value=U.add(D,"month").getTime()}X=new this.tickRenderer(N);if(this._overrideFormatString&&this._autoFormatString!=""){X.formatString=this._autoFormatString}if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}this._ticks.push(X)}O=D*j}else{this._autoFormatString="%v";var D=Math.round(I/k);if(D<1){D=1}var U=new h.jsDate(ad).setMonth(0,1).setHours(0,0,0,0);var z=new h.jsDate(J).add(1,"year").setMonth(0,1).setHours(0,0,0,0);var K=z.diff(U,"year");ab=Math.ceil(K/D)+1;this.min=U.getTime();this.max=U.clone().add((ab-1)*D,"year").getTime();this.numberTicks=ab;for(var Z=0;Z<ab;Z++){if(Z===0){N.value=U.getTime()}else{N.value=U.add(D,"year").getTime()}X=new this.tickRenderer(N);if(this._overrideFormatString&&this._autoFormatString!=""){X.formatString=this._autoFormatString}if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}this._ticks.push(X)}O=D*k}}}else{if(F=="xaxis"||F=="x2axis"){n=this._plotDimensions.width}else{n=this._plotDimensions.height}if(this.min!=null&&this.max!=null&&this.numberTicks!=null){this.tickInterval=null}if(this.tickInterval!=null){if(Number(this.tickInterval)){this.daTickInterval=[Number(this.tickInterval),"seconds"]}else{if(typeof this.tickInterval=="string"){var aa=this.tickInterval.split(" ");if(aa.length==1){this.daTickInterval=[1,aa[0]]}else{if(aa.length==2){this.daTickInterval=[aa[0],aa[1]]}}}}}if(ad==J){var o=24*60*60*500;ad-=o;J+=o}B=J-ad;var G=2+parseInt(Math.max(0,n-100)/100,10);var V,C;V=(this.min!=null)?new h.jsDate(this.min).getTime():ad-B/2*(this.padMin-1);C=(this.max!=null)?new h.jsDate(this.max).getTime():J+B/2*(this.padMax-1);this.min=V;this.max=C;B=this.max-this.min;if(this.numberTicks==null){if(this.daTickInterval!=null){var u=new h.jsDate(this.max).diff(this.min,this.daTickInterval[1],true);this.numberTicks=Math.ceil(u/this.daTickInterval[0])+1;this.max=new h.jsDate(this.min).add((this.numberTicks-1)*this.daTickInterval[0],this.daTickInterval[1]).getTime()}else{if(n>200){this.numberTicks=parseInt(3+(n-200)/100,10)}else{this.numberTicks=2}}}O=B/(this.numberTicks-1)/1000;if(this.daTickInterval==null){this.daTickInterval=[O,"seconds"]}for(var Z=0;Z<this.numberTicks;Z++){var ad=new h.jsDate(this.min);ac=ad.add(Z*this.daTickInterval[0],this.daTickInterval[1]).getTime();var X=new this.tickRenderer(this.tickOptions);if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}X.setTick(ac,this.name);this._ticks.push(X)}}}}if(this.tickInset){this.min=this.min-this.tickInset*O;this.max=this.max+this.tickInset*O}if(this._daTickInterval==null){this._daTickInterval=this.daTickInterval}W=null}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.js
new file mode 100644
index 00000000..621b92ec
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.js
@@ -0,0 +1,805 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ /**
+ * Class: $.jqplot.DonutRenderer
+ * Plugin renderer to draw a donut chart.
+ * x values, if present, will be used as slice labels.
+ * y values give slice size.
+ *
+ * To use this renderer, you need to include the
+ * donut renderer plugin, for example:
+ *
+ * > <script type="text/javascript" src="plugins/jqplot.donutRenderer.js"></script>
+ *
+ * Properties described here are passed into the $.jqplot function
+ * as options on the series renderer. For example:
+ *
+ * > plot2 = $.jqplot('chart2', [s1, s2], {
+ * > seriesDefaults: {
+ * > renderer:$.jqplot.DonutRenderer,
+ * > rendererOptions:{
+ * > sliceMargin: 2,
+ * > innerDiameter: 110,
+ * > startAngle: -90
+ * > }
+ * > }
+ * > });
+ *
+ * A donut plot will trigger events on the plot target
+ * according to user interaction. All events return the event object,
+ * the series index, the point (slice) index, and the point data for
+ * the appropriate slice.
+ *
+ * 'jqplotDataMouseOver' - triggered when user mouseing over a slice.
+ * 'jqplotDataHighlight' - triggered the first time user mouses over a slice,
+ * if highlighting is enabled.
+ * 'jqplotDataUnhighlight' - triggered when a user moves the mouse out of
+ * a highlighted slice.
+ * 'jqplotDataClick' - triggered when the user clicks on a slice.
+ * 'jqplotDataRightClick' - tiggered when the user right clicks on a slice if
+ * the "captureRightClick" option is set to true on the plot.
+ */
+ $.jqplot.DonutRenderer = function(){
+ $.jqplot.LineRenderer.call(this);
+ };
+
+ $.jqplot.DonutRenderer.prototype = new $.jqplot.LineRenderer();
+ $.jqplot.DonutRenderer.prototype.constructor = $.jqplot.DonutRenderer;
+
+ // called with scope of a series
+ $.jqplot.DonutRenderer.prototype.init = function(options, plot) {
+ // Group: Properties
+ //
+ // prop: diameter
+ // Outer diameter of the donut, auto computed by default
+ this.diameter = null;
+ // prop: innerDiameter
+ // Inner diameter of the donut, auto calculated by default.
+ // If specified will override thickness value.
+ this.innerDiameter = null;
+ // prop: thickness
+ // thickness of the donut, auto computed by default
+ // Overridden by if innerDiameter is specified.
+ this.thickness = null;
+ // prop: padding
+ // padding between the donut and plot edges, legend, etc.
+ this.padding = 20;
+ // prop: sliceMargin
+ // angular spacing between donut slices in degrees.
+ this.sliceMargin = 0;
+ // prop: ringMargin
+ // pixel distance between rings, or multiple series in a donut plot.
+ // null will compute ringMargin based on sliceMargin.
+ this.ringMargin = null;
+ // prop: fill
+ // true or false, wether to fil the slices.
+ this.fill = true;
+ // prop: shadowOffset
+ // offset of the shadow from the slice and offset of
+ // each succesive stroke of the shadow from the last.
+ this.shadowOffset = 2;
+ // prop: shadowAlpha
+ // transparency of the shadow (0 = transparent, 1 = opaque)
+ this.shadowAlpha = 0.07;
+ // prop: shadowDepth
+ // number of strokes to apply to the shadow,
+ // each stroke offset shadowOffset from the last.
+ this.shadowDepth = 5;
+ // prop: highlightMouseOver
+ // True to highlight slice when moused over.
+ // This must be false to enable highlightMouseDown to highlight when clicking on a slice.
+ this.highlightMouseOver = true;
+ // prop: highlightMouseDown
+ // True to highlight when a mouse button is pressed over a slice.
+ // This will be disabled if highlightMouseOver is true.
+ this.highlightMouseDown = false;
+ // prop: highlightColors
+ // an array of colors to use when highlighting a slice.
+ this.highlightColors = [];
+ // prop: dataLabels
+ // Either 'label', 'value', 'percent' or an array of labels to place on the pie slices.
+ // Defaults to percentage of each pie slice.
+ this.dataLabels = 'percent';
+ // prop: showDataLabels
+ // true to show data labels on slices.
+ this.showDataLabels = false;
+ // prop: dataLabelFormatString
+ // Format string for data labels. If none, '%s' is used for "label" and for arrays, '%d' for value and '%d%%' for percentage.
+ this.dataLabelFormatString = null;
+ // prop: dataLabelThreshold
+ // Threshhold in percentage (0 - 100) of pie area, below which no label will be displayed.
+ // This applies to all label types, not just to percentage labels.
+ this.dataLabelThreshold = 3;
+ // prop: dataLabelPositionFactor
+ // A Multiplier (0-1) of the pie radius which controls position of label on slice.
+ // Increasing will slide label toward edge of pie, decreasing will slide label toward center of pie.
+ this.dataLabelPositionFactor = 0.4;
+ // prop: dataLabelNudge
+ // Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
+ this.dataLabelNudge = 0;
+ // prop: startAngle
+ // Angle to start drawing donut in degrees.
+ // According to orientation of canvas coordinate system:
+ // 0 = on the positive x axis
+ // -90 = on the positive y axis.
+ // 90 = on the negaive y axis.
+ // 180 or - 180 = on the negative x axis.
+ this.startAngle = 0;
+ this.tickRenderer = $.jqplot.DonutTickRenderer;
+ // Used as check for conditions where donut shouldn't be drawn.
+ this._drawData = true;
+ this._type = 'donut';
+
+ // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
+ if (options.highlightMouseDown && options.highlightMouseOver == null) {
+ options.highlightMouseOver = false;
+ }
+
+ $.extend(true, this, options);
+ if (this.diameter != null) {
+ this.diameter = this.diameter - this.sliceMargin;
+ }
+ this._diameter = null;
+ this._innerDiameter = null;
+ this._radius = null;
+ this._innerRadius = null;
+ this._thickness = null;
+ // references to the previous series in the plot to properly calculate diameters
+ // and thicknesses of nested rings.
+ this._previousSeries = [];
+ this._numberSeries = 1;
+ // array of [start,end] angles arrays, one for each slice. In radians.
+ this._sliceAngles = [];
+ // index of the currenty highlighted point, if any
+ this._highlightedPoint = null;
+
+ // set highlight colors if none provided
+ if (this.highlightColors.length == 0) {
+ for (var i=0; i<this.seriesColors.length; i++){
+ var rgba = $.jqplot.getColorComponents(this.seriesColors[i]);
+ var newrgb = [rgba[0], rgba[1], rgba[2]];
+ var sum = newrgb[0] + newrgb[1] + newrgb[2];
+ for (var j=0; j<3; j++) {
+ // when darkening, lowest color component can be is 60.
+ newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]);
+ newrgb[j] = parseInt(newrgb[j], 10);
+ }
+ this.highlightColors.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')');
+ }
+ }
+
+ plot.postParseOptionsHooks.addOnce(postParseOptions);
+ plot.postInitHooks.addOnce(postInit);
+ plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
+ plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
+ plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
+ plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
+ plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick);
+ plot.postDrawHooks.addOnce(postPlotDraw);
+
+
+ };
+
+ $.jqplot.DonutRenderer.prototype.setGridData = function(plot) {
+ // set gridData property. This will hold angle in radians of each data point.
+ var stack = [];
+ var td = [];
+ var sa = this.startAngle/180*Math.PI;
+ var tot = 0;
+ // don't know if we have any valid data yet, so set plot to not draw.
+ this._drawData = false;
+ for (var i=0; i<this.data.length; i++){
+ if (this.data[i][1] != 0) {
+ // we have data, O.K. to draw.
+ this._drawData = true;
+ }
+ stack.push(this.data[i][1]);
+ td.push([this.data[i][0]]);
+ if (i>0) {
+ stack[i] += stack[i-1];
+ }
+ tot += this.data[i][1];
+ }
+ var fact = Math.PI*2/stack[stack.length - 1];
+
+ for (var i=0; i<stack.length; i++) {
+ td[i][1] = stack[i] * fact;
+ td[i][2] = this.data[i][1]/tot;
+ }
+ this.gridData = td;
+ };
+
+ $.jqplot.DonutRenderer.prototype.makeGridData = function(data, plot) {
+ var stack = [];
+ var td = [];
+ var tot = 0;
+ var sa = this.startAngle/180*Math.PI;
+ // don't know if we have any valid data yet, so set plot to not draw.
+ this._drawData = false;
+ for (var i=0; i<data.length; i++){
+ if (this.data[i][1] != 0) {
+ // we have data, O.K. to draw.
+ this._drawData = true;
+ }
+ stack.push(data[i][1]);
+ td.push([data[i][0]]);
+ if (i>0) {
+ stack[i] += stack[i-1];
+ }
+ tot += data[i][1];
+ }
+ var fact = Math.PI*2/stack[stack.length - 1];
+
+ for (var i=0; i<stack.length; i++) {
+ td[i][1] = stack[i] * fact;
+ td[i][2] = data[i][1]/tot;
+ }
+ return td;
+ };
+
+ $.jqplot.DonutRenderer.prototype.drawSlice = function (ctx, ang1, ang2, color, isShadow) {
+ var r = this._diameter / 2;
+ var ri = r - this._thickness;
+ var fill = this.fill;
+ // var lineWidth = this.lineWidth;
+ ctx.save();
+ ctx.translate(this._center[0], this._center[1]);
+ // ctx.translate(this.sliceMargin*Math.cos((ang1+ang2)/2), this.sliceMargin*Math.sin((ang1+ang2)/2));
+
+ if (isShadow) {
+ for (var i=0; i<this.shadowDepth; i++) {
+ ctx.save();
+ ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));
+ doDraw();
+ }
+ }
+
+ else {
+ doDraw();
+ }
+
+ function doDraw () {
+ // Fix for IE and Chrome that can't seem to draw circles correctly.
+ // ang2 should always be <= 2 pi since that is the way the data is converted.
+ if (ang2 > 6.282 + this.startAngle) {
+ ang2 = 6.282 + this.startAngle;
+ if (ang1 > ang2) {
+ ang1 = 6.281 + this.startAngle;
+ }
+ }
+ // Fix for IE, where it can't seem to handle 0 degree angles. Also avoids
+ // ugly line on unfilled donuts.
+ if (ang1 >= ang2) {
+ return;
+ }
+ ctx.beginPath();
+ ctx.fillStyle = color;
+ ctx.strokeStyle = color;
+ // ctx.lineWidth = lineWidth;
+ ctx.arc(0, 0, r, ang1, ang2, false);
+ ctx.lineTo(ri*Math.cos(ang2), ri*Math.sin(ang2));
+ ctx.arc(0,0, ri, ang2, ang1, true);
+ ctx.closePath();
+ if (fill) {
+ ctx.fill();
+ }
+ else {
+ ctx.stroke();
+ }
+ }
+
+ if (isShadow) {
+ for (var i=0; i<this.shadowDepth; i++) {
+ ctx.restore();
+ }
+ }
+
+ ctx.restore();
+ };
+
+ // called with scope of series
+ $.jqplot.DonutRenderer.prototype.draw = function (ctx, gd, options, plot) {
+ var i;
+ var opts = (options != undefined) ? options : {};
+ // offset and direction of offset due to legend placement
+ var offx = 0;
+ var offy = 0;
+ var trans = 1;
+ // var colorGenerator = new this.colorGenerator(this.seriesColors);
+ if (options.legendInfo && options.legendInfo.placement == 'insideGrid') {
+ var li = options.legendInfo;
+ switch (li.location) {
+ case 'nw':
+ offx = li.width + li.xoffset;
+ break;
+ case 'w':
+ offx = li.width + li.xoffset;
+ break;
+ case 'sw':
+ offx = li.width + li.xoffset;
+ break;
+ case 'ne':
+ offx = li.width + li.xoffset;
+ trans = -1;
+ break;
+ case 'e':
+ offx = li.width + li.xoffset;
+ trans = -1;
+ break;
+ case 'se':
+ offx = li.width + li.xoffset;
+ trans = -1;
+ break;
+ case 'n':
+ offy = li.height + li.yoffset;
+ break;
+ case 's':
+ offy = li.height + li.yoffset;
+ trans = -1;
+ break;
+ default:
+ break;
+ }
+ }
+
+ var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
+ var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
+ var fill = (opts.fill != undefined) ? opts.fill : this.fill;
+ var cw = ctx.canvas.width;
+ var ch = ctx.canvas.height;
+ var w = cw - offx - 2 * this.padding;
+ var h = ch - offy - 2 * this.padding;
+ var mindim = Math.min(w,h);
+ var d = mindim;
+ var ringmargin = (this.ringMargin == null) ? this.sliceMargin * 2.0 : this.ringMargin;
+
+ for (var i=0; i<this._previousSeries.length; i++) {
+ d -= 2.0 * this._previousSeries[i]._thickness + 2.0 * ringmargin;
+ }
+ this._diameter = this.diameter || d;
+ if (this.innerDiameter != null) {
+ var od = (this._numberSeries > 1 && this.index > 0) ? this._previousSeries[0]._diameter : this._diameter;
+ this._thickness = this.thickness || (od - this.innerDiameter - 2.0*ringmargin*this._numberSeries) / this._numberSeries/2.0;
+ }
+ else {
+ this._thickness = this.thickness || mindim / 2 / (this._numberSeries + 1) * 0.85;
+ }
+
+ var r = this._radius = this._diameter/2;
+ this._innerRadius = this._radius - this._thickness;
+ var sa = this.startAngle / 180 * Math.PI;
+ this._center = [(cw - trans * offx)/2 + trans * offx, (ch - trans*offy)/2 + trans * offy];
+
+ if (this.shadow) {
+ var shadowColor = 'rgba(0,0,0,'+this.shadowAlpha+')';
+ for (var i=0; i<gd.length; i++) {
+ var ang1 = (i == 0) ? sa : gd[i-1][1] + sa;
+ // Adjust ang1 and ang2 for sliceMargin
+ ang1 += this.sliceMargin/180*Math.PI;
+ this.renderer.drawSlice.call (this, ctx, ang1, gd[i][1]+sa, shadowColor, true);
+ }
+
+ }
+ for (var i=0; i<gd.length; i++) {
+ var ang1 = (i == 0) ? sa : gd[i-1][1] + sa;
+ // Adjust ang1 and ang2 for sliceMargin
+ ang1 += this.sliceMargin/180*Math.PI;
+ var ang2 = gd[i][1] + sa;
+ this._sliceAngles.push([ang1, ang2]);
+ this.renderer.drawSlice.call (this, ctx, ang1, ang2, this.seriesColors[i], false);
+
+ if (this.showDataLabels && gd[i][2]*100 >= this.dataLabelThreshold) {
+ var fstr, avgang = (ang1+ang2)/2, label;
+
+ if (this.dataLabels == 'label') {
+ fstr = this.dataLabelFormatString || '%s';
+ label = $.jqplot.sprintf(fstr, gd[i][0]);
+ }
+ else if (this.dataLabels == 'value') {
+ fstr = this.dataLabelFormatString || '%d';
+ label = $.jqplot.sprintf(fstr, this.data[i][1]);
+ }
+ else if (this.dataLabels == 'percent') {
+ fstr = this.dataLabelFormatString || '%d%%';
+ label = $.jqplot.sprintf(fstr, gd[i][2]*100);
+ }
+ else if (this.dataLabels.constructor == Array) {
+ fstr = this.dataLabelFormatString || '%s';
+ label = $.jqplot.sprintf(fstr, this.dataLabels[i]);
+ }
+
+ var fact = this._innerRadius + this._thickness * this.dataLabelPositionFactor + this.sliceMargin + this.dataLabelNudge;
+
+ var x = this._center[0] + Math.cos(avgang) * fact + this.canvas._offsets.left;
+ var y = this._center[1] + Math.sin(avgang) * fact + this.canvas._offsets.top;
+
+ var labelelem = $('<span class="jqplot-donut-series jqplot-data-label" style="position:absolute;">' + label + '</span>').insertBefore(plot.eventCanvas._elem);
+ x -= labelelem.width()/2;
+ y -= labelelem.height()/2;
+ x = Math.round(x);
+ y = Math.round(y);
+ labelelem.css({left: x, top: y});
+ }
+ }
+
+ };
+
+ $.jqplot.DonutAxisRenderer = function() {
+ $.jqplot.LinearAxisRenderer.call(this);
+ };
+
+ $.jqplot.DonutAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
+ $.jqplot.DonutAxisRenderer.prototype.constructor = $.jqplot.DonutAxisRenderer;
+
+
+ // There are no traditional axes on a donut chart. We just need to provide
+ // dummy objects with properties so the plot will render.
+ // called with scope of axis object.
+ $.jqplot.DonutAxisRenderer.prototype.init = function(options){
+ //
+ this.tickRenderer = $.jqplot.DonutTickRenderer;
+ $.extend(true, this, options);
+ // I don't think I'm going to need _dataBounds here.
+ // have to go Axis scaling in a way to fit chart onto plot area
+ // and provide u2p and p2u functionality for mouse cursor, etc.
+ // for convienence set _dataBounds to 0 and 100 and
+ // set min/max to 0 and 100.
+ this._dataBounds = {min:0, max:100};
+ this.min = 0;
+ this.max = 100;
+ this.showTicks = false;
+ this.ticks = [];
+ this.showMark = false;
+ this.show = false;
+ };
+
+
+
+
+ $.jqplot.DonutLegendRenderer = function(){
+ $.jqplot.TableLegendRenderer.call(this);
+ };
+
+ $.jqplot.DonutLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
+ $.jqplot.DonutLegendRenderer.prototype.constructor = $.jqplot.DonutLegendRenderer;
+
+ /**
+ * Class: $.jqplot.DonutLegendRenderer
+ * Legend Renderer specific to donut plots. Set by default
+ * when user creates a donut plot.
+ */
+ $.jqplot.DonutLegendRenderer.prototype.init = function(options) {
+ // Group: Properties
+ //
+ // prop: numberRows
+ // Maximum number of rows in the legend. 0 or null for unlimited.
+ this.numberRows = null;
+ // prop: numberColumns
+ // Maximum number of columns in the legend. 0 or null for unlimited.
+ this.numberColumns = null;
+ $.extend(true, this, options);
+ };
+
+ // called with context of legend
+ $.jqplot.DonutLegendRenderer.prototype.draw = function() {
+ var legend = this;
+ if (this.show) {
+ var series = this._series;
+ var ss = 'position:absolute;';
+ ss += (this.background) ? 'background:'+this.background+';' : '';
+ ss += (this.border) ? 'border:'+this.border+';' : '';
+ ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
+ ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : '';
+ ss += (this.textColor) ? 'color:'+this.textColor+';' : '';
+ ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : '';
+ ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : '';
+ ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : '';
+ ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : '';
+ this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>');
+ // Donut charts legends don't go by number of series, but by number of data points
+ // in the series. Refactor things here for that.
+
+ var pad = false,
+ reverse = false,
+ nr, nc;
+ var s = series[0];
+ var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors);
+
+ if (s.show) {
+ var pd = s.data;
+ if (this.numberRows) {
+ nr = this.numberRows;
+ if (!this.numberColumns){
+ nc = Math.ceil(pd.length/nr);
+ }
+ else{
+ nc = this.numberColumns;
+ }
+ }
+ else if (this.numberColumns) {
+ nc = this.numberColumns;
+ nr = Math.ceil(pd.length/this.numberColumns);
+ }
+ else {
+ nr = pd.length;
+ nc = 1;
+ }
+
+ var i, j, tr, td1, td2, lt, rs, color;
+ var idx = 0;
+
+ for (i=0; i<nr; i++) {
+ if (reverse){
+ tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem);
+ }
+ else{
+ tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);
+ }
+ for (j=0; j<nc; j++) {
+ if (idx < pd.length){
+ lt = this.labels[idx] || pd[idx][0].toString();
+ color = colorGenerator.next();
+ if (!reverse){
+ if (i>0){
+ pad = true;
+ }
+ else{
+ pad = false;
+ }
+ }
+ else{
+ if (i == nr -1){
+ pad = false;
+ }
+ else{
+ pad = true;
+ }
+ }
+ rs = (pad) ? this.rowSpacing : '0';
+
+ td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
+ '<div><div class="jqplot-table-legend-swatch" style="border-color:'+color+';"></div>'+
+ '</div></td>');
+ td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
+ if (this.escapeHtml){
+ td2.text(lt);
+ }
+ else {
+ td2.html(lt);
+ }
+ if (reverse) {
+ td2.prependTo(tr);
+ td1.prependTo(tr);
+ }
+ else {
+ td1.appendTo(tr);
+ td2.appendTo(tr);
+ }
+ pad = true;
+ }
+ idx++;
+ }
+ }
+ }
+ }
+ return this._elem;
+ };
+
+ // setup default renderers for axes and legend so user doesn't have to
+ // called with scope of plot
+ function preInit(target, data, options) {
+ options = options || {};
+ options.axesDefaults = options.axesDefaults || {};
+ options.legend = options.legend || {};
+ options.seriesDefaults = options.seriesDefaults || {};
+ // only set these if there is a donut series
+ var setopts = false;
+ if (options.seriesDefaults.renderer == $.jqplot.DonutRenderer) {
+ setopts = true;
+ }
+ else if (options.series) {
+ for (var i=0; i < options.series.length; i++) {
+ if (options.series[i].renderer == $.jqplot.DonutRenderer) {
+ setopts = true;
+ }
+ }
+ }
+
+ if (setopts) {
+ options.axesDefaults.renderer = $.jqplot.DonutAxisRenderer;
+ options.legend.renderer = $.jqplot.DonutLegendRenderer;
+ options.legend.preDraw = true;
+ options.seriesDefaults.pointLabels = {show: false};
+ }
+ }
+
+ // called with scope of plot.
+ function postInit(target, data, options) {
+ // if multiple series, add a reference to the previous one so that
+ // donut rings can nest.
+ for (var i=1; i<this.series.length; i++) {
+ if (!this.series[i]._previousSeries.length){
+ for (var j=0; j<i; j++) {
+ if (this.series[i].renderer.constructor == $.jqplot.DonutRenderer && this.series[j].renderer.constructor == $.jqplot.DonutRenderer) {
+ this.series[i]._previousSeries.push(this.series[j]);
+ }
+ }
+ }
+ }
+ for (i=0; i<this.series.length; i++) {
+ if (this.series[i].renderer.constructor == $.jqplot.DonutRenderer) {
+ this.series[i]._numberSeries = this.series.length;
+ // don't allow mouseover and mousedown at same time.
+ if (this.series[i].highlightMouseOver) {
+ this.series[i].highlightMouseDown = false;
+ }
+ }
+ }
+ }
+
+ var postParseOptionsRun = false;
+ // called with scope of plot
+ function postParseOptions(options) {
+ for (var i=0; i<this.series.length; i++) {
+ this.series[i].seriesColors = this.seriesColors;
+ this.series[i].colorGenerator = $.jqplot.colorGenerator;
+ }
+ }
+
+ function highlight (plot, sidx, pidx) {
+ var s = plot.series[sidx];
+ var canvas = plot.plugins.donutRenderer.highlightCanvas;
+ canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height);
+ s._highlightedPoint = pidx;
+ plot.plugins.donutRenderer.highlightedSeriesIndex = sidx;
+ s.renderer.drawSlice.call(s, canvas._ctx, s._sliceAngles[pidx][0], s._sliceAngles[pidx][1], s.highlightColors[pidx], false);
+ }
+
+ function unhighlight (plot) {
+ var canvas = plot.plugins.donutRenderer.highlightCanvas;
+ canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
+ for (var i=0; i<plot.series.length; i++) {
+ plot.series[i]._highlightedPoint = null;
+ }
+ plot.plugins.donutRenderer.highlightedSeriesIndex = null;
+ plot.target.trigger('jqplotDataUnhighlight');
+ }
+
+ function handleMove(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ var evt1 = jQuery.Event('jqplotDataMouseOver');
+ evt1.pageX = ev.pageX;
+ evt1.pageY = ev.pageY;
+ plot.target.trigger(evt1, ins);
+ if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.donutRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
+ var evt = jQuery.Event('jqplotDataHighlight');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ highlight (plot, ins[0], ins[1]);
+ }
+ }
+ else if (neighbor == null) {
+ unhighlight (plot);
+ }
+ }
+
+ function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.donutRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
+ var evt = jQuery.Event('jqplotDataHighlight');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ highlight (plot, ins[0], ins[1]);
+ }
+ }
+ else if (neighbor == null) {
+ unhighlight (plot);
+ }
+ }
+
+ function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
+ var idx = plot.plugins.donutRenderer.highlightedSeriesIndex;
+ if (idx != null && plot.series[idx].highlightMouseDown) {
+ unhighlight(plot);
+ }
+ }
+
+ function handleClick(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ var evt = jQuery.Event('jqplotDataClick');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ }
+ }
+
+ function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ var idx = plot.plugins.donutRenderer.highlightedSeriesIndex;
+ if (idx != null && plot.series[idx].highlightMouseDown) {
+ unhighlight(plot);
+ }
+ var evt = jQuery.Event('jqplotDataRightClick');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ }
+ }
+
+ // called within context of plot
+ // create a canvas which we can draw on.
+ // insert it before the eventCanvas, so eventCanvas will still capture events.
+ function postPlotDraw() {
+ // Memory Leaks patch
+ if (this.plugins.donutRenderer && this.plugins.donutRenderer.highlightCanvas) {
+ this.plugins.donutRenderer.highlightCanvas.resetCanvas();
+ this.plugins.donutRenderer.highlightCanvas = null;
+ }
+
+ this.plugins.donutRenderer = {highlightedSeriesIndex:null};
+ this.plugins.donutRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
+ // do we have any data labels? if so, put highlight canvas before those
+ // Fix for broken jquery :first selector with canvas (VML) elements.
+ var labels = $(this.targetId+' .jqplot-data-label');
+ if (labels.length) {
+ $(labels[0]).before(this.plugins.donutRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-donutRenderer-highlight-canvas', this._plotDimensions, this));
+ }
+ // else put highlight canvas before event canvas.
+ else {
+ this.eventCanvas._elem.before(this.plugins.donutRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-donutRenderer-highlight-canvas', this._plotDimensions, this));
+ }
+ var hctx = this.plugins.donutRenderer.highlightCanvas.setContext();
+ this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); });
+ }
+
+ $.jqplot.preInitHooks.push(preInit);
+
+ $.jqplot.DonutTickRenderer = function() {
+ $.jqplot.AxisTickRenderer.call(this);
+ };
+
+ $.jqplot.DonutTickRenderer.prototype = new $.jqplot.AxisTickRenderer();
+ $.jqplot.DonutTickRenderer.prototype.constructor = $.jqplot.DonutTickRenderer;
+
+})(jQuery);
+
+ \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.min.js
new file mode 100644
index 00000000..4af54c75
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(e){e.jqplot.DonutRenderer=function(){e.jqplot.LineRenderer.call(this)};e.jqplot.DonutRenderer.prototype=new e.jqplot.LineRenderer();e.jqplot.DonutRenderer.prototype.constructor=e.jqplot.DonutRenderer;e.jqplot.DonutRenderer.prototype.init=function(p,t){this.diameter=null;this.innerDiameter=null;this.thickness=null;this.padding=20;this.sliceMargin=0;this.ringMargin=null;this.fill=true;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=5;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.dataLabels="percent";this.showDataLabels=false;this.dataLabelFormatString=null;this.dataLabelThreshold=3;this.dataLabelPositionFactor=0.4;this.dataLabelNudge=0;this.startAngle=0;this.tickRenderer=e.jqplot.DonutTickRenderer;this._drawData=true;this._type="donut";if(p.highlightMouseDown&&p.highlightMouseOver==null){p.highlightMouseOver=false}e.extend(true,this,p);if(this.diameter!=null){this.diameter=this.diameter-this.sliceMargin}this._diameter=null;this._innerDiameter=null;this._radius=null;this._innerRadius=null;this._thickness=null;this._previousSeries=[];this._numberSeries=1;this._sliceAngles=[];this._highlightedPoint=null;if(this.highlightColors.length==0){for(var r=0;r<this.seriesColors.length;r++){var q=e.jqplot.getColorComponents(this.seriesColors[r]);var n=[q[0],q[1],q[2]];var s=n[0]+n[1]+n[2];for(var o=0;o<3;o++){n[o]=(s>570)?n[o]*0.8:n[o]+0.3*(255-n[o]);n[o]=parseInt(n[o],10)}this.highlightColors.push("rgb("+n[0]+","+n[1]+","+n[2]+")")}}t.postParseOptionsHooks.addOnce(l);t.postInitHooks.addOnce(g);t.eventListenerHooks.addOnce("jqplotMouseMove",b);t.eventListenerHooks.addOnce("jqplotMouseDown",a);t.eventListenerHooks.addOnce("jqplotMouseUp",j);t.eventListenerHooks.addOnce("jqplotClick",f);t.eventListenerHooks.addOnce("jqplotRightClick",m);t.postDrawHooks.addOnce(h)};e.jqplot.DonutRenderer.prototype.setGridData=function(s){var o=[];var t=[];var n=this.startAngle/180*Math.PI;var r=0;this._drawData=false;for(var q=0;q<this.data.length;q++){if(this.data[q][1]!=0){this._drawData=true}o.push(this.data[q][1]);t.push([this.data[q][0]]);if(q>0){o[q]+=o[q-1]}r+=this.data[q][1]}var p=Math.PI*2/o[o.length-1];for(var q=0;q<o.length;q++){t[q][1]=o[q]*p;t[q][2]=this.data[q][1]/r}this.gridData=t};e.jqplot.DonutRenderer.prototype.makeGridData=function(s,t){var o=[];var u=[];var r=0;var n=this.startAngle/180*Math.PI;this._drawData=false;for(var q=0;q<s.length;q++){if(this.data[q][1]!=0){this._drawData=true}o.push(s[q][1]);u.push([s[q][0]]);if(q>0){o[q]+=o[q-1]}r+=s[q][1]}var p=Math.PI*2/o[o.length-1];for(var q=0;q<o.length;q++){u[q][1]=o[q]*p;u[q][2]=s[q][1]/r}return u};e.jqplot.DonutRenderer.prototype.drawSlice=function(x,u,t,p,s){var n=this._diameter/2;var v=n-this._thickness;var w=this.fill;x.save();x.translate(this._center[0],this._center[1]);if(s){for(var q=0;q<this.shadowDepth;q++){x.save();x.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));o()}}else{o()}function o(){if(t>6.282+this.startAngle){t=6.282+this.startAngle;if(u>t){u=6.281+this.startAngle}}if(u>=t){return}x.beginPath();x.fillStyle=p;x.strokeStyle=p;x.arc(0,0,n,u,t,false);x.lineTo(v*Math.cos(t),v*Math.sin(t));x.arc(0,0,v,t,u,true);x.closePath();if(w){x.fill()}else{x.stroke()}}if(s){for(var q=0;q<this.shadowDepth;q++){x.restore()}}x.restore()};e.jqplot.DonutRenderer.prototype.draw=function(N,V,t,P){var Q;var J=(t!=undefined)?t:{};var q=0;var p=0;var u=1;if(t.legendInfo&&t.legendInfo.placement=="insideGrid"){var I=t.legendInfo;switch(I.location){case"nw":q=I.width+I.xoffset;break;case"w":q=I.width+I.xoffset;break;case"sw":q=I.width+I.xoffset;break;case"ne":q=I.width+I.xoffset;u=-1;break;case"e":q=I.width+I.xoffset;u=-1;break;case"se":q=I.width+I.xoffset;u=-1;break;case"n":p=I.height+I.yoffset;break;case"s":p=I.height+I.yoffset;u=-1;break;default:break}}var B=(J.shadow!=undefined)?J.shadow:this.shadow;var W=(J.showLine!=undefined)?J.showLine:this.showLine;var O=(J.fill!=undefined)?J.fill:this.fill;var s=N.canvas.width;var H=N.canvas.height;var G=s-q-2*this.padding;var R=H-p-2*this.padding;var v=Math.min(G,R);var T=v;var X=(this.ringMargin==null)?this.sliceMargin*2:this.ringMargin;for(var Q=0;Q<this._previousSeries.length;Q++){T-=2*this._previousSeries[Q]._thickness+2*X}this._diameter=this.diameter||T;if(this.innerDiameter!=null){var M=(this._numberSeries>1&&this.index>0)?this._previousSeries[0]._diameter:this._diameter;this._thickness=this.thickness||(M-this.innerDiameter-2*X*this._numberSeries)/this._numberSeries/2}else{this._thickness=this.thickness||v/2/(this._numberSeries+1)*0.85}var K=this._radius=this._diameter/2;this._innerRadius=this._radius-this._thickness;var o=this.startAngle/180*Math.PI;this._center=[(s-u*q)/2+u*q,(H-u*p)/2+u*p];if(this.shadow){var L="rgba(0,0,0,"+this.shadowAlpha+")";for(var Q=0;Q<V.length;Q++){var A=(Q==0)?o:V[Q-1][1]+o;A+=this.sliceMargin/180*Math.PI;this.renderer.drawSlice.call(this,N,A,V[Q][1]+o,L,true)}}for(var Q=0;Q<V.length;Q++){var A=(Q==0)?o:V[Q-1][1]+o;A+=this.sliceMargin/180*Math.PI;var z=V[Q][1]+o;this._sliceAngles.push([A,z]);this.renderer.drawSlice.call(this,N,A,z,this.seriesColors[Q],false);if(this.showDataLabels&&V[Q][2]*100>=this.dataLabelThreshold){var S,U=(A+z)/2,C;if(this.dataLabels=="label"){S=this.dataLabelFormatString||"%s";C=e.jqplot.sprintf(S,V[Q][0])}else{if(this.dataLabels=="value"){S=this.dataLabelFormatString||"%d";C=e.jqplot.sprintf(S,this.data[Q][1])}else{if(this.dataLabels=="percent"){S=this.dataLabelFormatString||"%d%%";C=e.jqplot.sprintf(S,V[Q][2]*100)}else{if(this.dataLabels.constructor==Array){S=this.dataLabelFormatString||"%s";C=e.jqplot.sprintf(S,this.dataLabels[Q])}}}}var n=this._innerRadius+this._thickness*this.dataLabelPositionFactor+this.sliceMargin+this.dataLabelNudge;var F=this._center[0]+Math.cos(U)*n+this.canvas._offsets.left;var E=this._center[1]+Math.sin(U)*n+this.canvas._offsets.top;var D=e('<span class="jqplot-donut-series jqplot-data-label" style="position:absolute;">'+C+"</span>").insertBefore(P.eventCanvas._elem);F-=D.width()/2;E-=D.height()/2;F=Math.round(F);E=Math.round(E);D.css({left:F,top:E})}}};e.jqplot.DonutAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.DonutAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.DonutAxisRenderer.prototype.constructor=e.jqplot.DonutAxisRenderer;e.jqplot.DonutAxisRenderer.prototype.init=function(n){this.tickRenderer=e.jqplot.DonutTickRenderer;e.extend(true,this,n);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};e.jqplot.DonutLegendRenderer=function(){e.jqplot.TableLegendRenderer.call(this)};e.jqplot.DonutLegendRenderer.prototype=new e.jqplot.TableLegendRenderer();e.jqplot.DonutLegendRenderer.prototype.constructor=e.jqplot.DonutLegendRenderer;e.jqplot.DonutLegendRenderer.prototype.init=function(n){this.numberRows=null;this.numberColumns=null;e.extend(true,this,n)};e.jqplot.DonutLegendRenderer.prototype.draw=function(){var q=this;if(this.show){var y=this._series;var B="position:absolute;";B+=(this.background)?"background:"+this.background+";":"";B+=(this.border)?"border:"+this.border+";":"";B+=(this.fontSize)?"font-size:"+this.fontSize+";":"";B+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";B+=(this.textColor)?"color:"+this.textColor+";":"";B+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";B+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";B+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";B+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=e('<table class="jqplot-table-legend" style="'+B+'"></table>');var F=false,x=false,n,v;var z=y[0];var o=new e.jqplot.ColorGenerator(z.seriesColors);if(z.show){var G=z.data;if(this.numberRows){n=this.numberRows;if(!this.numberColumns){v=Math.ceil(G.length/n)}else{v=this.numberColumns}}else{if(this.numberColumns){v=this.numberColumns;n=Math.ceil(G.length/this.numberColumns)}else{n=G.length;v=1}}var E,D,p,t,r,u,w,C;var A=0;for(E=0;E<n;E++){if(x){p=e('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{p=e('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(D=0;D<v;D++){if(A<G.length){u=this.labels[A]||G[A][0].toString();C=o.next();if(!x){if(E>0){F=true}else{F=false}}else{if(E==n-1){F=false}else{F=true}}w=(F)?this.rowSpacing:"0";t=e('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+w+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+C+';"></div></div></td>');r=e('<td class="jqplot-table-legend" style="padding-top:'+w+';"></td>');if(this.escapeHtml){r.text(u)}else{r.html(u)}if(x){r.prependTo(p);t.prependTo(p)}else{t.appendTo(p);r.appendTo(p)}F=true}A++}}}}return this._elem};function c(r,q,o){o=o||{};o.axesDefaults=o.axesDefaults||{};o.legend=o.legend||{};o.seriesDefaults=o.seriesDefaults||{};var n=false;if(o.seriesDefaults.renderer==e.jqplot.DonutRenderer){n=true}else{if(o.series){for(var p=0;p<o.series.length;p++){if(o.series[p].renderer==e.jqplot.DonutRenderer){n=true}}}}if(n){o.axesDefaults.renderer=e.jqplot.DonutAxisRenderer;o.legend.renderer=e.jqplot.DonutLegendRenderer;o.legend.preDraw=true;o.seriesDefaults.pointLabels={show:false}}}function g(r,q,o){for(var p=1;p<this.series.length;p++){if(!this.series[p]._previousSeries.length){for(var n=0;n<p;n++){if(this.series[p].renderer.constructor==e.jqplot.DonutRenderer&&this.series[n].renderer.constructor==e.jqplot.DonutRenderer){this.series[p]._previousSeries.push(this.series[n])}}}}for(p=0;p<this.series.length;p++){if(this.series[p].renderer.constructor==e.jqplot.DonutRenderer){this.series[p]._numberSeries=this.series.length;if(this.series[p].highlightMouseOver){this.series[p].highlightMouseDown=false}}}}var k=false;function l(n){for(var o=0;o<this.series.length;o++){this.series[o].seriesColors=this.seriesColors;this.series[o].colorGenerator=e.jqplot.colorGenerator}}function d(r,q,p){var o=r.series[q];var n=r.plugins.donutRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);o._highlightedPoint=p;r.plugins.donutRenderer.highlightedSeriesIndex=q;o.renderer.drawSlice.call(o,n._ctx,o._sliceAngles[p][0],o._sliceAngles[p][1],o.highlightColors[p],false)}function i(p){var n=p.plugins.donutRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);for(var o=0;o<p.series.length;o++){p.series[o]._highlightedPoint=null}p.plugins.donutRenderer.highlightedSeriesIndex=null;p.target.trigger("jqplotDataUnhighlight")}function b(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataMouseOver");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);if(s.series[p[0]].highlightMouseOver&&!(p[0]==s.plugins.donutRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.which=r.which;n.pageX=r.pageX;n.pageY=r.pageY;s.target.trigger(n,p);d(s,p[0],p[1])}}else{if(t==null){i(s)}}}function a(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];if(r.series[o[0]].highlightMouseDown&&!(o[0]==r.plugins.donutRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o);d(r,o[0],o[1])}}else{if(s==null){i(r)}}}function j(p,o,s,r,q){var n=q.plugins.donutRenderer.highlightedSeriesIndex;if(n!=null&&q.series[n].highlightMouseDown){i(q)}}function f(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var n=jQuery.Event("jqplotDataClick");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o)}}function m(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var n=s.plugins.donutRenderer.highlightedSeriesIndex;if(n!=null&&s.series[n].highlightMouseDown){i(s)}var o=jQuery.Event("jqplotDataRightClick");o.which=r.which;o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}function h(){if(this.plugins.donutRenderer&&this.plugins.donutRenderer.highlightCanvas){this.plugins.donutRenderer.highlightCanvas.resetCanvas();this.plugins.donutRenderer.highlightCanvas=null}this.plugins.donutRenderer={highlightedSeriesIndex:null};this.plugins.donutRenderer.highlightCanvas=new e.jqplot.GenericCanvas();var o=e(this.targetId+" .jqplot-data-label");if(o.length){e(o[0]).before(this.plugins.donutRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-donutRenderer-highlight-canvas",this._plotDimensions,this))}else{this.eventCanvas._elem.before(this.plugins.donutRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-donutRenderer-highlight-canvas",this._plotDimensions,this))}var n=this.plugins.donutRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(p){i(p.data.plot)})}e.jqplot.preInitHooks.push(c);e.jqplot.DonutTickRenderer=function(){e.jqplot.AxisTickRenderer.call(this)};e.jqplot.DonutTickRenderer.prototype=new e.jqplot.AxisTickRenderer();e.jqplot.DonutTickRenderer.prototype.constructor=e.jqplot.DonutTickRenderer})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.js
new file mode 100644
index 00000000..00419518
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.js
@@ -0,0 +1,225 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+
+ /**
+ * Class: $.jqplot.Dragable
+ * Plugin to make plotted points dragable by the user.
+ */
+ $.jqplot.Dragable = function(options) {
+ // Group: Properties
+ this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false});
+ this.shapeRenderer = new $.jqplot.ShapeRenderer();
+ this.isDragging = false;
+ this.isOver = false;
+ this._ctx;
+ this._elem;
+ this._point;
+ this._gridData;
+ // prop: color
+ // CSS color spec for the dragged point (and adjacent line segment or bar).
+ this.color;
+ // prop: constrainTo
+ // Constrain dragging motion to an axis or to none.
+ // Allowable values are 'none', 'x', 'y'
+ this.constrainTo = 'none'; // 'x', 'y', or 'none';
+ $.extend(true, this, options);
+ };
+
+ function DragCanvas() {
+ $.jqplot.GenericCanvas.call(this);
+ this.isDragging = false;
+ this.isOver = false;
+ this._neighbor;
+ this._cursors = [];
+ }
+
+ DragCanvas.prototype = new $.jqplot.GenericCanvas();
+ DragCanvas.prototype.constructor = DragCanvas;
+
+
+ // called within scope of series
+ $.jqplot.Dragable.parseOptions = function (defaults, opts) {
+ var options = opts || {};
+ this.plugins.dragable = new $.jqplot.Dragable(options.dragable);
+ // since this function is called before series options are parsed,
+ // we can set this here and it will be overridden if needed.
+ this.isDragable = $.jqplot.config.enablePlugins;
+ };
+
+ // called within context of plot
+ // create a canvas which we can draw on.
+ // insert it before the eventCanvas, so eventCanvas will still capture events.
+ // add a new DragCanvas object to the plot plugins to handle drawing on this new canvas.
+ $.jqplot.Dragable.postPlotDraw = function() {
+ // Memory Leaks patch
+ if (this.plugins.dragable && this.plugins.dragable.highlightCanvas) {
+ this.plugins.dragable.highlightCanvas.resetCanvas();
+ this.plugins.dragable.highlightCanvas = null;
+ }
+
+ this.plugins.dragable = {previousCursor:'auto', isOver:false};
+ this.plugins.dragable.dragCanvas = new DragCanvas();
+
+ this.eventCanvas._elem.before(this.plugins.dragable.dragCanvas.createElement(this._gridPadding, 'jqplot-dragable-canvas', this._plotDimensions, this));
+ var dctx = this.plugins.dragable.dragCanvas.setContext();
+ };
+
+ //$.jqplot.preInitHooks.push($.jqplot.Dragable.init);
+ $.jqplot.preParseSeriesOptionsHooks.push($.jqplot.Dragable.parseOptions);
+ $.jqplot.postDrawHooks.push($.jqplot.Dragable.postPlotDraw);
+ $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMove]);
+ $.jqplot.eventListenerHooks.push(['jqplotMouseDown', handleDown]);
+ $.jqplot.eventListenerHooks.push(['jqplotMouseUp', handleUp]);
+
+
+ function initDragPoint(plot, neighbor) {
+ var s = plot.series[neighbor.seriesIndex];
+ var drag = s.plugins.dragable;
+
+ // first, init the mark renderer for the dragged point
+ var smr = s.markerRenderer;
+ var mr = drag.markerRenderer;
+ mr.style = smr.style;
+ mr.lineWidth = smr.lineWidth + 2.5;
+ mr.size = smr.size + 5;
+ if (!drag.color) {
+ var rgba = $.jqplot.getColorComponents(smr.color);
+ var newrgb = [rgba[0], rgba[1], rgba[2]];
+ var alpha = (rgba[3] >= 0.6) ? rgba[3]*0.6 : rgba[3]*(2-rgba[3]);
+ drag.color = 'rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+alpha+')';
+ }
+ mr.color = drag.color;
+ mr.init();
+
+ var start = (neighbor.pointIndex > 0) ? neighbor.pointIndex - 1 : 0;
+ var end = neighbor.pointIndex+2;
+ drag._gridData = s.gridData.slice(start, end);
+ }
+
+ function handleMove(ev, gridpos, datapos, neighbor, plot) {
+ if (plot.plugins.dragable.dragCanvas.isDragging) {
+ var dc = plot.plugins.dragable.dragCanvas;
+ var dp = dc._neighbor;
+ var s = plot.series[dp.seriesIndex];
+ var drag = s.plugins.dragable;
+ var gd = s.gridData;
+
+ // compute the new grid position with any constraints.
+ var x = (drag.constrainTo == 'y') ? dp.gridData[0] : gridpos.x;
+ var y = (drag.constrainTo == 'x') ? dp.gridData[1] : gridpos.y;
+
+ // compute data values for any listeners.
+ var xu = s._xaxis.series_p2u(x);
+ var yu = s._yaxis.series_p2u(y);
+
+ // clear the canvas then redraw effect at new position.
+ var ctx = dc._ctx;
+ ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
+
+ // adjust our gridData for the new mouse position
+ if (dp.pointIndex > 0) {
+ drag._gridData[1] = [x, y];
+ }
+ else {
+ drag._gridData[0] = [x, y];
+ }
+ plot.series[dp.seriesIndex].draw(dc._ctx, {gridData:drag._gridData, shadow:false, preventJqPlotSeriesDrawTrigger:true, color:drag.color, markerOptions:{color:drag.color, shadow:false}, trendline:{show:false}});
+ plot.target.trigger('jqplotSeriesPointChange', [dp.seriesIndex, dp.pointIndex, [xu,yu], [x,y]]);
+ }
+ else if (neighbor != null) {
+ var series = plot.series[neighbor.seriesIndex];
+ if (series.isDragable) {
+ var dc = plot.plugins.dragable.dragCanvas;
+ if (!dc.isOver) {
+ dc._cursors.push(ev.target.style.cursor);
+ ev.target.style.cursor = "pointer";
+ }
+ dc.isOver = true;
+ }
+ }
+ else if (neighbor == null) {
+ var dc = plot.plugins.dragable.dragCanvas;
+ if (dc.isOver) {
+ ev.target.style.cursor = dc._cursors.pop();
+ dc.isOver = false;
+ }
+ }
+ }
+
+ function handleDown(ev, gridpos, datapos, neighbor, plot) {
+ var dc = plot.plugins.dragable.dragCanvas;
+ dc._cursors.push(ev.target.style.cursor);
+ if (neighbor != null) {
+ var s = plot.series[neighbor.seriesIndex];
+ var drag = s.plugins.dragable;
+ if (s.isDragable && !dc.isDragging) {
+ dc._neighbor = neighbor;
+ dc.isDragging = true;
+ initDragPoint(plot, neighbor);
+ drag.markerRenderer.draw(s.gridData[neighbor.pointIndex][0], s.gridData[neighbor.pointIndex][1], dc._ctx);
+ ev.target.style.cursor = "move";
+ plot.target.trigger('jqplotDragStart', [neighbor.seriesIndex, neighbor.pointIndex, gridpos, datapos]);
+ }
+ }
+ // Just in case of a hickup, we'll clear the drag canvas and reset.
+ else {
+ var ctx = dc._ctx;
+ ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
+ dc.isDragging = false;
+ }
+ }
+
+ function handleUp(ev, gridpos, datapos, neighbor, plot) {
+ if (plot.plugins.dragable.dragCanvas.isDragging) {
+ var dc = plot.plugins.dragable.dragCanvas;
+ // clear the canvas
+ var ctx = dc._ctx;
+ ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
+ dc.isDragging = false;
+ // redraw the series canvas at the new point.
+ var dp = dc._neighbor;
+ var s = plot.series[dp.seriesIndex];
+ var drag = s.plugins.dragable;
+ // compute the new grid position with any constraints.
+ var x = (drag.constrainTo == 'y') ? dp.data[0] : datapos[s.xaxis];
+ var y = (drag.constrainTo == 'x') ? dp.data[1] : datapos[s.yaxis];
+ // var x = datapos[s.xaxis];
+ // var y = datapos[s.yaxis];
+ s.data[dp.pointIndex][0] = x;
+ s.data[dp.pointIndex][1] = y;
+ plot.drawSeries({preventJqPlotSeriesDrawTrigger:true}, dp.seriesIndex);
+ dc._neighbor = null;
+ ev.target.style.cursor = dc._cursors.pop();
+ plot.target.trigger('jqplotDragStop', [gridpos, datapos]);
+ }
+ }
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.min.js
new file mode 100644
index 00000000..97b0e567
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(d){d.jqplot.Dragable=function(g){this.markerRenderer=new d.jqplot.MarkerRenderer({shadow:false});this.shapeRenderer=new d.jqplot.ShapeRenderer();this.isDragging=false;this.isOver=false;this._ctx;this._elem;this._point;this._gridData;this.color;this.constrainTo="none";d.extend(true,this,g)};function b(){d.jqplot.GenericCanvas.call(this);this.isDragging=false;this.isOver=false;this._neighbor;this._cursors=[]}b.prototype=new d.jqplot.GenericCanvas();b.prototype.constructor=b;d.jqplot.Dragable.parseOptions=function(i,h){var g=h||{};this.plugins.dragable=new d.jqplot.Dragable(g.dragable);this.isDragable=d.jqplot.config.enablePlugins};d.jqplot.Dragable.postPlotDraw=function(){if(this.plugins.dragable&&this.plugins.dragable.highlightCanvas){this.plugins.dragable.highlightCanvas.resetCanvas();this.plugins.dragable.highlightCanvas=null}this.plugins.dragable={previousCursor:"auto",isOver:false};this.plugins.dragable.dragCanvas=new b();this.eventCanvas._elem.before(this.plugins.dragable.dragCanvas.createElement(this._gridPadding,"jqplot-dragable-canvas",this._plotDimensions,this));var g=this.plugins.dragable.dragCanvas.setContext()};d.jqplot.preParseSeriesOptionsHooks.push(d.jqplot.Dragable.parseOptions);d.jqplot.postDrawHooks.push(d.jqplot.Dragable.postPlotDraw);d.jqplot.eventListenerHooks.push(["jqplotMouseMove",e]);d.jqplot.eventListenerHooks.push(["jqplotMouseDown",c]);d.jqplot.eventListenerHooks.push(["jqplotMouseUp",a]);function f(n,p){var q=n.series[p.seriesIndex];var m=q.plugins.dragable;var h=q.markerRenderer;var i=m.markerRenderer;i.style=h.style;i.lineWidth=h.lineWidth+2.5;i.size=h.size+5;if(!m.color){var l=d.jqplot.getColorComponents(h.color);var o=[l[0],l[1],l[2]];var k=(l[3]>=0.6)?l[3]*0.6:l[3]*(2-l[3]);m.color="rgba("+o[0]+","+o[1]+","+o[2]+","+k+")"}i.color=m.color;i.init();var g=(p.pointIndex>0)?p.pointIndex-1:0;var j=p.pointIndex+2;m._gridData=q.gridData.slice(g,j)}function e(o,l,h,t,m){if(m.plugins.dragable.dragCanvas.isDragging){var u=m.plugins.dragable.dragCanvas;var i=u._neighbor;var w=m.series[i.seriesIndex];var k=w.plugins.dragable;var r=w.gridData;var p=(k.constrainTo=="y")?i.gridData[0]:l.x;var n=(k.constrainTo=="x")?i.gridData[1]:l.y;var g=w._xaxis.series_p2u(p);var q=w._yaxis.series_p2u(n);var v=u._ctx;v.clearRect(0,0,v.canvas.width,v.canvas.height);if(i.pointIndex>0){k._gridData[1]=[p,n]}else{k._gridData[0]=[p,n]}m.series[i.seriesIndex].draw(u._ctx,{gridData:k._gridData,shadow:false,preventJqPlotSeriesDrawTrigger:true,color:k.color,markerOptions:{color:k.color,shadow:false},trendline:{show:false}});m.target.trigger("jqplotSeriesPointChange",[i.seriesIndex,i.pointIndex,[g,q],[p,n]])}else{if(t!=null){var j=m.series[t.seriesIndex];if(j.isDragable){var u=m.plugins.dragable.dragCanvas;if(!u.isOver){u._cursors.push(o.target.style.cursor);o.target.style.cursor="pointer"}u.isOver=true}}else{if(t==null){var u=m.plugins.dragable.dragCanvas;if(u.isOver){o.target.style.cursor=u._cursors.pop();u.isOver=false}}}}}function c(k,i,g,l,j){var m=j.plugins.dragable.dragCanvas;m._cursors.push(k.target.style.cursor);if(l!=null){var o=j.series[l.seriesIndex];var h=o.plugins.dragable;if(o.isDragable&&!m.isDragging){m._neighbor=l;m.isDragging=true;f(j,l);h.markerRenderer.draw(o.gridData[l.pointIndex][0],o.gridData[l.pointIndex][1],m._ctx);k.target.style.cursor="move";j.target.trigger("jqplotDragStart",[l.seriesIndex,l.pointIndex,i,g])}}else{var n=m._ctx;n.clearRect(0,0,n.canvas.width,n.canvas.height);m.isDragging=false}}function a(m,j,g,o,k){if(k.plugins.dragable.dragCanvas.isDragging){var p=k.plugins.dragable.dragCanvas;var q=p._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);p.isDragging=false;var h=p._neighbor;var r=k.series[h.seriesIndex];var i=r.plugins.dragable;var n=(i.constrainTo=="y")?h.data[0]:g[r.xaxis];var l=(i.constrainTo=="x")?h.data[1]:g[r.yaxis];r.data[h.pointIndex][0]=n;r.data[h.pointIndex][1]=l;k.drawSeries({preventJqPlotSeriesDrawTrigger:true},h.seriesIndex);p._neighbor=null;m.target.style.cursor=p._cursors.pop();k.target.trigger("jqplotDragStop",[j,g])}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.js
new file mode 100644
index 00000000..effa111a
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.js
@@ -0,0 +1,305 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ // class $.jqplot.EnhancedLegendRenderer
+ // Legend renderer which can specify the number of rows and/or columns in the legend.
+ $.jqplot.EnhancedLegendRenderer = function(){
+ $.jqplot.TableLegendRenderer.call(this);
+ };
+
+ $.jqplot.EnhancedLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
+ $.jqplot.EnhancedLegendRenderer.prototype.constructor = $.jqplot.EnhancedLegendRenderer;
+
+ // called with scope of legend.
+ $.jqplot.EnhancedLegendRenderer.prototype.init = function(options) {
+ // prop: numberRows
+ // Maximum number of rows in the legend. 0 or null for unlimited.
+ this.numberRows = null;
+ // prop: numberColumns
+ // Maximum number of columns in the legend. 0 or null for unlimited.
+ this.numberColumns = null;
+ // prop: seriesToggle
+ // false to not enable series on/off toggling on the legend.
+ // true or a fadein/fadeout speed (number of milliseconds or 'fast', 'normal', 'slow')
+ // to enable show/hide of series on click of legend item.
+ this.seriesToggle = 'normal';
+ // prop: seriesToggleReplot
+ // True to replot the chart after toggling series on/off.
+ // This will set the series show property to false.
+ // This allows for rescaling or other maniplation of chart.
+ // Set to an options object (e.g. {resetAxes: true}) for replot options.
+ this.seriesToggleReplot = false;
+ // prop: disableIEFading
+ // true to toggle series with a show/hide method only and not allow fading in/out.
+ // This is to overcome poor performance of fade in some versions of IE.
+ this.disableIEFading = true;
+ $.extend(true, this, options);
+
+ if (this.seriesToggle) {
+ $.jqplot.postDrawHooks.push(postDraw);
+ }
+ };
+
+ // called with scope of legend
+ $.jqplot.EnhancedLegendRenderer.prototype.draw = function(offsets, plot) {
+ var legend = this;
+ if (this.show) {
+ var series = this._series;
+ var s;
+ var ss = 'position:absolute;';
+ ss += (this.background) ? 'background:'+this.background+';' : '';
+ ss += (this.border) ? 'border:'+this.border+';' : '';
+ ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
+ ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : '';
+ ss += (this.textColor) ? 'color:'+this.textColor+';' : '';
+ ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : '';
+ ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : '';
+ ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : '';
+ ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : '';
+ this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>');
+ if (this.seriesToggle) {
+ this._elem.css('z-index', '3');
+ }
+
+ var pad = false,
+ reverse = false,
+ nr, nc;
+ if (this.numberRows) {
+ nr = this.numberRows;
+ if (!this.numberColumns){
+ nc = Math.ceil(series.length/nr);
+ }
+ else{
+ nc = this.numberColumns;
+ }
+ }
+ else if (this.numberColumns) {
+ nc = this.numberColumns;
+ nr = Math.ceil(series.length/this.numberColumns);
+ }
+ else {
+ nr = series.length;
+ nc = 1;
+ }
+
+ var i, j, tr, td1, td2, lt, rs, div, div0, div1;
+ var idx = 0;
+ // check to see if we need to reverse
+ for (i=series.length-1; i>=0; i--) {
+ if (nc == 1 && series[i]._stack || series[i].renderer.constructor == $.jqplot.BezierCurveRenderer){
+ reverse = true;
+ }
+ }
+
+ for (i=0; i<nr; i++) {
+ tr = $(document.createElement('tr'));
+ tr.addClass('jqplot-table-legend');
+ if (reverse){
+ tr.prependTo(this._elem);
+ }
+ else{
+ tr.appendTo(this._elem);
+ }
+ for (j=0; j<nc; j++) {
+ if (idx < series.length && (series[idx].show || series[idx].showLabel)){
+ s = series[idx];
+ lt = this.labels[idx] || s.label.toString();
+ if (lt) {
+ var color = s.color;
+ if (!reverse){
+ if (i>0){
+ pad = true;
+ }
+ else{
+ pad = false;
+ }
+ }
+ else{
+ if (i == nr -1){
+ pad = false;
+ }
+ else{
+ pad = true;
+ }
+ }
+ rs = (pad) ? this.rowSpacing : '0';
+
+ td1 = $(document.createElement('td'));
+ td1.addClass('jqplot-table-legend jqplot-table-legend-swatch');
+ td1.css({textAlign: 'center', paddingTop: rs});
+
+ div0 = $(document.createElement('div'));
+ div0.addClass('jqplot-table-legend-swatch-outline');
+ div1 = $(document.createElement('div'));
+ div1.addClass('jqplot-table-legend-swatch');
+ div1.css({backgroundColor: color, borderColor: color});
+
+ td1.append(div0.append(div1));
+
+ td2 = $(document.createElement('td'));
+ td2.addClass('jqplot-table-legend jqplot-table-legend-label');
+ td2.css('paddingTop', rs);
+
+ // td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
+ // '<div><div class="jqplot-table-legend-swatch" style="background-color:'+color+';border-color:'+color+';"></div>'+
+ // '</div></td>');
+ // td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
+ if (this.escapeHtml){
+ td2.text(lt);
+ }
+ else {
+ td2.html(lt);
+ }
+ if (reverse) {
+ if (this.showLabels) {td2.prependTo(tr);}
+ if (this.showSwatches) {td1.prependTo(tr);}
+ }
+ else {
+ if (this.showSwatches) {td1.appendTo(tr);}
+ if (this.showLabels) {td2.appendTo(tr);}
+ }
+
+ if (this.seriesToggle) {
+
+ // add an overlay for clicking series on/off
+ // div0 = $(document.createElement('div'));
+ // div0.addClass('jqplot-table-legend-overlay');
+ // div0.css({position:'relative', left:0, top:0, height:'100%', width:'100%'});
+ // tr.append(div0);
+
+ var speed;
+ if (typeof(this.seriesToggle) === 'string' || typeof(this.seriesToggle) === 'number') {
+ if (!$.jqplot.use_excanvas || !this.disableIEFading) {
+ speed = this.seriesToggle;
+ }
+ }
+ if (this.showSwatches) {
+ td1.bind('click', {series:s, speed:speed, plot: plot, replot:this.seriesToggleReplot}, handleToggle);
+ td1.addClass('jqplot-seriesToggle');
+ }
+ if (this.showLabels) {
+ td2.bind('click', {series:s, speed:speed, plot: plot, replot:this.seriesToggleReplot}, handleToggle);
+ td2.addClass('jqplot-seriesToggle');
+ }
+
+ // for series that are already hidden, add the hidden class
+ if (!s.show && s.showLabel) {
+ td1.addClass('jqplot-series-hidden');
+ td2.addClass('jqplot-series-hidden');
+ }
+ }
+
+ pad = true;
+ }
+ }
+ idx++;
+ }
+
+ td1 = td2 = div0 = div1 = null;
+ }
+ }
+ return this._elem;
+ };
+
+ var handleToggle = function (ev) {
+ var d = ev.data,
+ s = d.series,
+ replot = d.replot,
+ plot = d.plot,
+ speed = d.speed,
+ sidx = s.index,
+ showing = false;
+
+ if (s.canvas._elem.is(':hidden') || !s.show) {
+ showing = true;
+ }
+
+ var doLegendToggle = function() {
+
+ if (replot) {
+ var opts = {};
+
+ if ($.isPlainObject(replot)) {
+ $.extend(true, opts, replot);
+ }
+
+ plot.replot(opts);
+ // if showing, there was no canvas element to fade in, so hide here
+ // and then do a fade in.
+ if (showing && speed) {
+ var s = plot.series[sidx];
+
+ if (s.shadowCanvas._elem) {
+ s.shadowCanvas._elem.hide().fadeIn(speed);
+ }
+ s.canvas._elem.hide().fadeIn(speed);
+ s.canvas._elem.nextAll('.jqplot-point-label.jqplot-series-'+s.index).hide().fadeIn(speed);
+ }
+
+ }
+
+ else {
+ var s = plot.series[sidx];
+
+ if (s.canvas._elem.is(':hidden') || !s.show) {
+ // Not sure if there is a better way to check for showSwatches and showLabels === true.
+ // Test for "undefined" since default values for both showSwatches and showLables is true.
+ if (typeof plot.options.legend.showSwatches === 'undefined' || plot.options.legend.showSwatches === true) {
+ plot.legend._elem.find('td').eq(sidx * 2).addClass('jqplot-series-hidden');
+ }
+ if (typeof plot.options.legend.showLabels === 'undefined' || plot.options.legend.showLabels === true) {
+ plot.legend._elem.find('td').eq((sidx * 2) + 1).addClass('jqplot-series-hidden');
+ }
+ }
+ else {
+ if (typeof plot.options.legend.showSwatches === 'undefined' || plot.options.legend.showSwatches === true) {
+ plot.legend._elem.find('td').eq(sidx * 2).removeClass('jqplot-series-hidden');
+ }
+ if (typeof plot.options.legend.showLabels === 'undefined' || plot.options.legend.showLabels === true) {
+ plot.legend._elem.find('td').eq((sidx * 2) + 1).removeClass('jqplot-series-hidden');
+ }
+ }
+
+ }
+
+ };
+
+ s.toggleDisplay(ev, doLegendToggle);
+ };
+
+ // called with scope of plot.
+ var postDraw = function () {
+ if (this.legend.renderer.constructor == $.jqplot.EnhancedLegendRenderer && this.legend.seriesToggle){
+ var e = this.legend._elem.detach();
+ this.eventCanvas._elem.after(e);
+ }
+ };
+})(jQuery);
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js
new file mode 100644
index 00000000..73dc9fa1
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(c){c.jqplot.EnhancedLegendRenderer=function(){c.jqplot.TableLegendRenderer.call(this)};c.jqplot.EnhancedLegendRenderer.prototype=new c.jqplot.TableLegendRenderer();c.jqplot.EnhancedLegendRenderer.prototype.constructor=c.jqplot.EnhancedLegendRenderer;c.jqplot.EnhancedLegendRenderer.prototype.init=function(d){this.numberRows=null;this.numberColumns=null;this.seriesToggle="normal";this.seriesToggleReplot=false;this.disableIEFading=true;c.extend(true,this,d);if(this.seriesToggle){c.jqplot.postDrawHooks.push(b)}};c.jqplot.EnhancedLegendRenderer.prototype.draw=function(m,y){var f=this;if(this.show){var r=this._series;var u;var w="position:absolute;";w+=(this.background)?"background:"+this.background+";":"";w+=(this.border)?"border:"+this.border+";":"";w+=(this.fontSize)?"font-size:"+this.fontSize+";":"";w+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";w+=(this.textColor)?"color:"+this.textColor+";":"";w+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";w+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";w+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";w+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=c('<table class="jqplot-table-legend" style="'+w+'"></table>');if(this.seriesToggle){this._elem.css("z-index","3")}var C=false,q=false,d,o;if(this.numberRows){d=this.numberRows;if(!this.numberColumns){o=Math.ceil(r.length/d)}else{o=this.numberColumns}}else{if(this.numberColumns){o=this.numberColumns;d=Math.ceil(r.length/this.numberColumns)}else{d=r.length;o=1}}var B,z,e,l,k,n,p,t,h,g;var v=0;for(B=r.length-1;B>=0;B--){if(o==1&&r[B]._stack||r[B].renderer.constructor==c.jqplot.BezierCurveRenderer){q=true}}for(B=0;B<d;B++){e=c(document.createElement("tr"));e.addClass("jqplot-table-legend");if(q){e.prependTo(this._elem)}else{e.appendTo(this._elem)}for(z=0;z<o;z++){if(v<r.length&&(r[v].show||r[v].showLabel)){u=r[v];n=this.labels[v]||u.label.toString();if(n){var x=u.color;if(!q){if(B>0){C=true}else{C=false}}else{if(B==d-1){C=false}else{C=true}}p=(C)?this.rowSpacing:"0";l=c(document.createElement("td"));l.addClass("jqplot-table-legend jqplot-table-legend-swatch");l.css({textAlign:"center",paddingTop:p});h=c(document.createElement("div"));h.addClass("jqplot-table-legend-swatch-outline");g=c(document.createElement("div"));g.addClass("jqplot-table-legend-swatch");g.css({backgroundColor:x,borderColor:x});l.append(h.append(g));k=c(document.createElement("td"));k.addClass("jqplot-table-legend jqplot-table-legend-label");k.css("paddingTop",p);if(this.escapeHtml){k.text(n)}else{k.html(n)}if(q){if(this.showLabels){k.prependTo(e)}if(this.showSwatches){l.prependTo(e)}}else{if(this.showSwatches){l.appendTo(e)}if(this.showLabels){k.appendTo(e)}}if(this.seriesToggle){var A;if(typeof(this.seriesToggle)==="string"||typeof(this.seriesToggle)==="number"){if(!c.jqplot.use_excanvas||!this.disableIEFading){A=this.seriesToggle}}if(this.showSwatches){l.bind("click",{series:u,speed:A,plot:y,replot:this.seriesToggleReplot},a);l.addClass("jqplot-seriesToggle")}if(this.showLabels){k.bind("click",{series:u,speed:A,plot:y,replot:this.seriesToggleReplot},a);k.addClass("jqplot-seriesToggle")}if(!u.show&&u.showLabel){l.addClass("jqplot-series-hidden");k.addClass("jqplot-series-hidden")}}C=true}}v++}l=k=h=g=null}}return this._elem};var a=function(j){var i=j.data,m=i.series,k=i.replot,h=i.plot,f=i.speed,l=m.index,g=false;if(m.canvas._elem.is(":hidden")||!m.show){g=true}var e=function(){if(k){var n={};if(c.isPlainObject(k)){c.extend(true,n,k)}h.replot(n);if(g&&f){var d=h.series[l];if(d.shadowCanvas._elem){d.shadowCanvas._elem.hide().fadeIn(f)}d.canvas._elem.hide().fadeIn(f);d.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+d.index).hide().fadeIn(f)}}else{var d=h.series[l];if(d.canvas._elem.is(":hidden")||!d.show){if(typeof h.options.legend.showSwatches==="undefined"||h.options.legend.showSwatches===true){h.legend._elem.find("td").eq(l*2).addClass("jqplot-series-hidden")}if(typeof h.options.legend.showLabels==="undefined"||h.options.legend.showLabels===true){h.legend._elem.find("td").eq((l*2)+1).addClass("jqplot-series-hidden")}}else{if(typeof h.options.legend.showSwatches==="undefined"||h.options.legend.showSwatches===true){h.legend._elem.find("td").eq(l*2).removeClass("jqplot-series-hidden")}if(typeof h.options.legend.showLabels==="undefined"||h.options.legend.showLabels===true){h.legend._elem.find("td").eq((l*2)+1).removeClass("jqplot-series-hidden")}}}};m.toggleDisplay(j,e)};var b=function(){if(this.legend.renderer.constructor==c.jqplot.EnhancedLegendRenderer&&this.legend.seriesToggle){var d=this.legend._elem.detach();this.eventCanvas._elem.after(d)}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.js
new file mode 100644
index 00000000..c72660cc
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.js
@@ -0,0 +1,943 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ /**
+ * Class: $.jqplot.FunnelRenderer
+ * Plugin renderer to draw a funnel chart.
+ * x values, if present, will be used as labels.
+ * y values give area size.
+ *
+ * Funnel charts will draw a single series
+ * only.
+ *
+ * To use this renderer, you need to include the
+ * funnel renderer plugin, for example:
+ *
+ * > <script type="text/javascript" src="plugins/jqplot.funnelRenderer.js"></script>
+ *
+ * Properties described here are passed into the $.jqplot function
+ * as options on the series renderer. For example:
+ *
+ * > plot2 = $.jqplot('chart2', [s1, s2], {
+ * > seriesDefaults: {
+ * > renderer:$.jqplot.FunnelRenderer,
+ * > rendererOptions:{
+ * > sectionMargin: 12,
+ * > widthRatio: 0.3
+ * > }
+ * > }
+ * > });
+ *
+ * IMPORTANT
+ *
+ * *The funnel renderer will reorder data in descending order* so the largest value in
+ * the data set is first and displayed on top of the funnel. Data will then
+ * be displayed in descending order down the funnel. The area of each funnel
+ * section will correspond to the value of each data point relative to the sum
+ * of all values. That is section area is proportional to section value divided by
+ * sum of all section values.
+ *
+ * If your data is not in descending order when passed into the plot, *it will be
+ * reordered* when stored in the series.data property. A copy of the unordered
+ * data is kept in the series._unorderedData property.
+ *
+ * A funnel plot will trigger events on the plot target
+ * according to user interaction. All events return the event object,
+ * the series index, the point (section) index, and the point data for
+ * the appropriate section. *Note* the point index will referr to the ordered
+ * data, not the original unordered data.
+ *
+ * 'jqplotDataMouseOver' - triggered when mousing over a section.
+ * 'jqplotDataHighlight' - triggered the first time user mouses over a section,
+ * if highlighting is enabled.
+ * 'jqplotDataUnhighlight' - triggered when a user moves the mouse out of
+ * a highlighted section.
+ * 'jqplotDataClick' - triggered when the user clicks on a section.
+ * 'jqplotDataRightClick' - tiggered when the user right clicks on a section if
+ * the "captureRightClick" option is set to true on the plot.
+ */
+ $.jqplot.FunnelRenderer = function(){
+ $.jqplot.LineRenderer.call(this);
+ };
+
+ $.jqplot.FunnelRenderer.prototype = new $.jqplot.LineRenderer();
+ $.jqplot.FunnelRenderer.prototype.constructor = $.jqplot.FunnelRenderer;
+
+ // called with scope of a series
+ $.jqplot.FunnelRenderer.prototype.init = function(options, plot) {
+ // Group: Properties
+ //
+ // prop: padding
+ // padding between the funnel and plot edges, legend, etc.
+ this.padding = {top: 20, right: 20, bottom: 20, left: 20};
+ // prop: sectionMargin
+ // spacing between funnel sections in pixels.
+ this.sectionMargin = 6;
+ // prop: fill
+ // true or false, wether to fill the areas.
+ this.fill = true;
+ // prop: shadowOffset
+ // offset of the shadow from the area and offset of
+ // each succesive stroke of the shadow from the last.
+ this.shadowOffset = 2;
+ // prop: shadowAlpha
+ // transparency of the shadow (0 = transparent, 1 = opaque)
+ this.shadowAlpha = 0.07;
+ // prop: shadowDepth
+ // number of strokes to apply to the shadow,
+ // each stroke offset shadowOffset from the last.
+ this.shadowDepth = 5;
+ // prop: highlightMouseOver
+ // True to highlight area when moused over.
+ // This must be false to enable highlightMouseDown to highlight when clicking on a area.
+ this.highlightMouseOver = true;
+ // prop: highlightMouseDown
+ // True to highlight when a mouse button is pressed over a area.
+ // This will be disabled if highlightMouseOver is true.
+ this.highlightMouseDown = false;
+ // prop: highlightColors
+ // array of colors to use when highlighting an area.
+ this.highlightColors = [];
+ // prop: widthRatio
+ // The ratio of the width of the top of the funnel to the bottom.
+ // a ratio of 0 will make an upside down pyramid.
+ this.widthRatio = 0.2;
+ // prop: lineWidth
+ // width of line if areas are stroked and not filled.
+ this.lineWidth = 2;
+ // prop: dataLabels
+ // Either 'label', 'value', 'percent' or an array of labels to place on the pie slices.
+ // Defaults to percentage of each pie slice.
+ this.dataLabels = 'percent';
+ // prop: showDataLabels
+ // true to show data labels on slices.
+ this.showDataLabels = false;
+ // prop: dataLabelFormatString
+ // Format string for data labels. If none, '%s' is used for "label" and for arrays, '%d' for value and '%d%%' for percentage.
+ this.dataLabelFormatString = null;
+ // prop: dataLabelThreshold
+ // Threshhold in percentage (0 - 100) of pie area, below which no label will be displayed.
+ // This applies to all label types, not just to percentage labels.
+ this.dataLabelThreshold = 3;
+ this._type = 'funnel';
+
+ this.tickRenderer = $.jqplot.FunnelTickRenderer;
+
+ // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
+ if (options.highlightMouseDown && options.highlightMouseOver == null) {
+ options.highlightMouseOver = false;
+ }
+
+ $.extend(true, this, options);
+
+ // index of the currenty highlighted point, if any
+ this._highlightedPoint = null;
+
+ // lengths of bases, or horizontal sides of areas of trapezoid.
+ this._bases = [];
+ // total area
+ this._atot;
+ // areas of segments.
+ this._areas = [];
+ // vertical lengths of segments.
+ this._lengths = [];
+ // angle of the funnel to vertical.
+ this._angle;
+ this._dataIndices = [];
+
+ // sort data
+ this._unorderedData = $.extend(true, [], this.data);
+ var idxs = $.extend(true, [], this.data);
+ for (var i=0; i<idxs.length; i++) {
+ idxs[i].push(i);
+ }
+ this.data.sort( function (a, b) { return b[1] - a[1]; } );
+ idxs.sort( function (a, b) { return b[1] - a[1]; });
+ for (var i=0; i<idxs.length; i++) {
+ this._dataIndices.push(idxs[i][2]);
+ }
+
+ // set highlight colors if none provided
+ if (this.highlightColors.length == 0) {
+ for (var i=0; i<this.seriesColors.length; i++){
+ var rgba = $.jqplot.getColorComponents(this.seriesColors[i]);
+ var newrgb = [rgba[0], rgba[1], rgba[2]];
+ var sum = newrgb[0] + newrgb[1] + newrgb[2];
+ for (var j=0; j<3; j++) {
+ // when darkening, lowest color component can be is 60.
+ newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.4 * (255 - newrgb[j]);
+ newrgb[j] = parseInt(newrgb[j], 10);
+ }
+ this.highlightColors.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')');
+ }
+ }
+
+ plot.postParseOptionsHooks.addOnce(postParseOptions);
+ plot.postInitHooks.addOnce(postInit);
+ plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
+ plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
+ plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
+ plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
+ plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick);
+ plot.postDrawHooks.addOnce(postPlotDraw);
+
+ };
+
+ // gridData will be of form [label, percentage of total]
+ $.jqplot.FunnelRenderer.prototype.setGridData = function(plot) {
+ // set gridData property. This will hold angle in radians of each data point.
+ var sum = 0;
+ var td = [];
+ for (var i=0; i<this.data.length; i++){
+ sum += this.data[i][1];
+ td.push([this.data[i][0], this.data[i][1]]);
+ }
+
+ // normalize y values, so areas are proportional.
+ for (var i=0; i<td.length; i++) {
+ td[i][1] = td[i][1]/sum;
+ }
+
+ this._bases = new Array(td.length + 1);
+ this._lengths = new Array(td.length);
+
+ this.gridData = td;
+ };
+
+ $.jqplot.FunnelRenderer.prototype.makeGridData = function(data, plot) {
+ // set gridData property. This will hold angle in radians of each data point.
+ var sum = 0;
+ var td = [];
+ for (var i=0; i<this.data.length; i++){
+ sum += this.data[i][1];
+ td.push([this.data[i][0], this.data[i][1]]);
+ }
+
+ // normalize y values, so areas are proportional.
+ for (var i=0; i<td.length; i++) {
+ td[i][1] = td[i][1]/sum;
+ }
+
+ this._bases = new Array(td.length + 1);
+ this._lengths = new Array(td.length);
+
+ return td;
+ };
+
+ $.jqplot.FunnelRenderer.prototype.drawSection = function (ctx, vertices, color, isShadow) {
+ var fill = this.fill;
+ var lineWidth = this.lineWidth;
+ ctx.save();
+
+ if (isShadow) {
+ for (var i=0; i<this.shadowDepth; i++) {
+ ctx.save();
+ ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));
+ doDraw();
+ }
+ }
+
+ else {
+ doDraw();
+ }
+
+ function doDraw () {
+ ctx.beginPath();
+ ctx.fillStyle = color;
+ ctx.strokeStyle = color;
+ ctx.lineWidth = lineWidth;
+ ctx.moveTo(vertices[0][0], vertices[0][1]);
+ for (var i=1; i<4; i++) {
+ ctx.lineTo(vertices[i][0], vertices[i][1]);
+ }
+ ctx.closePath();
+ if (fill) {
+ ctx.fill();
+ }
+ else {
+ ctx.stroke();
+ }
+ }
+
+ if (isShadow) {
+ for (var i=0; i<this.shadowDepth; i++) {
+ ctx.restore();
+ }
+ }
+
+ ctx.restore();
+ };
+
+ // called with scope of series
+ $.jqplot.FunnelRenderer.prototype.draw = function (ctx, gd, options, plot) {
+ var i;
+ var opts = (options != undefined) ? options : {};
+ // offset and direction of offset due to legend placement
+ var offx = 0;
+ var offy = 0;
+ var trans = 1;
+ this._areas = [];
+ // var colorGenerator = new this.colorGenerator(this.seriesColors);
+ if (options.legendInfo && options.legendInfo.placement == 'insideGrid') {
+ var li = options.legendInfo;
+ switch (li.location) {
+ case 'nw':
+ offx = li.width + li.xoffset;
+ break;
+ case 'w':
+ offx = li.width + li.xoffset;
+ break;
+ case 'sw':
+ offx = li.width + li.xoffset;
+ break;
+ case 'ne':
+ offx = li.width + li.xoffset;
+ trans = -1;
+ break;
+ case 'e':
+ offx = li.width + li.xoffset;
+ trans = -1;
+ break;
+ case 'se':
+ offx = li.width + li.xoffset;
+ trans = -1;
+ break;
+ case 'n':
+ offy = li.height + li.yoffset;
+ break;
+ case 's':
+ offy = li.height + li.yoffset;
+ trans = -1;
+ break;
+ default:
+ break;
+ }
+ }
+
+ var loff = (trans==1) ? this.padding.left + offx : this.padding.left;
+ var toff = (trans==1) ? this.padding.top + offy : this.padding.top;
+ var roff = (trans==-1) ? this.padding.right + offx : this.padding.right;
+ var boff = (trans==-1) ? this.padding.bottom + offy : this.padding.bottom;
+
+ var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
+ var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
+ var fill = (opts.fill != undefined) ? opts.fill : this.fill;
+ var cw = ctx.canvas.width;
+ var ch = ctx.canvas.height;
+ this._bases[0] = cw - loff - roff;
+ var ltot = this._length = ch - toff - boff;
+
+ var hend = this._bases[0]*this.widthRatio;
+ this._atot = ltot/2 * (this._bases[0] + this._bases[0]*this.widthRatio);
+
+ this._angle = Math.atan((this._bases[0] - hend)/2/ltot);
+
+ for (i=0; i<gd.length; i++) {
+ this._areas.push(gd[i][1] * this._atot);
+ }
+
+
+ var guess, err, count, lsum=0;
+ var tolerance = 0.0001;
+
+ for (i=0; i<this._areas.length; i++) {
+ guess = this._areas[i]/this._bases[i];
+ err = 999999;
+ this._lengths[i] = guess;
+ count = 0;
+ while (err > this._lengths[i]*tolerance && count < 100) {
+ this._lengths[i] = this._areas[i]/(this._bases[i] - this._lengths[i] * Math.tan(this._angle));
+ err = Math.abs(this._lengths[i] - guess);
+ this._bases[i+1] = this._bases[i] - (2*this._lengths[i]*Math.tan(this._angle));
+ guess = this._lengths[i];
+ count++;
+ }
+ lsum += this._lengths[i];
+ }
+
+ // figure out vertices of each section
+ this._vertices = new Array(gd.length);
+
+ // these are 4 coners of entire trapezoid
+ var p0 = [loff, toff],
+ p1 = [loff+this._bases[0], toff],
+ p2 = [loff + (this._bases[0] - this._bases[this._bases.length-1])/2, toff + this._length],
+ p3 = [p2[0] + this._bases[this._bases.length-1], p2[1]];
+
+ // equations of right and left sides, returns x, y values given height of section (y value)
+ function findleft (l) {
+ var m = (p0[1] - p2[1])/(p0[0] - p2[0]);
+ var b = p0[1] - m*p0[0];
+ var y = l + p0[1];
+
+ return [(y - b)/m, y];
+ }
+
+ function findright (l) {
+ var m = (p1[1] - p3[1])/(p1[0] - p3[0]);
+ var b = p1[1] - m*p1[0];
+ var y = l + p1[1];
+
+ return [(y - b)/m, y];
+ }
+
+ var x = offx, y = offy;
+ var h=0, adj=0;
+
+ for (i=0; i<gd.length; i++) {
+ this._vertices[i] = new Array();
+ var v = this._vertices[i];
+ var sm = this.sectionMargin;
+ if (i == 0) {
+ adj = 0;
+ }
+ if (i == 1) {
+ adj = sm/3;
+ }
+ else if (i > 0 && i < gd.length-1) {
+ adj = sm/2;
+ }
+ else if (i == gd.length -1) {
+ adj = 2*sm/3;
+ }
+ v.push(findleft(h+adj));
+ v.push(findright(h+adj));
+ h += this._lengths[i];
+ if (i == 0) {
+ adj = -2*sm/3;
+ }
+ else if (i > 0 && i < gd.length-1) {
+ adj = -sm/2;
+ }
+ else if (i == gd.length - 1) {
+ adj = 0;
+ }
+ v.push(findright(h+adj));
+ v.push(findleft(h+adj));
+
+ }
+
+ if (this.shadow) {
+ var shadowColor = 'rgba(0,0,0,'+this.shadowAlpha+')';
+ for (var i=0; i<gd.length; i++) {
+ this.renderer.drawSection.call (this, ctx, this._vertices[i], shadowColor, true);
+ }
+
+ }
+ for (var i=0; i<gd.length; i++) {
+ var v = this._vertices[i];
+ this.renderer.drawSection.call (this, ctx, v, this.seriesColors[i]);
+
+ if (this.showDataLabels && gd[i][1]*100 >= this.dataLabelThreshold) {
+ var fstr, label;
+
+ if (this.dataLabels == 'label') {
+ fstr = this.dataLabelFormatString || '%s';
+ label = $.jqplot.sprintf(fstr, gd[i][0]);
+ }
+ else if (this.dataLabels == 'value') {
+ fstr = this.dataLabelFormatString || '%d';
+ label = $.jqplot.sprintf(fstr, this.data[i][1]);
+ }
+ else if (this.dataLabels == 'percent') {
+ fstr = this.dataLabelFormatString || '%d%%';
+ label = $.jqplot.sprintf(fstr, gd[i][1]*100);
+ }
+ else if (this.dataLabels.constructor == Array) {
+ fstr = this.dataLabelFormatString || '%s';
+ label = $.jqplot.sprintf(fstr, this.dataLabels[this._dataIndices[i]]);
+ }
+
+ var fact = (this._radius ) * this.dataLabelPositionFactor + this.sliceMargin + this.dataLabelNudge;
+
+ var x = (v[0][0] + v[1][0])/2 + this.canvas._offsets.left;
+ var y = (v[1][1] + v[2][1])/2 + this.canvas._offsets.top;
+
+ var labelelem = $('<span class="jqplot-funnel-series jqplot-data-label" style="position:absolute;">' + label + '</span>').insertBefore(plot.eventCanvas._elem);
+ x -= labelelem.width()/2;
+ y -= labelelem.height()/2;
+ x = Math.round(x);
+ y = Math.round(y);
+ labelelem.css({left: x, top: y});
+ }
+
+ }
+
+ };
+
+ $.jqplot.FunnelAxisRenderer = function() {
+ $.jqplot.LinearAxisRenderer.call(this);
+ };
+
+ $.jqplot.FunnelAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
+ $.jqplot.FunnelAxisRenderer.prototype.constructor = $.jqplot.FunnelAxisRenderer;
+
+
+ // There are no traditional axes on a funnel chart. We just need to provide
+ // dummy objects with properties so the plot will render.
+ // called with scope of axis object.
+ $.jqplot.FunnelAxisRenderer.prototype.init = function(options){
+ //
+ this.tickRenderer = $.jqplot.FunnelTickRenderer;
+ $.extend(true, this, options);
+ // I don't think I'm going to need _dataBounds here.
+ // have to go Axis scaling in a way to fit chart onto plot area
+ // and provide u2p and p2u functionality for mouse cursor, etc.
+ // for convienence set _dataBounds to 0 and 100 and
+ // set min/max to 0 and 100.
+ this._dataBounds = {min:0, max:100};
+ this.min = 0;
+ this.max = 100;
+ this.showTicks = false;
+ this.ticks = [];
+ this.showMark = false;
+ this.show = false;
+ };
+
+
+
+ /**
+ * Class: $.jqplot.FunnelLegendRenderer
+ * Legend Renderer specific to funnel plots. Set by default
+ * when the user creates a funnel plot.
+ */
+ $.jqplot.FunnelLegendRenderer = function(){
+ $.jqplot.TableLegendRenderer.call(this);
+ };
+
+ $.jqplot.FunnelLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
+ $.jqplot.FunnelLegendRenderer.prototype.constructor = $.jqplot.FunnelLegendRenderer;
+
+ $.jqplot.FunnelLegendRenderer.prototype.init = function(options) {
+ // Group: Properties
+ //
+ // prop: numberRows
+ // Maximum number of rows in the legend. 0 or null for unlimited.
+ this.numberRows = null;
+ // prop: numberColumns
+ // Maximum number of columns in the legend. 0 or null for unlimited.
+ this.numberColumns = null;
+ $.extend(true, this, options);
+ };
+
+ // called with context of legend
+ $.jqplot.FunnelLegendRenderer.prototype.draw = function() {
+ var legend = this;
+ if (this.show) {
+ var series = this._series;
+ var ss = 'position:absolute;';
+ ss += (this.background) ? 'background:'+this.background+';' : '';
+ ss += (this.border) ? 'border:'+this.border+';' : '';
+ ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
+ ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : '';
+ ss += (this.textColor) ? 'color:'+this.textColor+';' : '';
+ ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : '';
+ ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : '';
+ ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : '';
+ ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : '';
+ this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>');
+ // Funnel charts legends don't go by number of series, but by number of data points
+ // in the series. Refactor things here for that.
+
+ var pad = false,
+ reverse = false,
+ nr, nc;
+ var s = series[0];
+ var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors);
+
+ if (s.show) {
+ var pd = s.data;
+ if (this.numberRows) {
+ nr = this.numberRows;
+ if (!this.numberColumns){
+ nc = Math.ceil(pd.length/nr);
+ }
+ else{
+ nc = this.numberColumns;
+ }
+ }
+ else if (this.numberColumns) {
+ nc = this.numberColumns;
+ nr = Math.ceil(pd.length/this.numberColumns);
+ }
+ else {
+ nr = pd.length;
+ nc = 1;
+ }
+
+ var i, j, tr, td1, td2, lt, rs, color;
+ var idx = 0;
+
+ for (i=0; i<nr; i++) {
+ if (reverse){
+ tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem);
+ }
+ else{
+ tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);
+ }
+ for (j=0; j<nc; j++) {
+ if (idx < pd.length){
+ lt = this.labels[idx] || pd[idx][0].toString();
+ color = colorGenerator.next();
+ if (!reverse){
+ if (i>0){
+ pad = true;
+ }
+ else{
+ pad = false;
+ }
+ }
+ else{
+ if (i == nr -1){
+ pad = false;
+ }
+ else{
+ pad = true;
+ }
+ }
+ rs = (pad) ? this.rowSpacing : '0';
+
+ td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
+ '<div><div class="jqplot-table-legend-swatch" style="border-color:'+color+';"></div>'+
+ '</div></td>');
+ td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
+ if (this.escapeHtml){
+ td2.text(lt);
+ }
+ else {
+ td2.html(lt);
+ }
+ if (reverse) {
+ td2.prependTo(tr);
+ td1.prependTo(tr);
+ }
+ else {
+ td1.appendTo(tr);
+ td2.appendTo(tr);
+ }
+ pad = true;
+ }
+ idx++;
+ }
+ }
+ }
+ }
+ return this._elem;
+ };
+
+ // $.jqplot.FunnelLegendRenderer.prototype.pack = function(offsets) {
+ // if (this.show) {
+ // // fake a grid for positioning
+ // var grid = {_top:offsets.top, _left:offsets.left, _right:offsets.right, _bottom:this._plotDimensions.height - offsets.bottom};
+ // if (this.placement == 'insideGrid') {
+ // switch (this.location) {
+ // case 'nw':
+ // var a = grid._left + this.xoffset;
+ // var b = grid._top + this.yoffset;
+ // this._elem.css('left', a);
+ // this._elem.css('top', b);
+ // break;
+ // case 'n':
+ // var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
+ // var b = grid._top + this.yoffset;
+ // this._elem.css('left', a);
+ // this._elem.css('top', b);
+ // break;
+ // case 'ne':
+ // var a = offsets.right + this.xoffset;
+ // var b = grid._top + this.yoffset;
+ // this._elem.css({right:a, top:b});
+ // break;
+ // case 'e':
+ // var a = offsets.right + this.xoffset;
+ // var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
+ // this._elem.css({right:a, top:b});
+ // break;
+ // case 'se':
+ // var a = offsets.right + this.xoffset;
+ // var b = offsets.bottom + this.yoffset;
+ // this._elem.css({right:a, bottom:b});
+ // break;
+ // case 's':
+ // var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
+ // var b = offsets.bottom + this.yoffset;
+ // this._elem.css({left:a, bottom:b});
+ // break;
+ // case 'sw':
+ // var a = grid._left + this.xoffset;
+ // var b = offsets.bottom + this.yoffset;
+ // this._elem.css({left:a, bottom:b});
+ // break;
+ // case 'w':
+ // var a = grid._left + this.xoffset;
+ // var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
+ // this._elem.css({left:a, top:b});
+ // break;
+ // default: // same as 'se'
+ // var a = grid._right - this.xoffset;
+ // var b = grid._bottom + this.yoffset;
+ // this._elem.css({right:a, bottom:b});
+ // break;
+ // }
+ //
+ // }
+ // else {
+ // switch (this.location) {
+ // case 'nw':
+ // var a = this._plotDimensions.width - grid._left + this.xoffset;
+ // var b = grid._top + this.yoffset;
+ // this._elem.css('right', a);
+ // this._elem.css('top', b);
+ // break;
+ // case 'n':
+ // var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
+ // var b = this._plotDimensions.height - grid._top + this.yoffset;
+ // this._elem.css('left', a);
+ // this._elem.css('bottom', b);
+ // break;
+ // case 'ne':
+ // var a = this._plotDimensions.width - offsets.right + this.xoffset;
+ // var b = grid._top + this.yoffset;
+ // this._elem.css({left:a, top:b});
+ // break;
+ // case 'e':
+ // var a = this._plotDimensions.width - offsets.right + this.xoffset;
+ // var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
+ // this._elem.css({left:a, top:b});
+ // break;
+ // case 'se':
+ // var a = this._plotDimensions.width - offsets.right + this.xoffset;
+ // var b = offsets.bottom + this.yoffset;
+ // this._elem.css({left:a, bottom:b});
+ // break;
+ // case 's':
+ // var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
+ // var b = this._plotDimensions.height - offsets.bottom + this.yoffset;
+ // this._elem.css({left:a, top:b});
+ // break;
+ // case 'sw':
+ // var a = this._plotDimensions.width - grid._left + this.xoffset;
+ // var b = offsets.bottom + this.yoffset;
+ // this._elem.css({right:a, bottom:b});
+ // break;
+ // case 'w':
+ // var a = this._plotDimensions.width - grid._left + this.xoffset;
+ // var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
+ // this._elem.css({right:a, top:b});
+ // break;
+ // default: // same as 'se'
+ // var a = grid._right - this.xoffset;
+ // var b = grid._bottom + this.yoffset;
+ // this._elem.css({right:a, bottom:b});
+ // break;
+ // }
+ // }
+ // }
+ // };
+
+ // setup default renderers for axes and legend so user doesn't have to
+ // called with scope of plot
+ function preInit(target, data, options) {
+ options = options || {};
+ options.axesDefaults = options.axesDefaults || {};
+ options.legend = options.legend || {};
+ options.seriesDefaults = options.seriesDefaults || {};
+ // only set these if there is a funnel series
+ var setopts = false;
+ if (options.seriesDefaults.renderer == $.jqplot.FunnelRenderer) {
+ setopts = true;
+ }
+ else if (options.series) {
+ for (var i=0; i < options.series.length; i++) {
+ if (options.series[i].renderer == $.jqplot.FunnelRenderer) {
+ setopts = true;
+ }
+ }
+ }
+
+ if (setopts) {
+ options.axesDefaults.renderer = $.jqplot.FunnelAxisRenderer;
+ options.legend.renderer = $.jqplot.FunnelLegendRenderer;
+ options.legend.preDraw = true;
+ options.sortData = false;
+ options.seriesDefaults.pointLabels = {show: false};
+ }
+ }
+
+ function postInit(target, data, options) {
+ // if multiple series, add a reference to the previous one so that
+ // funnel rings can nest.
+ for (var i=0; i<this.series.length; i++) {
+ if (this.series[i].renderer.constructor == $.jqplot.FunnelRenderer) {
+ // don't allow mouseover and mousedown at same time.
+ if (this.series[i].highlightMouseOver) {
+ this.series[i].highlightMouseDown = false;
+ }
+ }
+ }
+ }
+
+ // called with scope of plot
+ function postParseOptions(options) {
+ for (var i=0; i<this.series.length; i++) {
+ this.series[i].seriesColors = this.seriesColors;
+ this.series[i].colorGenerator = $.jqplot.colorGenerator;
+ }
+ }
+
+ function highlight (plot, sidx, pidx) {
+ var s = plot.series[sidx];
+ var canvas = plot.plugins.funnelRenderer.highlightCanvas;
+ canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height);
+ s._highlightedPoint = pidx;
+ plot.plugins.funnelRenderer.highlightedSeriesIndex = sidx;
+ s.renderer.drawSection.call(s, canvas._ctx, s._vertices[pidx], s.highlightColors[pidx], false);
+ }
+
+ function unhighlight (plot) {
+ var canvas = plot.plugins.funnelRenderer.highlightCanvas;
+ canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
+ for (var i=0; i<plot.series.length; i++) {
+ plot.series[i]._highlightedPoint = null;
+ }
+ plot.plugins.funnelRenderer.highlightedSeriesIndex = null;
+ plot.target.trigger('jqplotDataUnhighlight');
+ }
+
+ function handleMove(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ var evt1 = jQuery.Event('jqplotDataMouseOver');
+ evt1.pageX = ev.pageX;
+ evt1.pageY = ev.pageY;
+ plot.target.trigger(evt1, ins);
+ if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.funnelRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
+ var evt = jQuery.Event('jqplotDataHighlight');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ highlight (plot, ins[0], ins[1]);
+ }
+ }
+ else if (neighbor == null) {
+ unhighlight (plot);
+ }
+ }
+
+ function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.funnelRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
+ var evt = jQuery.Event('jqplotDataHighlight');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ highlight (plot, ins[0], ins[1]);
+ }
+ }
+ else if (neighbor == null) {
+ unhighlight (plot);
+ }
+ }
+
+ function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
+ var idx = plot.plugins.funnelRenderer.highlightedSeriesIndex;
+ if (idx != null && plot.series[idx].highlightMouseDown) {
+ unhighlight(plot);
+ }
+ }
+
+ function handleClick(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ var evt = jQuery.Event('jqplotDataClick');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ }
+ }
+
+ function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ var idx = plot.plugins.funnelRenderer.highlightedSeriesIndex;
+ if (idx != null && plot.series[idx].highlightMouseDown) {
+ unhighlight(plot);
+ }
+ var evt = jQuery.Event('jqplotDataRightClick');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ }
+ }
+
+ // called within context of plot
+ // create a canvas which we can draw on.
+ // insert it before the eventCanvas, so eventCanvas will still capture events.
+ function postPlotDraw() {
+ // Memory Leaks patch
+ if (this.plugins.funnelRenderer && this.plugins.funnelRenderer.highlightCanvas) {
+ this.plugins.funnelRenderer.highlightCanvas.resetCanvas();
+ this.plugins.funnelRenderer.highlightCanvas = null;
+ }
+
+ this.plugins.funnelRenderer = {};
+ this.plugins.funnelRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
+
+ // do we have any data labels? if so, put highlight canvas before those
+ var labels = $(this.targetId+' .jqplot-data-label');
+ if (labels.length) {
+ $(labels[0]).before(this.plugins.funnelRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-funnelRenderer-highlight-canvas', this._plotDimensions, this));
+ }
+ // else put highlight canvas before event canvas.
+ else {
+ this.eventCanvas._elem.before(this.plugins.funnelRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-funnelRenderer-highlight-canvas', this._plotDimensions, this));
+ }
+ var hctx = this.plugins.funnelRenderer.highlightCanvas.setContext();
+ this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); });
+ }
+
+ $.jqplot.preInitHooks.push(preInit);
+
+ $.jqplot.FunnelTickRenderer = function() {
+ $.jqplot.AxisTickRenderer.call(this);
+ };
+
+ $.jqplot.FunnelTickRenderer.prototype = new $.jqplot.AxisTickRenderer();
+ $.jqplot.FunnelTickRenderer.prototype.constructor = $.jqplot.FunnelTickRenderer;
+
+})(jQuery);
+
+ \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.min.js
new file mode 100644
index 00000000..c44e1b13
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(e){e.jqplot.FunnelRenderer=function(){e.jqplot.LineRenderer.call(this)};e.jqplot.FunnelRenderer.prototype=new e.jqplot.LineRenderer();e.jqplot.FunnelRenderer.prototype.constructor=e.jqplot.FunnelRenderer;e.jqplot.FunnelRenderer.prototype.init=function(p,t){this.padding={top:20,right:20,bottom:20,left:20};this.sectionMargin=6;this.fill=true;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=5;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.widthRatio=0.2;this.lineWidth=2;this.dataLabels="percent";this.showDataLabels=false;this.dataLabelFormatString=null;this.dataLabelThreshold=3;this._type="funnel";this.tickRenderer=e.jqplot.FunnelTickRenderer;if(p.highlightMouseDown&&p.highlightMouseOver==null){p.highlightMouseOver=false}e.extend(true,this,p);this._highlightedPoint=null;this._bases=[];this._atot;this._areas=[];this._lengths=[];this._angle;this._dataIndices=[];this._unorderedData=e.extend(true,[],this.data);var o=e.extend(true,[],this.data);for(var r=0;r<o.length;r++){o[r].push(r)}this.data.sort(function(v,u){return u[1]-v[1]});o.sort(function(v,u){return u[1]-v[1]});for(var r=0;r<o.length;r++){this._dataIndices.push(o[r][2])}if(this.highlightColors.length==0){for(var r=0;r<this.seriesColors.length;r++){var q=e.jqplot.getColorComponents(this.seriesColors[r]);var m=[q[0],q[1],q[2]];var s=m[0]+m[1]+m[2];for(var n=0;n<3;n++){m[n]=(s>570)?m[n]*0.8:m[n]+0.4*(255-m[n]);m[n]=parseInt(m[n],10)}this.highlightColors.push("rgb("+m[0]+","+m[1]+","+m[2]+")")}}t.postParseOptionsHooks.addOnce(k);t.postInitHooks.addOnce(g);t.eventListenerHooks.addOnce("jqplotMouseMove",a);t.eventListenerHooks.addOnce("jqplotMouseDown",b);t.eventListenerHooks.addOnce("jqplotMouseUp",j);t.eventListenerHooks.addOnce("jqplotClick",f);t.eventListenerHooks.addOnce("jqplotRightClick",l);t.postDrawHooks.addOnce(h)};e.jqplot.FunnelRenderer.prototype.setGridData=function(o){var n=0;var p=[];for(var m=0;m<this.data.length;m++){n+=this.data[m][1];p.push([this.data[m][0],this.data[m][1]])}for(var m=0;m<p.length;m++){p[m][1]=p[m][1]/n}this._bases=new Array(p.length+1);this._lengths=new Array(p.length);this.gridData=p};e.jqplot.FunnelRenderer.prototype.makeGridData=function(o,p){var n=0;var q=[];for(var m=0;m<this.data.length;m++){n+=this.data[m][1];q.push([this.data[m][0],this.data[m][1]])}for(var m=0;m<q.length;m++){q[m][1]=q[m][1]/n}this._bases=new Array(q.length+1);this._lengths=new Array(q.length);return q};e.jqplot.FunnelRenderer.prototype.drawSection=function(n,p,o,s){var t=this.fill;var m=this.lineWidth;n.save();if(s){for(var r=0;r<this.shadowDepth;r++){n.save();n.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));q()}}else{q()}function q(){n.beginPath();n.fillStyle=o;n.strokeStyle=o;n.lineWidth=m;n.moveTo(p[0][0],p[0][1]);for(var u=1;u<4;u++){n.lineTo(p[u][0],p[u][1])}n.closePath();if(t){n.fill()}else{n.stroke()}}if(s){for(var r=0;r<this.shadowDepth;r++){n.restore()}}n.restore()};e.jqplot.FunnelRenderer.prototype.draw=function(G,B,J,p){var Y;var L=(J!=undefined)?J:{};var w=0;var u=0;var R=1;this._areas=[];if(J.legendInfo&&J.legendInfo.placement=="insideGrid"){var O=J.legendInfo;switch(O.location){case"nw":w=O.width+O.xoffset;break;case"w":w=O.width+O.xoffset;break;case"sw":w=O.width+O.xoffset;break;case"ne":w=O.width+O.xoffset;R=-1;break;case"e":w=O.width+O.xoffset;R=-1;break;case"se":w=O.width+O.xoffset;R=-1;break;case"n":u=O.height+O.yoffset;break;case"s":u=O.height+O.yoffset;R=-1;break;default:break}}var t=(R==1)?this.padding.left+w:this.padding.left;var F=(R==1)?this.padding.top+u:this.padding.top;var M=(R==-1)?this.padding.right+w:this.padding.right;var o=(R==-1)?this.padding.bottom+u:this.padding.bottom;var P=(L.shadow!=undefined)?L.shadow:this.shadow;var q=(L.showLine!=undefined)?L.showLine:this.showLine;var C=(L.fill!=undefined)?L.fill:this.fill;var H=G.canvas.width;var N=G.canvas.height;this._bases[0]=H-t-M;var I=this._length=N-F-o;var r=this._bases[0]*this.widthRatio;this._atot=I/2*(this._bases[0]+this._bases[0]*this.widthRatio);this._angle=Math.atan((this._bases[0]-r)/2/I);for(Y=0;Y<B.length;Y++){this._areas.push(B[Y][1]*this._atot)}var E,aa,W,Q=0;var n=0.0001;for(Y=0;Y<this._areas.length;Y++){E=this._areas[Y]/this._bases[Y];aa=999999;this._lengths[Y]=E;W=0;while(aa>this._lengths[Y]*n&&W<100){this._lengths[Y]=this._areas[Y]/(this._bases[Y]-this._lengths[Y]*Math.tan(this._angle));aa=Math.abs(this._lengths[Y]-E);this._bases[Y+1]=this._bases[Y]-(2*this._lengths[Y]*Math.tan(this._angle));E=this._lengths[Y];W++}Q+=this._lengths[Y]}this._vertices=new Array(B.length);var ae=[t,F],ad=[t+this._bases[0],F],ac=[t+(this._bases[0]-this._bases[this._bases.length-1])/2,F+this._length],ab=[ac[0]+this._bases[this._bases.length-1],ac[1]];function V(ag){var x=(ae[1]-ac[1])/(ae[0]-ac[0]);var v=ae[1]-x*ae[0];var ah=ag+ae[1];return[(ah-v)/x,ah]}function D(ag){var x=(ad[1]-ab[1])/(ad[0]-ab[0]);var v=ad[1]-x*ad[0];var ah=ag+ad[1];return[(ah-v)/x,ah]}var T=w,S=u;var Z=0,m=0;for(Y=0;Y<B.length;Y++){this._vertices[Y]=new Array();var U=this._vertices[Y];var A=this.sectionMargin;if(Y==0){m=0}if(Y==1){m=A/3}else{if(Y>0&&Y<B.length-1){m=A/2}else{if(Y==B.length-1){m=2*A/3}}}U.push(V(Z+m));U.push(D(Z+m));Z+=this._lengths[Y];if(Y==0){m=-2*A/3}else{if(Y>0&&Y<B.length-1){m=-A/2}else{if(Y==B.length-1){m=0}}}U.push(D(Z+m));U.push(V(Z+m))}if(this.shadow){var af="rgba(0,0,0,"+this.shadowAlpha+")";for(var Y=0;Y<B.length;Y++){this.renderer.drawSection.call(this,G,this._vertices[Y],af,true)}}for(var Y=0;Y<B.length;Y++){var U=this._vertices[Y];this.renderer.drawSection.call(this,G,U,this.seriesColors[Y]);if(this.showDataLabels&&B[Y][1]*100>=this.dataLabelThreshold){var K,X;if(this.dataLabels=="label"){K=this.dataLabelFormatString||"%s";X=e.jqplot.sprintf(K,B[Y][0])}else{if(this.dataLabels=="value"){K=this.dataLabelFormatString||"%d";X=e.jqplot.sprintf(K,this.data[Y][1])}else{if(this.dataLabels=="percent"){K=this.dataLabelFormatString||"%d%%";X=e.jqplot.sprintf(K,B[Y][1]*100)}else{if(this.dataLabels.constructor==Array){K=this.dataLabelFormatString||"%s";X=e.jqplot.sprintf(K,this.dataLabels[this._dataIndices[Y]])}}}}var s=(this._radius)*this.dataLabelPositionFactor+this.sliceMargin+this.dataLabelNudge;var T=(U[0][0]+U[1][0])/2+this.canvas._offsets.left;var S=(U[1][1]+U[2][1])/2+this.canvas._offsets.top;var z=e('<span class="jqplot-funnel-series jqplot-data-label" style="position:absolute;">'+X+"</span>").insertBefore(p.eventCanvas._elem);T-=z.width()/2;S-=z.height()/2;T=Math.round(T);S=Math.round(S);z.css({left:T,top:S})}}};e.jqplot.FunnelAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.FunnelAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.FunnelAxisRenderer.prototype.constructor=e.jqplot.FunnelAxisRenderer;e.jqplot.FunnelAxisRenderer.prototype.init=function(m){this.tickRenderer=e.jqplot.FunnelTickRenderer;e.extend(true,this,m);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};e.jqplot.FunnelLegendRenderer=function(){e.jqplot.TableLegendRenderer.call(this)};e.jqplot.FunnelLegendRenderer.prototype=new e.jqplot.TableLegendRenderer();e.jqplot.FunnelLegendRenderer.prototype.constructor=e.jqplot.FunnelLegendRenderer;e.jqplot.FunnelLegendRenderer.prototype.init=function(m){this.numberRows=null;this.numberColumns=null;e.extend(true,this,m)};e.jqplot.FunnelLegendRenderer.prototype.draw=function(){var p=this;if(this.show){var x=this._series;var A="position:absolute;";A+=(this.background)?"background:"+this.background+";":"";A+=(this.border)?"border:"+this.border+";":"";A+=(this.fontSize)?"font-size:"+this.fontSize+";":"";A+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";A+=(this.textColor)?"color:"+this.textColor+";":"";A+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";A+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";A+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";A+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=e('<table class="jqplot-table-legend" style="'+A+'"></table>');var E=false,w=false,m,u;var y=x[0];var n=new e.jqplot.ColorGenerator(y.seriesColors);if(y.show){var F=y.data;if(this.numberRows){m=this.numberRows;if(!this.numberColumns){u=Math.ceil(F.length/m)}else{u=this.numberColumns}}else{if(this.numberColumns){u=this.numberColumns;m=Math.ceil(F.length/this.numberColumns)}else{m=F.length;u=1}}var D,C,o,r,q,t,v,B;var z=0;for(D=0;D<m;D++){if(w){o=e('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{o=e('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(C=0;C<u;C++){if(z<F.length){t=this.labels[z]||F[z][0].toString();B=n.next();if(!w){if(D>0){E=true}else{E=false}}else{if(D==m-1){E=false}else{E=true}}v=(E)?this.rowSpacing:"0";r=e('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+v+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+B+';"></div></div></td>');q=e('<td class="jqplot-table-legend" style="padding-top:'+v+';"></td>');if(this.escapeHtml){q.text(t)}else{q.html(t)}if(w){q.prependTo(o);r.prependTo(o)}else{r.appendTo(o);q.appendTo(o)}E=true}z++}}}}return this._elem};function c(q,p,n){n=n||{};n.axesDefaults=n.axesDefaults||{};n.legend=n.legend||{};n.seriesDefaults=n.seriesDefaults||{};var m=false;if(n.seriesDefaults.renderer==e.jqplot.FunnelRenderer){m=true}else{if(n.series){for(var o=0;o<n.series.length;o++){if(n.series[o].renderer==e.jqplot.FunnelRenderer){m=true}}}}if(m){n.axesDefaults.renderer=e.jqplot.FunnelAxisRenderer;n.legend.renderer=e.jqplot.FunnelLegendRenderer;n.legend.preDraw=true;n.sortData=false;n.seriesDefaults.pointLabels={show:false}}}function g(p,o,m){for(var n=0;n<this.series.length;n++){if(this.series[n].renderer.constructor==e.jqplot.FunnelRenderer){if(this.series[n].highlightMouseOver){this.series[n].highlightMouseDown=false}}}}function k(m){for(var n=0;n<this.series.length;n++){this.series[n].seriesColors=this.seriesColors;this.series[n].colorGenerator=e.jqplot.colorGenerator}}function d(q,p,o){var n=q.series[p];var m=q.plugins.funnelRenderer.highlightCanvas;m._ctx.clearRect(0,0,m._ctx.canvas.width,m._ctx.canvas.height);n._highlightedPoint=o;q.plugins.funnelRenderer.highlightedSeriesIndex=p;n.renderer.drawSection.call(n,m._ctx,n._vertices[o],n.highlightColors[o],false)}function i(o){var m=o.plugins.funnelRenderer.highlightCanvas;m._ctx.clearRect(0,0,m._ctx.canvas.width,m._ctx.canvas.height);for(var n=0;n<o.series.length;n++){o.series[n]._highlightedPoint=null}o.plugins.funnelRenderer.highlightedSeriesIndex=null;o.target.trigger("jqplotDataUnhighlight")}function a(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var n=jQuery.Event("jqplotDataMouseOver");n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o);if(r.series[o[0]].highlightMouseOver&&!(o[0]==r.plugins.funnelRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){var m=jQuery.Event("jqplotDataHighlight");m.which=q.which;m.pageX=q.pageX;m.pageY=q.pageY;r.target.trigger(m,o);d(r,o[0],o[1])}}else{if(s==null){i(r)}}}function b(p,o,s,r,q){if(r){var n=[r.seriesIndex,r.pointIndex,r.data];if(q.series[n[0]].highlightMouseDown&&!(n[0]==q.plugins.funnelRenderer.highlightedSeriesIndex&&n[1]==q.series[n[0]]._highlightedPoint)){var m=jQuery.Event("jqplotDataHighlight");m.which=p.which;m.pageX=p.pageX;m.pageY=p.pageY;q.target.trigger(m,n);d(q,n[0],n[1])}}else{if(r==null){i(q)}}}function j(o,n,r,q,p){var m=p.plugins.funnelRenderer.highlightedSeriesIndex;if(m!=null&&p.series[m].highlightMouseDown){i(p)}}function f(p,o,s,r,q){if(r){var n=[r.seriesIndex,r.pointIndex,r.data];var m=jQuery.Event("jqplotDataClick");m.which=p.which;m.pageX=p.pageX;m.pageY=p.pageY;q.target.trigger(m,n)}}function l(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var m=r.plugins.funnelRenderer.highlightedSeriesIndex;if(m!=null&&r.series[m].highlightMouseDown){i(r)}var n=jQuery.Event("jqplotDataRightClick");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o)}}function h(){if(this.plugins.funnelRenderer&&this.plugins.funnelRenderer.highlightCanvas){this.plugins.funnelRenderer.highlightCanvas.resetCanvas();this.plugins.funnelRenderer.highlightCanvas=null}this.plugins.funnelRenderer={};this.plugins.funnelRenderer.highlightCanvas=new e.jqplot.GenericCanvas();var n=e(this.targetId+" .jqplot-data-label");if(n.length){e(n[0]).before(this.plugins.funnelRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-funnelRenderer-highlight-canvas",this._plotDimensions,this))}else{this.eventCanvas._elem.before(this.plugins.funnelRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-funnelRenderer-highlight-canvas",this._plotDimensions,this))}var m=this.plugins.funnelRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(o){i(o.data.plot)})}e.jqplot.preInitHooks.push(c);e.jqplot.FunnelTickRenderer=function(){e.jqplot.AxisTickRenderer.call(this)};e.jqplot.FunnelTickRenderer.prototype=new e.jqplot.AxisTickRenderer();e.jqplot.FunnelTickRenderer.prototype.constructor=e.jqplot.FunnelTickRenderer})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.js
new file mode 100644
index 00000000..2e8c5da9
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.js
@@ -0,0 +1,465 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMove]);
+
+ /**
+ * Class: $.jqplot.Highlighter
+ * Plugin which will highlight data points when they are moused over.
+ *
+ * To use this plugin, include the js
+ * file in your source:
+ *
+ * > <script type="text/javascript" src="plugins/jqplot.highlighter.js"></script>
+ *
+ * A tooltip providing information about the data point is enabled by default.
+ * To disable the tooltip, set "showTooltip" to false.
+ *
+ * You can control what data is displayed in the tooltip with various
+ * options. The "tooltipAxes" option controls wether the x, y or both
+ * data values are displayed.
+ *
+ * Some chart types (e.g. hi-low-close) have more than one y value per
+ * data point. To display the additional values in the tooltip, set the
+ * "yvalues" option to the desired number of y values present (3 for a hlc chart).
+ *
+ * By default, data values will be formatted with the same formatting
+ * specifiers as used to format the axis ticks. A custom format code
+ * can be supplied with the tooltipFormatString option. This will apply
+ * to all values in the tooltip.
+ *
+ * For more complete control, the "formatString" option can be set. This
+ * Allows conplete control over tooltip formatting. Values are passed to
+ * the format string in an order determined by the "tooltipAxes" and "yvalues"
+ * options. So, if you have a hi-low-close chart and you just want to display
+ * the hi-low-close values in the tooltip, you could set a formatString like:
+ *
+ * > highlighter: {
+ * > tooltipAxes: 'y',
+ * > yvalues: 3,
+ * > formatString:'<table class="jqplot-highlighter">
+ * > <tr><td>hi:</td><td>%s</td></tr>
+ * > <tr><td>low:</td><td>%s</td></tr>
+ * > <tr><td>close:</td><td>%s</td></tr></table>'
+ * > }
+ *
+ */
+ $.jqplot.Highlighter = function(options) {
+ // Group: Properties
+ //
+ //prop: show
+ // true to show the highlight.
+ this.show = $.jqplot.config.enablePlugins;
+ // prop: markerRenderer
+ // Renderer used to draw the marker of the highlighted point.
+ // Renderer will assimilate attributes from the data point being highlighted,
+ // so no attributes need set on the renderer directly.
+ // Default is to turn off shadow drawing on the highlighted point.
+ this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false});
+ // prop: showMarker
+ // true to show the marker
+ this.showMarker = true;
+ // prop: lineWidthAdjust
+ // Pixels to add to the lineWidth of the highlight.
+ this.lineWidthAdjust = 2.5;
+ // prop: sizeAdjust
+ // Pixels to add to the overall size of the highlight.
+ this.sizeAdjust = 5;
+ // prop: showTooltip
+ // Show a tooltip with data point values.
+ this.showTooltip = true;
+ // prop: tooltipLocation
+ // Where to position tooltip, 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'
+ this.tooltipLocation = 'nw';
+ // prop: fadeTooltip
+ // true = fade in/out tooltip, flase = show/hide tooltip
+ this.fadeTooltip = true;
+ // prop: tooltipFadeSpeed
+ // 'slow', 'def', 'fast', or number of milliseconds.
+ this.tooltipFadeSpeed = "fast";
+ // prop: tooltipOffset
+ // Pixel offset of tooltip from the highlight.
+ this.tooltipOffset = 2;
+ // prop: tooltipAxes
+ // Which axes to display in tooltip, 'x', 'y' or 'both', 'xy' or 'yx'
+ // 'both' and 'xy' are equivalent, 'yx' reverses order of labels.
+ this.tooltipAxes = 'both';
+ // prop; tooltipSeparator
+ // String to use to separate x and y axes in tooltip.
+ this.tooltipSeparator = ', ';
+ // prop; tooltipContentEditor
+ // Function used to edit/augment/replace the formatted tooltip contents.
+ // Called as str = tooltipContentEditor(str, seriesIndex, pointIndex)
+ // where str is the generated tooltip html and seriesIndex and pointIndex identify
+ // the data point being highlighted. Should return the html for the tooltip contents.
+ this.tooltipContentEditor = null;
+ // prop: useAxesFormatters
+ // Use the x and y axes formatters to format the text in the tooltip.
+ this.useAxesFormatters = true;
+ // prop: tooltipFormatString
+ // sprintf format string for the tooltip.
+ // Uses Ash Searle's javascript sprintf implementation
+ // found here: http://hexmen.com/blog/2007/03/printf-sprintf/
+ // See http://perldoc.perl.org/functions/sprintf.html for reference.
+ // Additional "p" and "P" format specifiers added by Chris Leonello.
+ this.tooltipFormatString = '%.5P';
+ // prop: formatString
+ // alternative to tooltipFormatString
+ // will format the whole tooltip text, populating with x, y values as
+ // indicated by tooltipAxes option. So, you could have a tooltip like:
+ // 'Date: %s, number of cats: %d' to format the whole tooltip at one go.
+ // If useAxesFormatters is true, values will be formatted according to
+ // Axes formatters and you can populate your tooltip string with
+ // %s placeholders.
+ this.formatString = null;
+ // prop: yvalues
+ // Number of y values to expect in the data point array.
+ // Typically this is 1. Certain plots, like OHLC, will
+ // have more y values in each data point array.
+ this.yvalues = 1;
+ // prop: bringSeriesToFront
+ // This option requires jQuery 1.4+
+ // True to bring the series of the highlighted point to the front
+ // of other series.
+ this.bringSeriesToFront = false;
+ this._tooltipElem;
+ this.isHighlighting = false;
+ this.currentNeighbor = null;
+
+ $.extend(true, this, options);
+ };
+
+ var locations = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'];
+ var locationIndicies = {'nw':0, 'n':1, 'ne':2, 'e':3, 'se':4, 's':5, 'sw':6, 'w':7};
+ var oppositeLocations = ['se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'];
+
+ // axis.renderer.tickrenderer.formatter
+
+ // called with scope of plot
+ $.jqplot.Highlighter.init = function (target, data, opts){
+ var options = opts || {};
+ // add a highlighter attribute to the plot
+ this.plugins.highlighter = new $.jqplot.Highlighter(options.highlighter);
+ };
+
+ // called within scope of series
+ $.jqplot.Highlighter.parseOptions = function (defaults, options) {
+ // Add a showHighlight option to the series
+ // and set it to true by default.
+ this.showHighlight = true;
+ };
+
+ // called within context of plot
+ // create a canvas which we can draw on.
+ // insert it before the eventCanvas, so eventCanvas will still capture events.
+ $.jqplot.Highlighter.postPlotDraw = function() {
+ // Memory Leaks patch
+ if (this.plugins.highlighter && this.plugins.highlighter.highlightCanvas) {
+ this.plugins.highlighter.highlightCanvas.resetCanvas();
+ this.plugins.highlighter.highlightCanvas = null;
+ }
+
+ if (this.plugins.highlighter && this.plugins.highlighter._tooltipElem) {
+ this.plugins.highlighter._tooltipElem.emptyForce();
+ this.plugins.highlighter._tooltipElem = null;
+ }
+
+ this.plugins.highlighter.highlightCanvas = new $.jqplot.GenericCanvas();
+
+ this.eventCanvas._elem.before(this.plugins.highlighter.highlightCanvas.createElement(this._gridPadding, 'jqplot-highlight-canvas', this._plotDimensions, this));
+ this.plugins.highlighter.highlightCanvas.setContext();
+
+ var elem = document.createElement('div');
+ this.plugins.highlighter._tooltipElem = $(elem);
+ elem = null;
+ this.plugins.highlighter._tooltipElem.addClass('jqplot-highlighter-tooltip');
+ this.plugins.highlighter._tooltipElem.css({position:'absolute', display:'none'});
+
+ this.eventCanvas._elem.before(this.plugins.highlighter._tooltipElem);
+ };
+
+ $.jqplot.preInitHooks.push($.jqplot.Highlighter.init);
+ $.jqplot.preParseSeriesOptionsHooks.push($.jqplot.Highlighter.parseOptions);
+ $.jqplot.postDrawHooks.push($.jqplot.Highlighter.postPlotDraw);
+
+ function draw(plot, neighbor) {
+ var hl = plot.plugins.highlighter;
+ var s = plot.series[neighbor.seriesIndex];
+ var smr = s.markerRenderer;
+ var mr = hl.markerRenderer;
+ mr.style = smr.style;
+ mr.lineWidth = smr.lineWidth + hl.lineWidthAdjust;
+ mr.size = smr.size + hl.sizeAdjust;
+ var rgba = $.jqplot.getColorComponents(smr.color);
+ var newrgb = [rgba[0], rgba[1], rgba[2]];
+ var alpha = (rgba[3] >= 0.6) ? rgba[3]*0.6 : rgba[3]*(2-rgba[3]);
+ mr.color = 'rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+alpha+')';
+ mr.init();
+ mr.draw(s.gridData[neighbor.pointIndex][0], s.gridData[neighbor.pointIndex][1], hl.highlightCanvas._ctx);
+ }
+
+ function showTooltip(plot, series, neighbor) {
+ // neighbor looks like: {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}
+ // gridData should be x,y pixel coords on the grid.
+ // add the plot._gridPadding to that to get x,y in the target.
+ var hl = plot.plugins.highlighter;
+ var elem = hl._tooltipElem;
+ var serieshl = series.highlighter || {};
+
+ var opts = $.extend(true, {}, hl, serieshl);
+
+ if (opts.useAxesFormatters) {
+ var xf = series._xaxis._ticks[0].formatter;
+ var yf = series._yaxis._ticks[0].formatter;
+ var xfstr = series._xaxis._ticks[0].formatString;
+ var yfstr = series._yaxis._ticks[0].formatString;
+ var str;
+ var xstr = xf(xfstr, neighbor.data[0]);
+ var ystrs = [];
+ for (var i=1; i<opts.yvalues+1; i++) {
+ ystrs.push(yf(yfstr, neighbor.data[i]));
+ }
+ if (typeof opts.formatString === 'string') {
+ switch (opts.tooltipAxes) {
+ case 'both':
+ case 'xy':
+ ystrs.unshift(xstr);
+ ystrs.unshift(opts.formatString);
+ str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs);
+ break;
+ case 'yx':
+ ystrs.push(xstr);
+ ystrs.unshift(opts.formatString);
+ str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs);
+ break;
+ case 'x':
+ str = $.jqplot.sprintf.apply($.jqplot.sprintf, [opts.formatString, xstr]);
+ break;
+ case 'y':
+ ystrs.unshift(opts.formatString);
+ str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs);
+ break;
+ default: // same as xy
+ ystrs.unshift(xstr);
+ ystrs.unshift(opts.formatString);
+ str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs);
+ break;
+ }
+ }
+ else {
+ switch (opts.tooltipAxes) {
+ case 'both':
+ case 'xy':
+ str = xstr;
+ for (var i=0; i<ystrs.length; i++) {
+ str += opts.tooltipSeparator + ystrs[i];
+ }
+ break;
+ case 'yx':
+ str = '';
+ for (var i=0; i<ystrs.length; i++) {
+ str += ystrs[i] + opts.tooltipSeparator;
+ }
+ str += xstr;
+ break;
+ case 'x':
+ str = xstr;
+ break;
+ case 'y':
+ str = ystrs.join(opts.tooltipSeparator);
+ break;
+ default: // same as 'xy'
+ str = xstr;
+ for (var i=0; i<ystrs.length; i++) {
+ str += opts.tooltipSeparator + ystrs[i];
+ }
+ break;
+
+ }
+ }
+ }
+ else {
+ var str;
+ if (typeof opts.formatString === 'string') {
+ str = $.jqplot.sprintf.apply($.jqplot.sprintf, [opts.formatString].concat(neighbor.data));
+ }
+
+ else {
+ if (opts.tooltipAxes == 'both' || opts.tooltipAxes == 'xy') {
+ str = $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[0]) + opts.tooltipSeparator + $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[1]);
+ }
+ else if (opts.tooltipAxes == 'yx') {
+ str = $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[1]) + opts.tooltipSeparator + $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[0]);
+ }
+ else if (opts.tooltipAxes == 'x') {
+ str = $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[0]);
+ }
+ else if (opts.tooltipAxes == 'y') {
+ str = $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[1]);
+ }
+ }
+ }
+ if ($.isFunction(opts.tooltipContentEditor)) {
+ // args str, seriesIndex, pointIndex are essential so the hook can look up
+ // extra data for the point.
+ str = opts.tooltipContentEditor(str, neighbor.seriesIndex, neighbor.pointIndex, plot);
+ }
+ elem.html(str);
+ var gridpos = {x:neighbor.gridData[0], y:neighbor.gridData[1]};
+ var ms = 0;
+ var fact = 0.707;
+ if (series.markerRenderer.show == true) {
+ ms = (series.markerRenderer.size + opts.sizeAdjust)/2;
+ }
+
+ var loc = locations;
+ if (series.fillToZero && series.fill && neighbor.data[1] < 0) {
+ loc = oppositeLocations;
+ }
+
+ switch (loc[locationIndicies[opts.tooltipLocation]]) {
+ case 'nw':
+ var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset - fact * ms;
+ var y = gridpos.y + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true) - fact * ms;
+ break;
+ case 'n':
+ var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2;
+ var y = gridpos.y + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true) - ms;
+ break;
+ case 'ne':
+ var x = gridpos.x + plot._gridPadding.left + opts.tooltipOffset + fact * ms;
+ var y = gridpos.y + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true) - fact * ms;
+ break;
+ case 'e':
+ var x = gridpos.x + plot._gridPadding.left + opts.tooltipOffset + ms;
+ var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2;
+ break;
+ case 'se':
+ var x = gridpos.x + plot._gridPadding.left + opts.tooltipOffset + fact * ms;
+ var y = gridpos.y + plot._gridPadding.top + opts.tooltipOffset + fact * ms;
+ break;
+ case 's':
+ var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2;
+ var y = gridpos.y + plot._gridPadding.top + opts.tooltipOffset + ms;
+ break;
+ case 'sw':
+ var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset - fact * ms;
+ var y = gridpos.y + plot._gridPadding.top + opts.tooltipOffset + fact * ms;
+ break;
+ case 'w':
+ var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset - ms;
+ var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2;
+ break;
+ default: // same as 'nw'
+ var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset - fact * ms;
+ var y = gridpos.y + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true) - fact * ms;
+ break;
+ }
+ elem.css('left', x);
+ elem.css('top', y);
+ if (opts.fadeTooltip) {
+ // Fix for stacked up animations. Thnanks Trevor!
+ elem.stop(true,true).fadeIn(opts.tooltipFadeSpeed);
+ }
+ else {
+ elem.show();
+ }
+ elem = null;
+
+ }
+
+ function handleMove(ev, gridpos, datapos, neighbor, plot) {
+ var hl = plot.plugins.highlighter;
+ var c = plot.plugins.cursor;
+ if (hl.show) {
+ if (neighbor == null && hl.isHighlighting) {
+ var evt = jQuery.Event('jqplotHighlighterUnhighlight');
+ plot.target.trigger(evt);
+
+ var ctx = hl.highlightCanvas._ctx;
+ ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
+ if (hl.fadeTooltip) {
+ hl._tooltipElem.fadeOut(hl.tooltipFadeSpeed);
+ }
+ else {
+ hl._tooltipElem.hide();
+ }
+ if (hl.bringSeriesToFront) {
+ plot.restorePreviousSeriesOrder();
+ }
+ hl.isHighlighting = false;
+ hl.currentNeighbor = null;
+ ctx = null;
+ }
+ else if (neighbor != null && plot.series[neighbor.seriesIndex].showHighlight && !hl.isHighlighting) {
+ var evt = jQuery.Event('jqplotHighlighterHighlight');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data, plot];
+ plot.target.trigger(evt, ins);
+
+ hl.isHighlighting = true;
+ hl.currentNeighbor = neighbor;
+ if (hl.showMarker) {
+ draw(plot, neighbor);
+ }
+ if (hl.showTooltip && (!c || !c._zoom.started)) {
+ showTooltip(plot, plot.series[neighbor.seriesIndex], neighbor);
+ }
+ if (hl.bringSeriesToFront) {
+ plot.moveSeriesToFront(neighbor.seriesIndex);
+ }
+ }
+ // check to see if we're highlighting the wrong point.
+ else if (neighbor != null && hl.isHighlighting && hl.currentNeighbor != neighbor) {
+ // highlighting the wrong point.
+
+ // if new series allows highlighting, highlight new point.
+ if (plot.series[neighbor.seriesIndex].showHighlight) {
+ var ctx = hl.highlightCanvas._ctx;
+ ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
+ hl.isHighlighting = true;
+ hl.currentNeighbor = neighbor;
+ if (hl.showMarker) {
+ draw(plot, neighbor);
+ }
+ if (hl.showTooltip && (!c || !c._zoom.started)) {
+ showTooltip(plot, plot.series[neighbor.seriesIndex], neighbor);
+ }
+ if (hl.bringSeriesToFront) {
+ plot.moveSeriesToFront(neighbor.seriesIndex);
+ }
+ }
+ }
+ }
+ }
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.min.js
new file mode 100644
index 00000000..42ad7c02
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(d){d.jqplot.eventListenerHooks.push(["jqplotMouseMove",f]);d.jqplot.Highlighter=function(h){this.show=d.jqplot.config.enablePlugins;this.markerRenderer=new d.jqplot.MarkerRenderer({shadow:false});this.showMarker=true;this.lineWidthAdjust=2.5;this.sizeAdjust=5;this.showTooltip=true;this.tooltipLocation="nw";this.fadeTooltip=true;this.tooltipFadeSpeed="fast";this.tooltipOffset=2;this.tooltipAxes="both";this.tooltipSeparator=", ";this.tooltipContentEditor=null;this.useAxesFormatters=true;this.tooltipFormatString="%.5P";this.formatString=null;this.yvalues=1;this.bringSeriesToFront=false;this._tooltipElem;this.isHighlighting=false;this.currentNeighbor=null;d.extend(true,this,h)};var b=["nw","n","ne","e","se","s","sw","w"];var e={nw:0,n:1,ne:2,e:3,se:4,s:5,sw:6,w:7};var c=["se","s","sw","w","nw","n","ne","e"];d.jqplot.Highlighter.init=function(k,j,i){var h=i||{};this.plugins.highlighter=new d.jqplot.Highlighter(h.highlighter)};d.jqplot.Highlighter.parseOptions=function(i,h){this.showHighlight=true};d.jqplot.Highlighter.postPlotDraw=function(){if(this.plugins.highlighter&&this.plugins.highlighter.highlightCanvas){this.plugins.highlighter.highlightCanvas.resetCanvas();this.plugins.highlighter.highlightCanvas=null}if(this.plugins.highlighter&&this.plugins.highlighter._tooltipElem){this.plugins.highlighter._tooltipElem.emptyForce();this.plugins.highlighter._tooltipElem=null}this.plugins.highlighter.highlightCanvas=new d.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.highlighter.highlightCanvas.createElement(this._gridPadding,"jqplot-highlight-canvas",this._plotDimensions,this));this.plugins.highlighter.highlightCanvas.setContext();var h=document.createElement("div");this.plugins.highlighter._tooltipElem=d(h);h=null;this.plugins.highlighter._tooltipElem.addClass("jqplot-highlighter-tooltip");this.plugins.highlighter._tooltipElem.css({position:"absolute",display:"none"});this.eventCanvas._elem.before(this.plugins.highlighter._tooltipElem)};d.jqplot.preInitHooks.push(d.jqplot.Highlighter.init);d.jqplot.preParseSeriesOptionsHooks.push(d.jqplot.Highlighter.parseOptions);d.jqplot.postDrawHooks.push(d.jqplot.Highlighter.postPlotDraw);function a(m,o){var j=m.plugins.highlighter;var p=m.series[o.seriesIndex];var h=p.markerRenderer;var i=j.markerRenderer;i.style=h.style;i.lineWidth=h.lineWidth+j.lineWidthAdjust;i.size=h.size+j.sizeAdjust;var l=d.jqplot.getColorComponents(h.color);var n=[l[0],l[1],l[2]];var k=(l[3]>=0.6)?l[3]*0.6:l[3]*(2-l[3]);i.color="rgba("+n[0]+","+n[1]+","+n[2]+","+k+")";i.init();i.draw(p.gridData[o.pointIndex][0],p.gridData[o.pointIndex][1],j.highlightCanvas._ctx)}function g(A,q,m){var k=A.plugins.highlighter;var D=k._tooltipElem;var r=q.highlighter||{};var t=d.extend(true,{},k,r);if(t.useAxesFormatters){var w=q._xaxis._ticks[0].formatter;var h=q._yaxis._ticks[0].formatter;var E=q._xaxis._ticks[0].formatString;var s=q._yaxis._ticks[0].formatString;var z;var u=w(E,m.data[0]);var l=[];for(var B=1;B<t.yvalues+1;B++){l.push(h(s,m.data[B]))}if(typeof t.formatString==="string"){switch(t.tooltipAxes){case"both":case"xy":l.unshift(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;case"yx":l.push(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;case"x":z=d.jqplot.sprintf.apply(d.jqplot.sprintf,[t.formatString,u]);break;case"y":l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;default:l.unshift(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break}}else{switch(t.tooltipAxes){case"both":case"xy":z=u;for(var B=0;B<l.length;B++){z+=t.tooltipSeparator+l[B]}break;case"yx":z="";for(var B=0;B<l.length;B++){z+=l[B]+t.tooltipSeparator}z+=u;break;case"x":z=u;break;case"y":z=l.join(t.tooltipSeparator);break;default:z=u;for(var B=0;B<l.length;B++){z+=t.tooltipSeparator+l[B]}break}}}else{var z;if(typeof t.formatString==="string"){z=d.jqplot.sprintf.apply(d.jqplot.sprintf,[t.formatString].concat(m.data))}else{if(t.tooltipAxes=="both"||t.tooltipAxes=="xy"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[0])+t.tooltipSeparator+d.jqplot.sprintf(t.tooltipFormatString,m.data[1])}else{if(t.tooltipAxes=="yx"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[1])+t.tooltipSeparator+d.jqplot.sprintf(t.tooltipFormatString,m.data[0])}else{if(t.tooltipAxes=="x"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[0])}else{if(t.tooltipAxes=="y"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[1])}}}}}}if(d.isFunction(t.tooltipContentEditor)){z=t.tooltipContentEditor(z,m.seriesIndex,m.pointIndex,A)}D.html(z);var C={x:m.gridData[0],y:m.gridData[1]};var v=0;var j=0.707;if(q.markerRenderer.show==true){v=(q.markerRenderer.size+t.sizeAdjust)/2}var o=b;if(q.fillToZero&&q.fill&&m.data[1]<0){o=c}switch(o[e[t.tooltipLocation]]){case"nw":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break;case"n":var p=C.x+A._gridPadding.left-D.outerWidth(true)/2;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-v;break;case"ne":var p=C.x+A._gridPadding.left+t.tooltipOffset+j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break;case"e":var p=C.x+A._gridPadding.left+t.tooltipOffset+v;var n=C.y+A._gridPadding.top-D.outerHeight(true)/2;break;case"se":var p=C.x+A._gridPadding.left+t.tooltipOffset+j*v;var n=C.y+A._gridPadding.top+t.tooltipOffset+j*v;break;case"s":var p=C.x+A._gridPadding.left-D.outerWidth(true)/2;var n=C.y+A._gridPadding.top+t.tooltipOffset+v;break;case"sw":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top+t.tooltipOffset+j*v;break;case"w":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-v;var n=C.y+A._gridPadding.top-D.outerHeight(true)/2;break;default:var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break}D.css("left",p);D.css("top",n);if(t.fadeTooltip){D.stop(true,true).fadeIn(t.tooltipFadeSpeed)}else{D.show()}D=null}function f(n,j,i,p,l){var h=l.plugins.highlighter;var m=l.plugins.cursor;if(h.show){if(p==null&&h.isHighlighting){var o=jQuery.Event("jqplotHighlighterUnhighlight");l.target.trigger(o);var q=h.highlightCanvas._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);if(h.fadeTooltip){h._tooltipElem.fadeOut(h.tooltipFadeSpeed)}else{h._tooltipElem.hide()}if(h.bringSeriesToFront){l.restorePreviousSeriesOrder()}h.isHighlighting=false;h.currentNeighbor=null;q=null}else{if(p!=null&&l.series[p.seriesIndex].showHighlight&&!h.isHighlighting){var o=jQuery.Event("jqplotHighlighterHighlight");o.which=n.which;o.pageX=n.pageX;o.pageY=n.pageY;var k=[p.seriesIndex,p.pointIndex,p.data,l];l.target.trigger(o,k);h.isHighlighting=true;h.currentNeighbor=p;if(h.showMarker){a(l,p)}if(h.showTooltip&&(!m||!m._zoom.started)){g(l,l.series[p.seriesIndex],p)}if(h.bringSeriesToFront){l.moveSeriesToFront(p.seriesIndex)}}else{if(p!=null&&h.isHighlighting&&h.currentNeighbor!=p){if(l.series[p.seriesIndex].showHighlight){var q=h.highlightCanvas._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);h.isHighlighting=true;h.currentNeighbor=p;if(h.showMarker){a(l,p)}if(h.showTooltip&&(!m||!m._zoom.started)){g(l,l.series[p.seriesIndex],p)}if(h.bringSeriesToFront){l.moveSeriesToFront(p.seriesIndex)}}}}}}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.js
new file mode 100644
index 00000000..46fb942b
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.js
@@ -0,0 +1,475 @@
+/*
+ 2010-11-01 Chris Leonello
+
+ Slightly modified version of the original json2.js to put JSON
+ functions under the $.jqplot namespace.
+
+ licensing and orignal comments follow:
+
+ http://www.JSON.org/json2.js
+ 2010-08-25
+
+ Public Domain.
+
+ NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
+
+ See http://www.JSON.org/js.html
+
+
+ This code should be minified before deployment.
+ See http://javascript.crockford.com/jsmin.html
+
+ USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
+ NOT CONTROL.
+
+
+ This file creates a global JSON object containing two methods: stringify
+ and parse.
+
+ $.jqplot.JSON.stringify(value, replacer, space)
+ value any JavaScript value, usually an object or array.
+
+ replacer an optional parameter that determines how object
+ values are stringified for objects. It can be a
+ function or an array of strings.
+
+ space an optional parameter that specifies the indentation
+ of nested structures. If it is omitted, the text will
+ be packed without extra whitespace. If it is a number,
+ it will specify the number of spaces to indent at each
+ level. If it is a string (such as '\t' or '&nbsp;'),
+ it contains the characters used to indent at each level.
+
+ This method produces a JSON text from a JavaScript value.
+
+ When an object value is found, if the object contains a toJSON
+ method, its toJSON method will be called and the result will be
+ stringified. A toJSON method does not serialize: it returns the
+ value represented by the name/value pair that should be serialized,
+ or undefined if nothing should be serialized. The toJSON method
+ will be passed the key associated with the value, and this will be
+ bound to the value
+
+ For example, this would serialize Dates as ISO strings.
+
+ Date.prototype.toJSON = function (key) {
+ function f(n) {
+ // Format integers to have at least two digits.
+ return n < 10 ? '0' + n : n;
+ }
+
+ return this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z';
+ };
+
+ You can provide an optional replacer method. It will be passed the
+ key and value of each member, with this bound to the containing
+ object. The value that is returned from your method will be
+ serialized. If your method returns undefined, then the member will
+ be excluded from the serialization.
+
+ If the replacer parameter is an array of strings, then it will be
+ used to select the members to be serialized. It filters the results
+ such that only members with keys listed in the replacer array are
+ stringified.
+
+ Values that do not have JSON representations, such as undefined or
+ functions, will not be serialized. Such values in objects will be
+ dropped; in arrays they will be replaced with null. You can use
+ a replacer function to replace those with JSON values.
+ $.jqplot.JSON.stringify(undefined) returns undefined.
+
+ The optional space parameter produces a stringification of the
+ value that is filled with line breaks and indentation to make it
+ easier to read.
+
+ If the space parameter is a non-empty string, then that string will
+ be used for indentation. If the space parameter is a number, then
+ the indentation will be that many spaces.
+
+ Example:
+
+ text = $.jqplot.JSON.stringify(['e', {pluribus: 'unum'}]);
+ // text is '["e",{"pluribus":"unum"}]'
+
+
+ text = $.jqplot.JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
+ // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
+
+ text = $.jqplot.JSON.stringify([new Date()], function (key, value) {
+ return this[key] instanceof Date ?
+ 'Date(' + this[key] + ')' : value;
+ });
+ // text is '["Date(---current time---)"]'
+
+
+ $.jqplot.JSON.parse(text, reviver)
+ This method parses a JSON text to produce an object or array.
+ It can throw a SyntaxError exception.
+
+ The optional reviver parameter is a function that can filter and
+ transform the results. It receives each of the keys and values,
+ and its return value is used instead of the original value.
+ If it returns what it received, then the structure is not modified.
+ If it returns undefined then the member is deleted.
+
+ Example:
+
+ // Parse the text. Values that look like ISO date strings will
+ // be converted to Date objects.
+
+ myData = $.jqplot.JSON.parse(text, function (key, value) {
+ var a;
+ if (typeof value === 'string') {
+ a =
+/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
+ if (a) {
+ return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+ +a[5], +a[6]));
+ }
+ }
+ return value;
+ });
+
+ myData = $.jqplot.JSON.parse('["Date(09/09/2001)"]', function (key, value) {
+ var d;
+ if (typeof value === 'string' &&
+ value.slice(0, 5) === 'Date(' &&
+ value.slice(-1) === ')') {
+ d = new Date(value.slice(5, -1));
+ if (d) {
+ return d;
+ }
+ }
+ return value;
+ });
+
+
+ This is a reference implementation. You are free to copy, modify, or
+ redistribute.
+*/
+
+(function($) {
+
+ $.jqplot.JSON = window.JSON;
+
+ if (!window.JSON) {
+ $.jqplot.JSON = {};
+ }
+
+ function f(n) {
+ // Format integers to have at least two digits.
+ return n < 10 ? '0' + n : n;
+ }
+
+ if (typeof Date.prototype.toJSON !== 'function') {
+
+ Date.prototype.toJSON = function (key) {
+
+ return isFinite(this.valueOf()) ?
+ this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z' : null;
+ };
+
+ String.prototype.toJSON =
+ Number.prototype.toJSON =
+ Boolean.prototype.toJSON = function (key) {
+ return this.valueOf();
+ };
+ }
+
+ var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ gap,
+ indent,
+ meta = { // table of character substitutions
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '"' : '\\"',
+ '\\': '\\\\'
+ },
+ rep;
+
+
+ function quote(string) {
+
+// If the string contains no control characters, no quote characters, and no
+// backslash characters, then we can safely slap some quotes around it.
+// Otherwise we must also replace the offending characters with safe escape
+// sequences.
+
+ escapable.lastIndex = 0;
+ return escapable.test(string) ?
+ '"' + string.replace(escapable, function (a) {
+ var c = meta[a];
+ return typeof c === 'string' ? c :
+ '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ }) + '"' :
+ '"' + string + '"';
+ }
+
+
+ function str(key, holder) {
+
+// Produce a string from holder[key].
+
+ var i, // The loop counter.
+ k, // The member key.
+ v, // The member value.
+ length,
+ mind = gap,
+ partial,
+ value = holder[key];
+
+// If the value has a toJSON method, call it to obtain a replacement value.
+
+ if (value && typeof value === 'object' &&
+ typeof value.toJSON === 'function') {
+ value = value.toJSON(key);
+ }
+
+// If we were called with a replacer function, then call the replacer to
+// obtain a replacement value.
+
+ if (typeof rep === 'function') {
+ value = rep.call(holder, key, value);
+ }
+
+// What happens next depends on the value's type.
+
+ switch (typeof value) {
+ case 'string':
+ return quote(value);
+
+ case 'number':
+
+// JSON numbers must be finite. Encode non-finite numbers as null.
+
+ return isFinite(value) ? String(value) : 'null';
+
+ case 'boolean':
+ case 'null':
+
+// If the value is a boolean or null, convert it to a string. Note:
+// typeof null does not produce 'null'. The case is included here in
+// the remote chance that this gets fixed someday.
+
+ return String(value);
+
+// If the type is 'object', we might be dealing with an object or an array or
+// null.
+
+ case 'object':
+
+// Due to a specification blunder in ECMAScript, typeof null is 'object',
+// so watch out for that case.
+
+ if (!value) {
+ return 'null';
+ }
+
+// Make an array to hold the partial results of stringifying this object value.
+
+ gap += indent;
+ partial = [];
+
+// Is the value an array?
+
+ if (Object.prototype.toString.apply(value) === '[object Array]') {
+
+// The value is an array. Stringify every element. Use null as a placeholder
+// for non-JSON values.
+
+ length = value.length;
+ for (i = 0; i < length; i += 1) {
+ partial[i] = str(i, value) || 'null';
+ }
+
+// Join all of the elements together, separated with commas, and wrap them in
+// brackets.
+
+ v = partial.length === 0 ? '[]' :
+ gap ? '[\n' + gap +
+ partial.join(',\n' + gap) + '\n' +
+ mind + ']' :
+ '[' + partial.join(',') + ']';
+ gap = mind;
+ return v;
+ }
+
+// If the replacer is an array, use it to select the members to be stringified.
+
+ if (rep && typeof rep === 'object') {
+ length = rep.length;
+ for (i = 0; i < length; i += 1) {
+ k = rep[i];
+ if (typeof k === 'string') {
+ v = str(k, value);
+ if (v) {
+ partial.push(quote(k) + (gap ? ': ' : ':') + v);
+ }
+ }
+ }
+ } else {
+
+// Otherwise, iterate through all of the keys in the object.
+
+ for (k in value) {
+ if (Object.hasOwnProperty.call(value, k)) {
+ v = str(k, value);
+ if (v) {
+ partial.push(quote(k) + (gap ? ': ' : ':') + v);
+ }
+ }
+ }
+ }
+
+// Join all of the member texts together, separated with commas,
+// and wrap them in braces.
+
+ v = partial.length === 0 ? '{}' :
+ gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
+ mind + '}' : '{' + partial.join(',') + '}';
+ gap = mind;
+ return v;
+ }
+ }
+
+// If the JSON object does not yet have a stringify method, give it one.
+
+ if (typeof $.jqplot.JSON.stringify !== 'function') {
+ $.jqplot.JSON.stringify = function (value, replacer, space) {
+
+// The stringify method takes a value and an optional replacer, and an optional
+// space parameter, and returns a JSON text. The replacer can be a function
+// that can replace values, or an array of strings that will select the keys.
+// A default replacer method can be provided. Use of the space parameter can
+// produce text that is more easily readable.
+
+ var i;
+ gap = '';
+ indent = '';
+
+// If the space parameter is a number, make an indent string containing that
+// many spaces.
+
+ if (typeof space === 'number') {
+ for (i = 0; i < space; i += 1) {
+ indent += ' ';
+ }
+
+// If the space parameter is a string, it will be used as the indent string.
+
+ } else if (typeof space === 'string') {
+ indent = space;
+ }
+
+// If there is a replacer, it must be a function or an array.
+// Otherwise, throw an error.
+
+ rep = replacer;
+ if (replacer && typeof replacer !== 'function' &&
+ (typeof replacer !== 'object' ||
+ typeof replacer.length !== 'number')) {
+ throw new Error('$.jqplot.JSON.stringify');
+ }
+
+// Make a fake root object containing our value under the key of ''.
+// Return the result of stringifying the value.
+
+ return str('', {'': value});
+ };
+ }
+
+
+// If the JSON object does not yet have a parse method, give it one.
+
+ if (typeof $.jqplot.JSON.parse !== 'function') {
+ $.jqplot.JSON.parse = function (text, reviver) {
+
+// The parse method takes a text and an optional reviver function, and returns
+// a JavaScript value if the text is a valid JSON text.
+
+ var j;
+
+ function walk(holder, key) {
+
+// The walk method is used to recursively walk the resulting structure so
+// that modifications can be made.
+
+ var k, v, value = holder[key];
+ if (value && typeof value === 'object') {
+ for (k in value) {
+ if (Object.hasOwnProperty.call(value, k)) {
+ v = walk(value, k);
+ if (v !== undefined) {
+ value[k] = v;
+ } else {
+ delete value[k];
+ }
+ }
+ }
+ }
+ return reviver.call(holder, key, value);
+ }
+
+
+// Parsing happens in four stages. In the first stage, we replace certain
+// Unicode characters with escape sequences. JavaScript handles many characters
+// incorrectly, either silently deleting them, or treating them as line endings.
+
+ text = String(text);
+ cx.lastIndex = 0;
+ if (cx.test(text)) {
+ text = text.replace(cx, function (a) {
+ return '\\u' +
+ ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ });
+ }
+
+// In the second stage, we run the text against regular expressions that look
+// for non-JSON patterns. We are especially concerned with '()' and 'new'
+// because they can cause invocation, and '=' because it can cause mutation.
+// But just to be safe, we want to reject all unexpected forms.
+
+// We split the second stage into 4 regexp operations in order to work around
+// crippling inefficiencies in IE's and Safari's regexp engines. First we
+// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
+// replace all simple value tokens with ']' characters. Third, we delete all
+// open brackets that follow a colon or comma or that begin the text. Finally,
+// we look to see that the remaining characters are only whitespace or ']' or
+// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
+
+ if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
+
+// In the third stage we use the eval function to compile the text into a
+// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
+// in JavaScript: it can begin a block or an object literal. We wrap the text
+// in parens to eliminate the ambiguity.
+
+ j = eval('(' + text + ')');
+
+// In the optional fourth stage, we recursively walk the new structure, passing
+// each name/value pair to a reviver function for possible transformation.
+
+ return typeof reviver === 'function' ?
+ walk({'': j}, '') : j;
+ }
+
+// If the text is not JSON parseable, then a SyntaxError is thrown.
+
+ throw new SyntaxError('$.jqplot.JSON.parse');
+ };
+ }
+})(jQuery);
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.min.js
new file mode 100644
index 00000000..7343b559
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function($){$.jqplot.JSON=window.JSON;if(!window.JSON){$.jqplot.JSON={}}function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||"null"}v=partial.length===0?"[]":gap?"[\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"]":"["+partial.join(",")+"]";gap=mind;return v}if(rep&&typeof rep==="object"){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==="string"){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}v=partial.length===0?"{}":gap?"{\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"}":"{"+partial.join(",")+"}";gap=mind;return v}}if(typeof $.jqplot.JSON.stringify!=="function"){$.jqplot.JSON.stringify=function(value,replacer,space){var i;gap="";indent="";if(typeof space==="number"){for(i=0;i<space;i+=1){indent+=" "}}else{if(typeof space==="string"){indent=space}}rep=replacer;if(replacer&&typeof replacer!=="function"&&(typeof replacer!=="object"||typeof replacer.length!=="number")){throw new Error("$.jqplot.JSON.stringify")}return str("",{"":value})}}if(typeof $.jqplot.JSON.parse!=="function"){$.jqplot.JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==="object"){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("$.jqplot.JSON.parse")}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.js
new file mode 100644
index 00000000..8d358ec7
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.js
@@ -0,0 +1,529 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ /**
+ * class: $.jqplot.LogAxisRenderer
+ * A plugin for a jqPlot to render a logarithmic axis.
+ *
+ * To use this renderer, include the plugin in your source
+ * > <script type="text/javascript" language="javascript" src="plugins/jqplot.logAxisRenderer.js"></script>
+ *
+ * and supply the appropriate options to your plot
+ *
+ * > {axes:{xaxis:{renderer:$.jqplot.LogAxisRenderer}}}
+ **/
+ $.jqplot.LogAxisRenderer = function() {
+ $.jqplot.LinearAxisRenderer.call(this);
+ // prop: axisDefaults
+ // Default properties which will be applied directly to the series.
+ //
+ // Group: Properties
+ //
+ // Properties
+ //
+ // base - the logarithmic base, commonly 2, 10 or Math.E
+ // tickDistribution - Deprecated. "power" distribution of ticks
+ // always used. Option has no effect.
+ this.axisDefaults = {
+ base : 10,
+ tickDistribution :'power'
+ };
+ };
+
+ $.jqplot.LogAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
+ $.jqplot.LogAxisRenderer.prototype.constructor = $.jqplot.LogAxisRenderer;
+
+ $.jqplot.LogAxisRenderer.prototype.init = function(options) {
+ // prop: drawBaseline
+ // True to draw the axis baseline.
+ this.drawBaseline = true;
+ // prop: minorTicks
+ // Number of ticks to add between "major" ticks.
+ // Major ticks are ticks supplied by user or auto computed.
+ // Minor ticks cannot be created by user.
+ this.minorTicks = 'auto';
+ this._scalefact = 1.0;
+
+ $.extend(true, this, options);
+
+ this._autoFormatString = '%d';
+ this._overrideFormatString = false;
+
+ for (var d in this.renderer.axisDefaults) {
+ if (this[d] == null) {
+ this[d] = this.renderer.axisDefaults[d];
+ }
+ }
+
+ this.resetDataBounds();
+ };
+
+ $.jqplot.LogAxisRenderer.prototype.createTicks = function(plot) {
+ // we're are operating on an axis here
+ var ticks = this._ticks;
+ var userTicks = this.ticks;
+ var name = this.name;
+ var db = this._dataBounds;
+ var dim = (this.name.charAt(0) === 'x') ? this._plotDimensions.width : this._plotDimensions.height;
+ var interval;
+ var min, max;
+ var pos1, pos2;
+ var tt, i;
+
+ var threshold = 30;
+ // For some reason scalefactor is screwing up ticks.
+ this._scalefact = (Math.max(dim, threshold+1) - threshold)/300;
+
+ // if we already have ticks, use them.
+ // ticks must be in order of increasing value.
+ if (userTicks.length) {
+ // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed
+ for (i=0; i<userTicks.length; i++){
+ var ut = userTicks[i];
+ var t = new this.tickRenderer(this.tickOptions);
+ if (ut.constructor == Array) {
+ t.value = ut[0];
+ t.label = ut[1];
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ t.setTick(ut[0], this.name);
+ this._ticks.push(t);
+ }
+
+ else if ($.isPlainObject(ut)) {
+ $.extend(true, t, ut);
+ t.axis = this.name;
+ this._ticks.push(t);
+ }
+
+ else {
+ t.value = ut;
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ t.setTick(ut, this.name);
+ this._ticks.push(t);
+ }
+ }
+ this.numberTicks = userTicks.length;
+ this.min = this._ticks[0].value;
+ this.max = this._ticks[this.numberTicks-1].value;
+ }
+
+ // we don't have any ticks yet, let's make some!
+ else if (this.min == null && this.max == null) {
+ min = db.min * (2 - this.padMin);
+ max = db.max * this.padMax;
+
+ // if min and max are same, space them out a bit
+ if (min == max) {
+ var adj = 0.05;
+ min = min*(1-adj);
+ max = max*(1+adj);
+ }
+
+ // perform some checks
+ if (this.min != null && this.min <= 0) {
+ throw('log axis minimum must be greater than 0');
+ }
+ if (this.max != null && this.max <= 0) {
+ throw('log axis maximum must be greater than 0');
+ }
+
+ function findCeil (val) {
+ var order = Math.pow(10, Math.floor(Math.log(val)/Math.LN10));
+ return Math.ceil(val/order) * order;
+ }
+
+ function findFloor(val) {
+ var order = Math.pow(10, Math.floor(Math.log(val)/Math.LN10));
+ return Math.floor(val/order) * order;
+ }
+
+ // var range = max - min;
+ var rmin, rmax;
+
+ // for power distribution, open up range to get a nice power of axis.renderer.base.
+ // power distribution won't respect the user's min/max settings.
+ rmin = Math.pow(this.base, Math.floor(Math.log(min)/Math.log(this.base)));
+ rmax = Math.pow(this.base, Math.ceil(Math.log(max)/Math.log(this.base)));
+
+ // // if min and max are same, space them out a bit
+ // if (rmin === rmax) {
+ // var adj = 0.05;
+ // rmin = rmin*(1-adj);
+ // rmax = rmax*(1+adj);
+ // }
+
+ var order = Math.round(Math.log(rmin)/Math.LN10);
+
+ if (this.tickOptions == null || !this.tickOptions.formatString) {
+ this._overrideFormatString = true;
+ }
+
+ this.min = rmin;
+ this.max = rmax;
+ var range = this.max - this.min;
+
+ var minorTicks = (this.minorTicks === 'auto') ? 0 : this.minorTicks;
+ var numberTicks;
+ if (this.numberTicks == null){
+ if (dim > 140) {
+ numberTicks = Math.round(Math.log(this.max/this.min)/Math.log(this.base) + 1);
+ if (numberTicks < 2) {
+ numberTicks = 2;
+ }
+ if (minorTicks === 0) {
+ var temp = dim/(numberTicks - 1);
+ if (temp < 100) {
+ minorTicks = 0;
+ }
+ else if (temp < 190) {
+ minorTicks = 1;
+ }
+ else if (temp < 250) {
+ minorTicks = 3;
+ }
+ else if (temp < 600) {
+ minorTicks = 4;
+ }
+ else {
+ minorTicks = 9;
+ }
+ }
+ }
+ else {
+ numberTicks = 2;
+ if (minorTicks === 0) {
+ minorTicks = 1;
+ }
+ minorTicks = 0;
+ }
+ }
+ else {
+ numberTicks = this.numberTicks;
+ }
+
+ if (order >= 0 && minorTicks !== 3) {
+ this._autoFormatString = '%d';
+ }
+ // Adjust format string for case with 3 ticks where we'll have like 1, 2.5, 5, 7.5, 10
+ else if (order <= 0 && minorTicks === 3) {
+ var temp = -(order - 1);
+ this._autoFormatString = '%.'+ Math.abs(order-1) + 'f';
+ }
+
+ // Adjust format string for values less than 1.
+ else if (order < 0) {
+ var temp = -order;
+ this._autoFormatString = '%.'+ Math.abs(order) + 'f';
+ }
+
+ else {
+ this._autoFormatString = '%d';
+ }
+
+ var to, t, val, tt1, spread, interval;
+ for (var i=0; i<numberTicks; i++){
+ tt = Math.pow(this.base, i - numberTicks + 1) * this.max;
+
+ t = new this.tickRenderer(this.tickOptions);
+
+ if (this._overrideFormatString) {
+ t.formatString = this._autoFormatString;
+ }
+
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ t.setTick(tt, this.name);
+ this._ticks.push(t);
+
+ if (minorTicks && i<numberTicks-1) {
+ tt1 = Math.pow(this.base, i - numberTicks + 2) * this.max;
+ spread = tt1 - tt;
+ interval = tt1 / (minorTicks+1);
+ for (var j=minorTicks-1; j>=0; j--) {
+ val = tt1-interval*(j+1);
+ t = new this.tickRenderer(this.tickOptions);
+
+ if (this._overrideFormatString && this._autoFormatString != '') {
+ t.formatString = this._autoFormatString;
+ }
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ t.setTick(val, this.name);
+ this._ticks.push(t);
+ }
+ }
+ }
+ }
+
+ // min and max are set as would be the case with zooming
+ else if (this.min != null && this.max != null) {
+ var opts = $.extend(true, {}, this.tickOptions, {name: this.name, value: null});
+ var nt, ti;
+ // don't have an interval yet, pick one that gives the most
+ // "round" ticks we can get.
+ if (this.numberTicks == null && this.tickInterval == null) {
+ // var threshold = 30;
+ var tdim = Math.max(dim, threshold+1);
+ var nttarget = Math.ceil((tdim-threshold)/35 + 1);
+
+ var ret = $.jqplot.LinearTickGenerator.bestConstrainedInterval(this.min, this.max, nttarget);
+
+ this._autoFormatString = ret[3];
+ nt = ret[2];
+ ti = ret[4];
+
+ for (var i=0; i<nt; i++) {
+ opts.value = this.min + i * ti;
+ t = new this.tickRenderer(opts);
+
+ if (this._overrideFormatString && this._autoFormatString != '') {
+ t.formatString = this._autoFormatString;
+ }
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ this._ticks.push(t);
+ }
+ }
+
+ // for loose zoom, number ticks and interval are also set.
+ else if (this.numberTicks != null && this.tickInterval != null) {
+ nt = this.numberTicks;
+ for (var i=0; i<nt; i++) {
+ opts.value = this.min + i * this.tickInterval;
+ t = new this.tickRenderer(opts);
+
+ if (this._overrideFormatString && this._autoFormatString != '') {
+ t.formatString = this._autoFormatString;
+ }
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ this._ticks.push(t);
+ }
+ }
+ }
+ };
+
+ $.jqplot.LogAxisRenderer.prototype.pack = function(pos, offsets) {
+ var lb = parseInt(this.base, 10);
+ var ticks = this._ticks;
+ var trans = function (v) { return Math.log(v)/Math.log(lb); };
+ var invtrans = function (v) { return Math.pow(Math.E, (Math.log(lb)*v)); };
+ var max = trans(this.max);
+ var min = trans(this.min);
+ var offmax = offsets.max;
+ var offmin = offsets.min;
+ var lshow = (this._label == null) ? false : this._label.show;
+
+ for (var p in pos) {
+ this._elem.css(p, pos[p]);
+ }
+
+ this._offsets = offsets;
+ // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left.
+ var pixellength = offmax - offmin;
+ var unitlength = max - min;
+
+ // point to unit and unit to point conversions references to Plot DOM element top left corner.
+ this.p2u = function(p){
+ return invtrans((p - offmin) * unitlength / pixellength + min);
+ };
+
+ this.u2p = function(u){
+ return (trans(u) - min) * pixellength / unitlength + offmin;
+ };
+
+ if (this.name == 'xaxis' || this.name == 'x2axis'){
+ this.series_u2p = function(u){
+ return (trans(u) - min) * pixellength / unitlength;
+ };
+ this.series_p2u = function(p){
+ return invtrans(p * unitlength / pixellength + min);
+ };
+ }
+ // yaxis is max at top of canvas.
+ else {
+ this.series_u2p = function(u){
+ return (trans(u) - max) * pixellength / unitlength;
+ };
+ this.series_p2u = function(p){
+ return invtrans(p * unitlength / pixellength + max);
+ };
+ }
+
+ if (this.show) {
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ for (var i=0; i<ticks.length; i++) {
+ var t = ticks[i];
+ if (t.show && t.showLabel) {
+ var shim;
+
+ if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
+ switch (t.labelPosition) {
+ case 'auto':
+ // position at end
+ if (t.angle < 0) {
+ shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ }
+ // position at start
+ else {
+ shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
+ }
+ break;
+ case 'end':
+ shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ break;
+ case 'start':
+ shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
+ break;
+ case 'middle':
+ shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ break;
+ default:
+ shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ break;
+ }
+ }
+ else {
+ shim = -t.getWidth()/2;
+ }
+ // var shim = t.getWidth()/2;
+ var val = this.u2p(t.value) + shim + 'px';
+ t._elem.css('left', val);
+ t.pack();
+ }
+ }
+ if (lshow) {
+ var w = this._label._elem.outerWidth(true);
+ this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px');
+ if (this.name == 'xaxis') {
+ this._label._elem.css('bottom', '0px');
+ }
+ else {
+ this._label._elem.css('top', '0px');
+ }
+ this._label.pack();
+ }
+ }
+ else {
+ for (var i=0; i<ticks.length; i++) {
+ var t = ticks[i];
+ if (t.show && t.showLabel) {
+ var shim;
+ if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
+ switch (t.labelPosition) {
+ case 'auto':
+ // position at end
+ case 'end':
+ if (t.angle < 0) {
+ shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
+ }
+ else {
+ shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
+ }
+ break;
+ case 'start':
+ if (t.angle > 0) {
+ shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
+ }
+ else {
+ shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
+ }
+ break;
+ case 'middle':
+ // if (t.angle > 0) {
+ // shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ // }
+ // else {
+ // shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
+ // }
+ shim = -t.getHeight()/2;
+ break;
+ default:
+ shim = -t.getHeight()/2;
+ break;
+ }
+ }
+ else {
+ shim = -t.getHeight()/2;
+ }
+
+ var val = this.u2p(t.value) + shim + 'px';
+ t._elem.css('top', val);
+ t.pack();
+ }
+ }
+ if (lshow) {
+ var h = this._label._elem.outerHeight(true);
+ this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px');
+ if (this.name == 'yaxis') {
+ this._label._elem.css('left', '0px');
+ }
+ else {
+ this._label._elem.css('right', '0px');
+ }
+ this._label.pack();
+ }
+ }
+ }
+ };
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.min.js
new file mode 100644
index 00000000..6661212e
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(a){a.jqplot.LogAxisRenderer=function(){a.jqplot.LinearAxisRenderer.call(this);this.axisDefaults={base:10,tickDistribution:"power"}};a.jqplot.LogAxisRenderer.prototype=new a.jqplot.LinearAxisRenderer();a.jqplot.LogAxisRenderer.prototype.constructor=a.jqplot.LogAxisRenderer;a.jqplot.LogAxisRenderer.prototype.init=function(b){this.drawBaseline=true;this.minorTicks="auto";this._scalefact=1;a.extend(true,this,b);this._autoFormatString="%d";this._overrideFormatString=false;for(var c in this.renderer.axisDefaults){if(this[c]==null){this[c]=this.renderer.axisDefaults[c]}}this.resetDataBounds()};a.jqplot.LogAxisRenderer.prototype.createTicks=function(d){var G=this._ticks;var w=this.ticks;var s=this.name;var u=this._dataBounds;var b=(this.name.charAt(0)==="x")?this._plotDimensions.width:this._plotDimensions.height;var k;var N,v;var m,l;var M,K;var g=30;this._scalefact=(Math.max(b,g+1)-g)/300;if(w.length){for(K=0;K<w.length;K++){var A=w[K];var H=new this.tickRenderer(this.tickOptions);if(A.constructor==Array){H.value=A[0];H.label=A[1];if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}H.setTick(A[0],this.name);this._ticks.push(H)}else{if(a.isPlainObject(A)){a.extend(true,H,A);H.axis=this.name;this._ticks.push(H)}else{H.value=A;if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}H.setTick(A,this.name);this._ticks.push(H)}}}this.numberTicks=w.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value}else{if(this.min==null&&this.max==null){N=u.min*(2-this.padMin);v=u.max*this.padMax;if(N==v){var c=0.05;N=N*(1-c);v=v*(1+c)}if(this.min!=null&&this.min<=0){throw ("log axis minimum must be greater than 0")}if(this.max!=null&&this.max<=0){throw ("log axis maximum must be greater than 0")}function f(j){var i=Math.pow(10,Math.floor(Math.log(j)/Math.LN10));return Math.ceil(j/i)*i}function x(j){var i=Math.pow(10,Math.floor(Math.log(j)/Math.LN10));return Math.floor(j/i)*i}var F,r;F=Math.pow(this.base,Math.floor(Math.log(N)/Math.log(this.base)));r=Math.pow(this.base,Math.ceil(Math.log(v)/Math.log(this.base)));var E=Math.round(Math.log(F)/Math.LN10);if(this.tickOptions==null||!this.tickOptions.formatString){this._overrideFormatString=true}this.min=F;this.max=r;var q=this.max-this.min;var C=(this.minorTicks==="auto")?0:this.minorTicks;var h;if(this.numberTicks==null){if(b>140){h=Math.round(Math.log(this.max/this.min)/Math.log(this.base)+1);if(h<2){h=2}if(C===0){var o=b/(h-1);if(o<100){C=0}else{if(o<190){C=1}else{if(o<250){C=3}else{if(o<600){C=4}else{C=9}}}}}}else{h=2;if(C===0){C=1}C=0}}else{h=this.numberTicks}if(E>=0&&C!==3){this._autoFormatString="%d"}else{if(E<=0&&C===3){var o=-(E-1);this._autoFormatString="%."+Math.abs(E-1)+"f"}else{if(E<0){var o=-E;this._autoFormatString="%."+Math.abs(E)+"f"}else{this._autoFormatString="%d"}}}var O,H,z,p,n,k;for(var K=0;K<h;K++){M=Math.pow(this.base,K-h+1)*this.max;H=new this.tickRenderer(this.tickOptions);if(this._overrideFormatString){H.formatString=this._autoFormatString}if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}H.setTick(M,this.name);this._ticks.push(H);if(C&&K<h-1){p=Math.pow(this.base,K-h+2)*this.max;n=p-M;k=p/(C+1);for(var J=C-1;J>=0;J--){z=p-k*(J+1);H=new this.tickRenderer(this.tickOptions);if(this._overrideFormatString&&this._autoFormatString!=""){H.formatString=this._autoFormatString}if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}H.setTick(z,this.name);this._ticks.push(H)}}}}else{if(this.min!=null&&this.max!=null){var y=a.extend(true,{},this.tickOptions,{name:this.name,value:null});var I,e;if(this.numberTicks==null&&this.tickInterval==null){var D=Math.max(b,g+1);var L=Math.ceil((D-g)/35+1);var B=a.jqplot.LinearTickGenerator.bestConstrainedInterval(this.min,this.max,L);this._autoFormatString=B[3];I=B[2];e=B[4];for(var K=0;K<I;K++){y.value=this.min+K*e;H=new this.tickRenderer(y);if(this._overrideFormatString&&this._autoFormatString!=""){H.formatString=this._autoFormatString}if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}this._ticks.push(H)}}else{if(this.numberTicks!=null&&this.tickInterval!=null){I=this.numberTicks;for(var K=0;K<I;K++){y.value=this.min+K*this.tickInterval;H=new this.tickRenderer(y);if(this._overrideFormatString&&this._autoFormatString!=""){H.formatString=this._autoFormatString}if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}this._ticks.push(H)}}}}}}};a.jqplot.LogAxisRenderer.prototype.pack=function(f,e){var r=parseInt(this.base,10);var y=this._ticks;var d=function(h){return Math.log(h)/Math.log(r)};var b=function(h){return Math.pow(Math.E,(Math.log(r)*h))};var u=d(this.max);var s=d(this.min);var m=e.max;var k=e.min;var o=(this._label==null)?false:this._label.show;for(var q in f){this._elem.css(q,f[q])}this._offsets=e;var g=m-k;var j=u-s;this.p2u=function(h){return b((h-k)*j/g+s)};this.u2p=function(h){return(d(h)-s)*g/j+k};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(h){return(d(h)-s)*g/j};this.series_p2u=function(h){return b(h*j/g+s)}}else{this.series_u2p=function(h){return(d(h)-u)*g/j};this.series_p2u=function(h){return b(h*j/g+u)}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(var v=0;v<y.length;v++){var n=y[v];if(n.show&&n.showLabel){var c;if(n.constructor==a.jqplot.CanvasAxisTickRenderer&&n.angle){switch(n.labelPosition){case"auto":if(n.angle<0){c=-n.getWidth()+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2}else{c=-n._textRenderer.height*Math.sin(n._textRenderer.angle)/2}break;case"end":c=-n.getWidth()+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break;case"start":c=-n._textRenderer.height*Math.sin(n._textRenderer.angle)/2;break;case"middle":c=-n.getWidth()/2+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break;default:c=-n.getWidth()/2+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break}}else{c=-n.getWidth()/2}var z=this.u2p(n.value)+c+"px";n._elem.css("left",z);n.pack()}}if(o){var l=this._label._elem.outerWidth(true);this._label._elem.css("left",k+g/2-l/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}}else{for(var v=0;v<y.length;v++){var n=y[v];if(n.show&&n.showLabel){var c;if(n.constructor==a.jqplot.CanvasAxisTickRenderer&&n.angle){switch(n.labelPosition){case"auto":case"end":if(n.angle<0){c=-n._textRenderer.height*Math.cos(-n._textRenderer.angle)/2}else{c=-n.getHeight()+n._textRenderer.height*Math.cos(n._textRenderer.angle)/2}break;case"start":if(n.angle>0){c=-n._textRenderer.height*Math.cos(-n._textRenderer.angle)/2}else{c=-n.getHeight()+n._textRenderer.height*Math.cos(n._textRenderer.angle)/2}break;case"middle":c=-n.getHeight()/2;break;default:c=-n.getHeight()/2;break}}else{c=-n.getHeight()/2}var z=this.u2p(n.value)+c+"px";n._elem.css("top",z);n.pack()}}if(o){var x=this._label._elem.outerHeight(true);this._label._elem.css("top",m-g/2-x/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.js
new file mode 100644
index 00000000..694de41d
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.js
@@ -0,0 +1,611 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ // class: $.jqplot.MekkoAxisRenderer
+ // An axis renderer for a Mekko chart.
+ // Should be used with a Mekko chart where the mekkoRenderer is used on the series.
+ // Displays the Y axis as a range from 0 to 1 (0 to 100%) and the x axis with a tick
+ // for each series scaled to the sum of all the y values.
+ $.jqplot.MekkoAxisRenderer = function() {
+ };
+
+ // called with scope of axis object.
+ $.jqplot.MekkoAxisRenderer.prototype.init = function(options){
+ // prop: tickMode
+ // How to space the ticks on the axis.
+ // 'bar' will place a tick at the width of each bar.
+ // This is the default for the x axis.
+ // 'even' will place ticks at even intervals. This is
+ // the default for x2 axis and y axis. y axis cannot be changed.
+ this.tickMode;
+ // prop: barLabelRenderer
+ // renderer to use to draw labels under each bar.
+ this.barLabelRenderer = $.jqplot.AxisLabelRenderer;
+ // prop: barLabels
+ // array of labels to put under each bar.
+ this.barLabels = this.barLabels || [];
+ // prop: barLabelOptions
+ // options object to pass to the bar label renderer.
+ this.barLabelOptions = {};
+ this.tickOptions = $.extend(true, {showGridline:false}, this.tickOptions);
+ this._barLabels = [];
+ $.extend(true, this, options);
+ if (this.name == 'yaxis') {
+ this.tickOptions.formatString = this.tickOptions.formatString || "%d\%";
+ }
+ var db = this._dataBounds;
+ db.min = 0;
+ // for y axes, scale always go from 0 to 1 (0 to 100%)
+ if (this.name == 'yaxis' || this.name == 'y2axis') {
+ db.max = 100;
+ this.tickMode = 'even';
+ }
+ // For x axes, scale goes from 0 to sum of all y values.
+ else if (this.name == 'xaxis'){
+ this.tickMode = (this.tickMode == null) ? 'bar' : this.tickMode;
+ for (var i=0; i<this._series.length; i++) {
+ db.max += this._series[i]._sumy;
+ }
+ }
+ else if (this.name == 'x2axis'){
+ this.tickMode = (this.tickMode == null) ? 'even' : this.tickMode;
+ for (var i=0; i<this._series.length; i++) {
+ db.max += this._series[i]._sumy;
+ }
+ }
+ };
+
+ // called with scope of axis
+ $.jqplot.MekkoAxisRenderer.prototype.draw = function(ctx, plot) {
+ if (this.show) {
+ // populate the axis label and value properties.
+ // createTicks is a method on the renderer, but
+ // call it within the scope of the axis.
+ this.renderer.createTicks.call(this);
+ // fill a div with axes labels in the right direction.
+ // Need to pregenerate each axis to get it's bounds and
+ // position it and the labels correctly on the plot.
+ var dim=0;
+ var temp;
+
+ var elem = document.createElement('div');
+ this._elem = $(elem);
+ this._elem.addClass('jqplot-axis jqplot-'+this.name);
+ this._elem.css('position', 'absolute');
+ elem = null;
+
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ this._elem.width(this._plotDimensions.width);
+ }
+ else {
+ this._elem.height(this._plotDimensions.height);
+ }
+
+ // draw the axis label
+ // create a _label object.
+ this.labelOptions.axis = this.name;
+ this._label = new this.labelRenderer(this.labelOptions);
+ if (this._label.show) {
+ this._elem.append(this._label.draw(ctx));
+ }
+
+ var t, tick, elem;
+ if (this.showTicks) {
+ t = this._ticks;
+ for (var i=0; i<t.length; i++) {
+ tick = t[i];
+ if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
+ this._elem.append(tick.draw(ctx));
+ }
+ }
+ }
+
+ // draw the series labels
+ for (i=0; i<this.barLabels.length; i++) {
+ this.barLabelOptions.axis = this.name;
+ this.barLabelOptions.label = this.barLabels[i];
+ this._barLabels.push(new this.barLabelRenderer(this.barLabelOptions));
+ if (this.tickMode != 'bar') {
+ this._barLabels[i].show = false;
+ }
+ if (this._barLabels[i].show) {
+ var elem = this._barLabels[i].draw(ctx, plot);
+ elem.removeClass('jqplot-'+this.name+'-label');
+ elem.addClass('jqplot-'+this.name+'-tick');
+ elem.addClass('jqplot-mekko-barLabel');
+ elem.appendTo(this._elem);
+ elem = null;
+ }
+ }
+
+ }
+ return this._elem;
+ };
+
+ // called with scope of an axis
+ $.jqplot.MekkoAxisRenderer.prototype.reset = function() {
+ this.min = this._min;
+ this.max = this._max;
+ this.tickInterval = this._tickInterval;
+ this.numberTicks = this._numberTicks;
+ // this._ticks = this.__ticks;
+ };
+
+ // called with scope of axis
+ $.jqplot.MekkoAxisRenderer.prototype.set = function() {
+ var dim = 0;
+ var temp;
+ var w = 0;
+ var h = 0;
+ var lshow = (this._label == null) ? false : this._label.show;
+ if (this.show && this.showTicks) {
+ var t = this._ticks;
+ for (var i=0; i<t.length; i++) {
+ var tick = t[i];
+ if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ temp = tick._elem.outerHeight(true);
+ }
+ else {
+ temp = tick._elem.outerWidth(true);
+ }
+ if (temp > dim) {
+ dim = temp;
+ }
+ }
+ }
+
+ if (lshow) {
+ w = this._label._elem.outerWidth(true);
+ h = this._label._elem.outerHeight(true);
+ }
+ if (this.name == 'xaxis') {
+ dim = dim + h;
+ this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'});
+ }
+ else if (this.name == 'x2axis') {
+ dim = dim + h;
+ this._elem.css({'height':dim+'px', left:'0px', top:'0px'});
+ }
+ else if (this.name == 'yaxis') {
+ dim = dim + w;
+ this._elem.css({'width':dim+'px', left:'0px', top:'0px'});
+ if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
+ this._label._elem.css('width', w+'px');
+ }
+ }
+ else {
+ dim = dim + w;
+ this._elem.css({'width':dim+'px', right:'0px', top:'0px'});
+ if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
+ this._label._elem.css('width', w+'px');
+ }
+ }
+ }
+ };
+
+ // called with scope of axis
+ $.jqplot.MekkoAxisRenderer.prototype.createTicks = function() {
+ // we're are operating on an axis here
+ var ticks = this._ticks;
+ var userTicks = this.ticks;
+ var name = this.name;
+ // databounds were set on axis initialization.
+ var db = this._dataBounds;
+ var dim, interval;
+ var min, max;
+ var pos1, pos2;
+ var t, tt, i, j;
+
+ // if we already have ticks, use them.
+ // ticks must be in order of increasing value.
+
+ if (userTicks.length) {
+ // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed
+ for (i=0; i<userTicks.length; i++){
+ var ut = userTicks[i];
+ var t = new this.tickRenderer(this.tickOptions);
+ if (ut.constructor == Array) {
+ t.value = ut[0];
+ t.label = ut[1];
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ t.setTick(ut[0], this.name);
+ this._ticks.push(t);
+ }
+
+ else {
+ t.value = ut;
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ t.setTick(ut, this.name);
+ this._ticks.push(t);
+ }
+ }
+ this.numberTicks = userTicks.length;
+ this.min = this._ticks[0].value;
+ this.max = this._ticks[this.numberTicks-1].value;
+ this.tickInterval = (this.max - this.min) / (this.numberTicks - 1);
+ }
+
+ // we don't have any ticks yet, let's make some!
+ else {
+ if (name == 'xaxis' || name == 'x2axis') {
+ dim = this._plotDimensions.width;
+ }
+ else {
+ dim = this._plotDimensions.height;
+ }
+
+ // if min, max and number of ticks specified, user can't specify interval.
+ if (this.min != null && this.max != null && this.numberTicks != null) {
+ this.tickInterval = null;
+ }
+
+ min = (this.min != null) ? this.min : db.min;
+ max = (this.max != null) ? this.max : db.max;
+
+ // if min and max are same, space them out a bit.+
+ if (min == max) {
+ var adj = 0.05;
+ if (min > 0) {
+ adj = Math.max(Math.log(min)/Math.LN10, 0.05);
+ }
+ min -= adj;
+ max += adj;
+ }
+
+ var range = max - min;
+ var rmin, rmax;
+ var temp, prev, curr;
+ var ynumticks = [3,5,6,11,21];
+
+ // yaxis divide ticks in nice intervals from 0 to 1.
+ if (this.name == 'yaxis' || this.name == 'y2axis') {
+ this.min = 0;
+ this.max = 100;
+ // user didn't specify number of ticks.
+ if (!this.numberTicks){
+ if (this.tickInterval) {
+ this.numberTicks = 3 + Math.ceil(range / this.tickInterval);
+ }
+ else {
+ temp = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing);
+ for (i=0; i<ynumticks.length; i++) {
+ curr = temp/ynumticks[i];
+ if (curr == 1) {
+ this.numberTicks = ynumticks[i];
+ break;
+ }
+ else if (curr > 1) {
+ prev = curr;
+ continue;
+ }
+ else if (curr < 1) {
+ // was prev or is curr closer to one?
+ if (Math.abs(prev - 1) < Math.abs(curr - 1)) {
+ this.numberTicks = ynumticks[i-1];
+ break;
+ }
+ else {
+ this.numberTicks = ynumticks[i];
+ break;
+ }
+ }
+ else if (i == ynumticks.length -1) {
+ this.numberTicks = ynumticks[i];
+ }
+ }
+ this.tickInterval = range / (this.numberTicks - 1);
+ }
+ }
+
+ // user did specify number of ticks.
+ else {
+ this.tickInterval = range / (this.numberTicks - 1);
+ }
+
+ for (var i=0; i<this.numberTicks; i++){
+ tt = this.min + i * this.tickInterval;
+ t = new this.tickRenderer(this.tickOptions);
+ // var t = new $.jqplot.AxisTickRenderer(this.tickOptions);
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ t.setTick(tt, this.name);
+ this._ticks.push(t);
+ }
+ }
+
+ // for x axes, have number ot ticks equal to number of series and ticks placed
+ // at sum of y values for each series.
+ else if (this.tickMode == 'bar') {
+ this.min = 0;
+ this.numberTicks = this._series.length + 1;
+ t = new this.tickRenderer(this.tickOptions);
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ t.setTick(0, this.name);
+ this._ticks.push(t);
+
+ temp = 0;
+
+ for (i=1; i<this.numberTicks; i++){
+ temp += this._series[i-1]._sumy;
+ t = new this.tickRenderer(this.tickOptions);
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ t.setTick(temp, this.name);
+ this._ticks.push(t);
+ }
+ this.max = this.max || temp;
+
+ // if user specified a max and it is greater than sum, add a tick
+ if (this.max > temp) {
+ t = new this.tickRenderer(this.tickOptions);
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ t.setTick(this.max, this.name);
+ this._ticks.push(t);
+
+ }
+ }
+
+ else if (this.tickMode == 'even') {
+ this.min = 0;
+ this.max = this.max || db.max;
+ // get a desired number of ticks
+ var nt = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing);
+ range = this.max - this.min;
+ this.numberTicks = nt;
+ this.tickInterval = range / (this.numberTicks - 1);
+
+ for (i=0; i<this.numberTicks; i++){
+ tt = this.min + i * this.tickInterval;
+ t = new this.tickRenderer(this.tickOptions);
+ // var t = new $.jqplot.AxisTickRenderer(this.tickOptions);
+ if (!this.showTicks) {
+ t.showLabel = false;
+ t.showMark = false;
+ }
+ else if (!this.showTickMarks) {
+ t.showMark = false;
+ }
+ t.setTick(tt, this.name);
+ this._ticks.push(t);
+ }
+
+ }
+ }
+ };
+
+ // called with scope of axis
+ $.jqplot.MekkoAxisRenderer.prototype.pack = function(pos, offsets) {
+ var ticks = this._ticks;
+ var max = this.max;
+ var min = this.min;
+ var offmax = offsets.max;
+ var offmin = offsets.min;
+ var lshow = (this._label == null) ? false : this._label.show;
+
+ for (var p in pos) {
+ this._elem.css(p, pos[p]);
+ }
+
+ this._offsets = offsets;
+ // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left.
+ var pixellength = offmax - offmin;
+ var unitlength = max - min;
+
+ // point to unit and unit to point conversions references to Plot DOM element top left corner.
+ this.p2u = function(p){
+ return (p - offmin) * unitlength / pixellength + min;
+ };
+
+ this.u2p = function(u){
+ return (u - min) * pixellength / unitlength + offmin;
+ };
+
+ if (this.name == 'xaxis' || this.name == 'x2axis'){
+ this.series_u2p = function(u){
+ return (u - min) * pixellength / unitlength;
+ };
+ this.series_p2u = function(p){
+ return p * unitlength / pixellength + min;
+ };
+ }
+
+ else {
+ this.series_u2p = function(u){
+ return (u - max) * pixellength / unitlength;
+ };
+ this.series_p2u = function(p){
+ return p * unitlength / pixellength + max;
+ };
+ }
+
+ if (this.show) {
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ for (var i=0; i<ticks.length; i++) {
+ var t = ticks[i];
+ if (t.show && t.showLabel) {
+ var shim;
+
+ if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
+ // will need to adjust auto positioning based on which axis this is.
+ var temp = (this.name == 'xaxis') ? 1 : -1;
+ switch (t.labelPosition) {
+ case 'auto':
+ // position at end
+ if (temp * t.angle < 0) {
+ shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ }
+ // position at start
+ else {
+ shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
+ }
+ break;
+ case 'end':
+ shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ break;
+ case 'start':
+ shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
+ break;
+ case 'middle':
+ shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ break;
+ default:
+ shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ break;
+ }
+ }
+ else {
+ shim = -t.getWidth()/2;
+ }
+ var val = this.u2p(t.value) + shim + 'px';
+ t._elem.css('left', val);
+ t.pack();
+ }
+ }
+ var w;
+ if (lshow) {
+ w = this._label._elem.outerWidth(true);
+ this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px');
+ if (this.name == 'xaxis') {
+ this._label._elem.css('bottom', '0px');
+ }
+ else {
+ this._label._elem.css('top', '0px');
+ }
+ this._label.pack();
+ }
+ // now show the labels under the bars.
+ var b, l, r;
+ for (var i=0; i<this.barLabels.length; i++) {
+ b = this._barLabels[i];
+ if (b.show) {
+ w = b.getWidth();
+ l = this._ticks[i].getLeft() + this._ticks[i].getWidth();
+ r = this._ticks[i+1].getLeft();
+ b._elem.css('left', (r+l-w)/2+'px');
+ b._elem.css('top', this._ticks[i]._elem.css('top'));
+ b.pack();
+ }
+ }
+ }
+ else {
+ for (var i=0; i<ticks.length; i++) {
+ var t = ticks[i];
+ if (t.show && t.showLabel) {
+ var shim;
+ if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
+ // will need to adjust auto positioning based on which axis this is.
+ var temp = (this.name == 'yaxis') ? 1 : -1;
+ switch (t.labelPosition) {
+ case 'auto':
+ // position at end
+ case 'end':
+ if (temp * t.angle < 0) {
+ shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
+ }
+ else {
+ shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
+ }
+ break;
+ case 'start':
+ if (t.angle > 0) {
+ shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
+ }
+ else {
+ shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
+ }
+ break;
+ case 'middle':
+ shim = -t.getHeight()/2;
+ break;
+ default:
+ shim = -t.getHeight()/2;
+ break;
+ }
+ }
+ else {
+ shim = -t.getHeight()/2;
+ }
+
+ var val = this.u2p(t.value) + shim + 'px';
+ t._elem.css('top', val);
+ t.pack();
+ }
+ }
+ if (lshow) {
+ var h = this._label._elem.outerHeight(true);
+ this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px');
+ if (this.name == 'yaxis') {
+ this._label._elem.css('left', '0px');
+ }
+ else {
+ this._label._elem.css('right', '0px');
+ }
+ this._label.pack();
+ }
+ }
+ }
+ };
+})(jQuery);
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js
new file mode 100644
index 00000000..6be9164e
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(a){a.jqplot.MekkoAxisRenderer=function(){};a.jqplot.MekkoAxisRenderer.prototype.init=function(c){this.tickMode;this.barLabelRenderer=a.jqplot.AxisLabelRenderer;this.barLabels=this.barLabels||[];this.barLabelOptions={};this.tickOptions=a.extend(true,{showGridline:false},this.tickOptions);this._barLabels=[];a.extend(true,this,c);if(this.name=="yaxis"){this.tickOptions.formatString=this.tickOptions.formatString||"%d%"}var b=this._dataBounds;b.min=0;if(this.name=="yaxis"||this.name=="y2axis"){b.max=100;this.tickMode="even"}else{if(this.name=="xaxis"){this.tickMode=(this.tickMode==null)?"bar":this.tickMode;for(var d=0;d<this._series.length;d++){b.max+=this._series[d]._sumy}}else{if(this.name=="x2axis"){this.tickMode=(this.tickMode==null)?"even":this.tickMode;for(var d=0;d<this._series.length;d++){b.max+=this._series[d]._sumy}}}}};a.jqplot.MekkoAxisRenderer.prototype.draw=function(b,j){if(this.show){this.renderer.createTicks.call(this);var h=0;var c;var g=document.createElement("div");this._elem=a(g);this._elem.addClass("jqplot-axis jqplot-"+this.name);this._elem.css("position","absolute");g=null;if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){this._elem.append(this._label.draw(b))}var f,e,g;if(this.showTicks){f=this._ticks;for(var d=0;d<f.length;d++){e=f[d];if(e.showLabel&&(!e.isMinorTick||this.showMinorTicks)){this._elem.append(e.draw(b))}}}for(d=0;d<this.barLabels.length;d++){this.barLabelOptions.axis=this.name;this.barLabelOptions.label=this.barLabels[d];this._barLabels.push(new this.barLabelRenderer(this.barLabelOptions));if(this.tickMode!="bar"){this._barLabels[d].show=false}if(this._barLabels[d].show){var g=this._barLabels[d].draw(b,j);g.removeClass("jqplot-"+this.name+"-label");g.addClass("jqplot-"+this.name+"-tick");g.addClass("jqplot-mekko-barLabel");g.appendTo(this._elem);g=null}}}return this._elem};a.jqplot.MekkoAxisRenderer.prototype.reset=function(){this.min=this._min;this.max=this._max;this.tickInterval=this._tickInterval;this.numberTicks=this._numberTicks};a.jqplot.MekkoAxisRenderer.prototype.set=function(){var k=0;var d;var c=0;var j=0;var b=(this._label==null)?false:this._label.show;if(this.show&&this.showTicks){var g=this._ticks;for(var f=0;f<g.length;f++){var e=g[f];if(e.showLabel&&(!e.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){d=e._elem.outerHeight(true)}else{d=e._elem.outerWidth(true)}if(d>k){k=d}}}if(b){c=this._label._elem.outerWidth(true);j=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){k=k+j;this._elem.css({height:k+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){k=k+j;this._elem.css({height:k+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){k=k+c;this._elem.css({width:k+"px",left:"0px",top:"0px"});if(b&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",c+"px")}}else{k=k+c;this._elem.css({width:k+"px",right:"0px",top:"0px"});if(b&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",c+"px")}}}}}};a.jqplot.MekkoAxisRenderer.prototype.createTicks=function(){var z=this._ticks;var w=this.ticks;var B=this.name;var y=this._dataBounds;var p,x;var n,r;var d,c;var h,b,s,q;if(w.length){for(s=0;s<w.length;s++){var e=w[s];var h=new this.tickRenderer(this.tickOptions);if(e.constructor==Array){h.value=e[0];h.label=e[1];if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(e[0],this.name);this._ticks.push(h)}else{h.value=e;if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(e,this.name);this._ticks.push(h)}}this.numberTicks=w.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value;this.tickInterval=(this.max-this.min)/(this.numberTicks-1)}else{if(B=="xaxis"||B=="x2axis"){p=this._plotDimensions.width}else{p=this._plotDimensions.height}if(this.min!=null&&this.max!=null&&this.numberTicks!=null){this.tickInterval=null}n=(this.min!=null)?this.min:y.min;r=(this.max!=null)?this.max:y.max;if(n==r){var g=0.05;if(n>0){g=Math.max(Math.log(n)/Math.LN10,0.05)}n-=g;r+=g}var k=r-n;var m,o;var v,l,u;var f=[3,5,6,11,21];if(this.name=="yaxis"||this.name=="y2axis"){this.min=0;this.max=100;if(!this.numberTicks){if(this.tickInterval){this.numberTicks=3+Math.ceil(k/this.tickInterval)}else{v=2+Math.ceil((p-(this.tickSpacing-1))/this.tickSpacing);for(s=0;s<f.length;s++){u=v/f[s];if(u==1){this.numberTicks=f[s];break}else{if(u>1){l=u;continue}else{if(u<1){if(Math.abs(l-1)<Math.abs(u-1)){this.numberTicks=f[s-1];break}else{this.numberTicks=f[s];break}}else{if(s==f.length-1){this.numberTicks=f[s]}}}}}this.tickInterval=k/(this.numberTicks-1)}}else{this.tickInterval=k/(this.numberTicks-1)}for(var s=0;s<this.numberTicks;s++){b=this.min+s*this.tickInterval;h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(b,this.name);this._ticks.push(h)}}else{if(this.tickMode=="bar"){this.min=0;this.numberTicks=this._series.length+1;h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(0,this.name);this._ticks.push(h);v=0;for(s=1;s<this.numberTicks;s++){v+=this._series[s-1]._sumy;h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(v,this.name);this._ticks.push(h)}this.max=this.max||v;if(this.max>v){h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(this.max,this.name);this._ticks.push(h)}}else{if(this.tickMode=="even"){this.min=0;this.max=this.max||y.max;var A=2+Math.ceil((p-(this.tickSpacing-1))/this.tickSpacing);k=this.max-this.min;this.numberTicks=A;this.tickInterval=k/(this.numberTicks-1);for(s=0;s<this.numberTicks;s++){b=this.min+s*this.tickInterval;h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(b,this.name);this._ticks.push(h)}}}}}};a.jqplot.MekkoAxisRenderer.prototype.pack=function(e,d){var C=this._ticks;var x=this.max;var v=this.min;var m=d.max;var j=d.min;var o=(this._label==null)?false:this._label.show;for(var s in e){this._elem.css(s,e[s])}this._offsets=d;var f=m-j;var g=x-v;this.p2u=function(b){return(b-j)*g/f+v};this.u2p=function(b){return(b-v)*f/g+j};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(b){return(b-v)*f/g};this.series_p2u=function(b){return b*g/f+v}}else{this.series_u2p=function(b){return(b-x)*f/g};this.series_p2u=function(b){return b*g/f+x}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(var y=0;y<C.length;y++){var n=C[y];if(n.show&&n.showLabel){var c;if(n.constructor==a.jqplot.CanvasAxisTickRenderer&&n.angle){var A=(this.name=="xaxis")?1:-1;switch(n.labelPosition){case"auto":if(A*n.angle<0){c=-n.getWidth()+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2}else{c=-n._textRenderer.height*Math.sin(n._textRenderer.angle)/2}break;case"end":c=-n.getWidth()+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break;case"start":c=-n._textRenderer.height*Math.sin(n._textRenderer.angle)/2;break;case"middle":c=-n.getWidth()/2+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break;default:c=-n.getWidth()/2+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break}}else{c=-n.getWidth()/2}var D=this.u2p(n.value)+c+"px";n._elem.css("left",D);n.pack()}}var k;if(o){k=this._label._elem.outerWidth(true);this._label._elem.css("left",j+f/2-k/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}var B,u,q;for(var y=0;y<this.barLabels.length;y++){B=this._barLabels[y];if(B.show){k=B.getWidth();u=this._ticks[y].getLeft()+this._ticks[y].getWidth();q=this._ticks[y+1].getLeft();B._elem.css("left",(q+u-k)/2+"px");B._elem.css("top",this._ticks[y]._elem.css("top"));B.pack()}}}else{for(var y=0;y<C.length;y++){var n=C[y];if(n.show&&n.showLabel){var c;if(n.constructor==a.jqplot.CanvasAxisTickRenderer&&n.angle){var A=(this.name=="yaxis")?1:-1;switch(n.labelPosition){case"auto":case"end":if(A*n.angle<0){c=-n._textRenderer.height*Math.cos(-n._textRenderer.angle)/2}else{c=-n.getHeight()+n._textRenderer.height*Math.cos(n._textRenderer.angle)/2}break;case"start":if(n.angle>0){c=-n._textRenderer.height*Math.cos(-n._textRenderer.angle)/2}else{c=-n.getHeight()+n._textRenderer.height*Math.cos(n._textRenderer.angle)/2}break;case"middle":c=-n.getHeight()/2;break;default:c=-n.getHeight()/2;break}}else{c=-n.getHeight()/2}var D=this.u2p(n.value)+c+"px";n._elem.css("top",D);n.pack()}}if(o){var z=this._label._elem.outerHeight(true);this._label._elem.css("top",m-f/2-z/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.js
new file mode 100644
index 00000000..893e2b98
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.js
@@ -0,0 +1,437 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ /**
+ * Class: $.jqplot.MekkoRenderer
+ * Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph.
+ * the <$.jqplot.MekkoAxisRenderer> should be used with mekko charts. The mekko renderer
+ * overrides the default legend renderer with it's own $.jqplot.MekkoLegendRenderer
+ * which allows more flexibility to specify number of rows and columns in the legend.
+ *
+ * Data is specified per bar in the chart. You can specify data as an array of y values, or as
+ * an array of [label, value] pairs. Note that labels are used only on the first series.
+ * Labels on subsequent series are ignored:
+ *
+ * > bar1 = [['shirts', 8],['hats', 14],['shoes', 6],['gloves', 16],['dolls', 12]];
+ * > bar2 = [15,6,9,13,6];
+ * > bar3 = [['grumpy',4],['sneezy',2],['happy',7],['sleepy',9],['doc',7]];
+ *
+ * If you want to place labels for each bar under the axis, you use the barLabels option on
+ * the axes. The bar labels can be styled with the ".jqplot-mekko-barLabel" css class.
+ *
+ * > barLabels = ['Mickey Mouse', 'Donald Duck', 'Goofy'];
+ * > axes:{xaxis:{barLabels:barLabels}}
+ *
+ */
+
+
+ $.jqplot.MekkoRenderer = function(){
+ this.shapeRenderer = new $.jqplot.ShapeRenderer();
+ // prop: borderColor
+ // color of the borders between areas on the chart
+ this.borderColor = null;
+ // prop: showBorders
+ // True to draw borders lines between areas on the chart.
+ // False will draw borders lines with the same color as the area.
+ this.showBorders = true;
+ };
+
+ // called with scope of series.
+ $.jqplot.MekkoRenderer.prototype.init = function(options, plot) {
+ this.fill = false;
+ this.fillRect = true;
+ this.strokeRect = true;
+ this.shadow = false;
+ // width of bar on x axis.
+ this._xwidth = 0;
+ this._xstart = 0;
+ $.extend(true, this.renderer, options);
+ // set the shape renderer options
+ var opts = {lineJoin:'miter', lineCap:'butt', isarc:false, fillRect:this.fillRect, strokeRect:this.strokeRect};
+ this.renderer.shapeRenderer.init(opts);
+ plot.axes.x2axis._series.push(this);
+ this._type = 'mekko';
+ };
+
+ // Method: setGridData
+ // converts the user data values to grid coordinates and stores them
+ // in the gridData array. Will convert user data into appropriate
+ // rectangles.
+ // Called with scope of a series.
+ $.jqplot.MekkoRenderer.prototype.setGridData = function(plot) {
+ // recalculate the grid data
+ var xp = this._xaxis.series_u2p;
+ var yp = this._yaxis.series_u2p;
+ var data = this._plotData;
+ this.gridData = [];
+ // figure out width on x axis.
+ // this._xwidth = this._sumy / plot._sumy * this.canvas.getWidth();
+ this._xwidth = xp(this._sumy) - xp(0);
+ if (this.index>0) {
+ this._xstart = plot.series[this.index-1]._xstart + plot.series[this.index-1]._xwidth;
+ }
+ var totheight = this.canvas.getHeight();
+ var sumy = 0;
+ var cury;
+ var curheight;
+ for (var i=0; i<data.length; i++) {
+ if (data[i] != null) {
+ sumy += data[i][1];
+ cury = totheight - (sumy / this._sumy * totheight);
+ curheight = data[i][1] / this._sumy * totheight;
+ this.gridData.push([this._xstart, cury, this._xwidth, curheight]);
+ }
+ }
+ };
+
+ // Method: makeGridData
+ // converts any arbitrary data values to grid coordinates and
+ // returns them. This method exists so that plugins can use a series'
+ // linerenderer to generate grid data points without overwriting the
+ // grid data associated with that series.
+ // Called with scope of a series.
+ $.jqplot.MekkoRenderer.prototype.makeGridData = function(data, plot) {
+ // recalculate the grid data
+ // figure out width on x axis.
+ var xp = this._xaxis.series_u2p;
+ var totheight = this.canvas.getHeight();
+ var sumy = 0;
+ var cury;
+ var curheight;
+ var gd = [];
+ for (var i=0; i<data.length; i++) {
+ if (data[i] != null) {
+ sumy += data[i][1];
+ cury = totheight - (sumy / this._sumy * totheight);
+ curheight = data[i][1] / this._sumy * totheight;
+ gd.push([this._xstart, cury, this._xwidth, curheight]);
+ }
+ }
+ return gd;
+ };
+
+
+ // called within scope of series.
+ $.jqplot.MekkoRenderer.prototype.draw = function(ctx, gd, options) {
+ var i;
+ var opts = (options != undefined) ? options : {};
+ var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
+ var colorGenerator = new $.jqplot.ColorGenerator(this.seriesColors);
+ ctx.save();
+ if (gd.length) {
+ if (showLine) {
+ for (i=0; i<gd.length; i++){
+ opts.fillStyle = colorGenerator.next();
+ if (this.renderer.showBorders) {
+ opts.strokeStyle = this.renderer.borderColor;
+ }
+ else {
+ opts.strokeStyle = opts.fillStyle;
+ }
+ this.renderer.shapeRenderer.draw(ctx, gd[i], opts);
+ }
+ }
+ }
+
+ ctx.restore();
+ };
+
+ $.jqplot.MekkoRenderer.prototype.drawShadow = function(ctx, gd, options) {
+ // This is a no-op, no shadows on mekko charts.
+ };
+
+ /**
+ * Class: $.jqplot.MekkoLegendRenderer
+ * Legend renderer used by mekko charts with options for
+ * controlling number or rows and columns as well as placement
+ * outside of plot area.
+ *
+ */
+ $.jqplot.MekkoLegendRenderer = function(){
+ //
+ };
+
+ $.jqplot.MekkoLegendRenderer.prototype.init = function(options) {
+ // prop: numberRows
+ // Maximum number of rows in the legend. 0 or null for unlimited.
+ this.numberRows = null;
+ // prop: numberColumns
+ // Maximum number of columns in the legend. 0 or null for unlimited.
+ this.numberColumns = null;
+ // this will override the placement option on the Legend object
+ this.placement = "outside";
+ $.extend(true, this, options);
+ };
+
+ // called with scope of legend
+ $.jqplot.MekkoLegendRenderer.prototype.draw = function() {
+ var legend = this;
+ if (this.show) {
+ var series = this._series;
+ var ss = 'position:absolute;';
+ ss += (this.background) ? 'background:'+this.background+';' : '';
+ ss += (this.border) ? 'border:'+this.border+';' : '';
+ ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
+ ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : '';
+ ss += (this.textColor) ? 'color:'+this.textColor+';' : '';
+ this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>');
+ // Mekko charts legends don't go by number of series, but by number of data points
+ // in the series. Refactor things here for that.
+
+ var pad = false,
+ reverse = true, // mekko charts are always stacked, so reverse
+ nr, nc;
+ var s = series[0];
+ var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors);
+
+ if (s.show) {
+ var pd = s.data;
+ if (this.numberRows) {
+ nr = this.numberRows;
+ if (!this.numberColumns){
+ nc = Math.ceil(pd.length/nr);
+ }
+ else{
+ nc = this.numberColumns;
+ }
+ }
+ else if (this.numberColumns) {
+ nc = this.numberColumns;
+ nr = Math.ceil(pd.length/this.numberColumns);
+ }
+ else {
+ nr = pd.length;
+ nc = 1;
+ }
+
+ var i, j, tr, td1, td2, lt, rs, color;
+ var idx = 0;
+
+ for (i=0; i<nr; i++) {
+ if (reverse){
+ tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem);
+ }
+ else{
+ tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);
+ }
+ for (j=0; j<nc; j++) {
+ if (idx < pd.length) {
+ lt = this.labels[idx] || pd[idx][0].toString();
+ color = colorGenerator.next();
+ if (!reverse){
+ if (i>0){
+ pad = true;
+ }
+ else{
+ pad = false;
+ }
+ }
+ else{
+ if (i == nr -1){
+ pad = false;
+ }
+ else{
+ pad = true;
+ }
+ }
+ rs = (pad) ? this.rowSpacing : '0';
+
+ td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
+ '<div><div class="jqplot-table-legend-swatch" style="border-color:'+color+';"></div>'+
+ '</div></td>');
+ td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
+ if (this.escapeHtml){
+ td2.text(lt);
+ }
+ else {
+ td2.html(lt);
+ }
+ if (reverse) {
+ td2.prependTo(tr);
+ td1.prependTo(tr);
+ }
+ else {
+ td1.appendTo(tr);
+ td2.appendTo(tr);
+ }
+ pad = true;
+ }
+ idx++;
+ }
+ }
+
+ tr = null;
+ td1 = null;
+ td2 = null;
+ }
+ }
+ return this._elem;
+ };
+
+ $.jqplot.MekkoLegendRenderer.prototype.pack = function(offsets) {
+ if (this.show) {
+ // fake a grid for positioning
+ var grid = {_top:offsets.top, _left:offsets.left, _right:offsets.right, _bottom:this._plotDimensions.height - offsets.bottom};
+ if (this.placement == 'insideGrid') {
+ switch (this.location) {
+ case 'nw':
+ var a = grid._left + this.xoffset;
+ var b = grid._top + this.yoffset;
+ this._elem.css('left', a);
+ this._elem.css('top', b);
+ break;
+ case 'n':
+ var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
+ var b = grid._top + this.yoffset;
+ this._elem.css('left', a);
+ this._elem.css('top', b);
+ break;
+ case 'ne':
+ var a = offsets.right + this.xoffset;
+ var b = grid._top + this.yoffset;
+ this._elem.css({right:a, top:b});
+ break;
+ case 'e':
+ var a = offsets.right + this.xoffset;
+ var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
+ this._elem.css({right:a, top:b});
+ break;
+ case 'se':
+ var a = offsets.right + this.xoffset;
+ var b = offsets.bottom + this.yoffset;
+ this._elem.css({right:a, bottom:b});
+ break;
+ case 's':
+ var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
+ var b = offsets.bottom + this.yoffset;
+ this._elem.css({left:a, bottom:b});
+ break;
+ case 'sw':
+ var a = grid._left + this.xoffset;
+ var b = offsets.bottom + this.yoffset;
+ this._elem.css({left:a, bottom:b});
+ break;
+ case 'w':
+ var a = grid._left + this.xoffset;
+ var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
+ this._elem.css({left:a, top:b});
+ break;
+ default: // same as 'se'
+ var a = grid._right - this.xoffset;
+ var b = grid._bottom + this.yoffset;
+ this._elem.css({right:a, bottom:b});
+ break;
+ }
+
+ }
+ else {
+ switch (this.location) {
+ case 'nw':
+ var a = this._plotDimensions.width - grid._left + this.xoffset;
+ var b = grid._top + this.yoffset;
+ this._elem.css('right', a);
+ this._elem.css('top', b);
+ break;
+ case 'n':
+ var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
+ var b = this._plotDimensions.height - grid._top + this.yoffset;
+ this._elem.css('left', a);
+ this._elem.css('bottom', b);
+ break;
+ case 'ne':
+ var a = this._plotDimensions.width - offsets.right + this.xoffset;
+ var b = grid._top + this.yoffset;
+ this._elem.css({left:a, top:b});
+ break;
+ case 'e':
+ var a = this._plotDimensions.width - offsets.right + this.xoffset;
+ var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
+ this._elem.css({left:a, top:b});
+ break;
+ case 'se':
+ var a = this._plotDimensions.width - offsets.right + this.xoffset;
+ var b = offsets.bottom + this.yoffset;
+ this._elem.css({left:a, bottom:b});
+ break;
+ case 's':
+ var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
+ var b = this._plotDimensions.height - offsets.bottom + this.yoffset;
+ this._elem.css({left:a, top:b});
+ break;
+ case 'sw':
+ var a = this._plotDimensions.width - grid._left + this.xoffset;
+ var b = offsets.bottom + this.yoffset;
+ this._elem.css({right:a, bottom:b});
+ break;
+ case 'w':
+ var a = this._plotDimensions.width - grid._left + this.xoffset;
+ var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
+ this._elem.css({right:a, top:b});
+ break;
+ default: // same as 'se'
+ var a = grid._right - this.xoffset;
+ var b = grid._bottom + this.yoffset;
+ this._elem.css({right:a, bottom:b});
+ break;
+ }
+ }
+ }
+ };
+
+ // setup default renderers for axes and legend so user doesn't have to
+ // called with scope of plot
+ function preInit(target, data, options) {
+ options = options || {};
+ options.axesDefaults = options.axesDefaults || {};
+ options.legend = options.legend || {};
+ options.seriesDefaults = options.seriesDefaults || {};
+ var setopts = false;
+ if (options.seriesDefaults.renderer == $.jqplot.MekkoRenderer) {
+ setopts = true;
+ }
+ else if (options.series) {
+ for (var i=0; i < options.series.length; i++) {
+ if (options.series[i].renderer == $.jqplot.MekkoRenderer) {
+ setopts = true;
+ }
+ }
+ }
+
+ if (setopts) {
+ options.axesDefaults.renderer = $.jqplot.MekkoAxisRenderer;
+ options.legend.renderer = $.jqplot.MekkoLegendRenderer;
+ options.legend.preDraw = true;
+ }
+ }
+
+ $.jqplot.preInitHooks.push(preInit);
+
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.min.js
new file mode 100644
index 00000000..f7e36817
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(b){b.jqplot.MekkoRenderer=function(){this.shapeRenderer=new b.jqplot.ShapeRenderer();this.borderColor=null;this.showBorders=true};b.jqplot.MekkoRenderer.prototype.init=function(c,e){this.fill=false;this.fillRect=true;this.strokeRect=true;this.shadow=false;this._xwidth=0;this._xstart=0;b.extend(true,this.renderer,c);var d={lineJoin:"miter",lineCap:"butt",isarc:false,fillRect:this.fillRect,strokeRect:this.strokeRect};this.renderer.shapeRenderer.init(d);e.axes.x2axis._series.push(this);this._type="mekko"};b.jqplot.MekkoRenderer.prototype.setGridData=function(h){var e=this._xaxis.series_u2p;var c=this._yaxis.series_u2p;var g=this._plotData;this.gridData=[];this._xwidth=e(this._sumy)-e(0);if(this.index>0){this._xstart=h.series[this.index-1]._xstart+h.series[this.index-1]._xwidth}var l=this.canvas.getHeight();var d=0;var k;var j;for(var f=0;f<g.length;f++){if(g[f]!=null){d+=g[f][1];k=l-(d/this._sumy*l);j=g[f][1]/this._sumy*l;this.gridData.push([this._xstart,k,this._xwidth,j])}}};b.jqplot.MekkoRenderer.prototype.makeGridData=function(f,g){var d=this._xaxis.series_u2p;var l=this.canvas.getHeight();var c=0;var j;var h;var k=[];for(var e=0;e<f.length;e++){if(f[e]!=null){c+=f[e][1];j=l-(c/this._sumy*l);h=f[e][1]/this._sumy*l;k.push([this._xstart,j,this._xwidth,h])}}return k};b.jqplot.MekkoRenderer.prototype.draw=function(c,h,d){var e;var g=(d!=undefined)?d:{};var f=(g.showLine!=undefined)?g.showLine:this.showLine;var j=new b.jqplot.ColorGenerator(this.seriesColors);c.save();if(h.length){if(f){for(e=0;e<h.length;e++){g.fillStyle=j.next();if(this.renderer.showBorders){g.strokeStyle=this.renderer.borderColor}else{g.strokeStyle=g.fillStyle}this.renderer.shapeRenderer.draw(c,h[e],g)}}}c.restore()};b.jqplot.MekkoRenderer.prototype.drawShadow=function(c,e,d){};b.jqplot.MekkoLegendRenderer=function(){};b.jqplot.MekkoLegendRenderer.prototype.init=function(c){this.numberRows=null;this.numberColumns=null;this.placement="outside";b.extend(true,this,c)};b.jqplot.MekkoLegendRenderer.prototype.draw=function(){var f=this;if(this.show){var o=this._series;var r="position:absolute;";r+=(this.background)?"background:"+this.background+";":"";r+=(this.border)?"border:"+this.border+";":"";r+=(this.fontSize)?"font-size:"+this.fontSize+";":"";r+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";r+=(this.textColor)?"color:"+this.textColor+";":"";this._elem=b('<table class="jqplot-table-legend" style="'+r+'"></table>');var w=false,n=true,c,l;var p=o[0];var d=new b.jqplot.ColorGenerator(p.seriesColors);if(p.show){var x=p.data;if(this.numberRows){c=this.numberRows;if(!this.numberColumns){l=Math.ceil(x.length/c)}else{l=this.numberColumns}}else{if(this.numberColumns){l=this.numberColumns;c=Math.ceil(x.length/this.numberColumns)}else{c=x.length;l=1}}var v,u,e,h,g,k,m,t;var q=0;for(v=0;v<c;v++){if(n){e=b('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{e=b('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(u=0;u<l;u++){if(q<x.length){k=this.labels[q]||x[q][0].toString();t=d.next();if(!n){if(v>0){w=true}else{w=false}}else{if(v==c-1){w=false}else{w=true}}m=(w)?this.rowSpacing:"0";h=b('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+m+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+t+';"></div></div></td>');g=b('<td class="jqplot-table-legend" style="padding-top:'+m+';"></td>');if(this.escapeHtml){g.text(k)}else{g.html(k)}if(n){g.prependTo(e);h.prependTo(e)}else{h.appendTo(e);g.appendTo(e)}w=true}q++}}e=null;h=null;g=null}}return this._elem};b.jqplot.MekkoLegendRenderer.prototype.pack=function(f){if(this.show){var e={_top:f.top,_left:f.left,_right:f.right,_bottom:this._plotDimensions.height-f.bottom};if(this.placement=="insideGrid"){switch(this.location){case"nw":var d=e._left+this.xoffset;var c=e._top+this.yoffset;this._elem.css("left",d);this._elem.css("top",c);break;case"n":var d=(f.left+(this._plotDimensions.width-f.right))/2-this.getWidth()/2;var c=e._top+this.yoffset;this._elem.css("left",d);this._elem.css("top",c);break;case"ne":var d=f.right+this.xoffset;var c=e._top+this.yoffset;this._elem.css({right:d,top:c});break;case"e":var d=f.right+this.xoffset;var c=(f.top+(this._plotDimensions.height-f.bottom))/2-this.getHeight()/2;this._elem.css({right:d,top:c});break;case"se":var d=f.right+this.xoffset;var c=f.bottom+this.yoffset;this._elem.css({right:d,bottom:c});break;case"s":var d=(f.left+(this._plotDimensions.width-f.right))/2-this.getWidth()/2;var c=f.bottom+this.yoffset;this._elem.css({left:d,bottom:c});break;case"sw":var d=e._left+this.xoffset;var c=f.bottom+this.yoffset;this._elem.css({left:d,bottom:c});break;case"w":var d=e._left+this.xoffset;var c=(f.top+(this._plotDimensions.height-f.bottom))/2-this.getHeight()/2;this._elem.css({left:d,top:c});break;default:var d=e._right-this.xoffset;var c=e._bottom+this.yoffset;this._elem.css({right:d,bottom:c});break}}else{switch(this.location){case"nw":var d=this._plotDimensions.width-e._left+this.xoffset;var c=e._top+this.yoffset;this._elem.css("right",d);this._elem.css("top",c);break;case"n":var d=(f.left+(this._plotDimensions.width-f.right))/2-this.getWidth()/2;var c=this._plotDimensions.height-e._top+this.yoffset;this._elem.css("left",d);this._elem.css("bottom",c);break;case"ne":var d=this._plotDimensions.width-f.right+this.xoffset;var c=e._top+this.yoffset;this._elem.css({left:d,top:c});break;case"e":var d=this._plotDimensions.width-f.right+this.xoffset;var c=(f.top+(this._plotDimensions.height-f.bottom))/2-this.getHeight()/2;this._elem.css({left:d,top:c});break;case"se":var d=this._plotDimensions.width-f.right+this.xoffset;var c=f.bottom+this.yoffset;this._elem.css({left:d,bottom:c});break;case"s":var d=(f.left+(this._plotDimensions.width-f.right))/2-this.getWidth()/2;var c=this._plotDimensions.height-f.bottom+this.yoffset;this._elem.css({left:d,top:c});break;case"sw":var d=this._plotDimensions.width-e._left+this.xoffset;var c=f.bottom+this.yoffset;this._elem.css({right:d,bottom:c});break;case"w":var d=this._plotDimensions.width-e._left+this.xoffset;var c=(f.top+(this._plotDimensions.height-f.bottom))/2-this.getHeight()/2;this._elem.css({right:d,top:c});break;default:var d=e._right-this.xoffset;var c=e._bottom+this.yoffset;this._elem.css({right:d,bottom:c});break}}}};function a(g,f,d){d=d||{};d.axesDefaults=d.axesDefaults||{};d.legend=d.legend||{};d.seriesDefaults=d.seriesDefaults||{};var c=false;if(d.seriesDefaults.renderer==b.jqplot.MekkoRenderer){c=true}else{if(d.series){for(var e=0;e<d.series.length;e++){if(d.series[e].renderer==b.jqplot.MekkoRenderer){c=true}}}}if(c){d.axesDefaults.renderer=b.jqplot.MekkoAxisRenderer;d.legend.renderer=b.jqplot.MekkoLegendRenderer;d.legend.preDraw=true}}b.jqplot.preInitHooks.push(a)})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.js
new file mode 100644
index 00000000..10a40949
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.js
@@ -0,0 +1,1030 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ /**
+ * Class: $.jqplot.MeterGaugeRenderer
+ * Plugin renderer to draw a meter gauge chart.
+ *
+ * Data consists of a single series with 1 data point to position the gauge needle.
+ *
+ * To use this renderer, you need to include the
+ * meter gauge renderer plugin, for example:
+ *
+ * > <script type="text/javascript" src="plugins/jqplot.meterGaugeRenderer.js"></script>
+ *
+ * Properties described here are passed into the $.jqplot function
+ * as options on the series renderer. For example:
+ *
+ * > plot0 = $.jqplot('chart0',[[18]],{
+ * > title: 'Network Speed',
+ * > seriesDefaults: {
+ * > renderer: $.jqplot.MeterGaugeRenderer,
+ * > rendererOptions: {
+ * > label: 'MB/s'
+ * > }
+ * > }
+ * > });
+ *
+ * A meterGauge plot does not support events.
+ */
+ $.jqplot.MeterGaugeRenderer = function(){
+ $.jqplot.LineRenderer.call(this);
+ };
+
+ $.jqplot.MeterGaugeRenderer.prototype = new $.jqplot.LineRenderer();
+ $.jqplot.MeterGaugeRenderer.prototype.constructor = $.jqplot.MeterGaugeRenderer;
+
+ // called with scope of a series
+ $.jqplot.MeterGaugeRenderer.prototype.init = function(options) {
+ // Group: Properties
+ //
+ // prop: diameter
+ // Outer diameter of the meterGauge, auto computed by default
+ this.diameter = null;
+ // prop: padding
+ // padding between the meterGauge and plot edges, auto
+ // calculated by default.
+ this.padding = null;
+ // prop: shadowOffset
+ // offset of the shadow from the gauge ring and offset of
+ // each succesive stroke of the shadow from the last.
+ this.shadowOffset = 2;
+ // prop: shadowAlpha
+ // transparency of the shadow (0 = transparent, 1 = opaque)
+ this.shadowAlpha = 0.07;
+ // prop: shadowDepth
+ // number of strokes to apply to the shadow,
+ // each stroke offset shadowOffset from the last.
+ this.shadowDepth = 4;
+ // prop: background
+ // background color of the inside of the gauge.
+ this.background = "#efefef";
+ // prop: ringColor
+ // color of the outer ring, hub, and needle of the gauge.
+ this.ringColor = "#BBC6D0";
+ // needle color not implemented yet.
+ this.needleColor = "#C3D3E5";
+ // prop: tickColor
+ // color of the tick marks around the gauge.
+ this.tickColor = "989898";
+ // prop: ringWidth
+ // width of the ring around the gauge. Auto computed by default.
+ this.ringWidth = null;
+ // prop: min
+ // Minimum value on the gauge. Auto computed by default
+ this.min;
+ // prop: max
+ // Maximum value on the gauge. Auto computed by default
+ this.max;
+ // prop: ticks
+ // Array of tick values. Auto computed by default.
+ this.ticks = [];
+ // prop: showTicks
+ // true to show ticks around gauge.
+ this.showTicks = true;
+ // prop: showTickLabels
+ // true to show tick labels next to ticks.
+ this.showTickLabels = true;
+ // prop: label
+ // A gauge label like 'kph' or 'Volts'
+ this.label = null;
+ // prop: labelHeightAdjust
+ // Number of Pixels to offset the label up (-) or down (+) from its default position.
+ this.labelHeightAdjust = 0;
+ // prop: labelPosition
+ // Where to position the label, either 'inside' or 'bottom'.
+ this.labelPosition = 'inside';
+ // prop: intervals
+ // Array of ranges to be drawn around the gauge.
+ // Array of form:
+ // > [value1, value2, ...]
+ // indicating the values for the first, second, ... intervals.
+ this.intervals = [];
+ // prop: intervalColors
+ // Array of colors to use for the intervals.
+ this.intervalColors = [ "#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"];
+ // prop: intervalInnerRadius
+ // Radius of the inner circle of the interval ring.
+ this.intervalInnerRadius = null;
+ // prop: intervalOuterRadius
+ // Radius of the outer circle of the interval ring.
+ this.intervalOuterRadius = null;
+ this.tickRenderer = $.jqplot.MeterGaugeTickRenderer;
+ // ticks spaced every 1, 2, 2.5, 5, 10, 20, .1, .2, .25, .5, etc.
+ this.tickPositions = [1, 2, 2.5, 5, 10];
+ // prop: tickSpacing
+ // Degrees between ticks. This is a target number, if
+ // incompatible span and ticks are supplied, a suitable
+ // spacing close to this value will be computed.
+ this.tickSpacing = 30;
+ this.numberMinorTicks = null;
+ // prop: hubRadius
+ // Radius of the hub at the bottom center of gauge which the needle attaches to.
+ // Auto computed by default
+ this.hubRadius = null;
+ // prop: tickPadding
+ // padding of the tick marks to the outer ring and the tick labels to marks.
+ // Auto computed by default.
+ this.tickPadding = null;
+ // prop: needleThickness
+ // Maximum thickness the needle. Auto computed by default.
+ this.needleThickness = null;
+ // prop: needlePad
+ // Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.
+ this.needlePad = 6;
+ // prop: pegNeedle
+ // True will stop needle just below/above the min/max values if data is below/above min/max,
+ // as if the meter is "pegged".
+ this.pegNeedle = true;
+ this._type = 'meterGauge';
+
+ $.extend(true, this, options);
+ this.type = null;
+ this.numberTicks = null;
+ this.tickInterval = null;
+ // span, the sweep (in degrees) from min to max. This gauge is
+ // a semi-circle.
+ this.span = 180;
+ // get rid of this nonsense
+ // this.innerSpan = this.span;
+ if (this.type == 'circular') {
+ this.semiCircular = false;
+ }
+ else if (this.type != 'circular') {
+ this.semiCircular = true;
+ }
+ else {
+ this.semiCircular = (this.span <= 180) ? true : false;
+ }
+ this._tickPoints = [];
+ // reference to label element.
+ this._labelElem = null;
+
+ // start the gauge at the beginning of the span
+ this.startAngle = (90 + (360 - this.span)/2) * Math.PI/180;
+ this.endAngle = (90 - (360 - this.span)/2) * Math.PI/180;
+
+ this.setmin = !!(this.min == null);
+ this.setmax = !!(this.max == null);
+
+ // if given intervals and is an array of values, create labels and colors.
+ if (this.intervals.length) {
+ if (this.intervals[0].length == null || this.intervals.length == 1) {
+ for (var i=0; i<this.intervals.length; i++) {
+ this.intervals[i] = [this.intervals[i], this.intervals[i], this.intervalColors[i]];
+ }
+ }
+ else if (this.intervals[0].length == 2) {
+ for (i=0; i<this.intervals.length; i++) {
+ this.intervals[i] = [this.intervals[i][0], this.intervals[i][1], this.intervalColors[i]];
+ }
+ }
+ }
+
+ // compute min, max and ticks if not supplied:
+ if (this.ticks.length) {
+ if (this.ticks[0].length == null || this.ticks[0].length == 1) {
+ for (var i=0; i<this.ticks.length; i++) {
+ this.ticks[i] = [this.ticks[i], this.ticks[i]];
+ }
+ }
+ this.min = (this.min == null) ? this.ticks[0][0] : this.min;
+ this.max = (this.max == null) ? this.ticks[this.ticks.length-1][0] : this.max;
+ this.setmin = false;
+ this.setmax = false;
+ this.numberTicks = this.ticks.length;
+ this.tickInterval = this.ticks[1][0] - this.ticks[0][0];
+ this.tickFactor = Math.floor(parseFloat((Math.log(this.tickInterval)/Math.log(10)).toFixed(11)));
+ // use the first interal to calculate minor ticks;
+ this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor);
+ if (!this.numberMinorTicks) {
+ this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor-1);
+ }
+ if (!this.numberMinorTicks) {
+ this.numberMinorTicks = 1;
+ }
+ }
+
+ else if (this.intervals.length) {
+ this.min = (this.min == null) ? 0 : this.min;
+ this.setmin = false;
+ if (this.max == null) {
+ if (this.intervals[this.intervals.length-1][0] >= this.data[0][1]) {
+ this.max = this.intervals[this.intervals.length-1][0];
+ this.setmax = false;
+ }
+ }
+ else {
+ this.setmax = false;
+ }
+ }
+
+ else {
+ // no ticks and no intervals supplied, put needle in middle
+ this.min = (this.min == null) ? 0 : this.min;
+ this.setmin = false;
+ if (this.max == null) {
+ this.max = this.data[0][1] * 1.25;
+ this.setmax = true;
+ }
+ else {
+ this.setmax = false;
+ }
+ }
+ };
+
+ $.jqplot.MeterGaugeRenderer.prototype.setGridData = function(plot) {
+ // set gridData property. This will hold angle in radians of each data point.
+ var stack = [];
+ var td = [];
+ var sa = this.startAngle;
+ for (var i=0; i<this.data.length; i++){
+ stack.push(this.data[i][1]);
+ td.push([this.data[i][0]]);
+ if (i>0) {
+ stack[i] += stack[i-1];
+ }
+ }
+ var fact = Math.PI*2/stack[stack.length - 1];
+
+ for (var i=0; i<stack.length; i++) {
+ td[i][1] = stack[i] * fact;
+ }
+ this.gridData = td;
+ };
+
+ $.jqplot.MeterGaugeRenderer.prototype.makeGridData = function(data, plot) {
+ var stack = [];
+ var td = [];
+ var sa = this.startAngle;
+ for (var i=0; i<data.length; i++){
+ stack.push(data[i][1]);
+ td.push([data[i][0]]);
+ if (i>0) {
+ stack[i] += stack[i-1];
+ }
+ }
+ var fact = Math.PI*2/stack[stack.length - 1];
+
+ for (var i=0; i<stack.length; i++) {
+ td[i][1] = stack[i] * fact;
+ }
+ return td;
+ };
+
+
+ function getnmt(pos, interval, fact) {
+ var temp;
+ for (var i=pos.length-1; i>=0; i--) {
+ temp = interval/(pos[i] * Math.pow(10, fact));
+ if (temp == 4 || temp == 5) {
+ return temp - 1;
+ }
+ }
+ return null;
+ }
+
+ // called with scope of series
+ $.jqplot.MeterGaugeRenderer.prototype.draw = function (ctx, gd, options) {
+ var i;
+ var opts = (options != undefined) ? options : {};
+ // offset and direction of offset due to legend placement
+ var offx = 0;
+ var offy = 0;
+ var trans = 1;
+ if (options.legendInfo && options.legendInfo.placement == 'inside') {
+ var li = options.legendInfo;
+ switch (li.location) {
+ case 'nw':
+ offx = li.width + li.xoffset;
+ break;
+ case 'w':
+ offx = li.width + li.xoffset;
+ break;
+ case 'sw':
+ offx = li.width + li.xoffset;
+ break;
+ case 'ne':
+ offx = li.width + li.xoffset;
+ trans = -1;
+ break;
+ case 'e':
+ offx = li.width + li.xoffset;
+ trans = -1;
+ break;
+ case 'se':
+ offx = li.width + li.xoffset;
+ trans = -1;
+ break;
+ case 'n':
+ offy = li.height + li.yoffset;
+ break;
+ case 's':
+ offy = li.height + li.yoffset;
+ trans = -1;
+ break;
+ default:
+ break;
+ }
+ }
+
+
+
+ // pre-draw so can get it's dimensions.
+ if (this.label) {
+ this._labelElem = $('<div class="jqplot-meterGauge-label" style="position:absolute;">'+this.label+'</div>');
+ this.canvas._elem.after(this._labelElem);
+ }
+
+ var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
+ var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
+ var fill = (opts.fill != undefined) ? opts.fill : this.fill;
+ var cw = ctx.canvas.width;
+ var ch = ctx.canvas.height;
+ if (this.padding == null) {
+ this.padding = Math.round(Math.min(cw, ch)/30);
+ }
+ var w = cw - offx - 2 * this.padding;
+ var h = ch - offy - 2 * this.padding;
+ if (this.labelPosition == 'bottom' && this.label) {
+ h -= this._labelElem.outerHeight(true);
+ }
+ var mindim = Math.min(w,h);
+ var d = mindim;
+
+ if (!this.diameter) {
+ if (this.semiCircular) {
+ if ( w >= 2*h) {
+ if (!this.ringWidth) {
+ this.ringWidth = 2*h/35;
+ }
+ this.needleThickness = this.needleThickness || 2+Math.pow(this.ringWidth, 0.8);
+ this.innerPad = this.ringWidth/2 + this.needleThickness/2 + this.needlePad;
+ this.diameter = 2 * (h - 2*this.innerPad);
+ }
+ else {
+ if (!this.ringWidth) {
+ this.ringWidth = w/35;
+ }
+ this.needleThickness = this.needleThickness || 2+Math.pow(this.ringWidth, 0.8);
+ this.innerPad = this.ringWidth/2 + this.needleThickness/2 + this.needlePad;
+ this.diameter = w - 2*this.innerPad - this.ringWidth - this.padding;
+ }
+ // center taking into account legend and over draw for gauge bottom below hub.
+ // this will be center of hub.
+ this._center = [(cw - trans * offx)/2 + trans * offx, (ch + trans*offy - this.padding - this.ringWidth - this.innerPad)];
+ }
+ else {
+ if (!this.ringWidth) {
+ this.ringWidth = d/35;
+ }
+ this.needleThickness = this.needleThickness || 2+Math.pow(this.ringWidth, 0.8);
+ this.innerPad = 0;
+ this.diameter = d - this.ringWidth;
+ // center in middle of canvas taking into account legend.
+ // will be center of hub.
+ this._center = [(cw-trans*offx)/2 + trans * offx, (ch-trans*offy)/2 + trans * offy];
+ }
+ }
+
+
+ if (this._labelElem && this.labelPosition == 'bottom') {
+ this._center[1] -= this._labelElem.outerHeight(true);
+ }
+
+ this._radius = this.diameter/2;
+
+ this.tickSpacing = 6000/this.diameter;
+
+ if (!this.hubRadius) {
+ this.hubRadius = this.diameter/18;
+ }
+
+ this.shadowOffset = 0.5 + this.ringWidth/9;
+ this.shadowWidth = this.ringWidth*1;
+
+ this.tickPadding = 3 + Math.pow(this.diameter/20, 0.7);
+ this.tickOuterRadius = this._radius - this.ringWidth/2 - this.tickPadding;
+ this.tickLength = (this.showTicks) ? this._radius/13 : 0;
+
+ if (this.ticks.length == 0) {
+ // no ticks, lets make some.
+ var max = this.max,
+ min = this.min,
+ setmax = this.setmax,
+ setmin = this.setmin,
+ ti = (max - min) * this.tickSpacing / this.span;
+ var tf = Math.floor(parseFloat((Math.log(ti)/Math.log(10)).toFixed(11)));
+ var tp = (ti/Math.pow(10, tf));
+ (tp > 2 && tp <= 2.5) ? tp = 2.5 : tp = Math.ceil(tp);
+ var t = this.tickPositions;
+ var tpindex, nt;
+
+ for (i=0; i<t.length; i++) {
+ if (tp == t[i] || i && t[i-1] < tp && tp < t[i]) {
+ ti = t[i]*Math.pow(10, tf);
+ tpindex = i;
+ }
+ }
+
+ for (i=0; i<t.length; i++) {
+ if (tp == t[i] || i && t[i-1] < tp && tp < t[i]) {
+ ti = t[i]*Math.pow(10, tf);
+ nt = Math.ceil((max - min) / ti);
+ }
+ }
+
+ // both max and min are free
+ if (setmax && setmin) {
+ var tmin = (min > 0) ? min - min % ti : min - min % ti - ti;
+ if (!this.forceZero) {
+ var diff = Math.min(min - tmin, 0.8*ti);
+ var ntp = Math.floor(diff/t[tpindex]);
+ if (ntp > 1) {
+ tmin = tmin + t[tpindex] * (ntp-1);
+ if (parseInt(tmin, 10) != tmin && parseInt(tmin-t[tpindex], 10) == tmin-t[tpindex]) {
+ tmin = tmin - t[tpindex];
+ }
+ }
+ }
+ if (min == tmin) {
+ min -= ti;
+ }
+ else {
+ // tmin should always be lower than dataMin
+ if (min - tmin > 0.23*ti) {
+ min = tmin;
+ }
+ else {
+ min = tmin -ti;
+ nt += 1;
+ }
+ }
+ nt += 1;
+ var tmax = min + (nt - 1) * ti;
+ if (max >= tmax) {
+ tmax += ti;
+ nt += 1;
+ }
+ // now tmax should always be mroe than dataMax
+ if (tmax - max < 0.23*ti) {
+ tmax += ti;
+ nt += 1;
+ }
+ this.max = max = tmax;
+ this.min = min;
+
+ this.tickInterval = ti;
+ this.numberTicks = nt;
+ var it;
+ for (i=0; i<nt; i++) {
+ it = parseFloat((min+i*ti).toFixed(11));
+ this.ticks.push([it, it]);
+ }
+ this.max = this.ticks[nt-1][1];
+
+ this.tickFactor = tf;
+ // determine number of minor ticks
+
+ this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor);
+
+ if (!this.numberMinorTicks) {
+ this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor-1);
+ }
+ }
+ // max is free, min is fixed
+ else if (setmax) {
+ var tmax = min + (nt - 1) * ti;
+ if (max >= tmax) {
+ max = tmax + ti;
+ nt += 1;
+ }
+ else {
+ max = tmax;
+ }
+
+ this.tickInterval = this.tickInterval || ti;
+ this.numberTicks = this.numberTicks || nt;
+ var it;
+ for (i=0; i<this.numberTicks; i++) {
+ it = parseFloat((min+i*this.tickInterval).toFixed(11));
+ this.ticks.push([it, it]);
+ }
+ this.max = this.ticks[this.numberTicks-1][1];
+
+ this.tickFactor = tf;
+ // determine number of minor ticks
+ this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor);
+
+ if (!this.numberMinorTicks) {
+ this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor-1);
+ }
+ }
+
+ // not setting max or min
+ if (!setmax && !setmin) {
+ var range = this.max - this.min;
+ tf = Math.floor(parseFloat((Math.log(range)/Math.log(10)).toFixed(11))) - 1;
+ var nticks = [5,6,4,7,3,8,9,10,2], res, numticks, nonSigDigits=0, sigRange;
+ // check to see how many zeros are at the end of the range
+ if (range > 1) {
+ var rstr = String(range);
+ if (rstr.search(/\./) == -1) {
+ var pos = rstr.search(/0+$/);
+ nonSigDigits = (pos > 0) ? rstr.length - pos - 1 : 0;
+ }
+ }
+ sigRange = range/Math.pow(10, nonSigDigits);
+ for (i=0; i<nticks.length; i++) {
+ res = sigRange/(nticks[i]-1);
+ if (res == parseInt(res, 10)) {
+ this.numberTicks = nticks[i];
+ this.tickInterval = range/(this.numberTicks-1);
+ this.tickFactor = tf+1;
+ break;
+ }
+ }
+ var it;
+ for (i=0; i<this.numberTicks; i++) {
+ it = parseFloat((this.min+i*this.tickInterval).toFixed(11));
+ this.ticks.push([it, it]);
+ }
+ // determine number of minor ticks
+ this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor);
+
+ if (!this.numberMinorTicks) {
+ this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor-1);
+ }
+
+ if (!this.numberMinorTicks) {
+ this.numberMinorTicks = 1;
+ var nums = [4, 5, 3, 6, 2];
+ for (i=0; i<5; i++) {
+ var temp = this.tickInterval/nums[i];
+ if (temp == parseInt(temp, 10)) {
+ this.numberMinorTicks = nums[i]-1;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+
+ var r = this._radius,
+ sa = this.startAngle,
+ ea = this.endAngle,
+ pi = Math.PI,
+ hpi = Math.PI/2;
+
+ if (this.semiCircular) {
+ var overAngle = Math.atan(this.innerPad/r),
+ outersa = this.outerStartAngle = sa - overAngle,
+ outerea = this.outerEndAngle = ea + overAngle,
+ hubsa = this.hubStartAngle = sa - Math.atan(this.innerPad/this.hubRadius*2),
+ hubea = this.hubEndAngle = ea + Math.atan(this.innerPad/this.hubRadius*2);
+
+ ctx.save();
+
+ ctx.translate(this._center[0], this._center[1]);
+ ctx.lineJoin = "round";
+ ctx.lineCap = "round";
+
+ // draw the innerbackground
+ ctx.save();
+ ctx.beginPath();
+ ctx.fillStyle = this.background;
+ ctx.arc(0, 0, r, outersa, outerea, false);
+ ctx.closePath();
+ ctx.fill();
+ ctx.restore();
+
+ // draw the shadow
+ // the outer ring.
+ var shadowColor = 'rgba(0,0,0,'+this.shadowAlpha+')';
+ ctx.save();
+ for (var i=0; i<this.shadowDepth; i++) {
+ ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));
+ ctx.beginPath();
+ ctx.strokeStyle = shadowColor;
+ ctx.lineWidth = this.shadowWidth;
+ ctx.arc(0 ,0, r, outersa, outerea, false);
+ ctx.closePath();
+ ctx.stroke();
+ }
+ ctx.restore();
+
+ // the inner hub.
+ ctx.save();
+ var tempd = parseInt((this.shadowDepth+1)/2, 10);
+ for (var i=0; i<tempd; i++) {
+ ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));
+ ctx.beginPath();
+ ctx.fillStyle = shadowColor;
+ ctx.arc(0 ,0, this.hubRadius, hubsa, hubea, false);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.restore();
+
+ // draw the outer ring.
+ ctx.save();
+ ctx.beginPath();
+ ctx.strokeStyle = this.ringColor;
+ ctx.lineWidth = this.ringWidth;
+ ctx.arc(0 ,0, r, outersa, outerea, false);
+ ctx.closePath();
+ ctx.stroke();
+ ctx.restore();
+
+ // draw the hub
+
+ ctx.save();
+ ctx.beginPath();
+ ctx.fillStyle = this.ringColor;
+ ctx.arc(0 ,0, this.hubRadius,hubsa, hubea, false);
+ ctx.closePath();
+ ctx.fill();
+ ctx.restore();
+
+ // draw the ticks
+ if (this.showTicks) {
+ ctx.save();
+ var orad = this.tickOuterRadius,
+ tl = this.tickLength,
+ mtl = tl/2,
+ nmt = this.numberMinorTicks,
+ ts = this.span * Math.PI / 180 / (this.ticks.length-1),
+ mts = ts/(nmt + 1);
+
+ for (i = 0; i<this.ticks.length; i++) {
+ ctx.beginPath();
+ ctx.lineWidth = 1.5 + this.diameter/360;
+ ctx.strokeStyle = this.ringColor;
+ var wps = ts*i+sa;
+ ctx.moveTo(-orad * Math.cos(ts*i+sa), orad * Math.sin(ts*i+sa));
+ ctx.lineTo(-(orad-tl) * Math.cos(ts*i+sa), (orad - tl) * Math.sin(ts*i+sa));
+ this._tickPoints.push([(orad-tl) * Math.cos(ts*i+sa) + this._center[0] + this.canvas._offsets.left, (orad - tl) * Math.sin(ts*i+sa) + this._center[1] + this.canvas._offsets.top, ts*i+sa]);
+ ctx.stroke();
+ ctx.lineWidth = 1.0 + this.diameter/440;
+ if (i<this.ticks.length-1) {
+ for (var j=1; j<=nmt; j++) {
+ ctx.beginPath();
+ ctx.moveTo(-orad * Math.cos(ts*i+mts*j+sa), orad * Math.sin(ts*i+mts*j+sa));
+ ctx.lineTo(-(orad-mtl) * Math.cos(ts*i+mts*j+sa), (orad-mtl) * Math.sin(ts*i+mts*j+sa));
+ ctx.stroke();
+ }
+ }
+ }
+ ctx.restore();
+ }
+
+ // draw the tick labels
+ if (this.showTickLabels) {
+ var elem, l, t, ew, eh, dim, maxdim=0;
+ var tp = this.tickPadding * (1 - 1/(this.diameter/80+1));
+ for (i=0; i<this.ticks.length; i++) {
+ elem = $('<div class="jqplot-meterGauge-tick" style="position:absolute;">'+this.ticks[i][1]+'</div>');
+ this.canvas._elem.after(elem);
+ ew = elem.outerWidth(true);
+ eh = elem.outerHeight(true);
+ l = this._tickPoints[i][0] - ew * (this._tickPoints[i][2]-Math.PI)/Math.PI - tp * Math.cos(this._tickPoints[i][2]);
+ t = this._tickPoints[i][1] - eh/2 + eh/2 * Math.pow(Math.abs((Math.sin(this._tickPoints[i][2]))), 0.5) + tp/3 * Math.pow(Math.abs((Math.sin(this._tickPoints[i][2]))), 0.5) ;
+ // t = this._tickPoints[i][1] - eh/2 - eh/2 * Math.sin(this._tickPoints[i][2]) - tp/2 * Math.sin(this._tickPoints[i][2]);
+ elem.css({left:l, top:t});
+ dim = ew*Math.cos(this._tickPoints[i][2]) + eh*Math.sin(Math.PI/2+this._tickPoints[i][2]/2);
+ maxdim = (dim > maxdim) ? dim : maxdim;
+ }
+ }
+
+ // draw the gauge label
+ if (this.label && this.labelPosition == 'inside') {
+ var l = this._center[0] + this.canvas._offsets.left;
+ var tp = this.tickPadding * (1 - 1/(this.diameter/80+1));
+ var t = 0.5*(this._center[1] + this.canvas._offsets.top - this.hubRadius) + 0.5*(this._center[1] + this.canvas._offsets.top - this.tickOuterRadius + this.tickLength + tp) + this.labelHeightAdjust;
+ // this._labelElem = $('<div class="jqplot-meterGauge-label" style="position:absolute;">'+this.label+'</div>');
+ // this.canvas._elem.after(this._labelElem);
+ l -= this._labelElem.outerWidth(true)/2;
+ t -= this._labelElem.outerHeight(true)/2;
+ this._labelElem.css({left:l, top:t});
+ }
+
+ else if (this.label && this.labelPosition == 'bottom') {
+ var l = this._center[0] + this.canvas._offsets.left - this._labelElem.outerWidth(true)/2;
+ var t = this._center[1] + this.canvas._offsets.top + this.innerPad + + this.ringWidth + this.padding + this.labelHeightAdjust;
+ this._labelElem.css({left:l, top:t});
+
+ }
+
+ // draw the intervals
+
+ ctx.save();
+ var inner = this.intervalInnerRadius || this.hubRadius * 1.5;
+ if (this.intervalOuterRadius == null) {
+ if (this.showTickLabels) {
+ var outer = (this.tickOuterRadius - this.tickLength - this.tickPadding - this.diameter/8);
+ }
+ else {
+ var outer = (this.tickOuterRadius - this.tickLength - this.diameter/16);
+ }
+ }
+ else {
+ var outer = this.intervalOuterRadius;
+ }
+ var range = this.max - this.min;
+ var intrange = this.intervals[this.intervals.length-1] - this.min;
+ var start, end, span = this.span*Math.PI/180;
+ for (i=0; i<this.intervals.length; i++) {
+ start = (i == 0) ? sa : sa + (this.intervals[i-1][0] - this.min)*span/range;
+ if (start < 0) {
+ start = 0;
+ }
+ end = sa + (this.intervals[i][0] - this.min)*span/range;
+ if (end < 0) {
+ end = 0;
+ }
+ ctx.beginPath();
+ ctx.fillStyle = this.intervals[i][2];
+ ctx.arc(0, 0, inner, start, end, false);
+ ctx.lineTo(outer*Math.cos(end), outer*Math.sin(end));
+ ctx.arc(0, 0, outer, end, start, true);
+ ctx.lineTo(inner*Math.cos(start), inner*Math.sin(start));
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.restore();
+
+ // draw the needle
+ var datapoint = this.data[0][1];
+ var dataspan = this.max - this.min;
+ if (this.pegNeedle) {
+ if (this.data[0][1] > this.max + dataspan*3/this.span) {
+ datapoint = this.max + dataspan*3/this.span;
+ }
+ if (this.data[0][1] < this.min - dataspan*3/this.span) {
+ datapoint = this.min - dataspan*3/this.span;
+ }
+ }
+ var dataang = (datapoint - this.min)/dataspan * this.span * Math.PI/180 + this.startAngle;
+
+
+ ctx.save();
+ ctx.beginPath();
+ ctx.fillStyle = this.ringColor;
+ ctx.strokeStyle = this.ringColor;
+ this.needleLength = (this.tickOuterRadius - this.tickLength) * 0.85;
+ this.needleThickness = (this.needleThickness < 2) ? 2 : this.needleThickness;
+ var endwidth = this.needleThickness * 0.4;
+
+
+ var dl = this.needleLength/10;
+ var dt = (this.needleThickness - endwidth)/10;
+ var templ;
+ for (var i=0; i<10; i++) {
+ templ = this.needleThickness - i*dt;
+ ctx.moveTo(dl*i*Math.cos(dataang), dl*i*Math.sin(dataang));
+ ctx.lineWidth = templ;
+ ctx.lineTo(dl*(i+1)*Math.cos(dataang), dl*(i+1)*Math.sin(dataang));
+ ctx.stroke();
+ }
+
+ ctx.restore();
+ }
+ else {
+ this._center = [(cw - trans * offx)/2 + trans * offx, (ch - trans*offy)/2 + trans * offy];
+ }
+ };
+
+ $.jqplot.MeterGaugeAxisRenderer = function() {
+ $.jqplot.LinearAxisRenderer.call(this);
+ };
+
+ $.jqplot.MeterGaugeAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
+ $.jqplot.MeterGaugeAxisRenderer.prototype.constructor = $.jqplot.MeterGaugeAxisRenderer;
+
+
+ // There are no traditional axes on a gauge chart. We just need to provide
+ // dummy objects with properties so the plot will render.
+ // called with scope of axis object.
+ $.jqplot.MeterGaugeAxisRenderer.prototype.init = function(options){
+ //
+ this.tickRenderer = $.jqplot.MeterGaugeTickRenderer;
+ $.extend(true, this, options);
+ // I don't think I'm going to need _dataBounds here.
+ // have to go Axis scaling in a way to fit chart onto plot area
+ // and provide u2p and p2u functionality for mouse cursor, etc.
+ // for convienence set _dataBounds to 0 and 100 and
+ // set min/max to 0 and 100.
+ this._dataBounds = {min:0, max:100};
+ this.min = 0;
+ this.max = 100;
+ this.showTicks = false;
+ this.ticks = [];
+ this.showMark = false;
+ this.show = false;
+ };
+
+ $.jqplot.MeterGaugeLegendRenderer = function(){
+ $.jqplot.TableLegendRenderer.call(this);
+ };
+
+ $.jqplot.MeterGaugeLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
+ $.jqplot.MeterGaugeLegendRenderer.prototype.constructor = $.jqplot.MeterGaugeLegendRenderer;
+
+ /**
+ * Class: $.jqplot.MeterGaugeLegendRenderer
+ *Meter gauges don't typically have a legend, this overrides the default legend renderer.
+ */
+ $.jqplot.MeterGaugeLegendRenderer.prototype.init = function(options) {
+ // Maximum number of rows in the legend. 0 or null for unlimited.
+ this.numberRows = null;
+ // Maximum number of columns in the legend. 0 or null for unlimited.
+ this.numberColumns = null;
+ $.extend(true, this, options);
+ };
+
+ // called with context of legend
+ $.jqplot.MeterGaugeLegendRenderer.prototype.draw = function() {
+ if (this.show) {
+ var series = this._series;
+ var ss = 'position:absolute;';
+ ss += (this.background) ? 'background:'+this.background+';' : '';
+ ss += (this.border) ? 'border:'+this.border+';' : '';
+ ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
+ ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : '';
+ ss += (this.textColor) ? 'color:'+this.textColor+';' : '';
+ ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : '';
+ ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : '';
+ ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : '';
+ ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : '';
+ this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>');
+ // MeterGauge charts legends don't go by number of series, but by number of data points
+ // in the series. Refactor things here for that.
+
+ var pad = false,
+ reverse = false,
+ nr, nc;
+ var s = series[0];
+
+ if (s.show) {
+ var pd = s.data;
+ if (this.numberRows) {
+ nr = this.numberRows;
+ if (!this.numberColumns){
+ nc = Math.ceil(pd.length/nr);
+ }
+ else{
+ nc = this.numberColumns;
+ }
+ }
+ else if (this.numberColumns) {
+ nc = this.numberColumns;
+ nr = Math.ceil(pd.length/this.numberColumns);
+ }
+ else {
+ nr = pd.length;
+ nc = 1;
+ }
+
+ var i, j, tr, td1, td2, lt, rs, color;
+ var idx = 0;
+
+ for (i=0; i<nr; i++) {
+ if (reverse){
+ tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem);
+ }
+ else{
+ tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);
+ }
+ for (j=0; j<nc; j++) {
+ if (idx < pd.length){
+ // debugger
+ lt = this.labels[idx] || pd[idx][0].toString();
+ color = s.color;
+ if (!reverse){
+ if (i>0){
+ pad = true;
+ }
+ else{
+ pad = false;
+ }
+ }
+ else{
+ if (i == nr -1){
+ pad = false;
+ }
+ else{
+ pad = true;
+ }
+ }
+ rs = (pad) ? this.rowSpacing : '0';
+
+ td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
+ '<div><div class="jqplot-table-legend-swatch" style="border-color:'+color+';"></div>'+
+ '</div></td>');
+ td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
+ if (this.escapeHtml){
+ td2.text(lt);
+ }
+ else {
+ td2.html(lt);
+ }
+ if (reverse) {
+ td2.prependTo(tr);
+ td1.prependTo(tr);
+ }
+ else {
+ td1.appendTo(tr);
+ td2.appendTo(tr);
+ }
+ pad = true;
+ }
+ idx++;
+ }
+ }
+ }
+ }
+ return this._elem;
+ };
+
+
+ // setup default renderers for axes and legend so user doesn't have to
+ // called with scope of plot
+ function preInit(target, data, options) {
+ // debugger
+ options = options || {};
+ options.axesDefaults = options.axesDefaults || {};
+ options.legend = options.legend || {};
+ options.seriesDefaults = options.seriesDefaults || {};
+ options.grid = options.grid || {};
+
+ // only set these if there is a gauge series
+ var setopts = false;
+ if (options.seriesDefaults.renderer == $.jqplot.MeterGaugeRenderer) {
+ setopts = true;
+ }
+ else if (options.series) {
+ for (var i=0; i < options.series.length; i++) {
+ if (options.series[i].renderer == $.jqplot.MeterGaugeRenderer) {
+ setopts = true;
+ }
+ }
+ }
+
+ if (setopts) {
+ options.axesDefaults.renderer = $.jqplot.MeterGaugeAxisRenderer;
+ options.legend.renderer = $.jqplot.MeterGaugeLegendRenderer;
+ options.legend.preDraw = true;
+ options.grid.background = options.grid.background || 'white';
+ options.grid.drawGridlines = false;
+ options.grid.borderWidth = (options.grid.borderWidth != null) ? options.grid.borderWidth : 0;
+ options.grid.shadow = (options.grid.shadow != null) ? options.grid.shadow : false;
+ }
+ }
+
+ // called with scope of plot
+ function postParseOptions(options) {
+ //
+ }
+
+ $.jqplot.preInitHooks.push(preInit);
+ $.jqplot.postParseOptionsHooks.push(postParseOptions);
+
+ $.jqplot.MeterGaugeTickRenderer = function() {
+ $.jqplot.AxisTickRenderer.call(this);
+ };
+
+ $.jqplot.MeterGaugeTickRenderer.prototype = new $.jqplot.AxisTickRenderer();
+ $.jqplot.MeterGaugeTickRenderer.prototype.constructor = $.jqplot.MeterGaugeTickRenderer;
+
+})(jQuery);
+
+ \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.min.js
new file mode 100644
index 00000000..2b845054
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(c){c.jqplot.MeterGaugeRenderer=function(){c.jqplot.LineRenderer.call(this)};c.jqplot.MeterGaugeRenderer.prototype=new c.jqplot.LineRenderer();c.jqplot.MeterGaugeRenderer.prototype.constructor=c.jqplot.MeterGaugeRenderer;c.jqplot.MeterGaugeRenderer.prototype.init=function(e){this.diameter=null;this.padding=null;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=4;this.background="#efefef";this.ringColor="#BBC6D0";this.needleColor="#C3D3E5";this.tickColor="989898";this.ringWidth=null;this.min;this.max;this.ticks=[];this.showTicks=true;this.showTickLabels=true;this.label=null;this.labelHeightAdjust=0;this.labelPosition="inside";this.intervals=[];this.intervalColors=["#4bb2c5","#EAA228","#c5b47f","#579575","#839557","#958c12","#953579","#4b5de4","#d8b83f","#ff5800","#0085cc","#c747a3","#cddf54","#FBD178","#26B4E3","#bd70c7"];this.intervalInnerRadius=null;this.intervalOuterRadius=null;this.tickRenderer=c.jqplot.MeterGaugeTickRenderer;this.tickPositions=[1,2,2.5,5,10];this.tickSpacing=30;this.numberMinorTicks=null;this.hubRadius=null;this.tickPadding=null;this.needleThickness=null;this.needlePad=6;this.pegNeedle=true;this._type="meterGauge";c.extend(true,this,e);this.type=null;this.numberTicks=null;this.tickInterval=null;this.span=180;if(this.type=="circular"){this.semiCircular=false}else{if(this.type!="circular"){this.semiCircular=true}else{this.semiCircular=(this.span<=180)?true:false}}this._tickPoints=[];this._labelElem=null;this.startAngle=(90+(360-this.span)/2)*Math.PI/180;this.endAngle=(90-(360-this.span)/2)*Math.PI/180;this.setmin=!!(this.min==null);this.setmax=!!(this.max==null);if(this.intervals.length){if(this.intervals[0].length==null||this.intervals.length==1){for(var f=0;f<this.intervals.length;f++){this.intervals[f]=[this.intervals[f],this.intervals[f],this.intervalColors[f]]}}else{if(this.intervals[0].length==2){for(f=0;f<this.intervals.length;f++){this.intervals[f]=[this.intervals[f][0],this.intervals[f][1],this.intervalColors[f]]}}}}if(this.ticks.length){if(this.ticks[0].length==null||this.ticks[0].length==1){for(var f=0;f<this.ticks.length;f++){this.ticks[f]=[this.ticks[f],this.ticks[f]]}}this.min=(this.min==null)?this.ticks[0][0]:this.min;this.max=(this.max==null)?this.ticks[this.ticks.length-1][0]:this.max;this.setmin=false;this.setmax=false;this.numberTicks=this.ticks.length;this.tickInterval=this.ticks[1][0]-this.ticks[0][0];this.tickFactor=Math.floor(parseFloat((Math.log(this.tickInterval)/Math.log(10)).toFixed(11)));this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor);if(!this.numberMinorTicks){this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor-1)}if(!this.numberMinorTicks){this.numberMinorTicks=1}}else{if(this.intervals.length){this.min=(this.min==null)?0:this.min;this.setmin=false;if(this.max==null){if(this.intervals[this.intervals.length-1][0]>=this.data[0][1]){this.max=this.intervals[this.intervals.length-1][0];this.setmax=false}}else{this.setmax=false}}else{this.min=(this.min==null)?0:this.min;this.setmin=false;if(this.max==null){this.max=this.data[0][1]*1.25;this.setmax=true}else{this.setmax=false}}}};c.jqplot.MeterGaugeRenderer.prototype.setGridData=function(j){var f=[];var k=[];var e=this.startAngle;for(var h=0;h<this.data.length;h++){f.push(this.data[h][1]);k.push([this.data[h][0]]);if(h>0){f[h]+=f[h-1]}}var g=Math.PI*2/f[f.length-1];for(var h=0;h<f.length;h++){k[h][1]=f[h]*g}this.gridData=k};c.jqplot.MeterGaugeRenderer.prototype.makeGridData=function(j,k){var f=[];var l=[];var e=this.startAngle;for(var h=0;h<j.length;h++){f.push(j[h][1]);l.push([j[h][0]]);if(h>0){f[h]+=f[h-1]}}var g=Math.PI*2/f[f.length-1];for(var h=0;h<f.length;h++){l[h][1]=f[h]*g}return l};function b(j,f,g){var e;for(var h=j.length-1;h>=0;h--){e=f/(j[h]*Math.pow(10,g));if(e==4||e==5){return e-1}}return null}c.jqplot.MeterGaugeRenderer.prototype.draw=function(X,aC,ap){var aa;var aM=(ap!=undefined)?ap:{};var ai=0;var ah=0;var at=1;if(ap.legendInfo&&ap.legendInfo.placement=="inside"){var aI=ap.legendInfo;switch(aI.location){case"nw":ai=aI.width+aI.xoffset;break;case"w":ai=aI.width+aI.xoffset;break;case"sw":ai=aI.width+aI.xoffset;break;case"ne":ai=aI.width+aI.xoffset;at=-1;break;case"e":ai=aI.width+aI.xoffset;at=-1;break;case"se":ai=aI.width+aI.xoffset;at=-1;break;case"n":ah=aI.height+aI.yoffset;break;case"s":ah=aI.height+aI.yoffset;at=-1;break;default:break}}if(this.label){this._labelElem=c('<div class="jqplot-meterGauge-label" style="position:absolute;">'+this.label+"</div>");this.canvas._elem.after(this._labelElem)}var m=(aM.shadow!=undefined)?aM.shadow:this.shadow;var N=(aM.showLine!=undefined)?aM.showLine:this.showLine;var I=(aM.fill!=undefined)?aM.fill:this.fill;var K=X.canvas.width;var S=X.canvas.height;if(this.padding==null){this.padding=Math.round(Math.min(K,S)/30)}var Q=K-ai-2*this.padding;var ab=S-ah-2*this.padding;if(this.labelPosition=="bottom"&&this.label){ab-=this._labelElem.outerHeight(true)}var L=Math.min(Q,ab);var ad=L;if(!this.diameter){if(this.semiCircular){if(Q>=2*ab){if(!this.ringWidth){this.ringWidth=2*ab/35}this.needleThickness=this.needleThickness||2+Math.pow(this.ringWidth,0.8);this.innerPad=this.ringWidth/2+this.needleThickness/2+this.needlePad;this.diameter=2*(ab-2*this.innerPad)}else{if(!this.ringWidth){this.ringWidth=Q/35}this.needleThickness=this.needleThickness||2+Math.pow(this.ringWidth,0.8);this.innerPad=this.ringWidth/2+this.needleThickness/2+this.needlePad;this.diameter=Q-2*this.innerPad-this.ringWidth-this.padding}this._center=[(K-at*ai)/2+at*ai,(S+at*ah-this.padding-this.ringWidth-this.innerPad)]}else{if(!this.ringWidth){this.ringWidth=ad/35}this.needleThickness=this.needleThickness||2+Math.pow(this.ringWidth,0.8);this.innerPad=0;this.diameter=ad-this.ringWidth;this._center=[(K-at*ai)/2+at*ai,(S-at*ah)/2+at*ah]}}if(this._labelElem&&this.labelPosition=="bottom"){this._center[1]-=this._labelElem.outerHeight(true)}this._radius=this.diameter/2;this.tickSpacing=6000/this.diameter;if(!this.hubRadius){this.hubRadius=this.diameter/18}this.shadowOffset=0.5+this.ringWidth/9;this.shadowWidth=this.ringWidth*1;this.tickPadding=3+Math.pow(this.diameter/20,0.7);this.tickOuterRadius=this._radius-this.ringWidth/2-this.tickPadding;this.tickLength=(this.showTicks)?this._radius/13:0;if(this.ticks.length==0){var A=this.max,aL=this.min,q=this.setmax,aG=this.setmin,au=(A-aL)*this.tickSpacing/this.span;var aw=Math.floor(parseFloat((Math.log(au)/Math.log(10)).toFixed(11)));var an=(au/Math.pow(10,aw));(an>2&&an<=2.5)?an=2.5:an=Math.ceil(an);var T=this.tickPositions;var aA,ak;for(aa=0;aa<T.length;aa++){if(an==T[aa]||aa&&T[aa-1]<an&&an<T[aa]){au=T[aa]*Math.pow(10,aw);aA=aa}}for(aa=0;aa<T.length;aa++){if(an==T[aa]||aa&&T[aa-1]<an&&an<T[aa]){au=T[aa]*Math.pow(10,aw);ak=Math.ceil((A-aL)/au)}}if(q&&aG){var aP=(aL>0)?aL-aL%au:aL-aL%au-au;if(!this.forceZero){var D=Math.min(aL-aP,0.8*au);var o=Math.floor(D/T[aA]);if(o>1){aP=aP+T[aA]*(o-1);if(parseInt(aP,10)!=aP&&parseInt(aP-T[aA],10)==aP-T[aA]){aP=aP-T[aA]}}}if(aL==aP){aL-=au}else{if(aL-aP>0.23*au){aL=aP}else{aL=aP-au;ak+=1}}ak+=1;var E=aL+(ak-1)*au;if(A>=E){E+=au;ak+=1}if(E-A<0.23*au){E+=au;ak+=1}this.max=A=E;this.min=aL;this.tickInterval=au;this.numberTicks=ak;var O;for(aa=0;aa<ak;aa++){O=parseFloat((aL+aa*au).toFixed(11));this.ticks.push([O,O])}this.max=this.ticks[ak-1][1];this.tickFactor=aw;this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor);if(!this.numberMinorTicks){this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor-1)}}else{if(q){var E=aL+(ak-1)*au;if(A>=E){A=E+au;ak+=1}else{A=E}this.tickInterval=this.tickInterval||au;this.numberTicks=this.numberTicks||ak;var O;for(aa=0;aa<this.numberTicks;aa++){O=parseFloat((aL+aa*this.tickInterval).toFixed(11));this.ticks.push([O,O])}this.max=this.ticks[this.numberTicks-1][1];this.tickFactor=aw;this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor);if(!this.numberMinorTicks){this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor-1)}}}if(!q&&!aG){var P=this.max-this.min;aw=Math.floor(parseFloat((Math.log(P)/Math.log(10)).toFixed(11)))-1;var aN=[5,6,4,7,3,8,9,10,2],V,C,av=0,M;if(P>1){var aJ=String(P);if(aJ.search(/\./)==-1){var aF=aJ.search(/0+$/);av=(aF>0)?aJ.length-aF-1:0}}M=P/Math.pow(10,av);for(aa=0;aa<aN.length;aa++){V=M/(aN[aa]-1);if(V==parseInt(V,10)){this.numberTicks=aN[aa];this.tickInterval=P/(this.numberTicks-1);this.tickFactor=aw+1;break}}var O;for(aa=0;aa<this.numberTicks;aa++){O=parseFloat((this.min+aa*this.tickInterval).toFixed(11));this.ticks.push([O,O])}this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor);if(!this.numberMinorTicks){this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor-1)}if(!this.numberMinorTicks){this.numberMinorTicks=1;var aH=[4,5,3,6,2];for(aa=0;aa<5;aa++){var ao=this.tickInterval/aH[aa];if(ao==parseInt(ao,10)){this.numberMinorTicks=aH[aa]-1;break}}}}}var U=this._radius,aE=this.startAngle,k=this.endAngle,H=Math.PI,e=Math.PI/2;if(this.semiCircular){var z=Math.atan(this.innerPad/U),ac=this.outerStartAngle=aE-z,aB=this.outerEndAngle=k+z,B=this.hubStartAngle=aE-Math.atan(this.innerPad/this.hubRadius*2),af=this.hubEndAngle=k+Math.atan(this.innerPad/this.hubRadius*2);X.save();X.translate(this._center[0],this._center[1]);X.lineJoin="round";X.lineCap="round";X.save();X.beginPath();X.fillStyle=this.background;X.arc(0,0,U,ac,aB,false);X.closePath();X.fill();X.restore();var aj="rgba(0,0,0,"+this.shadowAlpha+")";X.save();for(var aa=0;aa<this.shadowDepth;aa++){X.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));X.beginPath();X.strokeStyle=aj;X.lineWidth=this.shadowWidth;X.arc(0,0,U,ac,aB,false);X.closePath();X.stroke()}X.restore();X.save();var az=parseInt((this.shadowDepth+1)/2,10);for(var aa=0;aa<az;aa++){X.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));X.beginPath();X.fillStyle=aj;X.arc(0,0,this.hubRadius,B,af,false);X.closePath();X.fill()}X.restore();X.save();X.beginPath();X.strokeStyle=this.ringColor;X.lineWidth=this.ringWidth;X.arc(0,0,U,ac,aB,false);X.closePath();X.stroke();X.restore();X.save();X.beginPath();X.fillStyle=this.ringColor;X.arc(0,0,this.hubRadius,B,af,false);X.closePath();X.fill();X.restore();if(this.showTicks){X.save();var f=this.tickOuterRadius,aq=this.tickLength,v=aq/2,F=this.numberMinorTicks,am=this.span*Math.PI/180/(this.ticks.length-1),p=am/(F+1);for(aa=0;aa<this.ticks.length;aa++){X.beginPath();X.lineWidth=1.5+this.diameter/360;X.strokeStyle=this.ringColor;var ae=am*aa+aE;X.moveTo(-f*Math.cos(am*aa+aE),f*Math.sin(am*aa+aE));X.lineTo(-(f-aq)*Math.cos(am*aa+aE),(f-aq)*Math.sin(am*aa+aE));this._tickPoints.push([(f-aq)*Math.cos(am*aa+aE)+this._center[0]+this.canvas._offsets.left,(f-aq)*Math.sin(am*aa+aE)+this._center[1]+this.canvas._offsets.top,am*aa+aE]);X.stroke();X.lineWidth=1+this.diameter/440;if(aa<this.ticks.length-1){for(var Y=1;Y<=F;Y++){X.beginPath();X.moveTo(-f*Math.cos(am*aa+p*Y+aE),f*Math.sin(am*aa+p*Y+aE));X.lineTo(-(f-v)*Math.cos(am*aa+p*Y+aE),(f-v)*Math.sin(am*aa+p*Y+aE));X.stroke()}}}X.restore()}if(this.showTickLabels){var J,W,T,aO,g,G,n=0;var an=this.tickPadding*(1-1/(this.diameter/80+1));for(aa=0;aa<this.ticks.length;aa++){J=c('<div class="jqplot-meterGauge-tick" style="position:absolute;">'+this.ticks[aa][1]+"</div>");this.canvas._elem.after(J);aO=J.outerWidth(true);g=J.outerHeight(true);W=this._tickPoints[aa][0]-aO*(this._tickPoints[aa][2]-Math.PI)/Math.PI-an*Math.cos(this._tickPoints[aa][2]);T=this._tickPoints[aa][1]-g/2+g/2*Math.pow(Math.abs((Math.sin(this._tickPoints[aa][2]))),0.5)+an/3*Math.pow(Math.abs((Math.sin(this._tickPoints[aa][2]))),0.5);J.css({left:W,top:T});G=aO*Math.cos(this._tickPoints[aa][2])+g*Math.sin(Math.PI/2+this._tickPoints[aa][2]/2);n=(G>n)?G:n}}if(this.label&&this.labelPosition=="inside"){var W=this._center[0]+this.canvas._offsets.left;var an=this.tickPadding*(1-1/(this.diameter/80+1));var T=0.5*(this._center[1]+this.canvas._offsets.top-this.hubRadius)+0.5*(this._center[1]+this.canvas._offsets.top-this.tickOuterRadius+this.tickLength+an)+this.labelHeightAdjust;W-=this._labelElem.outerWidth(true)/2;T-=this._labelElem.outerHeight(true)/2;this._labelElem.css({left:W,top:T})}else{if(this.label&&this.labelPosition=="bottom"){var W=this._center[0]+this.canvas._offsets.left-this._labelElem.outerWidth(true)/2;var T=this._center[1]+this.canvas._offsets.top+this.innerPad+ +this.ringWidth+this.padding+this.labelHeightAdjust;this._labelElem.css({left:W,top:T})}}X.save();var ax=this.intervalInnerRadius||this.hubRadius*1.5;if(this.intervalOuterRadius==null){if(this.showTickLabels){var ag=(this.tickOuterRadius-this.tickLength-this.tickPadding-this.diameter/8)}else{var ag=(this.tickOuterRadius-this.tickLength-this.diameter/16)}}else{var ag=this.intervalOuterRadius}var P=this.max-this.min;var aD=this.intervals[this.intervals.length-1]-this.min;var y,Z,u=this.span*Math.PI/180;for(aa=0;aa<this.intervals.length;aa++){y=(aa==0)?aE:aE+(this.intervals[aa-1][0]-this.min)*u/P;if(y<0){y=0}Z=aE+(this.intervals[aa][0]-this.min)*u/P;if(Z<0){Z=0}X.beginPath();X.fillStyle=this.intervals[aa][2];X.arc(0,0,ax,y,Z,false);X.lineTo(ag*Math.cos(Z),ag*Math.sin(Z));X.arc(0,0,ag,Z,y,true);X.lineTo(ax*Math.cos(y),ax*Math.sin(y));X.closePath();X.fill()}X.restore();var ay=this.data[0][1];var R=this.max-this.min;if(this.pegNeedle){if(this.data[0][1]>this.max+R*3/this.span){ay=this.max+R*3/this.span}if(this.data[0][1]<this.min-R*3/this.span){ay=this.min-R*3/this.span}}var al=(ay-this.min)/R*this.span*Math.PI/180+this.startAngle;X.save();X.beginPath();X.fillStyle=this.ringColor;X.strokeStyle=this.ringColor;this.needleLength=(this.tickOuterRadius-this.tickLength)*0.85;this.needleThickness=(this.needleThickness<2)?2:this.needleThickness;var aK=this.needleThickness*0.4;var x=this.needleLength/10;var s=(this.needleThickness-aK)/10;var ar;for(var aa=0;aa<10;aa++){ar=this.needleThickness-aa*s;X.moveTo(x*aa*Math.cos(al),x*aa*Math.sin(al));X.lineWidth=ar;X.lineTo(x*(aa+1)*Math.cos(al),x*(aa+1)*Math.sin(al));X.stroke()}X.restore()}else{this._center=[(K-at*ai)/2+at*ai,(S-at*ah)/2+at*ah]}};c.jqplot.MeterGaugeAxisRenderer=function(){c.jqplot.LinearAxisRenderer.call(this)};c.jqplot.MeterGaugeAxisRenderer.prototype=new c.jqplot.LinearAxisRenderer();c.jqplot.MeterGaugeAxisRenderer.prototype.constructor=c.jqplot.MeterGaugeAxisRenderer;c.jqplot.MeterGaugeAxisRenderer.prototype.init=function(e){this.tickRenderer=c.jqplot.MeterGaugeTickRenderer;c.extend(true,this,e);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};c.jqplot.MeterGaugeLegendRenderer=function(){c.jqplot.TableLegendRenderer.call(this)};c.jqplot.MeterGaugeLegendRenderer.prototype=new c.jqplot.TableLegendRenderer();c.jqplot.MeterGaugeLegendRenderer.prototype.constructor=c.jqplot.MeterGaugeLegendRenderer;c.jqplot.MeterGaugeLegendRenderer.prototype.init=function(e){this.numberRows=null;this.numberColumns=null;c.extend(true,this,e)};c.jqplot.MeterGaugeLegendRenderer.prototype.draw=function(){if(this.show){var p=this._series;var x="position:absolute;";x+=(this.background)?"background:"+this.background+";":"";x+=(this.border)?"border:"+this.border+";":"";x+=(this.fontSize)?"font-size:"+this.fontSize+";":"";x+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";x+=(this.textColor)?"color:"+this.textColor+";":"";x+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";x+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";x+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";x+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=c('<table class="jqplot-table-legend" style="'+x+'"></table>');var f=false,q=false,u,o;var w=p[0];if(w.show){var t=w.data;if(this.numberRows){u=this.numberRows;if(!this.numberColumns){o=Math.ceil(t.length/u)}else{o=this.numberColumns}}else{if(this.numberColumns){o=this.numberColumns;u=Math.ceil(t.length/this.numberColumns)}else{u=t.length;o=1}}var n,m,r,g,e,l,k,h;var v=0;for(n=0;n<u;n++){if(q){r=c('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{r=c('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(m=0;m<o;m++){if(v<t.length){l=this.labels[v]||t[v][0].toString();h=w.color;if(!q){if(n>0){f=true}else{f=false}}else{if(n==u-1){f=false}else{f=true}}k=(f)?this.rowSpacing:"0";g=c('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+k+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+h+';"></div></div></td>');e=c('<td class="jqplot-table-legend" style="padding-top:'+k+';"></td>');if(this.escapeHtml){e.text(l)}else{e.html(l)}if(q){e.prependTo(r);g.prependTo(r)}else{g.appendTo(r);e.appendTo(r)}f=true}v++}}}}return this._elem};function a(j,h,f){f=f||{};f.axesDefaults=f.axesDefaults||{};f.legend=f.legend||{};f.seriesDefaults=f.seriesDefaults||{};f.grid=f.grid||{};var e=false;if(f.seriesDefaults.renderer==c.jqplot.MeterGaugeRenderer){e=true}else{if(f.series){for(var g=0;g<f.series.length;g++){if(f.series[g].renderer==c.jqplot.MeterGaugeRenderer){e=true}}}}if(e){f.axesDefaults.renderer=c.jqplot.MeterGaugeAxisRenderer;f.legend.renderer=c.jqplot.MeterGaugeLegendRenderer;f.legend.preDraw=true;f.grid.background=f.grid.background||"white";f.grid.drawGridlines=false;f.grid.borderWidth=(f.grid.borderWidth!=null)?f.grid.borderWidth:0;f.grid.shadow=(f.grid.shadow!=null)?f.grid.shadow:false}}function d(e){}c.jqplot.preInitHooks.push(a);c.jqplot.postParseOptionsHooks.push(d);c.jqplot.MeterGaugeTickRenderer=function(){c.jqplot.AxisTickRenderer.call(this)};c.jqplot.MeterGaugeTickRenderer.prototype=new c.jqplot.AxisTickRenderer();c.jqplot.MeterGaugeTickRenderer.prototype.constructor=c.jqplot.MeterGaugeTickRenderer})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.js
new file mode 100644
index 00000000..221f92d0
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.js
@@ -0,0 +1,45 @@
+/**
+ * jqplot.jquerymobile plugin
+ * jQuery Mobile virtual event support.
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2011 Takashi Okamoto
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ */
+(function($) {
+ function postInit(target, data, options){
+ this.bindCustomEvents = function() {
+ this.eventCanvas._elem.bind('vclick', {plot:this}, this.onClick);
+ this.eventCanvas._elem.bind('dblclick', {plot:this}, this.onDblClick);
+ this.eventCanvas._elem.bind('taphold', {plot:this}, this.onDblClick);
+ this.eventCanvas._elem.bind('vmousedown', {plot:this}, this.onMouseDown);
+ this.eventCanvas._elem.bind('vmousemove', {plot:this}, this.onMouseMove);
+ this.eventCanvas._elem.bind('mouseenter', {plot:this}, this.onMouseEnter);
+ this.eventCanvas._elem.bind('mouseleave', {plot:this}, this.onMouseLeave);
+ if (this.captureRightClick) {
+ this.eventCanvas._elem.bind('vmouseup', {plot:this}, this.onRightClick);
+ this.eventCanvas._elem.get(0).oncontextmenu = function() {
+ return false;
+ };
+ }
+ else {
+ this.eventCanvas._elem.bind('vmouseup', {plot:this}, this.onMouseUp);
+ }
+ };
+ this.plugins.mobile = true;
+ }
+ $.jqplot.postInitHooks.push(postInit);
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.min.js
new file mode 100644
index 00000000..771a6d90
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(b){function a(e,d,c){this.bindCustomEvents=function(){this.eventCanvas._elem.bind("vclick",{plot:this},this.onClick);this.eventCanvas._elem.bind("dblclick",{plot:this},this.onDblClick);this.eventCanvas._elem.bind("taphold",{plot:this},this.onDblClick);this.eventCanvas._elem.bind("vmousedown",{plot:this},this.onMouseDown);this.eventCanvas._elem.bind("vmousemove",{plot:this},this.onMouseMove);this.eventCanvas._elem.bind("mouseenter",{plot:this},this.onMouseEnter);this.eventCanvas._elem.bind("mouseleave",{plot:this},this.onMouseLeave);if(this.captureRightClick){this.eventCanvas._elem.bind("vmouseup",{plot:this},this.onRightClick);this.eventCanvas._elem.get(0).oncontextmenu=function(){return false}}else{this.eventCanvas._elem.bind("vmouseup",{plot:this},this.onMouseUp)}};this.plugins.mobile=true}b.jqplot.postInitHooks.push(a)})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.js
new file mode 100644
index 00000000..2f143f1b
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.js
@@ -0,0 +1,373 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ /**
+ * Class: $.jqplot.OHLCRenderer
+ * jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.
+ *
+ * To use this plugin, include the renderer js file in
+ * your source:
+ *
+ * > <script type="text/javascript" src="plugins/jqplot.ohlcRenderer.js"></script>
+ *
+ * You will most likely want to use a date axis renderer
+ * for the x axis also, so include the date axis render js file also:
+ *
+ * > <script type="text/javascript" src="plugins/jqplot.dateAxisRenderer.js"></script>
+ *
+ * Then you set the renderer in the series options on your plot:
+ *
+ * > series: [{renderer:$.jqplot.OHLCRenderer}]
+ *
+ * For OHLC and candlestick charts, data should be specified
+ * like so:
+ *
+ * > dat = [['07/06/2009',138.7,139.68,135.18,135.4], ['06/29/2009',143.46,144.66,139.79,140.02], ...]
+ *
+ * If the data array has only 4 values per point instead of 5,
+ * the renderer will create a Hi Low Close chart instead. In that case,
+ * data should be supplied like:
+ *
+ * > dat = [['07/06/2009',139.68,135.18,135.4], ['06/29/2009',144.66,139.79,140.02], ...]
+ *
+ * To generate a candlestick chart instead of an OHLC chart,
+ * set the "candlestick" option to true:
+ *
+ * > series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}],
+ *
+ */
+ $.jqplot.OHLCRenderer = function(){
+ // subclass line renderer to make use of some of it's methods.
+ $.jqplot.LineRenderer.call(this);
+ // prop: candleStick
+ // true to render chart as candleStick.
+ // Must have an open price, cannot be a hlc chart.
+ this.candleStick = false;
+ // prop: tickLength
+ // length of the line in pixels indicating open and close price.
+ // Default will auto calculate based on plot width and
+ // number of points displayed.
+ this.tickLength = 'auto';
+ // prop: bodyWidth
+ // width of the candlestick body in pixels. Default will auto calculate
+ // based on plot width and number of candlesticks displayed.
+ this.bodyWidth = 'auto';
+ // prop: openColor
+ // color of the open price tick mark. Default is series color.
+ this.openColor = null;
+ // prop: closeColor
+ // color of the close price tick mark. Default is series color.
+ this.closeColor = null;
+ // prop: wickColor
+ // color of the hi-lo line thorugh the candlestick body.
+ // Default is the series color.
+ this.wickColor = null;
+ // prop: fillUpBody
+ // true to render an "up" day (close price greater than open price)
+ // with a filled candlestick body.
+ this.fillUpBody = false;
+ // prop: fillDownBody
+ // true to render a "down" day (close price lower than open price)
+ // with a filled candlestick body.
+ this.fillDownBody = true;
+ // prop: upBodyColor
+ // Color of candlestick body of an "up" day. Default is series color.
+ this.upBodyColor = null;
+ // prop: downBodyColor
+ // Color of candlestick body on a "down" day. Default is series color.
+ this.downBodyColor = null;
+ // prop: hlc
+ // true if is a hi-low-close chart (no open price).
+ // This is determined automatically from the series data.
+ this.hlc = false;
+ // prop: lineWidth
+ // Width of the hi-low line and open/close ticks.
+ // Must be set in the rendererOptions for the series.
+ this.lineWidth = 1.5;
+ this._tickLength;
+ this._bodyWidth;
+ };
+
+ $.jqplot.OHLCRenderer.prototype = new $.jqplot.LineRenderer();
+ $.jqplot.OHLCRenderer.prototype.constructor = $.jqplot.OHLCRenderer;
+
+ // called with scope of series.
+ $.jqplot.OHLCRenderer.prototype.init = function(options) {
+ options = options || {};
+ // lineWidth has to be set on the series, changes in renderer
+ // constructor have no effect. set the default here
+ // if no renderer option for lineWidth is specified.
+ this.lineWidth = options.lineWidth || 1.5;
+ $.jqplot.LineRenderer.prototype.init.call(this, options);
+ this._type = 'ohlc';
+ // set the yaxis data bounds here to account for hi and low values
+ var db = this._yaxis._dataBounds;
+ var d = this._plotData;
+ // if data points have less than 5 values, force a hlc chart.
+ if (d[0].length < 5) {
+ this.renderer.hlc = true;
+
+ for (var j=0; j<d.length; j++) {
+ if (d[j][2] < db.min || db.min == null) {
+ db.min = d[j][2];
+ }
+ if (d[j][1] > db.max || db.max == null) {
+ db.max = d[j][1];
+ }
+ }
+ }
+ else {
+ for (var j=0; j<d.length; j++) {
+ if (d[j][3] < db.min || db.min == null) {
+ db.min = d[j][3];
+ }
+ if (d[j][2] > db.max || db.max == null) {
+ db.max = d[j][2];
+ }
+ }
+ }
+
+ };
+
+ // called within scope of series.
+ $.jqplot.OHLCRenderer.prototype.draw = function(ctx, gd, options) {
+ var d = this.data;
+ var xmin = this._xaxis.min;
+ var xmax = this._xaxis.max;
+ // index of last value below range of plot.
+ var xminidx = 0;
+ // index of first value above range of plot.
+ var xmaxidx = d.length;
+ var xp = this._xaxis.series_u2p;
+ var yp = this._yaxis.series_u2p;
+ var i, prevColor, ops, b, h, w, a, points;
+ var o;
+ var r = this.renderer;
+ var opts = (options != undefined) ? options : {};
+ var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
+ var fill = (opts.fill != undefined) ? opts.fill : this.fill;
+ var fillAndStroke = (opts.fillAndStroke != undefined) ? opts.fillAndStroke : this.fillAndStroke;
+ r.bodyWidth = (opts.bodyWidth != undefined) ? opts.bodyWidth : r.bodyWidth;
+ r.tickLength = (opts.tickLength != undefined) ? opts.tickLength : r.tickLength;
+ ctx.save();
+ if (this.show) {
+ var x, open, hi, low, close;
+ // need to get widths based on number of points shown,
+ // not on total number of points. Use the results
+ // to speed up drawing in next step.
+ for (var i=0; i<d.length; i++) {
+ if (d[i][0] < xmin) {
+ xminidx = i;
+ }
+ else if (d[i][0] < xmax) {
+ xmaxidx = i+1;
+ }
+ }
+
+ var dwidth = this.gridData[xmaxidx-1][0] - this.gridData[xminidx][0];
+ var nvisiblePoints = xmaxidx - xminidx;
+ try {
+ var dinterval = Math.abs(this._xaxis.series_u2p(parseInt(this._xaxis._intervalStats[0].sortedIntervals[0].interval, 10)) - this._xaxis.series_u2p(0));
+ }
+
+ catch (e) {
+ var dinterval = dwidth / nvisiblePoints;
+ }
+
+ if (r.candleStick) {
+ if (typeof(r.bodyWidth) == 'number') {
+ r._bodyWidth = r.bodyWidth;
+ }
+ else {
+ r._bodyWidth = Math.min(20, dinterval/1.65);
+ }
+ }
+ else {
+ if (typeof(r.tickLength) == 'number') {
+ r._tickLength = r.tickLength;
+ }
+ else {
+ r._tickLength = Math.min(10, dinterval/3.5);
+ }
+ }
+
+ for (var i=xminidx; i<xmaxidx; i++) {
+ x = xp(d[i][0]);
+ if (r.hlc) {
+ open = null;
+ hi = yp(d[i][1]);
+ low = yp(d[i][2]);
+ close = yp(d[i][3]);
+ }
+ else {
+ open = yp(d[i][1]);
+ hi = yp(d[i][2]);
+ low = yp(d[i][3]);
+ close = yp(d[i][4]);
+ }
+ o = {};
+ if (r.candleStick && !r.hlc) {
+ w = r._bodyWidth;
+ a = x - w/2;
+ // draw candle
+ // determine if candle up or down
+ // up, remember grid coordinates increase downward
+ if (close < open) {
+ // draw wick
+ if (r.wickColor) {
+ o.color = r.wickColor;
+ }
+ else if (r.downBodyColor) {
+ o.color = r.upBodyColor;
+ }
+ ops = $.extend(true, {}, opts, o);
+ r.shapeRenderer.draw(ctx, [[x, hi], [x, close]], ops);
+ r.shapeRenderer.draw(ctx, [[x, open], [x, low]], ops);
+ o = {};
+ b = close;
+ h = open - close;
+ // if color specified, use it
+ if (r.fillUpBody) {
+ o.fillRect = true;
+ }
+ else {
+ o.strokeRect = true;
+ w = w - this.lineWidth;
+ a = x - w/2;
+ }
+ if (r.upBodyColor) {
+ o.color = r.upBodyColor;
+ o.fillStyle = r.upBodyColor;
+ }
+ points = [a, b, w, h];
+ }
+ // down
+ else if (close > open) {
+ // draw wick
+ if (r.wickColor) {
+ o.color = r.wickColor;
+ }
+ else if (r.downBodyColor) {
+ o.color = r.downBodyColor;
+ }
+ ops = $.extend(true, {}, opts, o);
+ r.shapeRenderer.draw(ctx, [[x, hi], [x, open]], ops);
+ r.shapeRenderer.draw(ctx, [[x, close], [x, low]], ops);
+
+ o = {};
+
+ b = open;
+ h = close - open;
+ // if color specified, use it
+ if (r.fillDownBody) {
+ o.fillRect = true;
+ }
+ else {
+ o.strokeRect = true;
+ w = w - this.lineWidth;
+ a = x - w/2;
+ }
+ if (r.downBodyColor) {
+ o.color = r.downBodyColor;
+ o.fillStyle = r.downBodyColor;
+ }
+ points = [a, b, w, h];
+ }
+ // even, open = close
+ else {
+ // draw wick
+ if (r.wickColor) {
+ o.color = r.wickColor;
+ }
+ ops = $.extend(true, {}, opts, o);
+ r.shapeRenderer.draw(ctx, [[x, hi], [x, low]], ops);
+ o = {};
+ o.fillRect = false;
+ o.strokeRect = false;
+ a = [x - w/2, open];
+ b = [x + w/2, close];
+ w = null;
+ h = null;
+ points = [a, b];
+ }
+ ops = $.extend(true, {}, opts, o);
+ r.shapeRenderer.draw(ctx, points, ops);
+ }
+ else {
+ prevColor = opts.color;
+ if (r.openColor) {
+ opts.color = r.openColor;
+ }
+ // draw open tick
+ if (!r.hlc) {
+ r.shapeRenderer.draw(ctx, [[x-r._tickLength, open], [x, open]], opts);
+ }
+ opts.color = prevColor;
+ // draw wick
+ if (r.wickColor) {
+ opts.color = r.wickColor;
+ }
+ r.shapeRenderer.draw(ctx, [[x, hi], [x, low]], opts);
+ opts.color = prevColor;
+ // draw close tick
+ if (r.closeColor) {
+ opts.color = r.closeColor;
+ }
+ r.shapeRenderer.draw(ctx, [[x, close], [x+r._tickLength, close]], opts);
+ opts.color = prevColor;
+ }
+ }
+ }
+
+ ctx.restore();
+ };
+
+ $.jqplot.OHLCRenderer.prototype.drawShadow = function(ctx, gd, options) {
+ // This is a no-op, shadows drawn with lines.
+ };
+
+ // called with scope of plot.
+ $.jqplot.OHLCRenderer.checkOptions = function(target, data, options) {
+ // provide some sensible highlighter options by default
+ // These aren't good for hlc, only for ohlc or candlestick
+ if (!options.highlighter) {
+ options.highlighter = {
+ showMarker:false,
+ tooltipAxes: 'y',
+ yvalues: 4,
+ formatString:'<table class="jqplot-highlighter"><tr><td>date:</td><td>%s</td></tr><tr><td>open:</td><td>%s</td></tr><tr><td>hi:</td><td>%s</td></tr><tr><td>low:</td><td>%s</td></tr><tr><td>close:</td><td>%s</td></tr></table>'
+ };
+ }
+ };
+
+ //$.jqplot.preInitHooks.push($.jqplot.OHLCRenderer.checkOptions);
+
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.min.js
new file mode 100644
index 00000000..b37fa64d
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(a){a.jqplot.OHLCRenderer=function(){a.jqplot.LineRenderer.call(this);this.candleStick=false;this.tickLength="auto";this.bodyWidth="auto";this.openColor=null;this.closeColor=null;this.wickColor=null;this.fillUpBody=false;this.fillDownBody=true;this.upBodyColor=null;this.downBodyColor=null;this.hlc=false;this.lineWidth=1.5;this._tickLength;this._bodyWidth};a.jqplot.OHLCRenderer.prototype=new a.jqplot.LineRenderer();a.jqplot.OHLCRenderer.prototype.constructor=a.jqplot.OHLCRenderer;a.jqplot.OHLCRenderer.prototype.init=function(e){e=e||{};this.lineWidth=e.lineWidth||1.5;a.jqplot.LineRenderer.prototype.init.call(this,e);this._type="ohlc";var b=this._yaxis._dataBounds;var f=this._plotData;if(f[0].length<5){this.renderer.hlc=true;for(var c=0;c<f.length;c++){if(f[c][2]<b.min||b.min==null){b.min=f[c][2]}if(f[c][1]>b.max||b.max==null){b.max=f[c][1]}}}else{for(var c=0;c<f.length;c++){if(f[c][3]<b.min||b.min==null){b.min=f[c][3]}if(f[c][2]>b.max||b.max==null){b.max=f[c][2]}}}};a.jqplot.OHLCRenderer.prototype.draw=function(A,N,j){var J=this.data;var v=this._xaxis.min;var z=this._xaxis.max;var l=0;var K=J.length;var p=this._xaxis.series_u2p;var G=this._yaxis.series_u2p;var D,E,f,M,F,n,O,C;var y;var u=this.renderer;var s=(j!=undefined)?j:{};var k=(s.shadow!=undefined)?s.shadow:this.shadow;var B=(s.fill!=undefined)?s.fill:this.fill;var c=(s.fillAndStroke!=undefined)?s.fillAndStroke:this.fillAndStroke;u.bodyWidth=(s.bodyWidth!=undefined)?s.bodyWidth:u.bodyWidth;u.tickLength=(s.tickLength!=undefined)?s.tickLength:u.tickLength;A.save();if(this.show){var m,q,g,Q,t;for(var D=0;D<J.length;D++){if(J[D][0]<v){l=D}else{if(J[D][0]<z){K=D+1}}}var I=this.gridData[K-1][0]-this.gridData[l][0];var L=K-l;try{var P=Math.abs(this._xaxis.series_u2p(parseInt(this._xaxis._intervalStats[0].sortedIntervals[0].interval,10))-this._xaxis.series_u2p(0))}catch(H){var P=I/L}if(u.candleStick){if(typeof(u.bodyWidth)=="number"){u._bodyWidth=u.bodyWidth}else{u._bodyWidth=Math.min(20,P/1.65)}}else{if(typeof(u.tickLength)=="number"){u._tickLength=u.tickLength}else{u._tickLength=Math.min(10,P/3.5)}}for(var D=l;D<K;D++){m=p(J[D][0]);if(u.hlc){q=null;g=G(J[D][1]);Q=G(J[D][2]);t=G(J[D][3])}else{q=G(J[D][1]);g=G(J[D][2]);Q=G(J[D][3]);t=G(J[D][4])}y={};if(u.candleStick&&!u.hlc){n=u._bodyWidth;O=m-n/2;if(t<q){if(u.wickColor){y.color=u.wickColor}else{if(u.downBodyColor){y.color=u.upBodyColor}}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,[[m,g],[m,t]],f);u.shapeRenderer.draw(A,[[m,q],[m,Q]],f);y={};M=t;F=q-t;if(u.fillUpBody){y.fillRect=true}else{y.strokeRect=true;n=n-this.lineWidth;O=m-n/2}if(u.upBodyColor){y.color=u.upBodyColor;y.fillStyle=u.upBodyColor}C=[O,M,n,F]}else{if(t>q){if(u.wickColor){y.color=u.wickColor}else{if(u.downBodyColor){y.color=u.downBodyColor}}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,[[m,g],[m,q]],f);u.shapeRenderer.draw(A,[[m,t],[m,Q]],f);y={};M=q;F=t-q;if(u.fillDownBody){y.fillRect=true}else{y.strokeRect=true;n=n-this.lineWidth;O=m-n/2}if(u.downBodyColor){y.color=u.downBodyColor;y.fillStyle=u.downBodyColor}C=[O,M,n,F]}else{if(u.wickColor){y.color=u.wickColor}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,[[m,g],[m,Q]],f);y={};y.fillRect=false;y.strokeRect=false;O=[m-n/2,q];M=[m+n/2,t];n=null;F=null;C=[O,M]}}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,C,f)}else{E=s.color;if(u.openColor){s.color=u.openColor}if(!u.hlc){u.shapeRenderer.draw(A,[[m-u._tickLength,q],[m,q]],s)}s.color=E;if(u.wickColor){s.color=u.wickColor}u.shapeRenderer.draw(A,[[m,g],[m,Q]],s);s.color=E;if(u.closeColor){s.color=u.closeColor}u.shapeRenderer.draw(A,[[m,t],[m+u._tickLength,t]],s);s.color=E}}}A.restore()};a.jqplot.OHLCRenderer.prototype.drawShadow=function(b,d,c){};a.jqplot.OHLCRenderer.checkOptions=function(d,c,b){if(!b.highlighter){b.highlighter={showMarker:false,tooltipAxes:"y",yvalues:4,formatString:'<table class="jqplot-highlighter"><tr><td>date:</td><td>%s</td></tr><tr><td>open:</td><td>%s</td></tr><tr><td>hi:</td><td>%s</td></tr><tr><td>low:</td><td>%s</td></tr><tr><td>close:</td><td>%s</td></tr></table>'}}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.js
new file mode 100644
index 00000000..2479885c
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.js
@@ -0,0 +1,904 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ /**
+ * Class: $.jqplot.PieRenderer
+ * Plugin renderer to draw a pie chart.
+ * x values, if present, will be used as slice labels.
+ * y values give slice size.
+ *
+ * To use this renderer, you need to include the
+ * pie renderer plugin, for example:
+ *
+ * > <script type="text/javascript" src="plugins/jqplot.pieRenderer.js"></script>
+ *
+ * Properties described here are passed into the $.jqplot function
+ * as options on the series renderer. For example:
+ *
+ * > plot2 = $.jqplot('chart2', [s1, s2], {
+ * > seriesDefaults: {
+ * > renderer:$.jqplot.PieRenderer,
+ * > rendererOptions:{
+ * > sliceMargin: 2,
+ * > startAngle: -90
+ * > }
+ * > }
+ * > });
+ *
+ * A pie plot will trigger events on the plot target
+ * according to user interaction. All events return the event object,
+ * the series index, the point (slice) index, and the point data for
+ * the appropriate slice.
+ *
+ * 'jqplotDataMouseOver' - triggered when user mouseing over a slice.
+ * 'jqplotDataHighlight' - triggered the first time user mouses over a slice,
+ * if highlighting is enabled.
+ * 'jqplotDataUnhighlight' - triggered when a user moves the mouse out of
+ * a highlighted slice.
+ * 'jqplotDataClick' - triggered when the user clicks on a slice.
+ * 'jqplotDataRightClick' - tiggered when the user right clicks on a slice if
+ * the "captureRightClick" option is set to true on the plot.
+ */
+ $.jqplot.PieRenderer = function(){
+ $.jqplot.LineRenderer.call(this);
+ };
+
+ $.jqplot.PieRenderer.prototype = new $.jqplot.LineRenderer();
+ $.jqplot.PieRenderer.prototype.constructor = $.jqplot.PieRenderer;
+
+ // called with scope of a series
+ $.jqplot.PieRenderer.prototype.init = function(options, plot) {
+ // Group: Properties
+ //
+ // prop: diameter
+ // Outer diameter of the pie, auto computed by default
+ this.diameter = null;
+ // prop: padding
+ // padding between the pie and plot edges, legend, etc.
+ this.padding = 20;
+ // prop: sliceMargin
+ // angular spacing between pie slices in degrees.
+ this.sliceMargin = 0;
+ // prop: fill
+ // true or false, wether to fil the slices.
+ this.fill = true;
+ // prop: shadowOffset
+ // offset of the shadow from the slice and offset of
+ // each succesive stroke of the shadow from the last.
+ this.shadowOffset = 2;
+ // prop: shadowAlpha
+ // transparency of the shadow (0 = transparent, 1 = opaque)
+ this.shadowAlpha = 0.07;
+ // prop: shadowDepth
+ // number of strokes to apply to the shadow,
+ // each stroke offset shadowOffset from the last.
+ this.shadowDepth = 5;
+ // prop: highlightMouseOver
+ // True to highlight slice when moused over.
+ // This must be false to enable highlightMouseDown to highlight when clicking on a slice.
+ this.highlightMouseOver = true;
+ // prop: highlightMouseDown
+ // True to highlight when a mouse button is pressed over a slice.
+ // This will be disabled if highlightMouseOver is true.
+ this.highlightMouseDown = false;
+ // prop: highlightColors
+ // an array of colors to use when highlighting a slice.
+ this.highlightColors = [];
+ // prop: dataLabels
+ // Either 'label', 'value', 'percent' or an array of labels to place on the pie slices.
+ // Defaults to percentage of each pie slice.
+ this.dataLabels = 'percent';
+ // prop: showDataLabels
+ // true to show data labels on slices.
+ this.showDataLabels = false;
+ // prop: dataLabelFormatString
+ // Format string for data labels. If none, '%s' is used for "label" and for arrays, '%d' for value and '%d%%' for percentage.
+ this.dataLabelFormatString = null;
+ // prop: dataLabelThreshold
+ // Threshhold in percentage (0-100) of pie area, below which no label will be displayed.
+ // This applies to all label types, not just to percentage labels.
+ this.dataLabelThreshold = 3;
+ // prop: dataLabelPositionFactor
+ // A Multiplier (0-1) of the pie radius which controls position of label on slice.
+ // Increasing will slide label toward edge of pie, decreasing will slide label toward center of pie.
+ this.dataLabelPositionFactor = 0.52;
+ // prop: dataLabelNudge
+ // Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
+ this.dataLabelNudge = 2;
+ // prop: dataLabelCenterOn
+ // True to center the data label at its position.
+ // False to set the inside facing edge of the label at its position.
+ this.dataLabelCenterOn = true;
+ // prop: startAngle
+ // Angle to start drawing pie in degrees.
+ // According to orientation of canvas coordinate system:
+ // 0 = on the positive x axis
+ // -90 = on the positive y axis.
+ // 90 = on the negaive y axis.
+ // 180 or - 180 = on the negative x axis.
+ this.startAngle = 0;
+ this.tickRenderer = $.jqplot.PieTickRenderer;
+ // Used as check for conditions where pie shouldn't be drawn.
+ this._drawData = true;
+ this._type = 'pie';
+
+ // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
+ if (options.highlightMouseDown && options.highlightMouseOver == null) {
+ options.highlightMouseOver = false;
+ }
+
+ $.extend(true, this, options);
+
+ if (this.sliceMargin < 0) {
+ this.sliceMargin = 0;
+ }
+
+ this._diameter = null;
+ this._radius = null;
+ // array of [start,end] angles arrays, one for each slice. In radians.
+ this._sliceAngles = [];
+ // index of the currenty highlighted point, if any
+ this._highlightedPoint = null;
+
+ // set highlight colors if none provided
+ if (this.highlightColors.length == 0) {
+ for (var i=0; i<this.seriesColors.length; i++){
+ var rgba = $.jqplot.getColorComponents(this.seriesColors[i]);
+ var newrgb = [rgba[0], rgba[1], rgba[2]];
+ var sum = newrgb[0] + newrgb[1] + newrgb[2];
+ for (var j=0; j<3; j++) {
+ // when darkening, lowest color component can be is 60.
+ newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]);
+ newrgb[j] = parseInt(newrgb[j], 10);
+ }
+ this.highlightColors.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')');
+ }
+ }
+
+ this.highlightColorGenerator = new $.jqplot.ColorGenerator(this.highlightColors);
+
+ plot.postParseOptionsHooks.addOnce(postParseOptions);
+ plot.postInitHooks.addOnce(postInit);
+ plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
+ plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
+ plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
+ plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
+ plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick);
+ plot.postDrawHooks.addOnce(postPlotDraw);
+ };
+
+ $.jqplot.PieRenderer.prototype.setGridData = function(plot) {
+ // set gridData property. This will hold angle in radians of each data point.
+ var stack = [];
+ var td = [];
+ var sa = this.startAngle/180*Math.PI;
+ var tot = 0;
+ // don't know if we have any valid data yet, so set plot to not draw.
+ this._drawData = false;
+ for (var i=0; i<this.data.length; i++){
+ if (this.data[i][1] != 0) {
+ // we have data, O.K. to draw.
+ this._drawData = true;
+ }
+ stack.push(this.data[i][1]);
+ td.push([this.data[i][0]]);
+ if (i>0) {
+ stack[i] += stack[i-1];
+ }
+ tot += this.data[i][1];
+ }
+ var fact = Math.PI*2/stack[stack.length - 1];
+
+ for (var i=0; i<stack.length; i++) {
+ td[i][1] = stack[i] * fact;
+ td[i][2] = this.data[i][1]/tot;
+ }
+ this.gridData = td;
+ };
+
+ $.jqplot.PieRenderer.prototype.makeGridData = function(data, plot) {
+ var stack = [];
+ var td = [];
+ var tot = 0;
+ var sa = this.startAngle/180*Math.PI;
+ // don't know if we have any valid data yet, so set plot to not draw.
+ this._drawData = false;
+ for (var i=0; i<data.length; i++){
+ if (this.data[i][1] != 0) {
+ // we have data, O.K. to draw.
+ this._drawData = true;
+ }
+ stack.push(data[i][1]);
+ td.push([data[i][0]]);
+ if (i>0) {
+ stack[i] += stack[i-1];
+ }
+ tot += data[i][1];
+ }
+ var fact = Math.PI*2/stack[stack.length - 1];
+
+ for (var i=0; i<stack.length; i++) {
+ td[i][1] = stack[i] * fact;
+ td[i][2] = data[i][1]/tot;
+ }
+ return td;
+ };
+
+ function calcRadiusAdjustment(ang) {
+ return Math.sin((ang - (ang-Math.PI) / 8 / Math.PI )/2.0);
+ }
+
+ function calcRPrime(ang1, ang2, sliceMargin, fill, lineWidth) {
+ var rprime = 0;
+ var ang = ang2 - ang1;
+ var absang = Math.abs(ang);
+ var sm = sliceMargin;
+ if (fill == false) {
+ sm += lineWidth;
+ }
+
+ if (sm > 0 && absang > 0.01 && absang < 6.282) {
+ rprime = parseFloat(sm) / 2.0 / calcRadiusAdjustment(ang);
+ }
+
+ return rprime;
+ }
+
+ $.jqplot.PieRenderer.prototype.drawSlice = function (ctx, ang1, ang2, color, isShadow) {
+ if (this._drawData) {
+ var r = this._radius;
+ var fill = this.fill;
+ var lineWidth = this.lineWidth;
+ var sm = this.sliceMargin;
+ if (this.fill == false) {
+ sm += this.lineWidth;
+ }
+ ctx.save();
+ ctx.translate(this._center[0], this._center[1]);
+
+ var rprime = calcRPrime(ang1, ang2, this.sliceMargin, this.fill, this.lineWidth);
+
+ var transx = rprime * Math.cos((ang1 + ang2) / 2.0);
+ var transy = rprime * Math.sin((ang1 + ang2) / 2.0);
+
+ if ((ang2 - ang1) <= Math.PI) {
+ r -= rprime;
+ }
+ else {
+ r += rprime;
+ }
+
+ ctx.translate(transx, transy);
+
+ if (isShadow) {
+ for (var i=0, l=this.shadowDepth; i<l; i++) {
+ ctx.save();
+ ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));
+ doDraw(r);
+ }
+ for (var i=0, l=this.shadowDepth; i<l; i++) {
+ ctx.restore();
+ }
+ }
+
+ else {
+ doDraw(r);
+ }
+ ctx.restore();
+ }
+
+ function doDraw (rad) {
+ // Fix for IE and Chrome that can't seem to draw circles correctly.
+ // ang2 should always be <= 2 pi since that is the way the data is converted.
+ // 2Pi = 6.2831853, Pi = 3.1415927
+ if (ang2 > 6.282 + this.startAngle) {
+ ang2 = 6.282 + this.startAngle;
+ if (ang1 > ang2) {
+ ang1 = 6.281 + this.startAngle;
+ }
+ }
+ // Fix for IE, where it can't seem to handle 0 degree angles. Also avoids
+ // ugly line on unfilled pies.
+ if (ang1 >= ang2) {
+ return;
+ }
+
+ ctx.beginPath();
+ ctx.fillStyle = color;
+ ctx.strokeStyle = color;
+ ctx.lineWidth = lineWidth;
+ ctx.arc(0, 0, rad, ang1, ang2, false);
+ ctx.lineTo(0,0);
+ ctx.closePath();
+
+ if (fill) {
+ ctx.fill();
+ }
+ else {
+ ctx.stroke();
+ }
+ }
+ };
+
+ // called with scope of series
+ $.jqplot.PieRenderer.prototype.draw = function (ctx, gd, options, plot) {
+ var i;
+ var opts = (options != undefined) ? options : {};
+ // offset and direction of offset due to legend placement
+ var offx = 0;
+ var offy = 0;
+ var trans = 1;
+ var colorGenerator = new $.jqplot.ColorGenerator(this.seriesColors);
+ if (options.legendInfo && options.legendInfo.placement == 'insideGrid') {
+ var li = options.legendInfo;
+ switch (li.location) {
+ case 'nw':
+ offx = li.width + li.xoffset;
+ break;
+ case 'w':
+ offx = li.width + li.xoffset;
+ break;
+ case 'sw':
+ offx = li.width + li.xoffset;
+ break;
+ case 'ne':
+ offx = li.width + li.xoffset;
+ trans = -1;
+ break;
+ case 'e':
+ offx = li.width + li.xoffset;
+ trans = -1;
+ break;
+ case 'se':
+ offx = li.width + li.xoffset;
+ trans = -1;
+ break;
+ case 'n':
+ offy = li.height + li.yoffset;
+ break;
+ case 's':
+ offy = li.height + li.yoffset;
+ trans = -1;
+ break;
+ default:
+ break;
+ }
+ }
+
+ var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
+ var fill = (opts.fill != undefined) ? opts.fill : this.fill;
+ var cw = ctx.canvas.width;
+ var ch = ctx.canvas.height;
+ var w = cw - offx - 2 * this.padding;
+ var h = ch - offy - 2 * this.padding;
+ var mindim = Math.min(w,h);
+ var d = mindim;
+
+ // Fixes issue #272. Thanks hugwijst!
+ // reset slice angles array.
+ this._sliceAngles = [];
+
+ var sm = this.sliceMargin;
+ if (this.fill == false) {
+ sm += this.lineWidth;
+ }
+
+ var rprime;
+ var maxrprime = 0;
+
+ var ang, ang1, ang2, shadowColor;
+ var sa = this.startAngle / 180 * Math.PI;
+
+ // have to pre-draw shadows, so loop throgh here and calculate some values also.
+ for (var i=0, l=gd.length; i<l; i++) {
+ ang1 = (i == 0) ? sa : gd[i-1][1] + sa;
+ ang2 = gd[i][1] + sa;
+
+ this._sliceAngles.push([ang1, ang2]);
+
+ rprime = calcRPrime(ang1, ang2, this.sliceMargin, this.fill, this.lineWidth);
+
+ if (Math.abs(ang2-ang1) > Math.PI) {
+ maxrprime = Math.max(rprime, maxrprime);
+ }
+ }
+
+ if (this.diameter != null && this.diameter > 0) {
+ this._diameter = this.diameter - 2*maxrprime;
+ }
+ else {
+ this._diameter = d - 2*maxrprime;
+ }
+
+ // Need to check for undersized pie. This can happen if
+ // plot area too small and legend is too big.
+ if (this._diameter < 6) {
+ $.jqplot.log('Diameter of pie too small, not rendering.');
+ return;
+ }
+
+ var r = this._radius = this._diameter/2;
+
+ this._center = [(cw - trans * offx)/2 + trans * offx + maxrprime * Math.cos(sa), (ch - trans*offy)/2 + trans * offy + maxrprime * Math.sin(sa)];
+
+ if (this.shadow) {
+ for (var i=0, l=gd.length; i<l; i++) {
+ shadowColor = 'rgba(0,0,0,'+this.shadowAlpha+')';
+ this.renderer.drawSlice.call (this, ctx, this._sliceAngles[i][0], this._sliceAngles[i][1], shadowColor, true);
+ }
+ }
+
+ for (var i=0; i<gd.length; i++) {
+
+ this.renderer.drawSlice.call (this, ctx, this._sliceAngles[i][0], this._sliceAngles[i][1], colorGenerator.next(), false);
+
+ if (this.showDataLabels && gd[i][2]*100 >= this.dataLabelThreshold) {
+ var fstr, avgang = (this._sliceAngles[i][0] + this._sliceAngles[i][1])/2, label;
+
+ if (this.dataLabels == 'label') {
+ fstr = this.dataLabelFormatString || '%s';
+ label = $.jqplot.sprintf(fstr, gd[i][0]);
+ }
+ else if (this.dataLabels == 'value') {
+ fstr = this.dataLabelFormatString || '%d';
+ label = $.jqplot.sprintf(fstr, this.data[i][1]);
+ }
+ else if (this.dataLabels == 'percent') {
+ fstr = this.dataLabelFormatString || '%d%%';
+ label = $.jqplot.sprintf(fstr, gd[i][2]*100);
+ }
+ else if (this.dataLabels.constructor == Array) {
+ fstr = this.dataLabelFormatString || '%s';
+ label = $.jqplot.sprintf(fstr, this.dataLabels[i]);
+ }
+
+ var fact = (this._radius ) * this.dataLabelPositionFactor + this.sliceMargin + this.dataLabelNudge;
+
+ var x = this._center[0] + Math.cos(avgang) * fact + this.canvas._offsets.left;
+ var y = this._center[1] + Math.sin(avgang) * fact + this.canvas._offsets.top;
+
+ var labelelem = $('<div class="jqplot-pie-series jqplot-data-label" style="position:absolute;">' + label + '</div>').insertBefore(plot.eventCanvas._elem);
+ if (this.dataLabelCenterOn) {
+ x -= labelelem.width()/2;
+ y -= labelelem.height()/2;
+ }
+ else {
+ x -= labelelem.width() * Math.sin(avgang/2);
+ y -= labelelem.height()/2;
+ }
+ x = Math.round(x);
+ y = Math.round(y);
+ labelelem.css({left: x, top: y});
+ }
+ }
+ };
+
+ $.jqplot.PieAxisRenderer = function() {
+ $.jqplot.LinearAxisRenderer.call(this);
+ };
+
+ $.jqplot.PieAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
+ $.jqplot.PieAxisRenderer.prototype.constructor = $.jqplot.PieAxisRenderer;
+
+
+ // There are no traditional axes on a pie chart. We just need to provide
+ // dummy objects with properties so the plot will render.
+ // called with scope of axis object.
+ $.jqplot.PieAxisRenderer.prototype.init = function(options){
+ //
+ this.tickRenderer = $.jqplot.PieTickRenderer;
+ $.extend(true, this, options);
+ // I don't think I'm going to need _dataBounds here.
+ // have to go Axis scaling in a way to fit chart onto plot area
+ // and provide u2p and p2u functionality for mouse cursor, etc.
+ // for convienence set _dataBounds to 0 and 100 and
+ // set min/max to 0 and 100.
+ this._dataBounds = {min:0, max:100};
+ this.min = 0;
+ this.max = 100;
+ this.showTicks = false;
+ this.ticks = [];
+ this.showMark = false;
+ this.show = false;
+ };
+
+
+
+
+ $.jqplot.PieLegendRenderer = function(){
+ $.jqplot.TableLegendRenderer.call(this);
+ };
+
+ $.jqplot.PieLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
+ $.jqplot.PieLegendRenderer.prototype.constructor = $.jqplot.PieLegendRenderer;
+
+ /**
+ * Class: $.jqplot.PieLegendRenderer
+ * Legend Renderer specific to pie plots. Set by default
+ * when user creates a pie plot.
+ */
+ $.jqplot.PieLegendRenderer.prototype.init = function(options) {
+ // Group: Properties
+ //
+ // prop: numberRows
+ // Maximum number of rows in the legend. 0 or null for unlimited.
+ this.numberRows = null;
+ // prop: numberColumns
+ // Maximum number of columns in the legend. 0 or null for unlimited.
+ this.numberColumns = null;
+ $.extend(true, this, options);
+ };
+
+ // called with context of legend
+ $.jqplot.PieLegendRenderer.prototype.draw = function() {
+ var legend = this;
+ if (this.show) {
+ var series = this._series;
+
+
+ this._elem = $(document.createElement('table'));
+ this._elem.addClass('jqplot-table-legend');
+
+ var ss = {position:'absolute'};
+ if (this.background) {
+ ss['background'] = this.background;
+ }
+ if (this.border) {
+ ss['border'] = this.border;
+ }
+ if (this.fontSize) {
+ ss['fontSize'] = this.fontSize;
+ }
+ if (this.fontFamily) {
+ ss['fontFamily'] = this.fontFamily;
+ }
+ if (this.textColor) {
+ ss['textColor'] = this.textColor;
+ }
+ if (this.marginTop != null) {
+ ss['marginTop'] = this.marginTop;
+ }
+ if (this.marginBottom != null) {
+ ss['marginBottom'] = this.marginBottom;
+ }
+ if (this.marginLeft != null) {
+ ss['marginLeft'] = this.marginLeft;
+ }
+ if (this.marginRight != null) {
+ ss['marginRight'] = this.marginRight;
+ }
+
+ this._elem.css(ss);
+
+ // Pie charts legends don't go by number of series, but by number of data points
+ // in the series. Refactor things here for that.
+
+ var pad = false,
+ reverse = false,
+ nr,
+ nc;
+ var s = series[0];
+ var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors);
+
+ if (s.show) {
+ var pd = s.data;
+ if (this.numberRows) {
+ nr = this.numberRows;
+ if (!this.numberColumns){
+ nc = Math.ceil(pd.length/nr);
+ }
+ else{
+ nc = this.numberColumns;
+ }
+ }
+ else if (this.numberColumns) {
+ nc = this.numberColumns;
+ nr = Math.ceil(pd.length/this.numberColumns);
+ }
+ else {
+ nr = pd.length;
+ nc = 1;
+ }
+
+ var i, j;
+ var tr, td1, td2;
+ var lt, rs, color;
+ var idx = 0;
+ var div0, div1;
+
+ for (i=0; i<nr; i++) {
+ tr = $(document.createElement('tr'));
+ tr.addClass('jqplot-table-legend');
+
+ if (reverse){
+ tr.prependTo(this._elem);
+ }
+
+ else{
+ tr.appendTo(this._elem);
+ }
+
+ for (j=0; j<nc; j++) {
+ if (idx < pd.length){
+ lt = this.labels[idx] || pd[idx][0].toString();
+ color = colorGenerator.next();
+ if (!reverse){
+ if (i>0){
+ pad = true;
+ }
+ else{
+ pad = false;
+ }
+ }
+ else{
+ if (i == nr -1){
+ pad = false;
+ }
+ else{
+ pad = true;
+ }
+ }
+ rs = (pad) ? this.rowSpacing : '0';
+
+
+
+ td1 = $(document.createElement('td'));
+ td1.addClass('jqplot-table-legend jqplot-table-legend-swatch');
+ td1.css({textAlign: 'center', paddingTop: rs});
+
+ div0 = $(document.createElement('div'));
+ div0.addClass('jqplot-table-legend-swatch-outline');
+ div1 = $(document.createElement('div'));
+ div1.addClass('jqplot-table-legend-swatch');
+ div1.css({backgroundColor: color, borderColor: color});
+ td1.append(div0.append(div1));
+
+ td2 = $(document.createElement('td'));
+ td2.addClass('jqplot-table-legend jqplot-table-legend-label');
+ td2.css('paddingTop', rs);
+
+ if (this.escapeHtml){
+ td2.text(lt);
+ }
+ else {
+ td2.html(lt);
+ }
+ if (reverse) {
+ td2.prependTo(tr);
+ td1.prependTo(tr);
+ }
+ else {
+ td1.appendTo(tr);
+ td2.appendTo(tr);
+ }
+ pad = true;
+ }
+ idx++;
+ }
+ }
+ }
+ }
+ return this._elem;
+ };
+
+ $.jqplot.PieRenderer.prototype.handleMove = function(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ plot.target.trigger('jqplotDataMouseOver', ins);
+ if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.pieRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
+ plot.target.trigger('jqplotDataHighlight', ins);
+ highlight (plot, ins[0], ins[1]);
+ }
+ }
+ else if (neighbor == null) {
+ unhighlight (plot);
+ }
+ };
+
+
+ // this.eventCanvas._elem.bind($.jqplot.eventListenerHooks[i][0], {plot:this}, $.jqplot.eventListenerHooks[i][1]);
+
+ // setup default renderers for axes and legend so user doesn't have to
+ // called with scope of plot
+ function preInit(target, data, options) {
+ options = options || {};
+ options.axesDefaults = options.axesDefaults || {};
+ options.legend = options.legend || {};
+ options.seriesDefaults = options.seriesDefaults || {};
+ // only set these if there is a pie series
+ var setopts = false;
+ if (options.seriesDefaults.renderer == $.jqplot.PieRenderer) {
+ setopts = true;
+ }
+ else if (options.series) {
+ for (var i=0; i < options.series.length; i++) {
+ if (options.series[i].renderer == $.jqplot.PieRenderer) {
+ setopts = true;
+ }
+ }
+ }
+
+ if (setopts) {
+ options.axesDefaults.renderer = $.jqplot.PieAxisRenderer;
+ options.legend.renderer = $.jqplot.PieLegendRenderer;
+ options.legend.preDraw = true;
+ options.seriesDefaults.pointLabels = {show: false};
+ }
+ }
+
+ function postInit(target, data, options) {
+ for (var i=0; i<this.series.length; i++) {
+ if (this.series[i].renderer.constructor == $.jqplot.PieRenderer) {
+ // don't allow mouseover and mousedown at same time.
+ if (this.series[i].highlightMouseOver) {
+ this.series[i].highlightMouseDown = false;
+ }
+ }
+ }
+ }
+
+ // called with scope of plot
+ function postParseOptions(options) {
+ for (var i=0; i<this.series.length; i++) {
+ this.series[i].seriesColors = this.seriesColors;
+ this.series[i].colorGenerator = $.jqplot.colorGenerator;
+ }
+ }
+
+ function highlight (plot, sidx, pidx) {
+ var s = plot.series[sidx];
+ var canvas = plot.plugins.pieRenderer.highlightCanvas;
+ canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height);
+ s._highlightedPoint = pidx;
+ plot.plugins.pieRenderer.highlightedSeriesIndex = sidx;
+ s.renderer.drawSlice.call(s, canvas._ctx, s._sliceAngles[pidx][0], s._sliceAngles[pidx][1], s.highlightColorGenerator.get(pidx), false);
+ }
+
+ function unhighlight (plot) {
+ var canvas = plot.plugins.pieRenderer.highlightCanvas;
+ canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
+ for (var i=0; i<plot.series.length; i++) {
+ plot.series[i]._highlightedPoint = null;
+ }
+ plot.plugins.pieRenderer.highlightedSeriesIndex = null;
+ plot.target.trigger('jqplotDataUnhighlight');
+ }
+
+ function handleMove(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ var evt1 = jQuery.Event('jqplotDataMouseOver');
+ evt1.pageX = ev.pageX;
+ evt1.pageY = ev.pageY;
+ plot.target.trigger(evt1, ins);
+ if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.pieRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
+ var evt = jQuery.Event('jqplotDataHighlight');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ highlight (plot, ins[0], ins[1]);
+ }
+ }
+ else if (neighbor == null) {
+ unhighlight (plot);
+ }
+ }
+
+ function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.pieRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
+ var evt = jQuery.Event('jqplotDataHighlight');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ highlight (plot, ins[0], ins[1]);
+ }
+ }
+ else if (neighbor == null) {
+ unhighlight (plot);
+ }
+ }
+
+ function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
+ var idx = plot.plugins.pieRenderer.highlightedSeriesIndex;
+ if (idx != null && plot.series[idx].highlightMouseDown) {
+ unhighlight(plot);
+ }
+ }
+
+ function handleClick(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ var evt = jQuery.Event('jqplotDataClick');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ }
+ }
+
+ function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ var idx = plot.plugins.pieRenderer.highlightedSeriesIndex;
+ if (idx != null && plot.series[idx].highlightMouseDown) {
+ unhighlight(plot);
+ }
+ var evt = jQuery.Event('jqplotDataRightClick');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ }
+ }
+
+ // called within context of plot
+ // create a canvas which we can draw on.
+ // insert it before the eventCanvas, so eventCanvas will still capture events.
+ function postPlotDraw() {
+ // Memory Leaks patch
+ if (this.plugins.pieRenderer && this.plugins.pieRenderer.highlightCanvas) {
+ this.plugins.pieRenderer.highlightCanvas.resetCanvas();
+ this.plugins.pieRenderer.highlightCanvas = null;
+ }
+
+ this.plugins.pieRenderer = {highlightedSeriesIndex:null};
+ this.plugins.pieRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
+
+ // do we have any data labels? if so, put highlight canvas before those
+ var labels = $(this.targetId+' .jqplot-data-label');
+ if (labels.length) {
+ $(labels[0]).before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-pieRenderer-highlight-canvas', this._plotDimensions, this));
+ }
+ // else put highlight canvas before event canvas.
+ else {
+ this.eventCanvas._elem.before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-pieRenderer-highlight-canvas', this._plotDimensions, this));
+ }
+
+ var hctx = this.plugins.pieRenderer.highlightCanvas.setContext();
+ this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); });
+ }
+
+ $.jqplot.preInitHooks.push(preInit);
+
+ $.jqplot.PieTickRenderer = function() {
+ $.jqplot.AxisTickRenderer.call(this);
+ };
+
+ $.jqplot.PieTickRenderer.prototype = new $.jqplot.AxisTickRenderer();
+ $.jqplot.PieTickRenderer.prototype.constructor = $.jqplot.PieTickRenderer;
+
+})(jQuery);
+
+ \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.min.js
new file mode 100644
index 00000000..94759168
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(e){e.jqplot.PieRenderer=function(){e.jqplot.LineRenderer.call(this)};e.jqplot.PieRenderer.prototype=new e.jqplot.LineRenderer();e.jqplot.PieRenderer.prototype.constructor=e.jqplot.PieRenderer;e.jqplot.PieRenderer.prototype.init=function(q,u){this.diameter=null;this.padding=20;this.sliceMargin=0;this.fill=true;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=5;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.dataLabels="percent";this.showDataLabels=false;this.dataLabelFormatString=null;this.dataLabelThreshold=3;this.dataLabelPositionFactor=0.52;this.dataLabelNudge=2;this.dataLabelCenterOn=true;this.startAngle=0;this.tickRenderer=e.jqplot.PieTickRenderer;this._drawData=true;this._type="pie";if(q.highlightMouseDown&&q.highlightMouseOver==null){q.highlightMouseOver=false}e.extend(true,this,q);if(this.sliceMargin<0){this.sliceMargin=0}this._diameter=null;this._radius=null;this._sliceAngles=[];this._highlightedPoint=null;if(this.highlightColors.length==0){for(var s=0;s<this.seriesColors.length;s++){var r=e.jqplot.getColorComponents(this.seriesColors[s]);var o=[r[0],r[1],r[2]];var t=o[0]+o[1]+o[2];for(var p=0;p<3;p++){o[p]=(t>570)?o[p]*0.8:o[p]+0.3*(255-o[p]);o[p]=parseInt(o[p],10)}this.highlightColors.push("rgb("+o[0]+","+o[1]+","+o[2]+")")}}this.highlightColorGenerator=new e.jqplot.ColorGenerator(this.highlightColors);u.postParseOptionsHooks.addOnce(m);u.postInitHooks.addOnce(g);u.eventListenerHooks.addOnce("jqplotMouseMove",b);u.eventListenerHooks.addOnce("jqplotMouseDown",a);u.eventListenerHooks.addOnce("jqplotMouseUp",l);u.eventListenerHooks.addOnce("jqplotClick",f);u.eventListenerHooks.addOnce("jqplotRightClick",n);u.postDrawHooks.addOnce(i)};e.jqplot.PieRenderer.prototype.setGridData=function(t){var p=[];var u=[];var o=this.startAngle/180*Math.PI;var s=0;this._drawData=false;for(var r=0;r<this.data.length;r++){if(this.data[r][1]!=0){this._drawData=true}p.push(this.data[r][1]);u.push([this.data[r][0]]);if(r>0){p[r]+=p[r-1]}s+=this.data[r][1]}var q=Math.PI*2/p[p.length-1];for(var r=0;r<p.length;r++){u[r][1]=p[r]*q;u[r][2]=this.data[r][1]/s}this.gridData=u};e.jqplot.PieRenderer.prototype.makeGridData=function(t,u){var p=[];var v=[];var s=0;var o=this.startAngle/180*Math.PI;this._drawData=false;for(var r=0;r<t.length;r++){if(this.data[r][1]!=0){this._drawData=true}p.push(t[r][1]);v.push([t[r][0]]);if(r>0){p[r]+=p[r-1]}s+=t[r][1]}var q=Math.PI*2/p[p.length-1];for(var r=0;r<p.length;r++){v[r][1]=p[r]*q;v[r][2]=t[r][1]/s}return v};function h(o){return Math.sin((o-(o-Math.PI)/8/Math.PI)/2)}function j(u,t,o,v,r){var w=0;var q=t-u;var s=Math.abs(q);var p=o;if(v==false){p+=r}if(p>0&&s>0.01&&s<6.282){w=parseFloat(p)/2/h(q)}return w}e.jqplot.PieRenderer.prototype.drawSlice=function(B,z,y,u,w){if(this._drawData){var p=this._radius;var A=this.fill;var x=this.lineWidth;var s=this.sliceMargin;if(this.fill==false){s+=this.lineWidth}B.save();B.translate(this._center[0],this._center[1]);var D=j(z,y,this.sliceMargin,this.fill,this.lineWidth);var o=D*Math.cos((z+y)/2);var C=D*Math.sin((z+y)/2);if((y-z)<=Math.PI){p-=D}else{p+=D}B.translate(o,C);if(w){for(var v=0,t=this.shadowDepth;v<t;v++){B.save();B.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));q(p)}for(var v=0,t=this.shadowDepth;v<t;v++){B.restore()}}else{q(p)}B.restore()}function q(r){if(y>6.282+this.startAngle){y=6.282+this.startAngle;if(z>y){z=6.281+this.startAngle}}if(z>=y){return}B.beginPath();B.fillStyle=u;B.strokeStyle=u;B.lineWidth=x;B.arc(0,0,r,z,y,false);B.lineTo(0,0);B.closePath();if(A){B.fill()}else{B.stroke()}}};e.jqplot.PieRenderer.prototype.draw=function(B,z,E,o){var W;var H=(E!=undefined)?E:{};var t=0;var s=0;var N=1;var L=new e.jqplot.ColorGenerator(this.seriesColors);if(E.legendInfo&&E.legendInfo.placement=="insideGrid"){var J=E.legendInfo;switch(J.location){case"nw":t=J.width+J.xoffset;break;case"w":t=J.width+J.xoffset;break;case"sw":t=J.width+J.xoffset;break;case"ne":t=J.width+J.xoffset;N=-1;break;case"e":t=J.width+J.xoffset;N=-1;break;case"se":t=J.width+J.xoffset;N=-1;break;case"n":s=J.height+J.yoffset;break;case"s":s=J.height+J.yoffset;N=-1;break;default:break}}var K=(H.shadow!=undefined)?H.shadow:this.shadow;var A=(H.fill!=undefined)?H.fill:this.fill;var C=B.canvas.width;var I=B.canvas.height;var Q=C-t-2*this.padding;var X=I-s-2*this.padding;var M=Math.min(Q,X);var Y=M;this._sliceAngles=[];var v=this.sliceMargin;if(this.fill==false){v+=this.lineWidth}var q;var G=0;var R,aa,Z,ab;var D=this.startAngle/180*Math.PI;for(var W=0,V=z.length;W<V;W++){aa=(W==0)?D:z[W-1][1]+D;Z=z[W][1]+D;this._sliceAngles.push([aa,Z]);q=j(aa,Z,this.sliceMargin,this.fill,this.lineWidth);if(Math.abs(Z-aa)>Math.PI){G=Math.max(q,G)}}if(this.diameter!=null&&this.diameter>0){this._diameter=this.diameter-2*G}else{this._diameter=Y-2*G}if(this._diameter<6){e.jqplot.log("Diameter of pie too small, not rendering.");return}var S=this._radius=this._diameter/2;this._center=[(C-N*t)/2+N*t+G*Math.cos(D),(I-N*s)/2+N*s+G*Math.sin(D)];if(this.shadow){for(var W=0,V=z.length;W<V;W++){ab="rgba(0,0,0,"+this.shadowAlpha+")";this.renderer.drawSlice.call(this,B,this._sliceAngles[W][0],this._sliceAngles[W][1],ab,true)}}for(var W=0;W<z.length;W++){this.renderer.drawSlice.call(this,B,this._sliceAngles[W][0],this._sliceAngles[W][1],L.next(),false);if(this.showDataLabels&&z[W][2]*100>=this.dataLabelThreshold){var F,U=(this._sliceAngles[W][0]+this._sliceAngles[W][1])/2,T;if(this.dataLabels=="label"){F=this.dataLabelFormatString||"%s";T=e.jqplot.sprintf(F,z[W][0])}else{if(this.dataLabels=="value"){F=this.dataLabelFormatString||"%d";T=e.jqplot.sprintf(F,this.data[W][1])}else{if(this.dataLabels=="percent"){F=this.dataLabelFormatString||"%d%%";T=e.jqplot.sprintf(F,z[W][2]*100)}else{if(this.dataLabels.constructor==Array){F=this.dataLabelFormatString||"%s";T=e.jqplot.sprintf(F,this.dataLabels[W])}}}}var p=(this._radius)*this.dataLabelPositionFactor+this.sliceMargin+this.dataLabelNudge;var P=this._center[0]+Math.cos(U)*p+this.canvas._offsets.left;var O=this._center[1]+Math.sin(U)*p+this.canvas._offsets.top;var u=e('<div class="jqplot-pie-series jqplot-data-label" style="position:absolute;">'+T+"</div>").insertBefore(o.eventCanvas._elem);if(this.dataLabelCenterOn){P-=u.width()/2;O-=u.height()/2}else{P-=u.width()*Math.sin(U/2);O-=u.height()/2}P=Math.round(P);O=Math.round(O);u.css({left:P,top:O})}}};e.jqplot.PieAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.PieAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.PieAxisRenderer.prototype.constructor=e.jqplot.PieAxisRenderer;e.jqplot.PieAxisRenderer.prototype.init=function(o){this.tickRenderer=e.jqplot.PieTickRenderer;e.extend(true,this,o);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};e.jqplot.PieLegendRenderer=function(){e.jqplot.TableLegendRenderer.call(this)};e.jqplot.PieLegendRenderer.prototype=new e.jqplot.TableLegendRenderer();e.jqplot.PieLegendRenderer.prototype.constructor=e.jqplot.PieLegendRenderer;e.jqplot.PieLegendRenderer.prototype.init=function(o){this.numberRows=null;this.numberColumns=null;e.extend(true,this,o)};e.jqplot.PieLegendRenderer.prototype.draw=function(){var r=this;if(this.show){var B=this._series;this._elem=e(document.createElement("table"));this._elem.addClass("jqplot-table-legend");var E={position:"absolute"};if(this.background){E.background=this.background}if(this.border){E.border=this.border}if(this.fontSize){E.fontSize=this.fontSize}if(this.fontFamily){E.fontFamily=this.fontFamily}if(this.textColor){E.textColor=this.textColor}if(this.marginTop!=null){E.marginTop=this.marginTop}if(this.marginBottom!=null){E.marginBottom=this.marginBottom}if(this.marginLeft!=null){E.marginLeft=this.marginLeft}if(this.marginRight!=null){E.marginRight=this.marginRight}this._elem.css(E);var I=false,A=false,o,y;var C=B[0];var p=new e.jqplot.ColorGenerator(C.seriesColors);if(C.show){var J=C.data;if(this.numberRows){o=this.numberRows;if(!this.numberColumns){y=Math.ceil(J.length/o)}else{y=this.numberColumns}}else{if(this.numberColumns){y=this.numberColumns;o=Math.ceil(J.length/this.numberColumns)}else{o=J.length;y=1}}var H,G;var q,w,v;var x,z,F;var D=0;var u,t;for(H=0;H<o;H++){q=e(document.createElement("tr"));q.addClass("jqplot-table-legend");if(A){q.prependTo(this._elem)}else{q.appendTo(this._elem)}for(G=0;G<y;G++){if(D<J.length){x=this.labels[D]||J[D][0].toString();F=p.next();if(!A){if(H>0){I=true}else{I=false}}else{if(H==o-1){I=false}else{I=true}}z=(I)?this.rowSpacing:"0";w=e(document.createElement("td"));w.addClass("jqplot-table-legend jqplot-table-legend-swatch");w.css({textAlign:"center",paddingTop:z});u=e(document.createElement("div"));u.addClass("jqplot-table-legend-swatch-outline");t=e(document.createElement("div"));t.addClass("jqplot-table-legend-swatch");t.css({backgroundColor:F,borderColor:F});w.append(u.append(t));v=e(document.createElement("td"));v.addClass("jqplot-table-legend jqplot-table-legend-label");v.css("paddingTop",z);if(this.escapeHtml){v.text(x)}else{v.html(x)}if(A){v.prependTo(q);w.prependTo(q)}else{w.appendTo(q);v.appendTo(q)}I=true}D++}}}}return this._elem};e.jqplot.PieRenderer.prototype.handleMove=function(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];r.target.trigger("jqplotDataMouseOver",o);if(r.series[o[0]].highlightMouseOver&&!(o[0]==r.plugins.pieRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){r.target.trigger("jqplotDataHighlight",o);d(r,o[0],o[1])}}else{if(s==null){k(r)}}};function c(s,r,p){p=p||{};p.axesDefaults=p.axesDefaults||{};p.legend=p.legend||{};p.seriesDefaults=p.seriesDefaults||{};var o=false;if(p.seriesDefaults.renderer==e.jqplot.PieRenderer){o=true}else{if(p.series){for(var q=0;q<p.series.length;q++){if(p.series[q].renderer==e.jqplot.PieRenderer){o=true}}}}if(o){p.axesDefaults.renderer=e.jqplot.PieAxisRenderer;p.legend.renderer=e.jqplot.PieLegendRenderer;p.legend.preDraw=true;p.seriesDefaults.pointLabels={show:false}}}function g(r,q,o){for(var p=0;p<this.series.length;p++){if(this.series[p].renderer.constructor==e.jqplot.PieRenderer){if(this.series[p].highlightMouseOver){this.series[p].highlightMouseDown=false}}}}function m(o){for(var p=0;p<this.series.length;p++){this.series[p].seriesColors=this.seriesColors;this.series[p].colorGenerator=e.jqplot.colorGenerator}}function d(t,r,q){var p=t.series[r];var o=t.plugins.pieRenderer.highlightCanvas;o._ctx.clearRect(0,0,o._ctx.canvas.width,o._ctx.canvas.height);p._highlightedPoint=q;t.plugins.pieRenderer.highlightedSeriesIndex=r;p.renderer.drawSlice.call(p,o._ctx,p._sliceAngles[q][0],p._sliceAngles[q][1],p.highlightColorGenerator.get(q),false)}function k(q){var o=q.plugins.pieRenderer.highlightCanvas;o._ctx.clearRect(0,0,o._ctx.canvas.width,o._ctx.canvas.height);for(var p=0;p<q.series.length;p++){q.series[p]._highlightedPoint=null}q.plugins.pieRenderer.highlightedSeriesIndex=null;q.target.trigger("jqplotDataUnhighlight")}function b(s,r,v,u,t){if(u){var q=[u.seriesIndex,u.pointIndex,u.data];var p=jQuery.Event("jqplotDataMouseOver");p.pageX=s.pageX;p.pageY=s.pageY;t.target.trigger(p,q);if(t.series[q[0]].highlightMouseOver&&!(q[0]==t.plugins.pieRenderer.highlightedSeriesIndex&&q[1]==t.series[q[0]]._highlightedPoint)){var o=jQuery.Event("jqplotDataHighlight");o.which=s.which;o.pageX=s.pageX;o.pageY=s.pageY;t.target.trigger(o,q);d(t,q[0],q[1])}}else{if(u==null){k(t)}}}function a(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];if(s.series[p[0]].highlightMouseDown&&!(p[0]==s.plugins.pieRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var o=jQuery.Event("jqplotDataHighlight");o.which=r.which;o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);d(s,p[0],p[1])}}else{if(t==null){k(s)}}}function l(q,p,t,s,r){var o=r.plugins.pieRenderer.highlightedSeriesIndex;if(o!=null&&r.series[o].highlightMouseDown){k(r)}}function f(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataClick");o.which=r.which;o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}function n(s,r,v,u,t){if(u){var q=[u.seriesIndex,u.pointIndex,u.data];var o=t.plugins.pieRenderer.highlightedSeriesIndex;if(o!=null&&t.series[o].highlightMouseDown){k(t)}var p=jQuery.Event("jqplotDataRightClick");p.which=s.which;p.pageX=s.pageX;p.pageY=s.pageY;t.target.trigger(p,q)}}function i(){if(this.plugins.pieRenderer&&this.plugins.pieRenderer.highlightCanvas){this.plugins.pieRenderer.highlightCanvas.resetCanvas();this.plugins.pieRenderer.highlightCanvas=null}this.plugins.pieRenderer={highlightedSeriesIndex:null};this.plugins.pieRenderer.highlightCanvas=new e.jqplot.GenericCanvas();var p=e(this.targetId+" .jqplot-data-label");if(p.length){e(p[0]).before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-pieRenderer-highlight-canvas",this._plotDimensions,this))}else{this.eventCanvas._elem.before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-pieRenderer-highlight-canvas",this._plotDimensions,this))}var o=this.plugins.pieRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(q){k(q.data.plot)})}e.jqplot.preInitHooks.push(c);e.jqplot.PieTickRenderer=function(){e.jqplot.AxisTickRenderer.call(this)};e.jqplot.PieTickRenderer.prototype=new e.jqplot.AxisTickRenderer();e.jqplot.PieTickRenderer.prototype.constructor=e.jqplot.PieTickRenderer})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.js
new file mode 100644
index 00000000..c20a9c44
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.js
@@ -0,0 +1,379 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+
+ /**
+ * Class: $.jqplot.PointLabels
+ * Plugin for putting labels at the data points.
+ *
+ * To use this plugin, include the js
+ * file in your source:
+ *
+ * > <script type="text/javascript" src="plugins/jqplot.pointLabels.js"></script>
+ *
+ * By default, the last value in the data ponit array in the data series is used
+ * for the label. For most series renderers, extra data can be added to the
+ * data point arrays and the last value will be used as the label.
+ *
+ * For instance,
+ * this series:
+ *
+ * > [[1,4], [3,5], [7,2]]
+ *
+ * Would, by default, use the y values in the labels.
+ * Extra data can be added to the series like so:
+ *
+ * > [[1,4,'mid'], [3 5,'hi'], [7,2,'low']]
+ *
+ * And now the point labels would be 'mid', 'low', and 'hi'.
+ *
+ * Options to the point labels and a custom labels array can be passed into the
+ * "pointLabels" option on the series option like so:
+ *
+ * > series:[{pointLabels:{
+ * > labels:['mid', 'hi', 'low'],
+ * > location:'se',
+ * > ypadding: 12
+ * > }
+ * > }]
+ *
+ * A custom labels array in the options takes precendence over any labels
+ * in the series data. If you have a custom labels array in the options,
+ * but still want to use values from the series array as labels, set the
+ * "labelsFromSeries" option to true.
+ *
+ * By default, html entities (<, >, etc.) are escaped in point labels.
+ * If you want to include actual html markup in the labels,
+ * set the "escapeHTML" option to false.
+ *
+ */
+ $.jqplot.PointLabels = function(options) {
+ // Group: Properties
+ //
+ // prop: show
+ // show the labels or not.
+ this.show = $.jqplot.config.enablePlugins;
+ // prop: location
+ // compass location where to position the label around the point.
+ // 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'
+ this.location = 'n';
+ // prop: labelsFromSeries
+ // true to use labels within data point arrays.
+ this.labelsFromSeries = false;
+ // prop: seriesLabelIndex
+ // array index for location of labels within data point arrays.
+ // if null, will use the last element of the data point array.
+ this.seriesLabelIndex = null;
+ // prop: labels
+ // array of arrays of labels, one array for each series.
+ this.labels = [];
+ // actual labels that will get displayed.
+ // needed to preserve user specified labels in labels array.
+ this._labels = [];
+ // prop: stackedValue
+ // true to display value as stacked in a stacked plot.
+ // no effect if labels is specified.
+ this.stackedValue = false;
+ // prop: ypadding
+ // vertical padding in pixels between point and label
+ this.ypadding = 6;
+ // prop: xpadding
+ // horizontal padding in pixels between point and label
+ this.xpadding = 6;
+ // prop: escapeHTML
+ // true to escape html entities in the labels.
+ // If you want to include markup in the labels, set to false.
+ this.escapeHTML = true;
+ // prop: edgeTolerance
+ // Number of pixels that the label must be away from an axis
+ // boundary in order to be drawn. Negative values will allow overlap
+ // with the grid boundaries.
+ this.edgeTolerance = -5;
+ // prop: formatter
+ // A class of a formatter for the tick text. sprintf by default.
+ this.formatter = $.jqplot.DefaultTickFormatter;
+ // prop: formatString
+ // string passed to the formatter.
+ this.formatString = '';
+ // prop: hideZeros
+ // true to not show a label for a value which is 0.
+ this.hideZeros = false;
+ this._elems = [];
+
+ $.extend(true, this, options);
+ };
+
+ var locations = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'];
+ var locationIndicies = {'nw':0, 'n':1, 'ne':2, 'e':3, 'se':4, 's':5, 'sw':6, 'w':7};
+ var oppositeLocations = ['se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'];
+
+ // called with scope of a series
+ $.jqplot.PointLabels.init = function (target, data, seriesDefaults, opts, plot){
+ var options = $.extend(true, {}, seriesDefaults, opts);
+ options.pointLabels = options.pointLabels || {};
+ if (this.renderer.constructor === $.jqplot.BarRenderer && this.barDirection === 'horizontal' && !options.pointLabels.location) {
+ options.pointLabels.location = 'e';
+ }
+ // add a pointLabels attribute to the series plugins
+ this.plugins.pointLabels = new $.jqplot.PointLabels(options.pointLabels);
+ this.plugins.pointLabels.setLabels.call(this);
+ };
+
+ // called with scope of series
+ $.jqplot.PointLabels.prototype.setLabels = function() {
+ var p = this.plugins.pointLabels;
+ var labelIdx;
+ if (p.seriesLabelIndex != null) {
+ labelIdx = p.seriesLabelIndex;
+ }
+ else if (this.renderer.constructor === $.jqplot.BarRenderer && this.barDirection === 'horizontal') {
+ labelIdx = 0;
+ }
+ else {
+ labelIdx = (this._plotData.length === 0) ? 0 : this._plotData[0].length -1;
+ }
+ p._labels = [];
+ if (p.labels.length === 0 || p.labelsFromSeries) {
+ if (p.stackedValue) {
+ if (this._plotData.length && this._plotData[0].length){
+ // var idx = p.seriesLabelIndex || this._plotData[0].length -1;
+ for (var i=0; i<this._plotData.length; i++) {
+ p._labels.push(this._plotData[i][labelIdx]);
+ }
+ }
+ }
+ else {
+ // var d = this._plotData;
+ var d = this.data;
+ if (this.renderer.constructor === $.jqplot.BarRenderer && this.waterfall) {
+ d = this._data;
+ }
+ if (d.length && d[0].length) {
+ // var idx = p.seriesLabelIndex || d[0].length -1;
+ for (var i=0; i<d.length; i++) {
+ p._labels.push(d[i][labelIdx]);
+ }
+ }
+ d = null;
+ }
+ }
+ else if (p.labels.length){
+ p._labels = p.labels;
+ }
+ };
+
+ $.jqplot.PointLabels.prototype.xOffset = function(elem, location, padding) {
+ location = location || this.location;
+ padding = padding || this.xpadding;
+ var offset;
+
+ switch (location) {
+ case 'nw':
+ offset = -elem.outerWidth(true) - this.xpadding;
+ break;
+ case 'n':
+ offset = -elem.outerWidth(true)/2;
+ break;
+ case 'ne':
+ offset = this.xpadding;
+ break;
+ case 'e':
+ offset = this.xpadding;
+ break;
+ case 'se':
+ offset = this.xpadding;
+ break;
+ case 's':
+ offset = -elem.outerWidth(true)/2;
+ break;
+ case 'sw':
+ offset = -elem.outerWidth(true) - this.xpadding;
+ break;
+ case 'w':
+ offset = -elem.outerWidth(true) - this.xpadding;
+ break;
+ default: // same as 'nw'
+ offset = -elem.outerWidth(true) - this.xpadding;
+ break;
+ }
+ return offset;
+ };
+
+ $.jqplot.PointLabels.prototype.yOffset = function(elem, location, padding) {
+ location = location || this.location;
+ padding = padding || this.xpadding;
+ var offset;
+
+ switch (location) {
+ case 'nw':
+ offset = -elem.outerHeight(true) - this.ypadding;
+ break;
+ case 'n':
+ offset = -elem.outerHeight(true) - this.ypadding;
+ break;
+ case 'ne':
+ offset = -elem.outerHeight(true) - this.ypadding;
+ break;
+ case 'e':
+ offset = -elem.outerHeight(true)/2;
+ break;
+ case 'se':
+ offset = this.ypadding;
+ break;
+ case 's':
+ offset = this.ypadding;
+ break;
+ case 'sw':
+ offset = this.ypadding;
+ break;
+ case 'w':
+ offset = -elem.outerHeight(true)/2;
+ break;
+ default: // same as 'nw'
+ offset = -elem.outerHeight(true) - this.ypadding;
+ break;
+ }
+ return offset;
+ };
+
+ // called with scope of series
+ $.jqplot.PointLabels.draw = function (sctx, options, plot) {
+ var p = this.plugins.pointLabels;
+ // set labels again in case they have changed.
+ p.setLabels.call(this);
+ // remove any previous labels
+ for (var i=0; i<p._elems.length; i++) {
+ // Memory Leaks patch
+ // p._elems[i].remove();
+ p._elems[i].emptyForce();
+ }
+ p._elems.splice(0, p._elems.length);
+
+ if (p.show) {
+ var ax = '_'+this._stackAxis+'axis';
+
+ if (!p.formatString) {
+ p.formatString = this[ax]._ticks[0].formatString;
+ p.formatter = this[ax]._ticks[0].formatter;
+ }
+
+ var pd = this._plotData;
+ var ppd = this._prevPlotData;
+ var xax = this._xaxis;
+ var yax = this._yaxis;
+ var elem, helem;
+
+ for (var i=0, l=p._labels.length; i < l; i++) {
+ var label = p._labels[i];
+
+ if (p.hideZeros && parseInt(p._labels[i], 10) == 0) {
+ label = '';
+ }
+
+ if (label != null) {
+ label = p.formatter(p.formatString, label);
+ }
+
+ helem = document.createElement('div');
+ p._elems[i] = $(helem);
+
+ elem = p._elems[i];
+
+
+ elem.addClass('jqplot-point-label jqplot-series-'+this.index+' jqplot-point-'+i);
+ elem.css('position', 'absolute');
+ elem.insertAfter(sctx.canvas);
+
+ if (p.escapeHTML) {
+ elem.text(label);
+ }
+ else {
+ elem.html(label);
+ }
+ var location = p.location;
+ if ((this.fillToZero && pd[i][1] < 0) || (this.fillToZero && this._type === 'bar' && this.barDirection === 'horizontal' && pd[i][0] < 0) || (this.waterfall && parseInt(label, 10)) < 0) {
+ location = oppositeLocations[locationIndicies[location]];
+ }
+
+
+ var ell = xax.u2p(pd[i][0]) + p.xOffset(elem, location);
+ var elt = yax.u2p(pd[i][1]) + p.yOffset(elem, location);
+
+ // we have stacked chart but are not showing stacked values,
+ // place labels in center.
+ if (this._stack && !p.stackedValue) {
+ if (this.barDirection === "vertical") {
+ elt = (this._barPoints[i][0][1] + this._barPoints[i][1][1]) / 2 + plot._gridPadding.top - 0.5 * elem.outerHeight(true);
+ }
+ else {
+ ell = (this._barPoints[i][2][0] + this._barPoints[i][0][0]) / 2 + plot._gridPadding.left - 0.5 * elem.outerWidth(true);
+ }
+ }
+
+ if (this.renderer.constructor == $.jqplot.BarRenderer) {
+ if (this.barDirection == "vertical") {
+ ell += this._barNudge;
+ }
+ else {
+ elt -= this._barNudge;
+ }
+ }
+ elem.css('left', ell);
+ elem.css('top', elt);
+ var elr = ell + elem.width();
+ var elb = elt + elem.height();
+ var et = p.edgeTolerance;
+ var scl = $(sctx.canvas).position().left;
+ var sct = $(sctx.canvas).position().top;
+ var scr = sctx.canvas.width + scl;
+ var scb = sctx.canvas.height + sct;
+ // if label is outside of allowed area, remove it
+ if (ell - et < scl || elt - et < sct || elr + et > scr || elb + et > scb) {
+ elem.remove();
+ }
+
+ elem = null;
+ helem = null;
+ }
+
+ // finally, animate them if the series is animated
+ // if (this.renderer.animation && this.renderer.animation._supported && this.renderer.animation.show && plot._drawCount < 2) {
+ // var sel = '.jqplot-point-label.jqplot-series-'+this.index;
+ // $(sel).hide();
+ // $(sel).fadeIn(1000);
+ // }
+
+ }
+ };
+
+ $.jqplot.postSeriesInitHooks.push($.jqplot.PointLabels.init);
+ $.jqplot.postDrawSeriesHooks.push($.jqplot.PointLabels.draw);
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.min.js
new file mode 100644
index 00000000..2e1a00c7
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(c){c.jqplot.PointLabels=function(e){this.show=c.jqplot.config.enablePlugins;this.location="n";this.labelsFromSeries=false;this.seriesLabelIndex=null;this.labels=[];this._labels=[];this.stackedValue=false;this.ypadding=6;this.xpadding=6;this.escapeHTML=true;this.edgeTolerance=-5;this.formatter=c.jqplot.DefaultTickFormatter;this.formatString="";this.hideZeros=false;this._elems=[];c.extend(true,this,e)};var a=["nw","n","ne","e","se","s","sw","w"];var d={nw:0,n:1,ne:2,e:3,se:4,s:5,sw:6,w:7};var b=["se","s","sw","w","nw","n","ne","e"];c.jqplot.PointLabels.init=function(j,h,f,g,i){var e=c.extend(true,{},f,g);e.pointLabels=e.pointLabels||{};if(this.renderer.constructor===c.jqplot.BarRenderer&&this.barDirection==="horizontal"&&!e.pointLabels.location){e.pointLabels.location="e"}this.plugins.pointLabels=new c.jqplot.PointLabels(e.pointLabels);this.plugins.pointLabels.setLabels.call(this)};c.jqplot.PointLabels.prototype.setLabels=function(){var f=this.plugins.pointLabels;var h;if(f.seriesLabelIndex!=null){h=f.seriesLabelIndex}else{if(this.renderer.constructor===c.jqplot.BarRenderer&&this.barDirection==="horizontal"){h=0}else{h=(this._plotData.length===0)?0:this._plotData[0].length-1}}f._labels=[];if(f.labels.length===0||f.labelsFromSeries){if(f.stackedValue){if(this._plotData.length&&this._plotData[0].length){for(var e=0;e<this._plotData.length;e++){f._labels.push(this._plotData[e][h])}}}else{var g=this.data;if(this.renderer.constructor===c.jqplot.BarRenderer&&this.waterfall){g=this._data}if(g.length&&g[0].length){for(var e=0;e<g.length;e++){f._labels.push(g[e][h])}}g=null}}else{if(f.labels.length){f._labels=f.labels}}};c.jqplot.PointLabels.prototype.xOffset=function(f,e,g){e=e||this.location;g=g||this.xpadding;var h;switch(e){case"nw":h=-f.outerWidth(true)-this.xpadding;break;case"n":h=-f.outerWidth(true)/2;break;case"ne":h=this.xpadding;break;case"e":h=this.xpadding;break;case"se":h=this.xpadding;break;case"s":h=-f.outerWidth(true)/2;break;case"sw":h=-f.outerWidth(true)-this.xpadding;break;case"w":h=-f.outerWidth(true)-this.xpadding;break;default:h=-f.outerWidth(true)-this.xpadding;break}return h};c.jqplot.PointLabels.prototype.yOffset=function(f,e,g){e=e||this.location;g=g||this.xpadding;var h;switch(e){case"nw":h=-f.outerHeight(true)-this.ypadding;break;case"n":h=-f.outerHeight(true)-this.ypadding;break;case"ne":h=-f.outerHeight(true)-this.ypadding;break;case"e":h=-f.outerHeight(true)/2;break;case"se":h=this.ypadding;break;case"s":h=this.ypadding;break;case"sw":h=this.ypadding;break;case"w":h=-f.outerHeight(true)/2;break;default:h=-f.outerHeight(true)-this.ypadding;break}return h};c.jqplot.PointLabels.draw=function(x,j,v){var t=this.plugins.pointLabels;t.setLabels.call(this);for(var w=0;w<t._elems.length;w++){t._elems[w].emptyForce()}t._elems.splice(0,t._elems.length);if(t.show){var r="_"+this._stackAxis+"axis";if(!t.formatString){t.formatString=this[r]._ticks[0].formatString;t.formatter=this[r]._ticks[0].formatter}var E=this._plotData;var D=this._prevPlotData;var A=this._xaxis;var q=this._yaxis;var z,f;for(var w=0,u=t._labels.length;w<u;w++){var o=t._labels[w];if(t.hideZeros&&parseInt(t._labels[w],10)==0){o=""}if(o!=null){o=t.formatter(t.formatString,o)}f=document.createElement("div");t._elems[w]=c(f);z=t._elems[w];z.addClass("jqplot-point-label jqplot-series-"+this.index+" jqplot-point-"+w);z.css("position","absolute");z.insertAfter(x.canvas);if(t.escapeHTML){z.text(o)}else{z.html(o)}var g=t.location;if((this.fillToZero&&E[w][1]<0)||(this.fillToZero&&this._type==="bar"&&this.barDirection==="horizontal"&&E[w][0]<0)||(this.waterfall&&parseInt(o,10))<0){g=b[d[g]]}var n=A.u2p(E[w][0])+t.xOffset(z,g);var h=q.u2p(E[w][1])+t.yOffset(z,g);if(this._stack&&!t.stackedValue){if(this.barDirection==="vertical"){h=(this._barPoints[w][0][1]+this._barPoints[w][1][1])/2+v._gridPadding.top-0.5*z.outerHeight(true)}else{n=(this._barPoints[w][2][0]+this._barPoints[w][0][0])/2+v._gridPadding.left-0.5*z.outerWidth(true)}}if(this.renderer.constructor==c.jqplot.BarRenderer){if(this.barDirection=="vertical"){n+=this._barNudge}else{h-=this._barNudge}}z.css("left",n);z.css("top",h);var k=n+z.width();var s=h+z.height();var C=t.edgeTolerance;var e=c(x.canvas).position().left;var y=c(x.canvas).position().top;var B=x.canvas.width+e;var m=x.canvas.height+y;if(n-C<e||h-C<y||k+C>B||s+C>m){z.remove()}z=null;f=null}}};c.jqplot.postSeriesInitHooks.push(c.jqplot.PointLabels.init);c.jqplot.postDrawSeriesHooks.push(c.jqplot.PointLabels.draw)})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.js
new file mode 100644
index 00000000..4035488a
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.js
@@ -0,0 +1,728 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ $.jqplot.PyramidAxisRenderer = function() {
+ $.jqplot.LinearAxisRenderer.call(this);
+ };
+
+ $.jqplot.PyramidAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
+ $.jqplot.PyramidAxisRenderer.prototype.constructor = $.jqplot.PyramidAxisRenderer;
+
+ // called with scope of axis
+ $.jqplot.PyramidAxisRenderer.prototype.init = function(options){
+ // Group: Properties
+ //
+ // prop: position
+ // Position of axis. Values are: top, bottom , left, center, right.
+ // By default, x and x2 axes are bottom, y axis is center.
+ this.position = null;
+ // prop: drawBaseline
+ // True to draw the axis baseline.
+ this.drawBaseline = true;
+ // prop: baselineWidth
+ // width of the baseline in pixels.
+ this.baselineWidth = null;
+ // prop: baselineColor
+ // CSS color spec for the baseline.
+ this.baselineColor = null;
+ this.tickSpacingFactor = 25;
+ this._type = 'pyramid';
+ this._splitAxis = false;
+ this._splitLength = null;
+ this.category = false;
+ this._autoFormatString = '';
+ this._overrideFormatString = false;
+
+ $.extend(true, this, options);
+ this.renderer.options = options;
+
+ this.resetDataBounds = this.renderer.resetDataBounds;
+ this.resetDataBounds();
+
+ };
+
+ $.jqplot.PyramidAxisRenderer.prototype.resetDataBounds = function() {
+ // Go through all the series attached to this axis and find
+ // the min/max bounds for this axis.
+ var db = this._dataBounds;
+ db.min = null;
+ db.max = null;
+ var temp;
+ for (var i=0; i<this._series.length; i++) {
+ var s = this._series[i];
+ var d = s._plotData;
+
+ for (var j=0, l=d.length; j<l; j++) {
+ if (this.name.charAt(0) === 'x') {
+ temp = d[j][1];
+ if ((temp !== null && temp < db.min) || db.min === null) {
+ db.min = temp;
+ }
+ if ((temp !== null && temp > db.max) || db.max === null) {
+ db.max = temp;
+ }
+ }
+ else {
+ temp = d[j][0];
+ if ((temp !== null && temp < db.min) || db.min === null) {
+ db.min = temp;
+ }
+ if ((temp !== null && temp > db.max) || db.max === null) {
+ db.max = temp;
+ }
+ }
+ }
+ }
+ };
+
+ // called with scope of axis
+ $.jqplot.PyramidAxisRenderer.prototype.draw = function(ctx, plot) {
+ if (this.show) {
+ // populate the axis label and value properties.
+ // createTicks is a method on the renderer, but
+ // call it within the scope of the axis.
+ this.renderer.createTicks.call(this, plot);
+ // fill a div with axes labels in the right direction.
+ // Need to pregenerate each axis to get it's bounds and
+ // position it and the labels correctly on the plot.
+ var dim=0;
+ var temp;
+ // Added for theming.
+ if (this._elem) {
+ // Memory Leaks patch
+ //this._elem.empty();
+ this._elem.emptyForce();
+ this._elem = null;
+ }
+
+ this._elem = $(document.createElement('div'));
+ this._elem.addClass('jqplot-axis jqplot-'+this.name);
+ this._elem.css('position', 'absolute');
+
+
+ if (this.name == 'xaxis' || this.name == 'x2axis') {
+ this._elem.width(this._plotDimensions.width);
+ }
+ else {
+ this._elem.height(this._plotDimensions.height);
+ }
+
+ // create a _label object.
+ this.labelOptions.axis = this.name;
+ this._label = new this.labelRenderer(this.labelOptions);
+ if (this._label.show) {
+ var elem = this._label.draw(ctx, plot);
+ elem.appendTo(this._elem);
+ elem = null;
+ }
+
+ var t = this._ticks;
+ var tick;
+ for (var i=0; i<t.length; i++) {
+ tick = t[i];
+ if (tick.show && tick.showLabel && (!tick.isMinorTick)) {
+ this._elem.append(tick.draw(ctx, plot));
+ }
+ }
+ tick = null;
+ t = null;
+ }
+ return this._elem;
+ };
+
+ // Note, primes can be found on http://primes.utm.edu/
+ var _primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];
+
+
+ var _primesHash = {};
+
+ for (var i =0, l = _primes.length; i < l; i++) {
+ _primesHash[_primes[i]] = _primes[i];
+ }
+
+ // called with scope of axis
+ $.jqplot.PyramidAxisRenderer.prototype.createTicks = function(plot) {
+ // we're are operating on an axis here
+ var userTicks = this.ticks;
+ // databounds were set on axis initialization.
+ var db = this._dataBounds;
+ var dim;
+ var interval;
+ var min;
+ var max;
+ var range;
+ var pos1;
+ var pos2;
+ var tt;
+ var i;
+ var l;
+ var s;
+ // get a copy of user's settings for min/max.
+ var userMin = this.min;
+ var userMax = this.max;
+ var ut;
+ var t;
+ var threshold;
+ var tdim;
+ var scalefact;
+ var ret;
+ var tumin;
+ var tumax;
+ var maxVisibleTicks;
+ var val;
+ var skip = null;
+ var temp;
+
+ // if we already have ticks, use them.
+ // ticks must be in order of increasing value.
+
+ if (userTicks.length) {
+ // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed
+ for (i=0, l=userTicks.length; i<l; i++){
+ ut = userTicks[i];
+ t = new this.tickRenderer(this.tickOptions);
+ if ($.isArray(ut)) {
+ t.value = ut[0];
+ t.label = ut[1];
+ t.setTick(ut[0], this.name);
+ this._ticks.push(t);
+ }
+
+ else if ($.isPlainObject(ut)) {
+ $.extend(true, t, ut);
+ t.axis = this.name;
+ this._ticks.push(t);
+ }
+
+ else {
+ if (typeof ut === 'string') {
+ val = i + plot.defaultAxisStart;
+ }
+ else {
+ val = ut;
+ }
+ t.value = val;
+ t.label = ut;
+ t.axis = this.name;
+ this._ticks.push(t);
+ }
+ }
+ this.numberTicks = userTicks.length;
+ this.min = this._ticks[0].value;
+ this.max = this._ticks[this.numberTicks-1].value;
+ this.tickInterval = (this.max - this.min) / (this.numberTicks - 1);
+
+ // use user specified tickInterval if there is one
+ if (this._options.tickInterval) {
+ // hide every tick except for ticks on interval
+ var ti = this._options.tickInterval;
+ for (i=0; i<this.numberTicks; i++) {
+ if (i%ti !== 0) {
+ // this._ticks[i].show = false;
+ this._ticks[i].isMinorTick = true;
+ }
+ }
+ }
+
+ else {
+ // check if we have too many ticks
+ dim = (this.name.charAt(0) === 'x') ? this._plotDimensions.width : this._plotDimensions.height;
+ maxVisibleTicks = Math.round(2.0 + dim/this.tickSpacingFactor);
+
+ if (this.numberTicks > maxVisibleTicks) {
+ // check for number of ticks we can skip
+ temp = this.numberTicks - 1;
+ for (i=2; i<temp; i++) {
+ if (temp % i === 0 && temp/i < maxVisibleTicks) {
+ skip = i-1;
+ break;
+ }
+ }
+
+ if (skip !== null) {
+ var count = 1;
+ for (i=1, l=this._ticks.length; i<l; i++) {
+ if (count <= skip) {
+ this._ticks[i].show = false;
+ count += 1;
+ }
+ else {
+ count = 1;
+ }
+ }
+ }
+ }
+ }
+
+ // if category style, add minor ticks in between
+ temp = [];
+ if (this.category) {
+ // turn off gridline and mark on first tick
+ this._ticks[0].showGridline = false;
+ this._ticks[0].showMark = false;
+
+ for (i=this._ticks.length-1; i>0; i--) {
+ t = new this.tickRenderer(this.tickOptions);
+ t.value = this._ticks[i-1].value + this.tickInterval/2.0;
+ t.label = '';
+ t.showLabel = false;
+ t.axis = this.name;
+ this._ticks[i].showGridline = false;
+ this._ticks[i].showMark = false;
+ this._ticks.splice(i, 0, t);
+ // temp.push(t);
+ }
+
+ // merge in the new ticks
+ // for (i=1, l=temp.length; i<l; i++) {
+ // this._ticks.splice(i, 0, temp[i]);
+ // }
+
+ // now add a tick at beginning and end
+ t = new this.tickRenderer(this.tickOptions);
+ t.value = this._ticks[0].value - this.tickInterval/2.0;
+ t.label = '';
+ t.showLabel = false;
+ t.axis = this.name;
+ this._ticks.unshift(t);
+
+ t = new this.tickRenderer(this.tickOptions);
+ t.value = this._ticks[this._ticks.length-1].value + this.tickInterval/2.0;
+ t.label = '';
+ t.showLabel = false;
+ t.axis = this.name;
+ this._ticks.push(t);
+
+ this.tickInterval = this.tickInterval / 2.0;
+ this.numberTicks = this._ticks.length;
+ this.min = this._ticks[0].value;
+ this.max = this._ticks[this._ticks.length-1].value;
+ }
+ }
+
+ // we don't have any ticks yet, let's make some!
+ else {
+ if (this.name.charAt(0) === 'x') {
+ dim = this._plotDimensions.width;
+ // make sure x axis is symetric about 0.
+ var tempmax = Math.max(db.max, Math.abs(db.min));
+ var tempmin = Math.min(db.min, -tempmax);
+ // min = ((this.min != null) ? this.min : tempmin);
+ // max = ((this.max != null) ? this.max : tempmax);
+ min = tempmin;
+ max = tempmax;
+ range = max - min;
+
+ if (this.tickOptions == null || !this.tickOptions.formatString) {
+ this._overrideFormatString = true;
+ }
+
+ threshold = 30;
+ tdim = Math.max(dim, threshold+1);
+ scalefact = (tdim-threshold)/300.0;
+ ret = $.jqplot.LinearTickGenerator(min, max, scalefact);
+ // calculate a padded max and min, points should be less than these
+ // so that they aren't too close to the edges of the plot.
+ // User can adjust how much padding is allowed with pad, padMin and PadMax options.
+ tumin = min + range*(this.padMin - 1);
+ tumax = max - range*(this.padMax - 1);
+
+ if (min < tumin || max > tumax) {
+ tumin = min - range*(this.padMin - 1);
+ tumax = max + range*(this.padMax - 1);
+ ret = $.jqplot.LinearTickGenerator(tumin, tumax, scalefact);
+ }
+
+ this.min = ret[0];
+ this.max = ret[1];
+ this.numberTicks = ret[2];
+ this._autoFormatString = ret[3];
+ this.tickInterval = ret[4];
+ }
+ else {
+ dim = this._plotDimensions.height;
+
+ // ticks will be on whole integers like 1, 2, 3, ... or 1, 4, 7, ...
+ min = db.min;
+ max = db.max;
+ s = this._series[0];
+ this._ticks = [];
+
+ range = max - min;
+
+ // if range is a prime, will get only 2 ticks, expand range in that case.
+ if (_primesHash[range]) {
+ range += 1;
+ max += 1;
+ }
+
+ this.max = max;
+ this.min = min;
+
+ maxVisibleTicks = Math.round(2.0 + dim/this.tickSpacingFactor);
+
+ if (range + 1 <= maxVisibleTicks) {
+ this.numberTicks = range + 1;
+ this.tickInterval = 1.0;
+ }
+
+ else {
+ // figure out a round number of ticks to skip in every interval
+ // range / ti + 1 = nt
+ // ti = range / (nt - 1)
+ for (var i=maxVisibleTicks; i>1; i--) {
+ if (range/(i - 1) === Math.round(range/(i - 1))) {
+ this.numberTicks = i;
+ this.tickInterval = range/(i - 1);
+ break;
+ }
+
+ }
+ }
+ }
+
+ if (this._overrideFormatString && this._autoFormatString != '') {
+ this.tickOptions = this.tickOptions || {};
+ this.tickOptions.formatString = this._autoFormatString;
+ }
+
+ var labelval;
+ for (i=0; i<this.numberTicks; i++) {
+ this.tickOptions.axis = this.name;
+ labelval = this.min + this.tickInterval * i;
+ if (this.name.charAt(0) === 'x') {
+ labelval = Math.abs(labelval);
+ }
+ // this.tickOptions.label = String (labelval);
+ this.tickOptions.value = this.min + this.tickInterval * i;
+ t = new this.tickRenderer(this.tickOptions);
+
+ t.label = t.prefix + t.formatter(t.formatString, labelval);
+
+ this._ticks.push(t);
+ // for x axis, if y axis is in middle, add a symetrical 0 tick
+ if (this.name.charAt(0) === 'x' && plot.axes.yMidAxis.show && this.tickOptions.value === 0) {
+ this._splitAxis = true;
+ this._splitLength = plot.axes.yMidAxis.getWidth();
+ // t.value = -this.max/2000.0;
+ t = new this.tickRenderer(this.tickOptions);
+ this._ticks.push(t);
+ t.value = this.max/2000.0;
+ }
+ }
+ t = null;
+ }
+ };
+
+ // called with scope of axis
+ $.jqplot.PyramidAxisRenderer.prototype.set = function() {
+ var dim = 0;
+ var temp;
+ var w = 0;
+ var h = 0;
+ var i;
+ var t;
+ var tick;
+ var lshow = (this._label == null) ? false : this._label.show;
+ if (this.show) {
+ t = this._ticks;
+ l = t.length;
+ for (i=0; i<l; i++) {
+ tick = t[i];
+ if (!tick._breakTick && tick.show && tick.showLabel && !tick.isMinorTick) {
+ if (this.name.charAt(0) === 'x') {
+ temp = tick._elem.outerHeight(true);
+ }
+ else {
+ temp = tick._elem.outerWidth(true);
+ }
+ if (temp > dim) {
+ dim = temp;
+ }
+ }
+ }
+
+ if (this.name === 'yMidAxis') {
+ for (i=0; i<l; i++) {
+ tick = t[i];
+ if (tick._elem) {
+ temp = (dim - tick._elem.outerWidth(true))/2.0;
+ tick._elem.css('left', temp);
+ }
+ }
+ }
+ tick = null;
+ t = null;
+
+ if (lshow) {
+ w = this._label._elem.outerWidth(true);
+ h = this._label._elem.outerHeight(true);
+ }
+ if (this.name === 'xaxis') {
+ dim = dim + h;
+ this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'});
+ }
+ else if (this.name === 'x2axis') {
+ dim = dim + h;
+ this._elem.css({'height':dim+'px', left:'0px', top:'0px'});
+ }
+ else if (this.name === 'yaxis') {
+ dim = dim + w;
+ this._elem.css({'width':dim+'px', left:'0px', top:'0px'});
+ if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
+ this._label._elem.css('width', w+'px');
+ }
+ }
+ else if (this.name === 'yMidAxis') {
+ // don't include width of label at all in width of axis?
+ // dim = (dim > w) ? dim : w;
+ var temp = dim/2.0 - w/2.0;
+ this._elem.css({'width':dim+'px', top:'0px'});
+ if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
+ this._label._elem.css({width: w, left: temp, top: 0});
+ }
+ }
+ else {
+ dim = dim + w;
+ this._elem.css({'width':dim+'px', right:'0px', top:'0px'});
+ if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
+ this._label._elem.css('width', w+'px');
+ }
+ }
+ }
+ };
+
+ $.jqplot.PyramidAxisRenderer.prototype.pack = function(pos, offsets) {
+ // Add defaults for repacking from resetTickValues function.
+ pos = pos || {};
+ offsets = offsets || this._offsets;
+
+ var ticks = this._ticks;
+ var max = this.max;
+ var min = this.min;
+ var offmax = offsets.max;
+ var offmin = offsets.min;
+ var lshow = (this._label == null) ? false : this._label.show;
+
+ for (var p in pos) {
+ this._elem.css(p, pos[p]);
+ }
+
+ this._offsets = offsets;
+ // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left.
+ var pixellength = offmax - offmin;
+ var unitlength = max - min;
+ var sl = this._splitLength;
+
+ // point to unit and unit to point conversions references to Plot DOM element top left corner.
+ if (this._splitAxis) {
+ pixellength -= this._splitLength;
+
+ // don't know that this one is correct.
+ this.p2u = function(p){
+ return (p - offmin) * unitlength / pixellength + min;
+ };
+
+ this.u2p = function(u){
+ if (u <= 0) {
+ return (u - min) * pixellength / unitlength + offmin;
+ }
+ else {
+ return (u - min) * pixellength / unitlength + offmin + sl;
+ }
+ };
+
+ this.series_u2p = function(u){
+ if (u <= 0) {
+ return (u - min) * pixellength / unitlength;
+ }
+ else {
+ return (u - min) * pixellength / unitlength + sl;
+ }
+ };
+
+ // don't know that this one is correct.
+ this.series_p2u = function(p){
+ return p * unitlength / pixellength + min;
+ };
+ }
+ else {
+ this.p2u = function(p){
+ return (p - offmin) * unitlength / pixellength + min;
+ };
+
+ this.u2p = function(u){
+ return (u - min) * pixellength / unitlength + offmin;
+ };
+
+ if (this.name.charAt(0) === 'x'){
+ this.series_u2p = function(u){
+ return (u - min) * pixellength / unitlength;
+ };
+ this.series_p2u = function(p){
+ return p * unitlength / pixellength + min;
+ };
+ }
+
+ else {
+ this.series_u2p = function(u){
+ return (u - max) * pixellength / unitlength;
+ };
+ this.series_p2u = function(p){
+ return p * unitlength / pixellength + max;
+ };
+ }
+ }
+
+ if (this.show) {
+ if (this.name.charAt(0) === 'x') {
+ for (var i=0; i<ticks.length; i++) {
+ var t = ticks[i];
+ if (t.show && t.showLabel) {
+ var shim;
+
+ if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
+ // will need to adjust auto positioning based on which axis this is.
+ var temp = (this.name == 'xaxis') ? 1 : -1;
+ switch (t.labelPosition) {
+ case 'auto':
+ // position at end
+ if (temp * t.angle < 0) {
+ shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ }
+ // position at start
+ else {
+ shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
+ }
+ break;
+ case 'end':
+ shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ break;
+ case 'start':
+ shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
+ break;
+ case 'middle':
+ shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ break;
+ default:
+ shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ break;
+ }
+ }
+ else {
+ shim = -t.getWidth()/2;
+ }
+ var val = this.u2p(t.value) + shim + 'px';
+ t._elem.css('left', val);
+ t.pack();
+ }
+ }
+ if (lshow) {
+ var w = this._label._elem.outerWidth(true);
+ this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px');
+ if (this.name == 'xaxis') {
+ this._label._elem.css('bottom', '0px');
+ }
+ else {
+ this._label._elem.css('top', '0px');
+ }
+ this._label.pack();
+ }
+ }
+ else {
+ for (var i=0; i<ticks.length; i++) {
+ var t = ticks[i];
+ if (t.show && t.showLabel && !t.isMinorTick) {
+ var shim;
+ if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
+ // will need to adjust auto positioning based on which axis this is.
+ var temp = (this.name == 'yaxis') ? 1 : -1;
+ switch (t.labelPosition) {
+ case 'auto':
+ // position at end
+ case 'end':
+ if (temp * t.angle < 0) {
+ shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
+ }
+ else {
+ shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
+ }
+ break;
+ case 'start':
+ if (t.angle > 0) {
+ shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
+ }
+ else {
+ shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
+ }
+ break;
+ case 'middle':
+ // if (t.angle > 0) {
+ // shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
+ // }
+ // else {
+ // shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
+ // }
+ shim = -t.getHeight()/2;
+ break;
+ default:
+ shim = -t.getHeight()/2;
+ break;
+ }
+ }
+ else {
+ shim = -t.getHeight()/2;
+ }
+
+ var val = this.u2p(t.value) + shim + 'px';
+ t._elem.css('top', val);
+ t.pack();
+ }
+ }
+ if (lshow) {
+ var h = this._label._elem.outerHeight(true);
+ if (this.name !== 'yMidAxis') {
+ this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px');
+ }
+ if (this.name == 'yaxis') {
+ this._label._elem.css('left', '0px');
+ }
+ else if (this.name !== 'yMidAxis') {
+ this._label._elem.css('right', '0px');
+ }
+ this._label.pack();
+ }
+ }
+ }
+
+ ticks = null;
+ };
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.min.js
new file mode 100644
index 00000000..f59fb564
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(e){e.jqplot.PyramidAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.PyramidAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.PyramidAxisRenderer.prototype.constructor=e.jqplot.PyramidAxisRenderer;e.jqplot.PyramidAxisRenderer.prototype.init=function(f){this.position=null;this.drawBaseline=true;this.baselineWidth=null;this.baselineColor=null;this.tickSpacingFactor=25;this._type="pyramid";this._splitAxis=false;this._splitLength=null;this.category=false;this._autoFormatString="";this._overrideFormatString=false;e.extend(true,this,f);this.renderer.options=f;this.resetDataBounds=this.renderer.resetDataBounds;this.resetDataBounds()};e.jqplot.PyramidAxisRenderer.prototype.resetDataBounds=function(){var h=this._dataBounds;h.min=null;h.max=null;var g;for(var m=0;m<this._series.length;m++){var n=this._series[m];var o=n._plotData;for(var k=0,f=o.length;k<f;k++){if(this.name.charAt(0)==="x"){g=o[k][1];if((g!==null&&g<h.min)||h.min===null){h.min=g}if((g!==null&&g>h.max)||h.max===null){h.max=g}}else{g=o[k][0];if((g!==null&&g<h.min)||h.min===null){h.min=g}if((g!==null&&g>h.max)||h.max===null){h.max=g}}}}};e.jqplot.PyramidAxisRenderer.prototype.draw=function(f,n){if(this.show){this.renderer.createTicks.call(this,n);var m=0;var g;if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=e(document.createElement("div"));this._elem.addClass("jqplot-axis jqplot-"+this.name);this._elem.css("position","absolute");if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var l=this._label.draw(f,n);l.appendTo(this._elem);l=null}var k=this._ticks;var j;for(var h=0;h<k.length;h++){j=k[h];if(j.show&&j.showLabel&&(!j.isMinorTick)){this._elem.append(j.draw(f,n))}}j=null;k=null}return this._elem};var b=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997];var d={};for(var c=0,a=b.length;c<a;c++){d[b[c]]=b[c]}e.jqplot.PyramidAxisRenderer.prototype.createTicks=function(D){var J=this.ticks;var M=this._dataBounds;var E;var K;var B;var G;var y;var n;var k;var h;var H;var C;var x;var L=this.min;var N=this.max;var q;var v;var m;var g;var j;var O;var A;var F;var r;var P;var z=null;var I;if(J.length){for(H=0,C=J.length;H<C;H++){q=J[H];v=new this.tickRenderer(this.tickOptions);if(e.isArray(q)){v.value=q[0];v.label=q[1];v.setTick(q[0],this.name);this._ticks.push(v)}else{if(e.isPlainObject(q)){e.extend(true,v,q);v.axis=this.name;this._ticks.push(v)}else{if(typeof q==="string"){P=H+D.defaultAxisStart}else{P=q}v.value=P;v.label=q;v.axis=this.name;this._ticks.push(v)}}}this.numberTicks=J.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value;this.tickInterval=(this.max-this.min)/(this.numberTicks-1);if(this._options.tickInterval){var o=this._options.tickInterval;for(H=0;H<this.numberTicks;H++){if(H%o!==0){this._ticks[H].isMinorTick=true}}}else{E=(this.name.charAt(0)==="x")?this._plotDimensions.width:this._plotDimensions.height;r=Math.round(2+E/this.tickSpacingFactor);if(this.numberTicks>r){I=this.numberTicks-1;for(H=2;H<I;H++){if(I%H===0&&I/H<r){z=H-1;break}}if(z!==null){var p=1;for(H=1,C=this._ticks.length;H<C;H++){if(p<=z){this._ticks[H].show=false;p+=1}else{p=1}}}}}I=[];if(this.category){this._ticks[0].showGridline=false;this._ticks[0].showMark=false;for(H=this._ticks.length-1;H>0;H--){v=new this.tickRenderer(this.tickOptions);v.value=this._ticks[H-1].value+this.tickInterval/2;v.label="";v.showLabel=false;v.axis=this.name;this._ticks[H].showGridline=false;this._ticks[H].showMark=false;this._ticks.splice(H,0,v)}v=new this.tickRenderer(this.tickOptions);v.value=this._ticks[0].value-this.tickInterval/2;v.label="";v.showLabel=false;v.axis=this.name;this._ticks.unshift(v);v=new this.tickRenderer(this.tickOptions);v.value=this._ticks[this._ticks.length-1].value+this.tickInterval/2;v.label="";v.showLabel=false;v.axis=this.name;this._ticks.push(v);this.tickInterval=this.tickInterval/2;this.numberTicks=this._ticks.length;this.min=this._ticks[0].value;this.max=this._ticks[this._ticks.length-1].value}}else{if(this.name.charAt(0)==="x"){E=this._plotDimensions.width;var w=Math.max(M.max,Math.abs(M.min));var u=Math.min(M.min,-w);B=u;G=w;y=G-B;if(this.tickOptions==null||!this.tickOptions.formatString){this._overrideFormatString=true}m=30;g=Math.max(E,m+1);j=(g-m)/300;O=e.jqplot.LinearTickGenerator(B,G,j);A=B+y*(this.padMin-1);F=G-y*(this.padMax-1);if(B<A||G>F){A=B-y*(this.padMin-1);F=G+y*(this.padMax-1);O=e.jqplot.LinearTickGenerator(A,F,j)}this.min=O[0];this.max=O[1];this.numberTicks=O[2];this._autoFormatString=O[3];this.tickInterval=O[4]}else{E=this._plotDimensions.height;B=M.min;G=M.max;x=this._series[0];this._ticks=[];y=G-B;if(d[y]){y+=1;G+=1}this.max=G;this.min=B;r=Math.round(2+E/this.tickSpacingFactor);if(y+1<=r){this.numberTicks=y+1;this.tickInterval=1}else{for(var H=r;H>1;H--){if(y/(H-1)===Math.round(y/(H-1))){this.numberTicks=H;this.tickInterval=y/(H-1);break}}}}if(this._overrideFormatString&&this._autoFormatString!=""){this.tickOptions=this.tickOptions||{};this.tickOptions.formatString=this._autoFormatString}var f;for(H=0;H<this.numberTicks;H++){this.tickOptions.axis=this.name;f=this.min+this.tickInterval*H;if(this.name.charAt(0)==="x"){f=Math.abs(f)}this.tickOptions.value=this.min+this.tickInterval*H;v=new this.tickRenderer(this.tickOptions);v.label=v.prefix+v.formatter(v.formatString,f);this._ticks.push(v);if(this.name.charAt(0)==="x"&&D.axes.yMidAxis.show&&this.tickOptions.value===0){this._splitAxis=true;this._splitLength=D.axes.yMidAxis.getWidth();v=new this.tickRenderer(this.tickOptions);this._ticks.push(v);v.value=this.max/2000}}v=null}};e.jqplot.PyramidAxisRenderer.prototype.set=function(){var o=0;var j;var g=0;var n=0;var m;var l;var k;var f=(this._label==null)?false:this._label.show;if(this.show){l=this._ticks;a=l.length;for(m=0;m<a;m++){k=l[m];if(!k._breakTick&&k.show&&k.showLabel&&!k.isMinorTick){if(this.name.charAt(0)==="x"){j=k._elem.outerHeight(true)}else{j=k._elem.outerWidth(true)}if(j>o){o=j}}}if(this.name==="yMidAxis"){for(m=0;m<a;m++){k=l[m];if(k._elem){j=(o-k._elem.outerWidth(true))/2;k._elem.css("left",j)}}}k=null;l=null;if(f){g=this._label._elem.outerWidth(true);n=this._label._elem.outerHeight(true)}if(this.name==="xaxis"){o=o+n;this._elem.css({height:o+"px",left:"0px",bottom:"0px"})}else{if(this.name==="x2axis"){o=o+n;this._elem.css({height:o+"px",left:"0px",top:"0px"})}else{if(this.name==="yaxis"){o=o+g;this._elem.css({width:o+"px",left:"0px",top:"0px"});if(f&&this._label.constructor==e.jqplot.AxisLabelRenderer){this._label._elem.css("width",g+"px")}}else{if(this.name==="yMidAxis"){var j=o/2-g/2;this._elem.css({width:o+"px",top:"0px"});if(f&&this._label.constructor==e.jqplot.AxisLabelRenderer){this._label._elem.css({width:g,left:j,top:0})}}else{o=o+g;this._elem.css({width:o+"px",right:"0px",top:"0px"});if(f&&this._label.constructor==e.jqplot.AxisLabelRenderer){this._label._elem.css("width",g+"px")}}}}}}};e.jqplot.PyramidAxisRenderer.prototype.pack=function(j,g){j=j||{};g=g||this._offsets;var B=this._ticks;var v=this.max;var u=this.min;var o=g.max;var m=g.min;var r=(this._label==null)?false:this._label.show;for(var s in j){this._elem.css(s,j[s])}this._offsets=g;var k=o-m;var l=v-u;var z=this._splitLength;if(this._splitAxis){k-=this._splitLength;this.p2u=function(h){return(h-m)*l/k+u};this.u2p=function(h){if(h<=0){return(h-u)*k/l+m}else{return(h-u)*k/l+m+z}};this.series_u2p=function(h){if(h<=0){return(h-u)*k/l}else{return(h-u)*k/l+z}};this.series_p2u=function(h){return h*l/k+u}}else{this.p2u=function(h){return(h-m)*l/k+u};this.u2p=function(h){return(h-u)*k/l+m};if(this.name.charAt(0)==="x"){this.series_u2p=function(h){return(h-u)*k/l};this.series_p2u=function(h){return h*l/k+u}}else{this.series_u2p=function(h){return(h-v)*k/l};this.series_p2u=function(h){return h*l/k+v}}}if(this.show){if(this.name.charAt(0)==="x"){for(var x=0;x<B.length;x++){var q=B[x];if(q.show&&q.showLabel){var f;if(q.constructor==e.jqplot.CanvasAxisTickRenderer&&q.angle){var A=(this.name=="xaxis")?1:-1;switch(q.labelPosition){case"auto":if(A*q.angle<0){f=-q.getWidth()+q._textRenderer.height*Math.sin(-q._textRenderer.angle)/2}else{f=-q._textRenderer.height*Math.sin(q._textRenderer.angle)/2}break;case"end":f=-q.getWidth()+q._textRenderer.height*Math.sin(-q._textRenderer.angle)/2;break;case"start":f=-q._textRenderer.height*Math.sin(q._textRenderer.angle)/2;break;case"middle":f=-q.getWidth()/2+q._textRenderer.height*Math.sin(-q._textRenderer.angle)/2;break;default:f=-q.getWidth()/2+q._textRenderer.height*Math.sin(-q._textRenderer.angle)/2;break}}else{f=-q.getWidth()/2}var C=this.u2p(q.value)+f+"px";q._elem.css("left",C);q.pack()}}if(r){var n=this._label._elem.outerWidth(true);this._label._elem.css("left",m+k/2-n/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}}else{for(var x=0;x<B.length;x++){var q=B[x];if(q.show&&q.showLabel&&!q.isMinorTick){var f;if(q.constructor==e.jqplot.CanvasAxisTickRenderer&&q.angle){var A=(this.name=="yaxis")?1:-1;switch(q.labelPosition){case"auto":case"end":if(A*q.angle<0){f=-q._textRenderer.height*Math.cos(-q._textRenderer.angle)/2}else{f=-q.getHeight()+q._textRenderer.height*Math.cos(q._textRenderer.angle)/2}break;case"start":if(q.angle>0){f=-q._textRenderer.height*Math.cos(-q._textRenderer.angle)/2}else{f=-q.getHeight()+q._textRenderer.height*Math.cos(q._textRenderer.angle)/2}break;case"middle":f=-q.getHeight()/2;break;default:f=-q.getHeight()/2;break}}else{f=-q.getHeight()/2}var C=this.u2p(q.value)+f+"px";q._elem.css("top",C);q.pack()}}if(r){var y=this._label._elem.outerHeight(true);if(this.name!=="yMidAxis"){this._label._elem.css("top",o-k/2-y/2+"px")}if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{if(this.name!=="yMidAxis"){this._label._elem.css("right","0px")}}this._label.pack()}}}B=null}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.js
new file mode 100644
index 00000000..6124cbad
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.js
@@ -0,0 +1,429 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+ // Class: $.jqplot.CanvasGridRenderer
+ // The default jqPlot grid renderer, creating a grid on a canvas element.
+ // The renderer has no additional options beyond the <Grid> class.
+ $.jqplot.PyramidGridRenderer = function(){
+ $.jqplot.CanvasGridRenderer.call(this);
+ };
+
+ $.jqplot.PyramidGridRenderer.prototype = new $.jqplot.CanvasGridRenderer();
+ $.jqplot.PyramidGridRenderer.prototype.constructor = $.jqplot.PyramidGridRenderer;
+
+ // called with context of Grid object
+ $.jqplot.CanvasGridRenderer.prototype.init = function(options) {
+ this._ctx;
+ this.plotBands = {
+ show: false,
+ color: 'rgb(230, 219, 179)',
+ axis: 'y',
+ start: null,
+ interval: 10
+ };
+ $.extend(true, this, options);
+ // set the shadow renderer options
+ var sopts = {lineJoin:'miter', lineCap:'round', fill:false, isarc:false, angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, depth:this.shadowDepth, lineWidth:this.shadowWidth, closePath:false, strokeStyle:this.shadowColor};
+ this.renderer.shadowRenderer.init(sopts);
+ };
+
+ $.jqplot.PyramidGridRenderer.prototype.draw = function() {
+ this._ctx = this._elem.get(0).getContext("2d");
+ var ctx = this._ctx;
+ var axes = this._axes;
+ var xp = axes.xaxis.u2p;
+ var yp = axes.yMidAxis.u2p;
+ var xnudge = axes.xaxis.max/1000.0;
+ var xp0 = xp(0);
+ var xpn = xp(xnudge);
+ var ax = ['xaxis', 'yaxis', 'x2axis', 'y2axis','yMidAxis'];
+ // Add the grid onto the grid canvas. This is the bottom most layer.
+ ctx.save();
+ ctx.clearRect(0, 0, this._plotDimensions.width, this._plotDimensions.height);
+ ctx.fillStyle = this.backgroundColor || this.background;
+
+ ctx.fillRect(this._left, this._top, this._width, this._height);
+
+ if (this.plotBands.show) {
+ ctx.save();
+ var pb = this.plotBands;
+ ctx.fillStyle = pb.color;
+ var axis;
+ var x, y, w, h;
+ // find axis to work with
+ if (pb.axis.charAt(0) === 'x') {
+ if (axes.xaxis.show) {
+ axis = axes.xaxis;
+ }
+ }
+ else if (pb.axis.charAt(0) === 'y') {
+ if (axes.yaxis.show) {
+ axis = axes.yaxis;
+ }
+ else if (axes.y2axis.show) {
+ axis = axes.y2axis;
+ }
+ else if (axes.yMidAxis.show) {
+ axis = axes.yMidAxis;
+ }
+ }
+
+ if (axis !== undefined) {
+ // draw some rectangles
+ var start = pb.start;
+ if (start === null) {
+ start = axis.min;
+ }
+ for (var i = start; i < axis.max; i += 2 * pb.interval) {
+ if (axis.name.charAt(0) === 'y') {
+ x = this._left;
+ if ((i + pb.interval) < axis.max) {
+ y = axis.series_u2p(i + pb.interval) + this._top;
+ }
+ else {
+ y = axis.series_u2p(axis.max) + this._top;
+ }
+ w = this._right - this._left;
+ h = axis.series_u2p(start) - axis.series_u2p(start + pb.interval);
+ ctx.fillRect(x, y, w, h);
+ }
+ // else {
+ // y = 0;
+ // x = axis.series_u2p(i);
+ // h = this._height;
+ // w = axis.series_u2p(start + pb.interval) - axis.series_u2p(start);
+ // }
+
+ }
+ }
+ ctx.restore();
+ }
+
+ ctx.save();
+ ctx.lineJoin = 'miter';
+ ctx.lineCap = 'butt';
+ ctx.lineWidth = this.gridLineWidth;
+ ctx.strokeStyle = this.gridLineColor;
+ var b, e, s, m;
+ for (var i=5; i>0; i--) {
+ var name = ax[i-1];
+ var axis = axes[name];
+ var ticks = axis._ticks;
+ var numticks = ticks.length;
+ if (axis.show) {
+ if (axis.drawBaseline) {
+ var bopts = {};
+ if (axis.baselineWidth !== null) {
+ bopts.lineWidth = axis.baselineWidth;
+ }
+ if (axis.baselineColor !== null) {
+ bopts.strokeStyle = axis.baselineColor;
+ }
+ switch (name) {
+ case 'xaxis':
+ if (axes.yMidAxis.show) {
+ drawLine (this._left, this._bottom, xp0, this._bottom, bopts);
+ drawLine (xpn, this._bottom, this._right, this._bottom, bopts);
+ }
+ else {
+ drawLine (this._left, this._bottom, this._right, this._bottom, bopts);
+ }
+ break;
+ case 'yaxis':
+ drawLine (this._left, this._bottom, this._left, this._top, bopts);
+ break;
+ case 'yMidAxis':
+ drawLine(xp0, this._bottom, xp0, this._top, bopts);
+ drawLine(xpn, this._bottom, xpn, this._top, bopts);
+ break;
+ case 'x2axis':
+ if (axes.yMidAxis.show) {
+ drawLine (this._left, this._top, xp0, this._top, bopts);
+ drawLine (xpn, this._top, this._right, this._top, bopts);
+ }
+ else {
+ drawLine (this._left, this._bottom, this._right, this._bottom, bopts);
+ }
+ break;
+ case 'y2axis':
+ drawLine (this._right, this._bottom, this._right, this._top, bopts);
+ break;
+
+ }
+ }
+ for (var j=numticks; j>0; j--) {
+ var t = ticks[j-1];
+ if (t.show) {
+ var pos = Math.round(axis.u2p(t.value)) + 0.5;
+ switch (name) {
+ case 'xaxis':
+ // draw the grid line if we should
+ if (t.showGridline && this.drawGridlines && (!t.isMinorTick || axis.showMinorTicks)) {
+ drawLine(pos, this._top, pos, this._bottom);
+ }
+
+ // draw the mark
+ if (t.showMark && t.mark && (!t.isMinorTick || axis.showMinorTicks)) {
+ s = t.markSize;
+ m = t.mark;
+ var pos = Math.round(axis.u2p(t.value)) + 0.5;
+ switch (m) {
+ case 'outside':
+ b = this._bottom;
+ e = this._bottom+s;
+ break;
+ case 'inside':
+ b = this._bottom-s;
+ e = this._bottom;
+ break;
+ case 'cross':
+ b = this._bottom-s;
+ e = this._bottom+s;
+ break;
+ default:
+ b = this._bottom;
+ e = this._bottom+s;
+ break;
+ }
+ // draw the shadow
+ if (this.shadow) {
+ this.renderer.shadowRenderer.draw(ctx, [[pos,b],[pos,e]], {lineCap:'butt', lineWidth:this.gridLineWidth, offset:this.gridLineWidth*0.75, depth:2, fill:false, closePath:false});
+ }
+ // draw the line
+ drawLine(pos, b, pos, e);
+ }
+ break;
+ case 'yaxis':
+ // draw the grid line
+ if (t.showGridline && this.drawGridlines && (!t.isMinorTick || axis.showMinorTicks)) {
+ drawLine(this._right, pos, this._left, pos);
+ }
+
+ // draw the mark
+ if (t.showMark && t.mark && (!t.isMinorTick || axis.showMinorTicks)) {
+ s = t.markSize;
+ m = t.mark;
+ var pos = Math.round(axis.u2p(t.value)) + 0.5;
+ switch (m) {
+ case 'outside':
+ b = this._left-s;
+ e = this._left;
+ break;
+ case 'inside':
+ b = this._left;
+ e = this._left+s;
+ break;
+ case 'cross':
+ b = this._left-s;
+ e = this._left+s;
+ break;
+ default:
+ b = this._left-s;
+ e = this._left;
+ break;
+ }
+ // draw the shadow
+ if (this.shadow) {
+ this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false});
+ }
+ drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor});
+ }
+ break;
+ case 'yMidAxis':
+ // draw the grid line
+ if (t.showGridline && this.drawGridlines && (!t.isMinorTick || axis.showMinorTicks)) {
+ drawLine(this._left, pos, xp0, pos);
+ drawLine(xpn, pos, this._right, pos);
+ }
+ // draw the mark
+ if (t.showMark && t.mark && (!t.isMinorTick || axis.showMinorTicks)) {
+ s = t.markSize;
+ m = t.mark;
+ var pos = Math.round(axis.u2p(t.value)) + 0.5;
+
+ b = xp0;
+ e = xp0 + s;
+ // draw the shadow
+ if (this.shadow) {
+ this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false});
+ }
+ drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor});
+
+ b = xpn - s;
+ e = xpn;
+ // draw the shadow
+ if (this.shadow) {
+ this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false});
+ }
+ drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor});
+ }
+ break;
+ case 'x2axis':
+ // draw the grid line
+ if (t.showGridline && this.drawGridlines && (!t.isMinorTick || axis.showMinorTicks)) {
+ drawLine(pos, this._bottom, pos, this._top);
+ }
+
+ // draw the mark
+ if (t.showMark && t.mark && (!t.isMinorTick || axis.showMinorTicks)) {
+ s = t.markSize;
+ m = t.mark;
+ var pos = Math.round(axis.u2p(t.value)) + 0.5;
+ switch (m) {
+ case 'outside':
+ b = this._top-s;
+ e = this._top;
+ break;
+ case 'inside':
+ b = this._top;
+ e = this._top+s;
+ break;
+ case 'cross':
+ b = this._top-s;
+ e = this._top+s;
+ break;
+ default:
+ b = this._top-s;
+ e = this._top;
+ break;
+ }
+ // draw the shadow
+ if (this.shadow) {
+ this.renderer.shadowRenderer.draw(ctx, [[pos,b],[pos,e]], {lineCap:'butt', lineWidth:this.gridLineWidth, offset:this.gridLineWidth*0.75, depth:2, fill:false, closePath:false});
+ }
+ drawLine(pos, b, pos, e);
+ }
+ break;
+ case 'y2axis':
+ // draw the grid line
+ if (t.showGridline && this.drawGridlines && (!t.isMinorTick || axis.showMinorTicks)) {
+ drawLine(this._left, pos, this._right, pos);
+ }
+
+ // draw the mark
+ if (t.showMark && t.mark && (!t.isMinorTick || axis.showMinorTicks)) {
+ s = t.markSize;
+ m = t.mark;
+ var pos = Math.round(axis.u2p(t.value)) + 0.5;
+ switch (m) {
+ case 'outside':
+ b = this._right;
+ e = this._right+s;
+ break;
+ case 'inside':
+ b = this._right-s;
+ e = this._right;
+ break;
+ case 'cross':
+ b = this._right-s;
+ e = this._right+s;
+ break;
+ default:
+ b = this._right;
+ e = this._right+s;
+ break;
+ }
+ // draw the shadow
+ if (this.shadow) {
+ this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false});
+ }
+ drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor});
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ t = null;
+ }
+ axis = null;
+ ticks = null;
+ }
+
+ ctx.restore();
+
+ function drawLine(bx, by, ex, ey, opts) {
+ ctx.save();
+ opts = opts || {};
+ if (opts.lineWidth == null || opts.lineWidth != 0){
+ $.extend(true, ctx, opts);
+ ctx.beginPath();
+ ctx.moveTo(bx, by);
+ ctx.lineTo(ex, ey);
+ ctx.stroke();
+ }
+ ctx.restore();
+ }
+
+ if (this.shadow) {
+ if (axes.yMidAxis.show) {
+ var points = [[this._left, this._bottom], [xp0, this._bottom]];
+ this.renderer.shadowRenderer.draw(ctx, points);
+ var points = [[xpn, this._bottom], [this._right, this._bottom], [this._right, this._top]];
+ this.renderer.shadowRenderer.draw(ctx, points);
+ var points = [[xp0, this._bottom], [xp0, this._top]];
+ this.renderer.shadowRenderer.draw(ctx, points);
+ }
+ else {
+ var points = [[this._left, this._bottom], [this._right, this._bottom], [this._right, this._top]];
+ this.renderer.shadowRenderer.draw(ctx, points);
+ }
+ }
+ // Now draw border around grid. Use axis border definitions. start at
+ // upper left and go clockwise.
+ if (this.borderWidth != 0 && this.drawBorder) {
+ if (axes.yMidAxis.show) {
+ drawLine (this._left, this._top, xp0, this._top, {lineCap:'round', strokeStyle:axes.x2axis.borderColor, lineWidth:axes.x2axis.borderWidth});
+ drawLine (xpn, this._top, this._right, this._top, {lineCap:'round', strokeStyle:axes.x2axis.borderColor, lineWidth:axes.x2axis.borderWidth});
+ drawLine (this._right, this._top, this._right, this._bottom, {lineCap:'round', strokeStyle:axes.y2axis.borderColor, lineWidth:axes.y2axis.borderWidth});
+ drawLine (this._right, this._bottom, xpn, this._bottom, {lineCap:'round', strokeStyle:axes.xaxis.borderColor, lineWidth:axes.xaxis.borderWidth});
+ drawLine (xp0, this._bottom, this._left, this._bottom, {lineCap:'round', strokeStyle:axes.xaxis.borderColor, lineWidth:axes.xaxis.borderWidth});
+ drawLine (this._left, this._bottom, this._left, this._top, {lineCap:'round', strokeStyle:axes.yaxis.borderColor, lineWidth:axes.yaxis.borderWidth});
+ drawLine (xp0, this._bottom, xp0, this._top, {lineCap:'round', strokeStyle:axes.yaxis.borderColor, lineWidth:axes.yaxis.borderWidth});
+ drawLine (xpn, this._bottom, xpn, this._top, {lineCap:'round', strokeStyle:axes.yaxis.borderColor, lineWidth:axes.yaxis.borderWidth});
+ }
+ else {
+ drawLine (this._left, this._top, this._right, this._top, {lineCap:'round', strokeStyle:axes.x2axis.borderColor, lineWidth:axes.x2axis.borderWidth});
+ drawLine (this._right, this._top, this._right, this._bottom, {lineCap:'round', strokeStyle:axes.y2axis.borderColor, lineWidth:axes.y2axis.borderWidth});
+ drawLine (this._right, this._bottom, this._left, this._bottom, {lineCap:'round', strokeStyle:axes.xaxis.borderColor, lineWidth:axes.xaxis.borderWidth});
+ drawLine (this._left, this._bottom, this._left, this._top, {lineCap:'round', strokeStyle:axes.yaxis.borderColor, lineWidth:axes.yaxis.borderWidth});
+ }
+ }
+ // ctx.lineWidth = this.borderWidth;
+ // ctx.strokeStyle = this.borderColor;
+ // ctx.strokeRect(this._left, this._top, this._width, this._height);
+
+ ctx.restore();
+ ctx = null;
+ axes = null;
+ };
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.min.js
new file mode 100644
index 00000000..0bcd0289
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(a){a.jqplot.PyramidGridRenderer=function(){a.jqplot.CanvasGridRenderer.call(this)};a.jqplot.PyramidGridRenderer.prototype=new a.jqplot.CanvasGridRenderer();a.jqplot.PyramidGridRenderer.prototype.constructor=a.jqplot.PyramidGridRenderer;a.jqplot.CanvasGridRenderer.prototype.init=function(c){this._ctx;this.plotBands={show:false,color:"rgb(230, 219, 179)",axis:"y",start:null,interval:10};a.extend(true,this,c);var b={lineJoin:"miter",lineCap:"round",fill:false,isarc:false,angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.shadowWidth,closePath:false,strokeStyle:this.shadowColor};this.renderer.shadowRenderer.init(b)};a.jqplot.PyramidGridRenderer.prototype.draw=function(){this._ctx=this._elem.get(0).getContext("2d");var D=this._ctx;var G=this._axes;var q=G.xaxis.u2p;var J=G.yMidAxis.u2p;var l=G.xaxis.max/1000;var u=q(0);var f=q(l);var r=["xaxis","yaxis","x2axis","y2axis","yMidAxis"];D.save();D.clearRect(0,0,this._plotDimensions.width,this._plotDimensions.height);D.fillStyle=this.backgroundColor||this.background;D.fillRect(this._left,this._top,this._width,this._height);if(this.plotBands.show){D.save();var c=this.plotBands;D.fillStyle=c.color;var d;var o,n,p,I;if(c.axis.charAt(0)==="x"){if(G.xaxis.show){d=G.xaxis}}else{if(c.axis.charAt(0)==="y"){if(G.yaxis.show){d=G.yaxis}else{if(G.y2axis.show){d=G.y2axis}else{if(G.yMidAxis.show){d=G.yMidAxis}}}}}if(d!==undefined){var g=c.start;if(g===null){g=d.min}for(var H=g;H<d.max;H+=2*c.interval){if(d.name.charAt(0)==="y"){o=this._left;if((H+c.interval)<d.max){n=d.series_u2p(H+c.interval)+this._top}else{n=d.series_u2p(d.max)+this._top}p=this._right-this._left;I=d.series_u2p(g)-d.series_u2p(g+c.interval);D.fillRect(o,n,p,I)}}}D.restore()}D.save();D.lineJoin="miter";D.lineCap="butt";D.lineWidth=this.gridLineWidth;D.strokeStyle=this.gridLineColor;var L,K,A,C;for(var H=5;H>0;H--){var O=r[H-1];var d=G[O];var M=d._ticks;var B=M.length;if(d.show){if(d.drawBaseline){var N={};if(d.baselineWidth!==null){N.lineWidth=d.baselineWidth}if(d.baselineColor!==null){N.strokeStyle=d.baselineColor}switch(O){case"xaxis":if(G.yMidAxis.show){z(this._left,this._bottom,u,this._bottom,N);z(f,this._bottom,this._right,this._bottom,N)}else{z(this._left,this._bottom,this._right,this._bottom,N)}break;case"yaxis":z(this._left,this._bottom,this._left,this._top,N);break;case"yMidAxis":z(u,this._bottom,u,this._top,N);z(f,this._bottom,f,this._top,N);break;case"x2axis":if(G.yMidAxis.show){z(this._left,this._top,u,this._top,N);z(f,this._top,this._right,this._top,N)}else{z(this._left,this._bottom,this._right,this._bottom,N)}break;case"y2axis":z(this._right,this._bottom,this._right,this._top,N);break}}for(var E=B;E>0;E--){var v=M[E-1];if(v.show){var k=Math.round(d.u2p(v.value))+0.5;switch(O){case"xaxis":if(v.showGridline&&this.drawGridlines&&(!v.isMinorTick||d.showMinorTicks)){z(k,this._top,k,this._bottom)}if(v.showMark&&v.mark&&(!v.isMinorTick||d.showMinorTicks)){A=v.markSize;C=v.mark;var k=Math.round(d.u2p(v.value))+0.5;switch(C){case"outside":L=this._bottom;K=this._bottom+A;break;case"inside":L=this._bottom-A;K=this._bottom;break;case"cross":L=this._bottom-A;K=this._bottom+A;break;default:L=this._bottom;K=this._bottom+A;break}if(this.shadow){this.renderer.shadowRenderer.draw(D,[[k,L],[k,K]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}z(k,L,k,K)}break;case"yaxis":if(v.showGridline&&this.drawGridlines&&(!v.isMinorTick||d.showMinorTicks)){z(this._right,k,this._left,k)}if(v.showMark&&v.mark&&(!v.isMinorTick||d.showMinorTicks)){A=v.markSize;C=v.mark;var k=Math.round(d.u2p(v.value))+0.5;switch(C){case"outside":L=this._left-A;K=this._left;break;case"inside":L=this._left;K=this._left+A;break;case"cross":L=this._left-A;K=this._left+A;break;default:L=this._left-A;K=this._left;break}if(this.shadow){this.renderer.shadowRenderer.draw(D,[[L,k],[K,k]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}z(L,k,K,k,{strokeStyle:d.borderColor})}break;case"yMidAxis":if(v.showGridline&&this.drawGridlines&&(!v.isMinorTick||d.showMinorTicks)){z(this._left,k,u,k);z(f,k,this._right,k)}if(v.showMark&&v.mark&&(!v.isMinorTick||d.showMinorTicks)){A=v.markSize;C=v.mark;var k=Math.round(d.u2p(v.value))+0.5;L=u;K=u+A;if(this.shadow){this.renderer.shadowRenderer.draw(D,[[L,k],[K,k]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}z(L,k,K,k,{strokeStyle:d.borderColor});L=f-A;K=f;if(this.shadow){this.renderer.shadowRenderer.draw(D,[[L,k],[K,k]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}z(L,k,K,k,{strokeStyle:d.borderColor})}break;case"x2axis":if(v.showGridline&&this.drawGridlines&&(!v.isMinorTick||d.showMinorTicks)){z(k,this._bottom,k,this._top)}if(v.showMark&&v.mark&&(!v.isMinorTick||d.showMinorTicks)){A=v.markSize;C=v.mark;var k=Math.round(d.u2p(v.value))+0.5;switch(C){case"outside":L=this._top-A;K=this._top;break;case"inside":L=this._top;K=this._top+A;break;case"cross":L=this._top-A;K=this._top+A;break;default:L=this._top-A;K=this._top;break}if(this.shadow){this.renderer.shadowRenderer.draw(D,[[k,L],[k,K]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}z(k,L,k,K)}break;case"y2axis":if(v.showGridline&&this.drawGridlines&&(!v.isMinorTick||d.showMinorTicks)){z(this._left,k,this._right,k)}if(v.showMark&&v.mark&&(!v.isMinorTick||d.showMinorTicks)){A=v.markSize;C=v.mark;var k=Math.round(d.u2p(v.value))+0.5;switch(C){case"outside":L=this._right;K=this._right+A;break;case"inside":L=this._right-A;K=this._right;break;case"cross":L=this._right-A;K=this._right+A;break;default:L=this._right;K=this._right+A;break}if(this.shadow){this.renderer.shadowRenderer.draw(D,[[L,k],[K,k]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}z(L,k,K,k,{strokeStyle:d.borderColor})}break;default:break}}}v=null}d=null;M=null}D.restore();function z(j,i,e,b,h){D.save();h=h||{};if(h.lineWidth==null||h.lineWidth!=0){a.extend(true,D,h);D.beginPath();D.moveTo(j,i);D.lineTo(e,b);D.stroke()}D.restore()}if(this.shadow){if(G.yMidAxis.show){var F=[[this._left,this._bottom],[u,this._bottom]];this.renderer.shadowRenderer.draw(D,F);var F=[[f,this._bottom],[this._right,this._bottom],[this._right,this._top]];this.renderer.shadowRenderer.draw(D,F);var F=[[u,this._bottom],[u,this._top]];this.renderer.shadowRenderer.draw(D,F)}else{var F=[[this._left,this._bottom],[this._right,this._bottom],[this._right,this._top]];this.renderer.shadowRenderer.draw(D,F)}}if(this.borderWidth!=0&&this.drawBorder){if(G.yMidAxis.show){z(this._left,this._top,u,this._top,{lineCap:"round",strokeStyle:G.x2axis.borderColor,lineWidth:G.x2axis.borderWidth});z(f,this._top,this._right,this._top,{lineCap:"round",strokeStyle:G.x2axis.borderColor,lineWidth:G.x2axis.borderWidth});z(this._right,this._top,this._right,this._bottom,{lineCap:"round",strokeStyle:G.y2axis.borderColor,lineWidth:G.y2axis.borderWidth});z(this._right,this._bottom,f,this._bottom,{lineCap:"round",strokeStyle:G.xaxis.borderColor,lineWidth:G.xaxis.borderWidth});z(u,this._bottom,this._left,this._bottom,{lineCap:"round",strokeStyle:G.xaxis.borderColor,lineWidth:G.xaxis.borderWidth});z(this._left,this._bottom,this._left,this._top,{lineCap:"round",strokeStyle:G.yaxis.borderColor,lineWidth:G.yaxis.borderWidth});z(u,this._bottom,u,this._top,{lineCap:"round",strokeStyle:G.yaxis.borderColor,lineWidth:G.yaxis.borderWidth});z(f,this._bottom,f,this._top,{lineCap:"round",strokeStyle:G.yaxis.borderColor,lineWidth:G.yaxis.borderWidth})}else{z(this._left,this._top,this._right,this._top,{lineCap:"round",strokeStyle:G.x2axis.borderColor,lineWidth:G.x2axis.borderWidth});z(this._right,this._top,this._right,this._bottom,{lineCap:"round",strokeStyle:G.y2axis.borderColor,lineWidth:G.y2axis.borderWidth});z(this._right,this._bottom,this._left,this._bottom,{lineCap:"round",strokeStyle:G.xaxis.borderColor,lineWidth:G.xaxis.borderWidth});z(this._left,this._bottom,this._left,this._top,{lineCap:"round",strokeStyle:G.yaxis.borderColor,lineWidth:G.yaxis.borderWidth})}}D.restore();D=null;G=null}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.js
new file mode 100644
index 00000000..185b94a7
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.js
@@ -0,0 +1,514 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+
+ // Need to ensure pyramid axis and grid renderers are loaded.
+ // You should load these with script tags in the html head, that is more efficient
+ // as the browser will cache the request.
+ // Note, have to block with synchronous request in order to execute bar renderer code.
+ if ($.jqplot.PyramidAxisRenderer === undefined) {
+ $.ajax({
+ url: $.jqplot.pluginLocation + 'jqplot.pyramidAxisRenderer.js',
+ dataType: "script",
+ async: false
+ });
+ }
+
+ if ($.jqplot.PyramidGridRenderer === undefined) {
+ $.ajax({
+ url: $.jqplot.pluginLocation + 'jqplot.pyramidGridRenderer.js',
+ dataType: "script",
+ async: false
+ });
+ }
+
+ $.jqplot.PyramidRenderer = function(){
+ $.jqplot.LineRenderer.call(this);
+ };
+
+ $.jqplot.PyramidRenderer.prototype = new $.jqplot.LineRenderer();
+ $.jqplot.PyramidRenderer.prototype.constructor = $.jqplot.PyramidRenderer;
+
+ // called with scope of a series
+ $.jqplot.PyramidRenderer.prototype.init = function(options, plot) {
+ options = options || {};
+ this._type = 'pyramid';
+ // Group: Properties
+ //
+ // prop: barPadding
+ this.barPadding = 10;
+ this.barWidth = null;
+ // prop: fill
+ // True to fill the bars.
+ this.fill = true;
+ // prop: highlightMouseOver
+ // True to highlight slice when moused over.
+ // This must be false to enable highlightMouseDown to highlight when clicking on a slice.
+ this.highlightMouseOver = true;
+ // prop: highlightMouseDown
+ // True to highlight when a mouse button is pressed over a slice.
+ // This will be disabled if highlightMouseOver is true.
+ this.highlightMouseDown = false;
+ // prop: highlightColors
+ // an array of colors to use when highlighting a slice.
+ this.highlightColors = [];
+ // prop highlightThreshold
+ // Expand the highlightable region in the x direction.
+ // E.g. a value of 3 will highlight a bar when the mouse is
+ // within 3 pixels of the bar in the x direction.
+ this.highlightThreshold = 2;
+ // prop: synchronizeHighlight
+ // Index of another series to highlight when this series is highlighted.
+ // null or false to not synchronize.
+ this.synchronizeHighlight = false;
+ // prop: offsetBars
+ // False will center bars on their y value.
+ // True will push bars up by 1/2 bar width to fill between their y values.
+ // If true, there needs to be 1 more tick than there are bars.
+ this.offsetBars = false;
+
+ // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
+ if (options.highlightMouseDown && options.highlightMouseOver == null) {
+ options.highlightMouseOver = false;
+ }
+
+ this.side = 'right';
+
+ $.extend(true, this, options);
+
+ // if (this.fill === false) {
+ // this.shadow = false;
+ // }
+
+ if (this.side === 'left') {
+ this._highlightThreshold = [[-this.highlightThreshold, 0], [-this.highlightThreshold, 0], [0,0], [0,0]];
+ }
+
+ else {
+ this._highlightThreshold = [[0,0], [0,0], [this.highlightThreshold, 0], [this.highlightThreshold, 0]];
+ }
+
+ this.renderer.options = options;
+ // index of the currenty highlighted point, if any
+ this._highlightedPoint = null;
+ // Array of actual data colors used for each data point.
+ this._dataColors = [];
+ this._barPoints = [];
+ this.fillAxis = 'y';
+ this._primaryAxis = '_yaxis';
+ this._xnudge = 0;
+
+ // set the shape renderer options
+ var opts = {lineJoin:'miter', lineCap:'butt', fill:this.fill, fillRect:this.fill, isarc:false, strokeStyle:this.color, fillStyle:this.color, closePath:this.fill, lineWidth: this.lineWidth};
+ this.renderer.shapeRenderer.init(opts);
+ // set the shadow renderer options
+ var shadow_offset = options.shadowOffset;
+ // set the shadow renderer options
+ if (shadow_offset == null) {
+ // scale the shadowOffset to the width of the line.
+ if (this.lineWidth > 2.5) {
+ shadow_offset = 1.25 * (1 + (Math.atan((this.lineWidth/2.5))/0.785398163 - 1)*0.6);
+ // var shadow_offset = this.shadowOffset;
+ }
+ // for skinny lines, don't make such a big shadow.
+ else {
+ shadow_offset = 1.25 * Math.atan((this.lineWidth/2.5))/0.785398163;
+ }
+ }
+ var sopts = {lineJoin:'miter', lineCap:'butt', fill:this.fill, fillRect:this.fill, isarc:false, angle:this.shadowAngle, offset:shadow_offset, alpha:this.shadowAlpha, depth:this.shadowDepth, closePath:this.fill, lineWidth: this.lineWidth};
+ this.renderer.shadowRenderer.init(sopts);
+
+ plot.postDrawHooks.addOnce(postPlotDraw);
+ plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
+
+ // if this is the left side of pyramid, set y values to negative.
+ if (this.side === 'left') {
+ for (var i=0, l=this.data.length; i<l; i++) {
+ this.data[i][1] = -Math.abs(this.data[i][1]);
+ }
+ }
+ };
+
+ // setGridData
+ // converts the user data values to grid coordinates and stores them
+ // in the gridData array.
+ // Called with scope of a series.
+ $.jqplot.PyramidRenderer.prototype.setGridData = function(plot) {
+ // recalculate the grid data
+ var xp = this._xaxis.series_u2p;
+ var yp = this._yaxis.series_u2p;
+ var data = this._plotData;
+ var pdata = this._prevPlotData;
+ this.gridData = [];
+ this._prevGridData = [];
+ var l = data.length;
+ var adjust = false;
+ var i;
+
+ // if any data values are < 0, consider this a negative series
+ for (i = 0; i < l; i++) {
+ if (data[i][1] < 0) {
+ this.side = 'left';
+ }
+ }
+
+ if (this._yaxis.name === 'yMidAxis' && this.side === 'right') {
+ this._xnudge = this._xaxis.max/2000.0;
+ adjust = true;
+ }
+
+ for (i = 0; i < l; i++) {
+ // if not a line series or if no nulls in data, push the converted point onto the array.
+ if (data[i][0] != null && data[i][1] != null) {
+ this.gridData.push([xp(data[i][1]), yp(data[i][0])]);
+ }
+ // else if there is a null, preserve it.
+ else if (data[i][0] == null) {
+ this.gridData.push([xp(data[i][1]), null]);
+ }
+ else if (data[i][1] == null) {
+ this.gridData.push(null, [yp(data[i][0])]);
+ }
+ // finally, adjust x grid data if have to
+ if (data[i][1] === 0 && adjust) {
+ this.gridData[i][0] = xp(this._xnudge);
+ }
+ }
+ };
+
+ // makeGridData
+ // converts any arbitrary data values to grid coordinates and
+ // returns them. This method exists so that plugins can use a series'
+ // linerenderer to generate grid data points without overwriting the
+ // grid data associated with that series.
+ // Called with scope of a series.
+ $.jqplot.PyramidRenderer.prototype.makeGridData = function(data, plot) {
+ // recalculate the grid data
+ var xp = this._xaxis.series_u2p;
+ var yp = this._yaxis.series_u2p;
+ var gd = [];
+ var l = data.length;
+ var adjust = false;
+ var i;
+
+ // if any data values are < 0, consider this a negative series
+ for (i = 0; i < l; i++) {
+ if (data[i][1] < 0) {
+ this.side = 'left';
+ }
+ }
+
+ if (this._yaxis.name === 'yMidAxis' && this.side === 'right') {
+ this._xnudge = this._xaxis.max/2000.0;
+ adjust = true;
+ }
+
+ for (i = 0; i < l; i++) {
+ // if not a line series or if no nulls in data, push the converted point onto the array.
+ if (data[i][0] != null && data[i][1] != null) {
+ gd.push([xp(data[i][1]), yp(data[i][0])]);
+ }
+ // else if there is a null, preserve it.
+ else if (data[i][0] == null) {
+ gd.push([xp(data[i][1]), null]);
+ }
+ else if (data[i][1] == null) {
+ gd.push([null, yp(data[i][0])]);
+ }
+ // finally, adjust x grid data if have to
+ if (data[i][1] === 0 && adjust) {
+ gd[i][0] = xp(this._xnudge);
+ }
+ }
+
+ return gd;
+ };
+
+ $.jqplot.PyramidRenderer.prototype.setBarWidth = function() {
+ // need to know how many data values we have on the approprate axis and figure it out.
+ var i;
+ var nvals = 0;
+ var nseries = 0;
+ var paxis = this[this._primaryAxis];
+ var s, series, pos;
+ nvals = paxis.max - paxis.min;
+ var nticks = paxis.numberTicks;
+ var nbins = (nticks-1)/2;
+ // so, now we have total number of axis values.
+ var temp = (this.barPadding === 0) ? 1.0 : 0;
+ if (paxis.name == 'xaxis' || paxis.name == 'x2axis') {
+ this.barWidth = (paxis._offsets.max - paxis._offsets.min) / nvals - this.barPadding + temp;
+ }
+ else {
+ if (this.fill) {
+ this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals - this.barPadding + temp;
+ }
+ else {
+ this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals;
+ }
+ }
+ };
+
+ $.jqplot.PyramidRenderer.prototype.draw = function(ctx, gridData, options) {
+ var i;
+ // Ughhh, have to make a copy of options b/c it may be modified later.
+ var opts = $.extend({}, options);
+ var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
+ var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
+ var fill = (opts.fill != undefined) ? opts.fill : this.fill;
+ var xp = this._xaxis.series_u2p;
+ var yp = this._yaxis.series_u2p;
+ var pointx, pointy;
+ // clear out data colors.
+ this._dataColors = [];
+ this._barPoints = [];
+
+ if (this.renderer.options.barWidth == null) {
+ this.renderer.setBarWidth.call(this);
+ }
+
+ // var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this);
+ // var nvals = temp[0];
+ // var nseries = temp[1];
+ // var pos = temp[2];
+ var points = [],
+ w,
+ h;
+
+ // this._barNudge = 0;
+
+ if (showLine) {
+ var negativeColors = new $.jqplot.ColorGenerator(this.negativeSeriesColors);
+ var positiveColors = new $.jqplot.ColorGenerator(this.seriesColors);
+ var negativeColor = negativeColors.get(this.index);
+ if (! this.useNegativeColors) {
+ negativeColor = opts.fillStyle;
+ }
+ var positiveColor = opts.fillStyle;
+ var base;
+ var xstart = this._xaxis.series_u2p(this._xnudge);
+ var ystart = this._yaxis.series_u2p(this._yaxis.min);
+ var yend = this._yaxis.series_u2p(this._yaxis.max);
+ var bw = this.barWidth;
+ var bw2 = bw/2.0;
+ var points = [];
+ var yadj = this.offsetBars ? bw2 : 0;
+
+ for (var i=0, l=gridData.length; i<l; i++) {
+ if (this.data[i][0] == null) {
+ continue;
+ }
+ base = gridData[i][1];
+ // not stacked and first series in stack
+
+ if (this._plotData[i][1] < 0) {
+ if (this.varyBarColor && !this._stack) {
+ if (this.useNegativeColors) {
+ opts.fillStyle = negativeColors.next();
+ }
+ else {
+ opts.fillStyle = positiveColors.next();
+ }
+ }
+ }
+ else {
+ if (this.varyBarColor && !this._stack) {
+ opts.fillStyle = positiveColors.next();
+ }
+ else {
+ opts.fillStyle = positiveColor;
+ }
+ }
+
+ if (this.fill) {
+
+ if (this._plotData[i][1] >= 0) {
+ // xstart = this._xaxis.series_u2p(this._xnudge);
+ w = gridData[i][0] - xstart;
+ h = this.barWidth;
+ points = [xstart, base - bw2 - yadj, w, h];
+ }
+ else {
+ // xstart = this._xaxis.series_u2p(0);
+ w = xstart - gridData[i][0];
+ h = this.barWidth;
+ points = [gridData[i][0], base - bw2 - yadj, w, h];
+ }
+
+ this._barPoints.push([[points[0], points[1] + h], [points[0], points[1]], [points[0] + w, points[1]], [points[0] + w, points[1] + h]]);
+
+ if (shadow) {
+ this.renderer.shadowRenderer.draw(ctx, points);
+ }
+ var clr = opts.fillStyle || this.color;
+ this._dataColors.push(clr);
+ this.renderer.shapeRenderer.draw(ctx, points, opts);
+ }
+
+ else {
+ if (i === 0) {
+ points =[[xstart, ystart], [gridData[i][0], ystart], [gridData[i][0], gridData[i][1] - bw2 - yadj]];
+ }
+
+ else if (i < l-1) {
+ points = points.concat([[gridData[i-1][0], gridData[i-1][1] - bw2 - yadj], [gridData[i][0], gridData[i][1] + bw2 - yadj], [gridData[i][0], gridData[i][1] - bw2 - yadj]]);
+ }
+
+ // finally, draw the line
+ else {
+ points = points.concat([[gridData[i-1][0], gridData[i-1][1] - bw2 - yadj], [gridData[i][0], gridData[i][1] + bw2 - yadj], [gridData[i][0], yend], [xstart, yend]]);
+
+ if (shadow) {
+ this.renderer.shadowRenderer.draw(ctx, points);
+ }
+ var clr = opts.fillStyle || this.color;
+ this._dataColors.push(clr);
+ this.renderer.shapeRenderer.draw(ctx, points, opts);
+ }
+ }
+ }
+ }
+
+ if (this.highlightColors.length == 0) {
+ this.highlightColors = $.jqplot.computeHighlightColors(this._dataColors);
+ }
+
+ else if (typeof(this.highlightColors) == 'string') {
+ this.highlightColors = [];
+ for (var i=0; i<this._dataColors.length; i++) {
+ this.highlightColors.push(this.highlightColors);
+ }
+ }
+
+ };
+
+
+ // setup default renderers for axes and legend so user doesn't have to
+ // called with scope of plot
+ function preInit(target, data, options) {
+ options = options || {};
+ options.axesDefaults = options.axesDefaults || {};
+ options.grid = options.grid || {};
+ options.legend = options.legend || {};
+ options.seriesDefaults = options.seriesDefaults || {};
+ // only set these if there is a pie series
+ var setopts = false;
+ if (options.seriesDefaults.renderer === $.jqplot.PyramidRenderer) {
+ setopts = true;
+ }
+ else if (options.series) {
+ for (var i=0; i < options.series.length; i++) {
+ if (options.series[i].renderer === $.jqplot.PyramidRenderer) {
+ setopts = true;
+ }
+ }
+ }
+
+ if (setopts) {
+ options.axesDefaults.renderer = $.jqplot.PyramidAxisRenderer;
+ options.grid.renderer = $.jqplot.PyramidGridRenderer;
+ options.seriesDefaults.pointLabels = {show: false};
+ }
+ }
+
+ // called within context of plot
+ // create a canvas which we can draw on.
+ // insert it before the eventCanvas, so eventCanvas will still capture events.
+ function postPlotDraw() {
+ // Memory Leaks patch
+ if (this.plugins.pyramidRenderer && this.plugins.pyramidRenderer.highlightCanvas) {
+
+ this.plugins.pyramidRenderer.highlightCanvas.resetCanvas();
+ this.plugins.pyramidRenderer.highlightCanvas = null;
+ }
+
+ this.plugins.pyramidRenderer = {highlightedSeriesIndex:null};
+ this.plugins.pyramidRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
+
+ this.eventCanvas._elem.before(this.plugins.pyramidRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-pyramidRenderer-highlight-canvas', this._plotDimensions, this));
+ this.plugins.pyramidRenderer.highlightCanvas.setContext();
+ this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); });
+ }
+
+ function highlight (plot, sidx, pidx, points) {
+ var s = plot.series[sidx];
+ var canvas = plot.plugins.pyramidRenderer.highlightCanvas;
+ canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height);
+ s._highlightedPoint = pidx;
+ plot.plugins.pyramidRenderer.highlightedSeriesIndex = sidx;
+ var opts = {fillStyle: s.highlightColors[pidx], fillRect: false};
+ s.renderer.shapeRenderer.draw(canvas._ctx, points, opts);
+ if (s.synchronizeHighlight !== false && plot.series.length >= s.synchronizeHighlight && s.synchronizeHighlight !== sidx) {
+ s = plot.series[s.synchronizeHighlight];
+ opts = {fillStyle: s.highlightColors[pidx], fillRect: false};
+ s.renderer.shapeRenderer.draw(canvas._ctx, s._barPoints[pidx], opts);
+ }
+ canvas = null;
+ }
+
+ function unhighlight (plot) {
+ var canvas = plot.plugins.pyramidRenderer.highlightCanvas;
+ canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
+ for (var i=0; i<plot.series.length; i++) {
+ plot.series[i]._highlightedPoint = null;
+ }
+ plot.plugins.pyramidRenderer.highlightedSeriesIndex = null;
+ plot.target.trigger('jqplotDataUnhighlight');
+ canvas = null;
+ }
+
+
+ function handleMove(ev, gridpos, datapos, neighbor, plot) {
+ if (neighbor) {
+ var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
+ var evt1 = jQuery.Event('jqplotDataMouseOver');
+ evt1.pageX = ev.pageX;
+ evt1.pageY = ev.pageY;
+ plot.target.trigger(evt1, ins);
+ if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.pyramidRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
+ var evt = jQuery.Event('jqplotDataHighlight');
+ evt.which = ev.which;
+ evt.pageX = ev.pageX;
+ evt.pageY = ev.pageY;
+ plot.target.trigger(evt, ins);
+ highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points);
+ }
+ }
+ else if (neighbor == null) {
+ unhighlight (plot);
+ }
+ }
+
+ // Have to add hook here, becuase it needs called before series is inited.
+ $.jqplot.preInitHooks.push(preInit);
+
+
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.min.js
new file mode 100644
index 00000000..877f8a39
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(c){if(c.jqplot.PyramidAxisRenderer===undefined){c.ajax({url:c.jqplot.pluginLocation+"jqplot.pyramidAxisRenderer.js",dataType:"script",async:false})}if(c.jqplot.PyramidGridRenderer===undefined){c.ajax({url:c.jqplot.pluginLocation+"jqplot.pyramidGridRenderer.js",dataType:"script",async:false})}c.jqplot.PyramidRenderer=function(){c.jqplot.LineRenderer.call(this)};c.jqplot.PyramidRenderer.prototype=new c.jqplot.LineRenderer();c.jqplot.PyramidRenderer.prototype.constructor=c.jqplot.PyramidRenderer;c.jqplot.PyramidRenderer.prototype.init=function(j,o){j=j||{};this._type="pyramid";this.barPadding=10;this.barWidth=null;this.fill=true;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.highlightThreshold=2;this.synchronizeHighlight=false;this.offsetBars=false;if(j.highlightMouseDown&&j.highlightMouseOver==null){j.highlightMouseOver=false}this.side="right";c.extend(true,this,j);if(this.side==="left"){this._highlightThreshold=[[-this.highlightThreshold,0],[-this.highlightThreshold,0],[0,0],[0,0]]}else{this._highlightThreshold=[[0,0],[0,0],[this.highlightThreshold,0],[this.highlightThreshold,0]]}this.renderer.options=j;this._highlightedPoint=null;this._dataColors=[];this._barPoints=[];this.fillAxis="y";this._primaryAxis="_yaxis";this._xnudge=0;var n={lineJoin:"miter",lineCap:"butt",fill:this.fill,fillRect:this.fill,isarc:false,strokeStyle:this.color,fillStyle:this.color,closePath:this.fill,lineWidth:this.lineWidth};this.renderer.shapeRenderer.init(n);var m=j.shadowOffset;if(m==null){if(this.lineWidth>2.5){m=1.25*(1+(Math.atan((this.lineWidth/2.5))/0.785398163-1)*0.6)}else{m=1.25*Math.atan((this.lineWidth/2.5))/0.785398163}}var h={lineJoin:"miter",lineCap:"butt",fill:this.fill,fillRect:this.fill,isarc:false,angle:this.shadowAngle,offset:m,alpha:this.shadowAlpha,depth:this.shadowDepth,closePath:this.fill,lineWidth:this.lineWidth};this.renderer.shadowRenderer.init(h);o.postDrawHooks.addOnce(f);o.eventListenerHooks.addOnce("jqplotMouseMove",e);if(this.side==="left"){for(var k=0,g=this.data.length;k<g;k++){this.data[k][1]=-Math.abs(this.data[k][1])}}};c.jqplot.PyramidRenderer.prototype.setGridData=function(p){var j=this._xaxis.series_u2p;var o=this._yaxis.series_u2p;var k=this._plotData;var n=this._prevPlotData;this.gridData=[];this._prevGridData=[];var g=k.length;var m=false;var h;for(h=0;h<g;h++){if(k[h][1]<0){this.side="left"}}if(this._yaxis.name==="yMidAxis"&&this.side==="right"){this._xnudge=this._xaxis.max/2000;m=true}for(h=0;h<g;h++){if(k[h][0]!=null&&k[h][1]!=null){this.gridData.push([j(k[h][1]),o(k[h][0])])}else{if(k[h][0]==null){this.gridData.push([j(k[h][1]),null])}else{if(k[h][1]==null){this.gridData.push(null,[o(k[h][0])])}}}if(k[h][1]===0&&m){this.gridData[h][0]=j(this._xnudge)}}};c.jqplot.PyramidRenderer.prototype.makeGridData=function(m,p){var k=this._xaxis.series_u2p;var o=this._yaxis.series_u2p;var j=[];var g=m.length;var n=false;var h;for(h=0;h<g;h++){if(m[h][1]<0){this.side="left"}}if(this._yaxis.name==="yMidAxis"&&this.side==="right"){this._xnudge=this._xaxis.max/2000;n=true}for(h=0;h<g;h++){if(m[h][0]!=null&&m[h][1]!=null){j.push([k(m[h][1]),o(m[h][0])])}else{if(m[h][0]==null){j.push([k(m[h][1]),null])}else{if(m[h][1]==null){j.push([null,o(m[h][0])])}}}if(m[h][1]===0&&n){j[h][0]=k(this._xnudge)}}return j};c.jqplot.PyramidRenderer.prototype.setBarWidth=function(){var k;var g=0;var h=0;var m=this[this._primaryAxis];var q,l,o;g=m.max-m.min;var n=m.numberTicks;var j=(n-1)/2;var p=(this.barPadding===0)?1:0;if(m.name=="xaxis"||m.name=="x2axis"){this.barWidth=(m._offsets.max-m._offsets.min)/g-this.barPadding+p}else{if(this.fill){this.barWidth=(m._offsets.min-m._offsets.max)/g-this.barPadding+p}else{this.barWidth=(m._offsets.min-m._offsets.max)/g}}};c.jqplot.PyramidRenderer.prototype.draw=function(B,I,k){var E;var u=c.extend({},k);var p=(u.shadow!=undefined)?u.shadow:this.shadow;var K=(u.showLine!=undefined)?u.showLine:this.showLine;var C=(u.fill!=undefined)?u.fill:this.fill;var t=this._xaxis.series_u2p;var G=this._yaxis.series_u2p;var z,x;this._dataColors=[];this._barPoints=[];if(this.renderer.options.barWidth==null){this.renderer.setBarWidth.call(this)}var D=[],s,F;if(K){var q=new c.jqplot.ColorGenerator(this.negativeSeriesColors);var v=new c.jqplot.ColorGenerator(this.seriesColors);var J=q.get(this.index);if(!this.useNegativeColors){J=u.fillStyle}var o=u.fillStyle;var n;var L=this._xaxis.series_u2p(this._xnudge);var j=this._yaxis.series_u2p(this._yaxis.min);var m=this._yaxis.series_u2p(this._yaxis.max);var H=this.barWidth;var y=H/2;var D=[];var r=this.offsetBars?y:0;for(var E=0,A=I.length;E<A;E++){if(this.data[E][0]==null){continue}n=I[E][1];if(this._plotData[E][1]<0){if(this.varyBarColor&&!this._stack){if(this.useNegativeColors){u.fillStyle=q.next()}else{u.fillStyle=v.next()}}}else{if(this.varyBarColor&&!this._stack){u.fillStyle=v.next()}else{u.fillStyle=o}}if(this.fill){if(this._plotData[E][1]>=0){s=I[E][0]-L;F=this.barWidth;D=[L,n-y-r,s,F]}else{s=L-I[E][0];F=this.barWidth;D=[I[E][0],n-y-r,s,F]}this._barPoints.push([[D[0],D[1]+F],[D[0],D[1]],[D[0]+s,D[1]],[D[0]+s,D[1]+F]]);if(p){this.renderer.shadowRenderer.draw(B,D)}var g=u.fillStyle||this.color;this._dataColors.push(g);this.renderer.shapeRenderer.draw(B,D,u)}else{if(E===0){D=[[L,j],[I[E][0],j],[I[E][0],I[E][1]-y-r]]}else{if(E<A-1){D=D.concat([[I[E-1][0],I[E-1][1]-y-r],[I[E][0],I[E][1]+y-r],[I[E][0],I[E][1]-y-r]])}else{D=D.concat([[I[E-1][0],I[E-1][1]-y-r],[I[E][0],I[E][1]+y-r],[I[E][0],m],[L,m]]);if(p){this.renderer.shadowRenderer.draw(B,D)}var g=u.fillStyle||this.color;this._dataColors.push(g);this.renderer.shapeRenderer.draw(B,D,u)}}}}}if(this.highlightColors.length==0){this.highlightColors=c.jqplot.computeHighlightColors(this._dataColors)}else{if(typeof(this.highlightColors)=="string"){this.highlightColors=[];for(var E=0;E<this._dataColors.length;E++){this.highlightColors.push(this.highlightColors)}}}};function b(l,k,h){h=h||{};h.axesDefaults=h.axesDefaults||{};h.grid=h.grid||{};h.legend=h.legend||{};h.seriesDefaults=h.seriesDefaults||{};var g=false;if(h.seriesDefaults.renderer===c.jqplot.PyramidRenderer){g=true}else{if(h.series){for(var j=0;j<h.series.length;j++){if(h.series[j].renderer===c.jqplot.PyramidRenderer){g=true}}}}if(g){h.axesDefaults.renderer=c.jqplot.PyramidAxisRenderer;h.grid.renderer=c.jqplot.PyramidGridRenderer;h.seriesDefaults.pointLabels={show:false}}}function f(){if(this.plugins.pyramidRenderer&&this.plugins.pyramidRenderer.highlightCanvas){this.plugins.pyramidRenderer.highlightCanvas.resetCanvas();this.plugins.pyramidRenderer.highlightCanvas=null}this.plugins.pyramidRenderer={highlightedSeriesIndex:null};this.plugins.pyramidRenderer.highlightCanvas=new c.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.pyramidRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-pyramidRenderer-highlight-canvas",this._plotDimensions,this));this.plugins.pyramidRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(g){d(g.data.plot)})}function a(m,l,j,i){var h=m.series[l];var g=m.plugins.pyramidRenderer.highlightCanvas;g._ctx.clearRect(0,0,g._ctx.canvas.width,g._ctx.canvas.height);h._highlightedPoint=j;m.plugins.pyramidRenderer.highlightedSeriesIndex=l;var k={fillStyle:h.highlightColors[j],fillRect:false};h.renderer.shapeRenderer.draw(g._ctx,i,k);if(h.synchronizeHighlight!==false&&m.series.length>=h.synchronizeHighlight&&h.synchronizeHighlight!==l){h=m.series[h.synchronizeHighlight];k={fillStyle:h.highlightColors[j],fillRect:false};h.renderer.shapeRenderer.draw(g._ctx,h._barPoints[j],k)}g=null}function d(j){var g=j.plugins.pyramidRenderer.highlightCanvas;g._ctx.clearRect(0,0,g._ctx.canvas.width,g._ctx.canvas.height);for(var h=0;h<j.series.length;h++){j.series[h]._highlightedPoint=null}j.plugins.pyramidRenderer.highlightedSeriesIndex=null;j.target.trigger("jqplotDataUnhighlight");g=null}function e(k,j,n,m,l){if(m){var i=[m.seriesIndex,m.pointIndex,m.data];var h=jQuery.Event("jqplotDataMouseOver");h.pageX=k.pageX;h.pageY=k.pageY;l.target.trigger(h,i);if(l.series[i[0]].highlightMouseOver&&!(i[0]==l.plugins.pyramidRenderer.highlightedSeriesIndex&&i[1]==l.series[i[0]]._highlightedPoint)){var g=jQuery.Event("jqplotDataHighlight");g.which=k.which;g.pageX=k.pageX;g.pageY=k.pageY;l.target.trigger(g,i);a(l,m.seriesIndex,m.pointIndex,m.points)}}else{if(m==null){d(l)}}}c.jqplot.preInitHooks.push(b)})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.js
new file mode 100644
index 00000000..168fb7a6
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.js
@@ -0,0 +1,223 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4
+ * Revision: 1121
+ *
+ * Copyright (c) 2009-2012 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ */
+(function($) {
+
+ /**
+ * Class: $.jqplot.Trendline
+ * Plugin which will automatically compute and draw trendlines for plotted data.
+ */
+ $.jqplot.Trendline = function() {
+ // Group: Properties
+
+ // prop: show
+ // Wether or not to show the trend line.
+ this.show = $.jqplot.config.enablePlugins;
+ // prop: color
+ // CSS color spec for the trend line.
+ // By default this wil be the same color as the primary line.
+ this.color = '#666666';
+ // prop: renderer
+ // Renderer to use to draw the trend line.
+ // The data series that is plotted may not be rendered as a line.
+ // Therefore, we use our own line renderer here to draw a trend line.
+ this.renderer = new $.jqplot.LineRenderer();
+ // prop: rendererOptions
+ // Options to pass to the line renderer.
+ // By default, markers are not shown on trend lines.
+ this.rendererOptions = {marker:{show:false}};
+ // prop: label
+ // Label for the trend line to use in the legend.
+ this.label = '';
+ // prop: type
+ // Either 'exponential', 'exp', or 'linear'.
+ this.type = 'linear';
+ // prop: shadow
+ // true or false, wether or not to show the shadow.
+ this.shadow = true;
+ // prop: markerRenderer
+ // Renderer to use to draw markers on the line.
+ // I think this is wrong.
+ this.markerRenderer = {show:false};
+ // prop: lineWidth
+ // Width of the trend line.
+ this.lineWidth = 1.5;
+ // prop: shadowAngle
+ // Angle of the shadow on the trend line.
+ this.shadowAngle = 45;
+ // prop: shadowOffset
+ // pixel offset for each stroke of the shadow.
+ this.shadowOffset = 1.0;
+ // prop: shadowAlpha
+ // Alpha transparency of the shadow.
+ this.shadowAlpha = 0.07;
+ // prop: shadowDepth
+ // number of strokes to make of the shadow.
+ this.shadowDepth = 3;
+ this.isTrendline = true;
+
+ };
+
+ $.jqplot.postSeriesInitHooks.push(parseTrendLineOptions);
+ $.jqplot.postDrawSeriesHooks.push(drawTrendline);
+ $.jqplot.addLegendRowHooks.push(addTrendlineLegend);
+
+ // called witin scope of the legend object
+ // current series passed in
+ // must return null or an object {label:label, color:color}
+ function addTrendlineLegend(series) {
+ var ret = null;
+ if (series.trendline && series.trendline.show) {
+ var lt = series.trendline.label.toString();
+ if (lt) {
+ ret = {label:lt, color:series.trendline.color};
+ }
+ }
+ return ret;
+ }
+
+ // called within scope of a series
+ function parseTrendLineOptions (target, data, seriesDefaults, options, plot) {
+ if (this._type && (this._type === 'line' || this._type == 'bar')) {
+ this.trendline = new $.jqplot.Trendline();
+ options = options || {};
+ $.extend(true, this.trendline, {color:this.color}, seriesDefaults.trendline, options.trendline);
+ this.trendline.renderer.init.call(this.trendline, null);
+ }
+ }
+
+ // called within scope of series object
+ function drawTrendline(sctx, options) {
+ // if we have options, merge trendline options in with precedence
+ options = $.extend(true, {}, this.trendline, options);
+
+ if (this.trendline && options.show) {
+ var fit;
+ // this.renderer.setGridData.call(this);
+ var data = options.data || this.data;
+ fit = fitData(data, this.trendline.type);
+ var gridData = options.gridData || this.renderer.makeGridData.call(this, fit.data);
+ this.trendline.renderer.draw.call(this.trendline, sctx, gridData, {showLine:true, shadow:this.trendline.shadow});
+ }
+ }
+
+ function regression(x, y, typ) {
+ var type = (typ == null) ? 'linear' : typ;
+ var N = x.length;
+ var slope;
+ var intercept;
+ var SX = 0;
+ var SY = 0;
+ var SXX = 0;
+ var SXY = 0;
+ var SYY = 0;
+ var Y = [];
+ var X = [];
+
+ if (type == 'linear') {
+ X = x;
+ Y = y;
+ }
+ else if (type == 'exp' || type == 'exponential') {
+ for ( var i=0; i<y.length; i++) {
+ // ignore points <= 0, log undefined.
+ if (y[i] <= 0) {
+ N--;
+ }
+ else {
+ X.push(x[i]);
+ Y.push(Math.log(y[i]));
+ }
+ }
+ }
+
+ for ( var i = 0; i < N; i++) {
+ SX = SX + X[i];
+ SY = SY + Y[i];
+ SXY = SXY + X[i]* Y[i];
+ SXX = SXX + X[i]* X[i];
+ SYY = SYY + Y[i]* Y[i];
+ }
+
+ slope = (N*SXY - SX*SY)/(N*SXX - SX*SX);
+ intercept = (SY - slope*SX)/N;
+
+ return [slope, intercept];
+ }
+
+ function linearRegression(X,Y) {
+ var ret;
+ ret = regression(X,Y,'linear');
+ return [ret[0],ret[1]];
+ }
+
+ function expRegression(X,Y) {
+ var ret;
+ var x = X;
+ var y = Y;
+ ret = regression(x, y,'exp');
+ var base = Math.exp(ret[0]);
+ var coeff = Math.exp(ret[1]);
+ return [base, coeff];
+ }
+
+ function fitData(data, typ) {
+ var type = (typ == null) ? 'linear' : typ;
+ var ret;
+ var res;
+ var x = [];
+ var y = [];
+ var ypred = [];
+
+ for (i=0; i<data.length; i++){
+ if (data[i] != null && data[i][0] != null && data[i][1] != null) {
+ x.push(data[i][0]);
+ y.push(data[i][1]);
+ }
+ }
+
+ if (type == 'linear') {
+ ret = linearRegression(x,y);
+ for ( var i=0; i<x.length; i++){
+ res = ret[0]*x[i] + ret[1];
+ ypred.push([x[i], res]);
+ }
+ }
+ else if (type == 'exp' || type == 'exponential') {
+ ret = expRegression(x,y);
+ for ( var i=0; i<x.length; i++){
+ res = ret[1]*Math.pow(ret[0],x[i]);
+ ypred.push([x[i], res]);
+ }
+ }
+ return {data: ypred, slope: ret[0], intercept: ret[1]};
+ }
+
+})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.min.js
new file mode 100644
index 00000000..96c8f5ac
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.min.js
@@ -0,0 +1,57 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.4r1121
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ * version 2007.04.27
+ * author Ash Searle
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
+ * http://hexmen.com/js/sprintf.js
+ * The author (Ash Searle) has placed this code in the public domain:
+ * "This code is unrestricted: you are free to use it however you like."
+ *
+ * included jsDate library by Chris Leonello:
+ *
+ * Copyright (c) 2010-2011 Chris Leonello
+ *
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
+ *
+ * jsDate borrows many concepts and ideas from the Date Instance
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
+ *
+ * Ken's origianl Date Instance Methods and copyright notice:
+ *
+ * Ken Snyder (ken d snyder at gmail dot com)
+ * 2008-09-10
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
+ *
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
+ * Larry has generously given permission to adapt his code for inclusion
+ * into jqPlot.
+ *
+ * Larry's original code can be found here:
+ *
+ * https://github.com/lsiden/export-jqplot-to-png
+ *
+ *
+ */
+(function(f){f.jqplot.Trendline=function(){this.show=f.jqplot.config.enablePlugins;this.color="#666666";this.renderer=new f.jqplot.LineRenderer();this.rendererOptions={marker:{show:false}};this.label="";this.type="linear";this.shadow=true;this.markerRenderer={show:false};this.lineWidth=1.5;this.shadowAngle=45;this.shadowOffset=1;this.shadowAlpha=0.07;this.shadowDepth=3;this.isTrendline=true};f.jqplot.postSeriesInitHooks.push(e);f.jqplot.postDrawSeriesHooks.push(g);f.jqplot.addLegendRowHooks.push(a);function a(k){var j=null;if(k.trendline&&k.trendline.show){var i=k.trendline.label.toString();if(i){j={label:i,color:k.trendline.color}}}return j}function e(m,k,j,i,l){if(this._type&&(this._type==="line"||this._type=="bar")){this.trendline=new f.jqplot.Trendline();i=i||{};f.extend(true,this.trendline,{color:this.color},j.trendline,i.trendline);this.trendline.renderer.init.call(this.trendline,null)}}function g(m,i){i=f.extend(true,{},this.trendline,i);if(this.trendline&&i.show){var k;var l=i.data||this.data;k=c(l,this.trendline.type);var j=i.gridData||this.renderer.makeGridData.call(this,k.data);this.trendline.renderer.draw.call(this.trendline,m,j,{showLine:true,shadow:this.trendline.shadow})}}function b(w,v,n){var u=(n==null)?"linear":n;var s=w.length;var t;var z;var o=0;var m=0;var r=0;var q=0;var l=0;var j=[];var k=[];if(u=="linear"){k=w;j=v}else{if(u=="exp"||u=="exponential"){for(var p=0;p<v.length;p++){if(v[p]<=0){s--}else{k.push(w[p]);j.push(Math.log(v[p]))}}}}for(var p=0;p<s;p++){o=o+k[p];m=m+j[p];q=q+k[p]*j[p];r=r+k[p]*k[p];l=l+j[p]*j[p]}t=(s*q-o*m)/(s*r-o*o);z=(m-t*o)/s;return[t,z]}function h(k,j){var i;i=b(k,j,"linear");return[i[0],i[1]]}function d(o,m){var k;var i=o;var n=m;k=b(i,n,"exp");var l=Math.exp(k[0]);var j=Math.exp(k[1]);return[l,j]}function c(l,j){var p=(j==null)?"linear":j;var n;var o;var r=[];var q=[];var m=[];for(k=0;k<l.length;k++){if(l[k]!=null&&l[k][0]!=null&&l[k][1]!=null){r.push(l[k][0]);q.push(l[k][1])}}if(p=="linear"){n=h(r,q);for(var k=0;k<r.length;k++){o=n[0]*r[k]+n[1];m.push([r[k],o])}}else{if(p=="exp"||p=="exponential"){n=d(r,q);for(var k=0;k<r.length;k++){o=n[1]*Math.pow(n[0],r[k]);m.push([r[k],o])}}}return{data:m,slope:n[0],intercept:n[1]}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/usage.txt b/wqflask/wqflask/static/packages/jqplot/usage.txt
new file mode 100644
index 00000000..01f82d27
--- /dev/null
+++ b/wqflask/wqflask/static/packages/jqplot/usage.txt
@@ -0,0 +1,126 @@
+Title: jqPlot Usage
+
+Usage Documentation:
+
+Introduction:
+
+jqPlot is a jQuery plugin to generate pure client-side javascript charts in your web pages.
+
+The jqPlot home page is at <http://www.jqplot.com/>.
+
+The project page and downloads are at <http://www.bitbucket.org/cleonello/jqplot/>.
+
+Below are a few examples to demonstrate jqPlot usage. These plots are shown as static images.
+Many more examples of dynamically rendered plots can be seen on the test and examples pages here: <../../tests/>.
+
+Include the Files:
+
+jqPlot requires jQuery (1.4+ required for certain features). jQuery is included in the distribution.
+To use jqPlot include jquery, the jqPlot jQuery plugin, jqPlot css file and optionally the excanvas
+script for IE support in your web page. Note, excanvas is required only for IE versions below 9. IE 9 includes
+native support for the canvas element and does not require excanvas:
+
+> <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
+> <script language="javascript" type="text/javascript" src="jquery.min.js"></script>
+> <script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script>
+> <link rel="stylesheet" type="text/css" href="jquery.jqplot.css" />
+
+Add a plot container:
+
+Add a container (target) to your web page where you want your plot to show up.
+Be sure to give your target a width and a height:
+
+> <div id="chartdiv" style="height:400px;width:300px; "></div>
+
+Create a plot:
+
+Then, create the actual plot by calling the
+$.jqplot plugin with the id of your target and some data:
+
+> $.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);
+
+Which will produce a
+chart like:
+
+(see images/basicline.png)
+
+Plot Options:
+
+You can customize the plot by passing options to the $.jqplot function. Options are described in
+<jqPlot Options> in the jqPlotOptions.txt file. An example of options usage:
+
+> $.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]],
+> { title:'Exponential Line',
+> axes:{yaxis:{min:-10, max:240}},
+> series:[{color:'#5FAB78'}]
+> });
+
+Which will produce
+a plot like:
+
+(see images/basicoptions.png)
+
+Using Plugins:
+
+You can use jqPlot plugins (that is, plugins to the jqPlot plugin) by including them in your html
+after you include the jqPlot plugin. Here is how to include the log axis plugin:
+
+> <link rel="stylesheet" type="text/css" href="jquery.jqplot.css" />
+> <!--[if IE]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
+> <script language="javascript" type="text/javascript" src="jquery.min.js"></script>
+> <script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script>
+> <script language="javascript" type="text/javascript" src="jqplot.logAxisRenderer.js"></script>
+
+Important note: For jqplot builds r529 and above (0.9.7r529 and higher), you must explicitly
+enable plugins via either the { show: true } plugin option to the plot or by using
+the $.jqplot.config.enablePlugins = true; config options set on the page before plot creation.
+Only plugins that can be immediately active upon loading are affected. This includes
+non-renderer plugins like cursor, dragable, highlighter, and trendline.
+
+Here is a the same $.jqplot call
+but with a log y axis:
+
+> $.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]],
+> { title:'Exponential Line',
+> axes:{yaxis:{renderer: $.jqplot.LogAxisRenderer}},
+> series:[{color:'#5FAB78'}]
+> });
+
+Which produces
+a plot like:
+
+(see images/basiclogaxis.png)
+
+You can further customize with options specific
+to the log axis plugin:
+
+> $.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]],
+> { title:'Exponential Line',
+> axes:{yaxis:{renderer: $.jqplot.LogAxisRenderer, tickDistribution:'power'}},
+> series:[{color:'#5FAB78'}]
+> });
+
+Which makes a
+plot like:
+
+(see images/basiclogoptions.png)
+
+For a full list of options, see <jqPlot Options> in the jqPlotOptions.txt file.
+
+You can add as many plugins as you wish. Order is generally not important.
+Some plugins, like the highlighter plugin which highlights data points near the
+mouse, don't need any extra options or setup to function. Highlighter does have
+additional options which the user can set.
+
+Other plugins, the barRenderer for example, provide functionality the must be specified
+in the chart options object. To render a series as a bar graph with the bar renderer,
+you would first include the plugin after jqPlot:
+
+> <script language="javascript" type="text/javascript" src="plugins/jqplot.barRenderer.min.js"></script>
+
+Then you would create
+a chart like:
+
+> $.jqplot('chartdiv', [[34.53, 56.32, 25.1, 18.6]], {series:[{renderer:$.jqplot.BarRenderer}]});
+
+Here the default LineRenderer is replaced by a BarRenderer to generate a bar graph for the first (an only) series. \ No newline at end of file