From b5a202e15594f27511861b62bab401c388368fbc Mon Sep 17 00:00:00 2001
From: root
Date: Thu, 25 Jun 2015 10:33:53 -0400
Subject: [PATCH] init
---
web/.project | 22 +
web/blocks.sh | 10 +
web/extensions/jqplot/MIT-LICENSE.txt | 21 +
web/extensions/jqplot/README.txt | 77 +
web/extensions/jqplot/changes.txt | 458 +
web/extensions/jqplot/copyright.txt | 56 +
web/extensions/jqplot/excanvas.js | 1438 ++
web/extensions/jqplot/excanvas.min.js | 3 +
web/extensions/jqplot/gpl-2.0.txt | 280 +
web/extensions/jqplot/jqPlotCssStyling.txt | 53 +
web/extensions/jqplot/jqPlotOptions.txt | 391 +
web/extensions/jqplot/jquery.jqplot.css | 259 +
web/extensions/jqplot/jquery.jqplot.js | 11411 ++++++++++++++++
web/extensions/jqplot/jquery.jqplot.min.css | 1 +
web/extensions/jqplot/jquery.jqplot.min.js | 3 +
web/extensions/jqplot/optionsTutorial.txt | 243 +
.../plugins/jqplot.BezierCurveRenderer.js | 314 +
.../plugins/jqplot.BezierCurveRenderer.min.js | 3 +
.../jqplot/plugins/jqplot.barRenderer.js | 801 ++
.../jqplot/plugins/jqplot.barRenderer.min.js | 3 +
.../jqplot/plugins/jqplot.blockRenderer.js | 235 +
.../plugins/jqplot.blockRenderer.min.js | 3 +
.../jqplot/plugins/jqplot.bubbleRenderer.js | 759 +
.../plugins/jqplot.bubbleRenderer.min.js | 3 +
.../plugins/jqplot.canvasAxisLabelRenderer.js | 203 +
.../jqplot.canvasAxisLabelRenderer.min.js | 3 +
.../plugins/jqplot.canvasAxisTickRenderer.js | 253 +
.../jqplot.canvasAxisTickRenderer.min.js | 3 +
.../jqplot/plugins/jqplot.canvasOverlay.js | 1021 ++
.../plugins/jqplot.canvasOverlay.min.js | 3 +
.../plugins/jqplot.canvasTextRenderer.js | 449 +
.../plugins/jqplot.canvasTextRenderer.min.js | 3 +
.../plugins/jqplot.categoryAxisRenderer.js | 679 +
.../jqplot.categoryAxisRenderer.min.js | 3 +
.../jqplot/plugins/jqplot.ciParser.js | 116 +
.../jqplot/plugins/jqplot.ciParser.min.js | 3 +
.../jqplot/plugins/jqplot.cursor.js | 1108 ++
.../jqplot/plugins/jqplot.cursor.min.js | 3 +
.../jqplot/plugins/jqplot.dateAxisRenderer.js | 741 +
.../plugins/jqplot.dateAxisRenderer.min.js | 3 +
.../jqplot/plugins/jqplot.donutRenderer.js | 805 ++
.../plugins/jqplot.donutRenderer.min.js | 3 +
.../jqplot/plugins/jqplot.dragable.js | 225 +
.../jqplot/plugins/jqplot.dragable.min.js | 3 +
.../plugins/jqplot.enhancedLegendRenderer.js | 305 +
.../jqplot.enhancedLegendRenderer.min.js | 3 +
.../jqplot/plugins/jqplot.funnelRenderer.js | 943 ++
.../plugins/jqplot.funnelRenderer.min.js | 3 +
.../jqplot/plugins/jqplot.highlighter.js | 465 +
.../jqplot/plugins/jqplot.highlighter.min.js | 3 +
web/extensions/jqplot/plugins/jqplot.json2.js | 475 +
.../jqplot/plugins/jqplot.json2.min.js | 3 +
.../jqplot/plugins/jqplot.logAxisRenderer.js | 534 +
.../plugins/jqplot.logAxisRenderer.min.js | 3 +
.../plugins/jqplot.mekkoAxisRenderer.js | 611 +
.../plugins/jqplot.mekkoAxisRenderer.min.js | 3 +
.../jqplot/plugins/jqplot.mekkoRenderer.js | 437 +
.../plugins/jqplot.mekkoRenderer.min.js | 3 +
.../plugins/jqplot.meterGaugeRenderer.js | 1029 ++
.../plugins/jqplot.meterGaugeRenderer.min.js | 3 +
.../jqplot/plugins/jqplot.mobile.js | 45 +
.../jqplot/plugins/jqplot.mobile.min.js | 3 +
.../jqplot/plugins/jqplot.ohlcRenderer.js | 373 +
.../jqplot/plugins/jqplot.ohlcRenderer.min.js | 3 +
.../jqplot/plugins/jqplot.pieRenderer.js | 904 ++
.../jqplot/plugins/jqplot.pieRenderer.min.js | 3 +
.../jqplot/plugins/jqplot.pointLabels.js | 377 +
.../jqplot/plugins/jqplot.pointLabels.min.js | 3 +
.../plugins/jqplot.pyramidAxisRenderer.js | 728 +
.../plugins/jqplot.pyramidAxisRenderer.min.js | 3 +
.../plugins/jqplot.pyramidGridRenderer.js | 429 +
.../plugins/jqplot.pyramidGridRenderer.min.js | 3 +
.../jqplot/plugins/jqplot.pyramidRenderer.js | 514 +
.../plugins/jqplot.pyramidRenderer.min.js | 3 +
.../jqplot/plugins/jqplot.trendline.js | 223 +
.../jqplot/plugins/jqplot.trendline.min.js | 3 +
web/extensions/jqplot/usage.txt | 126 +
web/extensions/jquery/js/jquery-1.10.2.min.js | 6 +
web/extensions/jquery/js/jquery-1.8.3-dev.js | 9472 +++++++++++++
.../jquery/js/jquery-ui-1.10.3.custom.min.js | 7 +
.../jquery/js/jquery-ui-1.9.1.custom.min.js | 6 +
.../ui-lightness/images/animated-overlay.gif | Bin 0 -> 1738 bytes
.../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 418 bytes
.../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 312 bytes
.../images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 205 bytes
.../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 262 bytes
.../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 348 bytes
.../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 207 bytes
.../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 5815 bytes
.../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 278 bytes
.../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 328 bytes
.../images/ui-icons_222222_256x240.png | Bin 0 -> 6922 bytes
.../images/ui-icons_228ef1_256x240.png | Bin 0 -> 4549 bytes
.../images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4549 bytes
.../images/ui-icons_ffd27a_256x240.png | Bin 0 -> 4549 bytes
.../images/ui-icons_ffffff_256x240.png | Bin 0 -> 6299 bytes
.../jquery/themes/ui-lightness/jquery-ui.css | 1178 ++
.../ui-lightness/jquery.ui.accordion.css | 38 +
.../themes/ui-lightness/jquery.ui.all.css | 12 +
.../ui-lightness/jquery.ui.autocomplete.css | 16 +
.../themes/ui-lightness/jquery.ui.base.css | 25 +
.../themes/ui-lightness/jquery.ui.button.css | 114 +
.../themes/ui-lightness/jquery.ui.core.css | 93 +
.../ui-lightness/jquery.ui.datepicker.css | 178 +
.../themes/ui-lightness/jquery.ui.dialog.css | 69 +
.../themes/ui-lightness/jquery.ui.menu.css | 79 +
.../ui-lightness/jquery.ui.progressbar.css | 28 +
.../ui-lightness/jquery.ui.resizable.css | 78 +
.../ui-lightness/jquery.ui.selectable.css | 15 +
.../themes/ui-lightness/jquery.ui.slider.css | 73 +
.../themes/ui-lightness/jquery.ui.spinner.css | 65 +
.../themes/ui-lightness/jquery.ui.tabs.css | 52 +
.../themes/ui-lightness/jquery.ui.theme.css | 406 +
.../themes/ui-lightness/jquery.ui.tooltip.css | 19 +
web/favicon.ico | Bin 0 -> 1150 bytes
web/framework-1.0.8/.htaccess | 1 +
web/framework-1.0.8/YiiBase.php | 684 +
web/framework-1.0.8/base/CApplication.php | 718 +
.../base/CApplicationComponent.php | 56 +
web/framework-1.0.8/base/CBehavior.php | 87 +
web/framework-1.0.8/base/CComponent.php | 599 +
web/framework-1.0.8/base/CErrorEvent.php | 54 +
web/framework-1.0.8/base/CErrorHandler.php | 336 +
web/framework-1.0.8/base/CException.php | 22 +
web/framework-1.0.8/base/CExceptionEvent.php | 36 +
web/framework-1.0.8/base/CHttpException.php | 40 +
web/framework-1.0.8/base/CModel.php | 634 +
web/framework-1.0.8/base/CModelBehavior.php | 54 +
web/framework-1.0.8/base/CModelEvent.php | 32 +
web/framework-1.0.8/base/CModule.php | 465 +
web/framework-1.0.8/base/CSecurityManager.php | 245 +
web/framework-1.0.8/base/CStatePersister.php | 102 +
web/framework-1.0.8/base/interfaces.php | 534 +
web/framework-1.0.8/caching/CApcCache.php | 108 +
web/framework-1.0.8/caching/CCache.php | 312 +
web/framework-1.0.8/caching/CDbCache.php | 250 +
web/framework-1.0.8/caching/CDummyCache.php | 145 +
.../caching/CEAcceleratorCache.php | 104 +
web/framework-1.0.8/caching/CFileCache.php | 217 +
web/framework-1.0.8/caching/CMemCache.php | 272 +
web/framework-1.0.8/caching/CXCache.php | 97 +
.../caching/CZendDataCache.php | 98 +
.../caching/dependencies/CCacheDependency.php | 62 +
.../dependencies/CChainedCacheDependency.php | 68 +
.../dependencies/CDbCacheDependency.php | 87 +
.../CDirectoryCacheDependency.php | 134 +
.../dependencies/CExpressionDependency.php | 49 +
.../dependencies/CFileCacheDependency.php | 53 +
.../CGlobalStateCacheDependency.php | 54 +
.../collections/CAttributeCollection.php | 187 +
.../collections/CConfiguration.php | 121 +
web/framework-1.0.8/collections/CList.php | 341 +
.../collections/CListIterator.php | 94 +
web/framework-1.0.8/collections/CMap.php | 319 +
.../collections/CMapIterator.php | 93 +
web/framework-1.0.8/collections/CQueue.php | 168 +
.../collections/CQueueIterator.php | 94 +
web/framework-1.0.8/collections/CStack.php | 169 +
.../collections/CStackIterator.php | 94 +
.../collections/CTypedList.php | 52 +
web/framework-1.0.8/db/CDbCommand.php | 326 +
web/framework-1.0.8/db/CDbConnection.php | 645 +
web/framework-1.0.8/db/CDbDataReader.php | 221 +
web/framework-1.0.8/db/CDbException.php | 21 +
web/framework-1.0.8/db/CDbTransaction.php | 108 +
web/framework-1.0.8/db/ar/CActiveFinder.php | 1359 ++
web/framework-1.0.8/db/ar/CActiveRecord.php | 2212 +++
.../db/ar/CActiveRecordBehavior.php | 96 +
.../db/schema/CDbColumnSchema.php | 143 +
.../db/schema/CDbCommandBuilder.php | 664 +
web/framework-1.0.8/db/schema/CDbCriteria.php | 166 +
.../db/schema/CDbExpression.php | 49 +
web/framework-1.0.8/db/schema/CDbSchema.php | 203 +
.../db/schema/CDbTableSchema.php | 76 +
.../db/schema/mssql/CMssqlColumnSchema.php | 55 +
.../db/schema/mssql/CMssqlCommandBuilder.php | 304 +
.../db/schema/mssql/CMssqlPdoAdapter.php | 74 +
.../db/schema/mssql/CMssqlSchema.php | 310 +
.../db/schema/mssql/CMssqlTableSchema.php | 33 +
.../db/schema/mysql/CMysqlColumnSchema.php | 46 +
.../db/schema/mysql/CMysqlSchema.php | 201 +
.../db/schema/mysql/CMysqlTableSchema.php | 26 +
.../db/schema/oci/COciColumnSchema.php | 54 +
.../db/schema/oci/COciCommandBuilder.php | 122 +
.../db/schema/oci/COciSchema.php | 276 +
.../db/schema/oci/COciTableSchema.php | 26 +
.../db/schema/pgsql/CPgsqlColumnSchema.php | 56 +
.../db/schema/pgsql/CPgsqlSchema.php | 282 +
.../db/schema/pgsql/CPgsqlTableSchema.php | 25 +
.../db/schema/sqlite/CSqliteColumnSchema.php | 33 +
.../schema/sqlite/CSqliteCommandBuilder.php | 41 +
.../db/schema/sqlite/CSqliteSchema.php | 129 +
web/framework-1.0.8/i18n/CChoiceFormat.php | 77 +
web/framework-1.0.8/i18n/CDateFormatter.php | 507 +
web/framework-1.0.8/i18n/CDbMessageSource.php | 114 +
.../i18n/CGettextMessageSource.php | 111 +
web/framework-1.0.8/i18n/CLocale.php | 243 +
web/framework-1.0.8/i18n/CMessageSource.php | 157 +
web/framework-1.0.8/i18n/CNumberFormatter.php | 280 +
.../i18n/CPhpMessageSource.php | 96 +
.../i18n/gettext/CGettextFile.php | 36 +
.../i18n/gettext/CGettextMoFile.php | 269 +
.../i18n/gettext/CGettextPoFile.php | 89 +
web/framework-1.0.8/logging/CDbLogRoute.php | 168 +
.../logging/CEmailLogRoute.php | 122 +
web/framework-1.0.8/logging/CFileLogRoute.php | 162 +
web/framework-1.0.8/logging/CLogFilter.php | 103 +
web/framework-1.0.8/logging/CLogRoute.php | 107 +
web/framework-1.0.8/logging/CLogRouter.php | 107 +
web/framework-1.0.8/logging/CLogger.php | 237 +
.../logging/CProfileLogRoute.php | 201 +
web/framework-1.0.8/logging/CWebLogRoute.php | 57 +
web/framework-1.0.8/messages/bg/yii.php | 213 +
web/framework-1.0.8/messages/config.php | 19 +
web/framework-1.0.8/messages/de/yii.php | 221 +
web/framework-1.0.8/messages/el/yii.php | 222 +
web/framework-1.0.8/messages/es/yii.php | 231 +
web/framework-1.0.8/messages/fr/yii.php | 210 +
web/framework-1.0.8/messages/he/yii.php | 206 +
web/framework-1.0.8/messages/hu/yii.php | 213 +
web/framework-1.0.8/messages/id/yii.php | 213 +
web/framework-1.0.8/messages/it/yii.php | 208 +
web/framework-1.0.8/messages/ja/yii.php | 230 +
web/framework-1.0.8/messages/nl/yii.php | 206 +
web/framework-1.0.8/messages/no/yii.php | 222 +
web/framework-1.0.8/messages/pl/yii.php | 213 +
web/framework-1.0.8/messages/pt/yii.php | 213 +
web/framework-1.0.8/messages/ro/yii.php | 213 +
web/framework-1.0.8/messages/ru/yii.php | 214 +
web/framework-1.0.8/messages/sr_sr/yii.php | 205 +
web/framework-1.0.8/messages/sr_yu/yii.php | 205 +
web/framework-1.0.8/messages/sv/yii.php | 226 +
web/framework-1.0.8/messages/uk/yii.php | 213 +
web/framework-1.0.8/messages/vi/yii.php | 213 +
web/framework-1.0.8/messages/zh_cn/yii.php | 213 +
web/framework-1.0.8/messages/zh_tw/yii.php | 207 +
web/framework-1.0.8/utils/CDateTimeParser.php | 230 +
web/framework-1.0.8/utils/CFileHelper.php | 228 +
web/framework-1.0.8/utils/CMarkdownParser.php | 179 +
web/framework-1.0.8/utils/CPropertyValue.php | 158 +
web/framework-1.0.8/utils/CTimestamp.php | 715 +
web/framework-1.0.8/utils/CVarDumper.php | 142 +
web/framework-1.0.8/utils/mimeTypes.php | 178 +
.../validators/CCaptchaValidator.php | 72 +
.../validators/CCompareValidator.php | 151 +
.../validators/CDefaultValueValidator.php | 51 +
.../validators/CEmailValidator.php | 80 +
.../validators/CExistValidator.php | 88 +
.../validators/CFileValidator.php | 159 +
.../validators/CFilterValidator.php | 49 +
.../validators/CInlineValidator.php | 41 +
.../validators/CNumberValidator.php | 86 +
.../validators/CRangeValidator.php | 53 +
.../CRegularExpressionValidator.php | 51 +
.../validators/CRequiredValidator.php | 36 +
.../validators/CStringValidator.php | 78 +
.../validators/CTypeValidator.php | 99 +
.../validators/CUniqueValidator.php | 106 +
.../validators/CUrlValidator.php | 49 +
web/framework-1.0.8/validators/CValidator.php | 194 +
web/framework-1.0.8/vendors/README.html | 89 +
web/framework-1.0.8/vendors/adodb/LICENSE.txt | 182 +
web/framework-1.0.8/vendors/cldr/LICENSE.txt | 33 +
.../vendors/gettext/LICENSE.txt | 22 +
web/framework-1.0.8/vendors/json/LICENSE.txt | 22 +
.../vendors/markdown/LICENSE.txt | 36 +
.../vendors/markdown/markdown.php | 2623 ++++
web/framework-1.0.8/views/de/error.php | 38 +
web/framework-1.0.8/views/de/error400.php | 34 +
web/framework-1.0.8/views/de/error403.php | 33 +
web/framework-1.0.8/views/de/error404.php | 34 +
web/framework-1.0.8/views/de/error500.php | 35 +
web/framework-1.0.8/views/de/error503.php | 31 +
web/framework-1.0.8/views/de/exception.php | 74 +
web/framework-1.0.8/views/de/log-firebug.php | 23 +
web/framework-1.0.8/views/de/log.php | 32 +
.../views/de/profile-callstack-firebug.php | 19 +
.../views/de/profile-callstack.php | 30 +
.../views/de/profile-summary-firebug.php | 23 +
.../views/de/profile-summary.php | 41 +
web/framework-1.0.8/views/error.php | 37 +
web/framework-1.0.8/views/error400.php | 33 +
web/framework-1.0.8/views/error403.php | 32 +
web/framework-1.0.8/views/error404.php | 33 +
web/framework-1.0.8/views/error500.php | 35 +
web/framework-1.0.8/views/error503.php | 31 +
web/framework-1.0.8/views/es/error.php | 37 +
web/framework-1.0.8/views/es/error400.php | 33 +
web/framework-1.0.8/views/es/error403.php | 32 +
web/framework-1.0.8/views/es/error404.php | 33 +
web/framework-1.0.8/views/es/error500.php | 35 +
web/framework-1.0.8/views/es/error503.php | 31 +
web/framework-1.0.8/views/es/exception.php | 74 +
web/framework-1.0.8/views/es/log-firebug.php | 23 +
web/framework-1.0.8/views/es/log.php | 32 +
.../views/es/profile-callstack-firebug.php | 19 +
.../views/es/profile-callstack.php | 30 +
.../views/es/profile-summary-firebug.php | 22 +
.../views/es/profile-summary.php | 41 +
web/framework-1.0.8/views/exception.php | 74 +
web/framework-1.0.8/views/fr/error.php | 37 +
web/framework-1.0.8/views/fr/error400.php | 33 +
web/framework-1.0.8/views/fr/error403.php | 32 +
web/framework-1.0.8/views/fr/error404.php | 34 +
web/framework-1.0.8/views/fr/error500.php | 35 +
web/framework-1.0.8/views/fr/error503.php | 31 +
web/framework-1.0.8/views/fr/exception.php | 74 +
web/framework-1.0.8/views/fr/log-firebug.php | 23 +
web/framework-1.0.8/views/fr/log.php | 32 +
.../views/fr/profile-callstack-firebug.php | 19 +
.../views/fr/profile-callstack.php | 30 +
.../views/fr/profile-summary-firebug.php | 22 +
.../views/fr/profile-summary.php | 41 +
web/framework-1.0.8/views/he/error.php | 38 +
web/framework-1.0.8/views/he/error400.php | 34 +
web/framework-1.0.8/views/he/error403.php | 33 +
web/framework-1.0.8/views/he/error404.php | 34 +
web/framework-1.0.8/views/he/error500.php | 36 +
web/framework-1.0.8/views/he/error503.php | 32 +
web/framework-1.0.8/views/he/exception.php | 75 +
web/framework-1.0.8/views/he/log-firebug.php | 23 +
web/framework-1.0.8/views/he/log.php | 32 +
.../views/he/profile-callstack-firebug.php | 19 +
.../views/he/profile-callstack.php | 30 +
.../views/he/profile-summary-firebug.php | 22 +
.../views/he/profile-summary.php | 41 +
web/framework-1.0.8/views/id/error.php | 37 +
web/framework-1.0.8/views/id/error400.php | 33 +
web/framework-1.0.8/views/id/error403.php | 32 +
web/framework-1.0.8/views/id/error404.php | 33 +
web/framework-1.0.8/views/id/error500.php | 35 +
web/framework-1.0.8/views/id/error503.php | 31 +
web/framework-1.0.8/views/id/exception.php | 74 +
web/framework-1.0.8/views/id/log-firebug.php | 23 +
web/framework-1.0.8/views/id/log.php | 32 +
.../views/id/profile-callstack-firebug.php | 19 +
.../views/id/profile-callstack.php | 30 +
.../views/id/profile-summary-firebug.php | 22 +
.../views/id/profile-summary.php | 41 +
web/framework-1.0.8/views/ja/error.php | 37 +
web/framework-1.0.8/views/ja/error400.php | 33 +
web/framework-1.0.8/views/ja/error403.php | 32 +
web/framework-1.0.8/views/ja/error404.php | 33 +
web/framework-1.0.8/views/ja/error500.php | 35 +
web/framework-1.0.8/views/ja/error503.php | 31 +
web/framework-1.0.8/views/ja/exception.php | 74 +
web/framework-1.0.8/views/ja/log-firebug.php | 23 +
web/framework-1.0.8/views/ja/log.php | 32 +
.../views/ja/profile-callstack-firebug.php | 19 +
.../views/ja/profile-callstack.php | 30 +
.../views/ja/profile-summary-firebug.php | 22 +
.../views/ja/profile-summary.php | 41 +
web/framework-1.0.8/views/log-firebug.php | 23 +
web/framework-1.0.8/views/log.php | 32 +
web/framework-1.0.8/views/nl/error.php | 25 +
web/framework-1.0.8/views/nl/error400.php | 24 +
web/framework-1.0.8/views/nl/error403.php | 24 +
web/framework-1.0.8/views/nl/error404.php | 24 +
web/framework-1.0.8/views/nl/error500.php | 24 +
web/framework-1.0.8/views/nl/error503.php | 24 +
web/framework-1.0.8/views/nl/exception.php | 62 +
web/framework-1.0.8/views/nl/log-firebug.php | 22 +
web/framework-1.0.8/views/nl/log.php | 29 +
.../views/nl/profile-callstack-firebug.php | 17 +
.../views/nl/profile-callstack.php | 29 +
.../views/nl/profile-summary-firebug.php | 20 +
.../views/nl/profile-summary.php | 41 +
web/framework-1.0.8/views/no/error.php | 37 +
web/framework-1.0.8/views/no/error400.php | 33 +
web/framework-1.0.8/views/no/error403.php | 32 +
web/framework-1.0.8/views/no/error404.php | 33 +
web/framework-1.0.8/views/no/error500.php | 35 +
web/framework-1.0.8/views/no/error503.php | 31 +
web/framework-1.0.8/views/no/exception.php | 74 +
web/framework-1.0.8/views/no/log-firebug.php | 23 +
web/framework-1.0.8/views/no/log.php | 32 +
.../views/no/profile-callstack-firebug.php | 19 +
.../views/no/profile-callstack.php | 30 +
.../views/no/profile-summary-firebug.php | 22 +
.../views/no/profile-summary.php | 41 +
.../views/profile-callstack-firebug.php | 19 +
.../views/profile-callstack.php | 30 +
.../views/profile-summary-firebug.php | 22 +
web/framework-1.0.8/views/profile-summary.php | 41 +
web/framework-1.0.8/views/pt/error.php | 37 +
web/framework-1.0.8/views/pt/error400.php | 33 +
web/framework-1.0.8/views/pt/error403.php | 32 +
web/framework-1.0.8/views/pt/error404.php | 33 +
web/framework-1.0.8/views/pt/error500.php | 35 +
web/framework-1.0.8/views/pt/error503.php | 31 +
web/framework-1.0.8/views/pt/exception.php | 74 +
web/framework-1.0.8/views/pt/log-firebug.php | 23 +
web/framework-1.0.8/views/pt/log.php | 32 +
.../views/pt/profile-callstack-firebug.php | 19 +
.../views/pt/profile-callstack.php | 30 +
.../views/pt/profile-summary-firebug.php | 22 +
.../views/pt/profile-summary.php | 41 +
web/framework-1.0.8/views/ro/error.php | 37 +
web/framework-1.0.8/views/ro/error400.php | 33 +
web/framework-1.0.8/views/ro/error403.php | 32 +
web/framework-1.0.8/views/ro/error404.php | 33 +
web/framework-1.0.8/views/ro/error500.php | 35 +
web/framework-1.0.8/views/ro/error503.php | 31 +
web/framework-1.0.8/views/ro/exception.php | 74 +
web/framework-1.0.8/views/ro/log-firebug.php | 23 +
web/framework-1.0.8/views/ro/log.php | 32 +
.../views/ro/profile-callstack-firebug.php | 19 +
.../views/ro/profile-callstack.php | 30 +
.../views/ro/profile-summary-firebug.php | 22 +
.../views/ro/profile-summary.php | 41 +
web/framework-1.0.8/views/ru/error.php | 37 +
web/framework-1.0.8/views/ru/error400.php | 33 +
web/framework-1.0.8/views/ru/error403.php | 32 +
web/framework-1.0.8/views/ru/error404.php | 33 +
web/framework-1.0.8/views/ru/error500.php | 35 +
web/framework-1.0.8/views/ru/error503.php | 31 +
web/framework-1.0.8/views/ru/exception.php | 74 +
web/framework-1.0.8/views/ru/log-firebug.php | 23 +
web/framework-1.0.8/views/ru/log.php | 32 +
.../views/ru/profile-callstack-firebug.php | 19 +
.../views/ru/profile-callstack.php | 30 +
.../views/ru/profile-summary-firebug.php | 22 +
.../views/ru/profile-summary.php | 41 +
web/framework-1.0.8/views/sv/error.php | 37 +
web/framework-1.0.8/views/sv/error400.php | 33 +
web/framework-1.0.8/views/sv/error403.php | 33 +
web/framework-1.0.8/views/sv/error404.php | 33 +
web/framework-1.0.8/views/sv/error500.php | 35 +
web/framework-1.0.8/views/sv/error503.php | 31 +
web/framework-1.0.8/views/sv/exception.php | 74 +
web/framework-1.0.8/views/sv/log-firebug.php | 23 +
web/framework-1.0.8/views/sv/log.php | 32 +
.../views/sv/profile-callstack-firebug.php | 19 +
.../views/sv/profile-callstack.php | 30 +
.../views/sv/profile-summary-firebug.php | 22 +
.../views/sv/profile-summary.php | 41 +
web/framework-1.0.8/views/zh_cn/error.php | 37 +
web/framework-1.0.8/views/zh_cn/error400.php | 33 +
web/framework-1.0.8/views/zh_cn/error403.php | 32 +
web/framework-1.0.8/views/zh_cn/error404.php | 33 +
web/framework-1.0.8/views/zh_cn/error500.php | 35 +
web/framework-1.0.8/views/zh_cn/error503.php | 31 +
web/framework-1.0.8/views/zh_cn/exception.php | 74 +
.../views/zh_cn/log-firebug.php | 23 +
web/framework-1.0.8/views/zh_cn/log.php | 32 +
.../views/zh_cn/profile-callstack-firebug.php | 19 +
.../views/zh_cn/profile-callstack.php | 28 +
.../views/zh_cn/profile-summary-firebug.php | 22 +
.../views/zh_cn/profile-summary.php | 41 +
web/framework-1.0.8/views/zh_tw/error.php | 37 +
web/framework-1.0.8/views/zh_tw/error400.php | 33 +
web/framework-1.0.8/views/zh_tw/error403.php | 32 +
web/framework-1.0.8/views/zh_tw/error404.php | 33 +
web/framework-1.0.8/views/zh_tw/error500.php | 35 +
web/framework-1.0.8/views/zh_tw/error503.php | 31 +
web/framework-1.0.8/views/zh_tw/exception.php | 74 +
.../views/zh_tw/log-firebug.php | 23 +
web/framework-1.0.8/views/zh_tw/log.php | 32 +
.../views/zh_tw/profile-callstack-firebug.php | 19 +
.../views/zh_tw/profile-callstack.php | 30 +
.../views/zh_tw/profile-summary-firebug.php | 22 +
.../views/zh_tw/profile-summary.php | 41 +
web/framework-1.0.8/web/CAssetManager.php | 227 +
web/framework-1.0.8/web/CBaseController.php | 283 +
web/framework-1.0.8/web/CCacheHttpSession.php | 111 +
web/framework-1.0.8/web/CClientScript.php | 562 +
web/framework-1.0.8/web/CController.php | 1072 ++
web/framework-1.0.8/web/CDbHttpSession.php | 203 +
web/framework-1.0.8/web/CExtController.php | 53 +
web/framework-1.0.8/web/CFormModel.php | 113 +
web/framework-1.0.8/web/CHttpCookie.php | 63 +
web/framework-1.0.8/web/CHttpRequest.php | 763 ++
web/framework-1.0.8/web/CHttpSession.php | 522 +
.../web/CHttpSessionIterator.php | 92 +
web/framework-1.0.8/web/COutputEvent.php | 38 +
web/framework-1.0.8/web/CPagination.php | 161 +
web/framework-1.0.8/web/CSort.php | 292 +
web/framework-1.0.8/web/CTheme.php | 124 +
web/framework-1.0.8/web/CThemeManager.php | 127 +
web/framework-1.0.8/web/CUploadedFile.php | 210 +
web/framework-1.0.8/web/CUrlManager.php | 613 +
web/framework-1.0.8/web/CWebApplication.php | 608 +
web/framework-1.0.8/web/CWebModule.php | 187 +
web/framework-1.0.8/web/actions/CAction.php | 58 +
.../web/actions/CInlineAction.php | 34 +
.../web/actions/CViewAction.php | 165 +
.../web/auth/CAccessControlFilter.php | 295 +
.../web/auth/CAuthAssignment.php | 102 +
web/framework-1.0.8/web/auth/CAuthItem.php | 269 +
web/framework-1.0.8/web/auth/CAuthManager.php | 157 +
.../web/auth/CBaseUserIdentity.php | 116 +
.../web/auth/CDbAuthManager.php | 584 +
.../web/auth/CPhpAuthManager.php | 535 +
.../web/auth/CUserIdentity.php | 79 +
web/framework-1.0.8/web/auth/CWebUser.php | 583 +
web/framework-1.0.8/web/auth/schema.sql | 42 +
web/framework-1.0.8/web/filters/CFilter.php | 64 +
.../web/filters/CFilterChain.php | 131 +
.../web/filters/CInlineFilter.php | 61 +
.../web/helpers/CGoogleApi.php | 72 +
web/framework-1.0.8/web/helpers/CHtml.php | 1801 +++
web/framework-1.0.8/web/helpers/CJSON.php | 698 +
.../web/helpers/CJavaScript.php | 128 +
.../web/renderers/CPradoViewRenderer.php | 245 +
.../web/renderers/CViewRenderer.php | 93 +
.../web/services/CWebService.php | 271 +
.../web/services/CWebServiceAction.php | 130 +
.../web/services/CWsdlGenerator.php | 373 +
.../web/widgets/CAutoComplete.php | 285 +
.../web/widgets/CClipWidget.php | 55 +
.../web/widgets/CContentDecorator.php | 83 +
.../web/widgets/CFilterWidget.php | 74 +
.../web/widgets/CFlexWidget.php | 116 +
.../web/widgets/CHtmlPurifier.php | 64 +
.../web/widgets/CInputWidget.php | 80 +
web/framework-1.0.8/web/widgets/CMarkdown.php | 119 +
.../web/widgets/CMaskedTextField.php | 106 +
.../web/widgets/CMultiFileUpload.php | 115 +
.../web/widgets/COutputCache.php | 336 +
.../web/widgets/COutputProcessor.php | 77 +
.../web/widgets/CStarRating.php | 207 +
web/framework-1.0.8/web/widgets/CTabView.php | 201 +
.../web/widgets/CTextHighlighter.php | 127 +
web/framework-1.0.8/web/widgets/CTreeView.php | 232 +
web/framework-1.0.8/web/widgets/CWidget.php | 202 +
.../web/widgets/captcha/CCaptcha.php | 132 +
.../web/widgets/captcha/CCaptchaAction.php | 233 +
.../web/widgets/captcha/Duality.ttf | Bin 0 -> 50560 bytes
.../web/widgets/pagers/CBasePager.php | 129 +
.../web/widgets/pagers/CLinkPager.php | 194 +
.../web/widgets/pagers/CListPager.php | 85 +
.../web/widgets/pagers/pager.css | 68 +
.../web/widgets/views/flexWidget.php | 98 +
web/framework-1.0.8/yii.php | 29 +
web/images/41.png | Bin 0 -> 50652 bytes
web/images/amc.jpg | Bin 0 -> 6924 bytes
web/images/base/action_refresh_blue.gif | Bin 0 -> 256 bytes
web/images/base/action_save.gif | Bin 0 -> 279 bytes
web/images/base/delete.png | Bin 0 -> 351 bytes
web/images/base/dot.png | Bin 0 -> 547 bytes
web/images/base/download.png | Bin 0 -> 1000 bytes
web/images/base/edit.png | Bin 0 -> 1111 bytes
web/images/base/enroll.png | Bin 0 -> 708 bytes
web/images/base/favorite.png | Bin 0 -> 309 bytes
web/images/base/folder_new.png | Bin 0 -> 827 bytes
web/images/base/new.png | Bin 0 -> 923 bytes
web/images/base/newcomment.png | Bin 0 -> 1099 bytes
web/images/base/newfile.png | Bin 0 -> 1145 bytes
web/images/base/newfolder.png | Bin 0 -> 827 bytes
web/images/base/newuser.png | Bin 0 -> 746 bytes
web/images/base/pause.png | Bin 0 -> 753 bytes
web/images/base/play.png | Bin 0 -> 784 bytes
web/images/base/tools.png | Bin 0 -> 1118 bytes
web/images/base/top.png | Bin 0 -> 987 bytes
web/images/base/top_header.png | Bin 0 -> 1206 bytes
web/images/base/top_header_selected.png | Bin 0 -> 489 bytes
web/images/base/video_play.png | Bin 0 -> 4720 bytes
web/images/beta_corner_banner.png | Bin 0 -> 9072 bytes
web/images/beta_corner_banner2.png | Bin 0 -> 3729 bytes
web/images/btc.png | Bin 0 -> 3240 bytes
web/images/coin-154.png | Bin 0 -> 7314 bytes
web/images/coin-22.png | Bin 0 -> 4885 bytes
web/images/coin-251.png | Bin 0 -> 317 bytes
web/images/coin-30.png | Bin 0 -> 10204 bytes
web/images/coin-316.png | Bin 0 -> 2531 bytes
web/images/coin-33.png | Bin 0 -> 7661 bytes
web/images/coin-6.png | Bin 0 -> 3240 bytes
web/images/coin-834.png | Bin 0 -> 2531 bytes
web/images/gears.png | Bin 0 -> 1475 bytes
web/images/minus2-78.png | Bin 0 -> 443 bytes
web/images/next.png | Bin 0 -> 959 bytes
web/images/pause.png | Bin 0 -> 662 bytes
web/images/play.png | Bin 0 -> 865 bytes
web/images/plus2-78.png | Bin 0 -> 519 bytes
web/images/sign-in-with-twitter-gray.png | Bin 0 -> 2830 bytes
web/images/sign-in-with-twitter-link.png | Bin 0 -> 2683 bytes
web/images/start.png | Bin 0 -> 963 bytes
web/images/t_mini-a.png | Bin 0 -> 520 bytes
web/images/tweet.jpg | Bin 0 -> 98966 bytes
web/images/twitter.jpg | Bin 0 -> 33445 bytes
web/images/ui/16x16_2leftarrow.png | Bin 0 -> 1043 bytes
web/images/ui/16x16_2rightarrow.png | Bin 0 -> 1056 bytes
web/images/ui/16x16_bottom.png | Bin 0 -> 1000 bytes
web/images/ui/16x16_chat.png | Bin 0 -> 1121 bytes
web/images/ui/16x16_delete.png | Bin 0 -> 1133 bytes
web/images/ui/16x16_edit.png | Bin 0 -> 857 bytes
web/images/ui/16x16_email.png | Bin 0 -> 971 bytes
web/images/ui/16x16_fileclose.png | Bin 0 -> 964 bytes
web/images/ui/16x16_kcontrol.png | Bin 0 -> 1118 bytes
web/images/ui/16x16_kuser.png | Bin 0 -> 1173 bytes
web/images/ui/16x16_ledgreen.png | Bin 0 -> 1160 bytes
web/images/ui/16x16_link.png | Bin 0 -> 686 bytes
web/images/ui/16x16_misc.png | Bin 0 -> 1041 bytes
web/images/ui/16x16_package_edutainment.png | Bin 0 -> 1144 bytes
web/images/ui/16x16_window_list.png | Bin 0 -> 915 bytes
web/images/ui/22x22_bottom.png | Bin 0 -> 1329 bytes
web/images/ui/24x24_link.png | Bin 0 -> 1125 bytes
web/images/ui/32x32_link.png | Bin 0 -> 871 bytes
web/images/ui/48x48_link.png | Bin 0 -> 1365 bytes
web/images/ui/arrow-down.gif | Bin 0 -> 835 bytes
web/images/ui/arrow-right.gif | Bin 0 -> 852 bytes
web/images/ui/asc.gif | Bin 0 -> 54 bytes
web/images/ui/away.gif | Bin 0 -> 904 bytes
web/images/ui/bg.gif | Bin 0 -> 64 bytes
web/images/ui/control_play_blue.png | Bin 0 -> 717 bytes
web/images/ui/desc.gif | Bin 0 -> 54 bytes
web/images/ui/down_arrow.png | Bin 0 -> 252 bytes
web/images/ui/empty.png | Bin 0 -> 1174 bytes
web/images/ui/expand_down.png | Bin 0 -> 453 bytes
web/images/ui/expand_up.png | Bin 0 -> 455 bytes
web/images/ui/green-check.png | Bin 0 -> 285 bytes
web/images/ui/icon-check.gif | Bin 0 -> 107 bytes
web/images/ui/install-flash.jpg | Bin 0 -> 2158 bytes
web/images/ui/linkout.png | Bin 0 -> 632 bytes
web/images/ui/loading.gif | Bin 0 -> 3504 bytes
web/images/ui/loading_white.gif | Bin 0 -> 4178 bytes
web/images/ui/menudot.png | Bin 0 -> 547 bytes
web/images/ui/menuo_bg.gif | Bin 0 -> 159 bytes
web/images/ui/offline.gif | Bin 0 -> 891 bytes
web/images/ui/online.gif | Bin 0 -> 898 bytes
web/images/ui/shade.gif | Bin 0 -> 949 bytes
web/images/ui/shadeactive.gif | Bin 0 -> 838 bytes
web/images/ui/showactivity.png | Bin 0 -> 1073 bytes
web/images/ui/showcourse.png | Bin 0 -> 1173 bytes
web/images/ui/showdetail.png | Bin 0 -> 1225 bytes
web/images/ui/showfile.png | Bin 0 -> 870 bytes
web/images/ui/showfolder.png | Bin 0 -> 847 bytes
web/images/ui/showgraph.png | Bin 0 -> 241 bytes
web/images/ui/showlink.png | Bin 0 -> 760 bytes
web/images/ui/showmedium.png | Bin 0 -> 303 bytes
web/images/ui/showsmall.png | Bin 0 -> 1295 bytes
web/images/ui/tintblue.gif | Bin 0 -> 838 bytes
web/images/ui/tintbluedark.gif | Bin 0 -> 830 bytes
web/images/vn_embed.png | Bin 0 -> 488 bytes
web/index.php | 30 +
web/loop2.sh | 9 +
web/main.sh | 9 +
web/robots.txt | 2 +
web/serverconfig.php | 26 +
web/yaamp/components/CUFHtml.php | 136 +
web/yaamp/components/UniForm.php | 25 +
web/yaamp/components/UserIdentity.php | 25 +
web/yaamp/config.php | 68 +
web/yaamp/core/backend/backend.php | 17 +
web/yaamp/core/backend/blocks.php | 243 +
web/yaamp/core/backend/clear.php | 47 +
web/yaamp/core/backend/coins.php | 245 +
web/yaamp/core/backend/markets.php | 505 +
web/yaamp/core/backend/payment.php | 153 +
web/yaamp/core/backend/rawcoins.php | 144 +
web/yaamp/core/backend/renting.php | 271 +
web/yaamp/core/backend/sell.php | 126 +
web/yaamp/core/backend/services.php | 210 +
web/yaamp/core/backend/stats.php | 347 +
web/yaamp/core/backend/system.php | 253 +
web/yaamp/core/backend/users.php | 95 +
web/yaamp/core/common/Shortcuts.php | 77 +
web/yaamp/core/common/common.php | 10 +
web/yaamp/core/common/libUtil.php | 305 +
web/yaamp/core/common/libdbo.php | 91 +
web/yaamp/core/common/system.php | 135 +
web/yaamp/core/common/util.php | 317 +
web/yaamp/core/common/utilConversion.php | 296 +
web/yaamp/core/core.php | 11 +
web/yaamp/core/exchange/bittrex.php | 28 +
web/yaamp/core/exchange/bleutrade.php | 28 +
web/yaamp/core/exchange/ccexapi.php | 106 +
web/yaamp/core/exchange/cryptsy.php | 63 +
web/yaamp/core/exchange/exchange.php | 12 +
web/yaamp/core/exchange/jubi.php | 20 +
web/yaamp/core/exchange/poloniex.php | 242 +
web/yaamp/core/exchange/yobit.php | 77 +
web/yaamp/core/exchange2/CExchange.php | 198 +
web/yaamp/core/exchange2/CExchangeCoin.php | 84 +
web/yaamp/core/exchange2/exchange.php | 7 +
web/yaamp/core/functions/curloauth.php | 50 +
web/yaamp/core/functions/easybitcoin.php | 220 +
web/yaamp/core/functions/functions.php | 11 +
web/yaamp/core/functions/memcache.php | 85 +
web/yaamp/core/functions/url.php | 79 +
web/yaamp/core/functions/yaamp.php | 365 +
web/yaamp/core/trading/bittrex_trading.php | 221 +
web/yaamp/core/trading/bleutrade_trading.php | 218 +
web/yaamp/core/trading/c-cex_trading.php | 192 +
web/yaamp/core/trading/cryptsy_trading.php | 231 +
web/yaamp/core/trading/poloniex_trading.php | 179 +
web/yaamp/core/trading/trading.php | 11 +
web/yaamp/core/trading/yobit_trading.php | 205 +
web/yaamp/include.php | 11 +
web/yaamp/models/db_accountsModel.php | 33 +
web/yaamp/models/db_algosModel.php | 33 +
web/yaamp/models/db_balancesModel.php | 33 +
web/yaamp/models/db_balanceuserModel.php | 33 +
web/yaamp/models/db_blocksModel.php | 33 +
web/yaamp/models/db_coinsModel.php | 46 +
web/yaamp/models/db_connectionsModel.php | 35 +
web/yaamp/models/db_earningsModel.php | 33 +
web/yaamp/models/db_exchangeModel.php | 33 +
web/yaamp/models/db_hashrateModel.php | 33 +
web/yaamp/models/db_hashrenterModel.php | 33 +
web/yaamp/models/db_hashstatsModel.php | 33 +
web/yaamp/models/db_hashuserModel.php | 33 +
web/yaamp/models/db_jobsModel.php | 33 +
web/yaamp/models/db_jobsubmitsModel.php | 33 +
web/yaamp/models/db_marketsModel.php | 33 +
web/yaamp/models/db_miningModel.php | 33 +
web/yaamp/models/db_nicehashModel.php | 33 +
web/yaamp/models/db_ordersModel.php | 33 +
web/yaamp/models/db_payoutsModel.php | 33 +
web/yaamp/models/db_rawcoinsModel.php | 36 +
web/yaamp/models/db_rentersModel.php | 33 +
web/yaamp/models/db_rentertxsModel.php | 33 +
web/yaamp/models/db_serversModel.php | 33 +
web/yaamp/models/db_servicesModel.php | 33 +
web/yaamp/models/db_sharesModel.php | 33 +
web/yaamp/models/db_shares_vipModel.php | 33 +
web/yaamp/models/db_statsModel.php | 33 +
web/yaamp/models/db_stratumsModel.php | 33 +
web/yaamp/models/db_withdrawsModel.php | 33 +
web/yaamp/models/db_workersModel.php | 33 +
web/yaamp/modules/api/ApiController.php | 301 +
web/yaamp/modules/coin/CoinController.php | 54 +
web/yaamp/modules/coin/_form.php | 75 +
web/yaamp/modules/coin/index.php | 134 +
web/yaamp/modules/common/CommonController.php | 55 +
web/yaamp/modules/common/maintenance.php | 25 +
web/yaamp/modules/common/yaamp.php | 23 +
.../modules/explorer/ExplorerController.php | 56 +
web/yaamp/modules/explorer/block.php | 122 +
web/yaamp/modules/explorer/coin.php | 63 +
web/yaamp/modules/explorer/index.php | 67 +
web/yaamp/modules/explorer/tx.php | 73 +
web/yaamp/modules/explorer/util.php | 146 +
web/yaamp/modules/market/MarketController.php | 86 +
web/yaamp/modules/market/update.php | 23 +
.../modules/nicehash/NicehashController.php | 55 +
web/yaamp/modules/nicehash/index.php | 37 +
web/yaamp/modules/nicehash/index_results.php | 78 +
.../modules/renting/RentingController.php | 469 +
web/yaamp/modules/renting/admin.php | 148 +
.../modules/renting/all_orders_results.php | 95 +
web/yaamp/modules/renting/balance_results.php | 115 +
web/yaamp/modules/renting/create.php | 52 +
.../modules/renting/graph_job_results.php | 74 +
.../modules/renting/graph_price_results.php | 54 +
web/yaamp/modules/renting/index.php | 318 +
web/yaamp/modules/renting/login.php | 239 +
web/yaamp/modules/renting/orders_results.php | 130 +
web/yaamp/modules/renting/settings.php | 156 +
web/yaamp/modules/renting/status_results.php | 103 +
web/yaamp/modules/renting/tx.php | 74 +
web/yaamp/modules/site/SiteController.php | 772 ++
web/yaamp/modules/site/about.php | 59 +
web/yaamp/modules/site/admin.php | 90 +
web/yaamp/modules/site/admin_results.php | 171 +
web/yaamp/modules/site/api.php | 136 +
web/yaamp/modules/site/backup.php | 33 +
web/yaamp/modules/site/block.php | 46 +
web/yaamp/modules/site/block_results.php | 85 +
web/yaamp/modules/site/coin.php | 145 +
web/yaamp/modules/site/coin_form.php | 229 +
web/yaamp/modules/site/coin_results.php | 242 +
web/yaamp/modules/site/common.php | 231 +
web/yaamp/modules/site/common_results.php | 576 +
web/yaamp/modules/site/connections.php | 57 +
.../modules/site/connections_results.php | 48 +
web/yaamp/modules/site/diff.php | 36 +
web/yaamp/modules/site/earning.php | 50 +
web/yaamp/modules/site/earning_results.php | 74 +
web/yaamp/modules/site/emptymarkets.php | 34 +
web/yaamp/modules/site/eval.php | 22 +
web/yaamp/modules/site/exchange.php | 50 +
web/yaamp/modules/site/exchange_results.php | 183 +
web/yaamp/modules/site/index.php | 154 +
web/yaamp/modules/site/memcached.php | 56 +
web/yaamp/modules/site/miners.php | 88 +
web/yaamp/modules/site/mining.php | 235 +
web/yaamp/modules/site/monsters.php | 129 +
web/yaamp/modules/site/multialgo.php | 84 +
web/yaamp/modules/site/payments.php | 50 +
web/yaamp/modules/site/payments_results.php | 56 +
.../modules/site/results/current_results.php | 158 +
.../modules/site/results/found_results.php | 94 +
.../site/results/graph_assets_results.php | 58 +
.../site/results/graph_earnings_results.php | 47 +
.../site/results/graph_hashrate_results.php | 68 +
.../site/results/graph_negative_results.php | 36 +
.../site/results/graph_price_results.php | 68 +
.../site/results/graph_profit_results.php | 25 +
.../site/results/graph_user_results.php | 81 +
.../modules/site/results/history_results.php | 156 +
.../modules/site/results/miners_results.php | 126 +
.../modules/site/results/mining_results.php | 216 +
.../site/results/user_earning_results.php | 92 +
.../site/results/wallet_graphs_results.php | 33 +
.../site/results/wallet_miners_results.php | 117 +
.../modules/site/results/wallet_results.php | 263 +
web/yaamp/modules/site/terms.php | 392 +
web/yaamp/modules/site/tx.php | 64 +
web/yaamp/modules/site/user.php | 80 +
web/yaamp/modules/site/user_results.php | 136 +
web/yaamp/modules/site/version.php | 50 +
web/yaamp/modules/site/version_results.php | 48 +
web/yaamp/modules/site/wallet.php | 390 +
web/yaamp/modules/site/worker.php | 50 +
web/yaamp/modules/site/worker_results.php | 55 +
web/yaamp/modules/stats/StatsController.php | 65 +
web/yaamp/modules/stats/graph_results_1.php | 20 +
web/yaamp/modules/stats/graph_results_2.php | 19 +
web/yaamp/modules/stats/graph_results_3.php | 20 +
web/yaamp/modules/stats/graph_results_4.php | 34 +
web/yaamp/modules/stats/graph_results_5.php | 33 +
web/yaamp/modules/stats/graph_results_6.php | 40 +
web/yaamp/modules/stats/graph_results_7.php | 34 +
web/yaamp/modules/stats/graph_results_8.php | 33 +
web/yaamp/modules/stats/graph_results_9.php | 44 +
web/yaamp/modules/stats/index.php | 502 +
.../modules/thread/CronjobController.php | 196 +
.../modules/trading/TradingController.php | 59 +
web/yaamp/modules/trading/index.php | 270 +
web/yaamp/modules/trading/mining_results.php | 245 +
web/yaamp/ui/app.php | 8 +
web/yaamp/ui/css/editor.css | 34 +
web/yaamp/ui/css/indicator.gif | Bin 0 -> 1553 bytes
web/yaamp/ui/css/jquery-ui-fixes.css | 26 +
web/yaamp/ui/css/list.css | 78 +
web/yaamp/ui/css/main.css | 225 +
web/yaamp/ui/css/news.css | 82 +
web/yaamp/ui/css/objectmenu.css | 27 +
web/yaamp/ui/css/poll.css | 194 +
web/yaamp/ui/css/table.css | 124 +
web/yaamp/ui/css/tags.css | 97 +
web/yaamp/ui/css/uni-form-generic.css | 25 +
web/yaamp/ui/css/uni-form.css | 94 +
web/yaamp/ui/js/auto_refresh.js | 33 +
web/yaamp/ui/js/cookies.js | 45 +
web/yaamp/ui/js/datetime.js | 126 +
web/yaamp/ui/js/jquery.bgiframe.js | 44 +
web/yaamp/ui/js/jquery.dialogextend.js | 589 +
web/yaamp/ui/js/jquery.tablesorter.js | 1031 ++
web/yaamp/ui/js/jquery.yii.js | 45 +
web/yaamp/ui/js/swfobject.js | 780 ++
web/yaamp/ui/js/texteditor.js | 54 +
web/yaamp/ui/js/uni-form.jquery.js | 38 +
web/yaamp/ui/js/util.js | 108 +
web/yaamp/ui/lib/lib.php | 4 +
web/yaamp/ui/lib/libview.php | 59 +
web/yaamp/ui/lib/pageheader.php | 26 +
web/yaamp/ui/main.php | 131 +
web/yaamp/ui/misc.php | 41 +
850 files changed, 122607 insertions(+)
create mode 100644 web/.project
create mode 100755 web/blocks.sh
create mode 100644 web/extensions/jqplot/MIT-LICENSE.txt
create mode 100644 web/extensions/jqplot/README.txt
create mode 100644 web/extensions/jqplot/changes.txt
create mode 100644 web/extensions/jqplot/copyright.txt
create mode 100644 web/extensions/jqplot/excanvas.js
create mode 100644 web/extensions/jqplot/excanvas.min.js
create mode 100644 web/extensions/jqplot/gpl-2.0.txt
create mode 100644 web/extensions/jqplot/jqPlotCssStyling.txt
create mode 100644 web/extensions/jqplot/jqPlotOptions.txt
create mode 100644 web/extensions/jqplot/jquery.jqplot.css
create mode 100644 web/extensions/jqplot/jquery.jqplot.js
create mode 100644 web/extensions/jqplot/jquery.jqplot.min.css
create mode 100644 web/extensions/jqplot/jquery.jqplot.min.js
create mode 100644 web/extensions/jqplot/optionsTutorial.txt
create mode 100644 web/extensions/jqplot/plugins/jqplot.BezierCurveRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.BezierCurveRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.barRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.barRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.blockRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.blockRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.bubbleRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.bubbleRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.canvasAxisTickRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.canvasOverlay.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.canvasOverlay.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.canvasTextRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.canvasTextRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.categoryAxisRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.categoryAxisRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.ciParser.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.ciParser.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.cursor.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.cursor.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.dateAxisRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.dateAxisRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.donutRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.donutRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.dragable.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.dragable.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.enhancedLegendRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.funnelRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.funnelRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.highlighter.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.highlighter.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.json2.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.json2.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.logAxisRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.logAxisRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.mekkoAxisRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.mekkoRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.mekkoRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.meterGaugeRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.meterGaugeRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.mobile.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.mobile.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.ohlcRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.ohlcRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.pieRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.pieRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.pointLabels.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.pointLabels.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.pyramidAxisRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.pyramidAxisRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.pyramidGridRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.pyramidGridRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.pyramidRenderer.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.pyramidRenderer.min.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.trendline.js
create mode 100644 web/extensions/jqplot/plugins/jqplot.trendline.min.js
create mode 100644 web/extensions/jqplot/usage.txt
create mode 100644 web/extensions/jquery/js/jquery-1.10.2.min.js
create mode 100644 web/extensions/jquery/js/jquery-1.8.3-dev.js
create mode 100644 web/extensions/jquery/js/jquery-ui-1.10.3.custom.min.js
create mode 100644 web/extensions/jquery/js/jquery-ui-1.9.1.custom.min.js
create mode 100644 web/extensions/jquery/themes/ui-lightness/images/animated-overlay.gif
create mode 100644 web/extensions/jquery/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
create mode 100644 web/extensions/jquery/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
create mode 100644 web/extensions/jquery/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
create mode 100644 web/extensions/jquery/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
create mode 100644 web/extensions/jquery/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
create mode 100644 web/extensions/jquery/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
create mode 100644 web/extensions/jquery/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
create mode 100644 web/extensions/jquery/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
create mode 100644 web/extensions/jquery/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
create mode 100644 web/extensions/jquery/themes/ui-lightness/images/ui-icons_222222_256x240.png
create mode 100644 web/extensions/jquery/themes/ui-lightness/images/ui-icons_228ef1_256x240.png
create mode 100644 web/extensions/jquery/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png
create mode 100644 web/extensions/jquery/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png
create mode 100644 web/extensions/jquery/themes/ui-lightness/images/ui-icons_ffffff_256x240.png
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery-ui.css
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery.ui.accordion.css
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery.ui.all.css
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery.ui.autocomplete.css
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery.ui.base.css
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery.ui.button.css
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery.ui.core.css
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery.ui.datepicker.css
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery.ui.dialog.css
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery.ui.menu.css
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery.ui.progressbar.css
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery.ui.resizable.css
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery.ui.selectable.css
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery.ui.slider.css
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery.ui.spinner.css
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery.ui.tabs.css
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery.ui.theme.css
create mode 100644 web/extensions/jquery/themes/ui-lightness/jquery.ui.tooltip.css
create mode 100644 web/favicon.ico
create mode 100644 web/framework-1.0.8/.htaccess
create mode 100644 web/framework-1.0.8/YiiBase.php
create mode 100644 web/framework-1.0.8/base/CApplication.php
create mode 100644 web/framework-1.0.8/base/CApplicationComponent.php
create mode 100644 web/framework-1.0.8/base/CBehavior.php
create mode 100644 web/framework-1.0.8/base/CComponent.php
create mode 100644 web/framework-1.0.8/base/CErrorEvent.php
create mode 100644 web/framework-1.0.8/base/CErrorHandler.php
create mode 100644 web/framework-1.0.8/base/CException.php
create mode 100644 web/framework-1.0.8/base/CExceptionEvent.php
create mode 100644 web/framework-1.0.8/base/CHttpException.php
create mode 100644 web/framework-1.0.8/base/CModel.php
create mode 100644 web/framework-1.0.8/base/CModelBehavior.php
create mode 100644 web/framework-1.0.8/base/CModelEvent.php
create mode 100644 web/framework-1.0.8/base/CModule.php
create mode 100644 web/framework-1.0.8/base/CSecurityManager.php
create mode 100644 web/framework-1.0.8/base/CStatePersister.php
create mode 100644 web/framework-1.0.8/base/interfaces.php
create mode 100644 web/framework-1.0.8/caching/CApcCache.php
create mode 100644 web/framework-1.0.8/caching/CCache.php
create mode 100644 web/framework-1.0.8/caching/CDbCache.php
create mode 100644 web/framework-1.0.8/caching/CDummyCache.php
create mode 100644 web/framework-1.0.8/caching/CEAcceleratorCache.php
create mode 100644 web/framework-1.0.8/caching/CFileCache.php
create mode 100644 web/framework-1.0.8/caching/CMemCache.php
create mode 100644 web/framework-1.0.8/caching/CXCache.php
create mode 100644 web/framework-1.0.8/caching/CZendDataCache.php
create mode 100644 web/framework-1.0.8/caching/dependencies/CCacheDependency.php
create mode 100644 web/framework-1.0.8/caching/dependencies/CChainedCacheDependency.php
create mode 100644 web/framework-1.0.8/caching/dependencies/CDbCacheDependency.php
create mode 100644 web/framework-1.0.8/caching/dependencies/CDirectoryCacheDependency.php
create mode 100644 web/framework-1.0.8/caching/dependencies/CExpressionDependency.php
create mode 100644 web/framework-1.0.8/caching/dependencies/CFileCacheDependency.php
create mode 100644 web/framework-1.0.8/caching/dependencies/CGlobalStateCacheDependency.php
create mode 100644 web/framework-1.0.8/collections/CAttributeCollection.php
create mode 100644 web/framework-1.0.8/collections/CConfiguration.php
create mode 100644 web/framework-1.0.8/collections/CList.php
create mode 100644 web/framework-1.0.8/collections/CListIterator.php
create mode 100644 web/framework-1.0.8/collections/CMap.php
create mode 100644 web/framework-1.0.8/collections/CMapIterator.php
create mode 100644 web/framework-1.0.8/collections/CQueue.php
create mode 100644 web/framework-1.0.8/collections/CQueueIterator.php
create mode 100644 web/framework-1.0.8/collections/CStack.php
create mode 100644 web/framework-1.0.8/collections/CStackIterator.php
create mode 100644 web/framework-1.0.8/collections/CTypedList.php
create mode 100644 web/framework-1.0.8/db/CDbCommand.php
create mode 100644 web/framework-1.0.8/db/CDbConnection.php
create mode 100644 web/framework-1.0.8/db/CDbDataReader.php
create mode 100644 web/framework-1.0.8/db/CDbException.php
create mode 100644 web/framework-1.0.8/db/CDbTransaction.php
create mode 100644 web/framework-1.0.8/db/ar/CActiveFinder.php
create mode 100644 web/framework-1.0.8/db/ar/CActiveRecord.php
create mode 100644 web/framework-1.0.8/db/ar/CActiveRecordBehavior.php
create mode 100644 web/framework-1.0.8/db/schema/CDbColumnSchema.php
create mode 100644 web/framework-1.0.8/db/schema/CDbCommandBuilder.php
create mode 100644 web/framework-1.0.8/db/schema/CDbCriteria.php
create mode 100644 web/framework-1.0.8/db/schema/CDbExpression.php
create mode 100644 web/framework-1.0.8/db/schema/CDbSchema.php
create mode 100644 web/framework-1.0.8/db/schema/CDbTableSchema.php
create mode 100644 web/framework-1.0.8/db/schema/mssql/CMssqlColumnSchema.php
create mode 100644 web/framework-1.0.8/db/schema/mssql/CMssqlCommandBuilder.php
create mode 100644 web/framework-1.0.8/db/schema/mssql/CMssqlPdoAdapter.php
create mode 100644 web/framework-1.0.8/db/schema/mssql/CMssqlSchema.php
create mode 100644 web/framework-1.0.8/db/schema/mssql/CMssqlTableSchema.php
create mode 100644 web/framework-1.0.8/db/schema/mysql/CMysqlColumnSchema.php
create mode 100644 web/framework-1.0.8/db/schema/mysql/CMysqlSchema.php
create mode 100644 web/framework-1.0.8/db/schema/mysql/CMysqlTableSchema.php
create mode 100644 web/framework-1.0.8/db/schema/oci/COciColumnSchema.php
create mode 100644 web/framework-1.0.8/db/schema/oci/COciCommandBuilder.php
create mode 100644 web/framework-1.0.8/db/schema/oci/COciSchema.php
create mode 100644 web/framework-1.0.8/db/schema/oci/COciTableSchema.php
create mode 100644 web/framework-1.0.8/db/schema/pgsql/CPgsqlColumnSchema.php
create mode 100644 web/framework-1.0.8/db/schema/pgsql/CPgsqlSchema.php
create mode 100644 web/framework-1.0.8/db/schema/pgsql/CPgsqlTableSchema.php
create mode 100644 web/framework-1.0.8/db/schema/sqlite/CSqliteColumnSchema.php
create mode 100644 web/framework-1.0.8/db/schema/sqlite/CSqliteCommandBuilder.php
create mode 100644 web/framework-1.0.8/db/schema/sqlite/CSqliteSchema.php
create mode 100644 web/framework-1.0.8/i18n/CChoiceFormat.php
create mode 100644 web/framework-1.0.8/i18n/CDateFormatter.php
create mode 100644 web/framework-1.0.8/i18n/CDbMessageSource.php
create mode 100644 web/framework-1.0.8/i18n/CGettextMessageSource.php
create mode 100644 web/framework-1.0.8/i18n/CLocale.php
create mode 100644 web/framework-1.0.8/i18n/CMessageSource.php
create mode 100644 web/framework-1.0.8/i18n/CNumberFormatter.php
create mode 100644 web/framework-1.0.8/i18n/CPhpMessageSource.php
create mode 100644 web/framework-1.0.8/i18n/gettext/CGettextFile.php
create mode 100644 web/framework-1.0.8/i18n/gettext/CGettextMoFile.php
create mode 100644 web/framework-1.0.8/i18n/gettext/CGettextPoFile.php
create mode 100644 web/framework-1.0.8/logging/CDbLogRoute.php
create mode 100644 web/framework-1.0.8/logging/CEmailLogRoute.php
create mode 100644 web/framework-1.0.8/logging/CFileLogRoute.php
create mode 100644 web/framework-1.0.8/logging/CLogFilter.php
create mode 100644 web/framework-1.0.8/logging/CLogRoute.php
create mode 100644 web/framework-1.0.8/logging/CLogRouter.php
create mode 100644 web/framework-1.0.8/logging/CLogger.php
create mode 100644 web/framework-1.0.8/logging/CProfileLogRoute.php
create mode 100644 web/framework-1.0.8/logging/CWebLogRoute.php
create mode 100644 web/framework-1.0.8/messages/bg/yii.php
create mode 100644 web/framework-1.0.8/messages/config.php
create mode 100644 web/framework-1.0.8/messages/de/yii.php
create mode 100644 web/framework-1.0.8/messages/el/yii.php
create mode 100644 web/framework-1.0.8/messages/es/yii.php
create mode 100644 web/framework-1.0.8/messages/fr/yii.php
create mode 100644 web/framework-1.0.8/messages/he/yii.php
create mode 100644 web/framework-1.0.8/messages/hu/yii.php
create mode 100644 web/framework-1.0.8/messages/id/yii.php
create mode 100644 web/framework-1.0.8/messages/it/yii.php
create mode 100644 web/framework-1.0.8/messages/ja/yii.php
create mode 100644 web/framework-1.0.8/messages/nl/yii.php
create mode 100644 web/framework-1.0.8/messages/no/yii.php
create mode 100644 web/framework-1.0.8/messages/pl/yii.php
create mode 100644 web/framework-1.0.8/messages/pt/yii.php
create mode 100644 web/framework-1.0.8/messages/ro/yii.php
create mode 100644 web/framework-1.0.8/messages/ru/yii.php
create mode 100644 web/framework-1.0.8/messages/sr_sr/yii.php
create mode 100644 web/framework-1.0.8/messages/sr_yu/yii.php
create mode 100644 web/framework-1.0.8/messages/sv/yii.php
create mode 100644 web/framework-1.0.8/messages/uk/yii.php
create mode 100644 web/framework-1.0.8/messages/vi/yii.php
create mode 100644 web/framework-1.0.8/messages/zh_cn/yii.php
create mode 100644 web/framework-1.0.8/messages/zh_tw/yii.php
create mode 100644 web/framework-1.0.8/utils/CDateTimeParser.php
create mode 100644 web/framework-1.0.8/utils/CFileHelper.php
create mode 100644 web/framework-1.0.8/utils/CMarkdownParser.php
create mode 100644 web/framework-1.0.8/utils/CPropertyValue.php
create mode 100644 web/framework-1.0.8/utils/CTimestamp.php
create mode 100644 web/framework-1.0.8/utils/CVarDumper.php
create mode 100644 web/framework-1.0.8/utils/mimeTypes.php
create mode 100644 web/framework-1.0.8/validators/CCaptchaValidator.php
create mode 100644 web/framework-1.0.8/validators/CCompareValidator.php
create mode 100644 web/framework-1.0.8/validators/CDefaultValueValidator.php
create mode 100644 web/framework-1.0.8/validators/CEmailValidator.php
create mode 100644 web/framework-1.0.8/validators/CExistValidator.php
create mode 100644 web/framework-1.0.8/validators/CFileValidator.php
create mode 100644 web/framework-1.0.8/validators/CFilterValidator.php
create mode 100644 web/framework-1.0.8/validators/CInlineValidator.php
create mode 100644 web/framework-1.0.8/validators/CNumberValidator.php
create mode 100644 web/framework-1.0.8/validators/CRangeValidator.php
create mode 100644 web/framework-1.0.8/validators/CRegularExpressionValidator.php
create mode 100644 web/framework-1.0.8/validators/CRequiredValidator.php
create mode 100644 web/framework-1.0.8/validators/CStringValidator.php
create mode 100644 web/framework-1.0.8/validators/CTypeValidator.php
create mode 100644 web/framework-1.0.8/validators/CUniqueValidator.php
create mode 100644 web/framework-1.0.8/validators/CUrlValidator.php
create mode 100644 web/framework-1.0.8/validators/CValidator.php
create mode 100644 web/framework-1.0.8/vendors/README.html
create mode 100644 web/framework-1.0.8/vendors/adodb/LICENSE.txt
create mode 100644 web/framework-1.0.8/vendors/cldr/LICENSE.txt
create mode 100644 web/framework-1.0.8/vendors/gettext/LICENSE.txt
create mode 100644 web/framework-1.0.8/vendors/json/LICENSE.txt
create mode 100644 web/framework-1.0.8/vendors/markdown/LICENSE.txt
create mode 100644 web/framework-1.0.8/vendors/markdown/markdown.php
create mode 100644 web/framework-1.0.8/views/de/error.php
create mode 100644 web/framework-1.0.8/views/de/error400.php
create mode 100644 web/framework-1.0.8/views/de/error403.php
create mode 100644 web/framework-1.0.8/views/de/error404.php
create mode 100644 web/framework-1.0.8/views/de/error500.php
create mode 100644 web/framework-1.0.8/views/de/error503.php
create mode 100644 web/framework-1.0.8/views/de/exception.php
create mode 100644 web/framework-1.0.8/views/de/log-firebug.php
create mode 100644 web/framework-1.0.8/views/de/log.php
create mode 100644 web/framework-1.0.8/views/de/profile-callstack-firebug.php
create mode 100644 web/framework-1.0.8/views/de/profile-callstack.php
create mode 100644 web/framework-1.0.8/views/de/profile-summary-firebug.php
create mode 100644 web/framework-1.0.8/views/de/profile-summary.php
create mode 100644 web/framework-1.0.8/views/error.php
create mode 100644 web/framework-1.0.8/views/error400.php
create mode 100644 web/framework-1.0.8/views/error403.php
create mode 100644 web/framework-1.0.8/views/error404.php
create mode 100644 web/framework-1.0.8/views/error500.php
create mode 100644 web/framework-1.0.8/views/error503.php
create mode 100644 web/framework-1.0.8/views/es/error.php
create mode 100644 web/framework-1.0.8/views/es/error400.php
create mode 100644 web/framework-1.0.8/views/es/error403.php
create mode 100644 web/framework-1.0.8/views/es/error404.php
create mode 100644 web/framework-1.0.8/views/es/error500.php
create mode 100644 web/framework-1.0.8/views/es/error503.php
create mode 100644 web/framework-1.0.8/views/es/exception.php
create mode 100644 web/framework-1.0.8/views/es/log-firebug.php
create mode 100644 web/framework-1.0.8/views/es/log.php
create mode 100644 web/framework-1.0.8/views/es/profile-callstack-firebug.php
create mode 100644 web/framework-1.0.8/views/es/profile-callstack.php
create mode 100644 web/framework-1.0.8/views/es/profile-summary-firebug.php
create mode 100644 web/framework-1.0.8/views/es/profile-summary.php
create mode 100644 web/framework-1.0.8/views/exception.php
create mode 100644 web/framework-1.0.8/views/fr/error.php
create mode 100644 web/framework-1.0.8/views/fr/error400.php
create mode 100644 web/framework-1.0.8/views/fr/error403.php
create mode 100644 web/framework-1.0.8/views/fr/error404.php
create mode 100644 web/framework-1.0.8/views/fr/error500.php
create mode 100644 web/framework-1.0.8/views/fr/error503.php
create mode 100644 web/framework-1.0.8/views/fr/exception.php
create mode 100644 web/framework-1.0.8/views/fr/log-firebug.php
create mode 100644 web/framework-1.0.8/views/fr/log.php
create mode 100644 web/framework-1.0.8/views/fr/profile-callstack-firebug.php
create mode 100644 web/framework-1.0.8/views/fr/profile-callstack.php
create mode 100644 web/framework-1.0.8/views/fr/profile-summary-firebug.php
create mode 100644 web/framework-1.0.8/views/fr/profile-summary.php
create mode 100644 web/framework-1.0.8/views/he/error.php
create mode 100644 web/framework-1.0.8/views/he/error400.php
create mode 100644 web/framework-1.0.8/views/he/error403.php
create mode 100644 web/framework-1.0.8/views/he/error404.php
create mode 100644 web/framework-1.0.8/views/he/error500.php
create mode 100644 web/framework-1.0.8/views/he/error503.php
create mode 100644 web/framework-1.0.8/views/he/exception.php
create mode 100644 web/framework-1.0.8/views/he/log-firebug.php
create mode 100644 web/framework-1.0.8/views/he/log.php
create mode 100644 web/framework-1.0.8/views/he/profile-callstack-firebug.php
create mode 100644 web/framework-1.0.8/views/he/profile-callstack.php
create mode 100644 web/framework-1.0.8/views/he/profile-summary-firebug.php
create mode 100644 web/framework-1.0.8/views/he/profile-summary.php
create mode 100644 web/framework-1.0.8/views/id/error.php
create mode 100644 web/framework-1.0.8/views/id/error400.php
create mode 100644 web/framework-1.0.8/views/id/error403.php
create mode 100644 web/framework-1.0.8/views/id/error404.php
create mode 100644 web/framework-1.0.8/views/id/error500.php
create mode 100644 web/framework-1.0.8/views/id/error503.php
create mode 100644 web/framework-1.0.8/views/id/exception.php
create mode 100644 web/framework-1.0.8/views/id/log-firebug.php
create mode 100644 web/framework-1.0.8/views/id/log.php
create mode 100644 web/framework-1.0.8/views/id/profile-callstack-firebug.php
create mode 100644 web/framework-1.0.8/views/id/profile-callstack.php
create mode 100644 web/framework-1.0.8/views/id/profile-summary-firebug.php
create mode 100644 web/framework-1.0.8/views/id/profile-summary.php
create mode 100644 web/framework-1.0.8/views/ja/error.php
create mode 100644 web/framework-1.0.8/views/ja/error400.php
create mode 100644 web/framework-1.0.8/views/ja/error403.php
create mode 100644 web/framework-1.0.8/views/ja/error404.php
create mode 100644 web/framework-1.0.8/views/ja/error500.php
create mode 100644 web/framework-1.0.8/views/ja/error503.php
create mode 100644 web/framework-1.0.8/views/ja/exception.php
create mode 100644 web/framework-1.0.8/views/ja/log-firebug.php
create mode 100644 web/framework-1.0.8/views/ja/log.php
create mode 100644 web/framework-1.0.8/views/ja/profile-callstack-firebug.php
create mode 100644 web/framework-1.0.8/views/ja/profile-callstack.php
create mode 100644 web/framework-1.0.8/views/ja/profile-summary-firebug.php
create mode 100644 web/framework-1.0.8/views/ja/profile-summary.php
create mode 100644 web/framework-1.0.8/views/log-firebug.php
create mode 100644 web/framework-1.0.8/views/log.php
create mode 100644 web/framework-1.0.8/views/nl/error.php
create mode 100644 web/framework-1.0.8/views/nl/error400.php
create mode 100644 web/framework-1.0.8/views/nl/error403.php
create mode 100644 web/framework-1.0.8/views/nl/error404.php
create mode 100644 web/framework-1.0.8/views/nl/error500.php
create mode 100644 web/framework-1.0.8/views/nl/error503.php
create mode 100644 web/framework-1.0.8/views/nl/exception.php
create mode 100644 web/framework-1.0.8/views/nl/log-firebug.php
create mode 100644 web/framework-1.0.8/views/nl/log.php
create mode 100644 web/framework-1.0.8/views/nl/profile-callstack-firebug.php
create mode 100644 web/framework-1.0.8/views/nl/profile-callstack.php
create mode 100644 web/framework-1.0.8/views/nl/profile-summary-firebug.php
create mode 100644 web/framework-1.0.8/views/nl/profile-summary.php
create mode 100644 web/framework-1.0.8/views/no/error.php
create mode 100644 web/framework-1.0.8/views/no/error400.php
create mode 100644 web/framework-1.0.8/views/no/error403.php
create mode 100644 web/framework-1.0.8/views/no/error404.php
create mode 100644 web/framework-1.0.8/views/no/error500.php
create mode 100644 web/framework-1.0.8/views/no/error503.php
create mode 100644 web/framework-1.0.8/views/no/exception.php
create mode 100644 web/framework-1.0.8/views/no/log-firebug.php
create mode 100644 web/framework-1.0.8/views/no/log.php
create mode 100644 web/framework-1.0.8/views/no/profile-callstack-firebug.php
create mode 100644 web/framework-1.0.8/views/no/profile-callstack.php
create mode 100644 web/framework-1.0.8/views/no/profile-summary-firebug.php
create mode 100644 web/framework-1.0.8/views/no/profile-summary.php
create mode 100644 web/framework-1.0.8/views/profile-callstack-firebug.php
create mode 100644 web/framework-1.0.8/views/profile-callstack.php
create mode 100644 web/framework-1.0.8/views/profile-summary-firebug.php
create mode 100644 web/framework-1.0.8/views/profile-summary.php
create mode 100644 web/framework-1.0.8/views/pt/error.php
create mode 100644 web/framework-1.0.8/views/pt/error400.php
create mode 100644 web/framework-1.0.8/views/pt/error403.php
create mode 100644 web/framework-1.0.8/views/pt/error404.php
create mode 100644 web/framework-1.0.8/views/pt/error500.php
create mode 100644 web/framework-1.0.8/views/pt/error503.php
create mode 100644 web/framework-1.0.8/views/pt/exception.php
create mode 100644 web/framework-1.0.8/views/pt/log-firebug.php
create mode 100644 web/framework-1.0.8/views/pt/log.php
create mode 100644 web/framework-1.0.8/views/pt/profile-callstack-firebug.php
create mode 100644 web/framework-1.0.8/views/pt/profile-callstack.php
create mode 100644 web/framework-1.0.8/views/pt/profile-summary-firebug.php
create mode 100644 web/framework-1.0.8/views/pt/profile-summary.php
create mode 100644 web/framework-1.0.8/views/ro/error.php
create mode 100644 web/framework-1.0.8/views/ro/error400.php
create mode 100644 web/framework-1.0.8/views/ro/error403.php
create mode 100644 web/framework-1.0.8/views/ro/error404.php
create mode 100644 web/framework-1.0.8/views/ro/error500.php
create mode 100644 web/framework-1.0.8/views/ro/error503.php
create mode 100644 web/framework-1.0.8/views/ro/exception.php
create mode 100644 web/framework-1.0.8/views/ro/log-firebug.php
create mode 100644 web/framework-1.0.8/views/ro/log.php
create mode 100644 web/framework-1.0.8/views/ro/profile-callstack-firebug.php
create mode 100644 web/framework-1.0.8/views/ro/profile-callstack.php
create mode 100644 web/framework-1.0.8/views/ro/profile-summary-firebug.php
create mode 100644 web/framework-1.0.8/views/ro/profile-summary.php
create mode 100644 web/framework-1.0.8/views/ru/error.php
create mode 100644 web/framework-1.0.8/views/ru/error400.php
create mode 100644 web/framework-1.0.8/views/ru/error403.php
create mode 100644 web/framework-1.0.8/views/ru/error404.php
create mode 100644 web/framework-1.0.8/views/ru/error500.php
create mode 100644 web/framework-1.0.8/views/ru/error503.php
create mode 100644 web/framework-1.0.8/views/ru/exception.php
create mode 100644 web/framework-1.0.8/views/ru/log-firebug.php
create mode 100644 web/framework-1.0.8/views/ru/log.php
create mode 100644 web/framework-1.0.8/views/ru/profile-callstack-firebug.php
create mode 100644 web/framework-1.0.8/views/ru/profile-callstack.php
create mode 100644 web/framework-1.0.8/views/ru/profile-summary-firebug.php
create mode 100644 web/framework-1.0.8/views/ru/profile-summary.php
create mode 100644 web/framework-1.0.8/views/sv/error.php
create mode 100644 web/framework-1.0.8/views/sv/error400.php
create mode 100644 web/framework-1.0.8/views/sv/error403.php
create mode 100644 web/framework-1.0.8/views/sv/error404.php
create mode 100644 web/framework-1.0.8/views/sv/error500.php
create mode 100644 web/framework-1.0.8/views/sv/error503.php
create mode 100644 web/framework-1.0.8/views/sv/exception.php
create mode 100644 web/framework-1.0.8/views/sv/log-firebug.php
create mode 100644 web/framework-1.0.8/views/sv/log.php
create mode 100644 web/framework-1.0.8/views/sv/profile-callstack-firebug.php
create mode 100644 web/framework-1.0.8/views/sv/profile-callstack.php
create mode 100644 web/framework-1.0.8/views/sv/profile-summary-firebug.php
create mode 100644 web/framework-1.0.8/views/sv/profile-summary.php
create mode 100644 web/framework-1.0.8/views/zh_cn/error.php
create mode 100644 web/framework-1.0.8/views/zh_cn/error400.php
create mode 100644 web/framework-1.0.8/views/zh_cn/error403.php
create mode 100644 web/framework-1.0.8/views/zh_cn/error404.php
create mode 100644 web/framework-1.0.8/views/zh_cn/error500.php
create mode 100644 web/framework-1.0.8/views/zh_cn/error503.php
create mode 100644 web/framework-1.0.8/views/zh_cn/exception.php
create mode 100644 web/framework-1.0.8/views/zh_cn/log-firebug.php
create mode 100644 web/framework-1.0.8/views/zh_cn/log.php
create mode 100644 web/framework-1.0.8/views/zh_cn/profile-callstack-firebug.php
create mode 100644 web/framework-1.0.8/views/zh_cn/profile-callstack.php
create mode 100644 web/framework-1.0.8/views/zh_cn/profile-summary-firebug.php
create mode 100644 web/framework-1.0.8/views/zh_cn/profile-summary.php
create mode 100644 web/framework-1.0.8/views/zh_tw/error.php
create mode 100644 web/framework-1.0.8/views/zh_tw/error400.php
create mode 100644 web/framework-1.0.8/views/zh_tw/error403.php
create mode 100644 web/framework-1.0.8/views/zh_tw/error404.php
create mode 100644 web/framework-1.0.8/views/zh_tw/error500.php
create mode 100644 web/framework-1.0.8/views/zh_tw/error503.php
create mode 100644 web/framework-1.0.8/views/zh_tw/exception.php
create mode 100644 web/framework-1.0.8/views/zh_tw/log-firebug.php
create mode 100644 web/framework-1.0.8/views/zh_tw/log.php
create mode 100644 web/framework-1.0.8/views/zh_tw/profile-callstack-firebug.php
create mode 100644 web/framework-1.0.8/views/zh_tw/profile-callstack.php
create mode 100644 web/framework-1.0.8/views/zh_tw/profile-summary-firebug.php
create mode 100644 web/framework-1.0.8/views/zh_tw/profile-summary.php
create mode 100644 web/framework-1.0.8/web/CAssetManager.php
create mode 100644 web/framework-1.0.8/web/CBaseController.php
create mode 100644 web/framework-1.0.8/web/CCacheHttpSession.php
create mode 100644 web/framework-1.0.8/web/CClientScript.php
create mode 100644 web/framework-1.0.8/web/CController.php
create mode 100644 web/framework-1.0.8/web/CDbHttpSession.php
create mode 100644 web/framework-1.0.8/web/CExtController.php
create mode 100644 web/framework-1.0.8/web/CFormModel.php
create mode 100644 web/framework-1.0.8/web/CHttpCookie.php
create mode 100644 web/framework-1.0.8/web/CHttpRequest.php
create mode 100644 web/framework-1.0.8/web/CHttpSession.php
create mode 100644 web/framework-1.0.8/web/CHttpSessionIterator.php
create mode 100644 web/framework-1.0.8/web/COutputEvent.php
create mode 100644 web/framework-1.0.8/web/CPagination.php
create mode 100644 web/framework-1.0.8/web/CSort.php
create mode 100644 web/framework-1.0.8/web/CTheme.php
create mode 100644 web/framework-1.0.8/web/CThemeManager.php
create mode 100644 web/framework-1.0.8/web/CUploadedFile.php
create mode 100644 web/framework-1.0.8/web/CUrlManager.php
create mode 100644 web/framework-1.0.8/web/CWebApplication.php
create mode 100644 web/framework-1.0.8/web/CWebModule.php
create mode 100644 web/framework-1.0.8/web/actions/CAction.php
create mode 100644 web/framework-1.0.8/web/actions/CInlineAction.php
create mode 100644 web/framework-1.0.8/web/actions/CViewAction.php
create mode 100644 web/framework-1.0.8/web/auth/CAccessControlFilter.php
create mode 100644 web/framework-1.0.8/web/auth/CAuthAssignment.php
create mode 100644 web/framework-1.0.8/web/auth/CAuthItem.php
create mode 100644 web/framework-1.0.8/web/auth/CAuthManager.php
create mode 100644 web/framework-1.0.8/web/auth/CBaseUserIdentity.php
create mode 100644 web/framework-1.0.8/web/auth/CDbAuthManager.php
create mode 100644 web/framework-1.0.8/web/auth/CPhpAuthManager.php
create mode 100644 web/framework-1.0.8/web/auth/CUserIdentity.php
create mode 100644 web/framework-1.0.8/web/auth/CWebUser.php
create mode 100644 web/framework-1.0.8/web/auth/schema.sql
create mode 100644 web/framework-1.0.8/web/filters/CFilter.php
create mode 100644 web/framework-1.0.8/web/filters/CFilterChain.php
create mode 100644 web/framework-1.0.8/web/filters/CInlineFilter.php
create mode 100644 web/framework-1.0.8/web/helpers/CGoogleApi.php
create mode 100644 web/framework-1.0.8/web/helpers/CHtml.php
create mode 100644 web/framework-1.0.8/web/helpers/CJSON.php
create mode 100644 web/framework-1.0.8/web/helpers/CJavaScript.php
create mode 100644 web/framework-1.0.8/web/renderers/CPradoViewRenderer.php
create mode 100644 web/framework-1.0.8/web/renderers/CViewRenderer.php
create mode 100644 web/framework-1.0.8/web/services/CWebService.php
create mode 100644 web/framework-1.0.8/web/services/CWebServiceAction.php
create mode 100644 web/framework-1.0.8/web/services/CWsdlGenerator.php
create mode 100644 web/framework-1.0.8/web/widgets/CAutoComplete.php
create mode 100644 web/framework-1.0.8/web/widgets/CClipWidget.php
create mode 100644 web/framework-1.0.8/web/widgets/CContentDecorator.php
create mode 100644 web/framework-1.0.8/web/widgets/CFilterWidget.php
create mode 100644 web/framework-1.0.8/web/widgets/CFlexWidget.php
create mode 100644 web/framework-1.0.8/web/widgets/CHtmlPurifier.php
create mode 100644 web/framework-1.0.8/web/widgets/CInputWidget.php
create mode 100644 web/framework-1.0.8/web/widgets/CMarkdown.php
create mode 100644 web/framework-1.0.8/web/widgets/CMaskedTextField.php
create mode 100644 web/framework-1.0.8/web/widgets/CMultiFileUpload.php
create mode 100644 web/framework-1.0.8/web/widgets/COutputCache.php
create mode 100644 web/framework-1.0.8/web/widgets/COutputProcessor.php
create mode 100644 web/framework-1.0.8/web/widgets/CStarRating.php
create mode 100644 web/framework-1.0.8/web/widgets/CTabView.php
create mode 100644 web/framework-1.0.8/web/widgets/CTextHighlighter.php
create mode 100644 web/framework-1.0.8/web/widgets/CTreeView.php
create mode 100644 web/framework-1.0.8/web/widgets/CWidget.php
create mode 100644 web/framework-1.0.8/web/widgets/captcha/CCaptcha.php
create mode 100644 web/framework-1.0.8/web/widgets/captcha/CCaptchaAction.php
create mode 100644 web/framework-1.0.8/web/widgets/captcha/Duality.ttf
create mode 100644 web/framework-1.0.8/web/widgets/pagers/CBasePager.php
create mode 100644 web/framework-1.0.8/web/widgets/pagers/CLinkPager.php
create mode 100644 web/framework-1.0.8/web/widgets/pagers/CListPager.php
create mode 100644 web/framework-1.0.8/web/widgets/pagers/pager.css
create mode 100644 web/framework-1.0.8/web/widgets/views/flexWidget.php
create mode 100644 web/framework-1.0.8/yii.php
create mode 100644 web/images/41.png
create mode 100644 web/images/amc.jpg
create mode 100644 web/images/base/action_refresh_blue.gif
create mode 100644 web/images/base/action_save.gif
create mode 100644 web/images/base/delete.png
create mode 100644 web/images/base/dot.png
create mode 100644 web/images/base/download.png
create mode 100644 web/images/base/edit.png
create mode 100644 web/images/base/enroll.png
create mode 100644 web/images/base/favorite.png
create mode 100644 web/images/base/folder_new.png
create mode 100644 web/images/base/new.png
create mode 100644 web/images/base/newcomment.png
create mode 100644 web/images/base/newfile.png
create mode 100644 web/images/base/newfolder.png
create mode 100644 web/images/base/newuser.png
create mode 100644 web/images/base/pause.png
create mode 100644 web/images/base/play.png
create mode 100644 web/images/base/tools.png
create mode 100644 web/images/base/top.png
create mode 100644 web/images/base/top_header.png
create mode 100644 web/images/base/top_header_selected.png
create mode 100644 web/images/base/video_play.png
create mode 100644 web/images/beta_corner_banner.png
create mode 100644 web/images/beta_corner_banner2.png
create mode 100644 web/images/btc.png
create mode 100644 web/images/coin-154.png
create mode 100644 web/images/coin-22.png
create mode 100644 web/images/coin-251.png
create mode 100644 web/images/coin-30.png
create mode 100644 web/images/coin-316.png
create mode 100644 web/images/coin-33.png
create mode 100644 web/images/coin-6.png
create mode 100644 web/images/coin-834.png
create mode 100644 web/images/gears.png
create mode 100644 web/images/minus2-78.png
create mode 100644 web/images/next.png
create mode 100644 web/images/pause.png
create mode 100644 web/images/play.png
create mode 100644 web/images/plus2-78.png
create mode 100644 web/images/sign-in-with-twitter-gray.png
create mode 100644 web/images/sign-in-with-twitter-link.png
create mode 100644 web/images/start.png
create mode 100644 web/images/t_mini-a.png
create mode 100644 web/images/tweet.jpg
create mode 100644 web/images/twitter.jpg
create mode 100644 web/images/ui/16x16_2leftarrow.png
create mode 100644 web/images/ui/16x16_2rightarrow.png
create mode 100644 web/images/ui/16x16_bottom.png
create mode 100644 web/images/ui/16x16_chat.png
create mode 100644 web/images/ui/16x16_delete.png
create mode 100644 web/images/ui/16x16_edit.png
create mode 100644 web/images/ui/16x16_email.png
create mode 100644 web/images/ui/16x16_fileclose.png
create mode 100644 web/images/ui/16x16_kcontrol.png
create mode 100644 web/images/ui/16x16_kuser.png
create mode 100644 web/images/ui/16x16_ledgreen.png
create mode 100644 web/images/ui/16x16_link.png
create mode 100644 web/images/ui/16x16_misc.png
create mode 100644 web/images/ui/16x16_package_edutainment.png
create mode 100644 web/images/ui/16x16_window_list.png
create mode 100644 web/images/ui/22x22_bottom.png
create mode 100644 web/images/ui/24x24_link.png
create mode 100644 web/images/ui/32x32_link.png
create mode 100644 web/images/ui/48x48_link.png
create mode 100644 web/images/ui/arrow-down.gif
create mode 100644 web/images/ui/arrow-right.gif
create mode 100644 web/images/ui/asc.gif
create mode 100644 web/images/ui/away.gif
create mode 100644 web/images/ui/bg.gif
create mode 100644 web/images/ui/control_play_blue.png
create mode 100644 web/images/ui/desc.gif
create mode 100644 web/images/ui/down_arrow.png
create mode 100644 web/images/ui/empty.png
create mode 100644 web/images/ui/expand_down.png
create mode 100644 web/images/ui/expand_up.png
create mode 100644 web/images/ui/green-check.png
create mode 100644 web/images/ui/icon-check.gif
create mode 100644 web/images/ui/install-flash.jpg
create mode 100644 web/images/ui/linkout.png
create mode 100644 web/images/ui/loading.gif
create mode 100644 web/images/ui/loading_white.gif
create mode 100644 web/images/ui/menudot.png
create mode 100644 web/images/ui/menuo_bg.gif
create mode 100644 web/images/ui/offline.gif
create mode 100644 web/images/ui/online.gif
create mode 100644 web/images/ui/shade.gif
create mode 100644 web/images/ui/shadeactive.gif
create mode 100644 web/images/ui/showactivity.png
create mode 100644 web/images/ui/showcourse.png
create mode 100644 web/images/ui/showdetail.png
create mode 100644 web/images/ui/showfile.png
create mode 100644 web/images/ui/showfolder.png
create mode 100644 web/images/ui/showgraph.png
create mode 100644 web/images/ui/showlink.png
create mode 100644 web/images/ui/showmedium.png
create mode 100644 web/images/ui/showsmall.png
create mode 100644 web/images/ui/tintblue.gif
create mode 100644 web/images/ui/tintbluedark.gif
create mode 100644 web/images/vn_embed.png
create mode 100644 web/index.php
create mode 100755 web/loop2.sh
create mode 100755 web/main.sh
create mode 100644 web/robots.txt
create mode 100644 web/serverconfig.php
create mode 100644 web/yaamp/components/CUFHtml.php
create mode 100644 web/yaamp/components/UniForm.php
create mode 100644 web/yaamp/components/UserIdentity.php
create mode 100644 web/yaamp/config.php
create mode 100644 web/yaamp/core/backend/backend.php
create mode 100644 web/yaamp/core/backend/blocks.php
create mode 100644 web/yaamp/core/backend/clear.php
create mode 100644 web/yaamp/core/backend/coins.php
create mode 100644 web/yaamp/core/backend/markets.php
create mode 100644 web/yaamp/core/backend/payment.php
create mode 100644 web/yaamp/core/backend/rawcoins.php
create mode 100644 web/yaamp/core/backend/renting.php
create mode 100644 web/yaamp/core/backend/sell.php
create mode 100644 web/yaamp/core/backend/services.php
create mode 100644 web/yaamp/core/backend/stats.php
create mode 100644 web/yaamp/core/backend/system.php
create mode 100644 web/yaamp/core/backend/users.php
create mode 100644 web/yaamp/core/common/Shortcuts.php
create mode 100644 web/yaamp/core/common/common.php
create mode 100644 web/yaamp/core/common/libUtil.php
create mode 100644 web/yaamp/core/common/libdbo.php
create mode 100644 web/yaamp/core/common/system.php
create mode 100644 web/yaamp/core/common/util.php
create mode 100644 web/yaamp/core/common/utilConversion.php
create mode 100644 web/yaamp/core/core.php
create mode 100755 web/yaamp/core/exchange/bittrex.php
create mode 100755 web/yaamp/core/exchange/bleutrade.php
create mode 100755 web/yaamp/core/exchange/ccexapi.php
create mode 100755 web/yaamp/core/exchange/cryptsy.php
create mode 100644 web/yaamp/core/exchange/exchange.php
create mode 100755 web/yaamp/core/exchange/jubi.php
create mode 100755 web/yaamp/core/exchange/poloniex.php
create mode 100755 web/yaamp/core/exchange/yobit.php
create mode 100644 web/yaamp/core/exchange2/CExchange.php
create mode 100644 web/yaamp/core/exchange2/CExchangeCoin.php
create mode 100644 web/yaamp/core/exchange2/exchange.php
create mode 100644 web/yaamp/core/functions/curloauth.php
create mode 100644 web/yaamp/core/functions/easybitcoin.php
create mode 100644 web/yaamp/core/functions/functions.php
create mode 100644 web/yaamp/core/functions/memcache.php
create mode 100644 web/yaamp/core/functions/url.php
create mode 100755 web/yaamp/core/functions/yaamp.php
create mode 100644 web/yaamp/core/trading/bittrex_trading.php
create mode 100644 web/yaamp/core/trading/bleutrade_trading.php
create mode 100644 web/yaamp/core/trading/c-cex_trading.php
create mode 100644 web/yaamp/core/trading/cryptsy_trading.php
create mode 100644 web/yaamp/core/trading/poloniex_trading.php
create mode 100644 web/yaamp/core/trading/trading.php
create mode 100644 web/yaamp/core/trading/yobit_trading.php
create mode 100644 web/yaamp/include.php
create mode 100644 web/yaamp/models/db_accountsModel.php
create mode 100644 web/yaamp/models/db_algosModel.php
create mode 100644 web/yaamp/models/db_balancesModel.php
create mode 100644 web/yaamp/models/db_balanceuserModel.php
create mode 100644 web/yaamp/models/db_blocksModel.php
create mode 100644 web/yaamp/models/db_coinsModel.php
create mode 100644 web/yaamp/models/db_connectionsModel.php
create mode 100644 web/yaamp/models/db_earningsModel.php
create mode 100644 web/yaamp/models/db_exchangeModel.php
create mode 100644 web/yaamp/models/db_hashrateModel.php
create mode 100644 web/yaamp/models/db_hashrenterModel.php
create mode 100644 web/yaamp/models/db_hashstatsModel.php
create mode 100644 web/yaamp/models/db_hashuserModel.php
create mode 100644 web/yaamp/models/db_jobsModel.php
create mode 100644 web/yaamp/models/db_jobsubmitsModel.php
create mode 100644 web/yaamp/models/db_marketsModel.php
create mode 100644 web/yaamp/models/db_miningModel.php
create mode 100644 web/yaamp/models/db_nicehashModel.php
create mode 100644 web/yaamp/models/db_ordersModel.php
create mode 100644 web/yaamp/models/db_payoutsModel.php
create mode 100644 web/yaamp/models/db_rawcoinsModel.php
create mode 100644 web/yaamp/models/db_rentersModel.php
create mode 100644 web/yaamp/models/db_rentertxsModel.php
create mode 100644 web/yaamp/models/db_serversModel.php
create mode 100644 web/yaamp/models/db_servicesModel.php
create mode 100644 web/yaamp/models/db_sharesModel.php
create mode 100644 web/yaamp/models/db_shares_vipModel.php
create mode 100644 web/yaamp/models/db_statsModel.php
create mode 100644 web/yaamp/models/db_stratumsModel.php
create mode 100644 web/yaamp/models/db_withdrawsModel.php
create mode 100644 web/yaamp/models/db_workersModel.php
create mode 100644 web/yaamp/modules/api/ApiController.php
create mode 100644 web/yaamp/modules/coin/CoinController.php
create mode 100644 web/yaamp/modules/coin/_form.php
create mode 100644 web/yaamp/modules/coin/index.php
create mode 100644 web/yaamp/modules/common/CommonController.php
create mode 100644 web/yaamp/modules/common/maintenance.php
create mode 100644 web/yaamp/modules/common/yaamp.php
create mode 100644 web/yaamp/modules/explorer/ExplorerController.php
create mode 100644 web/yaamp/modules/explorer/block.php
create mode 100644 web/yaamp/modules/explorer/coin.php
create mode 100644 web/yaamp/modules/explorer/index.php
create mode 100644 web/yaamp/modules/explorer/tx.php
create mode 100644 web/yaamp/modules/explorer/util.php
create mode 100644 web/yaamp/modules/market/MarketController.php
create mode 100644 web/yaamp/modules/market/update.php
create mode 100644 web/yaamp/modules/nicehash/NicehashController.php
create mode 100644 web/yaamp/modules/nicehash/index.php
create mode 100644 web/yaamp/modules/nicehash/index_results.php
create mode 100644 web/yaamp/modules/renting/RentingController.php
create mode 100644 web/yaamp/modules/renting/admin.php
create mode 100644 web/yaamp/modules/renting/all_orders_results.php
create mode 100644 web/yaamp/modules/renting/balance_results.php
create mode 100644 web/yaamp/modules/renting/create.php
create mode 100644 web/yaamp/modules/renting/graph_job_results.php
create mode 100644 web/yaamp/modules/renting/graph_price_results.php
create mode 100644 web/yaamp/modules/renting/index.php
create mode 100644 web/yaamp/modules/renting/login.php
create mode 100644 web/yaamp/modules/renting/orders_results.php
create mode 100644 web/yaamp/modules/renting/settings.php
create mode 100644 web/yaamp/modules/renting/status_results.php
create mode 100644 web/yaamp/modules/renting/tx.php
create mode 100644 web/yaamp/modules/site/SiteController.php
create mode 100644 web/yaamp/modules/site/about.php
create mode 100644 web/yaamp/modules/site/admin.php
create mode 100644 web/yaamp/modules/site/admin_results.php
create mode 100644 web/yaamp/modules/site/api.php
create mode 100644 web/yaamp/modules/site/backup.php
create mode 100644 web/yaamp/modules/site/block.php
create mode 100644 web/yaamp/modules/site/block_results.php
create mode 100644 web/yaamp/modules/site/coin.php
create mode 100644 web/yaamp/modules/site/coin_form.php
create mode 100644 web/yaamp/modules/site/coin_results.php
create mode 100644 web/yaamp/modules/site/common.php
create mode 100644 web/yaamp/modules/site/common_results.php
create mode 100644 web/yaamp/modules/site/connections.php
create mode 100644 web/yaamp/modules/site/connections_results.php
create mode 100644 web/yaamp/modules/site/diff.php
create mode 100644 web/yaamp/modules/site/earning.php
create mode 100644 web/yaamp/modules/site/earning_results.php
create mode 100644 web/yaamp/modules/site/emptymarkets.php
create mode 100644 web/yaamp/modules/site/eval.php
create mode 100644 web/yaamp/modules/site/exchange.php
create mode 100644 web/yaamp/modules/site/exchange_results.php
create mode 100644 web/yaamp/modules/site/index.php
create mode 100644 web/yaamp/modules/site/memcached.php
create mode 100644 web/yaamp/modules/site/miners.php
create mode 100644 web/yaamp/modules/site/mining.php
create mode 100644 web/yaamp/modules/site/monsters.php
create mode 100644 web/yaamp/modules/site/multialgo.php
create mode 100644 web/yaamp/modules/site/payments.php
create mode 100644 web/yaamp/modules/site/payments_results.php
create mode 100644 web/yaamp/modules/site/results/current_results.php
create mode 100644 web/yaamp/modules/site/results/found_results.php
create mode 100644 web/yaamp/modules/site/results/graph_assets_results.php
create mode 100644 web/yaamp/modules/site/results/graph_earnings_results.php
create mode 100644 web/yaamp/modules/site/results/graph_hashrate_results.php
create mode 100644 web/yaamp/modules/site/results/graph_negative_results.php
create mode 100644 web/yaamp/modules/site/results/graph_price_results.php
create mode 100644 web/yaamp/modules/site/results/graph_profit_results.php
create mode 100644 web/yaamp/modules/site/results/graph_user_results.php
create mode 100644 web/yaamp/modules/site/results/history_results.php
create mode 100644 web/yaamp/modules/site/results/miners_results.php
create mode 100644 web/yaamp/modules/site/results/mining_results.php
create mode 100644 web/yaamp/modules/site/results/user_earning_results.php
create mode 100644 web/yaamp/modules/site/results/wallet_graphs_results.php
create mode 100644 web/yaamp/modules/site/results/wallet_miners_results.php
create mode 100644 web/yaamp/modules/site/results/wallet_results.php
create mode 100644 web/yaamp/modules/site/terms.php
create mode 100644 web/yaamp/modules/site/tx.php
create mode 100644 web/yaamp/modules/site/user.php
create mode 100644 web/yaamp/modules/site/user_results.php
create mode 100644 web/yaamp/modules/site/version.php
create mode 100644 web/yaamp/modules/site/version_results.php
create mode 100644 web/yaamp/modules/site/wallet.php
create mode 100644 web/yaamp/modules/site/worker.php
create mode 100644 web/yaamp/modules/site/worker_results.php
create mode 100644 web/yaamp/modules/stats/StatsController.php
create mode 100644 web/yaamp/modules/stats/graph_results_1.php
create mode 100644 web/yaamp/modules/stats/graph_results_2.php
create mode 100644 web/yaamp/modules/stats/graph_results_3.php
create mode 100644 web/yaamp/modules/stats/graph_results_4.php
create mode 100644 web/yaamp/modules/stats/graph_results_5.php
create mode 100644 web/yaamp/modules/stats/graph_results_6.php
create mode 100644 web/yaamp/modules/stats/graph_results_7.php
create mode 100644 web/yaamp/modules/stats/graph_results_8.php
create mode 100644 web/yaamp/modules/stats/graph_results_9.php
create mode 100644 web/yaamp/modules/stats/index.php
create mode 100644 web/yaamp/modules/thread/CronjobController.php
create mode 100644 web/yaamp/modules/trading/TradingController.php
create mode 100644 web/yaamp/modules/trading/index.php
create mode 100644 web/yaamp/modules/trading/mining_results.php
create mode 100644 web/yaamp/ui/app.php
create mode 100644 web/yaamp/ui/css/editor.css
create mode 100644 web/yaamp/ui/css/indicator.gif
create mode 100644 web/yaamp/ui/css/jquery-ui-fixes.css
create mode 100644 web/yaamp/ui/css/list.css
create mode 100644 web/yaamp/ui/css/main.css
create mode 100644 web/yaamp/ui/css/news.css
create mode 100644 web/yaamp/ui/css/objectmenu.css
create mode 100644 web/yaamp/ui/css/poll.css
create mode 100644 web/yaamp/ui/css/table.css
create mode 100644 web/yaamp/ui/css/tags.css
create mode 100644 web/yaamp/ui/css/uni-form-generic.css
create mode 100644 web/yaamp/ui/css/uni-form.css
create mode 100644 web/yaamp/ui/js/auto_refresh.js
create mode 100644 web/yaamp/ui/js/cookies.js
create mode 100644 web/yaamp/ui/js/datetime.js
create mode 100644 web/yaamp/ui/js/jquery.bgiframe.js
create mode 100644 web/yaamp/ui/js/jquery.dialogextend.js
create mode 100644 web/yaamp/ui/js/jquery.tablesorter.js
create mode 100644 web/yaamp/ui/js/jquery.yii.js
create mode 100644 web/yaamp/ui/js/swfobject.js
create mode 100644 web/yaamp/ui/js/texteditor.js
create mode 100644 web/yaamp/ui/js/uni-form.jquery.js
create mode 100644 web/yaamp/ui/js/util.js
create mode 100644 web/yaamp/ui/lib/lib.php
create mode 100644 web/yaamp/ui/lib/libview.php
create mode 100644 web/yaamp/ui/lib/pageheader.php
create mode 100644 web/yaamp/ui/main.php
create mode 100644 web/yaamp/ui/misc.php
diff --git a/web/.project b/web/.project
new file mode 100644
index 0000000..880d08e
--- /dev/null
+++ b/web/.project
@@ -0,0 +1,22 @@
+
+
+ web
+
+
+
+
+
+ org.eclipse.wst.validation.validationbuilder
+
+
+
+
+ org.eclipse.dltk.core.scriptbuilder
+
+
+
+
+
+ org.eclipse.php.core.PHPNature
+
+
diff --git a/web/blocks.sh b/web/blocks.sh
new file mode 100755
index 0000000..e6e9b7f
--- /dev/null
+++ b/web/blocks.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+cd /var/web
+while true; do
+ php5 run.php cronjob/runblocks
+ sleep 20
+done
+exec bash
+
+
diff --git a/web/extensions/jqplot/MIT-LICENSE.txt b/web/extensions/jqplot/MIT-LICENSE.txt
new file mode 100644
index 0000000..f8111b9
--- /dev/null
+++ b/web/extensions/jqplot/MIT-LICENSE.txt
@@ -0,0 +1,21 @@
+Title: MIT License
+
+Copyright (c) 2009-2013 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/web/extensions/jqplot/README.txt b/web/extensions/jqplot/README.txt
new file mode 100644
index 0000000..8777a20
--- /dev/null
+++ b/web/extensions/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 .
+
+Downloads can be found at .
+
+The mailing list is at .
+
+Examples and unit tests are at .
+
+Documentation is at .
+
+The project page and source code are at .
+
+Bugs, issues, feature requests: .
+
+Basic Usage Instructions:
+
+jqPlot requires jQuery (1.4+ required for certain features). jQuery 1.9.1 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:
+
+>
+>
+>
+>
+
+For usage instructions, see in usage.txt. For available options, see
+ in jqPlotOptions.txt.
+
+Building from source:
+
+If you've cloned the repository, you can build a distribution from source.
+You need to have ant 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-2013 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/web/extensions/jqplot/changes.txt b/web/extensions/jqplot/changes.txt
new file mode 100644
index 0000000..ce990ea
--- /dev/null
+++ b/web/extensions/jqplot/changes.txt
@@ -0,0 +1,458 @@
+Title: Change Log
+
+1.0.8:
+* Issue #375: sortMergedLabels does not sort string labels
+* Issue #279: Groups > 3 Causes Alignment Issues
+* Issue #439: IE can't display a customized legend in Quirks mode
+* Issue #482: "Undefined" error message when plotting a chart with no data
+* Issue #116: Don't mix spaces and tabs for indentation
+* Issue #564: Metergauge renderer not resizable when replotting
+* Issue #409: MeterGaugeRenderer replot/redraw offsets center
+* Issue #523: Adding rectangles to Canvas Overlay plugin
+* Issue #756: jqplot.min files contain non-UTF-8 characters
+* Issue #223: fillToZero does not color negative values when crossover point is 0
+* Pull Request #23: Adding rectangles to Canvas Overlay plugin
+* Pull Request #28: Cross-over points of 0 will actually change colors
+* Pull Request #35: Don't highlight hidden bars or show tooltips for them
+* Pull Request #41: Add dutch(nl) and svenska(sv) translations for dates
+* Add tooltip support for Pie Charts
+* Update to latest YUI compressor
+
+1.0.7:
+* Issue #726: Bug in sprintf %p, sometimes it outputs exponential form rather than decimal
+* Issue #717: Plot's preDrawHooks not called
+* Issue #707: Browser hangs with LogAxisRenderer when value is 0
+* Issue #695: Horizontal Bar Chart Negative Series Colors Not Working
+* Issue #670: Examples IE7, IE8 and IE9 multipleBarColors.html failure and fix
+* Issue #636: X Axis Date Renderer Single Day Not plotting
+* Issue #607: Integration issue
+* Issue #571: Decimal numbers not properly formatted
+* Issue #552: jqPlot crashes when interval too small
+* Issue #536: DateAxisRenderer invalid scaling
+* Issue #534: "decimalMark" in the "jqplot.sprintf.js"
+* Issue #529: Scientific notation on label values ending in 0
+* Issue #521: invalid JS in meterGaugeRenderer.js
+* Issue #516: Including BezierCurveRenderer plugin and initializing jqplot with no options give error
+* Issue #500: DateAxisRenderer has timezone related issues
+* Issue #452: Including ALL jqPlot plugins causes an Error
+* Issue #494: No point when use LogAxisRenderer and a point has a zero value
+* Issue #430: getIsoWeek: invalid method call
+* Issue #280: jqplot Options
+* Issue #179: Spelling/grammar
+* Pull Request #18: Implement getTop in CanvasAxisTickRenderer
+* Pull Request #21: Performance issue when drawing pointlabels with zeros/null values
+* Pull Request #24: Added suggested fix in comment #8 for issue #536
+* Pull Request #29: Removed unbalanced addition of UTC offset
+* Pull Request #33: Documentation fixes (issue #179, other changes)
+* Pull Request #34: Start of updating jqPlotOptions.txt
+* Pull Request #37: Example and suggested fix for issues #552 and issue #536
+* Pull Request #39: Fixed trailing comma which caused issues with IE7
+
+1.0.6:
+* Add left sidebar navigation to examples
+* Update examples for jquery 1.9.1 and jquery ui 1.10.0
+* Add colorpicker.js to distribution
+* Fix some problems with examples when viewing with local file system
+* Add "minified" copyright notice for minified files, similar to jquery's notice.
+* Pull Request #25: jqplot.sprintf.js is no longer the last file in the concatenated jquery.jqplot.js
+* Pull Request #17: Fixed bug causing custom pointLabels passed with plot data to be ignored for horizontal bar graphs.
+* Pull Request #10: Build error by invalid encoding.
+* Issue #714: handle tickColor in meterGaugeRenderer
+* Issue #519: jsDate Polish Localization
+
+1.0.5:
+* Updated to jQuery 1.9
+
+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 its 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/
diff --git a/web/extensions/jqplot/copyright.txt b/web/extensions/jqplot/copyright.txt
new file mode 100644
index 0000000..86d4c40
--- /dev/null
+++ b/web/extensions/jqplot/copyright.txt
@@ -0,0 +1,56 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: @VERSION
+ *
+ * Copyright (c) 2009-2013 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-2013 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/web/extensions/jqplot/excanvas.js b/web/extensions/jqplot/excanvas.js
new file mode 100644
index 0000000..4ca9653
--- /dev/null
+++ b/web/extensions/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
+ *
+ *
Localizations must be an object and have the following properties defined: monthNames, monthNamesShort, dayNames, dayNamesShort and Localizations are added like:
+ *
+ * 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(' ')
+ * };
+ *
+ *
After adding localizations, call jsDate.regional.getLocale(); to update the locale setting with the
+ * new localizations.
+ * @param {String | Number | Array | jsDate Object | Date 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:
+ *
+ *
+ * jsDate.formats["perl"] = {
+ * "codes": {
+ * matcher: /someregex/,
+ * Y: "fullYear", // name of "get" method without the "get",
+ * ..., // more codes
+ * },
+ * "shortcuts": {
+ * F: '%Y-%m-%d',
+ * ..., // more shortcuts
+ * }
+ * };
+ *
+ *
+ *
Additionally, ISO and SQL shortcuts are defined and can be accesses via:
+ * jsDate.formats.ISO and jsDate.formats.SQL
+ */
+
+ 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()
+ *
+ *
The following format codes are defined:
+ *
+ *
+ * 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
+ *
+ *
+ *
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.
+ *
+ *
Format codes and format shortcuts can be redefined after the jsDate
+ * module is imported.
+ *
+ *
Note that if you redefine the whole hash (object), you must supply a "matcher"
+ * regex for the parser. The default matcher is:
+ *
+ * /()%(#?(%|[a-z]))/i
+ *
+ *
which corresponds to the Perl syntax used by default.
+ *
+ *
By customizing the matcher and format codes, nearly any strftime functionality is possible.
+ */
+
+ 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()
+ *
+ *
The following format codes are defined:
+ *
+ *
+ * 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 (%)
+ *
+ */
+
+ 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 = ' '; }
+ 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);
+
+ // Apply the decimal mark properly by splitting the number by the
+ // decimalMark, applying thousands separator, and then placing it
+ // back in.
+ var parts = number_str.toString().split('.');
+ parts[0] = thousandSeparation ? thousand_separate(parts[0]) : parts[0];
+ number_str = parts.join($.jqplot.sprintf.decimalMark);
+
+ value = prefix + number_str;
+ var justified = justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace)[textTransform]();
+
+ 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 : String(number).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;
+ };
+
+
+
+
+ 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 = $( "" )
+ .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();
+ }
+ });
+
+ };
+
+})(jQuery);
diff --git a/web/extensions/jqplot/jquery.jqplot.min.css b/web/extensions/jqplot/jquery.jqplot.min.css
new file mode 100644
index 0000000..0f84835
--- /dev/null
+++ b/web/extensions/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/web/extensions/jqplot/jquery.jqplot.min.js b/web/extensions/jqplot/jquery.jqplot.min.js
new file mode 100644
index 0000000..8facc6c
--- /dev/null
+++ b/web/extensions/jqplot/jquery.jqplot.min.js
@@ -0,0 +1,3 @@
+/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
+ jsDate | (c) 2010-2013 Chris Leonello
+ */(function(L){var u;L.fn.emptyForce=function(){for(var ah=0,ai;(ai=L(this)[ah])!=null;ah++){if(ai.nodeType===1){L.cleanData(ai.getElementsByTagName("*"))}if(L.jqplot.use_excanvas){ai.outerHTML=""}else{while(ai.firstChild){ai.removeChild(ai.firstChild)}}ai=null}return L(this)};L.fn.removeChildForce=function(ah){while(ah.firstChild){this.removeChildForce(ah.firstChild);ah.removeChild(ah.firstChild)}};L.fn.jqplot=function(){var ah=[];var aj=[];for(var ak=0,ai=arguments.length;ak'+ao+"");L("#"+an).addClass("jqplot-error");document.getElementById(an).style.background=L.jqplot.config.errorBackground;document.getElementById(an).style.border=L.jqplot.config.errorBorder;document.getElementById(an).style.fontFamily=L.jqplot.config.errorFontFamily;document.getElementById(an).style.fontSize=L.jqplot.config.errorFontSize;document.getElementById(an).style.fontStyle=L.jqplot.config.errorFontStyle;document.getElementById(an).style.fontWeight=L.jqplot.config.errorFontWeight}}else{am.init(an,aj,ah);am.draw();am.themeEngine.init.call(am);return am}};L.jqplot.version="1.0.8";L.jqplot.revision="1250";L.jqplot.targetCounter=1;L.jqplot.CanvasManager=function(){if(typeof L.jqplot.CanvasManager.canvases=="undefined"){L.jqplot.CanvasManager.canvases=[];L.jqplot.CanvasManager.free=[]}var ah=[];this.getCanvas=function(){var ak;var aj=true;if(!L.jqplot.use_excanvas){for(var al=0,ai=L.jqplot.CanvasManager.canvases.length;al887){L.jqplot.support_canvas_text.result=true}else{L.jqplot.support_canvas_text.result=!!(document.createElement("canvas").getContext&&typeof document.createElement("canvas").getContext("2d").fillText=="function")}}return L.jqplot.support_canvas_text.result};L.jqplot.use_excanvas=((!L.support.boxModel||!L.support.objectAll||!$support.leadingWhitespace)&&!L.jqplot.support_canvas())?true:false;L.jqplot.preInitHooks=[];L.jqplot.postInitHooks=[];L.jqplot.preParseOptionsHooks=[];L.jqplot.postParseOptionsHooks=[];L.jqplot.preDrawHooks=[];L.jqplot.postDrawHooks=[];L.jqplot.preDrawSeriesHooks=[];L.jqplot.postDrawSeriesHooks=[];L.jqplot.preDrawLegendHooks=[];L.jqplot.addLegendRowHooks=[];L.jqplot.preSeriesInitHooks=[];L.jqplot.postSeriesInitHooks=[];L.jqplot.preParseSeriesOptionsHooks=[];L.jqplot.postParseSeriesOptionsHooks=[];L.jqplot.eventListenerHooks=[];L.jqplot.preDrawSeriesShadowHooks=[];L.jqplot.postDrawSeriesShadowHooks=[];L.jqplot.ElemContainer=function(){this._elem;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null}};L.jqplot.ElemContainer.prototype.createElement=function(ak,am,ai,aj,an){this._offsets=am;var ah=ai||"jqplot";var al=document.createElement(ak);this._elem=L(al);this._elem.addClass(ah);this._elem.css(aj);this._elem.attr(an);al=null;return this._elem};L.jqplot.ElemContainer.prototype.getWidth=function(){if(this._elem){return this._elem.outerWidth(true)}else{return null}};L.jqplot.ElemContainer.prototype.getHeight=function(){if(this._elem){return this._elem.outerHeight(true)}else{return null}};L.jqplot.ElemContainer.prototype.getPosition=function(){if(this._elem){return this._elem.position()}else{return{top:null,left:null,bottom:null,right:null}}};L.jqplot.ElemContainer.prototype.getTop=function(){return this.getPosition().top};L.jqplot.ElemContainer.prototype.getLeft=function(){return this.getPosition().left};L.jqplot.ElemContainer.prototype.getBottom=function(){return this._elem.css("bottom")};L.jqplot.ElemContainer.prototype.getRight=function(){return this._elem.css("right")};function w(ah){L.jqplot.ElemContainer.call(this);this.name=ah;this._series=[];this.show=false;this.tickRenderer=L.jqplot.AxisTickRenderer;this.tickOptions={};this.labelRenderer=L.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=L.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={}}w.prototype=new L.jqplot.ElemContainer();w.prototype.constructor=w;w.prototype.init=function(){if(L.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)};w.prototype.draw=function(ah,ai){if(this.__ticks){this.__ticks=null}return this.renderer.draw.call(this,ah,ai)};w.prototype.set=function(){this.renderer.set.call(this)};w.prototype.pack=function(ai,ah){if(this.show){this.renderer.pack.call(this,ai,ah)}if(this._min==null){this._min=this.min;this._max=this.max;this._tickInterval=this.tickInterval;this._numberTicks=this.numberTicks;this.__ticks=this._ticks}};w.prototype.reset=function(){this.renderer.reset.call(this)};w.prototype.resetScale=function(ah){L.extend(true,this,{min:null,max:null,numberTicks:null,tickInterval:null,_ticks:[],ticks:[]},ah);this.resetDataBounds()};w.prototype.resetDataBounds=function(){var ao=this._dataBounds;ao.min=null;ao.max=null;var ai,ap,am;var aj=(this.show)?true:false;for(var al=0;alao.max)||ao.max==null){ao.max=am[ak][0]}}else{if((am[ak][ah]!=null&&am[ak][ah]ao.max)||ao.max==null){ao.max=am[ak][an]}}}if(aj&&ap.renderer.constructor!==L.jqplot.BarRenderer){aj=false}else{if(aj&&this._options.hasOwnProperty("forceTickAt0")&&this._options.forceTickAt0==false){aj=false}else{if(aj&&ap.renderer.constructor===L.jqplot.BarRenderer){if(ap.barDirection=="vertical"&&this.name!="xaxis"&&this.name!="x2axis"){if(this._options.pad!=null||this._options.padMin!=null){aj=false}}else{if(ap.barDirection=="horizontal"&&(this.name=="xaxis"||this.name=="x2axis")){if(this._options.pad!=null||this._options.padMin!=null){aj=false}}}}}}}}if(aj&&this.renderer.constructor===L.jqplot.LinearAxisRenderer&&ao.min>=0){this.padMin=1;this.forceTickAt0=true}};function q(ah){L.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=L.jqplot.TableLegendRenderer;this.rendererOptions={};this.preDraw=false;this.marginTop=null;this.marginRight=null;this.marginBottom=null;this.marginLeft=null;this.escapeHtml=false;this._series=[];L.extend(true,this,ah)}q.prototype=new L.jqplot.ElemContainer();q.prototype.constructor=q;q.prototype.setOptions=function(ah){L.extend(true,this,ah);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}};q.prototype.init=function(){if(L.isFunction(this.renderer)){this.renderer=new this.renderer()}this.renderer.init.call(this,this.rendererOptions)};q.prototype.draw=function(ai,aj){for(var ah=0;ah');this.target.append(az);az.height(aD);az.width(aA);az.css("top",this.eventCanvas._offsets.top);az.css("left",this.eventCanvas._offsets.left);var aC=L('');az.append(aC);aC.html(this.noDataIndicator.indicator);var aB=aC.height();var ax=aC.width();aC.height(aB);aC.width(ax);aC.css("top",(aD-aB)/2+"px")})}}this.data=L.extend(true,[],ar);this.parseOptions(ay);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 at=0;at0){for(var aq=au;aq--;){var an=this._plotData[aq][ap][av];if(aw*an>=0){this._plotData[au][ap][av]+=an;this._stackData[au][ap][av]+=an;break}}}}}else{for(var ar=0;ar0){at._prevPlotData=this.series[au-1]._plotData}at._sumy=0;at._sumx=0;for(ar=at.data.length-1;ar>-1;ar--){at._sumy+=at.data[ar][1];at._sumx+=at.data[ar][0]}}};this.populatePlotData=function(au,av){this._plotData=[];this._stackData=[];au._stackData=[];au._plotData=[];var ay={x:[],y:[]};if(this.stackSeries&&!au.disableStack){au._stack=true;var ax=(au._stackAxis==="x")?0:1;var az=L.extend(true,[],au.data);var aA=L.extend(true,[],au.data);var an,am,ao,aw,al;for(var ar=0;ar=0){aA[aq][ax]+=aw}}}for(var at=0;at0){au._prevPlotData=this.series[av-1]._plotData}au._sumy=0;au._sumx=0;for(at=au.data.length-1;at>-1;at--){au._sumy+=au.data[at][1];au._sumx+=au.data[at][0]}};this.getNextSeriesColor=(function(am){var al=0;var an=am.seriesColors;return function(){if(al=0&&an>=0){al.top+=aK;al.bottom+=aK;al.left+=an;al.right+=an}}var am=["top","bottom","left","right"];for(var aB in am){if(this._gridPadding[am[aB]]==null&&al[am[aB]]>0){this._gridPadding[am[aB]]=al[am[aB]]}else{if(this._gridPadding[am[aB]]==null){this._gridPadding[am[aB]]=this._defaultGridPadding[am[aB]]}}}var aA=this._gridPadding;if(this.legend.placement==="outsideGrid"){aA={top:this.title.getHeight(),left:0,right:0,bottom:0};if(this.legend.location==="s"){aA.left=this._gridPadding.left;aA.right=this._gridPadding.right}}ar.xaxis.pack({position:"absolute",bottom:this._gridPadding.bottom-ar.xaxis.getHeight(),left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});ar.yaxis.pack({position:"absolute",top:0,left:this._gridPadding.left-ar.yaxis.getWidth(),height:this._height},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top});ar.x2axis.pack({position:"absolute",top:this._gridPadding.top-ar.x2axis.getHeight(),left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});for(aH=8;aH>0;aH--){ar[aG[aH-1]].pack({position:"absolute",top:0,right:this._gridPadding.right-az[aH-1]},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top})}var au=(this._width-this._gridPadding.left-this._gridPadding.right)/2+this._gridPadding.left-ar.yMidAxis.getWidth()/2;ar.yMidAxis.pack({position:"absolute",top:0,left:au,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 aq=this.series;var aJ=aq.length;for(aH=0,aE=aJ;aHax)?av:ax;var ar=this.series[aw];var aq=this.series[au];if(aq.renderer.smooth){var ap=aq.renderer._smoothedData.slice(0).reverse()}else{var ap=aq.gridData.slice(0).reverse()}if(ar.renderer.smooth){var at=ar.renderer._smoothedData.concat(ap)}else{var at=ar.gridData.concat(ap)}var ao=(an.color!==null)?an.color:this.series[ax].fillColor;var ay=(an.baseSeries!==null)?an.baseSeries:aw;var am=this.series[ay].renderer.shapeRenderer;var al={fillStyle:ao,fill:true,closePath:true};am.draw(ar.shadowCanvas._ctx,at,al)};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 ai(av){var au=av.data.plot;var ap=au.eventCanvas._elem.offset();var at={x:av.pageX-ap.left,y:av.pageY-ap.top};var aq={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 ar=["xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];var al=au.axes;var am,ao;for(am=11;am>0;am--){ao=ar[am-1];if(al[ao].show){aq[ao]=al[ao].series_p2u(at[ao.charAt(0)])}}return{offsets:ap,gridPos:at,dataPos:aq}}function ak(al,am){var aq=am.series;var aW,aU,aT,aO,aP,aJ,aI,aw,au,az,aA,aK;var aS,aX,aQ,ar,aH,aM,aV;var an,aN;for(aT=am.seriesStack.length-1;aT>=0;aT--){aW=am.seriesStack[aT];aO=aq[aW];aV=aO._highlightThreshold;switch(aO.renderer.constructor){case L.jqplot.BarRenderer:aJ=al.x;aI=al.y;for(aU=0;aUaH[0][0]&&aJaH[2][1]&&aIaH[0][0]+aV[0][0]&&aJaH[2][1]&&aI0&&-aI>=0){aw=2*Math.PI-Math.atan(-aI/aJ)}else{if(aJ>0&&-aI<0){aw=-Math.atan(-aI/aJ)}else{if(aJ<0){aw=Math.PI-Math.atan(-aI/aJ)}else{if(aJ==0&&-aI>0){aw=3*Math.PI/2}else{if(aJ==0&&-aI<0){aw=Math.PI/2}else{if(aJ==0&&aI==0){aw=0}}}}}}if(az){aw-=az;if(aw<0){aw+=2*Math.PI}else{if(aw>2*Math.PI){aw-=2*Math.PI}}}au=aO.sliceMargin/180*Math.PI;if(aPaO._innerRadius){for(aU=0;aU0)?aO.gridData[aU-1][1]+au:au;aK=aO.gridData[aU][1];if(aw>aA&&aw0&&-aI>=0){aw=2*Math.PI-Math.atan(-aI/aJ)}else{if(aJ>0&&-aI<0){aw=-Math.atan(-aI/aJ)}else{if(aJ<0){aw=Math.PI-Math.atan(-aI/aJ)}else{if(aJ==0&&-aI>0){aw=3*Math.PI/2}else{if(aJ==0&&-aI<0){aw=Math.PI/2}else{if(aJ==0&&aI==0){aw=0}}}}}}if(az){aw-=az;if(aw<0){aw+=2*Math.PI}else{if(aw>2*Math.PI){aw-=2*Math.PI}}}au=aO.sliceMargin/180*Math.PI;if(aP0)?aO.gridData[aU-1][1]+au:au;aK=aO.gridData[aU][1];if(aw>aA&&aw=ay[0][1]&&aI<=ay[3][1]&&aJ>=at[0]&&aJ<=aE[0]){return{seriesIndex:aO.index,pointIndex:aU,gridData:null,data:aO.data[aU]}}}break;case L.jqplot.LineRenderer:aJ=al.x;aI=al.y;aP=aO.renderer;if(aO.show){if((aO.fill||(aO.renderer.bands.show&&aO.renderer.bands.fill))&&(!am.plugins.highlighter||!am.plugins.highlighter.show)){var ax=false;if(aJ>aO._boundingBox[0][0]&&aJaO._boundingBox[1][1]&&aI=aI||aB[1]=aI){if(aC[0]+(aI-aC[1])/(aB[1]-aC[1])*(aB[0]-aC[0])0)?aN:0;for(var aU=0;aU=aQ[0]-aP._bodyWidth/2&&aJ<=aQ[0]+aP._bodyWidth/2&&aI>=av(aO.data[aU][2])&&aI<=av(aO.data[aU][3])){return{seriesIndex:aW,pointIndex:aU,gridData:aQ,data:aO.data[aU]}}}else{if(!aP.hlc){var av=aO._yaxis.series_u2p;if(aJ>=aQ[0]-aP._tickLength&&aJ<=aQ[0]+aP._tickLength&&aI>=av(aO.data[aU][2])&&aI<=av(aO.data[aU][3])){return{seriesIndex:aW,pointIndex:aU,gridData:aQ,data:aO.data[aU]}}}else{var av=aO._yaxis.series_u2p;if(aJ>=aQ[0]-aP._tickLength&&aJ<=aQ[0]+aP._tickLength&&aI>=av(aO.data[aU][1])&&aI<=av(aO.data[aU][2])){return{seriesIndex:aW,pointIndex:aU,gridData:aQ,data:aO.data[aU]}}}}}else{if(aQ[0]!=null&&aQ[1]!=null){aX=Math.sqrt((aJ-aQ[0])*(aJ-aQ[0])+(aI-aQ[1])*(aI-aQ[1]));if(aX<=an&&(aX<=aS||aS==null)){aS=aX;return{seriesIndex:aW,pointIndex:aU,gridData:aQ,data:aO.data[aU]}}}}}}}break;default:aJ=al.x;aI=al.y;aP=aO.renderer;if(aO.show){aN=aO.markerRenderer.size/2+aO.neighborThreshold;an=(aN>0)?aN:0;for(var aU=0;aU=aQ[0]-aP._bodyWidth/2&&aJ<=aQ[0]+aP._bodyWidth/2&&aI>=av(aO.data[aU][2])&&aI<=av(aO.data[aU][3])){return{seriesIndex:aW,pointIndex:aU,gridData:aQ,data:aO.data[aU]}}}else{if(!aP.hlc){var av=aO._yaxis.series_u2p;if(aJ>=aQ[0]-aP._tickLength&&aJ<=aQ[0]+aP._tickLength&&aI>=av(aO.data[aU][2])&&aI<=av(aO.data[aU][3])){return{seriesIndex:aW,pointIndex:aU,gridData:aQ,data:aO.data[aU]}}}else{var av=aO._yaxis.series_u2p;if(aJ>=aQ[0]-aP._tickLength&&aJ<=aQ[0]+aP._tickLength&&aI>=av(aO.data[aU][1])&&aI<=av(aO.data[aU][2])){return{seriesIndex:aW,pointIndex:aU,gridData:aQ,data:aO.data[aU]}}}}}else{aX=Math.sqrt((aJ-aQ[0])*(aJ-aQ[0])+(aI-aQ[1])*(aI-aQ[1]));if(aX<=an&&(aX<=aS||aS==null)){aS=aX;return{seriesIndex:aW,pointIndex:aU,gridData:aQ,data:aO.data[aU]}}}}}break}}return null}this.onClick=function(an){var am=ai(an);var ap=an.data.plot;var ao=ak(am.gridPos,ap);var al=L.Event("jqplotClick");al.pageX=an.pageX;al.pageY=an.pageY;L(this).trigger(al,[am.gridPos,am.dataPos,ao,ap])};this.onDblClick=function(an){var am=ai(an);var ap=an.data.plot;var ao=ak(am.gridPos,ap);var al=L.Event("jqplotDblClick");al.pageX=an.pageX;al.pageY=an.pageY;L(this).trigger(al,[am.gridPos,am.dataPos,ao,ap])};this.onMouseDown=function(an){var am=ai(an);var ap=an.data.plot;var ao=ak(am.gridPos,ap);var al=L.Event("jqplotMouseDown");al.pageX=an.pageX;al.pageY=an.pageY;L(this).trigger(al,[am.gridPos,am.dataPos,ao,ap])};this.onMouseUp=function(an){var am=ai(an);var al=L.Event("jqplotMouseUp");al.pageX=an.pageX;al.pageY=an.pageY;L(this).trigger(al,[am.gridPos,am.dataPos,null,an.data.plot])};this.onRightClick=function(an){var am=ai(an);var ap=an.data.plot;var ao=ak(am.gridPos,ap);if(ap.captureRightClick){if(an.which==3){var al=L.Event("jqplotRightClick");al.pageX=an.pageX;al.pageY=an.pageY;L(this).trigger(al,[am.gridPos,am.dataPos,ao,ap])}else{var al=L.Event("jqplotMouseUp");al.pageX=an.pageX;al.pageY=an.pageY;L(this).trigger(al,[am.gridPos,am.dataPos,ao,ap])}}};this.onMouseMove=function(an){var am=ai(an);var ap=an.data.plot;var ao=ak(am.gridPos,ap);var al=L.Event("jqplotMouseMove");al.pageX=an.pageX;al.pageY=an.pageY;L(this).trigger(al,[am.gridPos,am.dataPos,ao,ap])};this.onMouseEnter=function(an){var am=ai(an);var ao=an.data.plot;var al=L.Event("jqplotMouseEnter");al.pageX=an.pageX;al.pageY=an.pageY;al.relatedTarget=an.relatedTarget;L(this).trigger(al,[am.gridPos,am.dataPos,null,ao])};this.onMouseLeave=function(an){var am=ai(an);var ao=an.data.plot;var al=L.Event("jqplotMouseLeave");al.pageX=an.pageX;al.pageY=an.pageY;al.relatedTarget=an.relatedTarget;L(this).trigger(al,[am.gridPos,am.dataPos,null,ao])};this.drawSeries=function(an,al){var ap,ao,am;al=(typeof(an)==="number"&&al==null)?an:al;an=(typeof(an)==="object")?an:{};if(al!=u){ao=this.series[al];am=ao.shadowCanvas._ctx;am.clearRect(0,0,am.canvas.width,am.canvas.height);ao.drawShadow(am,an,this);am=ao.canvas._ctx;am.clearRect(0,0,am.canvas.width,am.canvas.height);ao.draw(am,an,this);if(ao.renderer.constructor==L.jqplot.BezierCurveRenderer){if(al660)?ah[aj]*0.85:0.73*ah[aj]+90;ah[aj]=parseInt(ah[aj],10);(ah[aj]>255)?255:ah[aj]}ah[3]=0.3+0.35*al[3];ak.push("rgba("+ah[0]+","+ah[1]+","+ah[2]+","+ah[3]+")")}}else{var al=L.jqplot.getColorComponents(ai);var ah=[al[0],al[1],al[2]];var an=ah[0]+ah[1]+ah[2];for(var aj=0;aj<3;aj++){ah[aj]=(an>660)?ah[aj]*0.85:0.73*ah[aj]+90;ah[aj]=parseInt(ah[aj],10);(ah[aj]>255)?255:ah[aj]}ah[3]=0.3+0.35*al[3];ak="rgba("+ah[0]+","+ah[1]+","+ah[2]+","+ah[3]+")"}return ak};L.jqplot.ColorGenerator=function(ai){ai=ai||L.jqplot.config.defaultColors;var ah=0;this.next=function(){if(ah0){return ai[ah--]}else{ah=ai.length-1;return ai[ah]}};this.get=function(ak){var aj=ak-ai.length*Math.floor(ak/ai.length);return ai[aj]};this.setColors=function(aj){ai=aj};this.reset=function(){ah=0};this.getIndex=function(){return ah};this.setIndex=function(aj){ah=aj}};L.jqplot.hex2rgb=function(aj,ah){aj=aj.replace("#","");if(aj.length==3){aj=aj.charAt(0)+aj.charAt(0)+aj.charAt(1)+aj.charAt(1)+aj.charAt(2)+aj.charAt(2)}var ai;ai="rgba("+parseInt(aj.slice(0,2),16)+", "+parseInt(aj.slice(2,4),16)+", "+parseInt(aj.slice(4,6),16);if(ah){ai+=", "+ah}ai+=")";return ai};L.jqplot.rgb2hex=function(am){var aj=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *(?:, *[0-9.]*)?\)/;var ah=am.match(aj);var al="#";for(var ak=1;ak<4;ak++){var ai;if(ah[ak].search(/%/)!=-1){ai=parseInt(255*ah[ak]/100,10).toString(16);if(ai.length==1){ai="0"+ai}}else{ai=parseInt(ah[ak],10).toString(16);if(ai.length==1){ai="0"+ai}}al+=ai}return al};L.jqplot.normalize2rgb=function(ai,ah){if(ai.search(/^ *rgba?\(/)!=-1){return ai}else{if(ai.search(/^ *#?[0-9a-fA-F]?[0-9a-fA-F]/)!=-1){return L.jqplot.hex2rgb(ai,ah)}else{throw new Error("Invalid color spec")}}};L.jqplot.getColorComponents=function(am){am=L.jqplot.colorKeywordMap[am]||am;var ak=L.jqplot.normalize2rgb(am);var aj=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *,? *([0-9.]* *)?\)/;var ah=ak.match(aj);var ai=[];for(var al=1;al<4;al++){if(ah[al].search(/%/)!=-1){ai[al-1]=parseInt(255*ah[al]/100,10)}else{ai[al-1]=parseInt(ah[al],10)}}ai[3]=parseFloat(ah[4])?parseFloat(ah[4]):1;return ai};L.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)"};L.jqplot.AxisLabelRenderer=function(ah){L.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;L.extend(true,this,ah)};L.jqplot.AxisLabelRenderer.prototype=new L.jqplot.ElemContainer();L.jqplot.AxisLabelRenderer.prototype.constructor=L.jqplot.AxisLabelRenderer;L.jqplot.AxisLabelRenderer.prototype.init=function(ah){L.extend(true,this,ah)};L.jqplot.AxisLabelRenderer.prototype.draw=function(ah,ai){if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=L('');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};L.jqplot.AxisLabelRenderer.prototype.pack=function(){};L.jqplot.AxisTickRenderer=function(ah){L.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=L.jqplot.DefaultTickFormatter;this.prefix="";this.suffix="";this.formatString="";this.fontFamily;this.fontSize;this.textColor;this.escapeHTML=false;this._elem;this._breakTick=false;L.extend(true,this,ah)};L.jqplot.AxisTickRenderer.prototype.init=function(ah){L.extend(true,this,ah)};L.jqplot.AxisTickRenderer.prototype=new L.jqplot.ElemContainer();L.jqplot.AxisTickRenderer.prototype.constructor=L.jqplot.AxisTickRenderer;L.jqplot.AxisTickRenderer.prototype.setTick=function(ah,aj,ai){this.value=ah;this.axis=aj;if(ai){this.isMinorTick=true}return this};L.jqplot.AxisTickRenderer.prototype.draw=function(){if(this.label===null){this.label=this.prefix+this.formatter(this.formatString,this.value)+this.suffix}var ai={position:"absolute"};if(Number(this.label)){ai.whitSpace="nowrap"}if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=L(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(ai);for(var ah in this._styles){this._elem.css(ah,this._styles[ah])}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};L.jqplot.DefaultTickFormatter=function(ah,ai){if(typeof ai=="number"){if(!ah){ah=L.jqplot.config.defaultTickFormatString}return L.jqplot.sprintf(ah,ai)}else{return String(ai)}};L.jqplot.PercentTickFormatter=function(ah,ai){if(typeof ai=="number"){ai=100*ai;if(!ah){ah=L.jqplot.config.defaultTickFormatString}return L.jqplot.sprintf(ah,ai)}else{return String(ai)}};L.jqplot.AxisTickRenderer.prototype.pack=function(){};L.jqplot.CanvasGridRenderer=function(){this.shadowRenderer=new L.jqplot.ShadowRenderer()};L.jqplot.CanvasGridRenderer.prototype.init=function(ai){this._ctx;L.extend(true,this,ai);var ah={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(ah)};L.jqplot.CanvasGridRenderer.prototype.createElement=function(ak){var aj;if(this._elem){if(L.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==u){aj=this._elem.get(0);window.G_vmlCanvasManager.uninitElement(aj);aj=null}this._elem.emptyForce();this._elem=null}aj=ak.canvasManager.getCanvas();var ah=this._plotDimensions.width;var ai=this._plotDimensions.height;aj.width=ah;aj.height=ai;this._elem=L(aj);this._elem.addClass("jqplot-grid-canvas");this._elem.css({position:"absolute",left:0,top:0});aj=ak.canvasManager.initCanvas(aj);this._top=this._offsets.top;this._bottom=ai-this._offsets.bottom;this._left=this._offsets.left;this._right=ah-this._offsets.right;this._width=this._right-this._left;this._height=this._bottom-this._top;aj=null;return this._elem};L.jqplot.CanvasGridRenderer.prototype.draw=function(){this._ctx=this._elem.get(0).getContext("2d");var at=this._ctx;var aw=this._axes;at.save();at.clearRect(0,0,this._plotDimensions.width,this._plotDimensions.height);at.fillStyle=this.backgroundColor||this.background;at.fillRect(this._left,this._top,this._width,this._height);at.save();at.lineJoin="miter";at.lineCap="butt";at.lineWidth=this.gridLineWidth;at.strokeStyle=this.gridLineColor;var aA,az,ap,aq;var am=["xaxis","yaxis","x2axis","y2axis"];for(var ay=4;ay>0;ay--){var aD=am[ay-1];var ah=aw[aD];var aB=ah._ticks;var ar=aB.length;if(ah.show){if(ah.drawBaseline){var aC={};if(ah.baselineWidth!==null){aC.lineWidth=ah.baselineWidth}if(ah.baselineColor!==null){aC.strokeStyle=ah.baselineColor}switch(aD){case"xaxis":ao(this._left,this._bottom,this._right,this._bottom,aC);break;case"yaxis":ao(this._left,this._bottom,this._left,this._top,aC);break;case"x2axis":ao(this._left,this._bottom,this._right,this._bottom,aC);break;case"y2axis":ao(this._right,this._bottom,this._right,this._top,aC);break}}for(var au=ar;au>0;au--){var an=aB[au-1];if(an.show){var ak=Math.round(ah.u2p(an.value))+0.5;switch(aD){case"xaxis":if(an.showGridline&&this.drawGridlines&&((!an.isMinorTick&&ah.drawMajorGridlines)||(an.isMinorTick&&ah.drawMinorGridlines))){ao(ak,this._top,ak,this._bottom)}if(an.showMark&&an.mark&&((!an.isMinorTick&&ah.drawMajorTickMarks)||(an.isMinorTick&&ah.drawMinorTickMarks))){ap=an.markSize;aq=an.mark;var ak=Math.round(ah.u2p(an.value))+0.5;switch(aq){case"outside":aA=this._bottom;az=this._bottom+ap;break;case"inside":aA=this._bottom-ap;az=this._bottom;break;case"cross":aA=this._bottom-ap;az=this._bottom+ap;break;default:aA=this._bottom;az=this._bottom+ap;break}if(this.shadow){this.renderer.shadowRenderer.draw(at,[[ak,aA],[ak,az]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}ao(ak,aA,ak,az)}break;case"yaxis":if(an.showGridline&&this.drawGridlines&&((!an.isMinorTick&&ah.drawMajorGridlines)||(an.isMinorTick&&ah.drawMinorGridlines))){ao(this._right,ak,this._left,ak)}if(an.showMark&&an.mark&&((!an.isMinorTick&&ah.drawMajorTickMarks)||(an.isMinorTick&&ah.drawMinorTickMarks))){ap=an.markSize;aq=an.mark;var ak=Math.round(ah.u2p(an.value))+0.5;switch(aq){case"outside":aA=this._left-ap;az=this._left;break;case"inside":aA=this._left;az=this._left+ap;break;case"cross":aA=this._left-ap;az=this._left+ap;break;default:aA=this._left-ap;az=this._left;break}if(this.shadow){this.renderer.shadowRenderer.draw(at,[[aA,ak],[az,ak]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ao(aA,ak,az,ak,{strokeStyle:ah.borderColor})}break;case"x2axis":if(an.showGridline&&this.drawGridlines&&((!an.isMinorTick&&ah.drawMajorGridlines)||(an.isMinorTick&&ah.drawMinorGridlines))){ao(ak,this._bottom,ak,this._top)}if(an.showMark&&an.mark&&((!an.isMinorTick&&ah.drawMajorTickMarks)||(an.isMinorTick&&ah.drawMinorTickMarks))){ap=an.markSize;aq=an.mark;var ak=Math.round(ah.u2p(an.value))+0.5;switch(aq){case"outside":aA=this._top-ap;az=this._top;break;case"inside":aA=this._top;az=this._top+ap;break;case"cross":aA=this._top-ap;az=this._top+ap;break;default:aA=this._top-ap;az=this._top;break}if(this.shadow){this.renderer.shadowRenderer.draw(at,[[ak,aA],[ak,az]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}ao(ak,aA,ak,az)}break;case"y2axis":if(an.showGridline&&this.drawGridlines&&((!an.isMinorTick&&ah.drawMajorGridlines)||(an.isMinorTick&&ah.drawMinorGridlines))){ao(this._left,ak,this._right,ak)}if(an.showMark&&an.mark&&((!an.isMinorTick&&ah.drawMajorTickMarks)||(an.isMinorTick&&ah.drawMinorTickMarks))){ap=an.markSize;aq=an.mark;var ak=Math.round(ah.u2p(an.value))+0.5;switch(aq){case"outside":aA=this._right;az=this._right+ap;break;case"inside":aA=this._right-ap;az=this._right;break;case"cross":aA=this._right-ap;az=this._right+ap;break;default:aA=this._right;az=this._right+ap;break}if(this.shadow){this.renderer.shadowRenderer.draw(at,[[aA,ak],[az,ak]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ao(aA,ak,az,ak,{strokeStyle:ah.borderColor})}break;default:break}}}an=null}ah=null;aB=null}am=["y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];for(var ay=7;ay>0;ay--){var ah=aw[am[ay-1]];var aB=ah._ticks;if(ah.show){var ai=aB[ah.numberTicks-1];var al=aB[0];var aj=ah.getLeft();var av=[[aj,ai.getTop()+ai.getHeight()/2],[aj,al.getTop()+al.getHeight()/2+1]];if(this.shadow){this.renderer.shadowRenderer.draw(at,av,{lineCap:"butt",fill:false,closePath:false})}ao(av[0][0],av[0][1],av[1][0],av[1][1],{lineCap:"butt",strokeStyle:ah.borderColor,lineWidth:ah.borderWidth});for(var au=aB.length;au>0;au--){var an=aB[au-1];ap=an.markSize;aq=an.mark;var ak=Math.round(ah.u2p(an.value))+0.5;if(an.showMark&&an.mark){switch(aq){case"outside":aA=aj;az=aj+ap;break;case"inside":aA=aj-ap;az=aj;break;case"cross":aA=aj-ap;az=aj+ap;break;default:aA=aj;az=aj+ap;break}av=[[aA,ak],[az,ak]];if(this.shadow){this.renderer.shadowRenderer.draw(at,av,{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ao(aA,ak,az,ak,{strokeStyle:ah.borderColor})}an=null}al=null}ah=null;aB=null}at.restore();function ao(aH,aG,aE,ax,aF){at.save();aF=aF||{};if(aF.lineWidth==null||aF.lineWidth!=0){L.extend(true,at,aF);at.beginPath();at.moveTo(aH,aG);at.lineTo(aE,ax);at.stroke();at.restore()}}if(this.shadow){var av=[[this._left,this._bottom],[this._right,this._bottom],[this._right,this._top]];this.renderer.shadowRenderer.draw(at,av)}if(this.borderWidth!=0&&this.drawBorder){ao(this._left,this._top,this._right,this._top,{lineCap:"round",strokeStyle:aw.x2axis.borderColor,lineWidth:aw.x2axis.borderWidth});ao(this._right,this._top,this._right,this._bottom,{lineCap:"round",strokeStyle:aw.y2axis.borderColor,lineWidth:aw.y2axis.borderWidth});ao(this._right,this._bottom,this._left,this._bottom,{lineCap:"round",strokeStyle:aw.xaxis.borderColor,lineWidth:aw.xaxis.borderWidth});ao(this._left,this._bottom,this._left,this._top,{lineCap:"round",strokeStyle:aw.yaxis.borderColor,lineWidth:aw.yaxis.borderWidth})}at.restore();at=null;aw=null};L.jqplot.DivTitleRenderer=function(){};L.jqplot.DivTitleRenderer.prototype.init=function(ah){L.extend(true,this,ah)};L.jqplot.DivTitleRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}var ak=this.renderer;var aj=document.createElement("div");this._elem=L(aj);this._elem.addClass("jqplot-title");if(!this.text){this.show=false;this._elem.height(0);this._elem.width(0)}else{if(this.text){var ah;if(this.color){ah=this.color}else{if(this.textColor){ah=this.textColor}}var ai={position:"absolute",top:"0px",left:"0px"};if(this._plotWidth){ai.width=this._plotWidth+"px"}if(this.fontSize){ai.fontSize=this.fontSize}if(typeof this.textAlign==="string"){ai.textAlign=this.textAlign}else{ai.textAlign="center"}if(ah){ai.color=ah}if(this.paddingBottom){ai.paddingBottom=this.paddingBottom}if(this.fontFamily){ai.fontFamily=this.fontFamily}this._elem.css(ai);if(this.escapeHtml){this._elem.text(this.text)}else{this._elem.html(this.text)}}}aj=null;return this._elem};L.jqplot.DivTitleRenderer.prototype.pack=function(){};var r=0.1;L.jqplot.LinePattern=function(aw,aq){var ap={dotted:[r,L.jqplot.config.dotGapLength],dashed:[L.jqplot.config.dashLength,L.jqplot.config.gapLength],solid:null};if(typeof aq==="string"){if(aq[0]==="."||aq[0]==="-"){var ax=aq;aq=[];for(var ao=0,al=ax.length;ao0)&&(aC>0)){aA/=aB;az/=aB;while(true){var aD=aC*ar;if(aD=aq.length){ak=0}ar=aq[ak]}else{au=ay;at=aE;if((ak&1)==0){aw.lineTo(au,at)}else{aw.moveTo(au,at)}ar-=aB/aC;break}}}};var ai=function(){aw.beginPath()};var am=function(){aj(an,ah)};return{moveTo:av,lineTo:aj,beginPath:ai,closePath:am}};L.jqplot.LineRenderer=function(){this.shapeRenderer=new L.jqplot.ShapeRenderer();this.shadowRenderer=new L.jqplot.ShadowRenderer()};L.jqplot.LineRenderer.prototype.init=function(ai,an){ai=ai||{};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 al={highlightMouseOver:ai.highlightMouseOver,highlightMouseDown:ai.highlightMouseDown,highlightColor:ai.highlightColor};delete (ai.highlightMouseOver);delete (ai.highlightMouseDown);delete (ai.highlightColor);L.extend(true,this.renderer,ai);this.renderer.options=ai;if(this.renderer.bandData.length>1&&(!ai.bands||ai.bands.show==null)){this.renderer.bands.show=true}else{if(ai.bands&&ai.bands.show==null&&ai.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,an)}if(this._stack){this.renderer.smooth=false}var am={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(am);var aj=ai.shadowOffset;if(aj==null){if(this.lineWidth>2.5){aj=1.25*(1+(Math.atan((this.lineWidth/2.5))/0.785398163-1)*0.6)}else{aj=1.25*Math.atan((this.lineWidth/2.5))/0.785398163}}var ah={lineJoin:this.lineJoin,lineCap:this.lineCap,fill:this.fill,isarc:false,angle:this.shadowAngle,offset:aj,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.lineWidth,linePattern:this.linePattern,closePath:this.fill};this.renderer.shadowRenderer.init(ah);this._areaPoints=[];this._boundingBox=[[],[]];if(!this.isTrendline&&this.fill||this.renderer.bands.show){this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColor=null;if(al.highlightMouseDown&&al.highlightMouseOver==null){al.highlightMouseOver=false}L.extend(true,this,{highlightMouseOver:al.highlightMouseOver,highlightMouseDown:al.highlightMouseDown,highlightColor:al.highlightColor});if(!this.highlightColor){var ak=(this.renderer.bands.show)?this.renderer.bands.fillColor:this.fillColor;this.highlightColor=L.jqplot.computeHighlightColors(ak)}if(this.highlighter){this.highlighter.show=false}}if(!this.isTrendline&&an){an.plugins.lineRenderer={};an.postInitHooks.addOnce(z);an.postDrawHooks.addOnce(af);an.eventListenerHooks.addOnce("jqplotMouseMove",h);an.eventListenerHooks.addOnce("jqplotMouseDown",e);an.eventListenerHooks.addOnce("jqplotMouseUp",ad);an.eventListenerHooks.addOnce("jqplotClick",g);an.eventListenerHooks.addOnce("jqplotRightClick",s)}};L.jqplot.LineRenderer.prototype.initBands=function(ak,av){var al=ak.bandData||[];var an=this.renderer.bands;an.hiData=[];an.lowData=[];var aB=this.data;an._max=null;an._min=null;if(al.length==2){if(L.isArray(al[0][0])){var ao;var ah=0,ar=0;for(var aw=0,at=al[0].length;awan._max)||an._max==null){an._max=ao[1]}if((ao[1]!=null&&ao[1]an._max)||an._max==null){an._max=ao[1];ar=1}if((ao[1]!=null&&ao[1]al[1][0])?0:1;var aC=(aj)?0:1;for(var aw=0,at=aB.length;aw2&&!L.isArray(al[0][0])){var aj=(al[0][0]>al[0][1])?0:1;var aC=(aj)?0:1;for(var aw=0,at=al.length;awan._max)||an._max==null){an._max=am[aw][1]}}for(var aw=0,at=ap.length;aw0){aR=Math.abs((ap[aQ][1]-ap[aQ-1][1])/(ap[aQ][0]-ap[aQ-1][0]))}am=aR/aG+aE;aM=aF*A(am)-aF*A(aE)+aS;aT=(aO+aM)/2}else{aT=aU}for(aK=0;aK2){var ao;if(this.renderer.constrainSmoothing){ao=J.call(this,this.gridData);this.renderer._smoothedData=ao[0];this.renderer._smoothedPlotData=ao[1];if(ak.show){ao=J.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ao[0];ao=J.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ao[0]}ao=null}else{ao=F.call(this,this.gridData);this.renderer._smoothedData=ao[0];this.renderer._smoothedPlotData=ao[1];if(ak.show){ao=F.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ao[0];ao=F.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ao[0]}ao=null}}};L.jqplot.LineRenderer.prototype.makeGridData=function(ao,aq){var am=this._xaxis.series_u2p;var ah=this._yaxis.series_u2p;var ar=[];var aj=[];this.renderer._smoothedData=[];this.renderer._smoothedPlotData=[];this.renderer._hiBandGridData=[];this.renderer._lowBandGridData=[];this.renderer._hiBandSmoothedData=[];this.renderer._lowBandSmoothedData=[];var al=this.renderer.bands;var ai=false;for(var an=0;an2){var ap;if(this.renderer.constrainSmoothing){ap=J.call(this,ar);this.renderer._smoothedData=ap[0];this.renderer._smoothedPlotData=ap[1];if(al.show){ap=J.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ap[0];ap=J.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ap[0]}ap=null}else{ap=F.call(this,ar);this.renderer._smoothedData=ap[0];this.renderer._smoothedPlotData=ap[1];if(al.show){ap=F.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ap[0];ap=F.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ap[0]}ap=null}}return ar};L.jqplot.LineRenderer.prototype.draw=function(ax,aI,ai,aB){var aC;var aq=L.extend(true,{},ai);var ak=(aq.shadow!=u)?aq.shadow:this.shadow;var aJ=(aq.showLine!=u)?aq.showLine:this.showLine;var aA=(aq.fill!=u)?aq.fill:this.fill;var ah=(aq.fillAndStroke!=u)?aq.fillAndStroke:this.fillAndStroke;var ar,ay,av,aE;ax.save();if(aI.length){if(aJ){if(aA){if(this.fillToZero){var aF=this.negativeColor;if(!this.useNegativeColors){aF=aq.fillStyle}var ao=false;var ap=aq.fillStyle;if(ah){var aH=aI.slice(0)}if(this.index==0||!this._stack){var aw=[];var aL=(this.renderer.smooth)?this.renderer._smoothedPlotData:this._plotData;this._areaPoints=[];var aG=this._yaxis.series_u2p(this.fillToValue);var aj=this._xaxis.series_u2p(this.fillToValue);aq.closePath=true;if(this.fillAxis=="y"){aw.push([aI[0][0],aG]);this._areaPoints.push([aI[0][0],aG]);for(var aC=0;aC0;aC--){aI.push(au[aC-1])}if(ak){this.renderer.shadowRenderer.draw(ax,aI,aq)}this._areaPoints=aI;this.renderer.shapeRenderer.draw(ax,aI,aq)}}else{if(ah){var aH=aI.slice(0)}if(this.index==0||!this._stack){var al=ax.canvas.height;aI.unshift([aI[0][0],al]);var aD=aI.length;aI.push([aI[aD-1][0],al])}else{var au=this._prevGridData;for(var aC=au.length;aC>0;aC--){aI.push(au[aC-1])}}this._areaPoints=aI;if(ak){this.renderer.shadowRenderer.draw(ax,aI,aq)}this.renderer.shapeRenderer.draw(ax,aI,aq)}if(ah){var az=L.extend(true,{},aq,{fill:false,closePath:false});this.renderer.shapeRenderer.draw(ax,aH,az);if(this.markerRenderer.show){if(this.renderer.smooth){aH=this.gridData}for(aC=0;aCat[0]||ar==null){ar=at[0]}if(aEat[1]||ay==null){ay=at[1]}}if(this.type==="line"&&this.renderer.bands.show){aE=this._yaxis.series_u2p(this.renderer.bands._min);ay=this._yaxis.series_u2p(this.renderer.bands._max)}this._boundingBox=[[ar,aE],[av,ay]];if(this.markerRenderer.show&&!aA){if(this.renderer.smooth){aI=this.gridData}for(aC=0;aCao){ao=aj}}}al=null;am=null;if(ah){ai=this._label._elem.outerWidth(true);an=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){ao=ao+an;this._elem.css({height:ao+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){ao=ao+an;this._elem.css({height:ao+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){ao=ao+ai;this._elem.css({width:ao+"px",left:"0px",top:"0px"});if(ah&&this._label.constructor==L.jqplot.AxisLabelRenderer){this._label._elem.css("width",ai+"px")}}else{ao=ao+ai;this._elem.css({width:ao+"px",right:"0px",top:"0px"});if(ah&&this._label.constructor==L.jqplot.AxisLabelRenderer){this._label._elem.css("width",ai+"px")}}}}}};L.jqplot.LinearAxisRenderer.prototype.createTicks=function(aj){var aT=this._ticks;var aK=this.ticks;var az=this.name;var aB=this._dataBounds;var ah=(this.name.charAt(0)==="x")?this._plotDimensions.width:this._plotDimensions.height;var an;var a6,aI;var ap,ao;var a4,a0;var aH=this.min;var a5=this.max;var aW=this.numberTicks;var ba=this.tickInterval;var am=30;this._scalefact=(Math.max(ah,am+1)-am)/300;if(aK.length){for(a0=0;a0this.breakPoints[0]&&aO[0]<=this.breakPoints[1]){aU.show=false;aU.showGridline=false;aU.label=aO[1]}else{aU.label=aO[1]}}}else{aU.label=aO[1]}aU.setTick(aO[0],this.name);this._ticks.push(aU)}else{if(L.isPlainObject(aO)){L.extend(true,aU,aO);aU.axis=this.name;this._ticks.push(aU)}else{aU.value=aO;if(this.breakPoints){if(aO==this.breakPoints[0]){aU.label=this.breakTickLabel;aU._breakTick=true;aU.showGridline=false;aU.showMark=false}else{if(aO>this.breakPoints[0]&&aO<=this.breakPoints[1]){aU.show=false;aU.showGridline=false}}}aU.setTick(aO,this.name);this._ticks.push(aU)}}}this.numberTicks=aK.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(az=="xaxis"||az=="x2axis"){ah=this._plotDimensions.width}else{ah=this._plotDimensions.height}var ax=this.numberTicks;if(this.alignTicks){if(this.name==="x2axis"&&aj.axes.xaxis.show){ax=aj.axes.xaxis.numberTicks}else{if(this.name.charAt(0)==="y"&&this.name!=="yaxis"&&this.name!=="yMidAxis"&&aj.axes.yaxis.show){ax=aj.axes.yaxis.numberTicks}}}a6=((this.min!=null)?this.min:aB.min);aI=((this.max!=null)?this.max:aB.max);var av=aI-a6;var aS,ay;var at;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(a6>0){a6=0}if(aI<0){aI=0}}if(this.forceTickAt100){if(a6>100){a6=100}if(aI<100){aI=100}}var aE=false,a1=false;if(this.min!=null){aE=true}else{if(this.max!=null){a1=true}}var aP=L.jqplot.LinearTickGenerator(a6,aI,this._scalefact,ax,aE,a1);var aw=(this.min!=null)?a6:a6+av*(this.padMin-1);var aQ=(this.max!=null)?aI:aI-av*(this.padMax-1);if(a6aQ){aw=(this.min!=null)?a6:a6-av*(this.padMin-1);aQ=(this.max!=null)?aI:aI+av*(this.padMax-1);aP=L.jqplot.LinearTickGenerator(aw,aQ,this._scalefact,ax,aE,a1)}this.min=aP[0];this.max=aP[1];this.numberTicks=aP[2];this._autoFormatString=aP[3];this.tickInterval=aP[4]}else{if(a6==aI){var ai=0.05;if(a6>0){ai=Math.max(Math.log(a6)/Math.LN10,0.05)}a6-=ai;aI+=ai}if(this.autoscale&&this.min==null&&this.max==null){var ak,al,ar;var aC=false;var aN=false;var aA={min:null,max:null,average:null,stddev:null};for(var a0=0;a0a2){a2=aR[aZ]}}}var au=(a2-aG)/a2;if(aV.renderer.constructor==L.jqplot.BarRenderer){if(aG>=0&&(aV.fillToZero||au>0.1)){aC=true}else{aC=false;if(aV.fill&&aV.fillToZero&&aG<0&&a2>0){aN=true}else{aN=false}}}else{if(aV.fill){if(aG>=0&&(aV.fillToZero||au>0.1)){aC=true}else{if(aG<0&&a2>0&&aV.fillToZero){aC=false;aN=true}else{aC=false;aN=false}}}else{if(aG<0){aC=false}}}}}if(aC){this.numberTicks=2+Math.ceil((ah-(this.tickSpacing-1))/this.tickSpacing);this.min=0;aH=0;al=aI/(this.numberTicks-1);at=Math.pow(10,Math.abs(Math.floor(Math.log(al)/Math.LN10)));if(al/at==parseInt(al/at,10)){al+=at}this.tickInterval=Math.ceil(al/at)*at;this.max=this.tickInterval*(this.numberTicks-1)}else{if(aN){this.numberTicks=2+Math.ceil((ah-(this.tickSpacing-1))/this.tickSpacing);var aJ=Math.ceil(Math.abs(a6)/av*(this.numberTicks-1));var a9=this.numberTicks-1-aJ;al=Math.max(Math.abs(a6/aJ),Math.abs(aI/a9));at=Math.pow(10,Math.abs(Math.floor(Math.log(al)/Math.LN10)));this.tickInterval=Math.ceil(al/at)*at;this.max=this.tickInterval*a9;this.min=-this.tickInterval*aJ}else{if(this.numberTicks==null){if(this.tickInterval){this.numberTicks=3+Math.ceil(av/this.tickInterval)}else{this.numberTicks=2+Math.ceil((ah-(this.tickSpacing-1))/this.tickSpacing)}}if(this.tickInterval==null){al=av/(this.numberTicks-1);if(al<1){at=Math.pow(10,Math.abs(Math.floor(Math.log(al)/Math.LN10)))}else{at=1}this.tickInterval=Math.ceil(al*at*this.pad)/at}else{at=1/this.tickInterval}ak=this.tickInterval*(this.numberTicks-1);ar=(ak-av)/2;if(this.min==null){this.min=Math.floor(at*(a6-ar))/at}if(this.max==null){this.max=this.min+ak}}}var aF=L.jqplot.getSignificantFigures(this.tickInterval);var aM;if(aF.digitsLeft>=aF.significantDigits){aM="%d"}else{var at=Math.max(0,5-aF.digitsLeft);at=Math.min(at,aF.digitsRight);aM="%."+at+"f"}this._autoFormatString=aM}else{aS=(this.min!=null)?this.min:a6-av*(this.padMin-1);ay=(this.max!=null)?this.max:aI+av*(this.padMax-1);av=ay-aS;if(this.numberTicks==null){if(this.tickInterval!=null){this.numberTicks=Math.ceil((ay-aS)/this.tickInterval)+1}else{if(ah>100){this.numberTicks=parseInt(3+(ah-100)/75,10)}else{this.numberTicks=2}}}if(this.tickInterval==null){this.tickInterval=av/(this.numberTicks-1)}if(this.max==null){ay=aS+this.tickInterval*(this.numberTicks-1)}if(this.min==null){aS=ay-this.tickInterval*(this.numberTicks-1)}var aF=L.jqplot.getSignificantFigures(this.tickInterval);var aM;if(aF.digitsLeft>=aF.significantDigits){aM="%d"}else{var at=Math.max(0,5-aF.digitsLeft);at=Math.min(at,aF.digitsRight);aM="%."+at+"f"}this._autoFormatString=aM;this.min=aS;this.max=ay}if(this.renderer.constructor==L.jqplot.LinearAxisRenderer&&this._autoFormatString==""){av=this.max-this.min;var a7=new this.tickRenderer(this.tickOptions);var aL=a7.formatString||L.jqplot.config.defaultTickFormatString;var aL=aL.match(L.jqplot.sprintf.regex)[0];var a3=0;if(aL){if(aL.search(/[fFeEgGpP]/)>-1){var aY=aL.match(/\%\.(\d{0,})?[eEfFgGpP]/);if(aY){a3=parseInt(aY[1],10)}else{a3=6}}else{if(aL.search(/[di]/)>-1){a3=0}}var aq=Math.pow(10,-a3);if(this.tickIntervalthis.breakPoints[0]&&aAthis.breakPoints[0]&&aAthis.breakPoints[0]&&aA=this.breakPoints[1]){return(aA-au)*ak/al}else{return(aA+this.breakPoints[1]-this.breakPoints[0]-au)*ak/al}};this.series_p2u=function(aA){return aA*al/ak+au}}}else{this.p2u=function(aA){return(aA-am)*al/ak+at};this.u2p=function(aA){return(aA-at)*ak/al+am};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(aA){return(aA-at)*ak/al};this.series_p2u=function(aA){return aA*al/ak+at}}else{this.series_u2p=function(aA){return(aA-au)*ak/al};this.series_p2u=function(aA){return aA*al/ak+au}}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(var av=0;av0){ah=-ap._textRenderer.height*Math.cos(-ap._textRenderer.angle)/2}else{ah=-ap.getHeight()+ap._textRenderer.height*Math.cos(ap._textRenderer.angle)/2}break;case"middle":ah=-ap.getHeight()/2;break;default:ah=-ap.getHeight()/2;break}}else{ah=-ap.getHeight()/2}var az=this.u2p(ap.value)+ah+"px";ap._elem.css("top",az);ap.pack()}}if(aq){var aw=this._label._elem.outerHeight(true);this._label._elem.css("top",ao-ak/2-aw/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}ay=null};function i(ai){var ah;ai=Math.abs(ai);if(ai>=10){ah="%d"}else{if(ai>1){if(ai===parseInt(ai,10)){ah="%d"}else{ah="%.1f"}}else{var aj=-Math.floor(Math.log(ai)/Math.LN10);ah="%."+aj+"f"}}return ah}var b=[0.1,0.2,0.3,0.4,0.5,0.8,1,2,3,4,5];var c=function(ai){var ah=b.indexOf(ai);if(ah>0){return b[ah-1]}else{return b[b.length-1]/100}};var k=function(ai){var ah=b.indexOf(ai);if(ah5){ah=10*aj}else{if(am>2){ah=5*aj}else{if(am>1){ah=2*aj}else{ah=aj}}}}else{if(am>5){ah=10*aj}else{if(am>4){ah=5*aj}else{if(am>3){ah=4*aj}else{if(am>2){ah=3*aj}else{if(am>1){ah=2*aj}else{ah=aj}}}}}}return ah}function Q(ai,ah){ah=ah||1;var ak=Math.floor(Math.log(ai)/Math.LN10);var am=Math.pow(10,ak);var al=ai/am;var aj;al=al/ah;if(al<=0.38){aj=0.1}else{if(al<=1.6){aj=0.2}else{if(al<=4){aj=0.5}else{if(al<=8){aj=1}else{if(al<=16){aj=2}else{aj=5}}}}}return aj*am}function x(aj,ai){var al=Math.floor(Math.log(aj)/Math.LN10);var an=Math.pow(10,al);var am=aj/an;var ah;var ak;am=am/ai;if(am<=0.38){ak=0.1}else{if(am<=1.6){ak=0.2}else{if(am<=4){ak=0.5}else{if(am<=8){ak=1}else{if(am<=16){ak=2}else{ak=5}}}}}ah=ak*an;return[ah,ak,an]}L.jqplot.LinearTickGenerator=function(an,aq,aj,ak,ao,ar){ao=(ao===null)?false:ao;ar=(ar===null||ao)?false:ar;if(an===aq){aq=(aq)?0:1}aj=aj||1;if(aqat){at=aB}if(ai>aA){aA=ai}})}an.width=at+Number(av);an.height=aA+Number(ax);var ak=an.getContext("2d");ak.save();ak.fillStyle=al;ak.fillRect(0,0,an.width,an.height);ak.restore();ak.translate(au,ar);ak.textAlign="left";ak.textBaseline="top";function aC(aE){var aF=parseInt(L(aE).css("line-height"),10);if(isNaN(aF)){aF=parseInt(L(aE).css("font-size"),10)*1.2}return aF}function aD(aF,aE,aS,aG,aO,aH){var aQ=aC(aF);var aK=L(aF).innerWidth();var aL=L(aF).innerHeight();var aN=aS.split(/\s+/);var aR=aN.length;var aP="";var aM=[];var aU=aO;var aT=aG;for(var aJ=0;aJaK){aM.push(aJ);aP="";aJ--}}if(aM.length===0){if(L(aF).css("textAlign")==="center"){aT=aG+(aH-aE.measureText(aP).width)/2-au}aE.fillText(aS,aT,aO)}else{aP=aN.slice(0,aM[0]).join(" ");if(L(aF).css("textAlign")==="center"){aT=aG+(aH-aE.measureText(aP).width)/2-au}aE.fillText(aP,aT,aU);aU+=aQ;for(var aJ=1,aI=aM.length;aJ0){ak.strokeRect(aI,aL,L(aG).innerWidth(),L(aG).innerHeight())}L(aG).find("div.jqplot-table-legend-swatch-outline").each(function(){var aU=L(this);ak.strokeStyle=aU.css("border-top-color");var aQ=aI+aU.position().left;var aR=aL+aU.position().top;ak.strokeRect(aQ,aR,aU.innerWidth(),aU.innerHeight());aQ+=parseInt(aU.css("padding-left"),10);aR+=parseInt(aU.css("padding-top"),10);var aT=aU.innerHeight()-2*parseInt(aU.css("padding-top"),10);var aP=aU.innerWidth()-2*parseInt(aU.css("padding-left"),10);var aS=aU.children("div.jqplot-table-legend-swatch");ak.fillStyle=aS.css("background-color");ak.fillRect(aQ,aR,aP,aT)});L(aG).find("td.jqplot-table-legend-label").each(function(){var aR=L(this);var aP=aI+aR.position().left;var aQ=aL+aR.position().top+parseInt(aR.css("padding-top"),10);ak.font=aR.jqplotGetComputedFontStyle();ak.fillStyle=aR.css("color");aD(aR,ak,aR.text(),aP,aQ,aM)});var aH=null}else{if(aN=="canvas"){ak.drawImage(aG,aI,aL)}}}}L(this).children().each(function(){aw(this,av,ax)});return an};L.fn.jqplotToImageStr=function(ai){var ah=L(this).jqplotToImageCanvas(ai);if(ah){return ah.toDataURL("image/png")}else{return null}};L.fn.jqplotToImageElem=function(ah){var ai=document.createElement("img");var aj=L(this).jqplotToImageStr(ah);ai.src=aj;return ai};L.fn.jqplotToImageElemStr=function(ah){var ai="";return ai};L.fn.jqplotSaveImage=function(){var ah=L(this).jqplotToImageStr({});if(ah){window.location.href=ah.replace("image/png","image/octet-stream")}};L.fn.jqplotViewImage=function(){var ai=L(this).jqplotToImageElemStr({});var aj=L(this).jqplotToImageStr({});if(ai){var ah=window.open("");ah.document.open("image/png");ah.document.write(ai);ah.document.close();ah=null}};var ag=function(){this.syntax=ag.config.syntax;this._type="jsDate";this.proxy=new Date();this.options={};this.locale=ag.regional.getLocale();this.formatString="";this.defaultCentury=ag.config.defaultCentury;switch(arguments.length){case 0:break;case 1:if(l(arguments[0])=="[object Object]"&&arguments[0]._type!="jsDate"){var aj=this.options=arguments[0];this.syntax=aj.syntax||this.syntax;this.defaultCentury=aj.defaultCentury||this.defaultCentury;this.proxy=ag.createDate(aj.date)}else{this.proxy=ag.createDate(arguments[0])}break;default:var ah=[];for(var ai=0;ai0?"floor":"ceil"](ak))};ag.prototype.getAbbrDayName=function(){return ag.regional[this.locale]["dayNamesShort"][this.proxy.getDay()]};ag.prototype.getAbbrMonthName=function(){return ag.regional[this.locale]["monthNamesShort"][this.proxy.getMonth()]};ag.prototype.getAMPM=function(){return this.proxy.getHours()>=12?"PM":"AM"};ag.prototype.getAmPm=function(){return this.proxy.getHours()>=12?"pm":"am"};ag.prototype.getCentury=function(){return parseInt(this.proxy.getFullYear()/100,10)};ag.prototype.getDate=function(){return this.proxy.getDate()};ag.prototype.getDay=function(){return this.proxy.getDay()};ag.prototype.getDayOfWeek=function(){var ah=this.proxy.getDay();return ah===0?7:ah};ag.prototype.getDayOfYear=function(){var ai=this.proxy;var ah=ai-new Date(""+ai.getFullYear()+"/1/1 GMT");ah+=ai.getTimezoneOffset()*60000;ai=null;return parseInt(ah/60000/60/24,10)+1};ag.prototype.getDayName=function(){return ag.regional[this.locale]["dayNames"][this.proxy.getDay()]};ag.prototype.getFullWeekOfYear=function(){var ak=this.proxy;var ah=this.getDayOfYear();var aj=6-ak.getDay();var ai=parseInt((ah+aj)/7,10);return ai};ag.prototype.getFullYear=function(){return this.proxy.getFullYear()};ag.prototype.getGmtOffset=function(){var ah=this.proxy.getTimezoneOffset()/60;var ai=ah<0?"+":"-";ah=Math.abs(ah);return ai+N(Math.floor(ah),2)+":"+N((ah%1)*60,2)};ag.prototype.getHours=function(){return this.proxy.getHours()};ag.prototype.getHours12=function(){var ah=this.proxy.getHours();return ah>12?ah-12:(ah==0?12:ah)};ag.prototype.getIsoWeek=function(){var ak=this.proxy;var aj=this.getWeekOfYear();var ah=(new Date(""+ak.getFullYear()+"/1/1")).getDay();var ai=aj+(ah>4||ah<=1?0:1);if(ai==53&&(new Date(""+ak.getFullYear()+"/12/31")).getDay()<4){ai=1}else{if(ai===0){ak=new ag(new Date(""+(ak.getFullYear()-1)+"/12/31"));ai=ak.getIsoWeek()}}ak=null;return ai};ag.prototype.getMilliseconds=function(){return this.proxy.getMilliseconds()};ag.prototype.getMinutes=function(){return this.proxy.getMinutes()};ag.prototype.getMonth=function(){return this.proxy.getMonth()};ag.prototype.getMonthName=function(){return ag.regional[this.locale]["monthNames"][this.proxy.getMonth()]};ag.prototype.getMonthNumber=function(){return this.proxy.getMonth()+1};ag.prototype.getSeconds=function(){return this.proxy.getSeconds()};ag.prototype.getShortYear=function(){return this.proxy.getYear()%100};ag.prototype.getTime=function(){return this.proxy.getTime()};ag.prototype.getTimezoneAbbr=function(){return this.proxy.toString().replace(/^.*\(([^)]+)\)$/,"$1")};ag.prototype.getTimezoneName=function(){var ah=/(?:\((.+)\)$| ([A-Z]{3}) )/.exec(this.toString());return ah[1]||ah[2]||"GMT"+this.getGmtOffset()};ag.prototype.getTimezoneOffset=function(){return this.proxy.getTimezoneOffset()};ag.prototype.getWeekOfYear=function(){var ah=this.getDayOfYear();var aj=7-this.getDayOfWeek();var ai=parseInt((ah+aj)/7,10);return ai};ag.prototype.getUnix=function(){return Math.round(this.proxy.getTime()/1000,0)};ag.prototype.getYear=function(){return this.proxy.getYear()};ag.prototype.next=function(ah){ah=ah||"day";return this.clone().add(1,ah)};ag.prototype.set=function(){switch(arguments.length){case 0:this.proxy=new Date();break;case 1:if(l(arguments[0])=="[object Object]"&&arguments[0]._type!="jsDate"){var aj=this.options=arguments[0];this.syntax=aj.syntax||this.syntax;this.defaultCentury=aj.defaultCentury||this.defaultCentury;this.proxy=ag.createDate(aj.date)}else{this.proxy=ag.createDate(arguments[0])}break;default:var ah=[];for(var ai=0;ai0?"floor":"ceil"](ah/12));var ai=aj.getMonth()+(ah%12);if(ai==12){ai=0;aj.setYear(aj.getFullYear()+1)}else{if(ai==-1){ai=11;aj.setYear(aj.getFullYear()-1)}}aj.setMonth(ai)},diff:function(al,aj){var ah=al.getFullYear()-aj.getFullYear();var ai=al.getMonth()-aj.getMonth()+(ah*12);var ak=al.getDate()-aj.getDate();return ai+(ak/30)}},year:{add:function(ai,ah){ai.setYear(ai.getFullYear()+Math[ah>0?"floor":"ceil"](ah))},diff:function(ai,ah){return E.month.diff(ai,ah)/12}}};for(var Y in E){if(Y.substring(Y.length-1)!="s"){E[Y+"s"]=E[Y]}}var H=function(al,ak,ai){if(ag.formats[ai]["shortcuts"][ak]){return ag.strftime(al,ag.formats[ai]["shortcuts"][ak],ai)}else{var ah=(ag.formats[ai]["codes"][ak]||"").split(".");var aj=al["get"+ah[0]]?al["get"+ah[0]]():"";if(ah[1]){aj=N(aj,ah[1])}return aj}};ag.strftime=function(an,ak,aj,ao){var ai="perl";var am=ag.regional.getLocale();if(aj&&ag.formats.hasOwnProperty(aj)){ai=aj}else{if(aj&&ag.regional.hasOwnProperty(aj)){am=aj}}if(ao&&ag.formats.hasOwnProperty(ao)){ai=ao}else{if(ao&&ag.regional.hasOwnProperty(ao)){am=ao}}if(l(an)!="[object Object]"||an._type!="jsDate"){an=new ag(an);an.locale=am}if(!ak){ak=an.formatString||ag.regional[am]["formatString"]}var ah=ak||"%Y-%m-%d",ap="",al;while(ah.length>0){if(al=ah.match(ag.formats[ai].codes.matcher)){ap+=ah.slice(0,al.index);ap+=(al[1]||"")+H(an,al[2],ai);ah=ah.slice(al.index+al[0].length)}else{ap+=ah;ah=""}}return ap};ag.formats={ISO:"%Y-%m-%dT%H:%M:%S.%N%G",SQL:"%Y-%m-%d %H:%M:%S"};ag.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","%":"%"}};ag.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","%":"%"}};ag.createDate=function(aj){if(aj==null){return new Date()}if(aj instanceof Date){return aj}if(typeof aj=="number"){return new Date(aj)}var ao=String(aj).replace(/^\s*(.+)\s*$/g,"$1");ao=ao.replace(/^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,4})/,"$1/$2/$3");ao=ao.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{4})/i,"$1 $2 $3");var an=ao.match(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i);if(an&&an.length>3){var at=parseFloat(an[3]);var am=ag.config.defaultCentury+at;am=String(am);ao=ao.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i,an[1]+" "+an[2]+" "+am)}an=ao.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})[^0-9]/);function ar(ax,aw){var aC=parseFloat(aw[1]);var aB=parseFloat(aw[2]);var aA=parseFloat(aw[3]);var az=ag.config.defaultCentury;var av,au,aD,ay;if(aC>31){au=aA;aD=aB;av=az+aC}else{au=aB;aD=aC;av=az+aA}ay=aD+"/"+au+"/"+av;return ax.replace(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})/,ay)}if(an&&an.length>3){ao=ar(ao,an)}var an=ao.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})$/);if(an&&an.length>3){ao=ar(ao,an)}var al=0;var ai=ag.matchers.length;var aq,ah,ap=ao,ak;while(al31){ah=an;ai=am+ao}else{ah=ao;ai=am+an}var ap=ab(aj[2],ag.regional[ag.regional.getLocale()]["monthNamesShort"]);if(ap==-1){ap=ab(aj[2],ag.regional[ag.regional.getLocale()]["monthNames"])}ak.setFullYear(ai,ap,ah);ak.setHours(0,0,0,0);return ak}else{return al}}];function ab(aj,ak){if(ak.indexOf){return ak.indexOf(aj)}for(var ah=0,ai=ak.length;ah=ap)?"":Array(1+ap-au.length>>>0).join(aq);return at?au+ar:ar+au}function ak(ar){var aq=new String(ar);for(var ap=10;ap>0;ap--){if(aq==(aq=aq.replace(/^(\d+)(\d{3})/,"$1"+L.jqplot.sprintf.thousandsSeparator+"$2"))){break}}return aq}function aj(av,au,ax,ar,at,aq){var aw=ar-av.length;if(aw>0){var ap=" ";if(aq){ap=" "}if(ax||!at){av=an(av,ar,ap,ax)}else{av=av.slice(0,au.length)+an("",aw,"0",true)+av.slice(au.length)}}return av}function ao(ay,aq,aw,ar,ap,av,ax,au){var at=ay>>>0;aw=aw&&at&&{"2":"0b","8":"0","16":"0x"}[aq]||"";ay=aw+an(at.toString(aq),av||0,"0",false);return aj(ay,aw,ar,ap,ax,au)}function ah(au,av,ar,ap,at,aq){if(ap!=null){au=au.slice(0,ap)}return aj(au,"",av,ar,at,aq)}var ai=arguments,al=0,am=ai[al++];return am.replace(L.jqplot.sprintf.regex,function(aM,ax,ay,aB,aO,aJ,av){if(aM=="%%"){return"%"}var aD=false,az="",aA=false,aL=false,aw=false,au=false;for(var aI=0;ay&&aI-1?6:(av=="d")?0:void (0)}else{if(aJ=="*"){aJ=+ai[al++]}else{if(aJ.charAt(0)=="*"){aJ=+ai[aJ.slice(1,-1)]}else{aJ=+aJ}}}var aF=ax?ai[ax.slice(0,-1)]:ai[al++];switch(av){case"s":if(aF==null){return""}return ah(String(aF),aD,aB,aJ,aA,aw);case"c":return ah(String.fromCharCode(+aF),aD,aB,aJ,aA,aw);case"b":return ao(aF,2,aL,aD,aB,aJ,aA,aw);case"o":return ao(aF,8,aL,aD,aB,aJ,aA,aw);case"x":return ao(aF,16,aL,aD,aB,aJ,aA,aw);case"X":return ao(aF,16,aL,aD,aB,aJ,aA,aw).toUpperCase();case"u":return ao(aF,10,aL,aD,aB,aJ,aA,aw);case"i":var ar=parseInt(+aF,10);if(isNaN(ar)){return""}var aH=ar<0?"-":az;var aK=au?ak(String(Math.abs(ar))):String(Math.abs(ar));aF=aH+an(aK,aJ,"0",false);return aj(aF,aH,aD,aB,aA,aw);case"d":var ar=Math.round(+aF);if(isNaN(ar)){return""}var aH=ar<0?"-":az;var aK=au?ak(String(Math.abs(ar))):String(Math.abs(ar));aF=aH+an(aK,aJ,"0",false);return aj(aF,aH,aD,aB,aA,aw);case"e":case"E":case"f":case"F":case"g":case"G":var ar=+aF;if(isNaN(ar)){return""}var aH=ar<0?"-":az;var at=["toExponential","toFixed","toPrecision"]["efg".indexOf(av.toLowerCase())];var aN=["toString","toUpperCase"]["eEfFgG".indexOf(av)%2];var aK=Math.abs(ar)[at](aJ);var aE=aK.toString().split(".");aE[0]=au?ak(aE[0]):aE[0];aK=aE.join(L.jqplot.sprintf.decimalMark);aF=aH+aK;var aC=aj(aF,aH,aD,aB,aA,aw)[aN]();return aC;case"p":case"P":var ar=+aF;if(isNaN(ar)){return""}var aH=ar<0?"-":az;var aE=String(Number(Math.abs(ar)).toExponential()).split(/e|E/);var aq=(aE[0].indexOf(".")!=-1)?aE[0].length-1:String(ar).length;var aG=(aE[1]<0)?-aE[1]-1:0;if(Math.abs(ar)<1){if(aq+aG<=aJ){aF=aH+Math.abs(ar).toPrecision(aq)}else{if(aq<=aJ-1){aF=aH+Math.abs(ar).toExponential(aq-1)}else{aF=aH+Math.abs(ar).toExponential(aJ-1)}}}else{var ap=(aq<=aJ)?aq:aJ;aF=aH+Math.abs(ar).toPrecision(ap)}var aN=["toString","toUpperCase"]["pP".indexOf(av)%2];return aj(aF,aH,aD,aB,aA,aw)[aN]();case"n":return"";default:return aM}})};L.jqplot.sprintf.thousandsSeparator=",";L.jqplot.sprintf.decimalMark=".";L.jqplot.sprintf.regex=/%%|%(\d+\$)?([-+#0&\' ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([nAscboxXuidfegpEGP])/g;L.jqplot.getSignificantFigures=function(al){var an=String(Number(Math.abs(al)).toExponential()).split(/e|E/);var am=(an[0].indexOf(".")!=-1)?an[0].length-1:an[0].length;var ai=(an[1]<0)?-an[1]-1:0;var ah=parseInt(an[1],10);var aj=(ah+1>0)?ah+1:0;var ak=(am<=aj)?0:am-ah-1;return{significantDigits:am,digitsLeft:aj,digitsRight:ak,zeros:ai,exponent:ah}};L.jqplot.getPrecision=function(ah){return L.jqplot.getSignificantFigures(ah).digitsRight};var X=L.uiBackCompat!==false;L.jqplot.effects={effect:{}};var m="jqplot.storage.";L.extend(L.jqplot.effects,{version:"1.9pre",save:function(ai,aj){for(var ah=0;ah").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),ah={width:ai.width(),height:ai.height()},ak=document.activeElement;ai.wrap(al);if(ai[0]===ak||L.contains(ai[0],ak)){L(ak).focus()}al=ai.parent();if(ai.css("position")==="static"){al.css({position:"relative"});ai.css({position:"relative"})}else{L.extend(aj,{position:ai.css("position"),zIndex:ai.css("z-index")});L.each(["top","left","bottom","right"],function(am,an){aj[an]=ai.css(an);if(isNaN(parseInt(aj[an],10))){aj[an]="auto"}});ai.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}ai.css(ah);return al.css(aj).show()},removeWrapper:function(ah){var ai=document.activeElement;if(ah.parent().is(".ui-effects-wrapper")){ah.parent().replaceWith(ah);if(ah[0]===ai||L.contains(ah[0],ai)){L(ai).focus()}}return ah}});function j(ai,ah,aj,ak){if(L.isPlainObject(ai)){return ai}ai={effect:ai};if(ah===u){ah={}}if(L.isFunction(ah)){ak=ah;aj=null;ah={}}if(L.type(ah)==="number"||L.fx.speeds[ah]){ak=aj;aj=ah;ah={}}if(L.isFunction(aj)){ak=aj;aj=null}if(ah){L.extend(ai,ah)}aj=aj||ah.duration;ai.duration=L.fx.off?0:typeof aj==="number"?aj:aj in L.fx.speeds?L.fx.speeds[aj]:L.fx.speeds._default;ai.complete=ak||ah.complete;return ai}function ae(ah){if(!ah||typeof ah==="number"||L.fx.speeds[ah]){return true}if(typeof ah==="string"&&!L.jqplot.effects.effect[ah]){if(X&&L.jqplot.effects[ah]){return false}return true}return false}L.fn.extend({jqplotEffect:function(ap,aq,ai,ao){var an=j.apply(this,arguments),ak=an.mode,al=an.queue,am=L.jqplot.effects.effect[an.effect],ah=!am&&X&&L.jqplot.effects[an.effect];if(L.fx.off||!(am||ah)){if(ak){return this[ak](an.duration,an.complete)}else{return this.each(function(){if(an.complete){an.complete.call(this)}})}}function aj(au){var av=L(this),at=an.complete,aw=an.mode;function ar(){if(L.isFunction(at)){at.call(av[0])}if(L.isFunction(au)){au()}}if(av.is(":hidden")?aw==="hide":aw==="show"){ar()}else{am.call(av[0],an,ar)}}if(am){return al===false?this.each(aj):this.queue(al||"fx",aj)}else{return ah.call(this,{options:an,duration:an.duration,callback:an.complete,mode:an.mode})}}});var a=/up|down|vertical/,v=/up|left|vertical|horizontal/;L.jqplot.effects.effect.blind=function(aj,ao){var ak=L(this),ar=["position","top","bottom","left","right","height","width"],ap=L.jqplot.effects.setMode(ak,aj.mode||"hide"),au=aj.direction||"up",am=a.test(au),al=am?"height":"width",aq=am?"top":"left",aw=v.test(au),an={},av=ap==="show",ai,ah,at;if(ak.parent().is(".ui-effects-wrapper")){L.jqplot.effects.save(ak.parent(),ar)}else{L.jqplot.effects.save(ak,ar)}ak.show();at=parseInt(ak.css("top"),10);ai=L.jqplot.effects.createWrapper(ak).css({overflow:"hidden"});ah=am?ai[al]()+at:ai[al]();an[al]=av?String(ah):"0";if(!aw){ak.css(am?"bottom":"right",0).css(am?"top":"left","").css({position:"absolute"});an[aq]=av?"0":String(ah)}if(av){ai.css(al,0);if(!aw){ai.css(aq,ah)}}ai.animate(an,{duration:aj.duration,easing:aj.easing,queue:false,complete:function(){if(ap==="hide"){ak.hide()}L.jqplot.effects.restore(ak,ar);L.jqplot.effects.removeWrapper(ak);ao()}})}})(jQuery);
\ No newline at end of file
diff --git a/web/extensions/jqplot/optionsTutorial.txt b/web/extensions/jqplot/optionsTutorial.txt
new file mode 100644
index 0000000..a8d847d
--- /dev/null
+++ b/web/extensions/jqplot/optionsTutorial.txt
@@ -0,0 +1,243 @@
+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 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 possess,
+it doesn't explain how to use or set those attributes through
+options. This tutorial will help explain that.
+
+Let's 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
+differently, 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 explanation is with renderers, plugins and
+their options. Briefly, what's the difference between a renderer and
+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 can 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 and plugins, and specify their options?
+Some common renderers 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 its 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. (Yes, that's the correct name for the dragable plugin; it
+doesn't use the correct spelling of "draggable".)
+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 for the dragable plugin 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 draggability 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.
diff --git a/web/extensions/jqplot/plugins/jqplot.BezierCurveRenderer.js b/web/extensions/jqplot/plugins/jqplot.BezierCurveRenderer.js
new file mode 100644
index 0000000..1c7b031
--- /dev/null
+++ b/web/extensions/jqplot/plugins/jqplot.BezierCurveRenderer.js
@@ -0,0 +1,314 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.8
+ * Revision: 1250
+ *
+ * Copyright (c) 2009-2013 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 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.seriesDefaults = options.seriesDefaults || {};
+ 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/web/extensions/jqplot/plugins/jqplot.BezierCurveRenderer.min.js b/web/extensions/jqplot/plugins/jqplot.BezierCurveRenderer.min.js
new file mode 100644
index 0000000..94c6fc5
--- /dev/null
+++ b/web/extensions/jqplot/plugins/jqplot.BezierCurveRenderer.min.js
@@ -0,0 +1,3 @@
+/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
+ jsDate | (c) 2010-2013 Chris Leonello
+ */(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;gc.max||c.max==null){c.max=k[e][0]}}else{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.max||c.max==null){c.max=k[0][0]}for(var e=0;e<5;e+=2){if(k[1][e]c.max||c.max==null){c.max=k[1][e]}}}else{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.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.seriesDefaults=d.seriesDefaults||{};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;e0) {
+ 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 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 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 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][0] < 0) || (this.waterfall && this._data[i][0] < 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][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; i0){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;q570)?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;I0&&I=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;I0&&I=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][0]<0)||(this.waterfall&&this._data[I][0]<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][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 [[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 .
+ 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');
+ }
+ css = $.extend(true, {}, this.css, css);
+ // create a div
+ el = $('');
+ 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/web/extensions/jqplot/plugins/jqplot.blockRenderer.min.js b/web/extensions/jqplot/plugins/jqplot.blockRenderer.min.js
new file mode 100644
index 0000000..d497d6d
--- /dev/null
+++ b/web/extensions/jqplot/plugins/jqplot.blockRenderer.min.js
@@ -0,0 +1,3 @@
+/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
+ jsDate | (c) 2010-2013 Chris Leonello
+ */(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")}k=a.extend(true,{},this.css,k);c=a('');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/web/extensions/jqplot/plugins/jqplot.bubbleRenderer.js b/web/extensions/jqplot/plugins/jqplot.bubbleRenderer.js
new file mode 100644
index 0000000..1629d85
--- /dev/null
+++ b/web/extensions/jqplot/plugins/jqplot.bubbleRenderer.js
@@ -0,0 +1,759 @@
+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.8
+ * Revision: 1250
+ *
+ * Copyright (c) 2009-2013 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:
+ *
+ * >
+ *
+ * Data must be supplied in
+ * the form:
+ *
+ * > [[x1, y1, r1,