diff --git a/wp-content/plugins/wp-piwik/css/index.php b/wp-content/plugins/wp-piwik/css/index.php new file mode 100644 index 0000000000000000000000000000000000000000..9b3347dc327ee0179b3df406f1d910c861c05d3a --- /dev/null +++ b/wp-content/plugins/wp-piwik/css/index.php @@ -0,0 +1,2 @@ +<?php + // Nothing to see... \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/css/wp-piwik-spark.css b/wp-content/plugins/wp-piwik/css/wp-piwik-spark.css new file mode 100644 index 0000000000000000000000000000000000000000..de4236b01efca7258830c88f2fab23de86eb140f --- /dev/null +++ b/wp-content/plugins/wp-piwik/css/wp-piwik-spark.css @@ -0,0 +1 @@ +.wp-piwik_dynbar canvas {padding-top:5px !important} \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/css/wp-piwik.css b/wp-content/plugins/wp-piwik/css/wp-piwik.css index 1988e145f753ba4ca9a3dbc90ae3280199bd89f3..46926d771957d075b2f4bd38114834a9a9332180 100644 --- a/wp-content/plugins/wp-piwik/css/wp-piwik.css +++ b/wp-content/plugins/wp-piwik/css/wp-piwik.css @@ -1,19 +1,14 @@ -div.wp-piwik-sortables { - margin:0 5px; -} - span.wp-piwik-details { font-size:0.8em; font-weight:normal; } -div.wp-piwik-side div.wp-piwik-graph-wide { - display: none; -} +#wp-piwik_stats_vistors_graph{margin: 0 0 0 0} -div.wp-piwik-graph-wide { - text-align:center; - padding-bottom:5px; +p.wp-piwik-eyecatcher { + border:1px solid #c00; + background:#ff0; + padding:5px; } table.wp-piwik-table th.n, td.n { @@ -23,31 +18,48 @@ table.wp-piwik-table th.n, td.n { table.wp-piwik-table tr:hover { background-color:#ccc; } -div.wp-piwik-sidebox { - width:200px; - padding:10px; + +form.wp-piwik-settings { + margin-right:270px; +} + +table.wp-piwik-form-table { + clear:none !important; +} +table.wp-piwik-form-table-hide, label.wp-piwik-input-hide { + display:none; +} + +input.wp-piwik-input-hide { + visibility:hidden; +} + +div.wp-piwik-donate { float:right; + width:220px; + background:#ffc; + padding:10px; border:1px solid black; - background:#ffc + margin-bottom:10px; + margin-top:10px; } -div.wp-piwik-sidebox div { + +div.wp-piwik-donate div { width:190px; text-align:center; - border-top:1px solid black; + border:solid black; + border-width:1px 0 0 0 ; padding:5px } -div.wp-piwik-settings-container { - margin-right:250px; - max-width:1024px; -} + div.wp-piwik-settings h4 { float:left; font-family:"Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif !important; font-size:12px !important; font-weight:normal; - padding-top:5px !important; + padding-top:0px !important; text-align:right; - width:100px; + width:160px; } div.wp-piwik-settings h4 label { margin-right:10px; @@ -55,31 +67,52 @@ div.wp-piwik-settings h4 label { } div.wp-piwik-settings .input-text-wrap input, div.wp-piwik-settings .input-text-wrap select, -div.wp-piwik-settings .input-text-wrap textarea, -div.wp-piwik-settings .input-wrap input { +div.wp-piwik-settings .input-text-wrap textarea { border:0 none; color:#333333; - margin:0; outline:medium none; padding:0; width:99%; } + div.wp-piwik-settings .input-wrap { - margin:0 0 1em 100px; - padding:3px 3px; + padding-top:0px; +} + +div.wp-piwik-settings .input-wrap input { + border:0 none; + color:#333333; + padding:0; } div.wp-piwik-settings .input-text-wrap { - margin:0 0 1em 100px; + margin:0 0 1em 160px; border:1px solid #CCCCCC; - padding:2px 3px; } + div.wp-piwik_desc { font-size:11px; - margin:0 0 10px 100px; + margin:0 0 10px 160px; padding:0; } div.wp-piwik_desc strong { color:#f00; } + +strong.wp-piwik-error {color:#f00} + +.wp-list-table .column-id {width:20%} +.wp-list-table .column-name {width:30%} +.wp-list-table .column-siteurl {width:30%} +.wp-list-table .column-piwikid {width:20%} + +.wp-piwik_dynbar canvas {padding-top:5px !important} + +.wp-piwik-wide-content { + width:512px !important; +} + +.wp-piwik-graph-wide { + overflow:hidden; +} \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/dashboard/browserdetails.php b/wp-content/plugins/wp-piwik/dashboard/browserdetails.php new file mode 100644 index 0000000000000000000000000000000000000000..c9d5aea35c72de67ecafec46cd1cad1c8c3ec1fa --- /dev/null +++ b/wp-content/plugins/wp-piwik/dashboard/browserdetails.php @@ -0,0 +1,68 @@ +<?php +/********************************* + WP-Piwik::Stats:BrowserDetails +**********************************/ + + $aryConf['data'] = $this->callPiwikAPI( + 'UserSettings.getBrowserVersion', + $aryConf['params']['period'], + $aryConf['params']['date'], + $aryConf['params']['limit'] + ); + $aryConf['title'] = __('Browser Details', 'wp-piwik'); + $strValues = ''; + $intCount = 0; $intMore = 0; $intSum = 0; + if (isset($aryConf['data']['result']) && $aryConf['data']['result'] ='error') + echo '<strong>'.__('Piwik error', 'wp-piwik').':</strong> '.htmlentities($aryConf['data']['message'], ENT_QUOTES, 'utf-8'); + else { + if (is_array($aryConf['data'])) + foreach ($aryConf['data'] as $key => $aryValues) { + $intCount++; + if ($intCount <= 9) $strValues .= '["'.$aryValues['label'].'",'.$aryValues['nb_uniq_visitors'].'],'; + else $intMore += $aryValues['nb_uniq_visitors']; + $intSum += $aryValues['nb_uniq_visitors']; + } + if ($intMore) $strValues .= '["'.__('Others', 'wp-piwik').'",'.$intMore.'],'; + $strValues = substr($strValues, 0, -1); + if ($intSum) { +/***************************************************************************/ ?> +<div class="wp-piwik-graph-wide"> + <div id="wp-piwik_stats_browserdetails_graph" style="height:310px;width:100%"></div> +</div> +<?php /************************************************************************/ + } +/***************************************************************************/ ?> +<div class="table"> + <table class="widefat wp-piwik-table"> + <thead> + <tr> + <th><?php _e('Browser', 'wp-piwik'); ?></th> + <th class="n"><?php _e('Unique', 'wp-piwik'); ?></th> + <th class="n"><?php _e('Percent', 'wp-piwik'); ?></th> + </tr> + </thead> + <tbody> +<?php /************************************************************************/ + if ($intSum) + foreach ($aryConf['data'] as $aryValues) + echo '<tr><td>'. + $aryValues['label']. + '</td><td class="n">'. + $aryValues['nb_uniq_visitors']. + '</td><td class="n">'. + number_format($aryValues['nb_uniq_visitors']/$intSum*100, 2). + '%</td></tr>'; + else echo '<tr><td colspan="3">'.__('No data available.', 'wp-piwik').'</td></tr>'; + unset($aryTmp); +/***************************************************************************/ ?> + </tbody> + </table> +</div> +<script type="text/javascript"> +$plotBrowsers = $j.jqplot('wp-piwik_stats_browserdetails_graph', [[<?php echo $strValues; ?>]], { + seriesDefaults:{renderer:$j.jqplot.PieRenderer, rendererOptions:{sliceMargin:8}}, + legend:{show:true} +}); +</script> +<?php + } \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/dashboard/browsers.php b/wp-content/plugins/wp-piwik/dashboard/browsers.php index c44707682bf38e28a0d0030f1d9ccee9704eee5e..7003c9f262c1196ad89275e6e51e6bafb49bb2a0 100644 --- a/wp-content/plugins/wp-piwik/dashboard/browsers.php +++ b/wp-content/plugins/wp-piwik/dashboard/browsers.php @@ -3,30 +3,35 @@ WP-Piwik::Stats:Browser **********************************/ - $aryConf['data'] = $this->call_API( + $aryConf['data'] = $this->callPiwikAPI( 'UserSettings.getBrowser', $aryConf['params']['period'], $aryConf['params']['date'], $aryConf['params']['limit'] ); $aryConf['title'] = __('Browser', 'wp-piwik'); - include('header.php'); $strValues = ''; $intCount = 0; $intMore = 0; $intSum = 0; - if (is_array($aryConf['data'])) - foreach ($aryConf['data'] as $key => $aryValues) { - $intCount++; - if ($intCount <= 9) $strValues .= '["'.$aryValues['shortLabel'].'",'.$aryValues['nb_uniq_visitors'].'],'; - else $intMore += $aryValues['nb_uniq_visitors']; - $intSum += $aryValues['nb_uniq_visitors']; - } - if ($intMore) $strValues .= '["'.__('Others', 'wp-piwik').'",'.$intMore.'],'; - $strValues = substr($strValues, 0, -1); - + if (isset($aryConf['data']['result']) && $aryConf['data']['result'] ='error') + echo '<strong>'.__('Piwik error', 'wp-piwik').':</strong> '.htmlentities($aryConf['data']['message'], ENT_QUOTES, 'utf-8'); + else { + if (is_array($aryConf['data'])) + foreach ($aryConf['data'] as $key => $aryValues) { + $intCount++; + if ($intCount <= 9) $strValues .= '["'.$aryValues['label'].'",'.$aryValues['nb_uniq_visitors'].'],'; + else $intMore += $aryValues['nb_uniq_visitors']; + $intSum += $aryValues['nb_uniq_visitors']; + } + if ($intMore) $strValues .= '["'.__('Others', 'wp-piwik').'",'.$intMore.'],'; + $strValues = substr($strValues, 0, -1); + if ($intSum) { /***************************************************************************/ ?> <div class="wp-piwik-graph-wide"> - <div id="wp-piwik_stats_browsers_graph" style="height:310px;width:490px"></div> + <div id="wp-piwik_stats_browsers_graph" style="height:310px;width:100%"></div> </div> +<?php /************************************************************************/ + } +/***************************************************************************/ ?> <div class="table"> <table class="widefat wp-piwik-table"> <thead> @@ -38,29 +43,26 @@ </thead> <tbody> <?php /************************************************************************/ - if ($intSum) - foreach ($aryConf['data'] as $aryValues) - echo '<tr><td>'. - $aryValues['shortLabel']. - '</td><td class="n">'. + if ($intSum) + foreach ($aryConf['data'] as $aryValues) + echo '<tr><td>'. + $aryValues['label']. + '</td><td class="n">'. $aryValues['nb_uniq_visitors']. - '</td><td class="n">'. + '</td><td class="n">'. number_format($aryValues['nb_uniq_visitors']/$intSum*100, 2). '%</td></tr>'; - else echo '<tr><td colspan="3">'.__('No data available.', 'wp-piwik').'</td></tr>'; - unset($aryTmp); + else echo '<tr><td colspan="3">'.__('No data available.', 'wp-piwik').'</td></tr>'; + unset($aryTmp); /***************************************************************************/ ?> </tbody> </table> </div> <script type="text/javascript"> -$j.jqplot('wp-piwik_stats_browsers_graph', [[<?php echo $strValues; ?>]], { +$plotBrowsers = $j.jqplot('wp-piwik_stats_browsers_graph', [[<?php echo $strValues; ?>]], { seriesDefaults:{renderer:$j.jqplot.PieRenderer, rendererOptions:{sliceMargin:8}}, legend:{show:true} - }); </script> -<?php /************************************************************************/ - include ('footer.php'); - -/* EOF */ +<?php + } \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/dashboard/keywords.php b/wp-content/plugins/wp-piwik/dashboard/keywords.php index d285344e17e7acf239e906f5ceed7062468891de..10d8da34edfcde732d75f85f4a0f4dfb3cb89312 100644 --- a/wp-content/plugins/wp-piwik/dashboard/keywords.php +++ b/wp-content/plugins/wp-piwik/dashboard/keywords.php @@ -3,14 +3,16 @@ WP-Piwik::Stats:Keywords **********************************/ - $aryConf['data'] = $this->call_API( + $aryConf['data'] = $this->callPiwikAPI( 'Referers.getKeywords', $aryConf['params']['period'], $aryConf['params']['date'], $aryConf['params']['limit'] ); $aryConf['title'] = __('Keywords', 'wp-piwik'); - include('header.php'); + if (isset($aryConf['data']['result']) && $aryConf['data']['result'] = 'error') + echo '<strong>'.__('Piwik error', 'wp-piwik').':</strong> '.htmlentities($aryConf['data']['message'], ENT_QUOTES, 'utf-8'); + else { /***************************************************************************/ ?> <table class="widefat"> <thead> @@ -25,6 +27,4 @@ </tbody> </table> <?php /************************************************************************/ -include ('footer.php'); - -/* EOF */ + } \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/dashboard/noresult.php b/wp-content/plugins/wp-piwik/dashboard/noresult.php new file mode 100644 index 0000000000000000000000000000000000000000..c6551ef91b0c37bba66eb593cf5ecf07674ba23a --- /dev/null +++ b/wp-content/plugins/wp-piwik/dashboard/noresult.php @@ -0,0 +1,30 @@ +<?php +/********************************* + WP-Piwik::Stats:SiteSearchNoResults +**********************************/ + + $aryConf['data'] = $this->callPiwikAPI( + 'Actions.getSiteSearchNoResultKeywords', + $aryConf['params']['period'], + $aryConf['params']['date'], + $aryConf['params']['limit'] + ); + $aryConf['title'] = __('Site Search without Results', 'wp-piwik'); + if (isset($aryConf['data']['result']) && $aryConf['data']['result'] = 'error') + echo '<strong>'.__('Piwik error', 'wp-piwik').':</strong> '.htmlentities($aryConf['data']['message'], ENT_QUOTES, 'utf-8'); + else { +/***************************************************************************/ ?> +<table class="widefat"> + <thead> + <tr><th><?php _e('Keyword', 'wp-piwik'); ?></th><th><?php _e('Requests', 'wp-piwik'); ?></th><th><?php _e('Bounced', 'wp-piwik'); ?></th></tr> + </thead> + <tbody> +<?php /************************************************************************/ + if (is_array($aryConf['data'])) foreach ($aryConf['data'] as $aryValues) + echo '<tr><td>'.$aryValues['label'].'</td><td>'.$aryValues['nb_visits'].'</td><td>'.$aryValues['bounce_rate'].'</td></tr>'; + else echo '<tr><td colspan="2">'.__('No data available.', 'wp-piwik').'</td></tr>'; +/***************************************************************************/ ?> + </tbody> +</table> +<?php /************************************************************************/ + } \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/dashboard/overview.php b/wp-content/plugins/wp-piwik/dashboard/overview.php index 6634e35db8eef0e07bd36737ac4e62d6dde41927..553d211a590e848389c01575b8b4d0a63537027e 100644 --- a/wp-content/plugins/wp-piwik/dashboard/overview.php +++ b/wp-content/plugins/wp-piwik/dashboard/overview.php @@ -2,66 +2,69 @@ /********************************* WP-Piwik::Stats:Overview **********************************/ - - $aryConf['data'] = $this->call_API( + $aryTmp = array( + 'bounce_count' => 0, + 'max_actions' => 0, + 'nb_actions' => 0, + 'nb_uniq_visitors' => 0, + 'nb_visits' => 0, + 'nb_visits_converted' => 0, + 'sum_visit_length' => 0, + 'bounce_rate' => 0, + 'nb_actions_per_visit' => 0, + 'avg_time_on_site' => 0 + ); + $aryConf['data'] = $this->callPiwikAPI( 'VisitsSummary.get', $aryConf['params']['period'], $aryConf['params']['date'], $aryConf['params']['limit'] ); $aryConf['title'] = __('Overview', 'wp-piwik'); - if (!isset($aryConf['inline']) || $aryConf['inline'] != true) - include('header.php'); - if ($aryConf['params']['date'] == 'last30') { - $aryTmp = array( - 'bounce_count' => 0, - 'max_actions' => 0, - 'nb_actions' => 0, - 'nb_uniq_visitors' => 0, - 'nb_visits' => 0, - 'nb_visits_converted' => 0, - 'sum_visit_length' => 0, - 'bounce_rate' => 0, - 'nb_actions_per_visit' => 0, - 'avg_time_on_site' => 0 - ); - foreach ($aryConf['data'] as $aryDay) - foreach ($aryDay as $strKey => $strValue) - if (!in_array($strKey, array('max_actions','bounce_rate','nb_actions_per_visit','avg_time_on_site'))) - $aryTmp[$strKey] += $strValue; - elseif ($aryTmp[$strKey] < $strValue) - $aryTmp[$strKey] = $strValue; - $aryConf['data'] = $aryTmp; - } + + if (isset($aryConf['data']['result']) && $aryConf['data']['result'] ='error') + echo '<strong>'.__('Piwik error', 'wp-piwik').':</strong> '.htmlentities($aryConf['data']['message'], ENT_QUOTES, 'utf-8'); + else { + if ($aryConf['params']['date'] == 'last30') { + $intValCnt = 0; + if (is_array($aryConf['data'])) + foreach ($aryConf['data'] as $aryDay) + foreach ($aryDay as $strKey => $strValue) { + $intValCnt++; + if (!in_array($strKey, array('max_actions','bounce_rate','nb_actions_per_visit','avg_time_on_site'))) + $aryTmp[$strKey] += $strValue; + elseif ($aryTmp[$strKey] < $strValue) + $aryTmp[$strKey] = $strValue; + } + $aryConf['data'] = $aryTmp; + if ($intValCnt > 1 && $aryConf['data']['nb_visits'] >0) $aryConf['data']['bounce_rate'] = round($aryConf['data']['bounce_count']/$aryConf['data']['nb_visits']*100).'%'; + } + if (empty($aryConf['data'])) $aryConf['data'] = $aryTmp; /***************************************************************************/ ?> <div class="table"> <table class="widefat"> <tbody> <?php /************************************************************************/ - $strTime = - floor($aryConf['data']['sum_visit_length']/3600).'h '. - floor(($aryConf['data']['sum_visit_length'] % 3600)/60).'m '. - floor(($aryConf['data']['sum_visit_length'] % 3600) % 60).'s'; - $strAvgTime = - floor($aryConf['data']['avg_time_on_site']/3600).'h '. - floor(($aryConf['data']['avg_time_on_site'] % 3600)/60).'m '. - floor(($aryConf['data']['avg_time_on_site'] % 3600) % 60).'s'; - echo '<tr><td>'.__('Visitors', 'wp-piwik').':</td><td>'.$aryConf['data']['nb_visits'].'</td></tr>'; - echo '<tr><td>'.__('Unique visitors', 'wp-piwik').':</td><td>'.$aryConf['data']['nb_uniq_visitors'].'</td></tr>'; - echo '<tr><td>'.__('Page views', 'wp-piwik').':</td><td>'.$aryConf['data']['nb_actions'].' (⌀ '.$aryConf['data']['nb_actions_per_visit'].')</td></tr>'; - echo '<tr><td>'.__('Max. page views in one visit', 'wp-piwik').':</td><td>'.$aryConf['data']['max_actions'].'</td></tr>'; - echo '<tr><td>'.__('Total time spent', 'wp-piwik').':</td><td>'.$strTime.'</td></tr>'; - echo '<tr><td>'.__('Time/visit', 'wp-piwik').':</td><td>'.$strAvgTime.'</td></tr>'; - echo '<tr><td>'.__('Bounce count', 'wp-piwik').':</td><td>'.$aryConf['data']['bounce_count'].' ('.$aryConf['data']['bounce_rate'].')</td></tr>'; - if (self::$aryGlobalSettings['piwik_shortcut']) - echo '<tr><td>'.__('Shortcut', 'wp-piwik').':</td><td><a href="'.self::$aryGlobalSettings['piwik_url'].'">Piwik</a>'.(isset($aryConf['inline']) && $aryConf['inline']?' - <a href="?page=wp-piwik/wp-piwik.php">WP-Piwik</a>':'').'</td></tr>'; - + $strTime = + floor($aryConf['data']['sum_visit_length']/3600).'h '. + floor(($aryConf['data']['sum_visit_length'] % 3600)/60).'m '. + floor(($aryConf['data']['sum_visit_length'] % 3600) % 60).'s'; + $strAvgTime = + floor($aryConf['data']['avg_time_on_site']/3600).'h '. + floor(($aryConf['data']['avg_time_on_site'] % 3600)/60).'m '. + floor(($aryConf['data']['avg_time_on_site'] % 3600) % 60).'s'; + echo '<tr><td>'.__('Visitors', 'wp-piwik').':</td><td>'.$aryConf['data']['nb_visits'].'</td></tr>'; + echo '<tr><td>'.__('Unique visitors', 'wp-piwik').':</td><td>'.$aryConf['data']['nb_uniq_visitors'].'</td></tr>'; + echo '<tr><td>'.__('Page views', 'wp-piwik').':</td><td>'.$aryConf['data']['nb_actions'].' (Ø '.$aryConf['data']['nb_actions_per_visit'].')</td></tr>'; + echo '<tr><td>'.__('Max. page views in one visit', 'wp-piwik').':</td><td>'.$aryConf['data']['max_actions'].'</td></tr>'; + echo '<tr><td>'.__('Total time spent', 'wp-piwik').':</td><td>'.$strTime.'</td></tr>'; + echo '<tr><td>'.__('Time/visit', 'wp-piwik').':</td><td>'.$strAvgTime.'</td></tr>'; + echo '<tr><td>'.__('Bounce count', 'wp-piwik').':</td><td>'.$aryConf['data']['bounce_count'].' ('.$aryConf['data']['bounce_rate'].')</td></tr>'; + if (self::$aryGlobalSettings['piwik_shortcut']) + echo '<tr><td>'.__('Shortcut', 'wp-piwik').':</td><td><a href="'.self::$aryGlobalSettings['piwik_url'].'">Piwik</a>'.(isset($aryConf['inline']) && $aryConf['inline']?' - <a href="?page=wp-piwik_stats">WP-Piwik</a>':'').'</td></tr>'; /***************************************************************************/ ?> </tbody> </table> </div> <?php /************************************************************************/ - if (!isset($aryConf['inline']) || isset($aryConf['inline']) != true) - include ('footer.php'); - -/* EOF */ + } \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/dashboard/pages.php b/wp-content/plugins/wp-piwik/dashboard/pages.php index 10ece3b08604098a34f6541fa6631eef4d214850..682c57e6b480c9d2669b6a81403e4cf679902bda 100644 --- a/wp-content/plugins/wp-piwik/dashboard/pages.php +++ b/wp-content/plugins/wp-piwik/dashboard/pages.php @@ -3,7 +3,7 @@ WP-Piwik::Stats:Pages **********************************/ - $aryConf['data'] = $this->call_API( + $aryConf['data'] = $this->callPiwikAPI( 'Actions.getPageTitles', $aryConf['params']['period'], $aryConf['params']['date'], @@ -11,8 +11,10 @@ ); $intMax = 9; $aryConf['title'] = __('Pages', 'wp-piwik'); - include('header.php'); - + + if (isset($aryConf['data']['result']) && $aryConf['data']['result'] = 'error') + echo '<strong>'.__('Piwik error', 'wp-piwik').':</strong> '.htmlentities($aryConf['data']['message'], ENT_QUOTES, 'utf-8'); + else { /***************************************************************************/ ?> <div class="table"> <table class="widefat wp-piwik-table"> @@ -29,8 +31,8 @@ if (is_array($aryConf['data'])) foreach ($aryConf['data'] as $aryValues) { $intCount++; if ($intCount > $intMax) { - $aryOthers['u'] += $aryValues['nb_uniq_visitors']; - $aryOthers['v'] += $aryValues['nb_visits']; + $aryOthers['u'] += (isset($aryValues['nb_uniq_visitors'])?$aryValues['nb_uniq_visitors']:0); + $aryOthers['v'] += (isset($aryValues['nb_visits'])?$aryValues['nb_visits']:0); } else echo '<tr><td>'. $aryValues['label']. '</td><td class="n">'. @@ -52,6 +54,4 @@ </table> </div> <?php /************************************************************************/ - include ('footer.php'); - -/* EOF */ + } \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/dashboard/plugins.php b/wp-content/plugins/wp-piwik/dashboard/plugins.php index f9aba09a0c2dc36ef2f00bddb7d0842b988422cb..2313cdfe69da8c8c3eff9d0d215b51d874e238ec 100644 --- a/wp-content/plugins/wp-piwik/dashboard/plugins.php +++ b/wp-content/plugins/wp-piwik/dashboard/plugins.php @@ -3,7 +3,7 @@ WP-Piwik::Stats:Plugins **********************************/ - $aryConf['data'] = $this->call_API( + $aryConf['data'] = $this->callPiwikAPI( 'UserSettings.getPlugin', $aryConf['params']['period'], $aryConf['params']['date'], @@ -11,18 +11,20 @@ ); $aryConf['title'] = __('Plugins', 'wp-piwik'); - $aryOverview = $this->call_API( + $aryOverview = $this->callPiwikAPI( 'VisitsSummary.get', $aryConf['params']['period'], $aryConf['params']['date'], $aryConf['params']['limit'] ); - $intTotalVisits = $aryOverview['nb_visits']; + $intTotalVisits = (isset($aryOverview['nb_visits'])?$aryOverview['nb_visits']:0); unset($aryOverview); - - include('header.php'); + + if (isset($aryConf['data']['result']) && $aryConf['data']['result'] = 'error') + echo '<strong>'.__('Piwik error', 'wp-piwik').':</strong> '.htmlentities($aryConf['data']['message'], ENT_QUOTES, 'utf-8'); + else { /***************************************************************************/ ?> <div class="table"> <table class="widefat wp-piwik-table"> @@ -53,6 +55,4 @@ </table> </div> <?php /************************************************************************/ - include ('footer.php'); - -/* EOF */ + } \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/dashboard/screens.php b/wp-content/plugins/wp-piwik/dashboard/screens.php index 3f170925d7f12270fedfe790f04894dc1492e6e3..3ac61fc796c7aaba99634ec1c40e0426335375ac 100644 --- a/wp-content/plugins/wp-piwik/dashboard/screens.php +++ b/wp-content/plugins/wp-piwik/dashboard/screens.php @@ -3,29 +3,35 @@ WP-Piwik::Stats:Screens **********************************/ - $aryConf['data'] = $this->call_API( + $aryConf['data'] = $this->callPiwikAPI( 'UserSettings.getResolution', $aryConf['params']['period'], $aryConf['params']['date'], $aryConf['params']['limit'] ); $aryConf['title'] = __('Resolution', 'wp-piwik'); - include('header.php'); $strValues = ''; $intCount = 0; $intMore = 0; $intSum = 0; - if (is_array($aryConf['data'])) - foreach ($aryConf['data'] as $key => $aryValues) { - $intCount++; - if ($intCount <= 9) $strValues .= '["'.$aryValues['label'].'",'.$aryValues['nb_uniq_visitors'].'],'; - else $intMore += $aryValues['nb_uniq_visitors']; - $intSum += $aryValues['nb_uniq_visitors']; - } - if ($intMore) $strValues .= '["'.__('Others', 'wp-piwik').'",'.$intMore.'],'; - $strValues = substr($strValues, 0, -1); + if (isset($aryConf['data']['result']) && $aryConf['data']['result'] ='error') + echo '<strong>'.__('Piwik error', 'wp-piwik').':</strong> '.htmlentities($aryConf['data']['message'], ENT_QUOTES, 'utf-8'); + else { + if (is_array($aryConf['data'])) + foreach ($aryConf['data'] as $key => $aryValues) { + $intCount++; + if ($intCount <= 9) $strValues .= '["'.$aryValues['label'].'",'.$aryValues['nb_uniq_visitors'].'],'; + else $intMore += $aryValues['nb_uniq_visitors']; + $intSum += $aryValues['nb_uniq_visitors']; + } + if ($intMore) $strValues .= '["'.__('Others', 'wp-piwik').'",'.$intMore.'],'; + $strValues = substr($strValues, 0, -1); + if ($intSum) { /***************************************************************************/ ?> <div class="wp-piwik-graph-wide"> - <div id="wp-piwik_stats_screens_graph" style="height:310px;width:490px"></div> + <div id="wp-piwik_stats_screens_graph" style="height:310px;width:100%"></div> </div> +<?php /************************************************************************/ + } +/***************************************************************************/ ?> <div class="table"> <table class="widefat wp-piwik-table"> <thead> @@ -37,29 +43,26 @@ </thead> <tbody> <?php /************************************************************************/ - if ($intSum) - foreach ($aryConf['data'] as $aryValues) - echo '<tr><td>'. + if ($intSum) + foreach ($aryConf['data'] as $aryValues) + echo '<tr><td>'. $aryValues['label']. - '</td><td class="n">'. + '</td><td class="n">'. $aryValues['nb_uniq_visitors']. - '</td><td class="n">'. + '</td><td class="n">'. number_format($aryValues['nb_uniq_visitors']/$intSum*100, 2). - '%</td></tr>'; - else echo '<tr><td colspan="3">'.__('No data available.', 'wp-piwik').'</td></tr>'; - unset($aryTmp); + '%</td></tr>'; + else echo '<tr><td colspan="3">'.__('No data available.', 'wp-piwik').'</td></tr>'; + unset($aryTmp); /***************************************************************************/ ?> </tbody> </table> </div> <script type="text/javascript"> -$j.jqplot('wp-piwik_stats_screens_graph', [[<?php echo $strValues; ?>]], { +$plotScreens = $j.jqplot('wp-piwik_stats_screens_graph', [[<?php echo $strValues; ?>]], { seriesDefaults:{renderer:$j.jqplot.PieRenderer, rendererOptions:{sliceMargin:8}}, legend:{show:true} - }); </script> -<?php /************************************************************************/ - include ('footer.php'); - -/* EOF */ +<?php + } \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/dashboard/search.php b/wp-content/plugins/wp-piwik/dashboard/search.php new file mode 100644 index 0000000000000000000000000000000000000000..e115063d2dcd4239ce251df51eb2dcc2d91c18b9 --- /dev/null +++ b/wp-content/plugins/wp-piwik/dashboard/search.php @@ -0,0 +1,30 @@ +<?php +/********************************* + WP-Piwik::Stats:SiteSearch +**********************************/ + + $aryConf['data'] = $this->callPiwikAPI( + 'Actions.getSiteSearchKeywords', + $aryConf['params']['period'], + $aryConf['params']['date'], + $aryConf['params']['limit'] + ); + $aryConf['title'] = __('Site Search Keywords', 'wp-piwik'); + if (isset($aryConf['data']['result']) && $aryConf['data']['result'] = 'error') + echo '<strong>'.__('Piwik error', 'wp-piwik').':</strong> '.htmlentities($aryConf['data']['message'], ENT_QUOTES, 'utf-8'); + else { +/***************************************************************************/ ?> +<table class="widefat"> + <thead> + <tr><th><?php _e('Keyword', 'wp-piwik'); ?></th><th><?php _e('Requests', 'wp-piwik'); ?></th><th><?php _e('Bounced', 'wp-piwik'); ?></th></tr> + </thead> + <tbody> +<?php /************************************************************************/ + if (is_array($aryConf['data'])) foreach ($aryConf['data'] as $aryValues) + echo '<tr><td>'.$aryValues['label'].'</td><td>'.$aryValues['nb_visits'].'</td><td>'.$aryValues['bounce_rate'].'</td></tr>'; + else echo '<tr><td colspan="2">'.__('No data available.', 'wp-piwik').'</td></tr>'; +/***************************************************************************/ ?> + </tbody> +</table> +<?php /************************************************************************/ + } \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/dashboard/seo.php b/wp-content/plugins/wp-piwik/dashboard/seo.php new file mode 100644 index 0000000000000000000000000000000000000000..aa44663fa80f5c1e598f0e1171a9058db2a95da1 --- /dev/null +++ b/wp-content/plugins/wp-piwik/dashboard/seo.php @@ -0,0 +1,36 @@ +<?php +/********************************* + WP-Piwik::Stats:SEO +**********************************/ + $aryConf['data'] = $GLOBALS['wp_piwik']->callPiwikAPI( + 'SEO.getRank', + $aryConf['params']['period'], + $aryConf['params']['date'], + $aryConf['params']['limit'], + false, + false, + 'csv' + ); + + if (substr($aryConf['data'], 0, 6) == 'Error:') { + $strMessage = str_replace('Error:', '', $aryConf['data']); + echo '<strong>'.__('Piwik error', 'wp-piwik').':</strong> '.htmlentities($strMessage, ENT_QUOTES, 'utf-8'); + } else { + + $aryConf['title'] = __('SEO', 'wp-piwik'); + $aryLines = explode("\n", $aryConf['data']); + foreach ($aryLines as $strLine) + $aryData[] = explode(',', $strLine); + unset($aryData[0]); +/***************************************************************************/ ?> +<div class="table"> + <table class="widefat"> + <tbody> + <?php foreach ($aryData as $aryVal) { ?> + <tr><td><?php echo $aryVal[0]; ?></td><td><?php echo $aryVal[1]; ?></td></tr> + <?php } ?> + </tbody> + </table> +</div> +<?php /************************************************************************/ + } \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/dashboard/systems.php b/wp-content/plugins/wp-piwik/dashboard/systems.php index 7da12d0ea7da1cf62c556d5f653d9a1757b4d9c4..c0beb1762d6ce2ac8ba0f50ce72ec5eaa215afb0 100644 --- a/wp-content/plugins/wp-piwik/dashboard/systems.php +++ b/wp-content/plugins/wp-piwik/dashboard/systems.php @@ -3,31 +3,36 @@ WP-Piwik::Stats:Systems **********************************/ - $aryConf['data'] = $this->call_API( + $aryConf['data'] = $this->callPiwikAPI( 'UserSettings.getOS', $aryConf['params']['period'], $aryConf['params']['date'], $aryConf['params']['limit'] ); $aryConf['title'] = __('Operating System', 'wp-piwik'); - include('header.php'); $strValues = ''; $intCount = 0; $intMore = 0; $intSum = 0; - if (is_array($aryConf['data'])) - foreach ($aryConf['data'] as $key => $aryValues) { - $intCount++; - if ($intCount <= 9) $strValues .= '["'.$aryValues['label'].'",'.$aryValues['nb_uniq_visitors'].'],'; - else $intMore += $aryValues['nb_uniq_visitors']; - $intSum += $aryValues['nb_uniq_visitors']; - } - if ($intMore) $strValues .= '["'.__('Others', 'wp-piwik').'",'.$intMore.'],'; - $strValues = substr($strValues, 0, -1); - + if (isset($aryConf['data']['result']) && $aryConf['data']['result'] ='error') + echo '<strong>'.__('Piwik error', 'wp-piwik').':</strong> '.htmlentities($aryConf['data']['message'], ENT_QUOTES, 'utf-8'); + else { + if (is_array($aryConf['data'])) + foreach ($aryConf['data'] as $key => $aryValues) { + $intCount++; + if ($intCount <= 9) $strValues .= '["'.$aryValues['label'].'",'.$aryValues['nb_uniq_visitors'].'],'; + else $intMore += $aryValues['nb_uniq_visitors']; + $intSum += $aryValues['nb_uniq_visitors']; + } + if ($intMore) $strValues .= '["'.__('Others', 'wp-piwik').'",'.$intMore.'],'; + $strValues = substr($strValues, 0, -1); + if ($intSum) { /***************************************************************************/ ?> <div class="wp-piwik-graph-wide"> - <div id="wp-piwik_stats_systems_graph" style="height:310px;width:490px"></div> + <div id="wp-piwik_stats_systems_graph" style="height:310px;width:100%"></div> </div> +<?php /************************************************************************/ + } +/***************************************************************************/ ?> <div class="table"> <table class="widefat wp-piwik-table"> <thead> @@ -39,29 +44,26 @@ </thead> <tbody> <?php /************************************************************************/ - if ($intSum) - foreach ($aryConf['data'] as $aryValues) - echo '<tr><td>'. + if ($intSum) + foreach ($aryConf['data'] as $aryValues) + echo '<tr><td>'. $aryValues['label']. - '</td><td class="n">'. + '</td><td class="n">'. $aryValues['nb_uniq_visitors']. - '</td><td class="n">'. + '</td><td class="n">'. number_format($aryValues['nb_uniq_visitors']/$intSum*100, 2). - '%</td></tr>'; - else echo '<tr><td colspan="3">'.__('No data available.', 'wp-piwik').'</td></tr>'; - unset($aryTmp); + '%</td></tr>'; + else echo '<tr><td colspan="3">'.__('No data available.', 'wp-piwik').'</td></tr>'; + unset($aryTmp); /***************************************************************************/ ?> </tbody> </table> </div> <script type="text/javascript"> -$j.jqplot('wp-piwik_stats_systems_graph', [[<?php echo $strValues; ?>]], { +$plotSystems = $j.jqplot('wp-piwik_stats_systems_graph', [[<?php echo $strValues; ?>]], { seriesDefaults:{renderer:$j.jqplot.PieRenderer, rendererOptions:{sliceMargin:8}}, legend:{show:true} - }); </script> -<?php /************************************************************************/ - include ('footer.php'); - -/* EOF */ +<?php +} \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/dashboard/visitors.php b/wp-content/plugins/wp-piwik/dashboard/visitors.php index de8b763e742875093a88f83367dc732915bf8ccb..c20b4756899d620527d13c04b12600540274d835 100644 --- a/wp-content/plugins/wp-piwik/dashboard/visitors.php +++ b/wp-content/plugins/wp-piwik/dashboard/visitors.php @@ -3,51 +3,50 @@ WP-Piwik::Stats:Vistors **********************************/ - $aryConf['data']['Visitors'] = $this->call_API( + $aryConf['data']['Visitors'] = $this->callPiwikAPI( 'VisitsSummary.getVisits', $aryConf['params']['period'], $aryConf['params']['date'], $aryConf['params']['limit'] ); - $aryConf['data']['Unique'] = $this->call_API( + $aryConf['data']['Unique'] = $this->callPiwikAPI( 'VisitsSummary.getUniqueVisitors', $aryConf['params']['period'], $aryConf['params']['date'], $aryConf['params']['limit'] ); - $aryConf['data']['Bounced'] = $this->call_API( + $aryConf['data']['Bounced'] = $this->callPiwikAPI( 'VisitsSummary.getBounceCount', $aryConf['params']['period'], $aryConf['params']['date'], $aryConf['params']['limit'] - ); - $aryConf['title'] = __('Visitors', 'wp-piwik'); - - if (!isset($aryConf['inline']) || $aryConf['inline'] != true) - include('header.php'); + ); - $strValues = $strLabels = $strBounced = $strValuesU = $strCounter = ''; - $intUSum = $intCount = 0; - if (is_array($aryConf['data']['Visitors'])) - foreach ($aryConf['data']['Visitors'] as $strDate => $intValue) { - $intCount++; - $strValues .= $intValue.','; - $strValuesU .= $aryConf['data']['Unique'][$strDate].','; - $strBounced .= $aryConf['data']['Bounced'][$strDate].','; - $strLabels .= '['.$intCount.',"'.substr($strDate,-2).'"],'; - $intUSum += $aryConf['data']['Unique'][$strDate]; - } - else {$strValues = '0,'; $strLabels = '[0,"-"],'; $strValuesU = '0,'; $strBounced = '0,'; } - $intAvg = round($intUSum/30,0); - $strValues = substr($strValues, 0, -1); - $strValuesU = substr($strValuesU, 0, -1); - $strLabels = substr($strLabels, 0, -1); - $strBounced = substr($strBounced, 0, -1); - $strCounter = substr($strCounter, 0, -1); + if (isset($aryConf['data']['Visitors']['result']) && $aryConf['data']['Visitors']['result'] ='error') + echo '<strong>'.__('Piwik error', 'wp-piwik').':</strong> '.htmlentities($aryConf['data']['Visitors']['message'], ENT_QUOTES, 'utf-8'); + else { + $strValues = $strLabels = $strBounced = $strValuesU = $strCounter = ''; + $intUSum = $intCount = 0; + if (is_array($aryConf['data']['Visitors'])) + foreach ($aryConf['data']['Visitors'] as $strDate => $intValue) { + $intCount++; + $strValues .= $intValue.','; + $strValuesU .= $aryConf['data']['Unique'][$strDate].','; + $strBounced .= $aryConf['data']['Bounced'][$strDate].','; + $strLabels .= '['.$intCount.',"'.substr($strDate,-2).'"],'; + $intUSum += $aryConf['data']['Unique'][$strDate]; + } + else {$strValues = '0,'; $strLabels = '[0,"-"],'; $strValuesU = '0,'; $strBounced = '0,'; } + $intAvg = round($intUSum/30,0); + $strValues = substr($strValues, 0, -1); + $strValuesU = substr($strValuesU, 0, -1); + $strLabels = substr($strLabels, 0, -1); + $strBounced = substr($strBounced, 0, -1); + $strCounter = substr($strCounter, 0, -1); /***************************************************************************/ ?> -<div class="wp-piwik-graph-wide"> - <div id="wp-piwik_stats_vistors_graph" style="height:220px;width:100%"></div> +<div class="wp-piwik-graph-wide" title="<?php _e('The graph contains the values shown in the table below (visitors / unique / bounces). The red line show a linear trendline (unique).', 'wp-piwik'); ?>"> + <div id="wp-piwik_stats_vistors_graph" style="height:220px;<?php if (!isset($aryConf['inline']) || $aryConf['inline'] != true) { ?>width:100%<?php } ?>"></div> </div> <?php if (!isset($aryConf['inline']) || $aryConf['inline'] != true) { ?> <div class="table"> @@ -62,33 +61,30 @@ </thead> <tbody style="cursor:pointer;"> <?php /************************************************************************/ - if (is_array($aryConf['data']['Visitors'])) { - $aryTmp = array_reverse($aryConf['data']['Visitors']); - foreach ($aryTmp as $strDate => $intValue) - echo '<tr onclick="javascript:datelink(\''.urlencode(self::$strPluginBasename).'\',\''.str_replace('-', '', $strDate).'\');"><td>'.$strDate.'</td><td class="n">'. - $intValue.'</td><td class="n">'. - $aryConf['data']['Unique'][$strDate]. - '</td><td class="n">'. - $aryConf['data']['Bounced'][$strDate]. - '</td></tr>'."\n"; - } - echo '<tr><td class="n" colspan="4"><strong>'.__('Unique TOTAL', 'wp-piwik').'</strong> '.__('Sum', 'wp-piwik').': '.$intUSum.' '.__('Avg', 'wp-piwik').': '.$intAvg.'</td></tr>'; - unset($aryTmp); + if (is_array($aryConf['data']['Visitors'])) { + $aryTmp = array_reverse($aryConf['data']['Visitors']); + foreach ($aryTmp as $strDate => $intValue) + echo '<tr onclick="javascript:datelink(\''.urlencode('wp-piwik_stats').'\',\''.str_replace('-', '', $strDate).'\',\''.(isset($_GET['wpmu_show_stats'])?(int) $_GET['wpmu_show_stats']:'').'\');"><td>'.$strDate.'</td><td class="n">'. + $intValue.'</td><td class="n">'. + $aryConf['data']['Unique'][$strDate]. + '</td><td class="n">'. + $aryConf['data']['Bounced'][$strDate]. + '</td></tr>'."\n"; + } + echo '<tr><td class="n" colspan="4"><strong>'.__('Unique TOTAL', 'wp-piwik').'</strong> '.__('Sum', 'wp-piwik').': '.$intUSum.' '.__('Avg', 'wp-piwik').': '.$intAvg.'</td></tr>'; + unset($aryTmp); /***************************************************************************/ ?> </tbody> </table> </div> <?php } ?> <script type="text/javascript"> -$j.jqplot('wp-piwik_stats_vistors_graph', [[<?php echo $strValues; ?>],[<?php echo $strValuesU; ?>],[<?php echo $strBounced;?>]], +$plotVisitors = $j.jqplot('wp-piwik_stats_vistors_graph', [[<?php echo $strValues; ?>],[<?php echo $strValuesU; ?>],[<?php echo $strBounced;?>]], { axes:{yaxis:{min:0, tickOptions:{formatString:'%.0f'}},xaxis:{min:1,max:30,ticks:[<?php echo $strLabels; ?>]}}, seriesDefaults:{showMarker:false,lineWidth:1,fill:true,fillAndStroke:true,fillAlpha:0.9,trendline:{show:false,color:'#C00',lineWidth:1.5,type:'exp'}}, series:[{color:'#90AAD9',fillColor:'#D4E2ED'},{color:'#A3BCEA',fillColor:'#E4F2FD',trendline:{show:true,label:'Unique visitor trend'}},{color:'#E9A0BA',fillColor:'#FDE4F2'}], }); </script> -<?php /************************************************************************/ - if (!isset($aryConf['inline']) || $aryConf['inline'] != true) - include ('footer.php'); - -/* EOF */ +<?php + } \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/dashboard/websites.php b/wp-content/plugins/wp-piwik/dashboard/websites.php index 0d2e6cfc91ee9b246f4809dce77b1718f163f8d3..46df51635dae8ab20465ce070274d9dac08f862c 100644 --- a/wp-content/plugins/wp-piwik/dashboard/websites.php +++ b/wp-content/plugins/wp-piwik/dashboard/websites.php @@ -3,14 +3,17 @@ WP-Piwik::Stats:Websites **********************************/ - $aryConf['data'] = $this->call_API( + $aryConf['data'] = $this->callPiwikAPI( 'Referers.getWebsites', $aryConf['params']['period'], $aryConf['params']['date'], $aryConf['params']['limit'] ); $aryConf['title'] = __('Websites', 'wp-piwik'); - include('header.php'); + + if (isset($aryConf['data']['result']) && $aryConf['data']['result'] = 'error') + echo '<strong>'.__('Piwik error', 'wp-piwik').':</strong> '.htmlentities($aryConf['data']['message'], ENT_QUOTES, 'utf-8'); + else { /***************************************************************************/ ?> <table class="widefat"> <thead> @@ -28,6 +31,4 @@ </tbody> </table> <?php /************************************************************************/ - include ('footer.php'); - -/* EOF */ + } \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/debug/.htaccess b/wp-content/plugins/wp-piwik/debug/.htaccess new file mode 100644 index 0000000000000000000000000000000000000000..3a42882788717c9ed1d5c2fcc3277d21ec13152b --- /dev/null +++ b/wp-content/plugins/wp-piwik/debug/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/wp-content/plugins/wp-piwik/debug/testscript.php b/wp-content/plugins/wp-piwik/debug/testscript.php new file mode 100644 index 0000000000000000000000000000000000000000..4dcc41beb36920768e205d77caa201a24fc863bc --- /dev/null +++ b/wp-content/plugins/wp-piwik/debug/testscript.php @@ -0,0 +1,86 @@ +<?php +/** + * WP-Piwik + * Piwik API call test script revision 4 + */ + +/***************** + * CONFIGURATION * + *****************/ + +// PIWIK URL, e.g. http://www.website.example/piwik +$strPiwikURL = self::$aryGlobalSettings['piwik_url']; +// PIWIK AUTH TOKEN, e.g. 1234a5cd6789e0a12345b678cd9012ef +$strPiwikAuthToken = self::$aryGlobalSettings['piwik_token']; +// YOUR BLOG'S URL, e.g. http://www.website.example +$strPiwikYourBlogURL = get_bloginfo('url'); +// User agent +$strUA = self::$aryGlobalSettings['piwik_useragent']=='php'?ini_get('user_agent'):self::$aryGlobalSettings['piwik_useragent_string']; + +/* That's all, stop editing! */ + +/** + * Get remote file + * + * @param String $strURL Remote file URL + */ +function getRemoteFile($strURL, $strToken, $bolSSL, $strUA) { + // Use cURL if available + if (function_exists('curl_init')) { + // Init cURL + $c = curl_init($strURL.$strToken); + // Configure cURL CURLOPT_RETURNTRANSFER = 1 + curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); + // Verbose = 1 + curl_setopt($c, CURLOPT_VERBOSE, 1); + // Configure cURL CURLOPT_HEADER = 1 & CURLINFO_HEADER_OUT = 1 + curl_setopt($c, CURLOPT_HEADER, 1); + curl_setopt($c, CURLINFO_HEADER_OUT, 1); + // Configure SSL peer verification + curl_setopt($c, CURLOPT_SSL_VERIFYPEER, $bolSSL); + // Set user agent + curl_setopt($c, CURLOPT_USERAGENT, $strUA); + // Get result + $strResult = curl_exec($c); + // Close connection + curl_close($c); + // cURL not available but url fopen allowed + } elseif (ini_get('allow_url_fopen')) + // Get file using file_get_contents + $strResult = file_get_contents($strURL.$strToken); + // Error: Not possible to get remote file + else $strResult = serialize(array( + 'result' => 'error', + 'message' => 'Remote access to Piwik not possible. Enable allow_url_fopen or CURL.' + )); + // Return result + return $strResult; +} + +if (substr($strPiwikURL, -1, 1) != '/' && substr($strPiwikURL, -10, 10) != '/index.php') + $strPiwikURL .= '/'; + +$aryURLs = array(); +$aryURLs['SitesManager.getSitesWithAtLeastViewAccess'] = $strPiwikURL.'?module=API&method=SitesManager.getSitesWithAtLeastViewAccess&format=XML'; +$aryURLs['SitesManager.getSitesIdFromSiteUrl'] = $strPiwikURL.'?module=API&method=SitesManager.getSitesIdFromSiteUrl&url='.urlencode($strPiwikYourBlogURL).'&format=XML'; +$strToken = '&token_auth='.$strPiwikAuthToken; +$intTest = 0; +?> +<textarea readonly="readonly" rows="13" cols="100"> +<?php +foreach ($aryURLs as $strMethod => $strURL) { + $intTest++; + echo '*** Test '.$intTest.'/'.count($aryURLs).': '.$strMethod.' ***'."\n"; + echo 'Using: '.(function_exists('curl_init')?'cURL':'fopen')."\n"; + echo 'SSL peer verification: '.(function_exists('curl_init') && !self::$aryGlobalSettings['disable_ssl_verify']?'enabled':'disabled')."\n"; + echo 'User Agent: '.$strUA."\n"; + echo 'Call: '.$strURL.'&token_auth= + TOKEN'."\n"; + $x = microtime(true); + $strResult = getRemoteFile($strURL,$strToken,!self::$aryGlobalSettings['disable_ssl_verify'],$strUA); + $x = microtime(true) - $x; + echo 'Result:'."\n"; + echo htmlentities($strResult)."\n"; + echo 'Time: '.round($x,2).'s'.($intTest < count($aryURLs)?"\n\n":''); +} +?> +</textarea> \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/debug/testscript_standalone.php b/wp-content/plugins/wp-piwik/debug/testscript_standalone.php new file mode 100644 index 0000000000000000000000000000000000000000..60b7a58b39b3ae7b61705045a6b3004ed3d85630 --- /dev/null +++ b/wp-content/plugins/wp-piwik/debug/testscript_standalone.php @@ -0,0 +1,88 @@ +<?php +/** + * WP-Piwik + * Piwik API call test script revision 4 + */ + +/***************** + * CONFIGURATION * + *****************/ + +// PIWIK URL, e.g. http://www.website.example/piwik +$strPiwikURL = ""; +// PIWIK AUTH TOKEN, e.g. 1234a5cd6789e0a12345b678cd9012ef +$strPiwikAuthToken = ""; +// YOUR BLOG'S URL, e.g. http://www.website.example +$strPiwikYourBlogURL = ""; +// User agent +$strUA = ini_get('user_agent'); +// SSL peer verification +$bolDisableSSLVer = false; + +/* That's all, stop editing! */ + +/** + * Get remote file + * + * @param String $strURL Remote file URL + */ +function getRemoteFile($strURL, $strToken, $bolSSL, $strUA) { + // Use cURL if available + if (function_exists('curl_init')) { + // Init cURL + $c = curl_init($strURL.$strToken); + // Configure cURL CURLOPT_RETURNTRANSFER = 1 + curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); + // Verbose = 1 + curl_setopt($c, CURLOPT_VERBOSE, 1); + // Configure cURL CURLOPT_HEADER = 1 & CURLINFO_HEADER_OUT = 1 + curl_setopt($c, CURLOPT_HEADER, 1); + curl_setopt($c, CURLINFO_HEADER_OUT, 1); + // Configure SSL peer verification + curl_setopt($c, CURLOPT_SSL_VERIFYPEER, $bolSSL); + // Set user agent + curl_setopt($c, CURLOPT_USERAGENT, $strUA); + // Get result + $strResult = curl_exec($c); + // Close connection + curl_close($c); + // cURL not available but url fopen allowed + } elseif (ini_get('allow_url_fopen')) + // Get file using file_get_contents + $strResult = file_get_contents($strURL.$strToken); + // Error: Not possible to get remote file + else $strResult = serialize(array( + 'result' => 'error', + 'message' => 'Remote access to Piwik not possible. Enable allow_url_fopen or CURL.' + )); + // Return result + return $strResult; +} + +if (substr($strPiwikURL, -1, 1) != '/' && substr($strPiwikURL, -10, 10) != '/index.php') + $strPiwikURL .= '/'; + +$aryURLs = array(); +$aryURLs['SitesManager.getSitesWithAtLeastViewAccess'] = $strPiwikURL.'?module=API&method=SitesManager.getSitesWithAtLeastViewAccess&format=XML'; +$aryURLs['SitesManager.getSitesIdFromSiteUrl'] = $strPiwikURL.'?module=API&method=SitesManager.getSitesIdFromSiteUrl&url='.urlencode($strPiwikYourBlogURL).'&format=XML'; +$strToken = '&token_auth='.$strPiwikAuthToken; +$intTest = 0; +?> +<textarea readonly="readonly" rows="13" cols="100"> +<?php +foreach ($aryURLs as $strMethod => $strURL) { + $intTest++; + echo '*** Test '.$intTest.'/'.count($aryURLs).': '.$strMethod.' ***'."\n"; + echo 'Using: '.(function_exists('curl_init')?'cURL':'fopen')."\n"; + echo 'SSL peer verification: '.(function_exists('curl_init') && !$bolDisableSSLVer?'enabled':'disabled')."\n"; + echo 'User Agent: '.$strUA."\n"; + echo 'Call: '.$strURL.'&token_auth= + TOKEN'."\n"; + $x = microtime(true); + $strResult = getRemoteFile($strURL,$strToken,!$bolDisableSSLVer,$strUA); + $x = microtime(true) - $x; + echo 'Result:'."\n"; + echo htmlentities($strResult)."\n"; + echo 'Time: '.round($x,2).'s'.($intTest < count($aryURLs)?"\n\n":''); +} +?> +</textarea> \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/index.php b/wp-content/plugins/wp-piwik/index.php new file mode 100644 index 0000000000000000000000000000000000000000..9b3347dc327ee0179b3df406f1d910c861c05d3a --- /dev/null +++ b/wp-content/plugins/wp-piwik/index.php @@ -0,0 +1,2 @@ +<?php + // Nothing to see... \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/js/index.php b/wp-content/plugins/wp-piwik/js/index.php new file mode 100644 index 0000000000000000000000000000000000000000..9b3347dc327ee0179b3df406f1d910c861c05d3a --- /dev/null +++ b/wp-content/plugins/wp-piwik/js/index.php @@ -0,0 +1,2 @@ +<?php + // Nothing to see... \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/js/jqplot/MIT-LICENSE.txt b/wp-content/plugins/wp-piwik/js/jqplot/MIT-LICENSE.txt index e4ad9fe3da7cb754ab3cb2286226a646a93ea255..da4732ec397830985519511007bc08b5a73930e9 100644 --- a/wp-content/plugins/wp-piwik/js/jqplot/MIT-LICENSE.txt +++ b/wp-content/plugins/wp-piwik/js/jqplot/MIT-LICENSE.txt @@ -1,6 +1,6 @@ Title: MIT License -Copyright (c) 2009 Chris Leonello +Copyright (c) 2009-2011 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 diff --git a/wp-content/plugins/wp-piwik/js/jqplot/README.txt b/wp-content/plugins/wp-piwik/js/jqplot/README.txt index 823074ec0f42feb9e30c3beca868a5fb84910ced..4932a00c6c17ea7bb8f4430ef93422c1c6909c3f 100644 --- a/wp-content/plugins/wp-piwik/js/jqplot/README.txt +++ b/wp-content/plugins/wp-piwik/js/jqplot/README.txt @@ -2,10 +2,7 @@ Title: jqPlot Readme Pure JavaScript plotting plugin for jQuery. -Copyright (c) 2009 Chris Leonello -This software is licensed under the GPL version 2.0 and MIT licenses. - -To learn how to use jqPlot, start with the Basic Unsage Instructions below. Then read the +To learn how to use jqPlot, start with the Basic Usage Instructions below. Then read the usage.txt and jqPlotOptions.txt files included with the distribution. The jqPlot home page is at <http://www.jqplot.com/>. @@ -24,12 +21,12 @@ Bugs, issues, feature requests: <http://www.bitbucket.org/cleonello/jqplot/issue Basic Usage Instructions: -jqPlot requires jQuery (tested with 1.3.2 or better). jQuery 1.3.2 is included in +jqPlot requires jQuery (1.4+ required for certain features). jQuery 1.4.4 is included in the distribution. To use jqPlot include jQuery, the jqPlot jQuery plugin, the jqPlot css file and -optionally the excanvas script for IE support in your web page... +optionally the excanvas script to support IE version prior to IE 9 in your web page: -> <!--[if IE]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]--> -> <script language="javascript" type="text/javascript" src="jquery-1.3.2.min.js"></script> +> <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]--> +> <script language="javascript" type="text/javascript" src="jquery-1.4.4.min.js"></script> > <script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script> > <link rel="stylesheet" type="text/css" href="jquery.jqplot.css" /> @@ -38,9 +35,43 @@ For usage instructions, see <jqPlot Usage> in usage.txt. For available options, Building from source: -To build a distribution from source you need to have ant <http://ant.apache.org> -installed. There are 6 targets: clean, dist, min, tests, docs and all. Use +If you've cloned the repository, you can build a distribution from source. +You need to have ant <http://ant.apache.org> installed. You can simply +type "ant" from the jqplot directory to build the default "all" target. +There are 6 pertinent targets: clean, dist, min, docs, compress and all. Use: > ant -p to get a description of the various build targets. + +Legal Notices: + +Copyright (c) 2009-2010 Chris Leonello +jqPlot is currently available for use in all personal or commercial projects +under both the MIT and GPL version 2.0 licenses. This means that you can +choose the license that best suits your project and use it accordingly. + +Although not required, the author would appreciate an email letting him +know of any substantial use of jqPlot. You can reach the author at: +chris at jqplot or see http://www.jqplot.com/info.php . + +If you are feeling kind and generous, consider supporting the project by +making a donation at: http://www.jqplot.com/donate.php . + +jqPlot includes date instance methods and printf/sprintf functions by other authors: + +Date instance methods: + + author Ken Snyder (ken d snyder at gmail dot com) + date 2008-09-10 + version 2.0.2 (http://kendsnyder.com/sandbox/date/) + license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) + +JavaScript printf/sprintf functions. + + version 2007.04.27 + author Ash Searle + http://hexmen.com/blog/2007/03/printf-sprintf/ + http://hexmen.com/js/sprintf.js + The author (Ash Searle) has placed this code in the public domain: + "This code is unrestricted: you are free to use it however you like." diff --git a/wp-content/plugins/wp-piwik/js/jqplot/changes.txt b/wp-content/plugins/wp-piwik/js/jqplot/changes.txt new file mode 100644 index 0000000000000000000000000000000000000000..79c15677599f1fdc8e91c3fa425fabb7e5919650 --- /dev/null +++ b/wp-content/plugins/wp-piwik/js/jqplot/changes.txt @@ -0,0 +1,395 @@ +Title: Change Log + +1.0.0b2: +* Major improvements in memory usage: +** Merged in changes from Timo Besenruether to reuse canvas elements and improve + memory performance. +** Fixed all identifiable DOM leaks. +** Mergged in changes from cguillot for memory improvements in IE < 9. +* Added vertical and dashed vertical line support for canvas overlay. +* Fixed bug where initially hidden plots would not display. +* Fixed bug with point labels and null data points. +* Updated to jQuery 1.6.1. +* Improved pie slice margin calculation and fixed slice margin and pie positioning + with small slices. +* Improved bar renderer so bars always start at 0 if: +** The axis is a linear axis (not log/date). +** There are no other line types besides bars attached to the axis. +** The data on the axis is all >= 0. +** The user has not specified a pad, padMin or forceTickAt0 = true option. +* Modified tick prefix behavious so prefix no added to all ticks, even if format + string is specified. +* Fix to ensure original tick formats are applied when zooming and resetting + zoom. +* Updated auto tick format string so format adjusted when zooming. +* Modified auto tick computation to put less ticks on small plots and more + ticks on large plots. +* Update bubble render to support gradients in IE 9. + +1.0.0b1: +* Much improved tick generation algorithm to get precise rounded + tick values (Thanks Scott Prahl!). +* Auto compute tick format string if none is provided. +* Much better "slicing" of pie charts when using "sliceMargin" option to set + a gap between the slices. +* Expanded canvasOverlay plugin to create arbitrary dashed and solid + horizontal and vertical lines on top of plot. +* Added defaultColors and defaultNegativeColors options to $.jqplot.config. +* Fixed issue #318, highlighter & bar renderer incompatability. +* Improve highlighter tooltip positioning with negative bars. +* Fixed #305, mispelling of jqlotDragStart and jqlotDragStop. MUST NOW BIND + TO jqplotDragStart and jqplotDragStop. +* Fixed #290, some variables left in global scope. +* Fixed #289, OHLC line widths hard coded at 1.5. Now set by lineWidth option. +* Fixed #296 for determining databounds on log axes. +* Updated to jQuery 1.5.1 +* Fixed waterfall plot to ensure first and last bars always fill to zero. +* Added lineJoin and lineCap option to series lines. +* Bar widths now based on width of grid, not plot target for better scaling. +* Added looseZoom option to cursor so zooming can produce well rounded ticks. +* Added forceTickAt0 and forceTickAt100 options to ensure there will always + be a tick at 0 or 100 in the plot. +* Fixed bug where cursor legend didn't honor series showLabel option. + + +1.0.0a: + +* Series can now be moved forward or backward in stack to e.g. bring a line + forward when mousing over a point. +* Can now move outside of grid area while zooming. Can have zoom + constrained to grid area or allow zooming outside. +* Fixed issue #142 with tooltip drawn on top of event canvas, hiding + mouse events. +* Fixed #147 where pie slices with 0 value not rendering properly in IE. +* Fixed #130 where stack data not sorted properly. +* Fixed bug with null values not handled properly in category axes. +* Fixed #156 where pie charts not rendering on QTWebKit. +* Now using feature detection for canvas and canvas text capability + rather than browser version. +* Added enahncedLegendRenderer plugin to allow multi row/column legends + and clickable labels to show/hide series. +* Added fillToValue option to allow filled line plot to fill to an + arbitrary value. +* Added block plot plugin. +* Added funnel type charts. +* Added meter gauge type charts. +* Added plot theming support. +* $.jqplot.config.enablePlugins now false by default. +* Implemented highlighting on bar, pie, donut, funnel, etc. charts. +* Fix to pointlabels plugin to align labels properly on multi series plots. +* Added custom error handling to display error message in plot area. +* Fixed issue where would call to draw grid border of 0 width would + result in a default border being drawn. +* Added options to place legend outside of grid and shrink grid so everything + stays within plot div. +* Fixed bug in color generator so now calls to get() continually cycle + through colors just like next(). +* Added defaultAxisStart option. +* Added gradient fills to bubbles. +* Added bubble charts. +* Added showLabels option to bubble charts. +* Pass bubble radius to event callback in bubble charts. +* Fixed #207, typo in docs. +* Fixed #206 where "value" pie slice data labels were displaying wrong + value. +* Fixed #147 with 0 value slices in IE6. +* Fixed issue #241, disabled varyBarColor option in stacked charts. +* Added dataRenderer option to allow custom processors for JSON, AJAX + and anywhere else you might want to get data. +* Fixed null value handling so plot now properly skip or join over nulls. +* Fixed showTicks and showTickMarks option conflicts. +* Fixed issue #185 where pointLabels plugin incompatibility could crash + pie, donut and other plots. +* Fixed #23 and #143 to obey gridPadding option. +* Fixed #233 with highlighter tooltip separator. +* Fixed #224 where type checking failing on GWT. +* Fixed #272 with pie highlighting not working on replot. +* Memory performance improvements. +* Changes to build script so everything should build when pulled from repo. +* Fixed issue #275, IE 6/7 don't support array indexing of strings. +* Added event listener hooks for mouseUp, mouseDown, etc. to all line plots. +* Fixed bug with highlighter not working when null in data. +* Updated to jQuery 1.4.4 +* Fixed bug where donut plots showed value of radians of slice instead + of actual data. +* Reverted to excanvas r3 so IE8 no longer has to emulate IE7. +* Added tooltipContentEditor option to highlighter, allowing callback + to manipulate tooltip content at run time (thanks Tim Bunce!). +* Fixed bug where axes scale not resetting. +* Fixed bug with date axes where data bounds not properly set. +* Fixed issue where tick marks disappear if grid lines turned off. +* Updated replot method to allow passing in axes options for more control. +* Added experimental support for "broken" axes. +* Fixed bug with pies where pies with 0 valued slices did not draw correctly. +* Added canvasOverlay plugin to allow drawing of arbitrary shapes on a canvas + over the plot. +* Added option to display arbitrary text/html (message, animated gif, etc.) if + plot is constructed without data. Allow a "data loading" indicator to be shown. +* Added resetAxisValues method to manually update axis ticks without + redrawing the plot. +* Fix to labels on negative bars so label postiion of 'n' will be below a negative bar, + just as it is above a positive bar (thanks guigod!). +* Added thousands separator character (') to sprintf formatting (thanks yuichi1004!). +* Re-factored date parsing/formatting to use new jsDate module which does not + extend the Date prototype. + + +0.9.7: + +* Added Mekko chart plot type with enhanced legend and axes support. +* Implemented vertical waterfall charts. Can create waterfall plot as + option to bar chart. See examples folder of distribution. +* Enhanced plot labels for waterfall style. +* Enhanced bar plots so you can now color each bar of a series + independently with the "varyBarColor" option. +* Re-factored series drawing so that each series and series shadow drawn + on it's own canvas. Allows series to be redrawn independently of each other. +* Added additional default series colors. +* Added useNegativeColors option to turn off negative color array and use + only seriesColors array to define all bar/filled line colors. +* Fix css for cursor legend. +* Modified shape renderer so rectangles can be stroked and filled. +* Re-factored date methods out of dateAxisRenderer so that date formatter + and methods can be accesses outside of dateAxisRenderer plugin. +* Fixed #132, now trigger series change event on plot target instead of drag canvas. +* Fixes issue #116 where some source files had mix of tabs and spaces + for indentation. Should have been all spaces. +* Fixed issue #126, some links broken in docs section of web site. +* Fixed issue #90, trendline plugin incompatibility with pie renderer. +* Updated samples in examples folder of distribution to include navigation + links if web server is set up to process .html files with php. + + +0.9.6: + +* New, easier to use, replot() method for placing plots in tabs, accordions, + resizable containers or for changing plot parameters programmatically. +* Updated legend renderer for pie charts to draw swatches which will + print correctly. +* Fixed issue #118 with patch from taum so autoscale option will + honor tickInterval and numberTicks options +* Fix to plot diameter calculation for initially hidden plots. +* Added examples for making plots in jQuery UI tabs and accordions. +* Fixed issue #120 where pie chart with single slice not displaying + correctly in IE and Chrome + + +0.9.5.2: + +* Fixed #102 where double clicking on plot that has zoom enabled, but + has not been zoomed resulted in error. +* Fixed bug where candlestick coloring options not working. +* Added option to turn individual series labels off in the legend. + + +0.9.5.1: + +* Fixed bug where tooltip not working with OHLC and candlestick charts. +* Added additional marker styles: plus, X and dash. + + +0.9.5: + +* Implemented "zoomProxy". zoomProxy allows zooming one plot from another + such as an overview plot. +* Zooming can now be constrained to just x or y axis. +* Enhanced cursor plugin with vertical "dataTracking" line. This is a line + at the cursor location with a readout of data points at the line location + which are displayed in the chart legend. +* Changed cursor tooltip format string. Now one format string is used for + entire tooltip. +* Added mechanisms to specify plot size when plot target is hidden or plot + height/width otherwise cannot be determined from markup. +* Added $.jqplot.config object to specify jqplot wide configuration options. + These include enablePlugins to globally set the default plugin state on/off + and defaultHeight/defaultWidth to specify default plot height/width. +* Added fillToZero option which forces filled charts to fill to zero as opposed + to axis minimum. Thus negative filled bar/line values will fill upwards to + zero axis value. +* Added option to disable stacking on individual lines. +* Changed targetId property of the plot object so it now includes a "#" before + the id string. +* Improved tick and body sizing of Open Hi Low Close and candlestick charts. +* Removed lots of web site related files from the repository. This means that, + if working from the sources, user's won't be able to build the jqplot web + site and the docs/tests that are hosted on that site. The minified and + compressed distribution packages will build fine. +* Lots of examples were added to a separate examples directory to better show + functionality of jqPlot for local testing with the distribution. +* Many various bug fixes and other minor enhancements. + + +0.9.4: + +* Implemented axis labels. Labels can be rendered in div tags or as canvas + elements supporting rotated text. +* Improved rotated axis label positioning so labels will start or end at a + tick position. +* Fixed bug where an empty data series would hang plot rendering. +* completed issue #66 for misc. improvements to documentation. +* Fixed issue #64 where the same ID's were assigned to cursor and highlighter + elements. +* Added option to legend to encode special HTML characters. +* Fixed undesirable behavior where point labels for points off the plot + were being rendered. +* Added edgeTolerance option to point label renderer to control rendering of + labels near plot edges. + + +0.9.3: + +* Preliminary support for axis labels. Currently rendered into DIV tags, + so no rotated label support. This feature is currently experimental. +* Fixed bug #52, needed space in tick div tag between style and class declarations + or plot failed in certain application doctypes. +* Fixed issue #54, miter style line join for chart lines causing spikes at steep + changes in slope. Changed miter style to round. +* Added examples for new autoscaling algorithm. +* Fixed bug #57, category axis labels disappear on redraw() +* Improved algorithm which controlled maximum number of labels that would display + on a category axis. +* Fixed bug #45 where null values causing errors in plotData and gridData. +* Fixed issue #60 where seriesColors option was not working. + + +0.9.2: + +* Fixed bug #45 where a plot could crash if series had different numbers of points. +* Fixed issue #50, added option to turn off sorting of series data. +* Fixed issue #31, implemented a better axis autoscaling algorithm and added an autoscale option. + +0.9.1: + +* Fixed bug #40, when axis pad, padMax, padMin set to 0, graph would fail to render. +* Fixed bug #41 where pie and bar charts not rendered correctly on redraw(). +* Fixed bug #11, filled stacked line plots not rendering correctly in IE. +* Fixed bug #42 where stacked charts not rendering with string date axis ticks. +* Fixed bug in redraw() method where axes ticks were not reset. +* Fixed "jqplotPreRedrawEvent" that should have been named "jqplotPostRedraw" event. + +0.9.0: + +* Added Open Hi Low Close charts, Candlestick charts and Hi Low Close charts. +* Added support for arbitrary labels on the data points. +* Enhanced highlighter plugin to allow custom formatting control of entire tooltip. +* Enhanced highlighter to support multiple y values in a data point. +* Fixed bug #38 where series with a single point with a negative value would fail. +* Improvements to examples to show what plugins to include. +* Expanded documentation for some of the plugins. + +0.8.5: + +* Added zooming ability with double click or single click options to reset zoom. +* Modified default tick spacing algorithm for date axes to give more space to ticks. +* Fixed bug #2 where tickInterval wasn't working properly. +* Added neighborThreshold option to control how close mouse must be to + point to trigger neighbor detection. +* Added double click event handler on plot. + +0.8.0: + +* Support for up to 9 y axes. +* Added option to control padding at max/min bounds of axes separately. +* Closed issue #21, added options to control grid line color and width. +* Closed issue #20, added options to filled line charts to stoke above + fill and customize fill color and transparency. +* Improved structure of on line documentation to make usage and options + docs default. +* Added much documentation on options and css styling. + +0.7.1: + +* Bug fix release +* Fixed bug #6, missing semi-colons messing up some javascript compressors. +* Fixed bug #13 where 2D ticks array of [values, labels] would fail to + renderer with DateAxisRenderer. +* Fixes bug #16 where pie renderer overwriting options for all plot types + and crashing non pie plots. +* Fixes bug #17 constrainTo dragable option mispelled as "contstrainTo". + Fixed dragable color issue when used with trend lines. + +0.7.0: + +* Pie chart support +* Enabled tooltipLocation option in highlighter. +* Highlighter Tooltip will account for mark size and highlight size when + positioning itself. +* Added ability to show just x, y or both axes in highlighter tooltip. +* Added customization of separator between axes values in highlighter tooltip. +* Modified how shadows are drawn for lines, bars and markers. Now drawn first, + so they are always behind the object. +* Adjustments to shadow parameters on lines to account for new shadow positioning. +* Added a ColorGenerator class to robustly return next available color + for a plot with wrap around to first color at end. +* Udates to docs about css file. +* Fixed bug with String x values in series and IE error on sorting (Category Axis). +* Added cursor changes in dragable plugin when cursor near dragable point. + +0.6.6b: + +* Added excanvas.js and excanvas.min.js to compressed distributions. +* Added example/test html pages I had locally into repository and to + compressed distributions. + +0.6.6a: + +* Removed absolute positioning from dom element and put back into css file. +* Duplicate of 0.6.6 with a suffix to unambiguously differentiate between + previously posted 0.6.6 release. + +0.6.6: + +* Fixed bug #5, trend line plugin failing when no trend line options specified. +* Added absolute position css spec to axis tick dom element. +* Enhancement to category axes, more intuitive handling of series with + missing data values. + +0.6.5: + +* Fixed bug #4, series of unequal data length not rendering correctly. + This is a bugfix release only. + +0.6.4: + +* Fixed bug (issue #1 in tracker) where flat line data series (all x and/or y + values are euqal) or single value data series would crash. + +0.6.3: + +* Support for stacked line (a.k.a. area) and stacked bar (horizontal and + vertical) charts. +* Refactored barRenderer to use default shape and shadow renderers. +* Added info (contacts & support information) page to web site. + +0.6.2: + +* This is a minor upgrade to docs and build only. No functionality has changed. +* Ant build script generates entire site, examples, tests and distribution. +* Improvements to documentation. + +0.6.1: + +* New sprintf implementation from Ash Searle that implements %g. +* Fix to sprintf e/f formats. +* Created new format specifier, %p and %P to preserve significance. +* Modified p/P format to better display larger numbers. +* Fixed and simplified significant digits calculation for sprintf. +* Added option to have cursor tooltip follow the mouse or not. +* Added options to change size of highlight. +* Updates to handle dates like '6-May-09'. +* Mods to improve look of web site. +* Updates to documentation. +* Added license and copyright statement to source files. + +0.6.0: + +* Added rotated text support. Uses native canvas text functionality in + browsers that support it or draws text on canvas with Hershey font +* metrics for non-supporting browsers. +* Removed lots of lint in js code. +* Moved tick css from js code into css file. +* Fix to tick positioning css. y axis ticks were positioned to wrong side of axis div. +* Re-factored axis tick renderer instantiation into the axes renderers themselves. + + +For changes prior to 0.6.0 release, please see change log at http://bitbucket.org/cleonello/jqplot/changesets/ \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/js/jqplot/copyright.txt b/wp-content/plugins/wp-piwik/js/jqplot/copyright.txt index c1e969fe4e6c1b5f7e68ebfccc53c529e44b759c..3730cff00ff6577c22bfc7a5208a93bb07e74cc5 100644 --- a/wp-content/plugins/wp-piwik/js/jqplot/copyright.txt +++ b/wp-content/plugins/wp-piwik/js/jqplot/copyright.txt @@ -1,13 +1,56 @@ /** - * Copyright (c) 2009 Chris Leonello + * jqPlot + * Pure JavaScript plotting plugin using jQuery + * + * Version: @VERSION + * + * Copyright (c) 2009-2011 Chris Leonello * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can + * 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 dot leonello at gmail dot com or see http://www.jqplot.com/info.php . + * chris at jqplot dot com or see http://www.jqplot.com/info.php . * * If you are feeling kind and generous, consider supporting the project by * making a donation at: http://www.jqplot.com/donate.php . + * + * sprintf functions contained in jqplot.sprintf.js by Ash Searle: + * + * version 2007.04.27 + * author Ash Searle + * http://hexmen.com/blog/2007/03/printf-sprintf/ + * http://hexmen.com/js/sprintf.js + * The author (Ash Searle) has placed this code in the public domain: + * "This code is unrestricted: you are free to use it however you like." + * + * included jsDate library by Chris Leonello: + * + * Copyright (c) 2010-2011 Chris Leonello + * + * jsDate is currently available for use in all personal or commercial projects + * under both the MIT and GPL version 2.0 licenses. This means that you can + * choose the license that best suits your project and use it accordingly. + * + * jsDate borrows many concepts and ideas from the Date Instance + * Methods by Ken Snyder along with some parts of Ken's actual code. + * + * Ken's origianl Date Instance Methods and copyright notice: + * + * Ken Snyder (ken d snyder at gmail dot com) + * 2008-09-10 + * version 2.0.2 (http://kendsnyder.com/sandbox/date/) + * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) + * + * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. + * Larry has generously given permission to adapt his code for inclusion + * into jqPlot. + * + * Larry's original code can be found here: + * + * https://github.com/lsiden/export-jqplot-to-png + * + * */ diff --git a/wp-content/plugins/wp-piwik/js/jqplot/excanvas.min.js b/wp-content/plugins/wp-piwik/js/jqplot/excanvas.min.js index 896786ef4de428349c4cf6ba0fbabc1192266216..6452abf4c8c6f603949052962d5f078df2fc6ef0 100644 --- a/wp-content/plugins/wp-piwik/js/jqplot/excanvas.min.js +++ b/wp-content/plugins/wp-piwik/js/jqplot/excanvas.min.js @@ -1 +1,57 @@ -if(!document.createElement("canvas").getContext){(function(){var Y=Math;var q=Y.round;var o=Y.sin;var B=Y.cos;var H=Y.abs;var N=Y.sqrt;var d=10;var f=d/2;function A(){return this.context_||(this.context_=new D(this))}var v=Array.prototype.slice;function g(j,m,p){var i=v.call(arguments,2);return function(){return j.apply(m,i.concat(v.call(arguments)))}}function ad(i){return String(i).replace(/&/g,"&").replace(/"/g,""")}function R(j){if(!j.namespaces.g_vml_){j.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!j.namespaces.g_o_){j.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!j.styleSheets.ex_canvas_){var i=j.createStyleSheet();i.owningElement.id="ex_canvas_";i.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}R(document);var e={init:function(i){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var j=i||document;j.createElement("canvas");j.attachEvent("onreadystatechange",g(this.init_,this,j))}},init_:function(p){var m=p.getElementsByTagName("canvas");for(var j=0;j<m.length;j++){this.initElement(m[j])}},initElement:function(j){if(!j.getContext){j.getContext=A;R(j.ownerDocument);j.innerHTML="";j.attachEvent("onpropertychange",z);j.attachEvent("onresize",V);var i=j.attributes;if(i.width&&i.width.specified){j.style.width=i.width.nodeValue+"px"}else{j.width=j.clientWidth}if(i.height&&i.height.specified){j.style.height=i.height.nodeValue+"px"}else{j.height=j.clientHeight}}return j}};function z(j){var i=j.srcElement;switch(j.propertyName){case"width":i.getContext().clearRect();i.style.width=i.attributes.width.nodeValue+"px";i.firstChild.style.width=i.clientWidth+"px";break;case"height":i.getContext().clearRect();i.style.height=i.attributes.height.nodeValue+"px";i.firstChild.style.height=i.clientHeight+"px";break}}function V(j){var i=j.srcElement;if(i.firstChild){i.firstChild.style.width=i.clientWidth+"px";i.firstChild.style.height=i.clientHeight+"px"}}e.init();var n=[];for(var ac=0;ac<16;ac++){for(var ab=0;ab<16;ab++){n[ac*16+ab]=ac.toString(16)+ab.toString(16)}}function C(){return[[1,0,0],[0,1,0],[0,0,1]]}function J(p,m){var j=C();for(var i=0;i<3;i++){for(var af=0;af<3;af++){var Z=0;for(var ae=0;ae<3;ae++){Z+=p[i][ae]*m[ae][af]}j[i][af]=Z}}return j}function x(j,i){i.fillStyle=j.fillStyle;i.lineCap=j.lineCap;i.lineJoin=j.lineJoin;i.lineWidth=j.lineWidth;i.miterLimit=j.miterLimit;i.shadowBlur=j.shadowBlur;i.shadowColor=j.shadowColor;i.shadowOffsetX=j.shadowOffsetX;i.shadowOffsetY=j.shadowOffsetY;i.strokeStyle=j.strokeStyle;i.globalAlpha=j.globalAlpha;i.font=j.font;i.textAlign=j.textAlign;i.textBaseline=j.textBaseline;i.arcScaleX_=j.arcScaleX_;i.arcScaleY_=j.arcScaleY_;i.lineScale_=j.lineScale_}var b={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function M(j){var p=j.indexOf("(",3);var i=j.indexOf(")",p+1);var m=j.substring(p+1,i).split(",");if(m.length==4&&j.substr(3,1)=="a"){alpha=Number(m[3])}else{m[3]=1}return m}function c(i){return parseFloat(i)/100}function u(j,m,i){return Math.min(i,Math.max(m,j))}function I(af){var m,j,i;h=parseFloat(af[0])/360%360;if(h<0){h++}s=u(c(af[1]),0,1);l=u(c(af[2]),0,1);if(s==0){m=j=i=l}else{var Z=l<0.5?l*(1+s):l+s-l*s;var ae=2*l-Z;m=a(ae,Z,h+1/3);j=a(ae,Z,h);i=a(ae,Z,h-1/3)}return"#"+n[Math.floor(m*255)]+n[Math.floor(j*255)]+n[Math.floor(i*255)]}function a(j,i,m){if(m<0){m++}if(m>1){m--}if(6*m<1){return j+(i-j)*6*m}else{if(2*m<1){return i}else{if(3*m<2){return j+(i-j)*(2/3-m)*6}else{return j}}}}function F(j){var ae,Z=1;j=String(j);if(j.charAt(0)=="#"){ae=j}else{if(/^rgb/.test(j)){var p=M(j);var ae="#",af;for(var m=0;m<3;m++){if(p[m].indexOf("%")!=-1){af=Math.floor(c(p[m])*255)}else{af=Number(p[m])}ae+=n[u(af,0,255)]}Z=p[3]}else{if(/^hsl/.test(j)){var p=M(j);ae=I(p);Z=p[3]}else{ae=b[j]||j}}}return{color:ae,alpha:Z}}var r={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var L={};function E(i){if(L[i]){return L[i]}var p=document.createElement("div");var m=p.style;try{m.font=i}catch(j){}return L[i]={style:m.fontStyle||r.style,variant:m.fontVariant||r.variant,weight:m.fontWeight||r.weight,size:m.fontSize||r.size,family:m.fontFamily||r.family}}function w(m,j){var i={};for(var af in m){i[af]=m[af]}var ae=parseFloat(j.currentStyle.fontSize),Z=parseFloat(m.size);if(typeof m.size=="number"){i.size=m.size}else{if(m.size.indexOf("px")!=-1){i.size=Z}else{if(m.size.indexOf("em")!=-1){i.size=ae*Z}else{if(m.size.indexOf("%")!=-1){i.size=(ae/100)*Z}else{if(m.size.indexOf("pt")!=-1){i.size=ae*(4/3)*Z}else{i.size=ae}}}}}i.size*=0.981;return i}function aa(i){return i.style+" "+i.variant+" "+i.weight+" "+i.size+"px "+i.family}function S(i){switch(i){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function D(j){this.m_=C();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=d*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=j;var i=j.ownerDocument.createElement("div");i.style.width=j.clientWidth+"px";i.style.height=j.clientHeight+"px";i.style.overflow="hidden";i.style.position="absolute";j.appendChild(i);this.element_=i;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var t=D.prototype;t.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};t.beginPath=function(){this.currentPath_=[]};t.moveTo=function(j,i){var m=this.getCoords_(j,i);this.currentPath_.push({type:"moveTo",x:m.x,y:m.y});this.currentX_=m.x;this.currentY_=m.y};t.lineTo=function(j,i){var m=this.getCoords_(j,i);this.currentPath_.push({type:"lineTo",x:m.x,y:m.y});this.currentX_=m.x;this.currentY_=m.y};t.bezierCurveTo=function(m,j,ai,ah,ag,ae){var i=this.getCoords_(ag,ae);var af=this.getCoords_(m,j);var Z=this.getCoords_(ai,ah);K(this,af,Z,i)};function K(i,Z,m,j){i.currentPath_.push({type:"bezierCurveTo",cp1x:Z.x,cp1y:Z.y,cp2x:m.x,cp2y:m.y,x:j.x,y:j.y});i.currentX_=j.x;i.currentY_=j.y}t.quadraticCurveTo=function(ag,m,j,i){var af=this.getCoords_(ag,m);var ae=this.getCoords_(j,i);var ah={x:this.currentX_+2/3*(af.x-this.currentX_),y:this.currentY_+2/3*(af.y-this.currentY_)};var Z={x:ah.x+(ae.x-this.currentX_)/3,y:ah.y+(ae.y-this.currentY_)/3};K(this,ah,Z,ae)};t.arc=function(aj,ah,ai,ae,j,m){ai*=d;var an=m?"at":"wa";var ak=aj+B(ae)*ai-f;var am=ah+o(ae)*ai-f;var i=aj+B(j)*ai-f;var al=ah+o(j)*ai-f;if(ak==i&&!m){ak+=0.125}var Z=this.getCoords_(aj,ah);var ag=this.getCoords_(ak,am);var af=this.getCoords_(i,al);this.currentPath_.push({type:an,x:Z.x,y:Z.y,radius:ai,xStart:ag.x,yStart:ag.y,xEnd:af.x,yEnd:af.y})};t.rect=function(m,j,i,p){this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath()};t.strokeRect=function(m,j,i,p){var Z=this.currentPath_;this.beginPath();this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath();this.stroke();this.currentPath_=Z};t.fillRect=function(m,j,i,p){var Z=this.currentPath_;this.beginPath();this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath();this.fill();this.currentPath_=Z};t.createLinearGradient=function(j,p,i,m){var Z=new U("gradient");Z.x0_=j;Z.y0_=p;Z.x1_=i;Z.y1_=m;return Z};t.createRadialGradient=function(p,ae,m,j,Z,i){var af=new U("gradientradial");af.x0_=p;af.y0_=ae;af.r0_=m;af.x1_=j;af.y1_=Z;af.r1_=i;return af};t.drawImage=function(ao,m){var ah,af,aj,aw,am,ak,aq,ay;var ai=ao.runtimeStyle.width;var an=ao.runtimeStyle.height;ao.runtimeStyle.width="auto";ao.runtimeStyle.height="auto";var ag=ao.width;var au=ao.height;ao.runtimeStyle.width=ai;ao.runtimeStyle.height=an;if(arguments.length==3){ah=arguments[1];af=arguments[2];am=ak=0;aq=aj=ag;ay=aw=au}else{if(arguments.length==5){ah=arguments[1];af=arguments[2];aj=arguments[3];aw=arguments[4];am=ak=0;aq=ag;ay=au}else{if(arguments.length==9){am=arguments[1];ak=arguments[2];aq=arguments[3];ay=arguments[4];ah=arguments[5];af=arguments[6];aj=arguments[7];aw=arguments[8]}else{throw Error("Invalid number of arguments")}}}var ax=this.getCoords_(ah,af);var p=aq/2;var j=ay/2;var av=[];var i=10;var ae=10;av.push(" <g_vml_:group",' coordsize="',d*i,",",d*ae,'"',' coordorigin="0,0"',' style="width:',i,"px;height:",ae,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var Z=[];Z.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",q(ax.x/d),",","Dy=",q(ax.y/d),"");var at=ax;var ar=this.getCoords_(ah+aj,af);var ap=this.getCoords_(ah,af+aw);var al=this.getCoords_(ah+aj,af+aw);at.x=Y.max(at.x,ar.x,ap.x,al.x);at.y=Y.max(at.y,ar.y,ap.y,al.y);av.push("padding:0 ",q(at.x/d),"px ",q(at.y/d),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",Z.join(""),", sizingmethod='clip');")}else{av.push("top:",q(ax.y/d),"px;left:",q(ax.x/d),"px;")}av.push(' ">','<g_vml_:image src="',ao.src,'"',' style="width:',d*aj,"px;"," height:",d*aw,'px"',' cropleft="',am/ag,'"',' croptop="',ak/au,'"',' cropright="',(ag-am-aq)/ag,'"',' cropbottom="',(au-ak-ay)/au,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",av.join(""))};t.stroke=function(aj){var ah=[];var Z=false;var m=10;var ak=10;ah.push("<g_vml_:shape",' filled="',!!aj,'"',' style="position:absolute;width:',m,"px;height:",ak,'px;"',' coordorigin="0,0"',' coordsize="',d*m,",",d*ak,'"',' stroked="',!aj,'"',' path="');var al=false;var ae={x:null,y:null};var ai={x:null,y:null};for(var af=0;af<this.currentPath_.length;af++){var j=this.currentPath_[af];var ag;switch(j.type){case"moveTo":ag=j;ah.push(" m ",q(j.x),",",q(j.y));break;case"lineTo":ah.push(" l ",q(j.x),",",q(j.y));break;case"close":ah.push(" x ");j=null;break;case"bezierCurveTo":ah.push(" c ",q(j.cp1x),",",q(j.cp1y),",",q(j.cp2x),",",q(j.cp2y),",",q(j.x),",",q(j.y));break;case"at":case"wa":ah.push(" ",j.type," ",q(j.x-this.arcScaleX_*j.radius),",",q(j.y-this.arcScaleY_*j.radius)," ",q(j.x+this.arcScaleX_*j.radius),",",q(j.y+this.arcScaleY_*j.radius)," ",q(j.xStart),",",q(j.yStart)," ",q(j.xEnd),",",q(j.yEnd));break}if(j){if(ae.x==null||j.x<ae.x){ae.x=j.x}if(ai.x==null||j.x>ai.x){ai.x=j.x}if(ae.y==null||j.y<ae.y){ae.y=j.y}if(ai.y==null||j.y>ai.y){ai.y=j.y}}}ah.push(' ">');if(!aj){y(this,ah)}else{G(this,ah,ae,ai)}ah.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",ah.join(""))};function y(m,ae){var j=F(m.strokeStyle);var p=j.color;var Z=j.alpha*m.globalAlpha;var i=m.lineScale_*m.lineWidth;if(i<1){Z*=i}ae.push("<g_vml_:stroke",' opacity="',Z,'"',' joinstyle="',m.lineJoin,'"',' miterlimit="',m.miterLimit,'"',' endcap="',S(m.lineCap),'"',' weight="',i,'px"',' color="',p,'" />')}function G(ao,ag,aI,ap){var ah=ao.fillStyle;var az=ao.arcScaleX_;var ay=ao.arcScaleY_;var j=ap.x-aI.x;var p=ap.y-aI.y;if(ah instanceof U){var al=0;var aD={x:0,y:0};var av=0;var ak=1;if(ah.type_=="gradient"){var aj=ah.x0_/az;var m=ah.y0_/ay;var ai=ah.x1_/az;var aK=ah.y1_/ay;var aH=ao.getCoords_(aj,m);var aG=ao.getCoords_(ai,aK);var ae=aG.x-aH.x;var Z=aG.y-aH.y;al=Math.atan2(ae,Z)*180/Math.PI;if(al<0){al+=360}if(al<0.000001){al=0}}else{var aH=ao.getCoords_(ah.x0_,ah.y0_);aD={x:(aH.x-aI.x)/j,y:(aH.y-aI.y)/p};j/=az*d;p/=ay*d;var aB=Y.max(j,p);av=2*ah.r0_/aB;ak=2*ah.r1_/aB-av}var at=ah.colors_;at.sort(function(aL,i){return aL.offset-i.offset});var an=at.length;var ar=at[0].color;var aq=at[an-1].color;var ax=at[0].alpha*ao.globalAlpha;var aw=at[an-1].alpha*ao.globalAlpha;var aC=[];for(var aF=0;aF<an;aF++){var am=at[aF];aC.push(am.offset*ak+av+" "+am.color)}ag.push('<g_vml_:fill type="',ah.type_,'"',' method="none" focus="100%"',' color="',ar,'"',' color2="',aq,'"',' colors="',aC.join(","),'"',' opacity="',aw,'"',' g_o_:opacity2="',ax,'"',' angle="',al,'"',' focusposition="',aD.x,",",aD.y,'" />')}else{if(ah instanceof T){if(j&&p){var af=-aI.x;var aA=-aI.y;ag.push("<g_vml_:fill",' position="',af/j*az*az,",",aA/p*ay*ay,'"',' type="tile"',' src="',ah.src_,'" />')}}else{var aJ=F(ao.fillStyle);var au=aJ.color;var aE=aJ.alpha*ao.globalAlpha;ag.push('<g_vml_:fill color="',au,'" opacity="',aE,'" />')}}}t.fill=function(){this.stroke(true)};t.closePath=function(){this.currentPath_.push({type:"close"})};t.getCoords_=function(p,j){var i=this.m_;return{x:d*(p*i[0][0]+j*i[1][0]+i[2][0])-f,y:d*(p*i[0][1]+j*i[1][1]+i[2][1])-f}};t.save=function(){var i={};x(this,i);this.aStack_.push(i);this.mStack_.push(this.m_);this.m_=J(C(),this.m_)};t.restore=function(){if(this.aStack_.length){x(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function k(i){return isFinite(i[0][0])&&isFinite(i[0][1])&&isFinite(i[1][0])&&isFinite(i[1][1])&&isFinite(i[2][0])&&isFinite(i[2][1])}function X(j,i,p){if(!k(i)){return}j.m_=i;if(p){var Z=i[0][0]*i[1][1]-i[0][1]*i[1][0];j.lineScale_=N(H(Z))}}t.translate=function(m,j){var i=[[1,0,0],[0,1,0],[m,j,1]];X(this,J(i,this.m_),false)};t.rotate=function(j){var p=B(j);var m=o(j);var i=[[p,m,0],[-m,p,0],[0,0,1]];X(this,J(i,this.m_),false)};t.scale=function(m,j){this.arcScaleX_*=m;this.arcScaleY_*=j;var i=[[m,0,0],[0,j,0],[0,0,1]];X(this,J(i,this.m_),true)};t.transform=function(Z,p,af,ae,j,i){var m=[[Z,p,0],[af,ae,0],[j,i,1]];X(this,J(m,this.m_),true)};t.setTransform=function(ae,Z,ag,af,p,j){var i=[[ae,Z,0],[ag,af,0],[p,j,1]];X(this,i,true)};t.drawText_=function(ak,ai,ah,an,ag){var am=this.m_,aq=1000,j=0,ap=aq,af={x:0,y:0},ae=[];var i=w(E(this.font),this.element_);var p=aa(i);var ar=this.element_.currentStyle;var Z=this.textAlign.toLowerCase();switch(Z){case"left":case"center":case"right":break;case"end":Z=ar.direction=="ltr"?"right":"left";break;case"start":Z=ar.direction=="rtl"?"right":"left";break;default:Z="left"}switch(this.textBaseline){case"hanging":case"top":af.y=i.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":af.y=-i.size/2.25;break}switch(Z){case"right":j=aq;ap=0.05;break;case"center":j=ap=aq/2;break}var ao=this.getCoords_(ai+af.x,ah+af.y);ae.push('<g_vml_:line from="',-j,' 0" to="',ap,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!ag,'" stroked="',!!ag,'" style="position:absolute;width:1px;height:1px;">');if(ag){y(this,ae)}else{G(this,ae,{x:-j,y:0},{x:ap,y:i.size})}var al=am[0][0].toFixed(3)+","+am[1][0].toFixed(3)+","+am[0][1].toFixed(3)+","+am[1][1].toFixed(3)+",0,0";var aj=q(ao.x/d)+","+q(ao.y/d);ae.push('<g_vml_:skew on="t" matrix="',al,'" ',' offset="',aj,'" origin="',j,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',ad(ak),'" style="v-text-align:',Z,";font:",ad(p),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",ae.join(""))};t.fillText=function(m,i,p,j){this.drawText_(m,i,p,j,false)};t.strokeText=function(m,i,p,j){this.drawText_(m,i,p,j,true)};t.measureText=function(m){if(!this.textMeasureEl_){var i='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",i);this.textMeasureEl_=this.element_.lastChild}var j=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(j.createTextNode(m));return{width:this.textMeasureEl_.offsetWidth}};t.clip=function(){};t.arcTo=function(){};t.createPattern=function(j,i){return new T(j,i)};function U(i){this.type_=i;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}U.prototype.addColorStop=function(j,i){i=F(i);this.colors_.push({offset:j,color:i.color,alpha:i.alpha})};function T(j,i){Q(j);switch(i){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=i;break;default:O("SYNTAX_ERR")}this.src_=j.src;this.width_=j.width;this.height_=j.height}function O(i){throw new P(i)}function Q(i){if(!i||i.nodeType!=1||i.tagName!="IMG"){O("TYPE_MISMATCH_ERR")}if(i.readyState!="complete"){O("INVALID_STATE_ERR")}}function P(i){this.code=this[i];this.message=i+": DOM Exception "+this.code}var W=P.prototype=new Error;W.INDEX_SIZE_ERR=1;W.DOMSTRING_SIZE_ERR=2;W.HIERARCHY_REQUEST_ERR=3;W.WRONG_DOCUMENT_ERR=4;W.INVALID_CHARACTER_ERR=5;W.NO_DATA_ALLOWED_ERR=6;W.NO_MODIFICATION_ALLOWED_ERR=7;W.NOT_FOUND_ERR=8;W.NOT_SUPPORTED_ERR=9;W.INUSE_ATTRIBUTE_ERR=10;W.INVALID_STATE_ERR=11;W.SYNTAX_ERR=12;W.INVALID_MODIFICATION_ERR=13;W.NAMESPACE_ERR=14;W.INVALID_ACCESS_ERR=15;W.VALIDATION_ERR=16;W.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=e;CanvasRenderingContext2D=D;CanvasGradient=U;CanvasPattern=T;DOMException=P})()}; \ No newline at end of file +/** + * jqPlot + * Pure JavaScript plotting plugin using jQuery + * + * Version: @VERSION + * + * Copyright (c) 2009-2011 Chris Leonello + * jqPlot is currently available for use in all personal or commercial projects + * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL + * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can + * choose the license that best suits your project and use it accordingly. + * + * Although not required, the author would appreciate an email letting him + * know of any substantial use of jqPlot. You can reach the author at: + * chris at jqplot dot com or see http://www.jqplot.com/info.php . + * + * If you are feeling kind and generous, consider supporting the project by + * making a donation at: http://www.jqplot.com/donate.php . + * + * sprintf functions contained in jqplot.sprintf.js by Ash Searle: + * + * version 2007.04.27 + * author Ash Searle + * http://hexmen.com/blog/2007/03/printf-sprintf/ + * http://hexmen.com/js/sprintf.js + * The author (Ash Searle) has placed this code in the public domain: + * "This code is unrestricted: you are free to use it however you like." + * + * included jsDate library by Chris Leonello: + * + * Copyright (c) 2010-2011 Chris Leonello + * + * jsDate is currently available for use in all personal or commercial projects + * under both the MIT and GPL version 2.0 licenses. This means that you can + * choose the license that best suits your project and use it accordingly. + * + * jsDate borrows many concepts and ideas from the Date Instance + * Methods by Ken Snyder along with some parts of Ken's actual code. + * + * Ken's origianl Date Instance Methods and copyright notice: + * + * Ken Snyder (ken d snyder at gmail dot com) + * 2008-09-10 + * version 2.0.2 (http://kendsnyder.com/sandbox/date/) + * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) + * + * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. + * Larry has generously given permission to adapt his code for inclusion + * into jqPlot. + * + * Larry's original code can be found here: + * + * https://github.com/lsiden/export-jqplot-to-png + * + * + */ +if(!document.createElement("canvas").getContext){(function(){var ab=Math;var n=ab.round;var l=ab.sin;var A=ab.cos;var H=ab.abs;var N=ab.sqrt;var d=10;var f=d/2;var z=+navigator.userAgent.match(/MSIE ([\d.]+)?/)[1];function y(){return this.context_||(this.context_=new D(this))}var t=Array.prototype.slice;function g(j,m,p){var i=t.call(arguments,2);return function(){return j.apply(m,i.concat(t.call(arguments)))}}function af(i){return String(i).replace(/&/g,"&").replace(/"/g,""")}function Y(m,j,i){if(!m.namespaces[j]){m.namespaces.add(j,i,"#default#VML")}}function R(j){Y(j,"g_vml_","urn:schemas-microsoft-com:vml");Y(j,"g_o_","urn:schemas-microsoft-com:office:office");if(!j.styleSheets.ex_canvas_){var i=j.createStyleSheet();i.owningElement.id="ex_canvas_";i.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}R(document);var e={init:function(i){var j=i||document;j.createElement("canvas");j.attachEvent("onreadystatechange",g(this.init_,this,j))},init_:function(p){var m=p.getElementsByTagName("canvas");for(var j=0;j<m.length;j++){this.initElement(m[j])}},initElement:function(j){if(!j.getContext){j.getContext=y;R(j.ownerDocument);j.innerHTML="";j.attachEvent("onpropertychange",x);j.attachEvent("onresize",W);var i=j.attributes;if(i.width&&i.width.specified){j.style.width=i.width.nodeValue+"px"}else{j.width=j.clientWidth}if(i.height&&i.height.specified){j.style.height=i.height.nodeValue+"px"}else{j.height=j.clientHeight}}return j},uninitElement:function(j){if(j.getContext){var i=j.getContext();delete i.element_;delete i.canvas;j.innerHTML="";j.context_=null;j.getContext=null;j.detachEvent("onpropertychange",x);j.detachEvent("onresize",W)}}};function x(j){var i=j.srcElement;switch(j.propertyName){case"width":i.getContext().clearRect();i.style.width=i.attributes.width.nodeValue+"px";i.firstChild.style.width=i.clientWidth+"px";break;case"height":i.getContext().clearRect();i.style.height=i.attributes.height.nodeValue+"px";i.firstChild.style.height=i.clientHeight+"px";break}}function W(j){var i=j.srcElement;if(i.firstChild){i.firstChild.style.width=i.clientWidth+"px";i.firstChild.style.height=i.clientHeight+"px"}}e.init();var k=[];for(var ae=0;ae<16;ae++){for(var ad=0;ad<16;ad++){k[ae*16+ad]=ae.toString(16)+ad.toString(16)}}function B(){return[[1,0,0],[0,1,0],[0,0,1]]}function J(p,m){var j=B();for(var i=0;i<3;i++){for(var ah=0;ah<3;ah++){var Z=0;for(var ag=0;ag<3;ag++){Z+=p[i][ag]*m[ag][ah]}j[i][ah]=Z}}return j}function v(j,i){i.fillStyle=j.fillStyle;i.lineCap=j.lineCap;i.lineJoin=j.lineJoin;i.lineWidth=j.lineWidth;i.miterLimit=j.miterLimit;i.shadowBlur=j.shadowBlur;i.shadowColor=j.shadowColor;i.shadowOffsetX=j.shadowOffsetX;i.shadowOffsetY=j.shadowOffsetY;i.strokeStyle=j.strokeStyle;i.globalAlpha=j.globalAlpha;i.font=j.font;i.textAlign=j.textAlign;i.textBaseline=j.textBaseline;i.arcScaleX_=j.arcScaleX_;i.arcScaleY_=j.arcScaleY_;i.lineScale_=j.lineScale_}var b={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function M(j){var p=j.indexOf("(",3);var i=j.indexOf(")",p+1);var m=j.substring(p+1,i).split(",");if(m.length!=4||j.charAt(3)!="a"){m[3]=1}return m}function c(i){return parseFloat(i)/100}function r(j,m,i){return Math.min(i,Math.max(m,j))}function I(ag){var i,ai,aj,ah,ak,Z;ah=parseFloat(ag[0])/360%360;if(ah<0){ah++}ak=r(c(ag[1]),0,1);Z=r(c(ag[2]),0,1);if(ak==0){i=ai=aj=Z}else{var j=Z<0.5?Z*(1+ak):Z+ak-Z*ak;var m=2*Z-j;i=a(m,j,ah+1/3);ai=a(m,j,ah);aj=a(m,j,ah-1/3)}return"#"+k[Math.floor(i*255)]+k[Math.floor(ai*255)]+k[Math.floor(aj*255)]}function a(j,i,m){if(m<0){m++}if(m>1){m--}if(6*m<1){return j+(i-j)*6*m}else{if(2*m<1){return i}else{if(3*m<2){return j+(i-j)*(2/3-m)*6}else{return j}}}}var C={};function F(j){if(j in C){return C[j]}var ag,Z=1;j=String(j);if(j.charAt(0)=="#"){ag=j}else{if(/^rgb/.test(j)){var p=M(j);var ag="#",ah;for(var m=0;m<3;m++){if(p[m].indexOf("%")!=-1){ah=Math.floor(c(p[m])*255)}else{ah=+p[m]}ag+=k[r(ah,0,255)]}Z=+p[3]}else{if(/^hsl/.test(j)){var p=M(j);ag=I(p);Z=p[3]}else{ag=b[j]||j}}}return C[j]={color:ag,alpha:Z}}var o={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var L={};function E(i){if(L[i]){return L[i]}var p=document.createElement("div");var m=p.style;try{m.font=i}catch(j){}return L[i]={style:m.fontStyle||o.style,variant:m.fontVariant||o.variant,weight:m.fontWeight||o.weight,size:m.fontSize||o.size,family:m.fontFamily||o.family}}function u(m,j){var i={};for(var ah in m){i[ah]=m[ah]}var ag=parseFloat(j.currentStyle.fontSize),Z=parseFloat(m.size);if(typeof m.size=="number"){i.size=m.size}else{if(m.size.indexOf("px")!=-1){i.size=Z}else{if(m.size.indexOf("em")!=-1){i.size=ag*Z}else{if(m.size.indexOf("%")!=-1){i.size=(ag/100)*Z}else{if(m.size.indexOf("pt")!=-1){i.size=Z/0.75}else{i.size=ag}}}}}i.size*=0.981;i.family="'"+i.family.replace(/(\'|\")/g,"").replace(/\s*,\s*/g,"', '")+"'";return i}function ac(i){return i.style+" "+i.variant+" "+i.weight+" "+i.size+"px "+i.family}var s={butt:"flat",round:"round"};function S(i){return s[i]||"square"}function D(i){this.m_=B();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=d*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var m="width:"+i.clientWidth+"px;height:"+i.clientHeight+"px;overflow:hidden;position:absolute";var j=i.ownerDocument.createElement("div");j.style.cssText=m;i.appendChild(j);var p=j.cloneNode(false);p.style.backgroundColor="red";p.style.filter="alpha(opacity=0)";i.appendChild(p);this.element_=j;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var q=D.prototype;q.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};q.beginPath=function(){this.currentPath_=[]};q.moveTo=function(j,i){var m=V(this,j,i);this.currentPath_.push({type:"moveTo",x:m.x,y:m.y});this.currentX_=m.x;this.currentY_=m.y};q.lineTo=function(j,i){var m=V(this,j,i);this.currentPath_.push({type:"lineTo",x:m.x,y:m.y});this.currentX_=m.x;this.currentY_=m.y};q.bezierCurveTo=function(m,j,ak,aj,ai,ag){var i=V(this,ai,ag);var ah=V(this,m,j);var Z=V(this,ak,aj);K(this,ah,Z,i)};function K(i,Z,m,j){i.currentPath_.push({type:"bezierCurveTo",cp1x:Z.x,cp1y:Z.y,cp2x:m.x,cp2y:m.y,x:j.x,y:j.y});i.currentX_=j.x;i.currentY_=j.y}q.quadraticCurveTo=function(ai,m,j,i){var ah=V(this,ai,m);var ag=V(this,j,i);var aj={x:this.currentX_+2/3*(ah.x-this.currentX_),y:this.currentY_+2/3*(ah.y-this.currentY_)};var Z={x:aj.x+(ag.x-this.currentX_)/3,y:aj.y+(ag.y-this.currentY_)/3};K(this,aj,Z,ag)};q.arc=function(al,aj,ak,ag,j,m){ak*=d;var ap=m?"at":"wa";var am=al+A(ag)*ak-f;var ao=aj+l(ag)*ak-f;var i=al+A(j)*ak-f;var an=aj+l(j)*ak-f;if(am==i&&!m){am+=0.125}var Z=V(this,al,aj);var ai=V(this,am,ao);var ah=V(this,i,an);this.currentPath_.push({type:ap,x:Z.x,y:Z.y,radius:ak,xStart:ai.x,yStart:ai.y,xEnd:ah.x,yEnd:ah.y})};q.rect=function(m,j,i,p){this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath()};q.strokeRect=function(m,j,i,p){var Z=this.currentPath_;this.beginPath();this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath();this.stroke();this.currentPath_=Z};q.fillRect=function(m,j,i,p){var Z=this.currentPath_;this.beginPath();this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath();this.fill();this.currentPath_=Z};q.createLinearGradient=function(j,p,i,m){var Z=new U("gradient");Z.x0_=j;Z.y0_=p;Z.x1_=i;Z.y1_=m;return Z};q.createRadialGradient=function(p,ag,m,j,Z,i){var ah=new U("gradientradial");ah.x0_=p;ah.y0_=ag;ah.r0_=m;ah.x1_=j;ah.y1_=Z;ah.r1_=i;return ah};q.drawImage=function(aq,m){var aj,ah,al,ay,ao,am,at,aA;var ak=aq.runtimeStyle.width;var ap=aq.runtimeStyle.height;aq.runtimeStyle.width="auto";aq.runtimeStyle.height="auto";var ai=aq.width;var aw=aq.height;aq.runtimeStyle.width=ak;aq.runtimeStyle.height=ap;if(arguments.length==3){aj=arguments[1];ah=arguments[2];ao=am=0;at=al=ai;aA=ay=aw}else{if(arguments.length==5){aj=arguments[1];ah=arguments[2];al=arguments[3];ay=arguments[4];ao=am=0;at=ai;aA=aw}else{if(arguments.length==9){ao=arguments[1];am=arguments[2];at=arguments[3];aA=arguments[4];aj=arguments[5];ah=arguments[6];al=arguments[7];ay=arguments[8]}else{throw Error("Invalid number of arguments")}}}var az=V(this,aj,ah);var p=at/2;var j=aA/2;var ax=[];var i=10;var ag=10;ax.push(" <g_vml_:group",' coordsize="',d*i,",",d*ag,'"',' coordorigin="0,0"',' style="width:',i,"px;height:",ag,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var Z=[];Z.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",n(az.x/d),",","Dy=",n(az.y/d),"");var av=az;var au=V(this,aj+al,ah);var ar=V(this,aj,ah+ay);var an=V(this,aj+al,ah+ay);av.x=ab.max(av.x,au.x,ar.x,an.x);av.y=ab.max(av.y,au.y,ar.y,an.y);ax.push("padding:0 ",n(av.x/d),"px ",n(av.y/d),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",Z.join(""),", sizingmethod='clip');")}else{ax.push("top:",n(az.y/d),"px;left:",n(az.x/d),"px;")}ax.push(' ">','<g_vml_:image src="',aq.src,'"',' style="width:',d*al,"px;"," height:",d*ay,'px"',' cropleft="',ao/ai,'"',' croptop="',am/aw,'"',' cropright="',(ai-ao-at)/ai,'"',' cropbottom="',(aw-am-aA)/aw,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",ax.join(""))};q.stroke=function(al){var aj=[];var Z=false;var m=10;var am=10;aj.push("<g_vml_:shape",' filled="',!!al,'"',' style="position:absolute;width:',m,"px;height:",am,'px;"',' coordorigin="0,0"',' coordsize="',d*m,",",d*am,'"',' stroked="',!al,'"',' path="');var an=false;var ag={x:null,y:null};var ak={x:null,y:null};for(var ah=0;ah<this.currentPath_.length;ah++){var j=this.currentPath_[ah];var ai;switch(j.type){case"moveTo":ai=j;aj.push(" m ",n(j.x),",",n(j.y));break;case"lineTo":aj.push(" l ",n(j.x),",",n(j.y));break;case"close":aj.push(" x ");j=null;break;case"bezierCurveTo":aj.push(" c ",n(j.cp1x),",",n(j.cp1y),",",n(j.cp2x),",",n(j.cp2y),",",n(j.x),",",n(j.y));break;case"at":case"wa":aj.push(" ",j.type," ",n(j.x-this.arcScaleX_*j.radius),",",n(j.y-this.arcScaleY_*j.radius)," ",n(j.x+this.arcScaleX_*j.radius),",",n(j.y+this.arcScaleY_*j.radius)," ",n(j.xStart),",",n(j.yStart)," ",n(j.xEnd),",",n(j.yEnd));break}if(j){if(ag.x==null||j.x<ag.x){ag.x=j.x}if(ak.x==null||j.x>ak.x){ak.x=j.x}if(ag.y==null||j.y<ag.y){ag.y=j.y}if(ak.y==null||j.y>ak.y){ak.y=j.y}}}aj.push(' ">');if(!al){w(this,aj)}else{G(this,aj,ag,ak)}aj.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",aj.join(""))};function w(m,ag){var j=F(m.strokeStyle);var p=j.color;var Z=j.alpha*m.globalAlpha;var i=m.lineScale_*m.lineWidth;if(i<1){Z*=i}ag.push("<g_vml_:stroke",' opacity="',Z,'"',' joinstyle="',m.lineJoin,'"',' miterlimit="',m.miterLimit,'"',' endcap="',S(m.lineCap),'"',' weight="',i,'px"',' color="',p,'" />')}function G(aq,ai,aK,ar){var aj=aq.fillStyle;var aB=aq.arcScaleX_;var aA=aq.arcScaleY_;var j=ar.x-aK.x;var p=ar.y-aK.y;if(aj instanceof U){var an=0;var aF={x:0,y:0};var ax=0;var am=1;if(aj.type_=="gradient"){var al=aj.x0_/aB;var m=aj.y0_/aA;var ak=aj.x1_/aB;var aM=aj.y1_/aA;var aJ=V(aq,al,m);var aI=V(aq,ak,aM);var ag=aI.x-aJ.x;var Z=aI.y-aJ.y;an=Math.atan2(ag,Z)*180/Math.PI;if(an<0){an+=360}if(an<0.000001){an=0}}else{var aJ=V(aq,aj.x0_,aj.y0_);aF={x:(aJ.x-aK.x)/j,y:(aJ.y-aK.y)/p};j/=aB*d;p/=aA*d;var aD=ab.max(j,p);ax=2*aj.r0_/aD;am=2*aj.r1_/aD-ax}var av=aj.colors_;av.sort(function(aN,i){return aN.offset-i.offset});var ap=av.length;var au=av[0].color;var at=av[ap-1].color;var az=av[0].alpha*aq.globalAlpha;var ay=av[ap-1].alpha*aq.globalAlpha;var aE=[];for(var aH=0;aH<ap;aH++){var ao=av[aH];aE.push(ao.offset*am+ax+" "+ao.color)}ai.push('<g_vml_:fill type="',aj.type_,'"',' method="none" focus="100%"',' color="',au,'"',' color2="',at,'"',' colors="',aE.join(","),'"',' opacity="',ay,'"',' g_o_:opacity2="',az,'"',' angle="',an,'"',' focusposition="',aF.x,",",aF.y,'" />')}else{if(aj instanceof T){if(j&&p){var ah=-aK.x;var aC=-aK.y;ai.push("<g_vml_:fill",' position="',ah/j*aB*aB,",",aC/p*aA*aA,'"',' type="tile"',' src="',aj.src_,'" />')}}else{var aL=F(aq.fillStyle);var aw=aL.color;var aG=aL.alpha*aq.globalAlpha;ai.push('<g_vml_:fill color="',aw,'" opacity="',aG,'" />')}}}q.fill=function(){this.stroke(true)};q.closePath=function(){this.currentPath_.push({type:"close"})};function V(j,Z,p){var i=j.m_;return{x:d*(Z*i[0][0]+p*i[1][0]+i[2][0])-f,y:d*(Z*i[0][1]+p*i[1][1]+i[2][1])-f}}q.save=function(){var i={};v(this,i);this.aStack_.push(i);this.mStack_.push(this.m_);this.m_=J(B(),this.m_)};q.restore=function(){if(this.aStack_.length){v(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function h(i){return isFinite(i[0][0])&&isFinite(i[0][1])&&isFinite(i[1][0])&&isFinite(i[1][1])&&isFinite(i[2][0])&&isFinite(i[2][1])}function aa(j,i,p){if(!h(i)){return}j.m_=i;if(p){var Z=i[0][0]*i[1][1]-i[0][1]*i[1][0];j.lineScale_=N(H(Z))}}q.translate=function(m,j){var i=[[1,0,0],[0,1,0],[m,j,1]];aa(this,J(i,this.m_),false)};q.rotate=function(j){var p=A(j);var m=l(j);var i=[[p,m,0],[-m,p,0],[0,0,1]];aa(this,J(i,this.m_),false)};q.scale=function(m,j){this.arcScaleX_*=m;this.arcScaleY_*=j;var i=[[m,0,0],[0,j,0],[0,0,1]];aa(this,J(i,this.m_),true)};q.transform=function(Z,p,ah,ag,j,i){var m=[[Z,p,0],[ah,ag,0],[j,i,1]];aa(this,J(m,this.m_),true)};q.setTransform=function(ag,Z,ai,ah,p,j){var i=[[ag,Z,0],[ai,ah,0],[p,j,1]];aa(this,i,true)};q.drawText_=function(am,ak,aj,ap,ai){var ao=this.m_,at=1000,j=0,ar=at,ah={x:0,y:0},ag=[];var i=u(E(this.font),this.element_);var p=ac(i);var au=this.element_.currentStyle;var Z=this.textAlign.toLowerCase();switch(Z){case"left":case"center":case"right":break;case"end":Z=au.direction=="ltr"?"right":"left";break;case"start":Z=au.direction=="rtl"?"right":"left";break;default:Z="left"}switch(this.textBaseline){case"hanging":case"top":ah.y=i.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":ah.y=-i.size/2.25;break}switch(Z){case"right":j=at;ar=0.05;break;case"center":j=ar=at/2;break}var aq=V(this,ak+ah.x,aj+ah.y);ag.push('<g_vml_:line from="',-j,' 0" to="',ar,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!ai,'" stroked="',!!ai,'" style="position:absolute;width:1px;height:1px;">');if(ai){w(this,ag)}else{G(this,ag,{x:-j,y:0},{x:ar,y:i.size})}var an=ao[0][0].toFixed(3)+","+ao[1][0].toFixed(3)+","+ao[0][1].toFixed(3)+","+ao[1][1].toFixed(3)+",0,0";var al=n(aq.x/d+1-ao[0][0])+","+n(aq.y/d-2*ao[1][0]);ag.push('<g_vml_:skew on="t" matrix="',an,'" ',' offset="',al,'" origin="',j,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',af(am),'" style="v-text-align:',Z,";font:",af(p),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",ag.join(""))};q.fillText=function(m,i,p,j){this.drawText_(m,i,p,j,false)};q.strokeText=function(m,i,p,j){this.drawText_(m,i,p,j,true)};q.measureText=function(m){if(!this.textMeasureEl_){var i='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",i);this.textMeasureEl_=this.element_.lastChild}var j=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(j.createTextNode(m));return{width:this.textMeasureEl_.offsetWidth}};q.clip=function(){};q.arcTo=function(){};q.createPattern=function(j,i){return new T(j,i)};function U(i){this.type_=i;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}U.prototype.addColorStop=function(j,i){i=F(i);this.colors_.push({offset:j,color:i.color,alpha:i.alpha})};function T(j,i){Q(j);switch(i){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=i;break;default:O("SYNTAX_ERR")}this.src_=j.src;this.width_=j.width;this.height_=j.height}function O(i){throw new P(i)}function Q(i){if(!i||i.nodeType!=1||i.tagName!="IMG"){O("TYPE_MISMATCH_ERR")}if(i.readyState!="complete"){O("INVALID_STATE_ERR")}}function P(i){this.code=this[i];this.message=i+": DOM Exception "+this.code}var X=P.prototype=new Error;X.INDEX_SIZE_ERR=1;X.DOMSTRING_SIZE_ERR=2;X.HIERARCHY_REQUEST_ERR=3;X.WRONG_DOCUMENT_ERR=4;X.INVALID_CHARACTER_ERR=5;X.NO_DATA_ALLOWED_ERR=6;X.NO_MODIFICATION_ALLOWED_ERR=7;X.NOT_FOUND_ERR=8;X.NOT_SUPPORTED_ERR=9;X.INUSE_ATTRIBUTE_ERR=10;X.INVALID_STATE_ERR=11;X.SYNTAX_ERR=12;X.INVALID_MODIFICATION_ERR=13;X.NAMESPACE_ERR=14;X.INVALID_ACCESS_ERR=15;X.VALIDATION_ERR=16;X.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=e;CanvasRenderingContext2D=D;CanvasGradient=U;CanvasPattern=T;DOMException=P;G_vmlCanvasManager._version=888})()}; \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/js/jqplot/jquery.jqplot.min.css b/wp-content/plugins/wp-piwik/js/jqplot/jquery.jqplot.min.css index fdcc1949afc754ce8bc1028aea61a51eafeeff1c..f98d913dd847a009c557f06f36266ca91b03c7ae 100644 --- a/wp-content/plugins/wp-piwik/js/jqplot/jquery.jqplot.min.css +++ b/wp-content/plugins/wp-piwik/js/jqplot/jquery.jqplot.min.css @@ -1 +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{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{position:absolute;}.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-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-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-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;position:absolute;}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-table-legend>div{border:1px solid #ccc;padding:.2em;}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:.35em;border-bottom-width:.35em;border-left-width:.6em;border-right-width:.6em;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{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;}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center;}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em;} \ No newline at end of file +.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;}.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/wp-content/plugins/wp-piwik/js/jqplot/jquery.jqplot.min.js b/wp-content/plugins/wp-piwik/js/jqplot/jquery.jqplot.min.js index 7b2adb076cb88eaf8cf5024b949db52b7f477ec6..844bb0eb225f7bd6af9ab1e96a3d5eff5e0fb88e 100644 --- a/wp-content/plugins/wp-piwik/js/jqplot/jquery.jqplot.min.js +++ b/wp-content/plugins/wp-piwik/js/jqplot/jquery.jqplot.min.js @@ -1,14 +1,57 @@ /** - * Copyright (c) 2009 Chris Leonello + * jqPlot + * Pure JavaScript plotting plugin using jQuery + * + * Version: 1.0.0b2_r947 + * + * Copyright (c) 2009-2011 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 + * 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 dot leonello at gmail dot com or see http://www.jqplot.com/info.php . + * chris at jqplot dot com or see http://www.jqplot.com/info.php . * * If you are feeling kind and generous, consider supporting the project by * making a donation at: http://www.jqplot.com/donate.php . + * + * sprintf functions contained in jqplot.sprintf.js by Ash Searle: + * + * version 2007.04.27 + * author Ash Searle + * http://hexmen.com/blog/2007/03/printf-sprintf/ + * http://hexmen.com/js/sprintf.js + * The author (Ash Searle) has placed this code in the public domain: + * "This code is unrestricted: you are free to use it however you like." + * + * included jsDate library by Chris Leonello: + * + * Copyright (c) 2010-2011 Chris Leonello + * + * jsDate is currently available for use in all personal or commercial projects + * under both the MIT and GPL version 2.0 licenses. This means that you can + * choose the license that best suits your project and use it accordingly. + * + * jsDate borrows many concepts and ideas from the Date Instance + * Methods by Ken Snyder along with some parts of Ken's actual code. + * + * Ken's origianl Date Instance Methods and copyright notice: + * + * Ken Snyder (ken d snyder at gmail dot com) + * 2008-09-10 + * version 2.0.2 (http://kendsnyder.com/sandbox/date/) + * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) + * + * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. + * Larry has generously given permission to adapt his code for inclusion + * into jqPlot. + * + * Larry's original code can be found here: + * + * https://github.com/lsiden/export-jqplot-to-png + * + * */ -(function(h){var c;h.jqplot=function(A,y,w){var x,v;if(y==null){throw"No data specified"}if(y.constructor==Array&&y.length==0||y[0].constructor!=Array){throw"Improper Data Array"}if(w==null){if(y instanceof Array){x=y;v=null}else{if(y.constructor==Object){x=null;v=y}}}else{x=y;v=w}var z=new n();z.init(A,x,v);z.draw();return z};h.jqplot.debug=1;h.jqplot.config={debug:1,enablePlugins:true,defaultHeight:300,defaultWidth:400};h.jqplot.enablePlugins=h.jqplot.config.enablePlugins;h.jqplot.preInitHooks=[];h.jqplot.postInitHooks=[];h.jqplot.preParseOptionsHooks=[];h.jqplot.postParseOptionsHooks=[];h.jqplot.preDrawHooks=[];h.jqplot.postDrawHooks=[];h.jqplot.preDrawSeriesHooks=[];h.jqplot.postDrawSeriesHooks=[];h.jqplot.preDrawLegendHooks=[];h.jqplot.addLegendRowHooks=[];h.jqplot.preSeriesInitHooks=[];h.jqplot.postSeriesInitHooks=[];h.jqplot.preParseSeriesOptionsHooks=[];h.jqplot.postParseSeriesOptionsHooks=[];h.jqplot.eventListenerHooks=[];h.jqplot.preDrawSeriesShadowHooks=[];h.jqplot.postDrawSeriesShadowHooks=[];h.jqplot.ElemContainer=function(){this._elem;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null}};h.jqplot.ElemContainer.prototype.getWidth=function(){if(this._elem){return this._elem.outerWidth(true)}else{return null}};h.jqplot.ElemContainer.prototype.getHeight=function(){if(this._elem){return this._elem.outerHeight(true)}else{return null}};h.jqplot.ElemContainer.prototype.getPosition=function(){if(this._elem){return this._elem.position()}else{return{top:null,left:null,bottom:null,right:null}}};h.jqplot.ElemContainer.prototype.getTop=function(){return this.getPosition().top};h.jqplot.ElemContainer.prototype.getLeft=function(){return this.getPosition().left};h.jqplot.ElemContainer.prototype.getBottom=function(){return this._elem.css("bottom")};h.jqplot.ElemContainer.prototype.getRight=function(){return this._elem.css("right")};function l(v){h.jqplot.ElemContainer.call(this);this.name=v;this._series=[];this.show=false;this.tickRenderer=h.jqplot.AxisTickRenderer;this.tickOptions={};this.labelRenderer=h.jqplot.AxisLabelRenderer;this.labelOptions={};this.label=null;this.showLabel=true;this.min=null;this.max=null;this.autoscale=false;this.pad=1.2;this.padMax=null;this.padMin=null;this.ticks=[];this.numberTicks;this.tickInterval;this.renderer=h.jqplot.LinearAxisRenderer;this.rendererOptions={};this.showTicks=true;this.showTickMarks=true;this.showMinorTicks=true;this.useSeriesColor=false;this.borderWidth=null;this.borderColor=null;this._dataBounds={min:null,max:null};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}l.prototype=new h.jqplot.ElemContainer();l.prototype.constructor=l;l.prototype.init=function(){this.renderer=new this.renderer();this.tickOptions.axis=this.name;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)};l.prototype.draw=function(v){return this.renderer.draw.call(this,v)};l.prototype.set=function(){this.renderer.set.call(this)};l.prototype.pack=function(w,v){if(this.show){this.renderer.pack.call(this,w,v)}if(this._min==null){this._min=this.min;this._max=this.max;this._tickInterval=this.tickInterval;this._numberTicks=this.numberTicks;this.__ticks=this._ticks}};l.prototype.reset=function(){this.renderer.reset.call(this)};l.prototype.resetScale=function(){this.min=null;this.max=null;this.numberTicks=null;this.tickInterval=null};function b(v){h.jqplot.ElemContainer.call(this);this.show=false;this.location="ne";this.xoffset=12;this.yoffset=12;this.border;this.background;this.textColor;this.fontFamily;this.fontSize;this.rowSpacing="0.5em";this.renderer=h.jqplot.TableLegendRenderer;this.rendererOptions={};this.preDraw=false;this.escapeHtml=false;this._series=[];h.extend(true,this,v)}b.prototype=new h.jqplot.ElemContainer();b.prototype.constructor=b;b.prototype.init=function(){this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions)};b.prototype.draw=function(w){for(var v=0;v<h.jqplot.preDrawLegendHooks.length;v++){h.jqplot.preDrawLegendHooks[v].call(this,w)}return this.renderer.draw.call(this,w)};b.prototype.pack=function(v){this.renderer.pack.call(this,v)};function k(v){h.jqplot.ElemContainer.call(this);this.text=v;this.show=true;this.fontFamily;this.fontSize;this.textAlign;this.textColor;this.renderer=h.jqplot.DivTitleRenderer;this.rendererOptions={}}k.prototype=new h.jqplot.ElemContainer();k.prototype.constructor=k;k.prototype.init=function(){this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions)};k.prototype.draw=function(v){return this.renderer.draw.call(this,v)};k.prototype.pack=function(){this.renderer.pack.call(this)};function o(){h.jqplot.ElemContainer.call(this);this.show=true;this.xaxis="xaxis";this._xaxis;this.yaxis="yaxis";this._yaxis;this.gridBorderWidth=2;this.renderer=h.jqplot.LineRenderer;this.rendererOptions={};this.data=[];this.gridData=[];this.label="";this.showLabel=true;this.color;this.lineWidth=2.5;this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.25;this.shadowDepth=3;this.shadowAlpha="0.1";this.breakOnNull=false;this.markerRenderer=h.jqplot.MarkerRenderer;this.markerOptions={};this.showLine=true;this.showMarker=true;this.index;this.fill=false;this.fillColor;this.fillAlpha;this.fillAndStroke=false;this.disableStack=false;this._stack=false;this.neighborThreshold=4;this.fillToZero=false;this.fillAxis="y";this.useNegativeColors=true;this._stackData=[];this._plotData=[];this._plotValues={x:[],y:[]};this._intervals={x:{},y:{}};this._prevPlotData=[];this._prevGridData=[];this._stackAxis="y";this._primaryAxis="_xaxis";this.canvas=new h.jqplot.GenericCanvas();this.shadowCanvas=new h.jqplot.GenericCanvas();this.plugins={};this._sumy=0;this._sumx=0}o.prototype=new h.jqplot.ElemContainer();o.prototype.constructor=o;o.prototype.init=function(w,B,y){this.index=w;this.gridBorderWidth=B;var A=this.data;for(var x=0;x<A.length;x++){if(!this.breakOnNull){if(A[x]==null||A[x][0]==null||A[x][1]==null){A.splice(x,1);continue}}else{if(A[x]==null||A[x][0]==null||A[x][1]==null){var z}}}if(!this.fillColor){this.fillColor=this.color}if(this.fillAlpha){var v=h.jqplot.normalize2rgb(this.fillColor);var v=h.jqplot.getColorComponents(v);this.fillColor="rgba("+v[0]+","+v[1]+","+v[2]+","+this.fillAlpha+")"}this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions,y);this.markerRenderer=new this.markerRenderer();if(!this.markerOptions.color){this.markerOptions.color=this.color}if(this.markerOptions.show==null){this.markerOptions.show=this.showMarker}this.markerRenderer.init(this.markerOptions)};o.prototype.draw=function(B,y,A){var w=(y==c)?{}:y;B=(B==c)?this.canvas._ctx:B;for(var v=0;v<h.jqplot.preDrawSeriesHooks.length;v++){h.jqplot.preDrawSeriesHooks[v].call(this,B,w)}if(this.show){this.renderer.setGridData.call(this,A);if(!w.preventJqPlotSeriesDrawTrigger){h(B.canvas).trigger("jqplotSeriesDraw",[this.data,this.gridData])}var z=[];if(w.data){z=w.data}else{if(!this._stack){z=this.data}else{z=this._plotData}}var x=w.gridData||this.renderer.makeGridData.call(this,z,A);this.renderer.draw.call(this,B,x,w)}for(var v=0;v<h.jqplot.postDrawSeriesHooks.length;v++){h.jqplot.postDrawSeriesHooks[v].call(this,B,w)}};o.prototype.drawShadow=function(B,y,A){var w=(y==c)?{}:y;B=(B==c)?this.shadowCanvas._ctx:B;for(var v=0;v<h.jqplot.preDrawSeriesShadowHooks.length;v++){h.jqplot.preDrawSeriesShadowHooks[v].call(this,B,w)}if(this.shadow){this.renderer.setGridData.call(this,A);var z=[];if(w.data){z=w.data}else{if(!this._stack){z=this.data}else{z=this._plotData}}var x=w.gridData||this.renderer.makeGridData.call(this,z,A);this.renderer.drawShadow.call(this,B,x,w)}for(var v=0;v<h.jqplot.postDrawSeriesShadowHooks.length;v++){h.jqplot.postDrawSeriesShadowHooks[v].call(this,B,w)}};function g(){h.jqplot.ElemContainer.call(this);this.drawGridlines=true;this.gridLineColor="#cccccc";this.gridLineWidth=1;this.background="#fffdf6";this.borderColor="#999999";this.borderWidth=2;this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.5;this.shadowWidth=3;this.shadowDepth=3;this.shadowAlpha="0.07";this._left;this._top;this._right;this._bottom;this._width;this._height;this._axes=[];this.renderer=h.jqplot.CanvasGridRenderer;this.rendererOptions={};this._offsets={top:null,bottom:null,left:null,right:null}}g.prototype=new h.jqplot.ElemContainer();g.prototype.constructor=g;g.prototype.init=function(){this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions)};g.prototype.createElement=function(v){this._offsets=v;return this.renderer.createElement.call(this)};g.prototype.draw=function(){this.renderer.draw.call(this)};h.jqplot.GenericCanvas=function(){h.jqplot.ElemContainer.call(this);this._ctx};h.jqplot.GenericCanvas.prototype=new h.jqplot.ElemContainer();h.jqplot.GenericCanvas.prototype.constructor=h.jqplot.GenericCanvas;h.jqplot.GenericCanvas.prototype.createElement=function(z,x,w){this._offsets=z;var v="jqplot";if(x!=c){v=x}var y=document.createElement("canvas");if(w!=c){this._plotDimensions=w}y.width=this._plotDimensions.width-this._offsets.left-this._offsets.right;y.height=this._plotDimensions.height-this._offsets.top-this._offsets.bottom;this._elem=h(y);this._elem.addClass(v);this._elem.css({position:"absolute",left:this._offsets.left,top:this._offsets.top});if(h.browser.msie){window.G_vmlCanvasManager.init_(document)}if(h.browser.msie){y=window.G_vmlCanvasManager.initElement(y)}return this._elem};h.jqplot.GenericCanvas.prototype.setContext=function(){this._ctx=this._elem.get(0).getContext("2d");return this._ctx};function n(){this.data=[];this.targetId=null;this.target=null;this.defaults={axesDefaults:{},axes:{xaxis:{},yaxis:{},x2axis:{},y2axis:{},y3axis:{},y4axis:{},y5axis:{},y6axis:{},y7axis:{},y8axis:{},y9axis:{}},seriesDefaults:{},gridPadding:{top:10,right:10,bottom:23,left:10},series:[]};this.series=[];this.axes={xaxis:new l("xaxis"),yaxis:new l("yaxis"),x2axis:new l("x2axis"),y2axis:new l("y2axis"),y3axis:new l("y3axis"),y4axis:new l("y4axis"),y5axis:new l("y5axis"),y6axis:new l("y6axis"),y7axis:new l("y7axis"),y8axis:new l("y8axis"),y9axis:new l("y9axis")};this.grid=new g();this.legend=new b();this.baseCanvas=new h.jqplot.GenericCanvas();this.eventCanvas=new h.jqplot.GenericCanvas();this._width=null;this._height=null;this._plotDimensions={height:null,width:null};this._gridPadding={top:10,right:10,bottom:10,left:10};this.syncXTicks=true;this.syncYTicks=true;this.seriesColors=["#4bb2c5","#EAA228","#c5b47f","#579575","#839557","#958c12","#953579","#4b5de4","#d8b83f","#ff5800","#0085cc","#c747a3","#cddf54","#FBD178","#26B4E3","#bd70c7"];this.negativeSeriesColors=["#498991","#C08840","#9F9274","#546D61","#646C4A","#6F6621","#6E3F5F","#4F64B0","#A89050","#C45923","#187399","#945381","#959E5C","#C7AF7B","#478396","#907294"];this.sortData=true;var y=0;this.textColor;this.fontFamily;this.fontSize;this.title=new k();this.options={};this.stackSeries=false;this._stackData=[];this._plotData=[];this.plugins={};this._drawCount=0;this.drawIfHidden=false;this._sumy=0;this._sumx=0;this.colorGenerator=h.jqplot.ColorGenerator;this.init=function(G,F,C){for(var D=0;D<h.jqplot.preInitHooks.length;D++){h.jqplot.preInitHooks[D].call(this,G,F,C)}this.targetId="#"+G;this.target=h("#"+G);if(!this.target.get(0)){throw"No plot target specified"}if(this.target.css("position")=="static"){this.target.css("position","relative")}if(!this.target.hasClass("jqplot-target")){this.target.addClass("jqplot-target")}if(!this.target.height()){var E;if(C&&C.height){E=parseInt(C.height,10)}else{if(this.target.attr("data-height")){E=parseInt(this.target.attr("data-height"),10)}else{E=parseInt(h.jqplot.config.defaultHeight,10)}}this._height=E;this.target.css("height",E+"px")}else{this._height=this.target.height()}if(!this.target.width()){var z;if(C&&C.width){z=parseInt(C.width,10)}else{if(this.target.attr("data-width")){z=parseInt(this.target.attr("data-width"),10)}else{z=parseInt(h.jqplot.config.defaultWidth,10)}}this._width=z;this.target.css("width",z+"px")}else{this._width=this.target.width()}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Canvas dimension not set"}this.data=F;this.parseOptions(C);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;for(var D=0;D<this.series.length;D++){this.series[D].shadowCanvas._plotDimensions=this._plotDimensions;this.series[D].canvas._plotDimensions=this._plotDimensions;for(var B=0;B<h.jqplot.preSeriesInitHooks.length;B++){h.jqplot.preSeriesInitHooks[B].call(this.series[D],G,F,this.options.seriesDefaults,this.options.series[D])}this.populatePlotData(this.series[D],D);this.series[D]._plotDimensions=this._plotDimensions;this.series[D].init(D,this.grid.borderWidth,this);for(var B=0;B<h.jqplot.postSeriesInitHooks.length;B++){h.jqplot.postSeriesInitHooks[B].call(this.series[D],G,F,this.options.seriesDefaults,this.options.series[D])}this._sumy+=this.series[D]._sumy;this._sumx+=this.series[D]._sumx}for(var A in this.axes){this.axes[A]._plotDimensions=this._plotDimensions;this.axes[A].init()}if(this.sortData){v(this.series)}this.grid.init();this.grid._axes=this.axes;this.legend._series=this.series;for(var D=0;D<h.jqplot.postInitHooks.length;D++){h.jqplot.postInitHooks[D].call(this,G,F,C)}};this.resetAxesScale=function(C){var B=(C!=c)?C:this.axes;if(B===true){B=this.axes}if(B.constructor===Array){for(var A=0;A<B.length;A++){this.axes[B[A]].resetScale()}}else{if(B.constructor===Object){for(var z in B){this.axes[z].resetScale()}}}};this.reInitialize=function(){if(!this.target.height()){var D;if(options&&options.height){D=parseInt(options.height,10)}else{if(this.target.attr("data-height")){D=parseInt(this.target.attr("data-height"),10)}else{D=parseInt(h.jqplot.config.defaultHeight,10)}}this._height=D;this.target.css("height",D+"px")}else{this._height=this.target.height()}if(!this.target.width()){var z;if(options&&options.width){z=parseInt(options.width,10)}else{if(this.target.attr("data-width")){z=parseInt(this.target.attr("data-width"),10)}else{z=parseInt(h.jqplot.config.defaultWidth,10)}}this._width=z;this.target.css("width",z+"px")}else{this._width=this.target.width()}if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Target dimension not set"}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;for(var E in this.axes){var C=this.axes[E];C._plotWidth=this._width;C._plotHeight=this._height}this.title._plotWidth=this._width;if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this._sumy=0;this._sumx=0;for(var B=0;B<this.series.length;B++){this.populatePlotData(this.series[B],B);this.series[B]._plotDimensions=this._plotDimensions;this.series[B].canvas._plotDimensions=this._plotDimensions;this._sumy+=this.series[B]._sumy;this._sumx+=this.series[B]._sumx}for(var A in this.axes){this.axes[A]._plotDimensions=this._plotDimensions;this.axes[A]._ticks=[];this.axes[A].renderer.init.call(this.axes[A],{})}if(this.sortData){v(this.series)}this.grid._axes=this.axes;this.legend._series=this.series};function v(D){var E,B;for(var C=0;C<D.length;C++){E=D[C].data;var z=true;if(D[C]._stackAxis=="x"){for(var A=0;A<E.length;A++){if(typeof(E[A][1])!="number"){z=false;break}}if(z){E.sort(function(G,F){return G[1]-F[1]})}}else{for(var A=0;A<E.length;A++){if(typeof(E[A][0])!="number"){z=false;break}}if(z){E.sort(function(G,F){return G[0]-F[0]})}}}}this.populatePlotData=function(D,E){this._plotData=[];this._stackData=[];D._stackData=[];D._plotData=[];var H={x:[],y:[]};if(this.stackSeries&&!D.disableStack){D._stack=true;var F=D._stackAxis=="x"?0:1;var G=F?0:1;var I=h.extend(true,[],D.data);var J=h.extend(true,[],D.data);for(var B=0;B<E;B++){var z=this.series[B].data;for(var A=0;A<z.length;A++){I[A][0]+=z[A][0];I[A][1]+=z[A][1];J[A][F]+=z[A][F]}}for(var C=0;C<J.length;C++){H.x.push(J[C][0]);H.y.push(J[C][1])}this._plotData.push(J);this._stackData.push(I);D._stackData=I;D._plotData=J;D._plotValues=H}else{for(var C=0;C<D.data.length;C++){H.x.push(D.data[C][0]);H.y.push(D.data[C][1])}this._stackData.push(D.data);this.series[E]._stackData=D.data;this._plotData.push(D.data);D._plotData=D.data;D._plotValues=H}if(E>0){D._prevPlotData=this.series[E-1]._plotData}D._sumy=0;D._sumx=0;for(C=D.data.length-1;C>-1;C--){D._sumy+=D.data[C][1];D._sumx+=D.data[C][0]}};this.getNextSeriesColor=(function(A){var z=0;var B=A.seriesColors;return function(){if(z<B.length){return B[z++]}else{z=0;return B[z++]}}})(this);this.parseOptions=function(H){for(var E=0;E<h.jqplot.preParseOptionsHooks.length;E++){h.jqplot.preParseOptionsHooks[E].call(this,H)}this.options=h.extend(true,{},this.defaults,H);this.stackSeries=this.options.stackSeries;if(this.options.seriesColors){this.seriesColors=this.options.seriesColors}var z=new this.colorGenerator(this.seriesColors);h.extend(true,this._gridPadding,this.options.gridPadding);this.sortData=(this.options.sortData!=null)?this.options.sortData:this.sortData;for(var A in this.axes){var C=this.axes[A];h.extend(true,C,this.options.axesDefaults,this.options.axes[A]);C._plotWidth=this._width;C._plotHeight=this._height}if(this.data.length==0){this.data=[];for(var E=0;E<this.options.series.length;E++){this.data.push(this.options.series.data)}}var F=function(L,J){var I=[];var K;J=J||"vertical";if(!(L[0] instanceof Array)){for(var K=0;K<L.length;K++){if(J=="vertical"){I.push([K+1,L[K]])}else{I.push([L[K],K+1])}}}else{h.extend(true,I,L)}return I};for(var E=0;E<this.data.length;E++){var G=new o();for(var D=0;D<h.jqplot.preParseSeriesOptionsHooks.length;D++){h.jqplot.preParseSeriesOptionsHooks[D].call(G,this.options.seriesDefaults,this.options.series[E])}h.extend(true,G,{seriesColors:this.seriesColors,negativeSeriesColors:this.negativeSeriesColors},this.options.seriesDefaults,this.options.series[E]);var B="vertical";if(G.renderer.constructor==h.jqplot.barRenderer&&G.rendererOptions&&G.rendererOptions.barDirection=="horizontal"){B="horizontal"}G.data=F(this.data[E],B);switch(G.xaxis){case"xaxis":G._xaxis=this.axes.xaxis;break;case"x2axis":G._xaxis=this.axes.x2axis;break;default:break}G._yaxis=this.axes[G.yaxis];G._xaxis._series.push(G);G._yaxis._series.push(G);if(G.show){G._xaxis.show=true;G._yaxis.show=true}if(!G.color&&G.show!=false){G.color=z.next()}if(!G.label){G.label="Series "+(E+1).toString()}this.series.push(G);for(var D=0;D<h.jqplot.postParseSeriesOptionsHooks.length;D++){h.jqplot.postParseSeriesOptionsHooks[D].call(this.series[E],this.options.seriesDefaults,this.options.series[E])}}h.extend(true,this.grid,this.options.grid);for(var A in this.axes){var C=this.axes[A];if(C.borderWidth==null){C.borderWidth=this.grid.borderWidth}if(C.borderColor==null){if(A!="xaxis"&&A!="x2axis"&&C.useSeriesColor===true&&C.show){C.borderColor=C._series[0].color}else{C.borderColor=this.grid.borderColor}}}if(typeof this.options.title=="string"){this.title.text=this.options.title}else{if(typeof this.options.title=="object"){h.extend(true,this.title,this.options.title)}}this.title._plotWidth=this._width;h.extend(true,this.legend,this.options.legend);for(var E=0;E<h.jqplot.postParseOptionsHooks.length;E++){h.jqplot.postParseOptionsHooks[E].call(this,H)}};this.replot=function(A){var B=(A!=c)?A:{};var z=(B.clear!=c)?B.clear:true;var C=(B.resetAxes!=c)?B.resetAxes:false;this.target.trigger("jqplotPreReplot");if(z){this.target.empty()}if(C){this.resetAxesScale(C)}this.reInitialize();this.draw();this.target.trigger("jqplotPostReplot")};this.redraw=function(z){z=(z!=null)?z:true;this.target.trigger("jqplotPreRedraw");if(z){this.target.empty()}for(var B in this.axes){this.axes[B]._ticks=[]}for(var A=0;A<this.series.length;A++){this.populatePlotData(this.series[A],A)}this._sumy=0;this._sumx=0;for(A=0;A<this.series.length;A++){this._sumy+=this.series[A]._sumy;this._sumx+=this.series[A]._sumx}this.draw();this.target.trigger("jqplotPostRedraw")};this.draw=function(){if(this.drawIfHidden||this.target.is(":visible")){this.target.trigger("jqplotPreDraw");var F;for(F=0;F<h.jqplot.preDrawHooks.length;F++){h.jqplot.preDrawHooks[F].call(this)}this.target.append(this.baseCanvas.createElement({left:0,right:0,top:0,bottom:0},"jqplot-base-canvas"));var E=this.baseCanvas.setContext();this.target.append(this.title.draw());this.title.pack({top:0,left:0});for(var B in this.axes){this.target.append(this.axes[B].draw(E));this.axes[B].set()}if(this.axes.yaxis.show){this._gridPadding.left=this.axes.yaxis.getWidth()}var C=["y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];var A=[0,0,0,0];var H=0;var D,z;for(D=8;D>0;D--){z=this.axes[C[D-1]];if(z.show){A[D-1]=H;H+=z.getWidth()}}if(H>this._gridPadding.right){this._gridPadding.right=H}if(this.title.show&&this.axes.x2axis.show){this._gridPadding.top=this.title.getHeight()+this.axes.x2axis.getHeight()}else{if(this.title.show){this._gridPadding.top=this.title.getHeight()}else{if(this.axes.x2axis.show){this._gridPadding.top=this.axes.x2axis.getHeight()}}}if(this.axes.xaxis.show){this._gridPadding.bottom=this.axes.xaxis.getHeight()}this.axes.xaxis.pack({position:"absolute",bottom:0,left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});this.axes.yaxis.pack({position:"absolute",top:0,left:0,height:this._height},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top});this.axes.x2axis.pack({position:"absolute",top:this.title.getHeight(),left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});for(F=8;F>0;F--){this.axes[C[F-1]].pack({position:"absolute",top:0,right:A[F-1]},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top})}this.target.append(this.grid.createElement(this._gridPadding));this.grid.draw();for(F=0;F<this.series.length;F++){this.target.append(this.series[F].shadowCanvas.createElement(this._gridPadding,"jqplot-series-canvas jqplot-shadow"));this.series[F].shadowCanvas.setContext()}for(F=0;F<this.series.length;F++){this.target.append(this.series[F].canvas.createElement(this._gridPadding,"jqplot-series-canvas"));this.series[F].canvas.setContext()}this.target.append(this.eventCanvas.createElement(this._gridPadding,"jqplot-event-canvas"));var I=this.eventCanvas.setContext();I.fillStyle="rgba(0,0,0,0)";I.fillRect(0,0,I.canvas.width,I.canvas.height);this.bindCustomEvents();if(this.legend.preDraw){this.target.append(this.legend.draw());this.legend.pack(this._gridPadding);if(this.legend._elem){this.drawSeries({legendInfo:{location:this.legend.location,width:this.legend.getWidth(),height:this.legend.getHeight(),xoffset:this.legend.xoffset,yoffset:this.legend.yoffset}})}else{this.drawSeries()}}else{this.drawSeries();h(this.series[this.series.length-1].canvas._elem).after(this.legend.draw());this.legend.pack(this._gridPadding)}for(var F=0;F<h.jqplot.eventListenerHooks.length;F++){var G=h.jqplot.eventListenerHooks[F];this.eventCanvas._elem.bind(G[0],{plot:this},G[1])}for(var F=0;F<h.jqplot.postDrawHooks.length;F++){h.jqplot.postDrawHooks[F].call(this)}if(this.target.is(":visible")){this._drawCount+=1}this.target.trigger("jqplotPostDraw",[this])}};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("mouseup",{plot:this},this.onMouseUp);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)};function w(H){var G=H.data.plot;var C=G.eventCanvas._elem.offset();var F={x:H.pageX-C.left,y:H.pageY-C.top};var D={xaxis:null,yaxis:null,x2axis:null,y2axis:null,y3axis:null,y4axis:null,y5axis:null,y6axis:null,y7axis:null,y8axis:null,y9axis:null};var E=["xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];var z=G.axes;for(var A=11;A>0;A--){var B=E[A-1];if(z[B].show){D[B]=z[B].series_p2u(F[B.charAt(0)])}}return({offsets:C,gridPos:F,dataPos:D})}function x(F,J,I){var G=null;var K,D,B,H,C,A;var E;for(var D=0;D<F.series.length;D++){K=F.series[D];A=K.renderer;if(K.show){E=Math.abs(K.markerRenderer.size/2+K.neighborThreshold);for(var C=0;C<K.gridData.length;C++){p=K.gridData[C];if(A.constructor==h.jqplot.OHLCRenderer){if(A.candleStick){var z=K._yaxis.series_u2p;if(J>=p[0]-A._bodyWidth/2&&J<=p[0]+A._bodyWidth/2&&I>=z(K.data[C][2])&&I<=z(K.data[C][3])){G={seriesIndex:D,pointIndex:C,gridData:p,data:K.data[C]}}}else{if(!A.hlc){var z=K._yaxis.series_u2p;if(J>=p[0]-A._tickLength&&J<=p[0]+A._tickLength&&I>=z(K.data[C][2])&&I<=z(K.data[C][3])){G={seriesIndex:D,pointIndex:C,gridData:p,data:K.data[C]}}}else{var z=K._yaxis.series_u2p;if(J>=p[0]-A._tickLength&&J<=p[0]+A._tickLength&&I>=z(K.data[C][1])&&I<=z(K.data[C][2])){G={seriesIndex:D,pointIndex:C,gridData:p,data:K.data[C]}}}}}else{H=Math.sqrt((J-p[0])*(J-p[0])+(I-p[1])*(I-p[1]));if(H<=E&&(H<=B||B==null)){B=H;G={seriesIndex:D,pointIndex:C,gridData:p,data:K.data[C]}}}}}}return G}this.onClick=function(A){var z=w(A);var C=A.data.plot;var B=x(C,z.gridPos.x,z.gridPos.y);A.data.plot.eventCanvas._elem.trigger("jqplotClick",[z.gridPos,z.dataPos,B,C])};this.onDblClick=function(A){var z=w(A);var C=A.data.plot;var B=x(C,z.gridPos.x,z.gridPos.y);A.data.plot.eventCanvas._elem.trigger("jqplotDblClick",[z.gridPos,z.dataPos,B,C])};this.onMouseDown=function(A){var z=w(A);var C=A.data.plot;var B=x(C,z.gridPos.x,z.gridPos.y);A.data.plot.eventCanvas._elem.trigger("jqplotMouseDown",[z.gridPos,z.dataPos,B,C])};this.onMouseUp=function(A){var z=w(A);A.data.plot.eventCanvas._elem.trigger("jqplotMouseUp",[z.gridPos,z.dataPos,null,A.data.plot])};this.onMouseMove=function(A){var z=w(A);var C=A.data.plot;var B=x(C,z.gridPos.x,z.gridPos.y);A.data.plot.eventCanvas._elem.trigger("jqplotMouseMove",[z.gridPos,z.dataPos,B,C])};this.onMouseEnter=function(A){var z=w(A);var B=A.data.plot;A.data.plot.eventCanvas._elem.trigger("jqplotMouseEnter",[z.gridPos,z.dataPos,null,B])};this.onMouseLeave=function(A){var z=w(A);var B=A.data.plot;A.data.plot.eventCanvas._elem.trigger("jqplotMouseLeave",[z.gridPos,z.dataPos,null,B])};this.drawSeries=function(B,z){var D,C,A;if(z!=c){C=this.series[z];A=C.shadowCanvas._ctx;A.clearRect(0,0,A.canvas.width,A.canvas.height);C.drawShadow(A,B,this);A=C.canvas._ctx;A.clearRect(0,0,A.canvas.width,A.canvas.height);C.draw(A,B,this)}else{for(D=0;D<this.series.length;D++){C=this.series[D];A=C.shadowCanvas._ctx;A.clearRect(0,0,A.canvas.width,A.canvas.height);C.drawShadow(A,B,this);A=C.canvas._ctx;A.clearRect(0,0,A.canvas.width,A.canvas.height);C.draw(A,B,this)}}}}h.jqplot.ColorGenerator=function(w){var v=0;this.next=function(){if(v<w.length){return w[v++]}else{v=0;return w[v++]}};this.previous=function(){if(v>0){return w[v--]}else{v=w.length-1;return w[v]}};this.get=function(x){return w[x]};this.setColors=function(x){w=x};this.reset=function(){v=0}};h.jqplot.hex2rgb=function(x,v){x=x.replace("#","");if(x.length==3){x=x[0]+x[0]+x[1]+x[1]+x[2]+x[2]}var w;w="rgba("+parseInt(x.slice(0,2),16)+", "+parseInt(x.slice(2,4),16)+", "+parseInt(x.slice(4,6),16);if(v){w+=", "+v}w+=")";return w};h.jqplot.rgb2hex=function(z){var x=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *(?:, *[0-9.]*)?\)/;var v=z.match(x);var y="#";for(i=1;i<4;i++){var w;if(v[i].search(/%/)!=-1){w=parseInt(255*v[i]/100,10).toString(16);if(w.length==1){w="0"+w}}else{w=parseInt(v[i],10).toString(16);if(w.length==1){w="0"+w}}y+=w}return y};h.jqplot.normalize2rgb=function(w,v){if(w.search(/^ *rgba?\(/)!=-1){return w}else{if(w.search(/^ *#?[0-9a-fA-F]?[0-9a-fA-F]/)!=-1){return h.jqplot.hex2rgb(w,v)}else{throw"invalid color spec"}}};h.jqplot.getColorComponents=function(z){var y=h.jqplot.normalize2rgb(z);var x=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *,? *([0-9.]* *)?\)/;var v=y.match(x);var w=[];for(i=1;i<4;i++){if(v[i].search(/%/)!=-1){w[i-1]=parseInt(255*v[i]/100,10)}else{w[i-1]=parseInt(v[i],10)}}w[3]=parseFloat(v[4])?parseFloat(v[4]):1;return w};h.jqplot.log=function(){if(window.console&&h.jqplot.debug){if(arguments.length==1){console.log(arguments[0])}else{console.log(arguments)}}};var f=h.jqplot.log;h.jqplot.AxisLabelRenderer=function(v){h.jqplot.ElemContainer.call(this);this.axis;this.show=true;this.label="";this._elem;this.escapeHTML=false;h.extend(true,this,v)};h.jqplot.AxisLabelRenderer.prototype=new h.jqplot.ElemContainer();h.jqplot.AxisLabelRenderer.prototype.constructor=h.jqplot.AxisLabelRenderer;h.jqplot.AxisLabelRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.AxisLabelRenderer.prototype.draw=function(){this._elem=h('<div style="position:absolute;" class="jqplot-'+this.axis+'-label"></div>');if(Number(this.label)){this._elem.css("white-space","nowrap")}if(!this.escapeHTML){this._elem.html(this.label)}else{this._elem.text(this.label)}return this._elem};h.jqplot.AxisLabelRenderer.prototype.pack=function(){};h.jqplot.AxisTickRenderer=function(v){h.jqplot.ElemContainer.call(this);this.mark="outside";this.axis;this.showMark=true;this.showGridline=true;this.isMinorTick=false;this.size=4;this.markSize=6;this.show=true;this.showLabel=true;this.label="";this.value=null;this._styles={};this.formatter=h.jqplot.DefaultTickFormatter;this.formatString="";this.fontFamily;this.fontSize;this.textColor;this._elem;h.extend(true,this,v)};h.jqplot.AxisTickRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.AxisTickRenderer.prototype=new h.jqplot.ElemContainer();h.jqplot.AxisTickRenderer.prototype.constructor=h.jqplot.AxisTickRenderer;h.jqplot.AxisTickRenderer.prototype.setTick=function(v,x,w){this.value=v;this.axis=x;if(w){this.isMinorTick=true}return this};h.jqplot.AxisTickRenderer.prototype.draw=function(){if(!this.label){this.label=this.formatter(this.formatString,this.value)}style='style="position:absolute;';if(Number(this.label)){style+="white-space:nowrap;"}style+='"';this._elem=h("<div "+style+' class="jqplot-'+this.axis+'-tick">'+this.label+"</div>");for(var v in this._styles){this._elem.css(v,this._styles[v])}if(this.fontFamily){this._elem.css("font-family",this.fontFamily)}if(this.fontSize){this._elem.css("font-size",this.fontSize)}if(this.textColor){this._elem.css("color",this.textColor)}return this._elem};h.jqplot.DefaultTickFormatter=function(v,w){if(typeof w=="number"){if(!v){v="%.1f"}return h.jqplot.sprintf(v,w)}else{return String(w)}};h.jqplot.AxisTickRenderer.prototype.pack=function(){};h.jqplot.CanvasGridRenderer=function(){this.shadowRenderer=new h.jqplot.ShadowRenderer()};h.jqplot.CanvasGridRenderer.prototype.init=function(w){this._ctx;h.extend(true,this,w);var v={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};this.renderer.shadowRenderer.init(v)};h.jqplot.CanvasGridRenderer.prototype.createElement=function(){var y=document.createElement("canvas");var v=this._plotDimensions.width;var x=this._plotDimensions.height;y.width=v;y.height=x;this._elem=h(y);this._elem.addClass("jqplot-grid-canvas");this._elem.css({position:"absolute",left:0,top:0});if(h.browser.msie){window.G_vmlCanvasManager.init_(document)}if(h.browser.msie){y=window.G_vmlCanvasManager.initElement(y)}this._top=this._offsets.top;this._bottom=x-this._offsets.bottom;this._left=this._offsets.left;this._right=v-this._offsets.right;this._width=this._right-this._left;this._height=this._bottom-this._top;return this._elem};h.jqplot.CanvasGridRenderer.prototype.draw=function(){this._ctx=this._elem.get(0).getContext("2d");var L=this._ctx;var E=this._axes;L.save();L.fillStyle=this.background;L.fillRect(this._left,this._top,this._width,this._height);if(this.drawGridlines){L.save();L.lineJoin="miter";L.lineCap="butt";L.lineWidth=this.gridLineWidth;L.strokeStyle=this.gridLineColor;var G,D;var v=["xaxis","yaxis","x2axis","y2axis"];for(var A=4;A>0;A--){var w=v[A-1];var y=E[w];var H=y._ticks;if(y.show){for(var z=H.length;z>0;z--){var K=H[z-1];if(K.show){var F=Math.round(y.u2p(K.value))+0.5;switch(w){case"xaxis":if(K.showGridline){C(F,this._top,F,this._bottom)}if(K.showMark&&K.mark){s=K.markSize;m=K.mark;var F=Math.round(y.u2p(K.value))+0.5;switch(m){case"outside":G=this._bottom;D=this._bottom+s;break;case"inside":G=this._bottom-s;D=this._bottom;break;case"cross":G=this._bottom-s;D=this._bottom+s;break;default:G=this._bottom;D=this._bottom+s;break}if(this.shadow){this.renderer.shadowRenderer.draw(L,[[F,G],[F,D]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}C(F,G,F,D)}break;case"yaxis":if(K.showGridline){C(this._right,F,this._left,F)}if(K.showMark&&K.mark){s=K.markSize;m=K.mark;var F=Math.round(y.u2p(K.value))+0.5;switch(m){case"outside":G=this._left-s;D=this._left;break;case"inside":G=this._left;D=this._left+s;break;case"cross":G=this._left-s;D=this._left+s;break;default:G=this._left-s;D=this._left;break}if(this.shadow){this.renderer.shadowRenderer.draw(L,[[G,F],[D,F]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}C(G,F,D,F,{strokeStyle:y.borderColor})}break;case"x2axis":if(K.showGridline){C(F,this._bottom,F,this._top)}if(K.showMark&&K.mark){s=K.markSize;m=K.mark;var F=Math.round(y.u2p(K.value))+0.5;switch(m){case"outside":G=this._top-s;D=this._top;break;case"inside":G=this._top;D=this._top+s;break;case"cross":G=this._top-s;D=this._top+s;break;default:G=this._top-s;D=this._top;break}if(this.shadow){this.renderer.shadowRenderer.draw(L,[[F,G],[F,D]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}C(F,G,F,D)}break;case"y2axis":if(K.showGridline){C(this._left,F,this._right,F)}if(K.showMark&&K.mark){s=K.markSize;m=K.mark;var F=Math.round(y.u2p(K.value))+0.5;switch(m){case"outside":G=this._right;D=this._right+s;break;case"inside":G=this._right-s;D=this._right;break;case"cross":G=this._right-s;D=this._right+s;break;default:G=this._right;D=this._right+s;break}if(this.shadow){this.renderer.shadowRenderer.draw(L,[[G,F],[D,F]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}C(G,F,D,F,{strokeStyle:y.borderColor})}break;default:break}}}}}v=["y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];for(var A=7;A>0;A--){var y=E[v[A-1]];var H=y._ticks;if(y.show){var J=H[y.numberTicks-1];var B=H[0];var x=y.getLeft();var I=[[x,J.getTop()+J.getHeight()/2],[x,B.getTop()+B.getHeight()/2+1]];if(this.shadow){this.renderer.shadowRenderer.draw(L,I,{lineCap:"butt",fill:false,closePath:false})}C(I[0][0],I[0][1],I[1][0],I[1][1],{lineCap:"butt",strokeStyle:y.borderColor,lineWidth:y.borderWidth});for(var z=H.length;z>0;z--){var K=H[z-1];s=K.markSize;m=K.mark;var F=Math.round(y.u2p(K.value))+0.5;if(K.showMark&&K.mark){switch(m){case"outside":G=x;D=x+s;break;case"inside":G=x-s;D=x;break;case"cross":G=x-s;D=x+s;break;default:G=x;D=x+s;break}I=[[G,F],[D,F]];if(this.shadow){this.renderer.shadowRenderer.draw(L,I,{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}C(G,F,D,F,{strokeStyle:y.borderColor})}}}}L.restore()}function C(Q,P,N,M,O){L.save();O=O||{};h.extend(true,L,O);L.beginPath();L.moveTo(Q,P);L.lineTo(N,M);L.stroke();L.restore()}if(this.shadow){var I=[[this._left,this._bottom],[this._right,this._bottom],[this._right,this._top]];this.renderer.shadowRenderer.draw(L,I)}C(this._left,this._top,this._right,this._top,{lineCap:"round",strokeStyle:E.x2axis.borderColor,lineWidth:E.x2axis.borderWidth});C(this._right,this._top,this._right,this._bottom,{lineCap:"round",strokeStyle:E.y2axis.borderColor,lineWidth:E.y2axis.borderWidth});C(this._right,this._bottom,this._left,this._bottom,{lineCap:"round",strokeStyle:E.xaxis.borderColor,lineWidth:E.xaxis.borderWidth});C(this._left,this._bottom,this._left,this._top,{lineCap:"round",strokeStyle:E.yaxis.borderColor,lineWidth:E.yaxis.borderWidth});L.restore()};var r=24*60*60*1000;var j=function(v,w){v=String(v);while(v.length<w){v="0"+v}return v};var e={millisecond:1,second:1000,minute:60*1000,hour:60*60*1000,day:r,week:7*r,month:{add:function(x,v){e.year.add(x,Math[v>0?"floor":"ceil"](v/12));var w=x.getMonth()+(v%12);if(w==12){w=0;x.setYear(x.getFullYear()+1)}else{if(w==-1){w=11;x.setYear(x.getFullYear()-1)}}x.setMonth(w)},diff:function(z,x){var v=z.getFullYear()-x.getFullYear();var w=z.getMonth()-x.getMonth()+(v*12);var y=z.getDate()-x.getDate();return w+(y/30)}},year:{add:function(w,v){w.setYear(w.getFullYear()+Math[v>0?"floor":"ceil"](v))},diff:function(w,v){return e.month.diff(w,v)/12}}};for(var u in e){if(u.substring(u.length-1)!="s"){e[u+"s"]=e[u]}}var t=function(y,x){if(Date.prototype.strftime.formatShortcuts[x]){return y.strftime(Date.prototype.strftime.formatShortcuts[x])}else{var v=(Date.prototype.strftime.formatCodes[x]||"").split(".");var w=y["get"+v[0]]?y["get"+v[0]]():"";if(v[1]){w=j(w,v[1])}return w}};var q={succ:function(v){return this.clone().add(1,v)},add:function(x,w){var v=e[w]||e.day;if(typeof v=="number"){this.setTime(this.getTime()+(v*x))}else{v.add(this,x)}return this},diff:function(w,z,v){w=Date.create(w);if(w===null){return null}var x=e[z]||e.day;if(typeof x=="number"){var y=(this.getTime()-w.getTime())/x}else{var y=x.diff(this,w)}return(v?y:Math[y>0?"floor":"ceil"](y))},strftime:function(w){var y=w||"%Y-%m-%d",v="",x;while(y.length>0){if(x=y.match(Date.prototype.strftime.formatCodes.matcher)){v+=y.slice(0,x.index);v+=(x[1]||"")+t(this,x[2]);y=y.slice(x.index+x[0].length)}else{v+=y;y=""}}return v},getShortYear:function(){return this.getYear()%100},getMonthNumber:function(){return this.getMonth()+1},getMonthName:function(){return Date.MONTHNAMES[this.getMonth()]},getAbbrMonthName:function(){return Date.ABBR_MONTHNAMES[this.getMonth()]},getDayName:function(){return Date.DAYNAMES[this.getDay()]},getAbbrDayName:function(){return Date.ABBR_DAYNAMES[this.getDay()]},getDayOrdinal:function(){return Date.ORDINALNAMES[this.getDate()%10]},getHours12:function(){var v=this.getHours();return v>12?v-12:(v==0?12:v)},getAmPm:function(){return this.getHours()>=12?"PM":"AM"},getUnix:function(){return Math.round(this.getTime()/1000,0)},getGmtOffset:function(){var v=this.getTimezoneOffset()/60;var w=v<0?"+":"-";v=Math.abs(v);return w+j(Math.floor(v),2)+":"+j((v%1)*60,2)},getTimezoneName:function(){var v=/(?:\((.+)\)$| ([A-Z]{3}) )/.exec(this.toString());return v[1]||v[2]||"GMT"+this.getGmtOffset()},toYmdInt:function(){return(this.getFullYear()*10000)+(this.getMonthNumber()*100)+this.getDate()},clone:function(){return new Date(this.getTime())}};for(var a in q){Date.prototype[a]=q[a]}var d={create:function(v){if(v instanceof Date){return v}if(typeof v=="number"){return new Date(v)}var A=String(v).replace(/^\s*(.+)\s*$/,"$1"),w=0,x=Date.create.patterns.length,y;var z=A;while(w<x){ms=Date.parse(z);if(!isNaN(ms)){return new Date(ms)}y=Date.create.patterns[w];if(typeof y=="function"){obj=y(z);if(obj instanceof Date){return obj}}else{z=A.replace(y[0],y[1])}w++}return NaN},MONTHNAMES:"January February March April May June July August September October November December".split(" "),ABBR_MONTHNAMES:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAYNAMES:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ABBR_DAYNAMES:"Sun Mon Tue Wed Thu Fri Sat".split(" "),ORDINALNAMES:"th st nd rd th th th th th th".split(" "),ISO:"%Y-%m-%dT%H:%M:%S.%N%G",SQL:"%Y-%m-%d %H:%M:%S",daysInMonth:function(v,w){if(w==2){return new Date(v,1,29).getDate()==29?29:28}return[c,31,c,31,30,31,30,31,31,30,31,30,31][w]}};for(var a in d){Date[a]=d[a]}Date.prototype.strftime.formatCodes={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",o:"DayOrdinal",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"};Date.prototype.strftime.formatShortcuts={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","%":"%"};Date.create.patterns=[[/-/g,"/"],[/st|nd|rd|th/g,""],[/(3[01]|[0-2]\d)\s*\.\s*(1[0-2]|0\d)\s*\.\s*([1-9]\d{3})/,"$2/$1/$3"],[/([1-9]\d{3})\s*-\s*(1[0-2]|0\d)\s*-\s*(3[01]|[0-2]\d)/,"$2/$3/$1"],function(y){var w=y.match(/^(?:(.+)\s+)?([012]?\d)(?:\s*\:\s*(\d\d))?(?:\s*\:\s*(\d\d(\.\d*)?))?\s*(am|pm)?\s*$/i);if(w){if(w[1]){var x=Date.create(w[1]);if(isNaN(x)){return}}else{var x=new Date();x.setMilliseconds(0)}var v=parseFloat(w[2]);if(w[6]){v=w[6].toLowerCase()=="am"?(v==12?0:v):(v==12?12:v+12)}x.setHours(v,parseInt(w[3]||0,10),parseInt(w[4]||0,10),((parseFloat(w[5]||0))||0)*1000);return x}else{return y}},function(y){var w=y.match(/^(?:(.+))[T|\s+]([012]\d)(?:\:(\d\d))(?:\:(\d\d))(?:\.\d+)([\+\-]\d\d\:\d\d)$/i);if(w){if(w[1]){var x=Date.create(w[1]);if(isNaN(x)){return}}else{var x=new Date();x.setMilliseconds(0)}var v=parseFloat(w[2]);x.setHours(v,parseInt(w[3],10),parseInt(w[4],10),parseFloat(w[5])*1000);return x}else{return y}},function(A){var x=A.match(/^([0-3]?\d)\s*[-\/.\s]{1}\s*([a-zA-Z]{3,9})\s*[-\/.\s]{1}\s*([0-3]?\d)$/);if(x){var z=new Date();var B=parseFloat(String(z.getFullYear()).slice(2,4));var C=parseInt(String(z.getFullYear())/100,10)*100;var E=1;var F=parseFloat(x[1]);var D=parseFloat(x[3]);var w,v,G;if(F>31){v=x[3];if(F<B+E){w=C+F}else{w=C-100+F}}else{v=x[1];if(D<B+E){w=C+D}else{w=C-100+D}}var G=h.inArray(x[2],Date.ABBR_MONTHNAMES);if(G==-1){G=h.inArray(x[2],Date.MONTHNAMES)}z.setFullYear(w,G,v);z.setHours(0,0,0,0);return z}else{return A}}];if(h.jqplot.config.debug){h.date=Date.create}h.jqplot.DivTitleRenderer=function(){};h.jqplot.DivTitleRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.DivTitleRenderer.prototype.draw=function(){var w=this.renderer;if(!this.text){this.show=false;this._elem=h('<div style="height:0px;width:0px;"></div>')}else{if(this.text){var v="position:absolute;top:0px;left:0px;";v+=(this._plotWidth)?"width:"+this._plotWidth+"px;":"";v+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";v+=(this.fontSize)?"font-size:"+this.fontSize+";":"";v+=(this.textAlign)?"text-align:"+this.textAlign+";":"text-align:center;";v+=(this.textColor)?"color:"+this.textColor+";":"";this._elem=h('<div class="jqplot-title" style="'+v+'">'+this.text+"</div>")}}return this._elem};h.jqplot.DivTitleRenderer.prototype.pack=function(){};h.jqplot.LineRenderer=function(){this.shapeRenderer=new h.jqplot.ShapeRenderer();this.shadowRenderer=new h.jqplot.ShadowRenderer()};h.jqplot.LineRenderer.prototype.init=function(w){h.extend(true,this.renderer,w);var y={lineJoin:"round",lineCap:"round",fill:this.fill,isarc:false,strokeStyle:this.color,fillStyle:this.fillColor,lineWidth:this.lineWidth,closePath:this.fill};this.renderer.shapeRenderer.init(y);if(this.lineWidth>2.5){var x=this.shadowOffset*(1+(Math.atan((this.lineWidth/2.5))/0.785398163-1)*0.6)}else{var x=this.shadowOffset*Math.atan((this.lineWidth/2.5))/0.785398163}var v={lineJoin:"round",lineCap:"round",fill:this.fill,isarc:false,angle:this.shadowAngle,offset:x,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.lineWidth,closePath:this.fill};this.renderer.shadowRenderer.init(v)};h.jqplot.LineRenderer.prototype.setGridData=function(A){var w=this._xaxis.series_u2p;var z=this._yaxis.series_u2p;var x=this._plotData;var y=this._prevPlotData;this.gridData=[];this._prevGridData=[];for(var v=0;v<this.data.length;v++){if(x[v]!=null){this.gridData.push([w.call(this._xaxis,x[v][0]),z.call(this._yaxis,x[v][1])])}if(y[v]!=null){this._prevGridData.push([w.call(this._xaxis,y[v][0]),z.call(this._yaxis,y[v][1])])}}};h.jqplot.LineRenderer.prototype.makeGridData=function(y,A){var x=this._xaxis.series_u2p;var z=this._yaxis.series_u2p;var w=[];var B=[];for(var v=0;v<y.length;v++){if(y[v]!=null){w.push([x.call(this._xaxis,y[v][0]),z.call(this._yaxis,y[v][1])])}}return w};h.jqplot.LineRenderer.prototype.draw=function(G,N,w){var K;var E=(w!=c)?w:{};var y=(E.shadow!=c)?E.shadow:this.shadow;var P=(E.showLine!=c)?E.showLine:this.showLine;var J=(E.fill!=c)?E.fill:this.fill;var v=(E.fillAndStroke!=c)?E.fillAndStroke:this.fillAndStroke;G.save();if(N.length){if(P){if(J){if(this.fillToZero){var z=new h.jqplot.ColorGenerator(this.negativeSeriesColors);var L=z.get(this.index);if(!this.useNegativeColors){L=E.fillStyle}var C=false;var D=E.fillStyle;if(v){var O=N.slice(0)}if(this.index==0||!this._stack){var H=[];var M=this._yaxis.series_u2p(0);var x=this._xaxis.series_u2p(0);if(this.fillAxis=="y"){H.push([N[0][0],M]);for(var K=0;K<N.length-1;K++){H.push(N[K]);if(this._plotData[K][1]*this._plotData[K+1][1]<0){if(this._plotData[K][1]<0){C=true;E.fillStyle=L}else{C=false;E.fillStyle=D}var B=N[K][0]+(N[K+1][0]-N[K][0])*(M-N[K][1])/(N[K+1][1]-N[K][1]);H.push([B,M]);if(y){this.renderer.shadowRenderer.draw(G,H,E)}this.renderer.shapeRenderer.draw(G,H,E);H=[[B,M]]}}if(this._plotData[N.length-1][1]<0){C=true;E.fillStyle=L}else{C=false;E.fillStyle=D}H.push(N[N.length-1]);H.push([N[N.length-1][0],M])}if(y){this.renderer.shadowRenderer.draw(G,H,E)}this.renderer.shapeRenderer.draw(G,H,E)}else{var F=this._prevGridData;for(var K=F.length;K>0;K--){N.push(F[K-1])}if(y){this.renderer.shadowRenderer.draw(G,N,E)}this.renderer.shapeRenderer.draw(G,N,E)}}else{if(v){var O=N.slice(0)}if(this.index==0||!this._stack){var A=G.canvas.height;N.unshift([N[0][0],A]);len=N.length;N.push([N[len-1][0],A])}else{var F=this._prevGridData;for(var K=F.length;K>0;K--){N.push(F[K-1])}}if(y){this.renderer.shadowRenderer.draw(G,N,E)}this.renderer.shapeRenderer.draw(G,N,E)}if(v){var I=h.extend(true,{},E,{fill:false,closePath:false});this.renderer.shapeRenderer.draw(G,O,I);if(this.markerRenderer.show){for(K=0;K<O.length;K++){this.markerRenderer.draw(O[K][0],O[K][1],G,E.markerOptions)}}}}else{if(y){this.renderer.shadowRenderer.draw(G,N,E)}this.renderer.shapeRenderer.draw(G,N,E)}}if(this.markerRenderer.show&&!J){for(K=0;K<N.length;K++){this.markerRenderer.draw(N[K][0],N[K][1],G,E.markerOptions)}}}G.restore()};h.jqplot.LineRenderer.prototype.drawShadow=function(v,x,w){};h.jqplot.LinearAxisRenderer=function(){};h.jqplot.LinearAxisRenderer.prototype.init=function(x){h.extend(true,this,x);var v=this._dataBounds;for(var y=0;y<this._series.length;y++){var z=this._series[y];var A=z._plotData;for(var w=0;w<A.length;w++){if(this.name=="xaxis"||this.name=="x2axis"){if(A[w][0]<v.min||v.min==null){v.min=A[w][0]}if(A[w][0]>v.max||v.max==null){v.max=A[w][0]}}else{if(A[w][1]<v.min||v.min==null){v.min=A[w][1]}if(A[w][1]>v.max||v.max==null){v.max=A[w][1]}}}}};h.jqplot.LinearAxisRenderer.prototype.draw=function(v){if(this.show){this.renderer.createTicks.call(this);var B=0;var w;this._elem=h('<div class="jqplot-axis jqplot-'+this.name+'" style="position:absolute;"></div>');if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var A=this._label.draw(v);A.appendTo(this._elem)}if(this.showTicks){var z=this._ticks;for(var y=0;y<z.length;y++){var x=z[y];if(x.showLabel&&(!x.isMinorTick||this.showMinorTicks)){var A=x.draw(v);A.appendTo(this._elem)}}}}return this._elem};h.jqplot.LinearAxisRenderer.prototype.reset=function(){this.min=this._min;this.max=this._max;this.tickInterval=this._tickInterval;this.numberTicks=this._numberTicks};h.jqplot.LinearAxisRenderer.prototype.set=function(){var D=0;var y;var x=0;var C=0;var v=(this._label==null)?false:this._label.show;if(this.show&&this.showTicks){var B=this._ticks;for(var A=0;A<B.length;A++){var z=B[A];if(z.showLabel&&(!z.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){y=z._elem.outerHeight(true)}else{y=z._elem.outerWidth(true)}if(y>D){D=y}}}if(v){x=this._label._elem.outerWidth(true);C=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){D=D+C;this._elem.css({height:D+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){D=D+C;this._elem.css({height:D+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){D=D+x;this._elem.css({width:D+"px",left:"0px",top:"0px"});if(v&&this._label.constructor==h.jqplot.AxisLabelRenderer){this._label._elem.css("width",x+"px")}}else{D=D+x;this._elem.css({width:D+"px",right:"0px",top:"0px"});if(v&&this._label.constructor==h.jqplot.AxisLabelRenderer){this._label._elem.css("width",x+"px")}}}}}};h.jqplot.LinearAxisRenderer.prototype.createTicks=function(){var ab=this._ticks;var X=this.ticks;var ac=this.name;var aa=this._dataBounds;var S,Y;var P,T;var y,x;var v,U;if(X.length){for(U=0;U<X.length;U++){var D=X[U];var G=new this.tickRenderer(this.tickOptions);if(D.constructor==Array){G.value=D[0];G.label=D[1];if(!this.showTicks){G.showLabel=false;G.showMark=false}else{if(!this.showTickMarks){G.showMark=false}}G.setTick(D[0],this.name);this._ticks.push(G)}else{G.value=D;if(!this.showTicks){G.showLabel=false;G.showMark=false}else{if(!this.showTickMarks){G.showMark=false}}G.setTick(D,this.name);this._ticks.push(G)}}this.numberTicks=X.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(ac=="xaxis"||ac=="x2axis"){S=this._plotDimensions.width}else{S=this._plotDimensions.height}if(!this.autoscale&&this.min!=null&&this.max!=null&&this.numberTicks!=null){this.tickInterval=null}P=((this.min!=null)?this.min:aa.min);T=((this.max!=null)?this.max:aa.max);if(P==T){var E=0.05;if(P>0){E=Math.max(Math.log(P)/Math.LN10,0.05)}P-=E;T+=E}var K=T-P;var O,R;var W;if(this.autoscale&&this.min==null&&this.max==null){var J,z,L;var F=false;var N=false;var w={min:null,max:null,average:null,stddev:null};for(var U=0;U<this._series.length;U++){var I=this._series[U];var B=(I.fillAxis=="x")?I._xaxis.name:I._yaxis.name;if(this.name==B){var H=I._plotValues[I.fillAxis];var A=H[0];var C=H[0];for(var Q=1;Q<H.length;Q++){if(H[Q]<A){A=H[Q]}else{if(H[Q]>C){C=H[Q]}}}var M=(C-A)/C;if(I.renderer.constructor==h.jqplot.BarRenderer){if(A>=0&&(I.fillToZero||M>0.1)){F=true}else{F=false;if(I.fill&&I.fillToZero&&A<0&&C>0){N=true}else{N=false}}}else{if(I.fill){if(A>=0&&(I.fillToZero||M>0.1)){F=true}else{if(A<0&&C>0&&I.fillToZero){F=false;N=true}else{F=false;N=false}}}else{if(A<0){F=false}}}}}if(F){this.numberTicks=2+Math.ceil((S-(this.tickSpacing-1))/this.tickSpacing);this.min=0;z=T/(this.numberTicks-1);W=Math.pow(10,Math.abs(Math.floor(Math.log(z)/Math.LN10)));if(z/W==parseInt(z/W,10)){z+=W}this.tickInterval=Math.ceil(z/W)*W;this.max=this.tickInterval*(this.numberTicks-1)}else{if(N){this.numberTicks=2+Math.ceil((S-(this.tickSpacing-1))/this.tickSpacing);var V=Math.ceil(Math.abs(P)/K*(this.numberTicks-1));var Z=this.numberTicks-1-V;z=Math.max(Math.abs(P/V),Math.abs(T/Z));W=Math.pow(10,Math.abs(Math.floor(Math.log(z)/Math.LN10)));this.tickInterval=Math.ceil(z/W)*W;this.max=this.tickInterval*Z;this.min=-this.tickInterval*V}else{if(this.numberTicks==null){if(this.tickInterval){this.numberTicks=3+Math.ceil(K/this.tickInterval)}else{this.numberTicks=2+Math.ceil((S-(this.tickSpacing-1))/this.tickSpacing)}}if(this.tickInterval==null){z=K/(this.numberTicks-1);if(z<1){W=Math.pow(10,Math.abs(Math.floor(Math.log(z)/Math.LN10)))}else{W=1}this.tickInterval=Math.ceil(z*W*this.pad)/W}else{W=1/this.tickInterval}J=this.tickInterval*(this.numberTicks-1);L=(J-K)/2;if(this.min==null){this.min=Math.floor(W*(P-L))/W}if(this.max==null){this.max=this.min+J}}}}else{O=(this.min!=null)?this.min:P-K*(this.padMin-1);R=(this.max!=null)?this.max:T+K*(this.padMax-1);this.min=O;this.max=R;K=this.max-this.min;if(this.numberTicks==null){if(this.tickInterval!=null){this.numberTicks=Math.ceil((this.max-this.min)/this.tickInterval)+1;this.max=this.min+this.tickInterval*(this.numberTicks-1)}else{if(S>100){this.numberTicks=parseInt(3+(S-100)/75,10)}else{this.numberTicks=2}}}if(this.tickInterval==null){this.tickInterval=K/(this.numberTicks-1)}}for(var U=0;U<this.numberTicks;U++){v=this.min+U*this.tickInterval;var G=new this.tickRenderer(this.tickOptions);if(!this.showTicks){G.showLabel=false;G.showMark=false}else{if(!this.showTickMarks){G.showMark=false}}G.setTick(v,this.name);this._ticks.push(G)}}};h.jqplot.LinearAxisRenderer.prototype.pack=function(F,A){var I=this._ticks;var G=this.max;var C=this.min;var z=A.max;var M=A.min;var D=(this._label==null)?false:this._label.show;for(var v in F){this._elem.css(v,F[v])}this._offsets=A;var y=z-M;var L=G-C;this.p2u=function(w){return(w-M)*L/y+C};this.u2p=function(w){return(w-C)*y/L+M};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(w){return(w-C)*y/L};this.series_p2u=function(w){return w*L/y+C}}else{this.series_u2p=function(w){return(w-G)*y/L};this.series_p2u=function(w){return w*L/y+G}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(i=0;i<I.length;i++){var K=I[i];if(K.show&&K.showLabel){var B;if(K.constructor==h.jqplot.CanvasAxisTickRenderer&&K.angle){var J=(this.name=="xaxis")?1:-1;switch(K.labelPosition){case"auto":if(J*K.angle<0){B=-K.getWidth()+K._textRenderer.height*Math.sin(-K._textRenderer.angle)/2}else{B=-K._textRenderer.height*Math.sin(K._textRenderer.angle)/2}break;case"end":B=-K.getWidth()+K._textRenderer.height*Math.sin(-K._textRenderer.angle)/2;break;case"start":B=-K._textRenderer.height*Math.sin(K._textRenderer.angle)/2;break;case"middle":B=-K.getWidth()/2+K._textRenderer.height*Math.sin(-K._textRenderer.angle)/2;break;default:B=-K.getWidth()/2+K._textRenderer.height*Math.sin(-K._textRenderer.angle)/2;break}}else{B=-K.getWidth()/2}var x=this.u2p(K.value)+B+"px";K._elem.css("left",x);K.pack()}}if(D){var H=this._label._elem.outerWidth(true);this._label._elem.css("left",M+y/2-H/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}}else{for(i=0;i<I.length;i++){var K=I[i];if(K.show&&K.showLabel){var B;if(K.constructor==h.jqplot.CanvasAxisTickRenderer&&K.angle){var J=(this.name=="yaxis")?1:-1;switch(K.labelPosition){case"auto":case"end":if(J*K.angle<0){B=-K._textRenderer.height*Math.cos(-K._textRenderer.angle)/2}else{B=-K.getHeight()+K._textRenderer.height*Math.cos(K._textRenderer.angle)/2}break;case"start":if(K.angle>0){B=-K._textRenderer.height*Math.cos(-K._textRenderer.angle)/2}else{B=-K.getHeight()+K._textRenderer.height*Math.cos(K._textRenderer.angle)/2}break;case"middle":B=-K.getHeight()/2;break;default:B=-K.getHeight()/2;break}}else{B=-K.getHeight()/2}var x=this.u2p(K.value)+B+"px";K._elem.css("top",x);K.pack()}}if(D){var E=this._label._elem.outerHeight(true);this._label._elem.css("top",z-y/2-E/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}};h.jqplot.MarkerRenderer=function(v){this.show=true;this.style="filledCircle";this.lineWidth=2;this.size=9;this.color="#666666";this.shadow=true;this.shadowAngle=45;this.shadowOffset=1;this.shadowDepth=3;this.shadowAlpha="0.07";this.shadowRenderer=new h.jqplot.ShadowRenderer();this.shapeRenderer=new h.jqplot.ShapeRenderer();h.extend(true,this,v)};h.jqplot.MarkerRenderer.prototype.init=function(v){h.extend(true,this,v);var x={angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,lineWidth:this.lineWidth,depth:this.shadowDepth,closePath:true};if(this.style.indexOf("filled")!=-1){x.fill=true}if(this.style.indexOf("ircle")!=-1){x.isarc=true;x.closePath=false}this.shadowRenderer.init(x);var w={fill:false,isarc:false,strokeStyle:this.color,fillStyle:this.color,lineWidth:this.lineWidth,closePath:true};if(this.style.indexOf("filled")!=-1){w.fill=true}if(this.style.indexOf("ircle")!=-1){w.isarc=true;w.closePath=false}this.shapeRenderer.init(w)};h.jqplot.MarkerRenderer.prototype.drawDiamond=function(z,w,C,B,E){var v=1.2;var F=this.size/2/v;var D=this.size/2*v;var A=[[z-F,w],[z,w+D],[z+F,w],[z,w-D]];if(this.shadow){this.shadowRenderer.draw(C,A)}this.shapeRenderer.draw(C,A,E);C.restore()};h.jqplot.MarkerRenderer.prototype.drawPlus=function(A,z,D,C,G){var w=1;var H=this.size/2*w;var E=this.size/2*w;var F=[[A,z-E],[A,z+E]];var B=[[A+H,z],[A-H,z]];var v=h.extend(true,{},this.options,{closePath:false});if(this.shadow){this.shadowRenderer.draw(D,F,{closePath:false});this.shadowRenderer.draw(D,B,{closePath:false})}this.shapeRenderer.draw(D,F,v);this.shapeRenderer.draw(D,B,v);D.restore()};h.jqplot.MarkerRenderer.prototype.drawX=function(A,z,D,C,G){var w=1;var H=this.size/2*w;var E=this.size/2*w;var v=h.extend(true,{},this.options,{closePath:false});var F=[[A-H,z-E],[A+H,z+E]];var B=[[A-H,z+E],[A+H,z-E]];if(this.shadow){this.shadowRenderer.draw(D,F,{closePath:false});this.shadowRenderer.draw(D,B,{closePath:false})}this.shapeRenderer.draw(D,F,v);this.shapeRenderer.draw(D,B,v);D.restore()};h.jqplot.MarkerRenderer.prototype.drawDash=function(z,w,C,B,E){var v=1;var F=this.size/2*v;var D=this.size/2*v;var A=[[z-F,w],[z+F,w]];if(this.shadow){this.shadowRenderer.draw(C,A)}this.shapeRenderer.draw(C,A,E);C.restore()};h.jqplot.MarkerRenderer.prototype.drawSquare=function(z,w,C,B,E){var v=1;var F=this.size/2/v;var D=this.size/2*v;var A=[[z-F,w-D],[z-F,w+D],[z+F,w+D],[z+F,w-D]];if(this.shadow){this.shadowRenderer.draw(C,A)}this.shapeRenderer.draw(C,A,E);C.restore()};h.jqplot.MarkerRenderer.prototype.drawCircle=function(w,E,A,D,B){var v=this.size/2;var z=2*Math.PI;var C=[w,E,v,0,z,true];if(this.shadow){this.shadowRenderer.draw(A,C)}this.shapeRenderer.draw(A,C,B);A.restore()};h.jqplot.MarkerRenderer.prototype.draw=function(v,A,w,z){z=z||{};switch(this.style){case"diamond":this.drawDiamond(v,A,w,false,z);break;case"filledDiamond":this.drawDiamond(v,A,w,true,z);break;case"circle":this.drawCircle(v,A,w,false,z);break;case"filledCircle":this.drawCircle(v,A,w,true,z);break;case"square":this.drawSquare(v,A,w,false,z);break;case"filledSquare":this.drawSquare(v,A,w,true,z);break;case"x":this.drawX(v,A,w,true,z);break;case"plus":this.drawPlus(v,A,w,true,z);break;case"dash":this.drawDash(v,A,w,true,z);break;default:this.drawDiamond(v,A,w,false,z);break}};h.jqplot.ShadowRenderer=function(v){this.angle=45;this.offset=1;this.alpha=0.07;this.lineWidth=1.5;this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.depth=3;this.isarc=false;h.extend(true,this,v)};h.jqplot.ShadowRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.ShadowRenderer.prototype.draw=function(E,C,F){E.save();var v=(F!=null)?F:{};var D=(v.fill!=null)?v.fill:this.fill;var B=(v.closePath!=null)?v.closePath:this.closePath;var y=(v.offset!=null)?v.offset:this.offset;var w=(v.alpha!=null)?v.alpha:this.alpha;var A=(v.depth!=null)?v.depth:this.depth;E.lineWidth=(v.lineWidth!=null)?v.lineWidth:this.lineWidth;E.lineJoin=(v.lineJoin!=null)?v.lineJoin:this.lineJoin;E.lineCap=(v.lineCap!=null)?v.lineCap:this.lineCap;E.strokeStyle="rgba(0,0,0,"+w+")";E.fillStyle="rgba(0,0,0,"+w+")";for(var x=0;x<A;x++){E.translate(Math.cos(this.angle*Math.PI/180)*y,Math.sin(this.angle*Math.PI/180)*y);E.beginPath();if(this.isarc){E.arc(C[0],C[1],C[2],C[3],C[4],true)}else{E.moveTo(C[0][0],C[0][1]);for(var z=1;z<C.length;z++){E.lineTo(C[z][0],C[z][1])}}if(B){E.closePath()}if(D){E.fill()}else{E.stroke()}}E.restore()};h.jqplot.ShapeRenderer=function(v){this.lineWidth=1.5;this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.isarc=false;this.fillRect=false;this.strokeRect=false;this.clearRect=false;this.strokeStyle="#999999";this.fillStyle="#999999";h.extend(true,this,v)};h.jqplot.ShapeRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.ShapeRenderer.prototype.draw=function(D,B,F){D.save();var v=(F!=null)?F:{};var C=(v.fill!=null)?v.fill:this.fill;var z=(v.closePath!=null)?v.closePath:this.closePath;var A=(v.fillRect!=null)?v.fillRect:this.fillRect;var x=(v.strokeRect!=null)?v.strokeRect:this.strokeRect;var w=(v.clearRect!=null)?v.clearRect:this.clearRect;var E=(v.isarc!=null)?v.isarc:this.isarc;D.lineWidth=v.lineWidth||this.lineWidth;D.lineJoin=v.lineJoing||this.lineJoin;D.lineCap=v.lineCap||this.lineCap;D.strokeStyle=(v.strokeStyle||v.color)||this.strokeStyle;D.fillStyle=v.fillStyle||this.fillStyle;D.beginPath();if(E){D.arc(B[0],B[1],B[2],B[3],B[4],true);if(z){D.closePath()}if(C){D.fill()}else{D.stroke()}D.restore();return}else{if(w){D.clearRect(B[0],B[1],B[2],B[3]);D.restore();return}else{if(A||x){if(A){D.fillRect(B[0],B[1],B[2],B[3])}if(x){D.strokeRect(B[0],B[1],B[2],B[3]);D.restore();return}}else{D.moveTo(B[0][0],B[0][1]);for(var y=1;y<B.length;y++){D.lineTo(B[y][0],B[y][1])}if(z){D.closePath()}if(C){D.fill()}else{D.stroke()}}}}D.restore()};h.jqplot.TableLegendRenderer=function(){};h.jqplot.TableLegendRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.TableLegendRenderer.prototype.addrow=function(x,w,A){var v=(A)?this.rowSpacing:"0";var z=h('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);h('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+v+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+w+';"></div></div></td>').appendTo(z);var y=h('<td class="jqplot-table-legend" style="padding-top:'+v+';"></td>');y.appendTo(z);if(this.escapeHtml){y.text(x)}else{y.html(x)}};h.jqplot.TableLegendRenderer.prototype.draw=function(){var B=this;if(this.show){var z=this._series;var D="position:absolute;";D+=(this.background)?"background:"+this.background+";":"";D+=(this.border)?"border:"+this.border+";":"";D+=(this.fontSize)?"font-size:"+this.fontSize+";":"";D+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";D+=(this.textColor)?"color:"+this.textColor+";":"";this._elem=h('<table class="jqplot-table-legend" style="'+D+'"></table>');var v=false;for(var A=0;A<z.length;A++){s=z[A];if(s.show&&s.showLabel){var y=s.label.toString();if(y){var w=s.color;if(s._stack&&!s.fill){w=""}this.renderer.addrow.call(this,y,w,v);v=true}for(var x=0;x<h.jqplot.addLegendRowHooks.length;x++){var C=h.jqplot.addLegendRowHooks[x].call(this,s);if(C){this.renderer.addrow.call(this,C.label,C.color,v);v=true}}}}}return this._elem};h.jqplot.TableLegendRenderer.prototype.pack=function(y){if(this.show){var x={_top:y.top,_left:y.left,_right:y.right,_bottom:this._plotDimensions.height-y.bottom};switch(this.location){case"nw":var w=x._left+this.xoffset;var v=x._top+this.yoffset;this._elem.css("left",w);this._elem.css("top",v);break;case"n":var w=(y.left+(this._plotDimensions.width-y.right))/2-this.getWidth()/2;var v=x._top+this.yoffset;this._elem.css("left",w);this._elem.css("top",v);break;case"ne":var w=y.right+this.xoffset;var v=x._top+this.yoffset;this._elem.css({right:w,top:v});break;case"e":var w=y.right+this.xoffset;var v=(y.top+(this._plotDimensions.height-y.bottom))/2-this.getHeight()/2;this._elem.css({right:w,top:v});break;case"se":var w=y.right+this.xoffset;var v=y.bottom+this.yoffset;this._elem.css({right:w,bottom:v});break;case"s":var w=(y.left+(this._plotDimensions.width-y.right))/2-this.getWidth()/2;var v=y.bottom+this.yoffset;this._elem.css({left:w,bottom:v});break;case"sw":var w=x._left+this.xoffset;var v=y.bottom+this.yoffset;this._elem.css({left:w,bottom:v});break;case"w":var w=x._left+this.xoffset;var v=(y.top+(this._plotDimensions.height-y.bottom))/2-this.getHeight()/2;this._elem.css({left:w,top:v});break;default:var w=x._right-this.xoffset;var v=x._bottom+this.yoffset;this._elem.css({right:w,bottom:v});break}}};h.jqplot.sprintf=function(){function A(G,C,D,F){var E=(G.length>=C)?"":Array(1+C-G.length>>>0).join(D);return F?G+E:E+G}function x(H,G,J,E,F,D){var I=E-H.length;if(I>0){var C=" ";if(D){C=" "}if(J||!F){H=A(H,E,C,J)}else{H=H.slice(0,G.length)+A("",I,"0",true)+H.slice(G.length)}}return H}function B(K,D,I,E,C,H,J,G){var F=K>>>0;I=I&&F&&{"2":"0b","8":"0","16":"0x"}[D]||"";K=I+A(F.toString(D),H||0,"0",false);return x(K,I,E,C,J,G)}function v(G,H,E,C,F,D){if(C!=null){G=G.slice(0,C)}return x(G,"",H,E,F,D)}var w=arguments,y=0,z=w[y++];return z.replace(h.jqplot.sprintf.regex,function(V,I,J,M,X,T,G){if(V=="%%"){return"%"}var N=false,K="",L=false,U=false,H=false;for(var S=0;J&&S<J.length;S++){switch(J.charAt(S)){case" ":K=" ";break;case"+":K="+";break;case"-":N=true;break;case"0":L=true;break;case"#":U=true;break;case"&":H=true;break}}if(!M){M=0}else{if(M=="*"){M=+w[y++]}else{if(M.charAt(0)=="*"){M=+w[M.slice(1,-1)]}else{M=+M}}}if(M<0){M=-M;N=true}if(!isFinite(M)){throw new Error("$.jqplot.sprintf: (minimum-)width must be finite")}if(!T){T="fFeE".indexOf(G)>-1?6:(G=="d")?0:void (0)}else{if(T=="*"){T=+w[y++]}else{if(T.charAt(0)=="*"){T=+w[T.slice(1,-1)]}else{T=+T}}}var P=I?w[I.slice(0,-1)]:w[y++];switch(G){case"s":if(P==null){return""}return v(String(P),N,M,T,L,H);case"c":return v(String.fromCharCode(+P),N,M,T,L,H);case"b":return B(P,2,U,N,M,T,L,H);case"o":return B(P,8,U,N,M,T,L,H);case"x":return B(P,16,U,N,M,T,L,H);case"X":return B(P,16,U,N,M,T,L,H).toUpperCase();case"u":return B(P,10,U,N,M,T,L,H);case"i":case"d":var E=parseInt(+P,10);if(isNaN(E)){return""}var R=E<0?"-":K;P=R+A(String(Math.abs(E)),T,"0",false);return x(P,R,N,M,L,H);case"e":case"E":case"f":case"F":case"g":case"G":var E=+P;if(isNaN(E)){return""}var R=E<0?"-":K;var F=["toExponential","toFixed","toPrecision"]["efg".indexOf(G.toLowerCase())];var W=["toString","toUpperCase"]["eEfFgG".indexOf(G)%2];P=R+Math.abs(E)[F](T);return x(P,R,N,M,L,H)[W]();case"p":case"P":var E=+P;if(isNaN(E)){return""}var R=E<0?"-":K;var O=String(Number(Math.abs(E)).toExponential()).split(/e|E/);var D=(O[0].indexOf(".")!=-1)?O[0].length-1:O[0].length;var Q=(O[1]<0)?-O[1]-1:0;if(Math.abs(E)<1){if(D+Q<=T){P=R+Math.abs(E).toPrecision(D)}else{if(D<=T-1){P=R+Math.abs(E).toExponential(D-1)}else{P=R+Math.abs(E).toExponential(T-1)}}}else{var C=(D<=T)?D:T;P=R+Math.abs(E).toPrecision(C)}var W=["toString","toUpperCase"]["pP".indexOf(G)%2];return x(P,R,N,M,L,H)[W]();case"n":return"";default:return V}})};h.jqplot.sprintf.regex=/%%|%(\d+\$)?([-+#0& ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([nAscboxXuidfegpEGP])/g})(jQuery); \ No newline at end of file +(function(G){var q;G.fn.emptyForce=function(){for(var aa=0,ab;(ab=G(this)[aa])!=null;aa++){if(ab.nodeType===1){jQuery.cleanData(ab.getElementsByTagName("*"))}if(G.jqplot_use_excanvas){ab.outerHTML=""}else{while(ab.firstChild){ab.removeChild(ab.firstChild)}}ab=null}return G(this)};G.fn.removeChildForce=function(aa){while(aa.firstChild){this.removeChildForce(aa.firstChild);aa.removeChild(aa.firstChild)}};G.jqplot=function(ag,ad,ab){var ac,aa;if(ab==null){if(jQuery.isArray(ad)){ac=ad;aa=null}else{if(typeof(ad)==="object"){ac=null;aa=ad}}}else{ac=ad;aa=ab}var af=new M();G("#"+ag).removeClass("jqplot-error");if(G.jqplot.config.catchErrors){try{af.init(ag,ac,aa);af.draw();af.themeEngine.init.call(af);return af}catch(ae){var ah=G.jqplot.config.errorMessage||ae.message;G("#"+ag).append('<div class="jqplot-error-message">'+ah+"</div>");G("#"+ag).addClass("jqplot-error");document.getElementById(ag).style.background=G.jqplot.config.errorBackground;document.getElementById(ag).style.border=G.jqplot.config.errorBorder;document.getElementById(ag).style.fontFamily=G.jqplot.config.errorFontFamily;document.getElementById(ag).style.fontSize=G.jqplot.config.errorFontSize;document.getElementById(ag).style.fontStyle=G.jqplot.config.errorFontStyle;document.getElementById(ag).style.fontWeight=G.jqplot.config.errorFontWeight}}else{af.init(ag,ac,aa);af.draw();af.themeEngine.init.call(af);return af}};G.jqplot.version="1.0.0b2_r947";G.jqplot.CanvasManager=function(){if(typeof G.jqplot.CanvasManager.canvases=="undefined"){G.jqplot.CanvasManager.canvases=[];G.jqplot.CanvasManager.free=[]}var aa=[];this.getCanvas=function(){var ad;var ac=true;if(!G.jqplot.use_excanvas){for(var ae=0,ab=G.jqplot.CanvasManager.canvases.length;ae<ab;ae++){if(G.jqplot.CanvasManager.free[ae]===true){ac=false;ad=G.jqplot.CanvasManager.canvases[ae];G.jqplot.CanvasManager.free[ae]=false;aa.push(ae);break}}}if(ac){ad=document.createElement("canvas");aa.push(G.jqplot.CanvasManager.canvases.length);G.jqplot.CanvasManager.canvases.push(ad);G.jqplot.CanvasManager.free.push(false)}return ad};this.initCanvas=function(ab){if(G.jqplot.use_excanvas){return window.G_vmlCanvasManager.initElement(ab)}return ab};this.freeAllCanvases=function(){for(var ac=0,ab=aa.length;ac<ab;ac++){this.freeCanvas(aa[ac])}aa=[]};this.freeCanvas=function(ab){if(G.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==q){window.G_vmlCanvasManager.uninitElement(G.jqplot.CanvasManager.canvases[ab]);G.jqplot.CanvasManager.canvases[ab]=null}else{var ac=G.jqplot.CanvasManager.canvases[ab];ac.getContext("2d").clearRect(0,0,ac.width,ac.height);G(ac).unbind().removeAttr("class").removeAttr("style");G(ac).css({left:"",top:"",position:""});ac.width=0;ac.height=0;G.jqplot.CanvasManager.free[ab]=true}}};G.jqplot.log=function(){if(window.console){window.console.log.apply(window.console,arguments)}};G.jqplot.config={enablePlugins:false,defaultHeight:300,defaultWidth:400,UTCAdjust:false,timezoneOffset:new Date(new Date().getTimezoneOffset()*60000),errorMessage:"",errorBackground:"",errorBorder:"",errorFontFamily:"",errorFontSize:"",errorFontStyle:"",errorFontWeight:"",catchErrors:false,defaultTickFormatString:"%.1f",defaultColors:["#4bb2c5","#EAA228","#c5b47f","#579575","#839557","#958c12","#953579","#4b5de4","#d8b83f","#ff5800","#0085cc","#c747a3","#cddf54","#FBD178","#26B4E3","#bd70c7"],defaultNegativeColors:["#498991","#C08840","#9F9274","#546D61","#646C4A","#6F6621","#6E3F5F","#4F64B0","#A89050","#C45923","#187399","#945381","#959E5C","#C7AF7B","#478396","#907294"],dashLength:4,gapLength:4,dotGapLength:2.5,srcLocation:"jqplot/src/",pluginLocation:"jqplot/src/plugins/"};G.jqplot.arrayMax=function(aa){return Math.max.apply(Math,aa)};G.jqplot.arrayMin=function(aa){return Math.min.apply(Math,aa)};G.jqplot.enablePlugins=G.jqplot.config.enablePlugins;G.jqplot.support_canvas=function(){if(typeof G.jqplot.support_canvas.result=="undefined"){G.jqplot.support_canvas.result=!!document.createElement("canvas").getContext}return G.jqplot.support_canvas.result};G.jqplot.support_canvas_text=function(){if(typeof G.jqplot.support_canvas_text.result=="undefined"){if(window.G_vmlCanvasManager!==q&&window.G_vmlCanvasManager._version>887){G.jqplot.support_canvas_text.result=true}else{G.jqplot.support_canvas_text.result=!!(document.createElement("canvas").getContext&&typeof document.createElement("canvas").getContext("2d").fillText=="function")}}return G.jqplot.support_canvas_text.result};G.jqplot.use_excanvas=(G.browser.msie&&!G.jqplot.support_canvas())?true:false;G.jqplot.preInitHooks=[];G.jqplot.postInitHooks=[];G.jqplot.preParseOptionsHooks=[];G.jqplot.postParseOptionsHooks=[];G.jqplot.preDrawHooks=[];G.jqplot.postDrawHooks=[];G.jqplot.preDrawSeriesHooks=[];G.jqplot.postDrawSeriesHooks=[];G.jqplot.preDrawLegendHooks=[];G.jqplot.addLegendRowHooks=[];G.jqplot.preSeriesInitHooks=[];G.jqplot.postSeriesInitHooks=[];G.jqplot.preParseSeriesOptionsHooks=[];G.jqplot.postParseSeriesOptionsHooks=[];G.jqplot.eventListenerHooks=[];G.jqplot.preDrawSeriesShadowHooks=[];G.jqplot.postDrawSeriesShadowHooks=[];G.jqplot.ElemContainer=function(){this._elem;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null}};G.jqplot.ElemContainer.prototype.createElement=function(ad,af,ab,ac,ag){this._offsets=af;var aa=ab||"jqplot";var ae=document.createElement(ad);this._elem=G(ae);this._elem.addClass(aa);this._elem.css(ac);this._elem.attr(ag);ae=null;return this._elem};G.jqplot.ElemContainer.prototype.getWidth=function(){if(this._elem){return this._elem.outerWidth(true)}else{return null}};G.jqplot.ElemContainer.prototype.getHeight=function(){if(this._elem){return this._elem.outerHeight(true)}else{return null}};G.jqplot.ElemContainer.prototype.getPosition=function(){if(this._elem){return this._elem.position()}else{return{top:null,left:null,bottom:null,right:null}}};G.jqplot.ElemContainer.prototype.getTop=function(){return this.getPosition().top};G.jqplot.ElemContainer.prototype.getLeft=function(){return this.getPosition().left};G.jqplot.ElemContainer.prototype.getBottom=function(){return this._elem.css("bottom")};G.jqplot.ElemContainer.prototype.getRight=function(){return this._elem.css("right")};function r(aa){G.jqplot.ElemContainer.call(this);this.name=aa;this._series=[];this.show=false;this.tickRenderer=G.jqplot.AxisTickRenderer;this.tickOptions={};this.labelRenderer=G.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=G.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._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={}}r.prototype=new G.jqplot.ElemContainer();r.prototype.constructor=r;r.prototype.init=function(){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)};r.prototype.draw=function(aa,ab){if(this.__ticks){this.__ticks=null}return this.renderer.draw.call(this,aa,ab)};r.prototype.set=function(){this.renderer.set.call(this)};r.prototype.pack=function(ab,aa){if(this.show){this.renderer.pack.call(this,ab,aa)}if(this._min==null){this._min=this.min;this._max=this.max;this._tickInterval=this.tickInterval;this._numberTicks=this.numberTicks;this.__ticks=this._ticks}};r.prototype.reset=function(){this.renderer.reset.call(this)};r.prototype.resetScale=function(aa){G.extend(true,this,{min:null,max:null,numberTicks:null,tickInterval:null,_ticks:[],ticks:[]},aa);this.resetDataBounds()};r.prototype.resetDataBounds=function(){var ah=this._dataBounds;ah.min=null;ah.max=null;var ab,ai,af;var ac=(this.show)?true:false;for(var ae=0;ae<this._series.length;ae++){ai=this._series[ae];af=ai._plotData;if(ai._type==="line"&&ai.renderer.bands.show&&this.name.charAt(0)!=="x"){af=[[0,ai.renderer.bands._min],[1,ai.renderer.bands._max]]}var aa=1,ag=1;if(ai._type!=null&&ai._type=="ohlc"){aa=3;ag=2}for(var ad=0,ab=af.length;ad<ab;ad++){if(this.name=="xaxis"||this.name=="x2axis"){if((af[ad][0]!=null&&af[ad][0]<ah.min)||ah.min==null){ah.min=af[ad][0]}if((af[ad][0]!=null&&af[ad][0]>ah.max)||ah.max==null){ah.max=af[ad][0]}}else{if((af[ad][aa]!=null&&af[ad][aa]<ah.min)||ah.min==null){ah.min=af[ad][aa]}if((af[ad][ag]!=null&&af[ad][ag]>ah.max)||ah.max==null){ah.max=af[ad][ag]}}}if(ac&&ai.renderer.constructor!==G.jqplot.BarRenderer){ac=false}else{if(ac&&this._options.hasOwnProperty("forceTickAt0")&&this._options.forceTickAt0==false){ac=false}else{if(ac&&ai.renderer.constructor===G.jqplot.BarRenderer){if(ai.barDirection=="vertical"&&this.name!="xaxis"&&this.name!="x2axis"){if(this._options.pad!=null||this._options.padMin!=null){ac=false}}else{if(ai.barDirection=="horizontal"&&(this.name=="xaxis"||this.name=="x2axis")){if(this._options.pad!=null||this._options.padMin!=null){ac=false}}}}}}}if(ac&&this.renderer.constructor===G.jqplot.LinearAxisRenderer&&ah.min>=0){this.padMin=1;this.forceTickAt0=true}};function m(aa){G.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=G.jqplot.TableLegendRenderer;this.rendererOptions={};this.preDraw=false;this.marginTop=null;this.marginRight=null;this.marginBottom=null;this.marginLeft=null;this.escapeHtml=false;this._series=[];G.extend(true,this,aa)}m.prototype=new G.jqplot.ElemContainer();m.prototype.constructor=m;m.prototype.setOptions=function(aa){G.extend(true,this,aa);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}};m.prototype.init=function(){this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions)};m.prototype.draw=function(ab){for(var aa=0;aa<G.jqplot.preDrawLegendHooks.length;aa++){G.jqplot.preDrawLegendHooks[aa].call(this,ab)}return this.renderer.draw.call(this,ab)};m.prototype.pack=function(aa){this.renderer.pack.call(this,aa)};function t(aa){G.jqplot.ElemContainer.call(this);this.text=aa;this.show=true;this.fontFamily;this.fontSize;this.textAlign;this.textColor;this.renderer=G.jqplot.DivTitleRenderer;this.rendererOptions={};this.escapeHtml=false}t.prototype=new G.jqplot.ElemContainer();t.prototype.constructor=t;t.prototype.init=function(){this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions)};t.prototype.draw=function(aa){return this.renderer.draw.call(this,aa)};t.prototype.pack=function(){this.renderer.pack.call(this)};function N(){G.jqplot.ElemContainer.call(this);this.show=true;this.xaxis="xaxis";this._xaxis;this.yaxis="yaxis";this._yaxis;this.gridBorderWidth=2;this.renderer=G.jqplot.LineRenderer;this.rendererOptions={};this.data=[];this.gridData=[];this.label="";this.showLabel=true;this.color;this.negativeColor;this.lineWidth=2.5;this.lineJoin="round";this.lineCap="round";this.linePattern="solid";this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.25;this.shadowDepth=3;this.shadowAlpha="0.1";this.breakOnNull=false;this.markerRenderer=G.jqplot.MarkerRenderer;this.markerOptions={};this.showLine=true;this.showMarker=true;this.index;this.fill=false;this.fillColor;this.fillAlpha;this.fillAndStroke=false;this.disableStack=false;this._stack=false;this.neighborThreshold=4;this.fillToZero=false;this.fillToValue=0;this.fillAxis="y";this.useNegativeColors=true;this._stackData=[];this._plotData=[];this._plotValues={x:[],y:[]};this._intervals={x:{},y:{}};this._prevPlotData=[];this._prevGridData=[];this._stackAxis="y";this._primaryAxis="_xaxis";this.canvas=new G.jqplot.GenericCanvas();this.shadowCanvas=new G.jqplot.GenericCanvas();this.plugins={};this._sumy=0;this._sumx=0;this._type=""}N.prototype=new G.jqplot.ElemContainer();N.prototype.constructor=N;N.prototype.init=function(ac,ag,ae){this.index=ac;this.gridBorderWidth=ag;var af=this.data;var ab=[],ad;for(ad=0;ad<af.length;ad++){if(!this.breakOnNull){if(af[ad]==null||af[ad][0]==null||af[ad][1]==null){continue}else{ab.push(af[ad])}}else{ab.push(af[ad])}}this.data=ab;if(!this.color&&this.show){this.color=ae.colorGenerator.get(this.index)}if(!this.negativeColor&&this.show){this.negativeColor=ae.negativeColorGenerator.get(this.index)}if(!this.fillColor){this.fillColor=this.color}if(this.fillAlpha){var aa=G.jqplot.normalize2rgb(this.fillColor);var aa=G.jqplot.getColorComponents(aa);this.fillColor="rgba("+aa[0]+","+aa[1]+","+aa[2]+","+this.fillAlpha+")"}this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions,ae);this.markerRenderer=new this.markerRenderer();if(!this.markerOptions.color){this.markerOptions.color=this.color}if(this.markerOptions.show==null){this.markerOptions.show=this.showMarker}this.showMarker=this.markerOptions.show;this.markerRenderer.init(this.markerOptions)};N.prototype.draw=function(ag,ad,af){var ab=(ad==q)?{}:ad;ag=(ag==q)?this.canvas._ctx:ag;var aa,ae,ac;for(aa=0;aa<G.jqplot.preDrawSeriesHooks.length;aa++){G.jqplot.preDrawSeriesHooks[aa].call(this,ag,ab)}if(this.show){this.renderer.setGridData.call(this,af);if(!ab.preventJqPlotSeriesDrawTrigger){G(ag.canvas).trigger("jqplotSeriesDraw",[this.data,this.gridData])}ae=[];if(ab.data){ae=ab.data}else{if(!this._stack){ae=this.data}else{ae=this._plotData}}ac=ab.gridData||this.renderer.makeGridData.call(this,ae,af);if(this._type==="line"&&this.renderer.smooth&&this.renderer._smoothedData.length){ac=this.renderer._smoothedData}this.renderer.draw.call(this,ag,ac,ab,af)}for(aa=0;aa<G.jqplot.postDrawSeriesHooks.length;aa++){G.jqplot.postDrawSeriesHooks[aa].call(this,ag,ab)}ag=ad=af=aa=ae=ac=null};N.prototype.drawShadow=function(ag,ad,af){var ab=(ad==q)?{}:ad;ag=(ag==q)?this.shadowCanvas._ctx:ag;var aa,ae,ac;for(aa=0;aa<G.jqplot.preDrawSeriesShadowHooks.length;aa++){G.jqplot.preDrawSeriesShadowHooks[aa].call(this,ag,ab)}if(this.shadow){this.renderer.setGridData.call(this,af);ae=[];if(ab.data){ae=ab.data}else{if(!this._stack){ae=this.data}else{ae=this._plotData}}ac=ab.gridData||this.renderer.makeGridData.call(this,ae,af);this.renderer.drawShadow.call(this,ag,ac,ab)}for(aa=0;aa<G.jqplot.postDrawSeriesShadowHooks.length;aa++){G.jqplot.postDrawSeriesShadowHooks[aa].call(this,ag,ab)}ag=ad=af=aa=ae=ac=null};N.prototype.toggleDisplay=function(ab){var aa,ac;if(ab.data.series){aa=ab.data.series}else{aa=this}if(ab.data.speed){ac=ab.data.speed}if(ac){if(aa.canvas._elem.is(":hidden")){aa.canvas._elem.removeClass("jqplot-series-hidden");if(aa.shadowCanvas._elem){aa.shadowCanvas._elem.fadeIn(ac)}aa.canvas._elem.fadeIn(ac);aa.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+aa.index).fadeIn(ac)}else{aa.canvas._elem.addClass("jqplot-series-hidden");if(aa.shadowCanvas._elem){aa.shadowCanvas._elem.fadeOut(ac)}aa.canvas._elem.fadeOut(ac);aa.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+aa.index).fadeOut(ac)}}else{if(aa.canvas._elem.is(":hidden")){aa.canvas._elem.removeClass("jqplot-series-hidden");if(aa.shadowCanvas._elem){aa.shadowCanvas._elem.show()}aa.canvas._elem.show();aa.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+aa.index).show()}else{aa.canvas._elem.addClass("jqplot-series-hidden");if(aa.shadowCanvas._elem){aa.shadowCanvas._elem.hide()}aa.canvas._elem.hide();aa.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+aa.index).hide()}}};function H(){G.jqplot.ElemContainer.call(this);this.drawGridlines=true;this.gridLineColor="#cccccc";this.gridLineWidth=1;this.background="#fffdf6";this.borderColor="#999999";this.borderWidth=2;this.drawBorder=true;this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.5;this.shadowWidth=3;this.shadowDepth=3;this.shadowColor=null;this.shadowAlpha="0.07";this._left;this._top;this._right;this._bottom;this._width;this._height;this._axes=[];this.renderer=G.jqplot.CanvasGridRenderer;this.rendererOptions={};this._offsets={top:null,bottom:null,left:null,right:null}}H.prototype=new G.jqplot.ElemContainer();H.prototype.constructor=H;H.prototype.init=function(){this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions)};H.prototype.createElement=function(aa,ab){this._offsets=aa;return this.renderer.createElement.call(this,ab)};H.prototype.draw=function(){this.renderer.draw.call(this)};G.jqplot.GenericCanvas=function(){G.jqplot.ElemContainer.call(this);this._ctx};G.jqplot.GenericCanvas.prototype=new G.jqplot.ElemContainer();G.jqplot.GenericCanvas.prototype.constructor=G.jqplot.GenericCanvas;G.jqplot.GenericCanvas.prototype.createElement=function(ae,ac,ab,af){this._offsets=ae;var aa="jqplot";if(ac!=q){aa=ac}var ad;ad=af.canvasManager.getCanvas();if(ab!=null){this._plotDimensions=ab}ad.width=this._plotDimensions.width-this._offsets.left-this._offsets.right;ad.height=this._plotDimensions.height-this._offsets.top-this._offsets.bottom;this._elem=G(ad);this._elem.css({position:"absolute",left:this._offsets.left,top:this._offsets.top});this._elem.addClass(aa);ad=af.canvasManager.initCanvas(ad);ad=null;return this._elem};G.jqplot.GenericCanvas.prototype.setContext=function(){this._ctx=this._elem.get(0).getContext("2d");return this._ctx};G.jqplot.GenericCanvas.prototype.resetCanvas=function(){if(this._elem){if(G.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==q){window.G_vmlCanvasManager.uninitElement(this._elem.get(0))}this._elem.emptyForce()}this._ctx=null};G.jqplot.HooksManager=function(){this.hooks=[]};G.jqplot.HooksManager.prototype.addOnce=function(ab){var ac=false,aa;for(aa=0;aa<this.hooks.length;aa++){if(this.hooks[aa][0]==ab){ac=true}}if(!ac){this.hooks.push(ab)}};G.jqplot.HooksManager.prototype.add=function(aa){this.hooks.push(aa)};G.jqplot.EventListenerManager=function(){this.hooks=[]};G.jqplot.EventListenerManager.prototype.addOnce=function(ad,ac){var ae=false,ab,aa;for(aa=0;aa<this.hooks.length;aa++){ab=this.hooks[aa];if(ab[0]==ad&&ab[1]==ac){ae=true}}if(!ae){this.hooks.push([ad,ac])}};G.jqplot.EventListenerManager.prototype.add=function(ab,aa){this.hooks.push([ab,aa])};var P=["yMidAxis","xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];function M(){this.data=[];this.dataRenderer;this.dataRendererOptions;this.noDataIndicator={show:false,indicator:"Loading Data...",axes:{xaxis:{min:0,max:10,tickInterval:2,show:true},yaxis:{min:0,max:12,tickInterval:3,show:true}}};this.targetId=null;this.target=null;this.defaults={axesDefaults:{},axes:{xaxis:{},yaxis:{},x2axis:{},y2axis:{},y3axis:{},y4axis:{},y5axis:{},y6axis:{},y7axis:{},y8axis:{},y9axis:{},yMidAxis:{}},seriesDefaults:{},series:[]};this.series=[];this.axes={xaxis:new r("xaxis"),yaxis:new r("yaxis"),x2axis:new r("x2axis"),y2axis:new r("y2axis"),y3axis:new r("y3axis"),y4axis:new r("y4axis"),y5axis:new r("y5axis"),y6axis:new r("y6axis"),y7axis:new r("y7axis"),y8axis:new r("y8axis"),y9axis:new r("y9axis"),yMidAxis:new r("yMidAxis")};this.grid=new H();this.legend=new m();this.baseCanvas=new G.jqplot.GenericCanvas();this.seriesStack=[];this.previousSeriesStack=[];this.eventCanvas=new G.jqplot.GenericCanvas();this._width=null;this._height=null;this._plotDimensions={height:null,width:null};this._gridPadding={top:null,right:null,bottom:null,left:null};this._defaultGridPadding={top:10,right:10,bottom:23,left:10};this.syncXTicks=true;this.syncYTicks=true;this.seriesColors=G.jqplot.config.defaultColors;this.negativeSeriesColors=G.jqplot.config.defaultNegativeColors;this.sortData=true;var ac=0;this.textColor;this.fontFamily;this.fontSize;this.title=new t();this.options={};this.stackSeries=false;this.defaultAxisStart=1;this._stackData=[];this._plotData=[];this.plugins={};this._drawCount=0;this.drawIfHidden=false;this.captureRightClick=false;this.themeEngine=new G.jqplot.ThemeEngine();this._sumy=0;this._sumx=0;this.preInitHooks=new G.jqplot.HooksManager();this.postInitHooks=new G.jqplot.HooksManager();this.preParseOptionsHooks=new G.jqplot.HooksManager();this.postParseOptionsHooks=new G.jqplot.HooksManager();this.preDrawHooks=new G.jqplot.HooksManager();this.postDrawHooks=new G.jqplot.HooksManager();this.preDrawSeriesHooks=new G.jqplot.HooksManager();this.postDrawSeriesHooks=new G.jqplot.HooksManager();this.preDrawLegendHooks=new G.jqplot.HooksManager();this.addLegendRowHooks=new G.jqplot.HooksManager();this.preSeriesInitHooks=new G.jqplot.HooksManager();this.postSeriesInitHooks=new G.jqplot.HooksManager();this.preParseSeriesOptionsHooks=new G.jqplot.HooksManager();this.postParseSeriesOptionsHooks=new G.jqplot.HooksManager();this.eventListenerHooks=new G.jqplot.EventListenerManager();this.preDrawSeriesShadowHooks=new G.jqplot.HooksManager();this.postDrawSeriesShadowHooks=new G.jqplot.HooksManager();this.colorGenerator=new G.jqplot.ColorGenerator();this.negativeColorGenerator=new G.jqplot.ColorGenerator();this.canvasManager=new G.jqplot.CanvasManager();this.init=function(ak,ah,am){am=am||{};for(var ai=0;ai<G.jqplot.preInitHooks.length;ai++){G.jqplot.preInitHooks[ai].call(this,ak,ah,am)}for(var ai=0;ai<this.preInitHooks.hooks.length;ai++){this.preInitHooks.hooks[ai].call(this,ak,ah,am)}this.targetId="#"+ak;this.target=G("#"+ak);this.target.removeClass("jqplot-error");if(!this.target.get(0)){throw"No plot target specified"}if(this.target.css("position")=="static"){this.target.css("position","relative")}if(!this.target.hasClass("jqplot-target")){this.target.addClass("jqplot-target")}if(!this.target.height()){var aj;if(am&&am.height){aj=parseInt(am.height,10)}else{if(this.target.attr("data-height")){aj=parseInt(this.target.attr("data-height"),10)}else{aj=parseInt(G.jqplot.config.defaultHeight,10)}}this._height=aj;this.target.css("height",aj+"px")}else{this._height=aj=this.target.height()}if(!this.target.width()){var al;if(am&&am.width){al=parseInt(am.width,10)}else{if(this.target.attr("data-width")){al=parseInt(this.target.attr("data-width"),10)}else{al=parseInt(G.jqplot.config.defaultWidth,10)}}this._width=al;this.target.css("width",al+"px")}else{this._width=al=this.target.width()}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Canvas dimension not set"}if(am.dataRenderer&&jQuery.isFunction(am.dataRenderer)){if(am.dataRendererOptions){this.dataRendererOptions=am.dataRendererOptions}this.dataRenderer=am.dataRenderer;ah=this.dataRenderer(ah,this,this.dataRendererOptions)}if(am.noDataIndicator&&jQuery.isPlainObject(am.noDataIndicator)){G.extend(true,this.noDataIndicator,am.noDataIndicator)}if(ah==null||jQuery.isArray(ah)==false||ah.length==0||jQuery.isArray(ah[0])==false||ah[0].length==0){if(this.noDataIndicator.show==false){throw {name:"DataError",message:"No data to plot."}}else{for(var ae in this.noDataIndicator.axes){for(var af in this.noDataIndicator.axes[ae]){this.axes[ae][af]=this.noDataIndicator.axes[ae][af]}}this.postDrawHooks.add(function(){var at=this.eventCanvas.getHeight();var ap=this.eventCanvas.getWidth();var ao=G('<div class="jqplot-noData-container" style="position:absolute;"></div>');this.target.append(ao);ao.height(at);ao.width(ap);ao.css("top",this.eventCanvas._offsets.top);ao.css("left",this.eventCanvas._offsets.left);var ar=G('<div class="jqplot-noData-contents" style="text-align:center; position:relative; margin-left:auto; margin-right:auto;"></div>');ao.append(ar);ar.html(this.noDataIndicator.indicator);var aq=ar.height();var an=ar.width();ar.height(aq);ar.width(an);ar.css("top",(at-aq)/2+"px")})}}this.data=ah;this.parseOptions(am);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;for(var ai=0;ai<this.series.length;ai++){this.seriesStack.push(ai);this.previousSeriesStack.push(ai);this.series[ai].shadowCanvas._plotDimensions=this._plotDimensions;this.series[ai].canvas._plotDimensions=this._plotDimensions;for(var ag=0;ag<G.jqplot.preSeriesInitHooks.length;ag++){G.jqplot.preSeriesInitHooks[ag].call(this.series[ai],ak,ah,this.options.seriesDefaults,this.options.series[ai],this)}for(var ag=0;ag<this.preSeriesInitHooks.hooks.length;ag++){this.preSeriesInitHooks.hooks[ag].call(this.series[ai],ak,ah,this.options.seriesDefaults,this.options.series[ai],this)}this.populatePlotData(this.series[ai],ai);this.series[ai]._plotDimensions=this._plotDimensions;this.series[ai].init(ai,this.grid.borderWidth,this);for(var ag=0;ag<G.jqplot.postSeriesInitHooks.length;ag++){G.jqplot.postSeriesInitHooks[ag].call(this.series[ai],ak,ah,this.options.seriesDefaults,this.options.series[ai],this)}for(var ag=0;ag<this.postSeriesInitHooks.hooks.length;ag++){this.postSeriesInitHooks.hooks[ag].call(this.series[ai],ak,ah,this.options.seriesDefaults,this.options.series[ai],this)}this._sumy+=this.series[ai]._sumy;this._sumx+=this.series[ai]._sumx}for(var ai=0;ai<12;ai++){name=P[ai];this.axes[name]._plotDimensions=this._plotDimensions;this.axes[name].init();if(this.axes[name].borderColor==null){if(name.charAt(0)!=="x"&&this.axes[name].useSeriesColor===true&&this.axes[name].show){this.axes[name].borderColor=this.axes[name]._series[0].color}else{this.axes[name].borderColor=this.grid.borderColor}}}if(this.sortData){aa(this.series)}this.grid.init();this.grid._axes=this.axes;this.legend._series=this.series;for(var ai=0;ai<G.jqplot.postInitHooks.length;ai++){G.jqplot.postInitHooks[ai].call(this,ak,ah,am)}for(var ai=0;ai<this.postInitHooks.hooks.length;ai++){this.postInitHooks.hooks[ai].call(this,ak,ah,am)}};this.resetAxesScale=function(aj,af){var ah=af||{};var ai=aj||this.axes;if(ai===true){ai=this.axes}if(jQuery.isArray(ai)){for(var ag=0;ag<ai.length;ag++){this.axes[ai[ag]].resetScale(ah[ai[ag]])}}else{if(typeof(ai)==="object"){for(var ae in ai){this.axes[ae].resetScale(ah[ae])}}}};this.reInitialize=function(){this._height=this.target.height();this._width=this.target.width();if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Target dimension not set"}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;for(var ai in this.axes){this.axes[ai]._plotWidth=this._width;this.axes[ai]._plotHeight=this._height}this.title._plotWidth=this._width;if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this._sumy=0;this._sumx=0;for(var ag=0;ag<this.series.length;ag++){this.populatePlotData(this.series[ag],ag);if(this.series[ag]._type==="line"&&this.series[ag].renderer.bands.show){this.series[ag].renderer.initBands.call(this.series[ag],this.series[ag].renderer.options,this)}this.series[ag]._plotDimensions=this._plotDimensions;this.series[ag].canvas._plotDimensions=this._plotDimensions;this._sumy+=this.series[ag]._sumy;this._sumx+=this.series[ag]._sumx}for(var ae=0;ae<12;ae++){name=P[ae];var af=this.axes[name]._ticks;for(var ag=0;ag<af.length;ag++){var ah=af[ag]._elem;if(ah){if(G.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==q){window.G_vmlCanvasManager.uninitElement(ah.get(0))}ah.emptyForce();ah=null;af._elem=null}}af=null;this.axes[name]._plotDimensions=this._plotDimensions;this.axes[name]._ticks=[]}if(this.sortData){aa(this.series)}this.grid._axes=this.axes;this.legend._series=this.series};function aa(ai){var am,an,ao,ae,al;for(var aj=0;aj<ai.length;aj++){var af;var ak=[ai[aj].data,ai[aj]._stackData,ai[aj]._plotData,ai[aj]._prevPlotData];for(var ag=0;ag<4;ag++){af=true;am=ak[ag];if(ai[aj]._stackAxis=="x"){for(var ah=0;ah<am.length;ah++){if(typeof(am[ah][1])!="number"){af=false;break}}if(af){am.sort(function(aq,ap){return aq[1]-ap[1]})}}else{for(var ah=0;ah<am.length;ah++){if(typeof(am[ah][0])!="number"){af=false;break}}if(af){am.sort(function(aq,ap){return aq[0]-ap[0]})}}}}}this.populatePlotData=function(ai,aj){this._plotData=[];this._stackData=[];ai._stackData=[];ai._plotData=[];var am={x:[],y:[]};if(this.stackSeries&&!ai.disableStack){ai._stack=true;var ak=ai._stackAxis=="x"?0:1;var al=ak?0:1;var an=G.extend(true,[],ai.data);var ao=G.extend(true,[],ai.data);for(var ag=0;ag<aj;ag++){var ae=this.series[ag].data;for(var af=0;af<ae.length;af++){an[af][0]+=ae[af][0];an[af][1]+=ae[af][1];ao[af][ak]+=ae[af][ak]}}for(var ah=0;ah<ao.length;ah++){am.x.push(ao[ah][0]);am.y.push(ao[ah][1])}this._plotData.push(ao);this._stackData.push(an);ai._stackData=an;ai._plotData=ao;ai._plotValues=am}else{for(var ah=0;ah<ai.data.length;ah++){am.x.push(ai.data[ah][0]);am.y.push(ai.data[ah][1])}this._stackData.push(ai.data);this.series[aj]._stackData=ai.data;this._plotData.push(ai.data);ai._plotData=ai.data;ai._plotValues=am}if(aj>0){ai._prevPlotData=this.series[aj-1]._plotData}ai._sumy=0;ai._sumx=0;for(ah=ai.data.length-1;ah>-1;ah--){ai._sumy+=ai.data[ah][1];ai._sumx+=ai.data[ah][0]}};this.getNextSeriesColor=(function(af){var ae=0;var ag=af.seriesColors;return function(){if(ae<ag.length){return ag[ae++]}else{ae=0;return ag[ae++]}}})(this);this.parseOptions=function(am){for(var ai=0;ai<this.preParseOptionsHooks.hooks.length;ai++){this.preParseOptionsHooks.hooks[ai].call(this,am)}for(var ai=0;ai<G.jqplot.preParseOptionsHooks.length;ai++){G.jqplot.preParseOptionsHooks[ai].call(this,am)}this.options=G.extend(true,{},this.defaults,am);this.stackSeries=this.options.stackSeries;if(this.options.seriesColors){this.seriesColors=this.options.seriesColors}if(this.options.negativeSeriesColors){this.negativeSeriesColors=this.options.negativeSeriesColors}if(this.options.captureRightClick){this.captureRightClick=this.options.captureRightClick}this.defaultAxisStart=(am&&am.defaultAxisStart!=null)?am.defaultAxisStart:this.defaultAxisStart;this.colorGenerator.setColors(this.seriesColors);this.negativeColorGenerator.setColors(this.negativeSeriesColors);G.extend(true,this._gridPadding,this.options.gridPadding);this.sortData=(this.options.sortData!=null)?this.options.sortData:this.sortData;for(var ai=0;ai<12;ai++){var ae=P[ai];var ag=this.axes[ae];ag._options=G.extend(true,{},this.options.axesDefaults,this.options.axes[ae]);G.extend(true,ag,this.options.axesDefaults,this.options.axes[ae]);ag._plotWidth=this._width;ag._plotHeight=this._height}var ak=function(aq,ao,ar){var an=[];var ap;ao=ao||"vertical";if(!jQuery.isArray(aq[0])){for(ap=0;ap<aq.length;ap++){if(ao=="vertical"){an.push([ar+ap,aq[ap]])}else{an.push([aq[ap],ar+ap])}}}else{G.extend(true,an,aq)}return an};var aj=0;for(var ai=0;ai<this.data.length;ai++){var al=new N();for(var ah=0;ah<G.jqplot.preParseSeriesOptionsHooks.length;ah++){G.jqplot.preParseSeriesOptionsHooks[ah].call(al,this.options.seriesDefaults,this.options.series[ai])}for(var ah=0;ah<this.preParseSeriesOptionsHooks.hooks.length;ah++){this.preParseSeriesOptionsHooks.hooks[ah].call(al,this.options.seriesDefaults,this.options.series[ai])}G.extend(true,al,{seriesColors:this.seriesColors,negativeSeriesColors:this.negativeSeriesColors},this.options.seriesDefaults,this.options.series[ai]);var af="vertical";if(al.renderer===G.jqplot.BarRenderer&&al.rendererOptions&&al.rendererOptions.barDirection=="horizontal"&&al.transposeData===true){af="horizontal"}al.data=ak(this.data[ai],af,this.defaultAxisStart);switch(al.xaxis){case"xaxis":al._xaxis=this.axes.xaxis;break;case"x2axis":al._xaxis=this.axes.x2axis;break;default:break}al._yaxis=this.axes[al.yaxis];al._xaxis._series.push(al);al._yaxis._series.push(al);if(al.show){al._xaxis.show=true;al._yaxis.show=true}if(!al.label){al.label="Series "+(ai+1).toString()}this.series.push(al);for(var ah=0;ah<G.jqplot.postParseSeriesOptionsHooks.length;ah++){G.jqplot.postParseSeriesOptionsHooks[ah].call(this.series[ai],this.options.seriesDefaults,this.options.series[ai])}for(var ah=0;ah<this.postParseSeriesOptionsHooks.hooks.length;ah++){this.postParseSeriesOptionsHooks.hooks[ah].call(this.series[ai],this.options.seriesDefaults,this.options.series[ai])}}G.extend(true,this.grid,this.options.grid);for(var ai=0;ai<12;ai++){var ae=P[ai];var ag=this.axes[ae];if(ag.borderWidth==null){ag.borderWidth=this.grid.borderWidth}}if(typeof this.options.title=="string"){this.title.text=this.options.title}else{if(typeof this.options.title=="object"){G.extend(true,this.title,this.options.title)}}this.title._plotWidth=this._width;this.legend.setOptions(this.options.legend);for(var ai=0;ai<G.jqplot.postParseOptionsHooks.length;ai++){G.jqplot.postParseOptionsHooks[ai].call(this,am)}for(var ai=0;ai<this.postParseOptionsHooks.hooks.length;ai++){this.postParseOptionsHooks.hooks[ai].call(this,am)}};this.destroy=function(){this.canvasManager.freeAllCanvases();if(this.eventCanvas&&this.eventCanvas._elem){this.eventCanvas._elem.unbind()}this.target.empty();this.target[0].innerHTML=""};this.replot=function(af){var ag=af||{};var ae=ag.clear||true;var ah=ag.resetAxes||false;this.target.trigger("jqplotPreReplot");if(ae){this.destroy()}this.reInitialize();if(ah){this.resetAxesScale(ah,ag.axes)}this.draw();this.target.trigger("jqplotPostReplot")};this.redraw=function(ae){ae=(ae!=null)?ae:true;this.target.trigger("jqplotPreRedraw");if(ae){this.canvasManager.freeAllCanvases();this.eventCanvas._elem.unbind();this.target.empty()}for(var ag in this.axes){this.axes[ag]._ticks=[]}for(var af=0;af<this.series.length;af++){this.populatePlotData(this.series[af],af)}this._sumy=0;this._sumx=0;for(af=0;af<this.series.length;af++){this._sumy+=this.series[af]._sumy;this._sumx+=this.series[af]._sumx}this.draw();this.target.trigger("jqplotPostRedraw")};this.draw=function(){if(this.drawIfHidden||this.target.is(":visible")){this.target.trigger("jqplotPreDraw");var al,aj;for(al=0;al<G.jqplot.preDrawHooks.length;al++){G.jqplot.preDrawHooks[al].call(this)}for(al=0;al<this.preDrawHooks.hooks.length;al++){this.preDrawHooks.hooks[al].call(this)}this.target.append(this.baseCanvas.createElement({left:0,right:0,top:0,bottom:0},"jqplot-base-canvas",null,this));this.baseCanvas.setContext();this.target.append(this.title.draw());this.title.pack({top:0,left:0});var au=this.legend.draw();var aq={top:0,left:0,bottom:0,right:0};if(this.legend.placement=="outsideGrid"){this.target.append(au);switch(this.legend.location){case"n":aq.top+=this.legend.getHeight();break;case"s":aq.bottom+=this.legend.getHeight();break;case"ne":case"e":case"se":aq.right+=this.legend.getWidth();break;case"nw":case"w":case"sw":aq.left+=this.legend.getWidth();break;default:aq.right+=this.legend.getWidth();break}au=au.detach()}var ae=this.axes;for(al=0;al<12;al++){name=P[al];this.target.append(ae[name].draw(this.baseCanvas._ctx,this));ae[name].set()}if(ae.yaxis.show){aq.left+=ae.yaxis.getWidth()}var ah=["y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];var af=[0,0,0,0,0,0,0,0];var an=0;var ai;for(ai=0;ai<8;ai++){if(ae[ah[ai]].show){an+=ae[ah[ai]].getWidth();af[ai]=an}}aq.right+=an;if(ae.x2axis.show){aq.top+=ae.x2axis.getHeight()}if(this.title.show){aq.top+=this.title.getHeight()}if(ae.xaxis.show){aq.bottom+=ae.xaxis.getHeight()}if(this.options.gridDimensions&&G.isPlainObject(this.options.gridDimensions)){var ak=parseInt(this.options.gridDimensions.width,10)||0;var ag=parseInt(this.options.gridDimensions.height,10)||0;var ar=(this._width-aq.left-aq.right-ak)/2;var at=(this._height-aq.top-aq.bottom-ag)/2;if(at>=0&&ar>=0){aq.top+=at;aq.bottom+=at;aq.left+=ar;aq.right+=ar}}var am=["top","bottom","left","right"];for(var ai in am){if(this._gridPadding[am[ai]]==null&&aq[am[ai]]>0){this._gridPadding[am[ai]]=aq[am[ai]]}else{if(this._gridPadding[am[ai]]==null){this._gridPadding[am[ai]]=this._defaultGridPadding[am[ai]]}}}var ap=(this.legend.placement=="outsideGrid")?{top:this.title.getHeight(),left:0,right:0,bottom:0}:this._gridPadding;ae.xaxis.pack({position:"absolute",bottom:this._gridPadding.bottom-ae.xaxis.getHeight(),left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});ae.yaxis.pack({position:"absolute",top:0,left:this._gridPadding.left-ae.yaxis.getWidth(),height:this._height},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top});ae.x2axis.pack({position:"absolute",top:this._gridPadding.top-ae.x2axis.getHeight(),left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});for(al=8;al>0;al--){ae[ah[al-1]].pack({position:"absolute",top:0,right:this._gridPadding.right-af[al-1]},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top})}var ao=(this._width-this._gridPadding.left-this._gridPadding.right)/2+this._gridPadding.left-ae.yMidAxis.getWidth()/2;ae.yMidAxis.pack({position:"absolute",top:0,left:ao,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();for(al=0;al<this.series.length;al++){aj=this.seriesStack[al];this.target.append(this.series[aj].shadowCanvas.createElement(this._gridPadding,"jqplot-series-shadowCanvas",null,this));this.series[aj].shadowCanvas.setContext();this.series[aj].shadowCanvas._elem.data("seriesIndex",aj)}for(al=0;al<this.series.length;al++){aj=this.seriesStack[al];this.target.append(this.series[aj].canvas.createElement(this._gridPadding,"jqplot-series-canvas",null,this));this.series[aj].canvas.setContext();this.series[aj].canvas._elem.data("seriesIndex",aj)}this.target.append(this.eventCanvas.createElement(this._gridPadding,"jqplot-event-canvas",null,this));this.eventCanvas.setContext();this.eventCanvas._ctx.fillStyle="rgba(0,0,0,0)";this.eventCanvas._ctx.fillRect(0,0,this.eventCanvas._ctx.canvas.width,this.eventCanvas._ctx.canvas.height);this.bindCustomEvents();if(this.legend.preDraw){this.eventCanvas._elem.before(au);this.legend.pack(ap);if(this.legend._elem){this.drawSeries({legendInfo:{location:this.legend.location,placement:this.legend.placement,width:this.legend.getWidth(),height:this.legend.getHeight(),xoffset:this.legend.xoffset,yoffset:this.legend.yoffset}})}else{this.drawSeries()}}else{this.drawSeries();if(this.series.length){G(this.series[this.series.length-1].canvas._elem).after(au)}this.legend.pack(ap)}for(var al=0;al<G.jqplot.eventListenerHooks.length;al++){this.eventCanvas._elem.bind(G.jqplot.eventListenerHooks[al][0],{plot:this},G.jqplot.eventListenerHooks[al][1])}for(var al=0;al<this.eventListenerHooks.hooks.length;al++){this.eventCanvas._elem.bind(this.eventListenerHooks.hooks[al][0],{plot:this},this.eventListenerHooks.hooks[al][1])}for(var al=0;al<G.jqplot.postDrawHooks.length;al++){G.jqplot.postDrawHooks[al].call(this)}for(var al=0;al<this.postDrawHooks.hooks.length;al++){this.postDrawHooks.hooks[al].call(this)}if(this.target.is(":visible")){this._drawCount+=1}this.target.trigger("jqplotPostDraw",[this])}};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 ab(am){var al=am.data.plot;var ah=al.eventCanvas._elem.offset();var ak={x:am.pageX-ah.left,y:am.pageY-ah.top};var ai={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 aj=["xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];var ae=al.axes;var af,ag;for(af=11;af>0;af--){ag=aj[af-1];if(ae[ag].show){ai[ag]=ae[ag].series_p2u(ak[ag.charAt(0)])}}return{offsets:ah,gridPos:ak,dataPos:ai}}function ad(ae,af){var aj=af.series;var aO,aN,aM,aH,aI,aC,aB,ao,am,ar,at,aD;var aL,aP,aJ,ak,aA,aF;var ag,aG;for(aM=af.seriesStack.length-1;aM>=0;aM--){aO=af.seriesStack[aM];aH=aj[aO];switch(aH.renderer.constructor){case G.jqplot.BarRenderer:case G.jqplot.PyramidRenderer:aC=ae.x;aB=ae.y;for(aN=0;aN<aH._barPoints.length;aN++){aA=aH._barPoints[aN];aJ=aH.gridData[aN];if(aC>aA[0][0]&&aC<aA[2][0]&&aB>aA[2][1]&&aB<aA[0][1]){return{seriesIndex:aH.index,pointIndex:aN,gridData:aJ,data:aH.data[aN],points:aH._barPoints[aN]}}}break;case G.jqplot.DonutRenderer:ar=aH.startAngle/180*Math.PI;aC=ae.x-aH._center[0];aB=ae.y-aH._center[1];aI=Math.sqrt(Math.pow(aC,2)+Math.pow(aB,2));if(aC>0&&-aB>=0){ao=2*Math.PI-Math.atan(-aB/aC)}else{if(aC>0&&-aB<0){ao=-Math.atan(-aB/aC)}else{if(aC<0){ao=Math.PI-Math.atan(-aB/aC)}else{if(aC==0&&-aB>0){ao=3*Math.PI/2}else{if(aC==0&&-aB<0){ao=Math.PI/2}else{if(aC==0&&aB==0){ao=0}}}}}}if(ar){ao-=ar;if(ao<0){ao+=2*Math.PI}else{if(ao>2*Math.PI){ao-=2*Math.PI}}}am=aH.sliceMargin/180*Math.PI;if(aI<aH._radius&&aI>aH._innerRadius){for(aN=0;aN<aH.gridData.length;aN++){at=(aN>0)?aH.gridData[aN-1][1]+am:am;aD=aH.gridData[aN][1];if(ao>at&&ao<aD){return{seriesIndex:aH.index,pointIndex:aN,gridData:aH.gridData[aN],data:aH.data[aN]}}}}break;case G.jqplot.PieRenderer:ar=aH.startAngle/180*Math.PI;aC=ae.x-aH._center[0];aB=ae.y-aH._center[1];aI=Math.sqrt(Math.pow(aC,2)+Math.pow(aB,2));if(aC>0&&-aB>=0){ao=2*Math.PI-Math.atan(-aB/aC)}else{if(aC>0&&-aB<0){ao=-Math.atan(-aB/aC)}else{if(aC<0){ao=Math.PI-Math.atan(-aB/aC)}else{if(aC==0&&-aB>0){ao=3*Math.PI/2}else{if(aC==0&&-aB<0){ao=Math.PI/2}else{if(aC==0&&aB==0){ao=0}}}}}}if(ar){ao-=ar;if(ao<0){ao+=2*Math.PI}else{if(ao>2*Math.PI){ao-=2*Math.PI}}}am=aH.sliceMargin/180*Math.PI;if(aI<aH._radius){for(aN=0;aN<aH.gridData.length;aN++){at=(aN>0)?aH.gridData[aN-1][1]+am:am;aD=aH.gridData[aN][1];if(ao>at&&ao<aD){return{seriesIndex:aH.index,pointIndex:aN,gridData:aH.gridData[aN],data:aH.data[aN]}}}}break;case G.jqplot.BubbleRenderer:aC=ae.x;aB=ae.y;var ay=null;if(aH.show){for(var aN=0;aN<aH.gridData.length;aN++){aJ=aH.gridData[aN];aP=Math.sqrt((aC-aJ[0])*(aC-aJ[0])+(aB-aJ[1])*(aB-aJ[1]));if(aP<=aJ[2]&&(aP<=aL||aL==null)){aL=aP;ay={seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}if(ay!=null){return ay}}break;case G.jqplot.FunnelRenderer:aC=ae.x;aB=ae.y;var aE=aH._vertices,ai=aE[0],ah=aE[aE.length-1],al,ax,aq;function aK(aS,aU,aT){var aR=(aU[1]-aT[1])/(aU[0]-aT[0]);var aQ=aU[1]-aR*aU[0];var aV=aS+aU[1];return[(aV-aQ)/aR,aV]}al=aK(aB,ai[0],ah[3]);ax=aK(aB,ai[1],ah[2]);for(aN=0;aN<aE.length;aN++){aq=aE[aN];if(aB>=aq[0][1]&&aB<=aq[3][1]&&aC>=al[0]&&aC<=ax[0]){return{seriesIndex:aH.index,pointIndex:aN,gridData:null,data:aH.data[aN]}}}break;case G.jqplot.LineRenderer:aC=ae.x;aB=ae.y;aI=aH.renderer;if(aH.show){if((aH.fill||(aH.renderer.bands.show&&aH.renderer.bands.fill))&&(!af.plugins.highlighter||!af.plugins.highlighter.show)){var ap=false;if(aC>aH._boundingBox[0][0]&&aC<aH._boundingBox[1][0]&&aB>aH._boundingBox[1][1]&&aB<aH._boundingBox[0][1]){var aw=aH._areaPoints.length;var az;var aN=aw-1;for(var az=0;az<aw;az++){var av=[aH._areaPoints[az][0],aH._areaPoints[az][1]];var au=[aH._areaPoints[aN][0],aH._areaPoints[aN][1]];if(av[1]<aB&&au[1]>=aB||au[1]<aB&&av[1]>=aB){if(av[0]+(aB-av[1])/(au[1]-av[1])*(au[0]-av[0])<aC){ap=!ap}}aN=az}}if(ap){return{seriesIndex:aO,pointIndex:null,gridData:aH.gridData,data:aH.data,points:aH._areaPoints}}break}else{aG=aH.markerRenderer.size/2+aH.neighborThreshold;ag=(aG>0)?aG:0;for(var aN=0;aN<aH.gridData.length;aN++){aJ=aH.gridData[aN];if(aI.constructor==G.jqplot.OHLCRenderer){if(aI.candleStick){var an=aH._yaxis.series_u2p;if(aC>=aJ[0]-aI._bodyWidth/2&&aC<=aJ[0]+aI._bodyWidth/2&&aB>=an(aH.data[aN][2])&&aB<=an(aH.data[aN][3])){return{seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}else{if(!aI.hlc){var an=aH._yaxis.series_u2p;if(aC>=aJ[0]-aI._tickLength&&aC<=aJ[0]+aI._tickLength&&aB>=an(aH.data[aN][2])&&aB<=an(aH.data[aN][3])){return{seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}else{var an=aH._yaxis.series_u2p;if(aC>=aJ[0]-aI._tickLength&&aC<=aJ[0]+aI._tickLength&&aB>=an(aH.data[aN][1])&&aB<=an(aH.data[aN][2])){return{seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}}}else{if(aJ[0]!=null&&aJ[1]!=null){aP=Math.sqrt((aC-aJ[0])*(aC-aJ[0])+(aB-aJ[1])*(aB-aJ[1]));if(aP<=ag&&(aP<=aL||aL==null)){aL=aP;return{seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}}}}}break;default:aC=ae.x;aB=ae.y;aI=aH.renderer;if(aH.show){aG=aH.markerRenderer.size/2+aH.neighborThreshold;ag=(aG>0)?aG:0;for(var aN=0;aN<aH.gridData.length;aN++){aJ=aH.gridData[aN];if(aI.constructor==G.jqplot.OHLCRenderer){if(aI.candleStick){var an=aH._yaxis.series_u2p;if(aC>=aJ[0]-aI._bodyWidth/2&&aC<=aJ[0]+aI._bodyWidth/2&&aB>=an(aH.data[aN][2])&&aB<=an(aH.data[aN][3])){return{seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}else{if(!aI.hlc){var an=aH._yaxis.series_u2p;if(aC>=aJ[0]-aI._tickLength&&aC<=aJ[0]+aI._tickLength&&aB>=an(aH.data[aN][2])&&aB<=an(aH.data[aN][3])){return{seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}else{var an=aH._yaxis.series_u2p;if(aC>=aJ[0]-aI._tickLength&&aC<=aJ[0]+aI._tickLength&&aB>=an(aH.data[aN][1])&&aB<=an(aH.data[aN][2])){return{seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}}}else{aP=Math.sqrt((aC-aJ[0])*(aC-aJ[0])+(aB-aJ[1])*(aB-aJ[1]));if(aP<=ag&&(aP<=aL||aL==null)){aL=aP;return{seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}}}break}}return null}this.onClick=function(ag){var af=ab(ag);var ai=ag.data.plot;var ah=ad(af.gridPos,ai);var ae=jQuery.Event("jqplotClick");ae.pageX=ag.pageX;ae.pageY=ag.pageY;G(this).trigger(ae,[af.gridPos,af.dataPos,ah,ai])};this.onDblClick=function(ag){var af=ab(ag);var ai=ag.data.plot;var ah=ad(af.gridPos,ai);var ae=jQuery.Event("jqplotDblClick");ae.pageX=ag.pageX;ae.pageY=ag.pageY;G(this).trigger(ae,[af.gridPos,af.dataPos,ah,ai])};this.onMouseDown=function(ag){var af=ab(ag);var ai=ag.data.plot;var ah=ad(af.gridPos,ai);var ae=jQuery.Event("jqplotMouseDown");ae.pageX=ag.pageX;ae.pageY=ag.pageY;G(this).trigger(ae,[af.gridPos,af.dataPos,ah,ai])};this.onMouseUp=function(ag){var af=ab(ag);var ae=jQuery.Event("jqplotMouseUp");ae.pageX=ag.pageX;ae.pageY=ag.pageY;G(this).trigger(ae,[af.gridPos,af.dataPos,null,ag.data.plot])};this.onRightClick=function(ag){var af=ab(ag);var ai=ag.data.plot;var ah=ad(af.gridPos,ai);if(ai.captureRightClick){if(ag.which==3){var ae=jQuery.Event("jqplotRightClick");ae.pageX=ag.pageX;ae.pageY=ag.pageY;G(this).trigger(ae,[af.gridPos,af.dataPos,ah,ai])}else{var ae=jQuery.Event("jqplotMouseUp");ae.pageX=ag.pageX;ae.pageY=ag.pageY;G(this).trigger(ae,[af.gridPos,af.dataPos,ah,ai])}}};this.onMouseMove=function(ag){var af=ab(ag);var ai=ag.data.plot;var ah=ad(af.gridPos,ai);var ae=jQuery.Event("jqplotMouseMove");ae.pageX=ag.pageX;ae.pageY=ag.pageY;G(this).trigger(ae,[af.gridPos,af.dataPos,ah,ai])};this.onMouseEnter=function(ag){var af=ab(ag);var ah=ag.data.plot;var ae=jQuery.Event("jqplotMouseEnter");ae.pageX=ag.pageX;ae.pageY=ag.pageY;ae.relatedTarget=ag.relatedTarget;G(this).trigger(ae,[af.gridPos,af.dataPos,null,ah])};this.onMouseLeave=function(ag){var af=ab(ag);var ah=ag.data.plot;var ae=jQuery.Event("jqplotMouseLeave");ae.pageX=ag.pageX;ae.pageY=ag.pageY;ae.relatedTarget=ag.relatedTarget;G(this).trigger(ae,[af.gridPos,af.dataPos,null,ah])};this.drawSeries=function(ag,ae){var ai,ah,af;ae=(typeof(ag)==="number"&&ae==null)?ag:ae;ag=(typeof(ag)==="object")?ag:{};if(ae!=q){ah=this.series[ae];af=ah.shadowCanvas._ctx;af.clearRect(0,0,af.canvas.width,af.canvas.height);ah.drawShadow(af,ag,this);af=ah.canvas._ctx;af.clearRect(0,0,af.canvas.width,af.canvas.height);ah.draw(af,ag,this);if(ah.renderer.constructor==G.jqplot.BezierCurveRenderer){if(ae<this.series.length-1){this.drawSeries(ae+1)}}}else{for(ai=0;ai<this.series.length;ai++){ah=this.series[ai];af=ah.shadowCanvas._ctx;af.clearRect(0,0,af.canvas.width,af.canvas.height);ah.drawShadow(af,ag,this);af=ah.canvas._ctx;af.clearRect(0,0,af.canvas.width,af.canvas.height);ah.draw(af,ag,this)}}ag=ae=ai=ah=af=null};this.moveSeriesToFront=function(af){af=parseInt(af,10);var ai=G.inArray(af,this.seriesStack);if(ai==-1){return}if(ai==this.seriesStack.length-1){this.previousSeriesStack=this.seriesStack.slice(0);return}var ae=this.seriesStack[this.seriesStack.length-1];var ah=this.series[af].canvas._elem.detach();var ag=this.series[af].shadowCanvas._elem.detach();this.series[ae].shadowCanvas._elem.after(ag);this.series[ae].canvas._elem.after(ah);this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack.splice(ai,1);this.seriesStack.push(af)};this.moveSeriesToBack=function(af){af=parseInt(af,10);var ai=G.inArray(af,this.seriesStack);if(ai==0||ai==-1){return}var ae=this.seriesStack[0];var ah=this.series[af].canvas._elem.detach();var ag=this.series[af].shadowCanvas._elem.detach();this.series[ae].shadowCanvas._elem.before(ag);this.series[ae].canvas._elem.before(ah);this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack.splice(ai,1);this.seriesStack.unshift(af)};this.restorePreviousSeriesOrder=function(){var ak,aj,ai,ah,ag,ae,af;if(this.seriesStack==this.previousSeriesStack){return}for(ak=1;ak<this.previousSeriesStack.length;ak++){ae=this.previousSeriesStack[ak];af=this.previousSeriesStack[ak-1];ai=this.series[ae].canvas._elem.detach();ah=this.series[ae].shadowCanvas._elem.detach();this.series[af].shadowCanvas._elem.after(ah);this.series[af].canvas._elem.after(ai)}ag=this.seriesStack.slice(0);this.seriesStack=this.previousSeriesStack.slice(0);this.previousSeriesStack=ag};this.restoreOriginalSeriesOrder=function(){var ai,ah,ae=[],ag,af;for(ai=0;ai<this.series.length;ai++){ae.push(ai)}if(this.seriesStack==ae){return}this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack=ae;for(ai=1;ai<this.seriesStack.length;ai++){ag=this.series[ai].canvas._elem.detach();af=this.series[ai].shadowCanvas._elem.detach();this.series[ai-1].shadowCanvas._elem.after(af);this.series[ai-1].canvas._elem.after(ag)}};this.activateTheme=function(ae){this.themeEngine.activate(this,ae)}}G.jqplot.computeHighlightColors=function(ab){var ad;if(jQuery.isArray(ab)){ad=[];for(var af=0;af<ab.length;af++){var ae=G.jqplot.getColorComponents(ab[af]);var aa=[ae[0],ae[1],ae[2]];var ag=aa[0]+aa[1]+aa[2];for(var ac=0;ac<3;ac++){aa[ac]=(ag>660)?aa[ac]*0.85:0.73*aa[ac]+90;aa[ac]=parseInt(aa[ac],10);(aa[ac]>255)?255:aa[ac]}aa[3]=0.3+0.35*ae[3];ad.push("rgba("+aa[0]+","+aa[1]+","+aa[2]+","+aa[3]+")")}}else{var ae=G.jqplot.getColorComponents(ab);var aa=[ae[0],ae[1],ae[2]];var ag=aa[0]+aa[1]+aa[2];for(var ac=0;ac<3;ac++){aa[ac]=(ag>660)?aa[ac]*0.85:0.73*aa[ac]+90;aa[ac]=parseInt(aa[ac],10);(aa[ac]>255)?255:aa[ac]}aa[3]=0.3+0.35*ae[3];ad="rgba("+aa[0]+","+aa[1]+","+aa[2]+","+aa[3]+")"}return ad};G.jqplot.ColorGenerator=function(ab){ab=ab||G.jqplot.config.defaultColors;var aa=0;this.next=function(){if(aa<ab.length){return ab[aa++]}else{aa=0;return ab[aa++]}};this.previous=function(){if(aa>0){return ab[aa--]}else{aa=ab.length-1;return ab[aa]}};this.get=function(ad){var ac=ad-ab.length*Math.floor(ad/ab.length);return ab[ac]};this.setColors=function(ac){ab=ac};this.reset=function(){aa=0};this.getIndex=function(){return aa};this.setIndex=function(ac){aa=ac}};G.jqplot.hex2rgb=function(ac,aa){ac=ac.replace("#","");if(ac.length==3){ac=ac.charAt(0)+ac.charAt(0)+ac.charAt(1)+ac.charAt(1)+ac.charAt(2)+ac.charAt(2)}var ab;ab="rgba("+parseInt(ac.slice(0,2),16)+", "+parseInt(ac.slice(2,4),16)+", "+parseInt(ac.slice(4,6),16);if(aa){ab+=", "+aa}ab+=")";return ab};G.jqplot.rgb2hex=function(af){var ac=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *(?:, *[0-9.]*)?\)/;var aa=af.match(ac);var ae="#";for(var ad=1;ad<4;ad++){var ab;if(aa[ad].search(/%/)!=-1){ab=parseInt(255*aa[ad]/100,10).toString(16);if(ab.length==1){ab="0"+ab}}else{ab=parseInt(aa[ad],10).toString(16);if(ab.length==1){ab="0"+ab}}ae+=ab}return ae};G.jqplot.normalize2rgb=function(ab,aa){if(ab.search(/^ *rgba?\(/)!=-1){return ab}else{if(ab.search(/^ *#?[0-9a-fA-F]?[0-9a-fA-F]/)!=-1){return G.jqplot.hex2rgb(ab,aa)}else{throw"invalid color spec"}}};G.jqplot.getColorComponents=function(af){af=G.jqplot.colorKeywordMap[af]||af;var ad=G.jqplot.normalize2rgb(af);var ac=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *,? *([0-9.]* *)?\)/;var aa=ad.match(ac);var ab=[];for(var ae=1;ae<4;ae++){if(aa[ae].search(/%/)!=-1){ab[ae-1]=parseInt(255*aa[ae]/100,10)}else{ab[ae-1]=parseInt(aa[ae],10)}}ab[3]=parseFloat(aa[4])?parseFloat(aa[4]):1;return ab};G.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)"};G.jqplot.AxisLabelRenderer=function(aa){G.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;G.extend(true,this,aa)};G.jqplot.AxisLabelRenderer.prototype=new G.jqplot.ElemContainer();G.jqplot.AxisLabelRenderer.prototype.constructor=G.jqplot.AxisLabelRenderer;G.jqplot.AxisLabelRenderer.prototype.init=function(aa){G.extend(true,this,aa)};G.jqplot.AxisLabelRenderer.prototype.draw=function(aa,ab){if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=G('<div style="position:absolute;" class="jqplot-'+this.axis+'-label"></div>');if(Number(this.label)){this._elem.css("white-space","nowrap")}if(!this.escapeHTML){this._elem.html(this.label)}else{this._elem.text(this.label)}if(this.fontFamily){this._elem.css("font-family",this.fontFamily)}if(this.fontSize){this._elem.css("font-size",this.fontSize)}if(this.textColor){this._elem.css("color",this.textColor)}return this._elem};G.jqplot.AxisLabelRenderer.prototype.pack=function(){};G.jqplot.AxisTickRenderer=function(aa){G.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=G.jqplot.DefaultTickFormatter;this.prefix="";this.formatString="";this.fontFamily;this.fontSize;this.textColor;this.escapeHTML=false;this._elem;this._breakTick=false;G.extend(true,this,aa)};G.jqplot.AxisTickRenderer.prototype.init=function(aa){G.extend(true,this,aa)};G.jqplot.AxisTickRenderer.prototype=new G.jqplot.ElemContainer();G.jqplot.AxisTickRenderer.prototype.constructor=G.jqplot.AxisTickRenderer;G.jqplot.AxisTickRenderer.prototype.setTick=function(aa,ac,ab){this.value=aa;this.axis=ac;if(ab){this.isMinorTick=true}return this};G.jqplot.AxisTickRenderer.prototype.draw=function(){if(this.label===null){this.label=this.prefix+this.formatter(this.formatString,this.value)}var ab={position:"absolute"};if(Number(this.label)){ab.whitSpace="nowrap"}if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=G(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(ab);for(var aa in this._styles){this._elem.css(aa,this._styles[aa])}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};G.jqplot.DefaultTickFormatter=function(aa,ab){if(typeof ab=="number"){if(!aa){aa=G.jqplot.config.defaultTickFormatString}return G.jqplot.sprintf(aa,ab)}else{return String(ab)}};G.jqplot.AxisTickRenderer.prototype.pack=function(){};G.jqplot.CanvasGridRenderer=function(){this.shadowRenderer=new G.jqplot.ShadowRenderer()};G.jqplot.CanvasGridRenderer.prototype.init=function(ab){this._ctx;G.extend(true,this,ab);var aa={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(aa)};G.jqplot.CanvasGridRenderer.prototype.createElement=function(ad){var ac;if(this._elem){if(G.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==q){ac=this._elem.get(0);window.G_vmlCanvasManager.uninitElement(ac);ac=null}this._elem.emptyForce();this._elem=null}ac=ad.canvasManager.getCanvas();var aa=this._plotDimensions.width;var ab=this._plotDimensions.height;ac.width=aa;ac.height=ab;this._elem=G(ac);this._elem.addClass("jqplot-grid-canvas");this._elem.css({position:"absolute",left:0,top:0});ac=ad.canvasManager.initCanvas(ac);this._top=this._offsets.top;this._bottom=ab-this._offsets.bottom;this._left=this._offsets.left;this._right=aa-this._offsets.right;this._width=this._right-this._left;this._height=this._bottom-this._top;ac=null;return this._elem};G.jqplot.CanvasGridRenderer.prototype.draw=function(){this._ctx=this._elem.get(0).getContext("2d");var al=this._ctx;var ao=this._axes;al.save();al.clearRect(0,0,this._plotDimensions.width,this._plotDimensions.height);al.fillStyle=this.backgroundColor||this.background;al.fillRect(this._left,this._top,this._width,this._height);al.save();al.lineJoin="miter";al.lineCap="butt";al.lineWidth=this.gridLineWidth;al.strokeStyle=this.gridLineColor;var ar,aq,ai,aj;var af=["xaxis","yaxis","x2axis","y2axis"];for(var ap=4;ap>0;ap--){var av=af[ap-1];var aa=ao[av];var at=aa._ticks;var ak=at.length;if(aa.show){if(aa.drawBaseline){var au={};if(aa.baselineWidth!==null){au.lineWidth=aa.baselineWidth}if(aa.baselineColor!==null){au.strokeStyle=aa.baselineColor}switch(av){case"xaxis":ah(this._left,this._bottom,this._right,this._bottom,au);break;case"yaxis":ah(this._left,this._bottom,this._left,this._top,au);break;case"x2axis":ah(this._left,this._bottom,this._right,this._bottom,au);break;case"y2axis":ah(this._right,this._bottom,this._right,this._top,au);break}}for(var am=ak;am>0;am--){var ag=at[am-1];if(ag.show){var ad=Math.round(aa.u2p(ag.value))+0.5;switch(av){case"xaxis":if(ag.showGridline&&this.drawGridlines&&((!ag.isMinorTick&&aa.drawMajorGridlines)||(ag.isMinorTick&&aa.drawMinorGridlines))){ah(ad,this._top,ad,this._bottom)}if(ag.showMark&&ag.mark&&((!ag.isMinorTick&&aa.drawMajorTickMarks)||(ag.isMinorTick&&aa.drawMinorTickMarks))){ai=ag.markSize;aj=ag.mark;var ad=Math.round(aa.u2p(ag.value))+0.5;switch(aj){case"outside":ar=this._bottom;aq=this._bottom+ai;break;case"inside":ar=this._bottom-ai;aq=this._bottom;break;case"cross":ar=this._bottom-ai;aq=this._bottom+ai;break;default:ar=this._bottom;aq=this._bottom+ai;break}if(this.shadow){this.renderer.shadowRenderer.draw(al,[[ad,ar],[ad,aq]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}ah(ad,ar,ad,aq)}break;case"yaxis":if(ag.showGridline&&this.drawGridlines&&((!ag.isMinorTick&&aa.drawMajorGridlines)||(ag.isMinorTick&&aa.drawMinorGridlines))){ah(this._right,ad,this._left,ad)}if(ag.showMark&&ag.mark&&((!ag.isMinorTick&&aa.drawMajorTickMarks)||(ag.isMinorTick&&aa.drawMinorTickMarks))){ai=ag.markSize;aj=ag.mark;var ad=Math.round(aa.u2p(ag.value))+0.5;switch(aj){case"outside":ar=this._left-ai;aq=this._left;break;case"inside":ar=this._left;aq=this._left+ai;break;case"cross":ar=this._left-ai;aq=this._left+ai;break;default:ar=this._left-ai;aq=this._left;break}if(this.shadow){this.renderer.shadowRenderer.draw(al,[[ar,ad],[aq,ad]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ah(ar,ad,aq,ad,{strokeStyle:aa.borderColor})}break;case"x2axis":if(ag.showGridline&&this.drawGridlines&&((!ag.isMinorTick&&aa.drawMajorGridlines)||(ag.isMinorTick&&aa.drawMinorGridlines))){ah(ad,this._bottom,ad,this._top)}if(ag.showMark&&ag.mark&&((!ag.isMinorTick&&aa.drawMajorTickMarks)||(ag.isMinorTick&&aa.drawMinorTickMarks))){ai=ag.markSize;aj=ag.mark;var ad=Math.round(aa.u2p(ag.value))+0.5;switch(aj){case"outside":ar=this._top-ai;aq=this._top;break;case"inside":ar=this._top;aq=this._top+ai;break;case"cross":ar=this._top-ai;aq=this._top+ai;break;default:ar=this._top-ai;aq=this._top;break}if(this.shadow){this.renderer.shadowRenderer.draw(al,[[ad,ar],[ad,aq]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}ah(ad,ar,ad,aq)}break;case"y2axis":if(ag.showGridline&&this.drawGridlines&&((!ag.isMinorTick&&aa.drawMajorGridlines)||(ag.isMinorTick&&aa.drawMinorGridlines))){ah(this._left,ad,this._right,ad)}if(ag.showMark&&ag.mark&&((!ag.isMinorTick&&aa.drawMajorTickMarks)||(ag.isMinorTick&&aa.drawMinorTickMarks))){ai=ag.markSize;aj=ag.mark;var ad=Math.round(aa.u2p(ag.value))+0.5;switch(aj){case"outside":ar=this._right;aq=this._right+ai;break;case"inside":ar=this._right-ai;aq=this._right;break;case"cross":ar=this._right-ai;aq=this._right+ai;break;default:ar=this._right;aq=this._right+ai;break}if(this.shadow){this.renderer.shadowRenderer.draw(al,[[ar,ad],[aq,ad]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ah(ar,ad,aq,ad,{strokeStyle:aa.borderColor})}break;default:break}}}ag=null}aa=null;at=null}af=["y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];for(var ap=7;ap>0;ap--){var aa=ao[af[ap-1]];var at=aa._ticks;if(aa.show){var ab=at[aa.numberTicks-1];var ae=at[0];var ac=aa.getLeft();var an=[[ac,ab.getTop()+ab.getHeight()/2],[ac,ae.getTop()+ae.getHeight()/2+1]];if(this.shadow){this.renderer.shadowRenderer.draw(al,an,{lineCap:"butt",fill:false,closePath:false})}ah(an[0][0],an[0][1],an[1][0],an[1][1],{lineCap:"butt",strokeStyle:aa.borderColor,lineWidth:aa.borderWidth});for(var am=at.length;am>0;am--){var ag=at[am-1];ai=ag.markSize;aj=ag.mark;var ad=Math.round(aa.u2p(ag.value))+0.5;if(ag.showMark&&ag.mark){switch(aj){case"outside":ar=ac;aq=ac+ai;break;case"inside":ar=ac-ai;aq=ac;break;case"cross":ar=ac-ai;aq=ac+ai;break;default:ar=ac;aq=ac+ai;break}an=[[ar,ad],[aq,ad]];if(this.shadow){this.renderer.shadowRenderer.draw(al,an,{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ah(ar,ad,aq,ad,{strokeStyle:aa.borderColor})}ag=null}ae=null}aa=null;at=null}al.restore();function ah(aA,az,ax,aw,ay){al.save();ay=ay||{};if(ay.lineWidth==null||ay.lineWidth!=0){G.extend(true,al,ay);al.beginPath();al.moveTo(aA,az);al.lineTo(ax,aw);al.stroke();al.restore()}}if(this.shadow){var an=[[this._left,this._bottom],[this._right,this._bottom],[this._right,this._top]];this.renderer.shadowRenderer.draw(al,an)}if(this.borderWidth!=0&&this.drawBorder){ah(this._left,this._top,this._right,this._top,{lineCap:"round",strokeStyle:ao.x2axis.borderColor,lineWidth:ao.x2axis.borderWidth});ah(this._right,this._top,this._right,this._bottom,{lineCap:"round",strokeStyle:ao.y2axis.borderColor,lineWidth:ao.y2axis.borderWidth});ah(this._right,this._bottom,this._left,this._bottom,{lineCap:"round",strokeStyle:ao.xaxis.borderColor,lineWidth:ao.xaxis.borderWidth});ah(this._left,this._bottom,this._left,this._top,{lineCap:"round",strokeStyle:ao.yaxis.borderColor,lineWidth:ao.yaxis.borderWidth})}al.restore();al=null;ao=null};G.jqplot.DivTitleRenderer=function(){};G.jqplot.DivTitleRenderer.prototype.init=function(aa){G.extend(true,this,aa)};G.jqplot.DivTitleRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}var ad=this.renderer;var ac=document.createElement("div");this._elem=G(ac);this._elem.addClass("jqplot-title");if(!this.text){this.show=false;this._elem.height(0);this._elem.width(0)}else{if(this.text){var aa;if(this.color){aa=this.color}else{if(this.textColor){aa=this.textColor}}var ab={position:"absolute",top:"0px",left:"0px"};if(this._plotWidth){ab.width=this._plotWidth+"px"}if(this.fontSize){ab.fontSize=this.fontSize}if(typeof this.textAlign==="string"){ab.textAlign=this.textAlign}else{ab.textAlign="center"}if(aa){ab.color=aa}if(this.paddingBottom){ab.paddingBottom=this.paddingBottom}if(this.fontFamily){ab.fontFamily=this.fontFamily}this._elem.css(ab);if(this.escapeHtml){this._elem.text(this.text)}else{this._elem.html(this.text)}}}ac=null;return this._elem};G.jqplot.DivTitleRenderer.prototype.pack=function(){};var n=0.1;G.jqplot.LinePattern=function(ao,aj){var ai={dotted:[n,G.jqplot.config.dotGapLength],dashed:[G.jqplot.config.dashLength,G.jqplot.config.gapLength],solid:null};if(typeof aj==="string"){if(aj[0]==="."||aj[0]==="-"){var ap=aj;aj=[];for(var ah=0,ae=ap.length;ah<ae;ah++){if(ap[ah]==="."){aj.push(n)}else{if(ap[ah]==="-"){aj.push(G.jqplot.config.dashLength)}else{continue}}aj.push(G.jqplot.config.gapLength)}}else{aj=ai[aj]}}if(!(aj&&aj.length)){return ao}var ad=0;var ak=aj[0];var am=0;var al=0;var ag=0;var aa=0;var an=function(aq,ar){ao.moveTo(aq,ar);am=aq;al=ar;ag=aq;aa=ar};var ac=function(aq,ax){var av=ao.lineWidth;var at=aq-am;var ar=ax-al;var au=Math.sqrt(at*at+ar*ar);if((au>0)&&(av>0)){at/=au;ar/=au;while(true){var aw=av*ak;if(aw<au){am+=aw*at;al+=aw*ar;if((ad&1)==0){ao.lineTo(am,al)}else{ao.moveTo(am,al)}au-=aw;ad++;if(ad>=aj.length){ad=0}ak=aj[ad]}else{am=aq;al=ax;if((ad&1)==0){ao.lineTo(am,al)}else{ao.moveTo(am,al)}ak-=au/av;break}}}};var ab=function(){ao.beginPath()};var af=function(){ac(ag,aa)};return{moveTo:an,lineTo:ac,beginPath:ab,closePath:af}};G.jqplot.LineRenderer=function(){this.shapeRenderer=new G.jqplot.ShapeRenderer();this.shadowRenderer=new G.jqplot.ShadowRenderer()};G.jqplot.LineRenderer.prototype.init=function(ab,ag){ab=ab||{};this._type="line";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 ae={highlightMouseOver:ab.highlightMouseOver,highlightMouseDown:ab.highlightMouseDown,highlightColor:ab.highlightColor};delete (ab.highlightMouseOver);delete (ab.highlightMouseDown);delete (ab.highlightColor);G.extend(true,this.renderer,ab);this.renderer.options=ab;if(this.renderer.bandData.length>1&&(!ab.bands||ab.bands.show==null)){this.renderer.bands.show=true}else{if(ab.bands&&ab.bands.show==null&&ab.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,ag)}if(this._stack){this.renderer.smooth=false}var af={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(af);var ac=ab.shadowOffset;if(ac==null){if(this.lineWidth>2.5){ac=1.25*(1+(Math.atan((this.lineWidth/2.5))/0.785398163-1)*0.6)}else{ac=1.25*Math.atan((this.lineWidth/2.5))/0.785398163}}var aa={lineJoin:this.lineJoin,lineCap:this.lineCap,fill:this.fill,isarc:false,angle:this.shadowAngle,offset:ac,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.lineWidth,linePattern:this.linePattern,closePath:this.fill};this.renderer.shadowRenderer.init(aa);this._areaPoints=[];this._boundingBox=[[],[]];if(!this.isTrendline&&this.fill||this.renderer.bands.show){this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColor=null;if(ae.highlightMouseDown&&ae.highlightMouseOver==null){ae.highlightMouseOver=false}G.extend(true,this,{highlightMouseOver:ae.highlightMouseOver,highlightMouseDown:ae.highlightMouseDown,highlightColor:ae.highlightColor});if(!this.highlightColor){var ad=(this.renderer.bands.show)?this.renderer.bands.fillColor:this.fillColor;this.highlightColor=G.jqplot.computeHighlightColors(ad)}if(this.highlighter){this.highlighter.show=false}}if(!this.isTrendline&&ag){ag.plugins.lineRenderer={};ag.postInitHooks.addOnce(u);ag.postDrawHooks.addOnce(Y);ag.eventListenerHooks.addOnce("jqplotMouseMove",f);ag.eventListenerHooks.addOnce("jqplotMouseDown",c);ag.eventListenerHooks.addOnce("jqplotMouseUp",X);ag.eventListenerHooks.addOnce("jqplotClick",e);ag.eventListenerHooks.addOnce("jqplotRightClick",o)}};G.jqplot.LineRenderer.prototype.initBands=function(ad,an){var ae=ad.bandData||[];var ag=this.renderer.bands;ag.hiData=[];ag.lowData=[];var au=this.data;ag._max=null;ag._min=null;if(ae.length==2){if(G.isArray(ae[0][0])){var ah;var aa=0,ak=0;for(var ao=0,al=ae[0].length;ao<al;ao++){ah=ae[0][ao];if((ah[1]!=null&&ah[1]>ag._max)||ag._max==null){ag._max=ah[1]}if((ah[1]!=null&&ah[1]<ag._min)||ag._min==null){ag._min=ah[1]}}for(var ao=0,al=ae[1].length;ao<al;ao++){ah=ae[1][ao];if((ah[1]!=null&&ah[1]>ag._max)||ag._max==null){ag._max=ah[1];ak=1}if((ah[1]!=null&&ah[1]<ag._min)||ag._min==null){ag._min=ah[1];aa=1}}if(ak===aa){ag.show=false}ag.hiData=ae[ak];ag.lowData=ae[aa]}else{if(ae[0].length===au.length&&ae[1].length===au.length){var ac=(ae[0][0]>ae[1][0])?0:1;var av=(ac)?0:1;for(var ao=0,al=au.length;ao<al;ao++){ag.hiData.push([au[ao][0],ae[ac][ao]]);ag.lowData.push([au[ao][0],ae[av][ao]])}}else{ag.show=false}}}else{if(ae.length>2&&!G.isArray(ae[0][0])){var ac=(ae[0][0]>ae[0][1])?0:1;var av=(ac)?0:1;for(var ao=0,al=ae.length;ao<al;ao++){ag.hiData.push([au[ao][0],ae[ao][ac]]);ag.lowData.push([au[ao][0],ae[ao][av]])}}else{var aj=ag.interval;var at=null;var ar=null;var ab=null;var am=null;if(G.isArray(aj)){at=aj[0];ar=aj[1]}else{at=aj}if(isNaN(at)){if(at.charAt(at.length-1)==="%"){ab="multiply";at=parseFloat(at)/100+1}}else{at=parseFloat(at);ab="add"}if(ar!==null&&isNaN(ar)){if(ar.charAt(ar.length-1)==="%"){am="multiply";ar=parseFloat(ar)/100+1}}else{if(ar!==null){ar=parseFloat(ar);am="add"}}if(at!==null){if(ar===null){ar=-at;am=ab;if(am==="multiply"){ar+=2}}if(at<ar){var ap=at;at=ar;ar=ap;ap=ab;ab=am;am=ap}for(var ao=0,al=au.length;ao<al;ao++){switch(ab){case"add":ag.hiData.push([au[ao][0],au[ao][1]+at]);break;case"multiply":ag.hiData.push([au[ao][0],au[ao][1]*at]);break}switch(am){case"add":ag.lowData.push([au[ao][0],au[ao][1]+ar]);break;case"multiply":ag.lowData.push([au[ao][0],au[ao][1]*ar]);break}}}else{ag.show=false}}}var af=ag.hiData;var ai=ag.lowData;for(var ao=0,al=af.length;ao<al;ao++){if((af[ao][1]!=null&&af[ao][1]>ag._max)||ag._max==null){ag._max=af[ao][1]}}for(var ao=0,al=ai.length;ao<al;ao++){if((ai[ao][1]!=null&&ai[ao][1]<ag._min)||ag._min==null){ag._min=ai[ao][1]}}if(ag.fillColor===null){var aq=G.jqplot.getColorComponents(ag.color);aq[3]=aq[3]*0.5;ag.fillColor="rgba("+aq[0]+", "+aq[1]+", "+aq[2]+", "+aq[3]+")"}};function F(ab,aa){return(3.4182054+aa)*Math.pow(ab,-0.3534992)}function j(ac,ab){var aa=Math.sqrt(Math.pow((ab[0]-ac[0]),2)+Math.pow((ab[1]-ac[1]),2));return 5.7648*Math.log(aa)+7.4456}function v(aa){var ab=(Math.exp(2*aa)-1)/(Math.exp(2*aa)+1);return ab}function E(aC){var al=this.renderer.smooth;var aw=this.canvas.getWidth();var ag=this._xaxis.series_p2u;var az=this._yaxis.series_p2u;var ay=null;var af=null;var ar=aC.length/aw;var ac=[];var aq=[];if(!isNaN(parseFloat(al))){ay=parseFloat(al)}else{ay=F(ar,0.5)}var ao=[];var ad=[];for(var ax=0,at=aC.length;ax<at;ax++){ao.push(aC[ax][1]);ad.push(aC[ax][0])}function an(aD,aE){if(aD-aE==0){return Math.pow(10,10)}else{return aD-aE}}var ap,ak,aj,ai;var aa=aC.length-1;for(var ae=1,au=aC.length;ae<au;ae++){var ab=[];var am=[];for(var av=0;av<2;av++){var ax=ae-1+av;if(ax==0||ax==aa){ab[av]=Math.pow(10,10)}else{if(ao[ax+1]-ao[ax]==0||ao[ax]-ao[ax-1]==0){ab[av]=0}else{if(((ad[ax+1]-ad[ax])/(ao[ax+1]-ao[ax])+(ad[ax]-ad[ax-1])/(ao[ax]-ao[ax-1]))==0){ab[av]=0}else{if((ao[ax+1]-ao[ax])*(ao[ax]-ao[ax-1])<0){ab[av]=0}else{ab[av]=2/(an(ad[ax+1],ad[ax])/(ao[ax+1]-ao[ax])+an(ad[ax],ad[ax-1])/(ao[ax]-ao[ax-1]))}}}}}if(ae==1){ab[0]=3/2*(ao[1]-ao[0])/an(ad[1],ad[0])-ab[1]/2}else{if(ae==aa){ab[1]=3/2*(ao[aa]-ao[aa-1])/an(ad[aa],ad[aa-1])-ab[0]/2}}am[0]=-2*(ab[1]+2*ab[0])/an(ad[ae],ad[ae-1])+6*(ao[ae]-ao[ae-1])/Math.pow(an(ad[ae],ad[ae-1]),2);am[1]=2*(2*ab[1]+ab[0])/an(ad[ae],ad[ae-1])-6*(ao[ae]-ao[ae-1])/Math.pow(an(ad[ae],ad[ae-1]),2);ai=1/6*(am[1]-am[0])/an(ad[ae],ad[ae-1]);aj=1/2*(ad[ae]*am[0]-ad[ae-1]*am[1])/an(ad[ae],ad[ae-1]);ak=(ao[ae]-ao[ae-1]-aj*(Math.pow(ad[ae],2)-Math.pow(ad[ae-1],2))-ai*(Math.pow(ad[ae],3)-Math.pow(ad[ae-1],3)))/an(ad[ae],ad[ae-1]);ap=ao[ae-1]-ak*ad[ae-1]-aj*Math.pow(ad[ae-1],2)-ai*Math.pow(ad[ae-1],3);var aB=(ad[ae]-ad[ae-1])/ay;var aA,ah;for(var av=0,at=ay;av<at;av++){aA=[];ah=ad[ae-1]+av*aB;aA.push(ah);aA.push(ap+ak*ah+aj*Math.pow(ah,2)+ai*Math.pow(ah,3));ac.push(aA);aq.push([ag(aA[0]),az(aA[1])])}}ac.push(aC[ax]);aq.push([ag(aC[ax][0]),az(aC[ax][1])]);return[ac,aq]}function A(ai){var ah=this.renderer.smooth;var aN=this.renderer.tension;var aa=this.canvas.getWidth();var aA=this._xaxis.series_p2u;var aj=this._yaxis.series_p2u;var aB=null;var aC=null;var aM=null;var aH=null;var aF=null;var al=null;var aK=null;var af=null;var aD,aE,aw,av,at,aq;var ad,ab,an,am;var au,ar,aG;var ao=[];var ac=[];var ae=ai.length/aa;var aL,ap,ay,az,ax;var ak=[];var ag=[];if(!isNaN(parseFloat(ah))){aB=parseFloat(ah)}else{aB=F(ae,0.5)}if(!isNaN(parseFloat(aN))){aN=parseFloat(aN)}for(var aJ=0,aI=ai.length-1;aJ<aI;aJ++){if(aN===null){al=Math.abs((ai[aJ+1][1]-ai[aJ][1])/(ai[aJ+1][0]-ai[aJ][0]));aL=0.3;ap=0.6;ay=(ap-aL)/2;az=2.5;ax=-1.4;af=al/az+ax;aH=ay*v(af)-ay*v(ax)+aL;if(aJ>0){aK=Math.abs((ai[aJ][1]-ai[aJ-1][1])/(ai[aJ][0]-ai[aJ-1][0]))}af=aK/az+ax;aF=ay*v(af)-ay*v(ax)+aL;aM=(aH+aF)/2}else{aM=aN}for(aD=0;aD<aB;aD++){aE=aD/aB;aw=(1+2*aE)*Math.pow((1-aE),2);av=aE*Math.pow((1-aE),2);at=Math.pow(aE,2)*(3-2*aE);aq=Math.pow(aE,2)*(aE-1);if(ai[aJ-1]){ad=aM*(ai[aJ+1][0]-ai[aJ-1][0]);ab=aM*(ai[aJ+1][1]-ai[aJ-1][1])}else{ad=aM*(ai[aJ+1][0]-ai[aJ][0]);ab=aM*(ai[aJ+1][1]-ai[aJ][1])}if(ai[aJ+2]){an=aM*(ai[aJ+2][0]-ai[aJ][0]);am=aM*(ai[aJ+2][1]-ai[aJ][1])}else{an=aM*(ai[aJ+1][0]-ai[aJ][0]);am=aM*(ai[aJ+1][1]-ai[aJ][1])}au=aw*ai[aJ][0]+at*ai[aJ+1][0]+av*ad+aq*an;ar=aw*ai[aJ][1]+at*ai[aJ+1][1]+av*ab+aq*am;aG=[au,ar];ak.push(aG);ag.push([aA(au),aj(ar)])}}ak.push(ai[aI]);ag.push([aA(ai[aI][0]),aj(ai[aI][1])]);return[ak,ag]}G.jqplot.LineRenderer.prototype.setGridData=function(ai){var ae=this._xaxis.series_u2p;var aa=this._yaxis.series_u2p;var af=this._plotData;var aj=this._prevPlotData;this.gridData=[];this._prevGridData=[];this.renderer._smoothedData=[];this.renderer._smoothedPlotData=[];this.renderer._hiBandGridData=[];this.renderer._lowBandGridData=[];this.renderer._hiBandSmoothedData=[];this.renderer._lowBandSmoothedData=[];var ad=this.renderer.bands;var ab=false;for(var ag=0,ac=this.data.length;ag<ac;ag++){if(af[ag][0]!=null&&af[ag][1]!=null){this.gridData.push([ae.call(this._xaxis,af[ag][0]),aa.call(this._yaxis,af[ag][1])])}else{if(af[ag][0]==null){ab=true;this.gridData.push([null,aa.call(this._yaxis,af[ag][1])])}else{if(af[ag][1]==null){ab=true;this.gridData.push([ae.call(this._xaxis,af[ag][0]),null])}}}if(aj[ag]!=null&&aj[ag][0]!=null&&aj[ag][1]!=null){this._prevGridData.push([ae.call(this._xaxis,aj[ag][0]),aa.call(this._yaxis,aj[ag][1])])}else{if(aj[ag]!=null&&aj[ag][0]==null){this._prevGridData.push([null,aa.call(this._yaxis,aj[ag][1])])}else{if(aj[ag]!=null&&aj[ag][0]!=null&&aj[ag][1]==null){this._prevGridData.push([ae.call(this._xaxis,aj[ag][0]),null])}}}}if(ab){this.renderer.smooth=false;if(this._type==="line"){ad.show=false}}if(this._type==="line"&&ad.show){for(var ag=0,ac=ad.hiData.length;ag<ac;ag++){this.renderer._hiBandGridData.push([ae.call(this._xaxis,ad.hiData[ag][0]),aa.call(this._yaxis,ad.hiData[ag][1])])}for(var ag=0,ac=ad.lowData.length;ag<ac;ag++){this.renderer._lowBandGridData.push([ae.call(this._xaxis,ad.lowData[ag][0]),aa.call(this._yaxis,ad.lowData[ag][1])])}}if(this._type==="line"&&this.renderer.smooth&&this.gridData.length>2){var ah;if(this.renderer.constrainSmoothing){ah=E.call(this,this.gridData);this.renderer._smoothedData=ah[0];this.renderer._smoothedPlotData=ah[1];if(ad.show){ah=E.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ah[0];ah=E.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ah[0]}ah=null}else{ah=A.call(this,this.gridData);this.renderer._smoothedData=ah[0];this.renderer._smoothedPlotData=ah[1];if(ad.show){ah=A.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ah[0];ah=A.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ah[0]}ah=null}}};G.jqplot.LineRenderer.prototype.makeGridData=function(ah,aj){var af=this._xaxis.series_u2p;var aa=this._yaxis.series_u2p;var ak=[];var ac=[];this.renderer._smoothedData=[];this.renderer._smoothedPlotData=[];this.renderer._hiBandGridData=[];this.renderer._lowBandGridData=[];this.renderer._hiBandSmoothedData=[];this.renderer._lowBandSmoothedData=[];var ae=this.renderer.bands;var ab=false;for(var ag=0;ag<ah.length;ag++){if(ah[ag][0]!=null&&ah[ag][1]!=null){ak.push([af.call(this._xaxis,ah[ag][0]),aa.call(this._yaxis,ah[ag][1])])}else{if(ah[ag][0]==null){ab=true;ak.push([null,aa.call(this._yaxis,ah[ag][1])])}else{if(ah[ag][1]==null){ab=true;ak.push([af.call(this._xaxis,ah[ag][0]),null])}}}}if(ab){this.renderer.smooth=false;if(this._type==="line"){ae.show=false}}if(this._type==="line"&&ae.show){for(var ag=0,ad=ae.hiData.length;ag<ad;ag++){this.renderer._hiBandGridData.push([af.call(this._xaxis,ae.hiData[ag][0]),aa.call(this._yaxis,ae.hiData[ag][1])])}for(var ag=0,ad=ae.lowData.length;ag<ad;ag++){this.renderer._lowBandGridData.push([af.call(this._xaxis,ae.lowData[ag][0]),aa.call(this._yaxis,ae.lowData[ag][1])])}}if(this._type==="line"&&this.renderer.smooth&&ak.length>2){var ai;if(this.renderer.constrainSmoothing){ai=E.call(this,ak);this.renderer._smoothedData=ai[0];this.renderer._smoothedPlotData=ai[1];if(ae.show){ai=E.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ai[0];ai=E.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ai[0]}ai=null}else{ai=A.call(this,ak);this.renderer._smoothedData=ai[0];this.renderer._smoothedPlotData=ai[1];if(ae.show){ai=A.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ai[0];ai=A.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ai[0]}ai=null}}return ak};G.jqplot.LineRenderer.prototype.draw=function(ap,aB,ab,au){var av;var aj=G.extend(true,{},ab);var ad=(aj.shadow!=q)?aj.shadow:this.shadow;var aC=(aj.showLine!=q)?aj.showLine:this.showLine;var at=(aj.fill!=q)?aj.fill:this.fill;var aa=(aj.fillAndStroke!=q)?aj.fillAndStroke:this.fillAndStroke;var ak,aq,an,ax;ap.save();if(aB.length){if(aC){if(at){if(this.fillToZero){var ay=this.negativeColor;if(!this.useNegativeColors){ay=aj.fillStyle}var ah=false;var ai=aj.fillStyle;if(aa){var aA=aB.slice(0)}if(this.index==0||!this._stack){var ao=[];var aE=(this.renderer.smooth)?this.renderer._smoothedPlotData:this._plotData;this._areaPoints=[];var az=this._yaxis.series_u2p(this.fillToValue);var ac=this._xaxis.series_u2p(this.fillToValue);aj.closePath=true;if(this.fillAxis=="y"){ao.push([aB[0][0],az]);this._areaPoints.push([aB[0][0],az]);for(var av=0;av<aB.length-1;av++){ao.push(aB[av]);this._areaPoints.push(aB[av]);if(aE[av][1]*aE[av+1][1]<0){if(aE[av][1]<0){ah=true;aj.fillStyle=ay}else{ah=false;aj.fillStyle=ai}var ag=aB[av][0]+(aB[av+1][0]-aB[av][0])*(az-aB[av][1])/(aB[av+1][1]-aB[av][1]);ao.push([ag,az]);this._areaPoints.push([ag,az]);if(ad){this.renderer.shadowRenderer.draw(ap,ao,aj)}this.renderer.shapeRenderer.draw(ap,ao,aj);ao=[[ag,az]]}}if(aE[aB.length-1][1]<0){ah=true;aj.fillStyle=ay}else{ah=false;aj.fillStyle=ai}ao.push(aB[aB.length-1]);this._areaPoints.push(aB[aB.length-1]);ao.push([aB[aB.length-1][0],az]);this._areaPoints.push([aB[aB.length-1][0],az])}if(ad){this.renderer.shadowRenderer.draw(ap,ao,aj)}this.renderer.shapeRenderer.draw(ap,ao,aj)}else{var am=this._prevGridData;for(var av=am.length;av>0;av--){aB.push(am[av-1])}if(ad){this.renderer.shadowRenderer.draw(ap,aB,aj)}this._areaPoints=aB;this.renderer.shapeRenderer.draw(ap,aB,aj)}}else{if(aa){var aA=aB.slice(0)}if(this.index==0||!this._stack){var ae=ap.canvas.height;aB.unshift([aB[0][0],ae]);var aw=aB.length;aB.push([aB[aw-1][0],ae])}else{var am=this._prevGridData;for(var av=am.length;av>0;av--){aB.push(am[av-1])}}this._areaPoints=aB;if(ad){this.renderer.shadowRenderer.draw(ap,aB,aj)}this.renderer.shapeRenderer.draw(ap,aB,aj)}if(aa){var ar=G.extend(true,{},aj,{fill:false,closePath:false});this.renderer.shapeRenderer.draw(ap,aA,ar);if(this.markerRenderer.show){if(this.renderer.smooth){aA=this.gridData}for(av=0;av<aA.length;av++){this.markerRenderer.draw(aA[av][0],aA[av][1],ap,aj.markerOptions)}}}}else{if(this.renderer.bands.show){var af;var aD=G.extend(true,{},aj);if(this.renderer.bands.showLines){af=(this.renderer.smooth)?this.renderer._hiBandSmoothedData:this.renderer._hiBandGridData;this.renderer.shapeRenderer.draw(ap,af,aj);af=(this.renderer.smooth)?this.renderer._lowBandSmoothedData:this.renderer._lowBandGridData;this.renderer.shapeRenderer.draw(ap,af,aD)}if(this.renderer.bands.fill){if(this.renderer.smooth){af=this.renderer._hiBandSmoothedData.concat(this.renderer._lowBandSmoothedData.reverse())}else{af=this.renderer._hiBandGridData.concat(this.renderer._lowBandGridData.reverse())}this._areaPoints=af;aD.closePath=true;aD.fill=true;aD.fillStyle=this.renderer.bands.fillColor;this.renderer.shapeRenderer.draw(ap,af,aD)}}if(ad){this.renderer.shadowRenderer.draw(ap,aB,aj)}this.renderer.shapeRenderer.draw(ap,aB,aj)}}var ak=an=aq=ax=null;for(av=0;av<this._areaPoints.length;av++){var al=this._areaPoints[av];if(ak>al[0]||ak==null){ak=al[0]}if(ax<al[1]||ax==null){ax=al[1]}if(an<al[0]||an==null){an=al[0]}if(aq>al[1]||aq==null){aq=al[1]}}if(this.type==="line"&&this.renderer.bands.show){ax=this._yaxis.series_u2p(this.renderer.bands._min);aq=this._yaxis.series_u2p(this.renderer.bands._max)}this._boundingBox=[[ak,ax],[an,aq]];if(this.markerRenderer.show&&!at){if(this.renderer.smooth){aB=this.gridData}for(av=0;av<aB.length;av++){if(aB[av][0]!=null&&aB[av][1]!=null){this.markerRenderer.draw(aB[av][0],aB[av][1],ap,aj.markerOptions)}}}}ap.restore()};G.jqplot.LineRenderer.prototype.drawShadow=function(aa,ac,ab){};function u(ad,ac,aa){for(var ab=0;ab<this.series.length;ab++){if(this.series[ab].renderer.constructor==G.jqplot.LineRenderer){if(this.series[ab].highlightMouseOver){this.series[ab].highlightMouseDown=false}}}}function Y(){if(this.plugins.lineRenderer&&this.plugins.lineRenderer.highlightCanvas){this.plugins.lineRenderer.highlightCanvas.resetCanvas();this.plugins.lineRenderer.highlightCanvas=null}this.plugins.lineRenderer.highlightedSeriesIndex=null;this.plugins.lineRenderer.highlightCanvas=new G.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.lineRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-lineRenderer-highlight-canvas",this._plotDimensions,this));this.plugins.lineRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(aa){U(aa.data.plot)})}function W(ag,af,ad,ac){var ab=ag.series[af];var aa=ag.plugins.lineRenderer.highlightCanvas;aa._ctx.clearRect(0,0,aa._ctx.canvas.width,aa._ctx.canvas.height);ab._highlightedPoint=ad;ag.plugins.lineRenderer.highlightedSeriesIndex=af;var ae={fillStyle:ab.highlightColor};if(ab.type==="line"&&ab.renderer.bands.show){ae.fill=true;ae.closePath=true}ab.renderer.shapeRenderer.draw(aa._ctx,ac,ae);aa=null}function U(ac){var aa=ac.plugins.lineRenderer.highlightCanvas;aa._ctx.clearRect(0,0,aa._ctx.canvas.width,aa._ctx.canvas.height);for(var ab=0;ab<ac.series.length;ab++){ac.series[ab]._highlightedPoint=null}ac.plugins.lineRenderer.highlightedSeriesIndex=null;ac.target.trigger("jqplotDataUnhighlight");aa=null}function f(ae,ad,ah,ag,af){if(ag){var ac=[ag.seriesIndex,ag.pointIndex,ag.data];var ab=jQuery.Event("jqplotDataMouseOver");ab.pageX=ae.pageX;ab.pageY=ae.pageY;af.target.trigger(ab,ac);if(af.series[ac[0]].highlightMouseOver&&!(ac[0]==af.plugins.lineRenderer.highlightedSeriesIndex)){var aa=jQuery.Event("jqplotDataHighlight");aa.pageX=ae.pageX;aa.pageY=ae.pageY;af.target.trigger(aa,ac);W(af,ag.seriesIndex,ag.pointIndex,ag.points)}}else{if(ag==null){U(af)}}}function c(ad,ac,ag,af,ae){if(af){var ab=[af.seriesIndex,af.pointIndex,af.data];if(ae.series[ab[0]].highlightMouseDown&&!(ab[0]==ae.plugins.lineRenderer.highlightedSeriesIndex)){var aa=jQuery.Event("jqplotDataHighlight");aa.pageX=ad.pageX;aa.pageY=ad.pageY;ae.target.trigger(aa,ab);W(ae,af.seriesIndex,af.pointIndex,af.points)}}else{if(af==null){U(ae)}}}function X(ac,ab,af,ae,ad){var aa=ad.plugins.lineRenderer.highlightedSeriesIndex;if(aa!=null&&ad.series[aa].highlightMouseDown){U(ad)}}function e(ad,ac,ag,af,ae){if(af){var ab=[af.seriesIndex,af.pointIndex,af.data];var aa=jQuery.Event("jqplotDataClick");aa.pageX=ad.pageX;aa.pageY=ad.pageY;ae.target.trigger(aa,ab)}}function o(ae,ad,ah,ag,af){if(ag){var ac=[ag.seriesIndex,ag.pointIndex,ag.data];var aa=af.plugins.lineRenderer.highlightedSeriesIndex;if(aa!=null&&af.series[aa].highlightMouseDown){U(af)}var ab=jQuery.Event("jqplotDataRightClick");ab.pageX=ae.pageX;ab.pageY=ae.pageY;af.target.trigger(ab,ac)}}G.jqplot.LinearAxisRenderer=function(){};G.jqplot.LinearAxisRenderer.prototype.init=function(aa){this.breakPoints=null;this.breakTickLabel="≈";this.drawBaseline=true;this.baselineWidth=null;this.baselineColor=null;this.forceTickAt0=false;this.forceTickAt100=false;this.tickInset=0;this.minorTicks=0;this.alignTicks=false;this._autoFormatString="";this._overrideFormatString=false;this._scalefact=1;G.extend(true,this,aa);if(this.breakPoints){if(!G.isArray(this.breakPoints)){this.breakPoints=null}else{if(this.breakPoints.length<2||this.breakPoints[1]<=this.breakPoints[0]){this.breakPoints=null}}}if(this.numberTicks!=null&&this.numberTicks<2){this.numberTicks=2}this.resetDataBounds()};G.jqplot.LinearAxisRenderer.prototype.draw=function(aa,ah){if(this.show){this.renderer.createTicks.call(this,ah);var ag=0;var ab;if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=G(document.createElement("div"));this._elem.addClass("jqplot-axis jqplot-"+this.name);this._elem.css("position","absolute");if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var af=this._label.draw(aa,ah);af.appendTo(this._elem);af=null}var ae=this._ticks;var ad;for(var ac=0;ac<ae.length;ac++){ad=ae[ac];if(ad.show&&ad.showLabel&&(!ad.isMinorTick||this.showMinorTicks)){this._elem.append(ad.draw(aa,ah))}}ad=null;ae=null}return this._elem};G.jqplot.LinearAxisRenderer.prototype.reset=function(){this.min=this._options.min;this.max=this._options.max;this.tickInterval=this._options.tickInterval;this.numberTicks=this._options.numberTicks;this._autoFormatString="";if(this._overrideFormatString&&this.tickOptions&&this.tickOptions.formatString){this.tickOptions.formatString=""}};G.jqplot.LinearAxisRenderer.prototype.set=function(){var ah=0;var ac;var ab=0;var ag=0;var aa=(this._label==null)?false:this._label.show;if(this.show){var af=this._ticks;var ae;for(var ad=0;ad<af.length;ad++){ae=af[ad];if(!ae._breakTick&&ae.show&&ae.showLabel&&(!ae.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){ac=ae._elem.outerHeight(true)}else{ac=ae._elem.outerWidth(true)}if(ac>ah){ah=ac}}}ae=null;af=null;if(aa){ab=this._label._elem.outerWidth(true);ag=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){ah=ah+ag;this._elem.css({height:ah+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){ah=ah+ag;this._elem.css({height:ah+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){ah=ah+ab;this._elem.css({width:ah+"px",left:"0px",top:"0px"});if(aa&&this._label.constructor==G.jqplot.AxisLabelRenderer){this._label._elem.css("width",ab+"px")}}else{ah=ah+ab;this._elem.css({width:ah+"px",right:"0px",top:"0px"});if(aa&&this._label.constructor==G.jqplot.AxisLabelRenderer){this._label._elem.css("width",ab+"px")}}}}}};G.jqplot.LinearAxisRenderer.prototype.createTicks=function(ac){var aM=this._ticks;var aC=this.ticks;var ar=this.name;var au=this._dataBounds;var aa,ag;var aY,aA;var ai,ah;var aW,aT;var az=this.min;var aX=this.max;var aP=this.numberTicks;var a2=this.tickInterval;if(aC.length){for(aT=0;aT<aC.length;aT++){var aG=aC[aT];var aN=new this.tickRenderer(this.tickOptions);if(G.isArray(aG)){aN.value=aG[0];if(this.breakPoints){if(aG[0]==this.breakPoints[0]){aN.label=this.breakTickLabel;aN._breakTick=true;aN.showGridline=false;aN.showMark=false}else{if(aG[0]>this.breakPoints[0]&&aG[0]<=this.breakPoints[1]){aN.show=false;aN.showGridline=false;aN.label=aG[1]}else{aN.label=aG[1]}}}else{aN.label=aG[1]}aN.setTick(aG[0],this.name);this._ticks.push(aN)}else{if(G.isPlainObject(aG)){G.extend(true,aN,aG);aN.axis=this.name;this._ticks.push(aN)}else{aN.value=aG;if(this.breakPoints){if(aG==this.breakPoints[0]){aN.label=this.breakTickLabel;aN._breakTick=true;aN.showGridline=false;aN.showMark=false}else{if(aG>this.breakPoints[0]&&aG<=this.breakPoints[1]){aN.show=false;aN.showGridline=false}}}aN.setTick(aG,this.name);this._ticks.push(aN)}}}this.numberTicks=aC.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(ar=="xaxis"||ar=="x2axis"){aa=this._plotDimensions.width}else{aa=this._plotDimensions.height}var ap=this.numberTicks;if(this.alignTicks){if(this.name==="x2axis"&&ac.axes.xaxis.show){ap=ac.axes.xaxis.numberTicks}else{if(this.name.charAt(0)==="y"&&this.name!=="yaxis"&&this.name!=="yMidAxis"&&ac.axes.yaxis.show){ap=ac.axes.yaxis.numberTicks}}}aY=((this.min!=null)?this.min:au.min);aA=((this.max!=null)?this.max:au.max);var an=aA-aY;var aL,aq;var al;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(aY>0){aY=0}if(aA<0){aA=0}}if(this.forceTickAt100){if(aY>100){aY=100}if(aA<100){aA=100}}var af=30;var aI=Math.max(aa,af+1);this._scalefact=(aI-af)/300;var aH=G.jqplot.LinearTickGenerator(aY,aA,this._scalefact,ap);var ao=aY+an*(this.padMin-1);var aJ=aA-an*(this.padMax-1);if(aY<ao||aA>aJ){ao=aY-an*(this.padMin-1);aJ=aA+an*(this.padMax-1);aH=G.jqplot.LinearTickGenerator(ao,aJ,this._scalefact,ap)}this.min=aH[0];this.max=aH[1];this.numberTicks=aH[2];this._autoFormatString=aH[3];this.tickInterval=aH[4]}else{if(aY==aA){var ab=0.05;if(aY>0){ab=Math.max(Math.log(aY)/Math.LN10,0.05)}aY-=ab;aA+=ab}if(this.autoscale&&this.min==null&&this.max==null){var ad,ae,ak;var av=false;var aF=false;var at={min:null,max:null,average:null,stddev:null};for(var aT=0;aT<this._series.length;aT++){var aO=this._series[aT];var aw=(aO.fillAxis=="x")?aO._xaxis.name:aO._yaxis.name;if(this.name==aw){var aK=aO._plotValues[aO.fillAxis];var ay=aK[0];var aU=aK[0];for(var aS=1;aS<aK.length;aS++){if(aK[aS]<ay){ay=aK[aS]}else{if(aK[aS]>aU){aU=aK[aS]}}}var am=(aU-ay)/aU;if(aO.renderer.constructor==G.jqplot.BarRenderer){if(ay>=0&&(aO.fillToZero||am>0.1)){av=true}else{av=false;if(aO.fill&&aO.fillToZero&&ay<0&&aU>0){aF=true}else{aF=false}}}else{if(aO.fill){if(ay>=0&&(aO.fillToZero||am>0.1)){av=true}else{if(ay<0&&aU>0&&aO.fillToZero){av=false;aF=true}else{av=false;aF=false}}}else{if(ay<0){av=false}}}}}if(av){this.numberTicks=2+Math.ceil((aa-(this.tickSpacing-1))/this.tickSpacing);this.min=0;az=0;ae=aA/(this.numberTicks-1);al=Math.pow(10,Math.abs(Math.floor(Math.log(ae)/Math.LN10)));if(ae/al==parseInt(ae/al,10)){ae+=al}this.tickInterval=Math.ceil(ae/al)*al;this.max=this.tickInterval*(this.numberTicks-1)}else{if(aF){this.numberTicks=2+Math.ceil((aa-(this.tickSpacing-1))/this.tickSpacing);var aB=Math.ceil(Math.abs(aY)/an*(this.numberTicks-1));var a1=this.numberTicks-1-aB;ae=Math.max(Math.abs(aY/aB),Math.abs(aA/a1));al=Math.pow(10,Math.abs(Math.floor(Math.log(ae)/Math.LN10)));this.tickInterval=Math.ceil(ae/al)*al;this.max=this.tickInterval*a1;this.min=-this.tickInterval*aB}else{if(this.numberTicks==null){if(this.tickInterval){this.numberTicks=3+Math.ceil(an/this.tickInterval)}else{this.numberTicks=2+Math.ceil((aa-(this.tickSpacing-1))/this.tickSpacing)}}if(this.tickInterval==null){ae=an/(this.numberTicks-1);if(ae<1){al=Math.pow(10,Math.abs(Math.floor(Math.log(ae)/Math.LN10)))}else{al=1}this.tickInterval=Math.ceil(ae*al*this.pad)/al}else{al=1/this.tickInterval}ad=this.tickInterval*(this.numberTicks-1);ak=(ad-an)/2;if(this.min==null){this.min=Math.floor(al*(aY-ak))/al}if(this.max==null){this.max=this.min+ad}}}var ax=G.jqplot.getSignificantFigures(this.tickInterval);var aE;if(ax.digitsLeft>=ax.significantDigits){aE="%d"}else{var al=Math.max(0,5-ax.digitsLeft);al=Math.min(al,ax.digitsRight);aE="%."+al+"f"}this._autoFormatString=aE}else{aL=(this.min!=null)?this.min:aY-an*(this.padMin-1);aq=(this.max!=null)?this.max:aA+an*(this.padMax-1);an=aq-aL;if(this.numberTicks==null){if(this.tickInterval!=null){this.numberTicks=Math.ceil((aq-aL)/this.tickInterval)+1}else{if(aa>100){this.numberTicks=parseInt(3+(aa-100)/75,10)}else{this.numberTicks=2}}}if(this.tickInterval==null){this.tickInterval=an/(this.numberTicks-1)}if(this.max==null){aq=aL+this.tickInterval*(this.numberTicks-1)}if(this.min==null){aL=aq-this.tickInterval*(this.numberTicks-1)}var ax=G.jqplot.getSignificantFigures(this.tickInterval);var aE;if(ax.digitsLeft>=ax.significantDigits){aE="%d"}else{var al=Math.max(0,5-ax.digitsLeft);al=Math.min(al,ax.digitsRight);aE="%."+al+"f"}this._autoFormatString=aE;this.min=aL;this.max=aq}if(this.renderer.constructor==G.jqplot.LinearAxisRenderer&&this._autoFormatString==""){an=this.max-this.min;var aZ=new this.tickRenderer(this.tickOptions);var aD=aZ.formatString||G.jqplot.config.defaultTickFormatString;var aD=aD.match(G.jqplot.sprintf.regex)[0];var aV=0;if(aD){if(aD.search(/[fFeEgGpP]/)>-1){var aR=aD.match(/\%\.(\d{0,})?[eEfFgGpP]/);if(aR){aV=parseInt(aR[1],10)}else{aV=6}}else{if(aD.search(/[di]/)>-1){aV=0}}var aj=Math.pow(10,-aV);if(this.tickInterval<aj){if(aP==null&&a2==null){this.tickInterval=aj;if(aX==null&&az==null){this.min=Math.floor(this._dataBounds.min/aj)*aj;if(this.min==this._dataBounds.min){this.min=this._dataBounds.min-this.tickInterval}this.max=Math.ceil(this._dataBounds.max/aj)*aj;if(this.max==this._dataBounds.max){this.max=this._dataBounds.max+this.tickInterval}var aQ=(this.max-this.min)/this.tickInterval;aQ=aQ.toFixed(11);aQ=Math.ceil(aQ);this.numberTicks=aQ+1}else{if(aX==null){var aQ=(this._dataBounds.max-this.min)/this.tickInterval;aQ=aQ.toFixed(11);this.numberTicks=Math.ceil(aQ)+2;this.max=this.min+this.tickInterval*(this.numberTicks-1)}else{if(az==null){var aQ=(this.max-this._dataBounds.min)/this.tickInterval;aQ=aQ.toFixed(11);this.numberTicks=Math.ceil(aQ)+2;this.min=this.max-this.tickInterval*(this.numberTicks-1)}else{this.numberTicks=Math.ceil((aX-az)/this.tickInterval)+1;this.min=Math.floor(az*Math.pow(10,aV))/Math.pow(10,aV);this.max=Math.ceil(aX*Math.pow(10,aV))/Math.pow(10,aV);this.numberTicks=Math.ceil((this.max-this.min)/this.tickInterval)+1}}}}}}}}if(this._overrideFormatString&&this._autoFormatString!=""){this.tickOptions=this.tickOptions||{};this.tickOptions.formatString=this._autoFormatString}var aN,a0;for(var aT=0;aT<this.numberTicks;aT++){aW=this.min+aT*this.tickInterval;aN=new this.tickRenderer(this.tickOptions);aN.setTick(aW,this.name);this._ticks.push(aN);if(aT<this.numberTicks-1){for(var aS=0;aS<this.minorTicks;aS++){aW+=this.tickInterval/(this.minorTicks+1);a0=G.extend(true,{},this.tickOptions,{name:this.name,value:aW,label:"",isMinorTick:true});aN=new this.tickRenderer(a0);this._ticks.push(aN)}}aN=null}}if(this.tickInset){this.min=this.min-this.tickInset*this.tickInterval;this.max=this.max+this.tickInset*this.tickInterval}aM=null};G.jqplot.LinearAxisRenderer.prototype.resetTickValues=function(ac){if(G.isArray(ac)&&ac.length==this._ticks.length){var ab;for(var aa=0;aa<ac.length;aa++){ab=this._ticks[aa];ab.value=ac[aa];ab.label=ab.formatter(ab.formatString,ac[aa]);ab.label=ab.prefix+ab.label;ab._elem.html(ab.label)}ab=null;this.min=G.jqplot.arrayMin(ac);this.max=G.jqplot.arrayMax(ac);this.pack()}};G.jqplot.LinearAxisRenderer.prototype.pack=function(ac,ab){ac=ac||{};ab=ab||this._offsets;var aq=this._ticks;var am=this.max;var al=this.min;var ah=ab.max;var af=ab.min;var aj=(this._label==null)?false:this._label.show;for(var ak in ac){this._elem.css(ak,ac[ak])}this._offsets=ab;var ad=ah-af;var ae=am-al;if(this.breakPoints){ae=ae-this.breakPoints[1]+this.breakPoints[0];this.p2u=function(at){return(at-af)*ae/ad+al};this.u2p=function(at){if(at>this.breakPoints[0]&&at<this.breakPoints[1]){at=this.breakPoints[0]}if(at<=this.breakPoints[0]){return(at-al)*ad/ae+af}else{return(at-this.breakPoints[1]+this.breakPoints[0]-al)*ad/ae+af}};if(this.name.charAt(0)=="x"){this.series_u2p=function(at){if(at>this.breakPoints[0]&&at<this.breakPoints[1]){at=this.breakPoints[0]}if(at<=this.breakPoints[0]){return(at-al)*ad/ae}else{return(at-this.breakPoints[1]+this.breakPoints[0]-al)*ad/ae}};this.series_p2u=function(at){return at*ae/ad+al}}else{this.series_u2p=function(at){if(at>this.breakPoints[0]&&at<this.breakPoints[1]){at=this.breakPoints[0]}if(at>=this.breakPoints[1]){return(at-am)*ad/ae}else{return(at+this.breakPoints[1]-this.breakPoints[0]-am)*ad/ae}};this.series_p2u=function(at){return at*ae/ad+am}}}else{this.p2u=function(at){return(at-af)*ae/ad+al};this.u2p=function(at){return(at-al)*ad/ae+af};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(at){return(at-al)*ad/ae};this.series_p2u=function(at){return at*ae/ad+al}}else{this.series_u2p=function(at){return(at-am)*ad/ae};this.series_p2u=function(at){return at*ae/ad+am}}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(var an=0;an<aq.length;an++){var ai=aq[an];if(ai.show&&ai.showLabel){var aa;if(ai.constructor==G.jqplot.CanvasAxisTickRenderer&&ai.angle){var ap=(this.name=="xaxis")?1:-1;switch(ai.labelPosition){case"auto":if(ap*ai.angle<0){aa=-ai.getWidth()+ai._textRenderer.height*Math.sin(-ai._textRenderer.angle)/2}else{aa=-ai._textRenderer.height*Math.sin(ai._textRenderer.angle)/2}break;case"end":aa=-ai.getWidth()+ai._textRenderer.height*Math.sin(-ai._textRenderer.angle)/2;break;case"start":aa=-ai._textRenderer.height*Math.sin(ai._textRenderer.angle)/2;break;case"middle":aa=-ai.getWidth()/2+ai._textRenderer.height*Math.sin(-ai._textRenderer.angle)/2;break;default:aa=-ai.getWidth()/2+ai._textRenderer.height*Math.sin(-ai._textRenderer.angle)/2;break}}else{aa=-ai.getWidth()/2}var ar=this.u2p(ai.value)+aa+"px";ai._elem.css("left",ar);ai.pack()}}if(aj){var ag=this._label._elem.outerWidth(true);this._label._elem.css("left",af+ad/2-ag/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}}else{for(var an=0;an<aq.length;an++){var ai=aq[an];if(ai.show&&ai.showLabel){var aa;if(ai.constructor==G.jqplot.CanvasAxisTickRenderer&&ai.angle){var ap=(this.name=="yaxis")?1:-1;switch(ai.labelPosition){case"auto":case"end":if(ap*ai.angle<0){aa=-ai._textRenderer.height*Math.cos(-ai._textRenderer.angle)/2}else{aa=-ai.getHeight()+ai._textRenderer.height*Math.cos(ai._textRenderer.angle)/2}break;case"start":if(ai.angle>0){aa=-ai._textRenderer.height*Math.cos(-ai._textRenderer.angle)/2}else{aa=-ai.getHeight()+ai._textRenderer.height*Math.cos(ai._textRenderer.angle)/2}break;case"middle":aa=-ai.getHeight()/2;break;default:aa=-ai.getHeight()/2;break}}else{aa=-ai.getHeight()/2}var ar=this.u2p(ai.value)+aa+"px";ai._elem.css("top",ar);ai.pack()}}if(aj){var ao=this._label._elem.outerHeight(true);this._label._elem.css("top",ah-ad/2-ao/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}aq=null};function g(ab){var aa;ab=Math.abs(ab);if(ab>=10){aa="%d"}else{if(ab>1){if(ab===parseInt(ab)){aa="%d"}else{aa="%.1f"}}else{var ac=-Math.floor(Math.log(ab)/Math.LN10);aa="%."+ac+"f"}}return aa}var a=[0.1,0.2,0.3,0.4,0.5,0.8,1,2,3,4,5];var b=function(ab){var aa=a.indexOf(ab);if(aa>0){return a[aa-1]}else{return a[a.length-1]/100}};var h=function(ab){var aa=a.indexOf(ab);if(aa<a.length-1){return a[aa+1]}else{return a[0]*100}};function R(ab,ae){var ad=ab/(ae-1);var ac=Math.pow(10,Math.floor(Math.log(ad)/Math.LN10));var af=ad/ac;var aa;if(ac<1){if(af>5){aa=10*ac}else{if(af>2){aa=5*ac}else{if(af>1){aa=2*ac}else{aa=ac}}}}else{if(af>5){aa=10*ac}else{if(af>4){aa=5*ac}else{if(af>3){aa=4*ac}else{if(af>2){aa=3*ac}else{if(af>1){aa=2*ac}else{aa=ac}}}}}}return aa}function L(ab,aa){var ad=Math.floor(Math.log(ab)/Math.LN10);var af=Math.pow(10,ad);var ae=ab/af;var ac;ae=ae/aa;if(ae<=0.38){ac=0.1}else{if(ae<=1.6){ac=0.2}else{if(ae<=4){ac=0.5}else{if(ae<=8){ac=1}else{if(ae<=16){ac=2}else{ac=5}}}}}return ac*af}function s(ac,ab){var ae=Math.floor(Math.log(ac)/Math.LN10);var ag=Math.pow(10,ae);var af=ac/ag;var aa;var ad;af=af/ab;if(af<=0.38){ad=0.1}else{if(af<=1.6){ad=0.2}else{if(af<=4){ad=0.5}else{if(af<=8){ad=1}else{if(af<=16){ad=2}else{ad=5}}}}}aa=ad*ag;return[aa,ad,ag]}G.jqplot.LinearTickGenerator=function(af,ag,ac,ad){if(af===ag){ag=(ag)?0:1}ac=ac||1;if(ag<af){var ah=ag;ag=af;af=ah}var ab=[];var ai=L(ag-af,ac);if(ad==null){ab[0]=Math.floor(af/ai)*ai;ab[1]=Math.ceil(ag/ai)*ai;ab[2]=Math.round((ab[1]-ab[0])/ai+1);ab[3]=g(ai);ab[4]=ai}else{var ae=[];ae[0]=Math.floor(af/ai)*ai;ae[1]=Math.ceil(ag/ai)*ai;ae[2]=Math.round((ae[1]-ae[0])/ai+1);ae[3]=g(ai);ae[4]=ai;if(ae[2]===ad){ab=ae}else{var aa=R(ae[1]-ae[0],ad);ab[0]=ae[0];ab[2]=ad;ab[4]=aa;ab[3]=g(aa);ab[1]=ab[0]+(ab[2]-1)*ab[4]}}return ab};G.jqplot.LinearTickGenerator.bestLinearInterval=L;G.jqplot.LinearTickGenerator.bestInterval=R;G.jqplot.LinearTickGenerator.bestLinearComponents=s;G.jqplot.MarkerRenderer=function(aa){this.show=true;this.style="filledCircle";this.lineWidth=2;this.size=9;this.color="#666666";this.shadow=true;this.shadowAngle=45;this.shadowOffset=1;this.shadowDepth=3;this.shadowAlpha="0.07";this.shadowRenderer=new G.jqplot.ShadowRenderer();this.shapeRenderer=new G.jqplot.ShapeRenderer();G.extend(true,this,aa)};G.jqplot.MarkerRenderer.prototype.init=function(aa){G.extend(true,this,aa);var ac={angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,lineWidth:this.lineWidth,depth:this.shadowDepth,closePath:true};if(this.style.indexOf("filled")!=-1){ac.fill=true}if(this.style.indexOf("ircle")!=-1){ac.isarc=true;ac.closePath=false}this.shadowRenderer.init(ac);var ab={fill:false,isarc:false,strokeStyle:this.color,fillStyle:this.color,lineWidth:this.lineWidth,closePath:true};if(this.style.indexOf("filled")!=-1){ab.fill=true}if(this.style.indexOf("ircle")!=-1){ab.isarc=true;ab.closePath=false}this.shapeRenderer.init(ab)};G.jqplot.MarkerRenderer.prototype.drawDiamond=function(ac,ab,af,ae,ah){var aa=1.2;var ai=this.size/2/aa;var ag=this.size/2*aa;var ad=[[ac-ai,ab],[ac,ab+ag],[ac+ai,ab],[ac,ab-ag]];if(this.shadow){this.shadowRenderer.draw(af,ad)}this.shapeRenderer.draw(af,ad,ah)};G.jqplot.MarkerRenderer.prototype.drawPlus=function(ad,ac,ag,af,aj){var ab=1;var ak=this.size/2*ab;var ah=this.size/2*ab;var ai=[[ad,ac-ah],[ad,ac+ah]];var ae=[[ad+ak,ac],[ad-ak,ac]];var aa=G.extend(true,{},this.options,{closePath:false});if(this.shadow){this.shadowRenderer.draw(ag,ai,{closePath:false});this.shadowRenderer.draw(ag,ae,{closePath:false})}this.shapeRenderer.draw(ag,ai,aa);this.shapeRenderer.draw(ag,ae,aa)};G.jqplot.MarkerRenderer.prototype.drawX=function(ad,ac,ag,af,aj){var ab=1;var ak=this.size/2*ab;var ah=this.size/2*ab;var aa=G.extend(true,{},this.options,{closePath:false});var ai=[[ad-ak,ac-ah],[ad+ak,ac+ah]];var ae=[[ad-ak,ac+ah],[ad+ak,ac-ah]];if(this.shadow){this.shadowRenderer.draw(ag,ai,{closePath:false});this.shadowRenderer.draw(ag,ae,{closePath:false})}this.shapeRenderer.draw(ag,ai,aa);this.shapeRenderer.draw(ag,ae,aa)};G.jqplot.MarkerRenderer.prototype.drawDash=function(ac,ab,af,ae,ah){var aa=1;var ai=this.size/2*aa;var ag=this.size/2*aa;var ad=[[ac-ai,ab],[ac+ai,ab]];if(this.shadow){this.shadowRenderer.draw(af,ad)}this.shapeRenderer.draw(af,ad,ah)};G.jqplot.MarkerRenderer.prototype.drawLine=function(af,ae,aa,ad,ab){var ac=[af,ae];if(this.shadow){this.shadowRenderer.draw(aa,ac)}this.shapeRenderer.draw(aa,ac,ab)};G.jqplot.MarkerRenderer.prototype.drawSquare=function(ac,ab,af,ae,ah){var aa=1;var ai=this.size/2/aa;var ag=this.size/2*aa;var ad=[[ac-ai,ab-ag],[ac-ai,ab+ag],[ac+ai,ab+ag],[ac+ai,ab-ag]];if(this.shadow){this.shadowRenderer.draw(af,ad)}this.shapeRenderer.draw(af,ad,ah)};G.jqplot.MarkerRenderer.prototype.drawCircle=function(ab,ah,ad,ag,ae){var aa=this.size/2;var ac=2*Math.PI;var af=[ab,ah,aa,0,ac,true];if(this.shadow){this.shadowRenderer.draw(ad,af)}this.shapeRenderer.draw(ad,af,ae)};G.jqplot.MarkerRenderer.prototype.draw=function(aa,ad,ab,ac){ac=ac||{};if(ac.show==null||ac.show!=false){if(ac.color&&!ac.fillStyle){ac.fillStyle=ac.color}if(ac.color&&!ac.strokeStyle){ac.strokeStyle=ac.color}switch(this.style){case"diamond":this.drawDiamond(aa,ad,ab,false,ac);break;case"filledDiamond":this.drawDiamond(aa,ad,ab,true,ac);break;case"circle":this.drawCircle(aa,ad,ab,false,ac);break;case"filledCircle":this.drawCircle(aa,ad,ab,true,ac);break;case"square":this.drawSquare(aa,ad,ab,false,ac);break;case"filledSquare":this.drawSquare(aa,ad,ab,true,ac);break;case"x":this.drawX(aa,ad,ab,true,ac);break;case"plus":this.drawPlus(aa,ad,ab,true,ac);break;case"dash":this.drawDash(aa,ad,ab,true,ac);break;case"line":this.drawLine(aa,ad,ab,false,ac);break;default:this.drawDiamond(aa,ad,ab,false,ac);break}}};G.jqplot.ShadowRenderer=function(aa){this.angle=45;this.offset=1;this.alpha=0.07;this.lineWidth=1.5;this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.depth=3;this.strokeStyle="rgba(0,0,0,0.1)";this.isarc=false;G.extend(true,this,aa)};G.jqplot.ShadowRenderer.prototype.init=function(aa){G.extend(true,this,aa)};G.jqplot.ShadowRenderer.prototype.draw=function(an,al,ap){an.save();var aa=(ap!=null)?ap:{};var am=(aa.fill!=null)?aa.fill:this.fill;var ai=(aa.fillRect!=null)?aa.fillRect:this.fillRect;var ah=(aa.closePath!=null)?aa.closePath:this.closePath;var ae=(aa.offset!=null)?aa.offset:this.offset;var ac=(aa.alpha!=null)?aa.alpha:this.alpha;var ag=(aa.depth!=null)?aa.depth:this.depth;var ao=(aa.isarc!=null)?aa.isarc:this.isarc;var aj=(aa.linePattern!=null)?aa.linePattern:this.linePattern;an.lineWidth=(aa.lineWidth!=null)?aa.lineWidth:this.lineWidth;an.lineJoin=(aa.lineJoin!=null)?aa.lineJoin:this.lineJoin;an.lineCap=(aa.lineCap!=null)?aa.lineCap:this.lineCap;an.strokeStyle=aa.strokeStyle||this.strokeStyle||"rgba(0,0,0,"+ac+")";an.fillStyle=aa.fillStyle||this.fillStyle||"rgba(0,0,0,"+ac+")";for(var ad=0;ad<ag;ad++){var ak=G.jqplot.LinePattern(an,aj);an.translate(Math.cos(this.angle*Math.PI/180)*ae,Math.sin(this.angle*Math.PI/180)*ae);ak.beginPath();if(ao){an.arc(al[0],al[1],al[2],al[3],al[4],true)}else{if(ai){if(ai){an.fillRect(al[0],al[1],al[2],al[3])}}else{if(al&&al.length){var ab=true;for(var af=0;af<al.length;af++){if(al[af][0]!=null&&al[af][1]!=null){if(ab){ak.moveTo(al[af][0],al[af][1]);ab=false}else{ak.lineTo(al[af][0],al[af][1])}}else{ab=true}}}}}if(ah){ak.closePath()}if(am){an.fill()}else{an.stroke()}}an.restore()};G.jqplot.ShapeRenderer=function(aa){this.lineWidth=1.5;this.linePattern="solid";this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.isarc=false;this.fillRect=false;this.strokeRect=false;this.clearRect=false;this.strokeStyle="#999999";this.fillStyle="#999999";G.extend(true,this,aa)};G.jqplot.ShapeRenderer.prototype.init=function(aa){G.extend(true,this,aa)};G.jqplot.ShapeRenderer.prototype.draw=function(al,aj,an){al.save();var aa=(an!=null)?an:{};var ak=(aa.fill!=null)?aa.fill:this.fill;var af=(aa.closePath!=null)?aa.closePath:this.closePath;var ag=(aa.fillRect!=null)?aa.fillRect:this.fillRect;var ad=(aa.strokeRect!=null)?aa.strokeRect:this.strokeRect;var ab=(aa.clearRect!=null)?aa.clearRect:this.clearRect;var am=(aa.isarc!=null)?aa.isarc:this.isarc;var ah=(aa.linePattern!=null)?aa.linePattern:this.linePattern;var ai=G.jqplot.LinePattern(al,ah);al.lineWidth=aa.lineWidth||this.lineWidth;al.lineJoin=aa.lineJoin||this.lineJoin;al.lineCap=aa.lineCap||this.lineCap;al.strokeStyle=(aa.strokeStyle||aa.color)||this.strokeStyle;al.fillStyle=aa.fillStyle||this.fillStyle;al.beginPath();if(am){al.arc(aj[0],aj[1],aj[2],aj[3],aj[4],true);if(af){al.closePath()}if(ak){al.fill()}else{al.stroke()}al.restore();return}else{if(ab){al.clearRect(aj[0],aj[1],aj[2],aj[3]);al.restore();return}else{if(ag||ad){if(ag){al.fillRect(aj[0],aj[1],aj[2],aj[3])}if(ad){al.strokeRect(aj[0],aj[1],aj[2],aj[3]);al.restore();return}}else{if(aj&&aj.length){var ac=true;for(var ae=0;ae<aj.length;ae++){if(aj[ae][0]!=null&&aj[ae][1]!=null){if(ac){ai.moveTo(aj[ae][0],aj[ae][1]);ac=false}else{ai.lineTo(aj[ae][0],aj[ae][1])}}else{ac=true}}if(af){ai.closePath()}if(ak){al.fill()}else{al.stroke()}}}}}al.restore()};G.jqplot.TableLegendRenderer=function(){};G.jqplot.TableLegendRenderer.prototype.init=function(aa){G.extend(true,this,aa)};G.jqplot.TableLegendRenderer.prototype.addrow=function(aj,ad,aa,ah){var ae=(aa)?this.rowSpacing+"px":"0px";var ai;var ac;var ab;var ag;var af;ab=document.createElement("tr");ai=G(ab);ai.addClass("jqplot-table-legend");ab=null;if(ah){ai.prependTo(this._elem)}else{ai.appendTo(this._elem)}if(this.showSwatches){ac=G(document.createElement("td"));ac.addClass("jqplot-table-legend jqplot-table-legend-swatch");ac.css({textAlign:"center",paddingTop:ae});ag=G(document.createElement("div"));ag.addClass("jqplot-table-legend-swatch-outline");af=G(document.createElement("div"));af.addClass("jqplot-table-legend-swatch");af.css({backgroundColor:ad,borderColor:ad});ai.append(ac.append(ag.append(af)))}if(this.showLabels){ac=G(document.createElement("td"));ac.addClass("jqplot-table-legend jqplot-table-legend-label");ac.css("paddingTop",ae);ai.append(ac);if(this.escapeHtml){ac.text(aj)}else{ac.html(aj)}}ac=null;ag=null;af=null;ai=null;ab=null};G.jqplot.TableLegendRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}if(this.show){var af=this._series;var ab=document.createElement("table");this._elem=G(ab);this._elem.addClass("jqplot-table-legend");var ak={position:"absolute"};if(this.background){ak.background=this.background}if(this.border){ak.border=this.border}if(this.fontSize){ak.fontSize=this.fontSize}if(this.fontFamily){ak.fontFamily=this.fontFamily}if(this.textColor){ak.textColor=this.textColor}if(this.marginTop!=null){ak.marginTop=this.marginTop}if(this.marginBottom!=null){ak.marginBottom=this.marginBottom}if(this.marginLeft!=null){ak.marginLeft=this.marginLeft}if(this.marginRight!=null){ak.marginRight=this.marginRight}var aa=false,ah=false,aj;for(var ag=0;ag<af.length;ag++){aj=af[ag];if(aj._stack||aj.renderer.constructor==G.jqplot.BezierCurveRenderer){ah=true}if(aj.show&&aj.showLabel){var ae=this.labels[ag]||aj.label.toString();if(ae){var ac=aj.color;if(ah&&ag<af.length-1){aa=true}else{if(ah&&ag==af.length-1){aa=false}}this.renderer.addrow.call(this,ae,ac,aa,ah);aa=true}for(var ad=0;ad<G.jqplot.addLegendRowHooks.length;ad++){var ai=G.jqplot.addLegendRowHooks[ad].call(this,aj);if(ai){this.renderer.addrow.call(this,ai.label,ai.color,aa);aa=true}}ae=null}}}return this._elem};G.jqplot.TableLegendRenderer.prototype.pack=function(ac){if(this.show){if(this.placement=="insideGrid"){switch(this.location){case"nw":var ab=ac.left;var aa=ac.top;this._elem.css("left",ab);this._elem.css("top",aa);break;case"n":var ab=(ac.left+(this._plotDimensions.width-ac.right))/2-this.getWidth()/2;var aa=ac.top;this._elem.css("left",ab);this._elem.css("top",aa);break;case"ne":var ab=ac.right;var aa=ac.top;this._elem.css({right:ab,top:aa});break;case"e":var ab=ac.right;var aa=(ac.top+(this._plotDimensions.height-ac.bottom))/2-this.getHeight()/2;this._elem.css({right:ab,top:aa});break;case"se":var ab=ac.right;var aa=ac.bottom;this._elem.css({right:ab,bottom:aa});break;case"s":var ab=(ac.left+(this._plotDimensions.width-ac.right))/2-this.getWidth()/2;var aa=ac.bottom;this._elem.css({left:ab,bottom:aa});break;case"sw":var ab=ac.left;var aa=ac.bottom;this._elem.css({left:ab,bottom:aa});break;case"w":var ab=ac.left;var aa=(ac.top+(this._plotDimensions.height-ac.bottom))/2-this.getHeight()/2;this._elem.css({left:ab,top:aa});break;default:var ab=ac.right;var aa=ac.bottom;this._elem.css({right:ab,bottom:aa});break}}else{if(this.placement=="outside"){switch(this.location){case"nw":var ab=this._plotDimensions.width-ac.left;var aa=ac.top;this._elem.css("right",ab);this._elem.css("top",aa);break;case"n":var ab=(ac.left+(this._plotDimensions.width-ac.right))/2-this.getWidth()/2;var aa=this._plotDimensions.height-ac.top;this._elem.css("left",ab);this._elem.css("bottom",aa);break;case"ne":var ab=this._plotDimensions.width-ac.right;var aa=ac.top;this._elem.css({left:ab,top:aa});break;case"e":var ab=this._plotDimensions.width-ac.right;var aa=(ac.top+(this._plotDimensions.height-ac.bottom))/2-this.getHeight()/2;this._elem.css({left:ab,top:aa});break;case"se":var ab=this._plotDimensions.width-ac.right;var aa=ac.bottom;this._elem.css({left:ab,bottom:aa});break;case"s":var ab=(ac.left+(this._plotDimensions.width-ac.right))/2-this.getWidth()/2;var aa=this._plotDimensions.height-ac.bottom;this._elem.css({left:ab,top:aa});break;case"sw":var ab=this._plotDimensions.width-ac.left;var aa=ac.bottom;this._elem.css({right:ab,bottom:aa});break;case"w":var ab=this._plotDimensions.width-ac.left;var aa=(ac.top+(this._plotDimensions.height-ac.bottom))/2-this.getHeight()/2;this._elem.css({right:ab,top:aa});break;default:var ab=ac.right;var aa=ac.bottom;this._elem.css({right:ab,bottom:aa});break}}else{switch(this.location){case"nw":this._elem.css({left:0,top:ac.top});break;case"n":var ab=(ac.left+(this._plotDimensions.width-ac.right))/2-this.getWidth()/2;this._elem.css({left:ab,top:ac.top});break;case"ne":this._elem.css({right:0,top:ac.top});break;case"e":var aa=(ac.top+(this._plotDimensions.height-ac.bottom))/2-this.getHeight()/2;this._elem.css({right:ac.right,top:aa});break;case"se":this._elem.css({right:ac.right,bottom:ac.bottom});break;case"s":var ab=(ac.left+(this._plotDimensions.width-ac.right))/2-this.getWidth()/2;this._elem.css({left:ab,bottom:ac.bottom});break;case"sw":this._elem.css({left:ac.left,bottom:ac.bottom});break;case"w":var aa=(ac.top+(this._plotDimensions.height-ac.bottom))/2-this.getHeight()/2;this._elem.css({left:ac.left,top:aa});break;default:this._elem.css({right:ac.right,bottom:ac.bottom});break}}}}};G.jqplot.ThemeEngine=function(){this.themes={};this.activeTheme=null};G.jqplot.ThemeEngine.prototype.init=function(){var ad=new G.jqplot.Theme({_name:"Default"});var ag,ab,af;for(ag in ad.target){if(ag=="textColor"){ad.target[ag]=this.target.css("color")}else{ad.target[ag]=this.target.css(ag)}}if(this.title.show&&this.title._elem){for(ag in ad.title){if(ag=="textColor"){ad.title[ag]=this.title._elem.css("color")}else{ad.title[ag]=this.title._elem.css(ag)}}}for(ag in ad.grid){ad.grid[ag]=this.grid[ag]}if(ad.grid.backgroundColor==null&&this.grid.background!=null){ad.grid.backgroundColor=this.grid.background}if(this.legend.show&&this.legend._elem){for(ag in ad.legend){if(ag=="textColor"){ad.legend[ag]=this.legend._elem.css("color")}else{ad.legend[ag]=this.legend._elem.css(ag)}}}var ac;for(ab=0;ab<this.series.length;ab++){ac=this.series[ab];if(ac.renderer.constructor==G.jqplot.LineRenderer){ad.series.push(new l())}else{if(ac.renderer.constructor==G.jqplot.BarRenderer){ad.series.push(new O())}else{if(ac.renderer.constructor==G.jqplot.PieRenderer){ad.series.push(new d())}else{if(ac.renderer.constructor==G.jqplot.DonutRenderer){ad.series.push(new B())}else{if(ac.renderer.constructor==G.jqplot.FunnelRenderer){ad.series.push(new T())}else{if(ac.renderer.constructor==G.jqplot.MeterGaugeRenderer){ad.series.push(new y())}else{ad.series.push({})}}}}}}for(ag in ad.series[ab]){ad.series[ab][ag]=ac[ag]}}var aa,ae;for(ag in this.axes){ae=this.axes[ag];aa=ad.axes[ag]=new K();aa.borderColor=ae.borderColor;aa.borderWidth=ae.borderWidth;if(ae._ticks&&ae._ticks[0]){for(af in aa.ticks){if(ae._ticks[0].hasOwnProperty(af)){aa.ticks[af]=ae._ticks[0][af]}else{if(ae._ticks[0]._elem){aa.ticks[af]=ae._ticks[0]._elem.css(af)}}}}if(ae._label&&ae._label.show){for(af in aa.label){if(ae._label[af]){aa.label[af]=ae._label[af]}else{if(ae._label._elem){if(af=="textColor"){aa.label[af]=ae._label._elem.css("color")}else{aa.label[af]=ae._label._elem.css(af)}}}}}}this.themeEngine._add(ad);this.themeEngine.activeTheme=this.themeEngine.themes[ad._name]};G.jqplot.ThemeEngine.prototype.get=function(aa){if(!aa){return this.activeTheme}else{return this.themes[aa]}};function J(ab,aa){return ab-aa}G.jqplot.ThemeEngine.prototype.getThemeNames=function(){var aa=[];for(var ab in this.themes){aa.push(ab)}return aa.sort(J)};G.jqplot.ThemeEngine.prototype.getThemes=function(){var ab=[];var aa=[];for(var ad in this.themes){ab.push(ad)}ab.sort(J);for(var ac=0;ac<ab.length;ac++){aa.push(this.themes[ab[ac]])}return aa};G.jqplot.ThemeEngine.prototype.activate=function(an,at){var aa=false;if(!at&&this.activeTheme&&this.activeTheme._name){at=this.activeTheme._name}if(!this.themes.hasOwnProperty(at)){throw new Error("No theme of that name")}else{var af=this.themes[at];this.activeTheme=af;var ar,al=false,ak=false;var ab=["xaxis","x2axis","yaxis","y2axis"];for(ao=0;ao<ab.length;ao++){var ag=ab[ao];if(af.axesStyles.borderColor!=null){an.axes[ag].borderColor=af.axesStyles.borderColor}if(af.axesStyles.borderWidth!=null){an.axes[ag].borderWidth=af.axesStyles.borderWidth}}for(var aq in an.axes){var ad=an.axes[aq];if(ad.show){var aj=af.axes[aq]||{};var ah=af.axesStyles;var ae=G.jqplot.extend(true,{},aj,ah);ar=(af.axesStyles.borderColor!=null)?af.axesStyles.borderColor:ae.borderColor;if(ae.borderColor!=null){ad.borderColor=ae.borderColor;aa=true}ar=(af.axesStyles.borderWidth!=null)?af.axesStyles.borderWidth:ae.borderWidth;if(ae.borderWidth!=null){ad.borderWidth=ae.borderWidth;aa=true}if(ad._ticks&&ad._ticks[0]){for(var ac in ae.ticks){ar=ae.ticks[ac];if(ar!=null){ad.tickOptions[ac]=ar;ad._ticks=[];aa=true}}}if(ad._label&&ad._label.show){for(var ac in ae.label){ar=ae.label[ac];if(ar!=null){ad.labelOptions[ac]=ar;aa=true}}}}}for(var am in af.grid){if(af.grid[am]!=null){an.grid[am]=af.grid[am]}}if(!aa){an.grid.draw()}if(an.legend.show){for(am in af.legend){if(af.legend[am]!=null){an.legend[am]=af.legend[am]}}}if(an.title.show){for(am in af.title){if(af.title[am]!=null){an.title[am]=af.title[am]}}}var ao;for(ao=0;ao<af.series.length;ao++){var ai={};var ap=false;for(am in af.series[ao]){ar=(af.seriesStyles[am]!=null)?af.seriesStyles[am]:af.series[ao][am];if(ar!=null){ai[am]=ar;if(am=="color"){an.series[ao].renderer.shapeRenderer.fillStyle=ar;an.series[ao].renderer.shapeRenderer.strokeStyle=ar;an.series[ao][am]=ar}else{if((am=="lineWidth")||(am=="linePattern")){an.series[ao].renderer.shapeRenderer[am]=ar;an.series[ao][am]=ar}else{if(am=="markerOptions"){Q(an.series[ao].markerOptions,ar);Q(an.series[ao].markerRenderer,ar)}else{an.series[ao][am]=ar}}}aa=true}}}if(aa){an.target.empty();an.draw()}for(am in af.target){if(af.target[am]!=null){an.target.css(am,af.target[am])}}}};G.jqplot.ThemeEngine.prototype._add=function(ab,aa){if(aa){ab._name=aa}if(!ab._name){ab._name=Date.parse(new Date())}if(!this.themes.hasOwnProperty(ab._name)){this.themes[ab._name]=ab}else{throw new Error("jqplot.ThemeEngine Error: Theme already in use")}};G.jqplot.ThemeEngine.prototype.remove=function(aa){if(aa=="Default"){return false}return delete this.themes[aa]};G.jqplot.ThemeEngine.prototype.newTheme=function(aa,ac){if(typeof(aa)=="object"){ac=ac||aa;aa=null}if(ac&&ac._name){aa=ac._name}else{aa=aa||Date.parse(new Date())}var ab=this.copy(this.themes.Default._name,aa);G.jqplot.extend(ab,ac);return ab};function w(ac){if(ac==null||typeof(ac)!="object"){return ac}var aa=new ac.constructor();for(var ab in ac){aa[ab]=w(ac[ab])}return aa}G.jqplot.clone=w;function Q(ac,ab){if(ab==null||typeof(ab)!="object"){return}for(var aa in ab){if(aa=="highlightColors"){ac[aa]=w(ab[aa])}if(ab[aa]!=null&&typeof(ab[aa])=="object"){if(!ac.hasOwnProperty(aa)){ac[aa]={}}Q(ac[aa],ab[aa])}else{ac[aa]=ab[aa]}}}G.jqplot.merge=Q;G.jqplot.extend=function(){var af=arguments[0]||{},ad=1,ae=arguments.length,aa=false,ac;if(typeof af==="boolean"){aa=af;af=arguments[1]||{};ad=2}if(typeof af!=="object"&&!toString.call(af)==="[object Function]"){af={}}for(;ad<ae;ad++){if((ac=arguments[ad])!=null){for(var ab in ac){var ag=af[ab],ah=ac[ab];if(af===ah){continue}if(aa&&ah&&typeof ah==="object"&&!ah.nodeType){af[ab]=G.jqplot.extend(aa,ag||(ah.length!=null?[]:{}),ah)}else{if(ah!==q){af[ab]=ah}}}}}return af};G.jqplot.ThemeEngine.prototype.rename=function(ab,aa){if(ab=="Default"||aa=="Default"){throw new Error("jqplot.ThemeEngine Error: Cannot rename from/to Default")}if(this.themes.hasOwnProperty(aa)){throw new Error("jqplot.ThemeEngine Error: New name already in use.")}else{if(this.themes.hasOwnProperty(ab)){var ac=this.copy(ab,aa);this.remove(ab);return ac}}throw new Error("jqplot.ThemeEngine Error: Old name or new name invalid")};G.jqplot.ThemeEngine.prototype.copy=function(aa,ac,ae){if(ac=="Default"){throw new Error("jqplot.ThemeEngine Error: Cannot copy over Default theme")}if(!this.themes.hasOwnProperty(aa)){var ab="jqplot.ThemeEngine Error: Source name invalid";throw new Error(ab)}if(this.themes.hasOwnProperty(ac)){var ab="jqplot.ThemeEngine Error: Target name invalid";throw new Error(ab)}else{var ad=w(this.themes[aa]);ad._name=ac;G.jqplot.extend(true,ad,ae);this._add(ad);return ad}};G.jqplot.Theme=function(aa,ab){if(typeof(aa)=="object"){ab=ab||aa;aa=null}aa=aa||Date.parse(new Date());this._name=aa;this.target={backgroundColor:null};this.legend={textColor:null,fontFamily:null,fontSize:null,border:null,background:null};this.title={textColor:null,fontFamily:null,fontSize:null,textAlign:null};this.seriesStyles={};this.series=[];this.grid={drawGridlines:null,gridLineColor:null,gridLineWidth:null,backgroundColor:null,borderColor:null,borderWidth:null,shadow:null};this.axesStyles={label:{},ticks:{}};this.axes={};if(typeof(ab)=="string"){this._name=ab}else{if(typeof(ab)=="object"){G.jqplot.extend(true,this,ab)}}};var K=function(){this.borderColor=null;this.borderWidth=null;this.ticks=new k();this.label=new p()};var k=function(){this.show=null;this.showGridline=null;this.showLabel=null;this.showMark=null;this.size=null;this.textColor=null;this.whiteSpace=null;this.fontSize=null;this.fontFamily=null};var p=function(){this.textColor=null;this.whiteSpace=null;this.fontSize=null;this.fontFamily=null;this.fontWeight=null};var l=function(){this.color=null;this.lineWidth=null;this.linePattern=null;this.shadow=null;this.fillColor=null;this.showMarker=null;this.markerOptions=new D()};var D=function(){this.show=null;this.style=null;this.lineWidth=null;this.size=null;this.color=null;this.shadow=null};var O=function(){this.color=null;this.seriesColors=null;this.lineWidth=null;this.shadow=null;this.barPadding=null;this.barMargin=null;this.barWidth=null;this.highlightColors=null};var d=function(){this.seriesColors=null;this.padding=null;this.sliceMargin=null;this.fill=null;this.shadow=null;this.startAngle=null;this.lineWidth=null;this.highlightColors=null};var B=function(){this.seriesColors=null;this.padding=null;this.sliceMargin=null;this.fill=null;this.shadow=null;this.startAngle=null;this.lineWidth=null;this.innerDiameter=null;this.thickness=null;this.ringMargin=null;this.highlightColors=null};var T=function(){this.color=null;this.lineWidth=null;this.shadow=null;this.padding=null;this.sectionMargin=null;this.seriesColors=null;this.highlightColors=null};var y=function(){this.padding=null;this.backgroundColor=null;this.ringColor=null;this.tickColor=null;this.ringWidth=null;this.intervalColors=null;this.intervalInnerRadius=null;this.intervalOuterRadius=null;this.hubRadius=null;this.needleThickness=null;this.needlePad=null};G.fn.jqplotChildText=function(){return G(this).contents().filter(function(){return this.nodeType==3}).text()};G.fn.jqplotGetComputedFontStyle=function(){var ad=window.getComputedStyle?window.getComputedStyle(this[0]):this[0].currentStyle;var ab=ad["font-style"]?["font-style","font-weight","font-size","font-family"]:["fontStyle","fontWeight","fontSize","fontFamily"];var ae=[];for(var ac=0;ac<ab.length;++ac){var aa=String(ad[ab[ac]]);if(aa&&aa!="normal"){ae.push(aa)}}return ae.join(" ")};G.fn.jqplotToImageCanvas=function(ac){ac=ac||{};var an=(ac.x_offset==null)?0:ac.x_offset;var ap=(ac.y_offset==null)?0:ac.y_offset;var ae=(ac.backgroundColor==null)?"rgb(255,255,255)":ac.backgroundColor;if(G(this).width()==0||G(this).height()==0){return null}if(!G.jqplot.support_canvas){return null}var ag=document.createElement("canvas");var at=G(this).outerHeight(true);var al=G(this).outerWidth(true);var af=G(this).offset();var ah=af.left;var aj=af.top;var am=0,ak=0;var aq=["jqplot-table-legend","jqplot-xaxis-tick","jqplot-x2axis-tick","jqplot-yaxis-tick","jqplot-y2axis-tick","jqplot-y3axis-tick","jqplot-y4axis-tick","jqplot-y5axis-tick","jqplot-y6axis-tick","jqplot-y7axis-tick","jqplot-y8axis-tick","jqplot-y9axis-tick","jqplot-xaxis-label","jqplot-x2axis-label","jqplot-yaxis-label","jqplot-y2axis-label","jqplot-y3axis-label","jqplot-y4axis-label","jqplot-y5axis-label","jqplot-y6axis-label","jqplot-y7axis-label","jqplot-y8axis-label","jqplot-y9axis-label"];var ai,aa,ab,au;for(var ar in aq){G(this).find("."+aq[ar]).each(function(){ai=G(this).offset().top-aj;aa=G(this).offset().left-ah;au=aa+G(this).outerWidth(true)+am;ab=ai+G(this).outerHeight(true)+ak;if(aa<-am){al=al-am-aa;am=-aa}if(ai<-ak){at=at-ak-ai;ak=-ai}if(au>al){al=au}if(ab>at){at=ab}})}ag.width=al+Number(an);ag.height=at+Number(ap);var ad=ag.getContext("2d");ad.save();ad.fillStyle=ae;ad.fillRect(0,0,ag.width,ag.height);ad.restore();ad.translate(am,ak);ad.textAlign="left";ad.textBaseline="top";function av(ax){var ay=parseInt(G(ax).css("line-height"));if(isNaN(ay)){ay=parseInt(G(ax).css("font-size"))*1.2}return ay}function aw(ay,ax,aL,az,aH,aA){var aJ=av(ay);var aD=G(ay).innerWidth();var aE=G(ay).innerHeight();var aG=aL.split(/\s+/);var aK=aG.length;var aI="";var aF=[];var aN=aH;var aM=az;for(var aC=0;aC<aK;aC++){aI+=aG[aC];if(ax.measureText(aI).width>aD){aF.push(aC);aI=""}}if(aF.length===0){if(G(ay).css("textAlign")==="center"){aM=az+(aA-ax.measureText(aI).width)/2-am}ax.fillText(aL,aM,aH)}else{aI=aG.slice(0,aF[0]).join(" ");if(G(ay).css("textAlign")==="center"){aM=az+(aA-ax.measureText(aI).width)/2-am}ax.fillText(aI,aM,aN);aN+=aJ;for(var aC=1,aB=aF.length;aC<aB;aC++){aI=aG.slice(aF[aC-1],aF[aC]).join(" ");if(G(ay).css("textAlign")==="center"){aM=az+(aA-ax.measureText(aI).width)/2-am}ax.fillText(aI,aM,aN);aN+=aJ}aI=aG.slice(aF[aC-1],aG.length).join(" ");if(G(ay).css("textAlign")==="center"){aM=az+(aA-ax.measureText(aI).width)/2-am}ax.fillText(aI,aM,aN)}}function ao(az,aC,ax){var aG=az.tagName.toLowerCase();var ay=G(az).position();var aD=window.getComputedStyle?window.getComputedStyle(az):az.currentStyle;var aB=aC+ay.left+parseInt(aD.marginLeft)+parseInt(aD.borderLeftWidth)+parseInt(aD.paddingLeft);var aE=ax+ay.top+parseInt(aD.marginTop)+parseInt(aD.borderTopWidth)+parseInt(aD.paddingTop);var aF=ag.width;if((aG=="div"||aG=="span")&&!G(az).hasClass("jqplot-highlighter-tooltip")){G(az).children().each(function(){ao(this,aB,aE)});var aH=G(az).jqplotChildText();if(aH){ad.font=G(az).jqplotGetComputedFontStyle();ad.fillStyle=G(az).css("color");aw(az,ad,aH,aB,aE,aF)}}else{if(aG==="table"&&G(az).hasClass("jqplot-table-legend")){ad.strokeStyle=G(az).css("border-top-color");ad.fillStyle=G(az).css("background-color");ad.fillRect(aB,aE,G(az).innerWidth(),G(az).innerHeight());if(parseInt(G(az).css("border-top-width"))>0){ad.strokeRect(aB,aE,G(az).innerWidth(),G(az).innerHeight())}G(az).find("div.jqplot-table-legend-swatch-outline").each(function(){var aN=G(this);ad.strokeStyle=aN.css("border-top-color");var aJ=aB+aN.position().left;var aK=aE+aN.position().top;ad.strokeRect(aJ,aK,aN.innerWidth(),aN.innerHeight());aJ+=parseInt(aN.css("padding-left"));aK+=parseInt(aN.css("padding-top"));var aM=aN.innerHeight()-2*parseInt(aN.css("padding-top"));var aI=aN.innerWidth()-2*parseInt(aN.css("padding-left"));var aL=aN.children("div.jqplot-table-legend-swatch");ad.fillStyle=aL.css("background-color");ad.fillRect(aJ,aK,aI,aM)});G(az).find("td.jqplot-table-legend-label").each(function(){var aK=G(this);var aI=aB+aK.position().left;var aJ=aE+aK.position().top+parseInt(aK.css("padding-top"));ad.font=aK.jqplotGetComputedFontStyle();ad.fillStyle=aK.css("color");ad.fillText(aK.text(),aI,aJ)});var aA=null}else{if(aG=="canvas"){ad.drawImage(az,aB,aE)}}}}G(this).children().each(function(){ao(this,an,ap)});return ag};G.fn.jqplotToImageStr=function(ab){var aa=G(this).jqplotToImageCanvas(ab);if(aa){return aa.toDataURL("image/png")}else{return null}};G.fn.jqplotToImageElem=function(aa){var ab=document.createElement("img");var ac=G(this).jqplotToImageStr(aa);ab.src=ac;return ab};G.fn.jqplotToImageElemStr=function(aa){var ab="<img src="+G(this).jqplotToImageStr(aa)+" />";return ab};G.fn.jqplotSaveImage=function(){var aa=G(this).jqplotToImageStr({});if(aa){window.location.href=aa.replace("image/png","image/octet-stream")}};G.fn.jqplotViewImage=function(){var ab=G(this).jqplotToImageElemStr({});var ac=G(this).jqplotToImageStr({});if(ab){var aa=window.open("");aa.document.open("image/png");aa.document.write(ab);aa.document.close();aa=null}};var Z=function(){this.syntax=Z.config.syntax;this._type="jsDate";this.utcOffset=new Date().getTimezoneOffset*60000;this.proxy=new Date();this.options={};this.locale=Z.regional.getLocale();this.formatString="";this.defaultCentury=Z.config.defaultCentury;switch(arguments.length){case 0:break;case 1:if(i(arguments[0])=="[object Object]"&&arguments[0]._type!="jsDate"){var ac=this.options=arguments[0];this.syntax=ac.syntax||this.syntax;this.defaultCentury=ac.defaultCentury||this.defaultCentury;this.proxy=Z.createDate(ac.date)}else{this.proxy=Z.createDate(arguments[0])}break;default:var aa=[];for(var ab=0;ab<arguments.length;ab++){aa.push(arguments[ab])}this.proxy=new Date(this.utcOffset);this.proxy.setFullYear.apply(this.proxy,aa.slice(0,3));if(aa.slice(3).length){this.proxy.setHours.apply(this.proxy,aa.slice(3))}break}};Z.config={defaultLocale:"en",syntax:"perl",defaultCentury:1900};Z.prototype.add=function(ac,ab){var aa=z[ab]||z.day;if(typeof aa=="number"){this.proxy.setTime(this.proxy.getTime()+(aa*ac))}else{aa.add(this,ac)}return this};Z.prototype.clone=function(){return new Z(this.proxy.getTime())};Z.prototype.diff=function(ab,ae,aa){ab=new Z(ab);if(ab===null){return null}var ac=z[ae]||z.day;if(typeof ac=="number"){var ad=(this.proxy.getTime()-ab.proxy.getTime())/ac}else{var ad=ac.diff(this.proxy,ab.proxy)}return(aa?ad:Math[ad>0?"floor":"ceil"](ad))};Z.prototype.getAbbrDayName=function(){return Z.regional[this.locale]["dayNamesShort"][this.proxy.getDay()]};Z.prototype.getAbbrMonthName=function(){return Z.regional[this.locale]["monthNamesShort"][this.proxy.getMonth()]};Z.prototype.getAMPM=function(){return this.proxy.getHours()>=12?"PM":"AM"};Z.prototype.getAmPm=function(){return this.proxy.getHours()>=12?"pm":"am"};Z.prototype.getCentury=function(){return parseInt(this.proxy.getFullYear()/100,10)};Z.prototype.getDate=function(){return this.proxy.getDate()};Z.prototype.getDay=function(){return this.proxy.getDay()};Z.prototype.getDayOfWeek=function(){var aa=this.proxy.getDay();return aa===0?7:aa};Z.prototype.getDayOfYear=function(){var ab=this.proxy;var aa=ab-new Date(""+ab.getFullYear()+"/1/1 GMT");aa+=ab.getTimezoneOffset()*60000;ab=null;return parseInt(aa/60000/60/24,10)+1};Z.prototype.getDayName=function(){return Z.regional[this.locale]["dayNames"][this.proxy.getDay()]};Z.prototype.getFullWeekOfYear=function(){var ad=this.proxy;var aa=this.getDayOfYear();var ac=6-ad.getDay();var ab=parseInt((aa+ac)/7,10);return ab};Z.prototype.getFullYear=function(){return this.proxy.getFullYear()};Z.prototype.getGmtOffset=function(){var aa=this.proxy.getTimezoneOffset()/60;var ab=aa<0?"+":"-";aa=Math.abs(aa);return ab+I(Math.floor(aa),2)+":"+I((aa%1)*60,2)};Z.prototype.getHours=function(){return this.proxy.getHours()};Z.prototype.getHours12=function(){var aa=this.proxy.getHours();return aa>12?aa-12:(aa==0?12:aa)};Z.prototype.getIsoWeek=function(){var ad=this.proxy;var ac=ad.getWeekOfYear();var aa=(new Date(""+ad.getFullYear()+"/1/1")).getDay();var ab=ac+(aa>4||aa<=1?0:1);if(ab==53&&(new Date(""+ad.getFullYear()+"/12/31")).getDay()<4){ab=1}else{if(ab===0){ad=new Z(new Date(""+(ad.getFullYear()-1)+"/12/31"));ab=ad.getIsoWeek()}}ad=null;return ab};Z.prototype.getMilliseconds=function(){return this.proxy.getMilliseconds()};Z.prototype.getMinutes=function(){return this.proxy.getMinutes()};Z.prototype.getMonth=function(){return this.proxy.getMonth()};Z.prototype.getMonthName=function(){return Z.regional[this.locale]["monthNames"][this.proxy.getMonth()]};Z.prototype.getMonthNumber=function(){return this.proxy.getMonth()+1};Z.prototype.getSeconds=function(){return this.proxy.getSeconds()};Z.prototype.getShortYear=function(){return this.proxy.getYear()%100};Z.prototype.getTime=function(){return this.proxy.getTime()};Z.prototype.getTimezoneAbbr=function(){return this.proxy.toString().replace(/^.*\(([^)]+)\)$/,"$1")};Z.prototype.getTimezoneName=function(){var aa=/(?:\((.+)\)$| ([A-Z]{3}) )/.exec(this.toString());return aa[1]||aa[2]||"GMT"+this.getGmtOffset()};Z.prototype.getTimezoneOffset=function(){return this.proxy.getTimezoneOffset()};Z.prototype.getWeekOfYear=function(){var aa=this.getDayOfYear();var ac=7-this.getDayOfWeek();var ab=parseInt((aa+ac)/7,10);return ab};Z.prototype.getUnix=function(){return Math.round(this.proxy.getTime()/1000,0)};Z.prototype.getYear=function(){return this.proxy.getYear()};Z.prototype.next=function(aa){aa=aa||"day";return this.clone().add(1,aa)};Z.prototype.set=function(){switch(arguments.length){case 0:this.proxy=new Date();break;case 1:if(i(arguments[0])=="[object Object]"&&arguments[0]._type!="jsDate"){var ac=this.options=arguments[0];this.syntax=ac.syntax||this.syntax;this.defaultCentury=ac.defaultCentury||this.defaultCentury;this.proxy=Z.createDate(ac.date)}else{this.proxy=Z.createDate(arguments[0])}break;default:var aa=[];for(var ab=0;ab<arguments.length;ab++){aa.push(arguments[ab])}this.proxy=new Date(this.utcOffset);this.proxy.setFullYear.apply(this.proxy,aa.slice(0,3));if(aa.slice(3).length){this.proxy.setHours.apply(this.proxy,aa.slice(3))}break}};Z.prototype.setDate=function(aa){return this.proxy.setDate(aa)};Z.prototype.setFullYear=function(){return this.proxy.setFullYear.apply(this.proxy,arguments)};Z.prototype.setHours=function(){return this.proxy.setHours.apply(this.proxy,arguments)};Z.prototype.setMilliseconds=function(aa){return this.proxy.setMilliseconds(aa)};Z.prototype.setMinutes=function(){return this.proxy.setMinutes.apply(this.proxy,arguments)};Z.prototype.setMonth=function(){return this.proxy.setMonth.apply(this.proxy,arguments)};Z.prototype.setSeconds=function(){return this.proxy.setSeconds.apply(this.proxy,arguments)};Z.prototype.setTime=function(aa){return this.proxy.setTime(aa)};Z.prototype.setYear=function(){return this.proxy.setYear.apply(this.proxy,arguments)};Z.prototype.strftime=function(aa){aa=aa||this.formatString||Z.regional[this.locale]["formatString"];return Z.strftime(this,aa,this.syntax)};Z.prototype.toString=function(){return this.proxy.toString()};Z.prototype.toYmdInt=function(){return(this.proxy.getFullYear()*10000)+(this.getMonthNumber()*100)+this.proxy.getDate()};Z.regional={en:{monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],formatString:"%Y-%m-%d %H:%M:%S"},fr:{monthNames:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthNamesShort:["Jan","Fév","Mar","Avr","Mai","Jun","Jul","Aoû","Sep","Oct","Nov","Déc"],dayNames:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],dayNamesShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],formatString:"%Y-%m-%d %H:%M:%S"},de:{monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],formatString:"%Y-%m-%d %H:%M:%S"},es:{monthNames:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthNamesShort:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],dayNames:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mié","Juv","Vie","Sáb"],formatString:"%Y-%m-%d %H:%M:%S"},ru:{monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],formatString:"%Y-%m-%d %H:%M:%S"},ar:{monthNames:["كانون الثاني","شباط","آذار","نيسان","آذار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["السبت","الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة"],dayNamesShort:["سبت","أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة"],formatString:"%Y-%m-%d %H:%M:%S"},pt:{monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],formatString:"%Y-%m-%d %H:%M:%S"},"pt-BR":{monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],formatString:"%Y-%m-%d %H:%M:%S"}};Z.regional["en-US"]=Z.regional["en-GB"]=Z.regional.en;Z.regional.getLocale=function(){var aa=Z.config.defaultLocale;if(document&&document.getElementsByTagName("html")&&document.getElementsByTagName("html")[0].lang){aa=document.getElementsByTagName("html")[0].lang;if(!Z.regional.hasOwnProperty(aa)){aa=Z.config.defaultLocale}}return aa};var x=24*60*60*1000;var I=function(aa,ad){aa=String(aa);var ab=ad-aa.length;var ac=String(Math.pow(10,ab)).slice(1);return ac.concat(aa)};var z={millisecond:1,second:1000,minute:60*1000,hour:60*60*1000,day:x,week:7*x,month:{add:function(ac,aa){z.year.add(ac,Math[aa>0?"floor":"ceil"](aa/12));var ab=ac.getMonth()+(aa%12);if(ab==12){ab=0;ac.setYear(ac.getFullYear()+1)}else{if(ab==-1){ab=11;ac.setYear(ac.getFullYear()-1)}}ac.setMonth(ab)},diff:function(ae,ac){var aa=ae.getFullYear()-ac.getFullYear();var ab=ae.getMonth()-ac.getMonth()+(aa*12);var ad=ae.getDate()-ac.getDate();return ab+(ad/30)}},year:{add:function(ab,aa){ab.setYear(ab.getFullYear()+Math[aa>0?"floor":"ceil"](aa))},diff:function(ab,aa){return z.month.diff(ab,aa)/12}}};for(var S in z){if(S.substring(S.length-1)!="s"){z[S+"s"]=z[S]}}var C=function(ae,ad,ab){if(Z.formats[ab]["shortcuts"][ad]){return Z.strftime(ae,Z.formats[ab]["shortcuts"][ad],ab)}else{var aa=(Z.formats[ab]["codes"][ad]||"").split(".");var ac=ae["get"+aa[0]]?ae["get"+aa[0]]():"";if(aa[1]){ac=I(ac,aa[1])}return ac}};Z.strftime=function(ag,ad,ac,ah){var ab="perl";var af=Z.regional.getLocale();if(ac&&Z.formats.hasOwnProperty(ac)){ab=ac}else{if(ac&&Z.regional.hasOwnProperty(ac)){af=ac}}if(ah&&Z.formats.hasOwnProperty(ah)){ab=ah}else{if(ah&&Z.regional.hasOwnProperty(ah)){af=ah}}if(i(ag)!="[object Object]"||ag._type!="jsDate"){ag=new Z(ag);ag.locale=af}if(!ad){ad=ag.formatString||Z.regional[af]["formatString"]}var aa=ad||"%Y-%m-%d",ai="",ae;while(aa.length>0){if(ae=aa.match(Z.formats[ab].codes.matcher)){ai+=aa.slice(0,ae.index);ai+=(ae[1]||"")+C(ag,ae[2],ab);aa=aa.slice(ae.index+ae[0].length)}else{ai+=aa;aa=""}}return ai};Z.formats={ISO:"%Y-%m-%dT%H:%M:%S.%N%G",SQL:"%Y-%m-%d %H:%M:%S"};Z.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","%":"%"}};Z.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","%":"%"}};Z.createDate=function(ac){if(ac==null){return new Date()}if(ac instanceof Date){return ac}if(typeof ac=="number"){return new Date(ac)}var ah=String(ac).replace(/^\s*(.+)\s*$/g,"$1");ah=ah.replace(/^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,4})/,"$1/$2/$3");ah=ah.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{4})/i,"$1 $2 $3");var ag=ah.match(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i);if(ag&&ag.length>3){var al=parseFloat(ag[3]);var af=Z.config.defaultCentury+al;af=String(af);ah=ah.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i,ag[1]+" "+ag[2]+" "+af)}ag=ah.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})[^0-9]/);function ak(ap,ao){var av=parseFloat(ao[1]);var au=parseFloat(ao[2]);var at=parseFloat(ao[3]);var ar=Z.config.defaultCentury;var an,am,aw,aq;if(av>31){am=at;aw=au;an=ar+av}else{am=au;aw=av;an=ar+at}aq=aw+"/"+am+"/"+an;return ap.replace(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})/,aq)}if(ag&&ag.length>3){ah=ak(ah,ag)}var ag=ah.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})$/);if(ag&&ag.length>3){ah=ak(ah,ag)}var ae=0;var ab=Z.matchers.length;var aj,aa,ai=ah,ad;while(ae<ab){aa=Date.parse(ai);if(!isNaN(aa)){return new Date(aa)}aj=Z.matchers[ae];if(typeof aj=="function"){ad=aj.call(Z,ai);if(ad instanceof Date){return ad}}else{ai=ah.replace(aj[0],aj[1])}ae++}return NaN};Z.daysInMonth=function(aa,ab){if(ab==2){return new Date(aa,1,29).getDate()==29?29:28}return[q,31,q,31,30,31,30,31,31,30,31,30,31][ab]};Z.matchers=[[/(3[01]|[0-2]\d)\s*\.\s*(1[0-2]|0\d)\s*\.\s*([1-9]\d{3})/,"$2/$1/$3"],[/([1-9]\d{3})\s*-\s*(1[0-2]|0\d)\s*-\s*(3[01]|[0-2]\d)/,"$2/$3/$1"],function(ad){var ab=ad.match(/^(?:(.+)\s+)?([012]?\d)(?:\s*\:\s*(\d\d))?(?:\s*\:\s*(\d\d(\.\d*)?))?\s*(am|pm)?\s*$/i);if(ab){if(ab[1]){var ac=this.createDate(ab[1]);if(isNaN(ac)){return}}else{var ac=new Date();ac.setMilliseconds(0)}var aa=parseFloat(ab[2]);if(ab[6]){aa=ab[6].toLowerCase()=="am"?(aa==12?0:aa):(aa==12?12:aa+12)}ac.setHours(aa,parseInt(ab[3]||0,10),parseInt(ab[4]||0,10),((parseFloat(ab[5]||0))||0)*1000);return ac}else{return ad}},function(ad){var ab=ad.match(/^(?:(.+))[T|\s+]([012]\d)(?:\:(\d\d))(?:\:(\d\d))(?:\.\d+)([\+\-]\d\d\:\d\d)$/i);if(ab){if(ab[1]){var ac=this.createDate(ab[1]);if(isNaN(ac)){return}}else{var ac=new Date();ac.setMilliseconds(0)}var aa=parseFloat(ab[2]);ac.setHours(aa,parseInt(ab[3],10),parseInt(ab[4],10),parseFloat(ab[5])*1000);return ac}else{return ad}},function(ae){var ac=ae.match(/^([0-3]?\d)\s*[-\/.\s]{1}\s*([a-zA-Z]{3,9})\s*[-\/.\s]{1}\s*([0-3]?\d)$/);if(ac){var ad=new Date();var af=Z.config.defaultCentury;var ah=parseFloat(ac[1]);var ag=parseFloat(ac[3]);var ab,aa,ai;if(ah>31){aa=ag;ab=af+ah}else{aa=ah;ab=af+ag}var ai=V(ac[2],Z.regional[Z.regional.getLocale()]["monthNamesShort"]);if(ai==-1){ai=V(ac[2],Z.regional[Z.regional.getLocale()]["monthNames"])}ad.setFullYear(ab,ai,aa);ad.setHours(0,0,0,0);return ad}else{return ae}}];function V(ac,ad){if(ad.indexOf){return ad.indexOf(ac)}for(var aa=0,ab=ad.length;aa<ab;aa++){if(ad[aa]===ac){return aa}}return -1}function i(aa){if(aa===null){return"[object Null]"}return Object.prototype.toString.call(aa)}G.jsDate=Z;G.jqplot.sprintf=function(){function ag(am,ai,aj,al){var ak=(am.length>=ai)?"":Array(1+ai-am.length>>>0).join(aj);return al?am+ak:ak+am}function ad(ak){var aj=new String(ak);for(var ai=10;ai>0;ai--){if(aj==(aj=aj.replace(/^(\d+)(\d{3})/,"$1"+G.jqplot.sprintf.thousandsSeparator+"$2"))){break}}return aj}function ac(an,am,ap,ak,al,aj){var ao=ak-an.length;if(ao>0){var ai=" ";if(aj){ai=" "}if(ap||!al){an=ag(an,ak,ai,ap)}else{an=an.slice(0,am.length)+ag("",ao,"0",true)+an.slice(am.length)}}return an}function ah(aq,aj,ao,ak,ai,an,ap,am){var al=aq>>>0;ao=ao&&al&&{"2":"0b","8":"0","16":"0x"}[aj]||"";aq=ao+ag(al.toString(aj),an||0,"0",false);return ac(aq,ao,ak,ai,ap,am)}function aa(am,an,ak,ai,al,aj){if(ai!=null){am=am.slice(0,ai)}return ac(am,"",an,ak,al,aj)}var ab=arguments,ae=0,af=ab[ae++];return af.replace(G.jqplot.sprintf.regex,function(aE,ap,aq,au,aG,aB,an){if(aE=="%%"){return"%"}var av=false,ar="",at=false,aD=false,ao=false,am=false;for(var aA=0;aq&&aA<aq.length;aA++){switch(aq.charAt(aA)){case" ":ar=" ";break;case"+":ar="+";break;case"-":av=true;break;case"0":at=true;break;case"#":aD=true;break;case"&":ao=true;break;case"'":am=true;break}}if(!au){au=0}else{if(au=="*"){au=+ab[ae++]}else{if(au.charAt(0)=="*"){au=+ab[au.slice(1,-1)]}else{au=+au}}}if(au<0){au=-au;av=true}if(!isFinite(au)){throw new Error("$.jqplot.sprintf: (minimum-)width must be finite")}if(!aB){aB="fFeE".indexOf(an)>-1?6:(an=="d")?0:void (0)}else{if(aB=="*"){aB=+ab[ae++]}else{if(aB.charAt(0)=="*"){aB=+ab[aB.slice(1,-1)]}else{aB=+aB}}}var ax=ap?ab[ap.slice(0,-1)]:ab[ae++];switch(an){case"s":if(ax==null){return""}return aa(String(ax),av,au,aB,at,ao);case"c":return aa(String.fromCharCode(+ax),av,au,aB,at,ao);case"b":return ah(ax,2,aD,av,au,aB,at,ao);case"o":return ah(ax,8,aD,av,au,aB,at,ao);case"x":return ah(ax,16,aD,av,au,aB,at,ao);case"X":return ah(ax,16,aD,av,au,aB,at,ao).toUpperCase();case"u":return ah(ax,10,aD,av,au,aB,at,ao);case"i":var ak=parseInt(+ax,10);if(isNaN(ak)){return""}var az=ak<0?"-":ar;var aC=am?ad(String(Math.abs(ak))):String(Math.abs(ak));ax=az+ag(aC,aB,"0",false);return ac(ax,az,av,au,at,ao);case"d":var ak=Math.round(+ax);if(isNaN(ak)){return""}var az=ak<0?"-":ar;var aC=am?ad(String(Math.abs(ak))):String(Math.abs(ak));ax=az+ag(aC,aB,"0",false);return ac(ax,az,av,au,at,ao);case"e":case"E":case"f":case"F":case"g":case"G":var ak=+ax;if(isNaN(ak)){return""}var az=ak<0?"-":ar;var al=["toExponential","toFixed","toPrecision"]["efg".indexOf(an.toLowerCase())];var aF=["toString","toUpperCase"]["eEfFgG".indexOf(an)%2];var aC=Math.abs(ak)[al](aB);aC=am?ad(aC):aC;ax=az+aC;return ac(ax,az,av,au,at,ao)[aF]();case"p":case"P":var ak=+ax;if(isNaN(ak)){return""}var az=ak<0?"-":ar;var aw=String(Number(Math.abs(ak)).toExponential()).split(/e|E/);var aj=(aw[0].indexOf(".")!=-1)?aw[0].length-1:aw[0].length;var ay=(aw[1]<0)?-aw[1]-1:0;if(Math.abs(ak)<1){if(aj+ay<=aB){ax=az+Math.abs(ak).toPrecision(aj)}else{if(aj<=aB-1){ax=az+Math.abs(ak).toExponential(aj-1)}else{ax=az+Math.abs(ak).toExponential(aB-1)}}}else{var ai=(aj<=aB)?aj:aB;ax=az+Math.abs(ak).toPrecision(ai)}var aF=["toString","toUpperCase"]["pP".indexOf(an)%2];return ac(ax,az,av,au,at,ao)[aF]();case"n":return"";default:return aE}})};G.jqplot.sprintf.thousandsSeparator=",";G.jqplot.sprintf.regex=/%%|%(\d+\$)?([-+#0&\' ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([nAscboxXuidfegpEGP])/g;G.jqplot.getSignificantFigures=function(ae){var ag=String(Number(Math.abs(ae)).toExponential()).split(/e|E/);var af=(ag[0].indexOf(".")!=-1)?ag[0].length-1:ag[0].length;var ab=(ag[1]<0)?-ag[1]-1:0;var aa=parseInt(ag[1]);var ac=(aa+1>0)?aa+1:0;var ad=(af<=ac)?0:af-aa-1;return{significantDigits:af,digitsLeft:ac,digitsRight:ad,zeros:ab,exponent:aa}};G.jqplot.getPrecision=function(ab){var aa=G.jqplot.getSignificantFigures(ab);var ac=aa[1]-1-parseInt(aa[0][1]);return ac}})(jQuery); \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/js/jqplot/plugins/jqplot.pieRenderer.min.js b/wp-content/plugins/wp-piwik/js/jqplot/plugins/jqplot.pieRenderer.min.js index 5b96e3775c19163dc4df725c20662bd4cc598d5a..7932d72fda97aa2ea7af6a7e0e3d2fb3e1a7a753 100644 --- a/wp-content/plugins/wp-piwik/js/jqplot/plugins/jqplot.pieRenderer.min.js +++ b/wp-content/plugins/wp-piwik/js/jqplot/plugins/jqplot.pieRenderer.min.js @@ -1,14 +1,57 @@ /** - * Copyright (c) 2009 Chris Leonello + * jqPlot + * Pure JavaScript plotting plugin using jQuery + * + * Version: 1.0.0b2_r947 + * + * Copyright (c) 2009-2011 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 + * 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 dot leonello at gmail dot com or see http://www.jqplot.com/info.php . + * chris at jqplot dot com or see http://www.jqplot.com/info.php . * * If you are feeling kind and generous, consider supporting the project by * making a donation at: http://www.jqplot.com/donate.php . + * + * sprintf functions contained in jqplot.sprintf.js by Ash Searle: + * + * version 2007.04.27 + * author Ash Searle + * http://hexmen.com/blog/2007/03/printf-sprintf/ + * http://hexmen.com/js/sprintf.js + * The author (Ash Searle) has placed this code in the public domain: + * "This code is unrestricted: you are free to use it however you like." + * + * included jsDate library by Chris Leonello: + * + * Copyright (c) 2010-2011 Chris Leonello + * + * jsDate is currently available for use in all personal or commercial projects + * under both the MIT and GPL version 2.0 licenses. This means that you can + * choose the license that best suits your project and use it accordingly. + * + * jsDate borrows many concepts and ideas from the Date Instance + * Methods by Ken Snyder along with some parts of Ken's actual code. + * + * Ken's origianl Date Instance Methods and copyright notice: + * + * Ken Snyder (ken d snyder at gmail dot com) + * 2008-09-10 + * version 2.0.2 (http://kendsnyder.com/sandbox/date/) + * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) + * + * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. + * Larry has generously given permission to adapt his code for inclusion + * into jqPlot. + * + * Larry's original code can be found here: + * + * https://github.com/lsiden/export-jqplot-to-png + * + * */ -(function(b){b.jqplot.PieRenderer=function(){b.jqplot.LineRenderer.call(this)};b.jqplot.PieRenderer.prototype=new b.jqplot.LineRenderer();b.jqplot.PieRenderer.prototype.constructor=b.jqplot.PieRenderer;b.jqplot.PieRenderer.prototype.init=function(d){this.diameter=null;this.padding=20;this.sliceMargin=0;this.fill=true;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=5;this.tickRenderer=b.jqplot.PieTickRenderer;b.extend(true,this,d);if(this.diameter!=null){this.diameter=this.diameter-this.sliceMargin}this._diameter=null};b.jqplot.PieRenderer.prototype.setGridData=function(d){};b.jqplot.PieRenderer.prototype.makeGridData=function(g,h){var d=[];var j=[];for(var f=0;f<g.length;f++){d.push(g[f][1]);j.push([g[f][0]]);if(f>0){d[f]+=d[f-1]}}var e=Math.PI*2/d[d.length-1];for(var f=0;f<d.length;f++){j[f][1]=d[f]*e}return j};b.jqplot.PieRenderer.prototype.drawSlice=function(n,l,k,f,h){var d=this._diameter/2;var m=this.fill;var j=this.lineWidth;n.save();n.translate(this.sliceMargin*Math.cos((l+k)/2),this.sliceMargin*Math.sin((l+k)/2));if(h){for(var g=0;g<this.shadowDepth;g++){n.save();n.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));e()}}else{e()}function e(){if(k>6.282){k=6.282;if(l>k){l=6.281}}n.beginPath();n.moveTo(0,0);n.fillStyle=f;n.strokeStyle=f;n.lineWidth=j;n.arc(0,0,d,l,k,false);n.closePath();if(m){n.fill()}else{n.stroke()}}if(h){for(var g=0;g<this.shadowDepth;g++){n.restore()}}n.restore()};b.jqplot.PieRenderer.prototype.draw=function(v,B,k){var y;var s=(k!=undefined)?k:{};var g=0;var f=0;var l=1;var e=new this.colorGenerator(this.seriesColors);if(k.legendInfo){var q=k.legendInfo;switch(q.location){case"nw":g=q.width+q.xoffset;break;case"w":g=q.width+q.xoffset;break;case"sw":g=q.width+q.xoffset;break;case"ne":g=q.width+q.xoffset;l=-1;break;case"e":g=q.width+q.xoffset;l=-1;break;case"se":g=q.width+q.xoffset;l=-1;break;case"n":f=q.height+q.yoffset;break;case"s":f=q.height+q.yoffset;l=-1;break;default:break}}var n=(s.shadow!=undefined)?s.shadow:this.shadow;var C=(s.showLine!=undefined)?s.showLine:this.showLine;var x=(s.fill!=undefined)?s.fill:this.fill;var j=v.canvas.width;var p=v.canvas.height;var o=j-g-2*this.padding;var z=p-f-2*this.padding;var A=Math.min(o,z);this._diameter=this.diameter||A-this.sliceMargin;var t=this._diameter/2;v.save();v.translate((j-l*g)/2+l*g,(p-l*f)/2+l*f);if(this.shadow){var u="rgba(0,0,0,"+this.shadowAlpha+")";for(var y=0;y<B.length;y++){var m=(y==0)?0:B[y-1][1];this.renderer.drawSlice.call(this,v,m,B[y][1],u,true)}}for(var y=0;y<B.length;y++){var m=(y==0)?0:B[y-1][1];this.renderer.drawSlice.call(this,v,m,B[y][1],e.next())}v.restore()};b.jqplot.PieAxisRenderer=function(){b.jqplot.LinearAxisRenderer.call(this)};b.jqplot.PieAxisRenderer.prototype=new b.jqplot.LinearAxisRenderer();b.jqplot.PieAxisRenderer.prototype.constructor=b.jqplot.PieAxisRenderer;b.jqplot.PieAxisRenderer.prototype.init=function(d){this.tickRenderer=b.jqplot.PieTickRenderer;b.extend(true,this,d);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};b.jqplot.PieLegendRenderer=function(){b.jqplot.TableLegendRenderer.call(this)};b.jqplot.PieLegendRenderer.prototype=new b.jqplot.TableLegendRenderer();b.jqplot.PieLegendRenderer.prototype.constructor=b.jqplot.PieLegendRenderer;b.jqplot.PieLegendRenderer.prototype.draw=function(){var k=this;if(this.show){var f=this._series;var m="position:absolute;";m+=(this.background)?"background:"+this.background+";":"";m+=(this.border)?"border:"+this.border+";":"";m+=(this.fontSize)?"font-size:"+this.fontSize+";":"";m+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";m+=(this.textColor)?"color:"+this.textColor+";":"";this._elem=b('<table class="jqplot-table-legend" style="'+m+'"></table>');var d=false;var l=f[0];var h=new l.colorGenerator(l.seriesColors);if(l.show){var j=l.data;for(var g=0;g<j.length;g++){var e=j[g][0].toString();if(e){this.renderer.addrow.call(this,e,h.next(),d);d=true}}}}return this._elem};function a(h,g,e){e=e||{};e.axesDefaults=e.axesDefaults||{};e.legend=e.legend||{};e.seriesDefaults=e.seriesDefaults||{};var d=false;if(e.seriesDefaults.renderer==b.jqplot.PieRenderer){d=true}else{if(e.series){for(var f=0;f<e.series.length;f++){if(e.series[f].renderer==b.jqplot.PieRenderer){d=true}}}}if(d){e.axesDefaults.renderer=b.jqplot.PieAxisRenderer;e.legend.renderer=b.jqplot.PieLegendRenderer;e.legend.preDraw=true}}function c(d){for(var e=0;e<this.series.length;e++){this.series[e].seriesColors=this.seriesColors;this.series[e].colorGenerator=this.colorGenerator}}b.jqplot.preInitHooks.push(a);b.jqplot.postParseOptionsHooks.push(c);b.jqplot.PieTickRenderer=function(){b.jqplot.AxisTickRenderer.call(this)};b.jqplot.PieTickRenderer.prototype=new b.jqplot.AxisTickRenderer();b.jqplot.PieTickRenderer.prototype.constructor=b.jqplot.PieTickRenderer})(jQuery); \ No newline at end of file +(function(e){e.jqplot.PieRenderer=function(){e.jqplot.LineRenderer.call(this)};e.jqplot.PieRenderer.prototype=new e.jqplot.LineRenderer();e.jqplot.PieRenderer.prototype.constructor=e.jqplot.PieRenderer;e.jqplot.PieRenderer.prototype.init=function(q,u){this.diameter=null;this.padding=20;this.sliceMargin=0;this.fill=true;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=5;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.dataLabels="percent";this.showDataLabels=false;this.dataLabelFormatString=null;this.dataLabelThreshold=3;this.dataLabelPositionFactor=0.52;this.dataLabelNudge=2;this.dataLabelCenterOn=true;this.startAngle=0;this.tickRenderer=e.jqplot.PieTickRenderer;this._drawData=true;this._type="pie";if(q.highlightMouseDown&&q.highlightMouseOver==null){q.highlightMouseOver=false}e.extend(true,this,q);if(this.sliceMargin<0){this.sliceMargin=0}this._diameter=null;this._radius=null;this._sliceAngles=[];this._highlightedPoint=null;if(this.highlightColors.length==0){for(var s=0;s<this.seriesColors.length;s++){var r=e.jqplot.getColorComponents(this.seriesColors[s]);var o=[r[0],r[1],r[2]];var t=o[0]+o[1]+o[2];for(var p=0;p<3;p++){o[p]=(t>570)?o[p]*0.8:o[p]+0.3*(255-o[p]);o[p]=parseInt(o[p],10)}this.highlightColors.push("rgb("+o[0]+","+o[1]+","+o[2]+")")}}this.highlightColorGenerator=new e.jqplot.ColorGenerator(this.highlightColors);u.postParseOptionsHooks.addOnce(m);u.postInitHooks.addOnce(g);u.eventListenerHooks.addOnce("jqplotMouseMove",b);u.eventListenerHooks.addOnce("jqplotMouseDown",a);u.eventListenerHooks.addOnce("jqplotMouseUp",l);u.eventListenerHooks.addOnce("jqplotClick",f);u.eventListenerHooks.addOnce("jqplotRightClick",n);u.postDrawHooks.addOnce(i)};e.jqplot.PieRenderer.prototype.setGridData=function(t){var p=[];var u=[];var o=this.startAngle/180*Math.PI;var s=0;this._drawData=false;for(var r=0;r<this.data.length;r++){if(this.data[r][1]!=0){this._drawData=true}p.push(this.data[r][1]);u.push([this.data[r][0]]);if(r>0){p[r]+=p[r-1]}s+=this.data[r][1]}var q=Math.PI*2/p[p.length-1];for(var r=0;r<p.length;r++){u[r][1]=p[r]*q;u[r][2]=this.data[r][1]/s}this.gridData=u};e.jqplot.PieRenderer.prototype.makeGridData=function(t,u){var p=[];var v=[];var s=0;var o=this.startAngle/180*Math.PI;this._drawData=false;for(var r=0;r<t.length;r++){if(this.data[r][1]!=0){this._drawData=true}p.push(t[r][1]);v.push([t[r][0]]);if(r>0){p[r]+=p[r-1]}s+=t[r][1]}var q=Math.PI*2/p[p.length-1];for(var r=0;r<p.length;r++){v[r][1]=p[r]*q;v[r][2]=t[r][1]/s}return v};function h(o){return Math.sin((o-(o-Math.PI)/8/Math.PI)/2)}function j(u,t,o,v,r){var w=0;var q=t-u;var s=Math.abs(q);var p=o;if(v==false){p+=r}if(p>0&&s>0.01&&s<6.282){w=parseFloat(p)/2/h(q)}return w}e.jqplot.PieRenderer.prototype.drawSlice=function(B,z,y,u,w){if(this._drawData){var p=this._radius;var A=this.fill;var x=this.lineWidth;var s=this.sliceMargin;if(this.fill==false){s+=this.lineWidth}B.save();B.translate(this._center[0],this._center[1]);var D=j(z,y,this.sliceMargin,this.fill,this.lineWidth);var o=D*Math.cos((z+y)/2);var C=D*Math.sin((z+y)/2);if((y-z)<=Math.PI){p-=D}else{p+=D}B.translate(o,C);if(w){for(var v=0,t=this.shadowDepth;v<t;v++){B.save();B.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));q(p)}for(var v=0,t=this.shadowDepth;v<t;v++){B.restore()}}else{q(p)}B.restore()}function q(r){if(y>6.282+this.startAngle){y=6.282+this.startAngle;if(z>y){z=6.281+this.startAngle}}if(z>=y){return}B.beginPath();B.fillStyle=u;B.strokeStyle=u;B.lineWidth=x;B.arc(0,0,r,z,y,false);B.lineTo(0,0);B.closePath();if(A){B.fill()}else{B.stroke()}}};e.jqplot.PieRenderer.prototype.draw=function(B,z,E,o){var W;var H=(E!=undefined)?E:{};var t=0;var s=0;var N=1;var L=new e.jqplot.ColorGenerator(this.seriesColors);if(E.legendInfo&&E.legendInfo.placement=="insideGrid"){var J=E.legendInfo;switch(J.location){case"nw":t=J.width+J.xoffset;break;case"w":t=J.width+J.xoffset;break;case"sw":t=J.width+J.xoffset;break;case"ne":t=J.width+J.xoffset;N=-1;break;case"e":t=J.width+J.xoffset;N=-1;break;case"se":t=J.width+J.xoffset;N=-1;break;case"n":s=J.height+J.yoffset;break;case"s":s=J.height+J.yoffset;N=-1;break;default:break}}var K=(H.shadow!=undefined)?H.shadow:this.shadow;var A=(H.fill!=undefined)?H.fill:this.fill;var C=B.canvas.width;var I=B.canvas.height;var Q=C-t-2*this.padding;var X=I-s-2*this.padding;var M=Math.min(Q,X);var Y=M;this._sliceAngles=[];var v=this.sliceMargin;if(this.fill==false){v+=this.lineWidth}var q;var G=0;var R,aa,Z,ab;var D=this.startAngle/180*Math.PI;for(var W=0,V=z.length;W<V;W++){aa=(W==0)?D:z[W-1][1]+D;Z=z[W][1]+D;this._sliceAngles.push([aa,Z]);q=j(aa,Z,this.sliceMargin,this.fill,this.lineWidth);if(Math.abs(Z-aa)>Math.PI){G=Math.max(q,G)}}if(this.diameter!=null&&this.diameter>0){this._diameter=this.diameter-2*G}else{this._diameter=Y-2*G}if(this._diameter<6){e.jqplot.log("Diameter of pie too small, not rendering.");return}var S=this._radius=this._diameter/2;this._center=[(C-N*t)/2+N*t+G*Math.cos(D),(I-N*s)/2+N*s+G*Math.sin(D)];if(this.shadow){for(var W=0,V=z.length;W<V;W++){ab="rgba(0,0,0,"+this.shadowAlpha+")";this.renderer.drawSlice.call(this,B,this._sliceAngles[W][0],this._sliceAngles[W][1],ab,true)}}for(var W=0;W<z.length;W++){this.renderer.drawSlice.call(this,B,this._sliceAngles[W][0],this._sliceAngles[W][1],L.next(),false);if(this.showDataLabels&&z[W][2]*100>=this.dataLabelThreshold){var F,U=(this._sliceAngles[W][0]+this._sliceAngles[W][1])/2,T;if(this.dataLabels=="label"){F=this.dataLabelFormatString||"%s";T=e.jqplot.sprintf(F,z[W][0])}else{if(this.dataLabels=="value"){F=this.dataLabelFormatString||"%d";T=e.jqplot.sprintf(F,this.data[W][1])}else{if(this.dataLabels=="percent"){F=this.dataLabelFormatString||"%d%%";T=e.jqplot.sprintf(F,z[W][2]*100)}else{if(this.dataLabels.constructor==Array){F=this.dataLabelFormatString||"%s";T=e.jqplot.sprintf(F,this.dataLabels[W])}}}}var p=(this._radius)*this.dataLabelPositionFactor+this.sliceMargin+this.dataLabelNudge;var P=this._center[0]+Math.cos(U)*p+this.canvas._offsets.left;var O=this._center[1]+Math.sin(U)*p+this.canvas._offsets.top;var u=e('<div class="jqplot-pie-series jqplot-data-label" style="position:absolute;">'+T+"</div>").insertBefore(o.eventCanvas._elem);if(this.dataLabelCenterOn){P-=u.width()/2;O-=u.height()/2}else{P-=u.width()*Math.sin(U/2);O-=u.height()/2}P=Math.round(P);O=Math.round(O);u.css({left:P,top:O})}}};e.jqplot.PieAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.PieAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.PieAxisRenderer.prototype.constructor=e.jqplot.PieAxisRenderer;e.jqplot.PieAxisRenderer.prototype.init=function(o){this.tickRenderer=e.jqplot.PieTickRenderer;e.extend(true,this,o);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};e.jqplot.PieLegendRenderer=function(){e.jqplot.TableLegendRenderer.call(this)};e.jqplot.PieLegendRenderer.prototype=new e.jqplot.TableLegendRenderer();e.jqplot.PieLegendRenderer.prototype.constructor=e.jqplot.PieLegendRenderer;e.jqplot.PieLegendRenderer.prototype.init=function(o){this.numberRows=null;this.numberColumns=null;e.extend(true,this,o)};e.jqplot.PieLegendRenderer.prototype.draw=function(){var r=this;if(this.show){var B=this._series;this._elem=e(document.createElement("table"));this._elem.addClass("jqplot-table-legend");var E={position:"absolute"};if(this.background){E.background=this.background}if(this.border){E.border=this.border}if(this.fontSize){E.fontSize=this.fontSize}if(this.fontFamily){E.fontFamily=this.fontFamily}if(this.textColor){E.textColor=this.textColor}if(this.marginTop!=null){E.marginTop=this.marginTop}if(this.marginBottom!=null){E.marginBottom=this.marginBottom}if(this.marginLeft!=null){E.marginLeft=this.marginLeft}if(this.marginRight!=null){E.marginRight=this.marginRight}this._elem.css(E);var I=false,A=false,o,y;var C=B[0];var p=new e.jqplot.ColorGenerator(C.seriesColors);if(C.show){var J=C.data;if(this.numberRows){o=this.numberRows;if(!this.numberColumns){y=Math.ceil(J.length/o)}else{y=this.numberColumns}}else{if(this.numberColumns){y=this.numberColumns;o=Math.ceil(J.length/this.numberColumns)}else{o=J.length;y=1}}var H,G;var q,w,v;var x,z,F;var D=0;var u,t;for(H=0;H<o;H++){q=e(document.createElement("tr"));q.addClass("jqplot-table-legend");if(A){q.prependTo(this._elem)}else{q.appendTo(this._elem)}for(G=0;G<y;G++){if(D<J.length){x=this.labels[D]||J[D][0].toString();F=p.next();if(!A){if(H>0){I=true}else{I=false}}else{if(H==o-1){I=false}else{I=true}}z=(I)?this.rowSpacing:"0";w=e(document.createElement("td"));w.addClass("jqplot-table-legend jqplot-table-legend-swatch");w.css({textAlign:"center",paddingTop:z});u=e(document.createElement("div"));u.addClass("jqplot-table-legend-swatch-outline");t=e(document.createElement("div"));t.addClass("jqplot-table-legend-swatch");t.css({backgroundColor:F,borderColor:F});w.append(u.append(t));v=e(document.createElement("td"));v.addClass("jqplot-table-legend jqplot-table-legend-label");v.css("paddingTop",z);if(this.escapeHtml){v.text(x)}else{v.html(x)}if(A){v.prependTo(q);w.prependTo(q)}else{w.appendTo(q);v.appendTo(q)}I=true}D++}}}}return this._elem};e.jqplot.PieRenderer.prototype.handleMove=function(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];r.target.trigger("jqplotDataMouseOver",o);if(r.series[o[0]].highlightMouseOver&&!(o[0]==r.plugins.pieRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){r.target.trigger("jqplotDataHighlight",o);d(r,o[0],o[1])}}else{if(s==null){k(r)}}};function c(s,r,p){p=p||{};p.axesDefaults=p.axesDefaults||{};p.legend=p.legend||{};p.seriesDefaults=p.seriesDefaults||{};var o=false;if(p.seriesDefaults.renderer==e.jqplot.PieRenderer){o=true}else{if(p.series){for(var q=0;q<p.series.length;q++){if(p.series[q].renderer==e.jqplot.PieRenderer){o=true}}}}if(o){p.axesDefaults.renderer=e.jqplot.PieAxisRenderer;p.legend.renderer=e.jqplot.PieLegendRenderer;p.legend.preDraw=true;p.seriesDefaults.pointLabels={show:false}}}function g(r,q,o){for(var p=0;p<this.series.length;p++){if(this.series[p].renderer.constructor==e.jqplot.PieRenderer){if(this.series[p].highlightMouseOver){this.series[p].highlightMouseDown=false}}}}function m(o){for(var p=0;p<this.series.length;p++){this.series[p].seriesColors=this.seriesColors;this.series[p].colorGenerator=e.jqplot.colorGenerator}}function d(t,r,q){var p=t.series[r];var o=t.plugins.pieRenderer.highlightCanvas;o._ctx.clearRect(0,0,o._ctx.canvas.width,o._ctx.canvas.height);p._highlightedPoint=q;t.plugins.pieRenderer.highlightedSeriesIndex=r;p.renderer.drawSlice.call(p,o._ctx,p._sliceAngles[q][0],p._sliceAngles[q][1],p.highlightColorGenerator.get(q),false)}function k(q){var o=q.plugins.pieRenderer.highlightCanvas;o._ctx.clearRect(0,0,o._ctx.canvas.width,o._ctx.canvas.height);for(var p=0;p<q.series.length;p++){q.series[p]._highlightedPoint=null}q.plugins.pieRenderer.highlightedSeriesIndex=null;q.target.trigger("jqplotDataUnhighlight")}function b(s,r,v,u,t){if(u){var q=[u.seriesIndex,u.pointIndex,u.data];var p=jQuery.Event("jqplotDataMouseOver");p.pageX=s.pageX;p.pageY=s.pageY;t.target.trigger(p,q);if(t.series[q[0]].highlightMouseOver&&!(q[0]==t.plugins.pieRenderer.highlightedSeriesIndex&&q[1]==t.series[q[0]]._highlightedPoint)){var o=jQuery.Event("jqplotDataHighlight");o.pageX=s.pageX;o.pageY=s.pageY;t.target.trigger(o,q);d(t,q[0],q[1])}}else{if(u==null){k(t)}}}function a(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];if(s.series[p[0]].highlightMouseDown&&!(p[0]==s.plugins.pieRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var o=jQuery.Event("jqplotDataHighlight");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);d(s,p[0],p[1])}}else{if(t==null){k(s)}}}function l(q,p,t,s,r){var o=r.plugins.pieRenderer.highlightedSeriesIndex;if(o!=null&&r.series[o].highlightMouseDown){k(r)}}function f(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataClick");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}function n(s,r,v,u,t){if(u){var q=[u.seriesIndex,u.pointIndex,u.data];var o=t.plugins.pieRenderer.highlightedSeriesIndex;if(o!=null&&t.series[o].highlightMouseDown){k(t)}var p=jQuery.Event("jqplotDataRightClick");p.pageX=s.pageX;p.pageY=s.pageY;t.target.trigger(p,q)}}function i(){if(this.plugins.pieRenderer&&this.plugins.pieRenderer.highlightCanvas){this.plugins.pieRenderer.highlightCanvas.resetCanvas();this.plugins.pieRenderer.highlightCanvas=null}this.plugins.pieRenderer={highlightedSeriesIndex:null};this.plugins.pieRenderer.highlightCanvas=new e.jqplot.GenericCanvas();var p=e(this.targetId+" .jqplot-data-label");if(p.length){e(p[0]).before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-pieRenderer-highlight-canvas",this._plotDimensions,this))}else{this.eventCanvas._elem.before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-pieRenderer-highlight-canvas",this._plotDimensions,this))}var o=this.plugins.pieRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(q){k(q.data.plot)})}e.jqplot.preInitHooks.push(c);e.jqplot.PieTickRenderer=function(){e.jqplot.AxisTickRenderer.call(this)};e.jqplot.PieTickRenderer.prototype=new e.jqplot.AxisTickRenderer();e.jqplot.PieTickRenderer.prototype.constructor=e.jqplot.PieTickRenderer})(jQuery); \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/js/jqplot/plugins/jqplot.trendline.min.js b/wp-content/plugins/wp-piwik/js/jqplot/plugins/jqplot.trendline.min.js index ab75b39d93085f43ee5c789d25f277aff6ce82b3..c7c5089c1528da0899141812d6f5faff11b79215 100644 --- a/wp-content/plugins/wp-piwik/js/jqplot/plugins/jqplot.trendline.min.js +++ b/wp-content/plugins/wp-piwik/js/jqplot/plugins/jqplot.trendline.min.js @@ -1,14 +1,57 @@ /** - * Copyright (c) 2009 Chris Leonello + * jqPlot + * Pure JavaScript plotting plugin using jQuery + * + * Version: 1.0.0b2_r947 + * + * Copyright (c) 2009-2011 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 + * 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 dot leonello at gmail dot com or see http://www.jqplot.com/info.php . + * chris at jqplot dot com or see http://www.jqplot.com/info.php . * * If you are feeling kind and generous, consider supporting the project by * making a donation at: http://www.jqplot.com/donate.php . + * + * sprintf functions contained in jqplot.sprintf.js by Ash Searle: + * + * version 2007.04.27 + * author Ash Searle + * http://hexmen.com/blog/2007/03/printf-sprintf/ + * http://hexmen.com/js/sprintf.js + * The author (Ash Searle) has placed this code in the public domain: + * "This code is unrestricted: you are free to use it however you like." + * + * included jsDate library by Chris Leonello: + * + * Copyright (c) 2010-2011 Chris Leonello + * + * jsDate is currently available for use in all personal or commercial projects + * under both the MIT and GPL version 2.0 licenses. This means that you can + * choose the license that best suits your project and use it accordingly. + * + * jsDate borrows many concepts and ideas from the Date Instance + * Methods by Ken Snyder along with some parts of Ken's actual code. + * + * Ken's origianl Date Instance Methods and copyright notice: + * + * Ken Snyder (ken d snyder at gmail dot com) + * 2008-09-10 + * version 2.0.2 (http://kendsnyder.com/sandbox/date/) + * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) + * + * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. + * Larry has generously given permission to adapt his code for inclusion + * into jqPlot. + * + * Larry's original code can be found here: + * + * https://github.com/lsiden/export-jqplot-to-png + * + * */ -(function(f){f.jqplot.Trendline=function(){this.show=f.jqplot.config.enablePlugins;this.color="#666666";this.renderer=new f.jqplot.LineRenderer();this.rendererOptions={marker:{show:false}};this.label="";this.type="linear";this.shadow=true;this.markerRenderer={show:false};this.lineWidth=1.5;this.shadowAngle=45;this.shadowOffset=1;this.shadowAlpha=0.07;this.shadowDepth=3};f.jqplot.postParseSeriesOptionsHooks.push(e);f.jqplot.postDrawSeriesHooks.push(g);f.jqplot.addLegendRowHooks.push(a);function a(k){var i=k.trendline.label.toString();var j=null;if(this.renderer.constructor!=f.jqplot.PieRenderer&&k.trendline.show&&i){j={label:i,color:k.trendline.color}}return j}function e(j,i){if(this.renderer.constructor!=f.jqplot.PieRenderer){this.trendline=new f.jqplot.Trendline();i=i||{};f.extend(true,this.trendline,{color:this.color},j.trendline,i.trendline);this.trendline.renderer.init.call(this.trendline,null)}}function g(m,i){i=f.extend(true,{},this.trendline,i);if(i.show&&this.renderer.constructor!=f.jqplot.PieRenderer){var k;var l=i.data||this.data;k=c(l,this.trendline.type);var j=i.gridData||this.renderer.makeGridData.call(this,k.data);this.trendline.renderer.draw.call(this.trendline,m,j,{showLine:true,shadow:this.trendline.shadow})}}function b(w,v,n){var u=(n==null)?"linear":n;var s=w.length;var t;var z;var o=0;var m=0;var r=0;var q=0;var l=0;var j=[];var k=[];if(u=="linear"){k=w;j=v}else{if(u=="exp"||u=="exponential"){for(var p=0;p<v.length;p++){if(v[p]<=0){s--}else{k.push(w[p]);j.push(Math.log(v[p]))}}}}for(var p=0;p<s;p++){o=o+k[p];m=m+j[p];q=q+k[p]*j[p];r=r+k[p]*k[p];l=l+j[p]*j[p]}t=(s*q-o*m)/(s*r-o*o);z=(m-t*o)/s;return[t,z]}function h(k,j){var i;i=b(k,j,"linear");return[i[0],i[1]]}function d(o,m){var k;var i=o;var n=m;k=b(i,n,"exp");var l=Math.exp(k[0]);var j=Math.exp(k[1]);return[l,j]}function c(l,j){var p=(j==null)?"linear":j;var n;var o;var r=[];var q=[];var m=[];for(k=0;k<l.length;k++){if(l[k]!=null&&l[k][0]!=null&&l[k][1]!=null){r.push(l[k][0]);q.push(l[k][1])}}if(p=="linear"){n=h(r,q);for(var k=0;k<r.length;k++){o=n[0]*r[k]+n[1];m.push([r[k],o])}}else{if(p=="exp"||p=="exponential"){n=d(r,q);for(var k=0;k<r.length;k++){o=n[1]*Math.pow(n[0],r[k]);m.push([r[k],o])}}}return{data:m,slope:n[0],intercept:n[1]}}})(jQuery); \ No newline at end of file +(function(f){f.jqplot.Trendline=function(){this.show=f.jqplot.config.enablePlugins;this.color="#666666";this.renderer=new f.jqplot.LineRenderer();this.rendererOptions={marker:{show:false}};this.label="";this.type="linear";this.shadow=true;this.markerRenderer={show:false};this.lineWidth=1.5;this.shadowAngle=45;this.shadowOffset=1;this.shadowAlpha=0.07;this.shadowDepth=3;this.isTrendline=true};f.jqplot.postSeriesInitHooks.push(e);f.jqplot.postDrawSeriesHooks.push(g);f.jqplot.addLegendRowHooks.push(a);function a(k){var j=null;if(k.trendline&&k.trendline.show){var i=k.trendline.label.toString();if(i){j={label:i,color:k.trendline.color}}}return j}function e(m,k,j,i,l){if(this._type&&(this._type==="line"||this._type=="bar")){this.trendline=new f.jqplot.Trendline();i=i||{};f.extend(true,this.trendline,{color:this.color},j.trendline,i.trendline);this.trendline.renderer.init.call(this.trendline,null)}}function g(m,i){i=f.extend(true,{},this.trendline,i);if(this.trendline&&i.show){var k;var l=i.data||this.data;k=c(l,this.trendline.type);var j=i.gridData||this.renderer.makeGridData.call(this,k.data);this.trendline.renderer.draw.call(this.trendline,m,j,{showLine:true,shadow:this.trendline.shadow})}}function b(w,v,n){var u=(n==null)?"linear":n;var s=w.length;var t;var z;var o=0;var m=0;var r=0;var q=0;var l=0;var j=[];var k=[];if(u=="linear"){k=w;j=v}else{if(u=="exp"||u=="exponential"){for(var p=0;p<v.length;p++){if(v[p]<=0){s--}else{k.push(w[p]);j.push(Math.log(v[p]))}}}}for(var p=0;p<s;p++){o=o+k[p];m=m+j[p];q=q+k[p]*j[p];r=r+k[p]*k[p];l=l+j[p]*j[p]}t=(s*q-o*m)/(s*r-o*o);z=(m-t*o)/s;return[t,z]}function h(k,j){var i;i=b(k,j,"linear");return[i[0],i[1]]}function d(o,m){var k;var i=o;var n=m;k=b(i,n,"exp");var l=Math.exp(k[0]);var j=Math.exp(k[1]);return[l,j]}function c(l,j){var p=(j==null)?"linear":j;var n;var o;var r=[];var q=[];var m=[];for(k=0;k<l.length;k++){if(l[k]!=null&&l[k][0]!=null&&l[k][1]!=null){r.push(l[k][0]);q.push(l[k][1])}}if(p=="linear"){n=h(r,q);for(var k=0;k<r.length;k++){o=n[0]*r[k]+n[1];m.push([r[k],o])}}else{if(p=="exp"||p=="exponential"){n=d(r,q);for(var k=0;k<r.length;k++){o=n[1]*Math.pow(n[0],r[k]);m.push([r[k],o])}}}return{data:m,slope:n[0],intercept:n[1]}}})(jQuery); \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/js/jqplot/usage.txt b/wp-content/plugins/wp-piwik/js/jqplot/usage.txt index fbef501cb5abc0a6560b313162d72065f607c016..01f82d27776312704429b597e0a267ab52f3f0a1 100644 --- a/wp-content/plugins/wp-piwik/js/jqplot/usage.txt +++ b/wp-content/plugins/wp-piwik/js/jqplot/usage.txt @@ -15,12 +15,13 @@ Many more examples of dynamically rendered plots can be seen on the test and exa Include the Files: -jqPlot requires jQuery (tested with 1.3.2 or better). jQuery 1.3.2 is included in the distribution. +jqPlot requires jQuery (1.4+ required for certain features). jQuery is included in the distribution. To use jqPlot include jquery, the jqPlot jQuery plugin, jqPlot css file and optionally the excanvas -script for IE support in your web page: +script for IE support in your web page. Note, excanvas is required only for IE versions below 9. IE 9 includes +native support for the canvas element and does not require excanvas: -> <!--[if IE]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]--> -> <script language="javascript" type="text/javascript" src="jquery-1.3.2.min.js"></script> +> <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]--> +> <script language="javascript" type="text/javascript" src="jquery.min.js"></script> > <script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script> > <link rel="stylesheet" type="text/css" href="jquery.jqplot.css" /> @@ -66,10 +67,16 @@ after you include the jqPlot plugin. Here is how to include the log axis plugin > <link rel="stylesheet" type="text/css" href="jquery.jqplot.css" /> > <!--[if IE]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]--> -> <script language="javascript" type="text/javascript" src="jquery-1.3.2.min.js"></script> +> <script language="javascript" type="text/javascript" src="jquery.min.js"></script> > <script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script> > <script language="javascript" type="text/javascript" src="jqplot.logAxisRenderer.js"></script> +Important note: For jqplot builds r529 and above (0.9.7r529 and higher), you must explicitly +enable plugins via either the { show: true } plugin option to the plot or by using +the $.jqplot.config.enablePlugins = true; config options set on the page before plot creation. +Only plugins that can be immediately active upon loading are affected. This includes +non-renderer plugins like cursor, dragable, highlighter, and trendline. + Here is a the same $.jqplot call but with a log y axis: @@ -114,6 +121,6 @@ you would first include the plugin after jqPlot: Then you would create a chart like: -> $.jqplot('chartdiv', [[34.53, 56.32, 25.1, 18.6]], series:[{renderer:$.jqplot.BarRenderer}]); +> $.jqplot('chartdiv', [[34.53, 56.32, 25.1, 18.6]], {series:[{renderer:$.jqplot.BarRenderer}]}); Here the default LineRenderer is replaced by a BarRenderer to generate a bar graph for the first (an only) series. \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/js/jqplot/wp-piwik.jqplot.js b/wp-content/plugins/wp-piwik/js/jqplot/wp-piwik.jqplot.js index 555c5286bcc87e27e822a072a3a0924b72a7dc09..14a001f695bfe818ca10553bd0c7a58314aee722 100644 --- a/wp-content/plugins/wp-piwik/js/jqplot/wp-piwik.jqplot.js +++ b/wp-content/plugins/wp-piwik/js/jqplot/wp-piwik.jqplot.js @@ -1,41 +1,170 @@ /* Files combined for WP-Piwik. Get jqPlot at http://www.jqplot.com/ */ /** - * Copyright (c) 2009 Chris Leonello + * jqPlot + * Pure JavaScript plotting plugin using jQuery + * + * Version: 1.0.0b2_r947 + * + * Copyright (c) 2009-2011 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 + * 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 dot leonello at gmail dot com or see http://www.jqplot.com/info.php . + * chris at jqplot dot com or see http://www.jqplot.com/info.php . * * If you are feeling kind and generous, consider supporting the project by * making a donation at: http://www.jqplot.com/donate.php . + * + * sprintf functions contained in jqplot.sprintf.js by Ash Searle: + * + * version 2007.04.27 + * author Ash Searle + * http://hexmen.com/blog/2007/03/printf-sprintf/ + * http://hexmen.com/js/sprintf.js + * The author (Ash Searle) has placed this code in the public domain: + * "This code is unrestricted: you are free to use it however you like." + * + * included jsDate library by Chris Leonello: + * + * Copyright (c) 2010-2011 Chris Leonello + * + * jsDate is currently available for use in all personal or commercial projects + * under both the MIT and GPL version 2.0 licenses. This means that you can + * choose the license that best suits your project and use it accordingly. + * + * jsDate borrows many concepts and ideas from the Date Instance + * Methods by Ken Snyder along with some parts of Ken's actual code. + * + * Ken's origianl Date Instance Methods and copyright notice: + * + * Ken Snyder (ken d snyder at gmail dot com) + * 2008-09-10 + * version 2.0.2 (http://kendsnyder.com/sandbox/date/) + * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) + * + * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. + * Larry has generously given permission to adapt his code for inclusion + * into jqPlot. + * + * Larry's original code can be found here: + * + * https://github.com/lsiden/export-jqplot-to-png + * + * */ -(function(h){var c;h.jqplot=function(A,y,w){var x,v;if(y==null){throw"No data specified"}if(y.constructor==Array&&y.length==0||y[0].constructor!=Array){throw"Improper Data Array"}if(w==null){if(y instanceof Array){x=y;v=null}else{if(y.constructor==Object){x=null;v=y}}}else{x=y;v=w}var z=new n();z.init(A,x,v);z.draw();return z};h.jqplot.debug=1;h.jqplot.config={debug:1,enablePlugins:true,defaultHeight:300,defaultWidth:400};h.jqplot.enablePlugins=h.jqplot.config.enablePlugins;h.jqplot.preInitHooks=[];h.jqplot.postInitHooks=[];h.jqplot.preParseOptionsHooks=[];h.jqplot.postParseOptionsHooks=[];h.jqplot.preDrawHooks=[];h.jqplot.postDrawHooks=[];h.jqplot.preDrawSeriesHooks=[];h.jqplot.postDrawSeriesHooks=[];h.jqplot.preDrawLegendHooks=[];h.jqplot.addLegendRowHooks=[];h.jqplot.preSeriesInitHooks=[];h.jqplot.postSeriesInitHooks=[];h.jqplot.preParseSeriesOptionsHooks=[];h.jqplot.postParseSeriesOptionsHooks=[];h.jqplot.eventListenerHooks=[];h.jqplot.preDrawSeriesShadowHooks=[];h.jqplot.postDrawSeriesShadowHooks=[];h.jqplot.ElemContainer=function(){this._elem;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null}};h.jqplot.ElemContainer.prototype.getWidth=function(){if(this._elem){return this._elem.outerWidth(true)}else{return null}};h.jqplot.ElemContainer.prototype.getHeight=function(){if(this._elem){return this._elem.outerHeight(true)}else{return null}};h.jqplot.ElemContainer.prototype.getPosition=function(){if(this._elem){return this._elem.position()}else{return{top:null,left:null,bottom:null,right:null}}};h.jqplot.ElemContainer.prototype.getTop=function(){return this.getPosition().top};h.jqplot.ElemContainer.prototype.getLeft=function(){return this.getPosition().left};h.jqplot.ElemContainer.prototype.getBottom=function(){return this._elem.css("bottom")};h.jqplot.ElemContainer.prototype.getRight=function(){return this._elem.css("right")};function l(v){h.jqplot.ElemContainer.call(this);this.name=v;this._series=[];this.show=false;this.tickRenderer=h.jqplot.AxisTickRenderer;this.tickOptions={};this.labelRenderer=h.jqplot.AxisLabelRenderer;this.labelOptions={};this.label=null;this.showLabel=true;this.min=null;this.max=null;this.autoscale=false;this.pad=1.2;this.padMax=null;this.padMin=null;this.ticks=[];this.numberTicks;this.tickInterval;this.renderer=h.jqplot.LinearAxisRenderer;this.rendererOptions={};this.showTicks=true;this.showTickMarks=true;this.showMinorTicks=true;this.useSeriesColor=false;this.borderWidth=null;this.borderColor=null;this._dataBounds={min:null,max:null};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}l.prototype=new h.jqplot.ElemContainer();l.prototype.constructor=l;l.prototype.init=function(){this.renderer=new this.renderer();this.tickOptions.axis=this.name;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)};l.prototype.draw=function(v){return this.renderer.draw.call(this,v)};l.prototype.set=function(){this.renderer.set.call(this)};l.prototype.pack=function(w,v){if(this.show){this.renderer.pack.call(this,w,v)}if(this._min==null){this._min=this.min;this._max=this.max;this._tickInterval=this.tickInterval;this._numberTicks=this.numberTicks;this.__ticks=this._ticks}};l.prototype.reset=function(){this.renderer.reset.call(this)};l.prototype.resetScale=function(){this.min=null;this.max=null;this.numberTicks=null;this.tickInterval=null};function b(v){h.jqplot.ElemContainer.call(this);this.show=false;this.location="ne";this.xoffset=12;this.yoffset=12;this.border;this.background;this.textColor;this.fontFamily;this.fontSize;this.rowSpacing="0.5em";this.renderer=h.jqplot.TableLegendRenderer;this.rendererOptions={};this.preDraw=false;this.escapeHtml=false;this._series=[];h.extend(true,this,v)}b.prototype=new h.jqplot.ElemContainer();b.prototype.constructor=b;b.prototype.init=function(){this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions)};b.prototype.draw=function(w){for(var v=0;v<h.jqplot.preDrawLegendHooks.length;v++){h.jqplot.preDrawLegendHooks[v].call(this,w)}return this.renderer.draw.call(this,w)};b.prototype.pack=function(v){this.renderer.pack.call(this,v)};function k(v){h.jqplot.ElemContainer.call(this);this.text=v;this.show=true;this.fontFamily;this.fontSize;this.textAlign;this.textColor;this.renderer=h.jqplot.DivTitleRenderer;this.rendererOptions={}}k.prototype=new h.jqplot.ElemContainer();k.prototype.constructor=k;k.prototype.init=function(){this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions)};k.prototype.draw=function(v){return this.renderer.draw.call(this,v)};k.prototype.pack=function(){this.renderer.pack.call(this)};function o(){h.jqplot.ElemContainer.call(this);this.show=true;this.xaxis="xaxis";this._xaxis;this.yaxis="yaxis";this._yaxis;this.gridBorderWidth=2;this.renderer=h.jqplot.LineRenderer;this.rendererOptions={};this.data=[];this.gridData=[];this.label="";this.showLabel=true;this.color;this.lineWidth=2.5;this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.25;this.shadowDepth=3;this.shadowAlpha="0.1";this.breakOnNull=false;this.markerRenderer=h.jqplot.MarkerRenderer;this.markerOptions={};this.showLine=true;this.showMarker=true;this.index;this.fill=false;this.fillColor;this.fillAlpha;this.fillAndStroke=false;this.disableStack=false;this._stack=false;this.neighborThreshold=4;this.fillToZero=false;this.fillAxis="y";this.useNegativeColors=true;this._stackData=[];this._plotData=[];this._plotValues={x:[],y:[]};this._intervals={x:{},y:{}};this._prevPlotData=[];this._prevGridData=[];this._stackAxis="y";this._primaryAxis="_xaxis";this.canvas=new h.jqplot.GenericCanvas();this.shadowCanvas=new h.jqplot.GenericCanvas();this.plugins={};this._sumy=0;this._sumx=0}o.prototype=new h.jqplot.ElemContainer();o.prototype.constructor=o;o.prototype.init=function(w,B,y){this.index=w;this.gridBorderWidth=B;var A=this.data;for(var x=0;x<A.length;x++){if(!this.breakOnNull){if(A[x]==null||A[x][0]==null||A[x][1]==null){A.splice(x,1);continue}}else{if(A[x]==null||A[x][0]==null||A[x][1]==null){var z}}}if(!this.fillColor){this.fillColor=this.color}if(this.fillAlpha){var v=h.jqplot.normalize2rgb(this.fillColor);var v=h.jqplot.getColorComponents(v);this.fillColor="rgba("+v[0]+","+v[1]+","+v[2]+","+this.fillAlpha+")"}this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions,y);this.markerRenderer=new this.markerRenderer();if(!this.markerOptions.color){this.markerOptions.color=this.color}if(this.markerOptions.show==null){this.markerOptions.show=this.showMarker}this.markerRenderer.init(this.markerOptions)};o.prototype.draw=function(B,y,A){var w=(y==c)?{}:y;B=(B==c)?this.canvas._ctx:B;for(var v=0;v<h.jqplot.preDrawSeriesHooks.length;v++){h.jqplot.preDrawSeriesHooks[v].call(this,B,w)}if(this.show){this.renderer.setGridData.call(this,A);if(!w.preventJqPlotSeriesDrawTrigger){h(B.canvas).trigger("jqplotSeriesDraw",[this.data,this.gridData])}var z=[];if(w.data){z=w.data}else{if(!this._stack){z=this.data}else{z=this._plotData}}var x=w.gridData||this.renderer.makeGridData.call(this,z,A);this.renderer.draw.call(this,B,x,w)}for(var v=0;v<h.jqplot.postDrawSeriesHooks.length;v++){h.jqplot.postDrawSeriesHooks[v].call(this,B,w)}};o.prototype.drawShadow=function(B,y,A){var w=(y==c)?{}:y;B=(B==c)?this.shadowCanvas._ctx:B;for(var v=0;v<h.jqplot.preDrawSeriesShadowHooks.length;v++){h.jqplot.preDrawSeriesShadowHooks[v].call(this,B,w)}if(this.shadow){this.renderer.setGridData.call(this,A);var z=[];if(w.data){z=w.data}else{if(!this._stack){z=this.data}else{z=this._plotData}}var x=w.gridData||this.renderer.makeGridData.call(this,z,A);this.renderer.drawShadow.call(this,B,x,w)}for(var v=0;v<h.jqplot.postDrawSeriesShadowHooks.length;v++){h.jqplot.postDrawSeriesShadowHooks[v].call(this,B,w)}};function g(){h.jqplot.ElemContainer.call(this);this.drawGridlines=true;this.gridLineColor="#cccccc";this.gridLineWidth=1;this.background="#fffdf6";this.borderColor="#999999";this.borderWidth=2;this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.5;this.shadowWidth=3;this.shadowDepth=3;this.shadowAlpha="0.07";this._left;this._top;this._right;this._bottom;this._width;this._height;this._axes=[];this.renderer=h.jqplot.CanvasGridRenderer;this.rendererOptions={};this._offsets={top:null,bottom:null,left:null,right:null}}g.prototype=new h.jqplot.ElemContainer();g.prototype.constructor=g;g.prototype.init=function(){this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions)};g.prototype.createElement=function(v){this._offsets=v;return this.renderer.createElement.call(this)};g.prototype.draw=function(){this.renderer.draw.call(this)};h.jqplot.GenericCanvas=function(){h.jqplot.ElemContainer.call(this);this._ctx};h.jqplot.GenericCanvas.prototype=new h.jqplot.ElemContainer();h.jqplot.GenericCanvas.prototype.constructor=h.jqplot.GenericCanvas;h.jqplot.GenericCanvas.prototype.createElement=function(z,x,w){this._offsets=z;var v="jqplot";if(x!=c){v=x}var y=document.createElement("canvas");if(w!=c){this._plotDimensions=w}y.width=this._plotDimensions.width-this._offsets.left-this._offsets.right;y.height=this._plotDimensions.height-this._offsets.top-this._offsets.bottom;this._elem=h(y);this._elem.addClass(v);this._elem.css({position:"absolute",left:this._offsets.left,top:this._offsets.top});if(h.browser.msie){window.G_vmlCanvasManager.init_(document)}if(h.browser.msie){y=window.G_vmlCanvasManager.initElement(y)}return this._elem};h.jqplot.GenericCanvas.prototype.setContext=function(){this._ctx=this._elem.get(0).getContext("2d");return this._ctx};function n(){this.data=[];this.targetId=null;this.target=null;this.defaults={axesDefaults:{},axes:{xaxis:{},yaxis:{},x2axis:{},y2axis:{},y3axis:{},y4axis:{},y5axis:{},y6axis:{},y7axis:{},y8axis:{},y9axis:{}},seriesDefaults:{},gridPadding:{top:10,right:10,bottom:23,left:10},series:[]};this.series=[];this.axes={xaxis:new l("xaxis"),yaxis:new l("yaxis"),x2axis:new l("x2axis"),y2axis:new l("y2axis"),y3axis:new l("y3axis"),y4axis:new l("y4axis"),y5axis:new l("y5axis"),y6axis:new l("y6axis"),y7axis:new l("y7axis"),y8axis:new l("y8axis"),y9axis:new l("y9axis")};this.grid=new g();this.legend=new b();this.baseCanvas=new h.jqplot.GenericCanvas();this.eventCanvas=new h.jqplot.GenericCanvas();this._width=null;this._height=null;this._plotDimensions={height:null,width:null};this._gridPadding={top:10,right:10,bottom:10,left:10};this.syncXTicks=true;this.syncYTicks=true;this.seriesColors=["#4bb2c5","#EAA228","#c5b47f","#579575","#839557","#958c12","#953579","#4b5de4","#d8b83f","#ff5800","#0085cc","#c747a3","#cddf54","#FBD178","#26B4E3","#bd70c7"];this.negativeSeriesColors=["#498991","#C08840","#9F9274","#546D61","#646C4A","#6F6621","#6E3F5F","#4F64B0","#A89050","#C45923","#187399","#945381","#959E5C","#C7AF7B","#478396","#907294"];this.sortData=true;var y=0;this.textColor;this.fontFamily;this.fontSize;this.title=new k();this.options={};this.stackSeries=false;this._stackData=[];this._plotData=[];this.plugins={};this._drawCount=0;this.drawIfHidden=false;this._sumy=0;this._sumx=0;this.colorGenerator=h.jqplot.ColorGenerator;this.init=function(G,F,C){for(var D=0;D<h.jqplot.preInitHooks.length;D++){h.jqplot.preInitHooks[D].call(this,G,F,C)}this.targetId="#"+G;this.target=h("#"+G);if(!this.target.get(0)){throw"No plot target specified"}if(this.target.css("position")=="static"){this.target.css("position","relative")}if(!this.target.hasClass("jqplot-target")){this.target.addClass("jqplot-target")}if(!this.target.height()){var E;if(C&&C.height){E=parseInt(C.height,10)}else{if(this.target.attr("data-height")){E=parseInt(this.target.attr("data-height"),10)}else{E=parseInt(h.jqplot.config.defaultHeight,10)}}this._height=E;this.target.css("height",E+"px")}else{this._height=this.target.height()}if(!this.target.width()){var z;if(C&&C.width){z=parseInt(C.width,10)}else{if(this.target.attr("data-width")){z=parseInt(this.target.attr("data-width"),10)}else{z=parseInt(h.jqplot.config.defaultWidth,10)}}this._width=z;this.target.css("width",z+"px")}else{this._width=this.target.width()}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Canvas dimension not set"}this.data=F;this.parseOptions(C);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;for(var D=0;D<this.series.length;D++){this.series[D].shadowCanvas._plotDimensions=this._plotDimensions;this.series[D].canvas._plotDimensions=this._plotDimensions;for(var B=0;B<h.jqplot.preSeriesInitHooks.length;B++){h.jqplot.preSeriesInitHooks[B].call(this.series[D],G,F,this.options.seriesDefaults,this.options.series[D])}this.populatePlotData(this.series[D],D);this.series[D]._plotDimensions=this._plotDimensions;this.series[D].init(D,this.grid.borderWidth,this);for(var B=0;B<h.jqplot.postSeriesInitHooks.length;B++){h.jqplot.postSeriesInitHooks[B].call(this.series[D],G,F,this.options.seriesDefaults,this.options.series[D])}this._sumy+=this.series[D]._sumy;this._sumx+=this.series[D]._sumx}for(var A in this.axes){this.axes[A]._plotDimensions=this._plotDimensions;this.axes[A].init()}if(this.sortData){v(this.series)}this.grid.init();this.grid._axes=this.axes;this.legend._series=this.series;for(var D=0;D<h.jqplot.postInitHooks.length;D++){h.jqplot.postInitHooks[D].call(this,G,F,C)}};this.resetAxesScale=function(C){var B=(C!=c)?C:this.axes;if(B===true){B=this.axes}if(B.constructor===Array){for(var A=0;A<B.length;A++){this.axes[B[A]].resetScale()}}else{if(B.constructor===Object){for(var z in B){this.axes[z].resetScale()}}}};this.reInitialize=function(){if(!this.target.height()){var D;if(options&&options.height){D=parseInt(options.height,10)}else{if(this.target.attr("data-height")){D=parseInt(this.target.attr("data-height"),10)}else{D=parseInt(h.jqplot.config.defaultHeight,10)}}this._height=D;this.target.css("height",D+"px")}else{this._height=this.target.height()}if(!this.target.width()){var z;if(options&&options.width){z=parseInt(options.width,10)}else{if(this.target.attr("data-width")){z=parseInt(this.target.attr("data-width"),10)}else{z=parseInt(h.jqplot.config.defaultWidth,10)}}this._width=z;this.target.css("width",z+"px")}else{this._width=this.target.width()}if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Target dimension not set"}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;for(var E in this.axes){var C=this.axes[E];C._plotWidth=this._width;C._plotHeight=this._height}this.title._plotWidth=this._width;if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this._sumy=0;this._sumx=0;for(var B=0;B<this.series.length;B++){this.populatePlotData(this.series[B],B);this.series[B]._plotDimensions=this._plotDimensions;this.series[B].canvas._plotDimensions=this._plotDimensions;this._sumy+=this.series[B]._sumy;this._sumx+=this.series[B]._sumx}for(var A in this.axes){this.axes[A]._plotDimensions=this._plotDimensions;this.axes[A]._ticks=[];this.axes[A].renderer.init.call(this.axes[A],{})}if(this.sortData){v(this.series)}this.grid._axes=this.axes;this.legend._series=this.series};function v(D){var E,B;for(var C=0;C<D.length;C++){E=D[C].data;var z=true;if(D[C]._stackAxis=="x"){for(var A=0;A<E.length;A++){if(typeof(E[A][1])!="number"){z=false;break}}if(z){E.sort(function(G,F){return G[1]-F[1]})}}else{for(var A=0;A<E.length;A++){if(typeof(E[A][0])!="number"){z=false;break}}if(z){E.sort(function(G,F){return G[0]-F[0]})}}}}this.populatePlotData=function(D,E){this._plotData=[];this._stackData=[];D._stackData=[];D._plotData=[];var H={x:[],y:[]};if(this.stackSeries&&!D.disableStack){D._stack=true;var F=D._stackAxis=="x"?0:1;var G=F?0:1;var I=h.extend(true,[],D.data);var J=h.extend(true,[],D.data);for(var B=0;B<E;B++){var z=this.series[B].data;for(var A=0;A<z.length;A++){I[A][0]+=z[A][0];I[A][1]+=z[A][1];J[A][F]+=z[A][F]}}for(var C=0;C<J.length;C++){H.x.push(J[C][0]);H.y.push(J[C][1])}this._plotData.push(J);this._stackData.push(I);D._stackData=I;D._plotData=J;D._plotValues=H}else{for(var C=0;C<D.data.length;C++){H.x.push(D.data[C][0]);H.y.push(D.data[C][1])}this._stackData.push(D.data);this.series[E]._stackData=D.data;this._plotData.push(D.data);D._plotData=D.data;D._plotValues=H}if(E>0){D._prevPlotData=this.series[E-1]._plotData}D._sumy=0;D._sumx=0;for(C=D.data.length-1;C>-1;C--){D._sumy+=D.data[C][1];D._sumx+=D.data[C][0]}};this.getNextSeriesColor=(function(A){var z=0;var B=A.seriesColors;return function(){if(z<B.length){return B[z++]}else{z=0;return B[z++]}}})(this);this.parseOptions=function(H){for(var E=0;E<h.jqplot.preParseOptionsHooks.length;E++){h.jqplot.preParseOptionsHooks[E].call(this,H)}this.options=h.extend(true,{},this.defaults,H);this.stackSeries=this.options.stackSeries;if(this.options.seriesColors){this.seriesColors=this.options.seriesColors}var z=new this.colorGenerator(this.seriesColors);h.extend(true,this._gridPadding,this.options.gridPadding);this.sortData=(this.options.sortData!=null)?this.options.sortData:this.sortData;for(var A in this.axes){var C=this.axes[A];h.extend(true,C,this.options.axesDefaults,this.options.axes[A]);C._plotWidth=this._width;C._plotHeight=this._height}if(this.data.length==0){this.data=[];for(var E=0;E<this.options.series.length;E++){this.data.push(this.options.series.data)}}var F=function(L,J){var I=[];var K;J=J||"vertical";if(!(L[0] instanceof Array)){for(var K=0;K<L.length;K++){if(J=="vertical"){I.push([K+1,L[K]])}else{I.push([L[K],K+1])}}}else{h.extend(true,I,L)}return I};for(var E=0;E<this.data.length;E++){var G=new o();for(var D=0;D<h.jqplot.preParseSeriesOptionsHooks.length;D++){h.jqplot.preParseSeriesOptionsHooks[D].call(G,this.options.seriesDefaults,this.options.series[E])}h.extend(true,G,{seriesColors:this.seriesColors,negativeSeriesColors:this.negativeSeriesColors},this.options.seriesDefaults,this.options.series[E]);var B="vertical";if(G.renderer.constructor==h.jqplot.barRenderer&&G.rendererOptions&&G.rendererOptions.barDirection=="horizontal"){B="horizontal"}G.data=F(this.data[E],B);switch(G.xaxis){case"xaxis":G._xaxis=this.axes.xaxis;break;case"x2axis":G._xaxis=this.axes.x2axis;break;default:break}G._yaxis=this.axes[G.yaxis];G._xaxis._series.push(G);G._yaxis._series.push(G);if(G.show){G._xaxis.show=true;G._yaxis.show=true}if(!G.color&&G.show!=false){G.color=z.next()}if(!G.label){G.label="Series "+(E+1).toString()}this.series.push(G);for(var D=0;D<h.jqplot.postParseSeriesOptionsHooks.length;D++){h.jqplot.postParseSeriesOptionsHooks[D].call(this.series[E],this.options.seriesDefaults,this.options.series[E])}}h.extend(true,this.grid,this.options.grid);for(var A in this.axes){var C=this.axes[A];if(C.borderWidth==null){C.borderWidth=this.grid.borderWidth}if(C.borderColor==null){if(A!="xaxis"&&A!="x2axis"&&C.useSeriesColor===true&&C.show){C.borderColor=C._series[0].color}else{C.borderColor=this.grid.borderColor}}}if(typeof this.options.title=="string"){this.title.text=this.options.title}else{if(typeof this.options.title=="object"){h.extend(true,this.title,this.options.title)}}this.title._plotWidth=this._width;h.extend(true,this.legend,this.options.legend);for(var E=0;E<h.jqplot.postParseOptionsHooks.length;E++){h.jqplot.postParseOptionsHooks[E].call(this,H)}};this.replot=function(A){var B=(A!=c)?A:{};var z=(B.clear!=c)?B.clear:true;var C=(B.resetAxes!=c)?B.resetAxes:false;this.target.trigger("jqplotPreReplot");if(z){this.target.empty()}if(C){this.resetAxesScale(C)}this.reInitialize();this.draw();this.target.trigger("jqplotPostReplot")};this.redraw=function(z){z=(z!=null)?z:true;this.target.trigger("jqplotPreRedraw");if(z){this.target.empty()}for(var B in this.axes){this.axes[B]._ticks=[]}for(var A=0;A<this.series.length;A++){this.populatePlotData(this.series[A],A)}this._sumy=0;this._sumx=0;for(A=0;A<this.series.length;A++){this._sumy+=this.series[A]._sumy;this._sumx+=this.series[A]._sumx}this.draw();this.target.trigger("jqplotPostRedraw")};this.draw=function(){if(this.drawIfHidden||this.target.is(":visible")){this.target.trigger("jqplotPreDraw");var F;for(F=0;F<h.jqplot.preDrawHooks.length;F++){h.jqplot.preDrawHooks[F].call(this)}this.target.append(this.baseCanvas.createElement({left:0,right:0,top:0,bottom:0},"jqplot-base-canvas"));var E=this.baseCanvas.setContext();this.target.append(this.title.draw());this.title.pack({top:0,left:0});for(var B in this.axes){this.target.append(this.axes[B].draw(E));this.axes[B].set()}if(this.axes.yaxis.show){this._gridPadding.left=this.axes.yaxis.getWidth()}var C=["y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];var A=[0,0,0,0];var H=0;var D,z;for(D=8;D>0;D--){z=this.axes[C[D-1]];if(z.show){A[D-1]=H;H+=z.getWidth()}}if(H>this._gridPadding.right){this._gridPadding.right=H}if(this.title.show&&this.axes.x2axis.show){this._gridPadding.top=this.title.getHeight()+this.axes.x2axis.getHeight()}else{if(this.title.show){this._gridPadding.top=this.title.getHeight()}else{if(this.axes.x2axis.show){this._gridPadding.top=this.axes.x2axis.getHeight()}}}if(this.axes.xaxis.show){this._gridPadding.bottom=this.axes.xaxis.getHeight()}this.axes.xaxis.pack({position:"absolute",bottom:0,left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});this.axes.yaxis.pack({position:"absolute",top:0,left:0,height:this._height},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top});this.axes.x2axis.pack({position:"absolute",top:this.title.getHeight(),left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});for(F=8;F>0;F--){this.axes[C[F-1]].pack({position:"absolute",top:0,right:A[F-1]},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top})}this.target.append(this.grid.createElement(this._gridPadding));this.grid.draw();for(F=0;F<this.series.length;F++){this.target.append(this.series[F].shadowCanvas.createElement(this._gridPadding,"jqplot-series-canvas jqplot-shadow"));this.series[F].shadowCanvas.setContext()}for(F=0;F<this.series.length;F++){this.target.append(this.series[F].canvas.createElement(this._gridPadding,"jqplot-series-canvas"));this.series[F].canvas.setContext()}this.target.append(this.eventCanvas.createElement(this._gridPadding,"jqplot-event-canvas"));var I=this.eventCanvas.setContext();I.fillStyle="rgba(0,0,0,0)";I.fillRect(0,0,I.canvas.width,I.canvas.height);this.bindCustomEvents();if(this.legend.preDraw){this.target.append(this.legend.draw());this.legend.pack(this._gridPadding);if(this.legend._elem){this.drawSeries({legendInfo:{location:this.legend.location,width:this.legend.getWidth(),height:this.legend.getHeight(),xoffset:this.legend.xoffset,yoffset:this.legend.yoffset}})}else{this.drawSeries()}}else{this.drawSeries();h(this.series[this.series.length-1].canvas._elem).after(this.legend.draw());this.legend.pack(this._gridPadding)}for(var F=0;F<h.jqplot.eventListenerHooks.length;F++){var G=h.jqplot.eventListenerHooks[F];this.eventCanvas._elem.bind(G[0],{plot:this},G[1])}for(var F=0;F<h.jqplot.postDrawHooks.length;F++){h.jqplot.postDrawHooks[F].call(this)}if(this.target.is(":visible")){this._drawCount+=1}this.target.trigger("jqplotPostDraw",[this])}};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("mouseup",{plot:this},this.onMouseUp);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)};function w(H){var G=H.data.plot;var C=G.eventCanvas._elem.offset();var F={x:H.pageX-C.left,y:H.pageY-C.top};var D={xaxis:null,yaxis:null,x2axis:null,y2axis:null,y3axis:null,y4axis:null,y5axis:null,y6axis:null,y7axis:null,y8axis:null,y9axis:null};var E=["xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];var z=G.axes;for(var A=11;A>0;A--){var B=E[A-1];if(z[B].show){D[B]=z[B].series_p2u(F[B.charAt(0)])}}return({offsets:C,gridPos:F,dataPos:D})}function x(F,J,I){var G=null;var K,D,B,H,C,A;var E;for(var D=0;D<F.series.length;D++){K=F.series[D];A=K.renderer;if(K.show){E=Math.abs(K.markerRenderer.size/2+K.neighborThreshold);for(var C=0;C<K.gridData.length;C++){p=K.gridData[C];if(A.constructor==h.jqplot.OHLCRenderer){if(A.candleStick){var z=K._yaxis.series_u2p;if(J>=p[0]-A._bodyWidth/2&&J<=p[0]+A._bodyWidth/2&&I>=z(K.data[C][2])&&I<=z(K.data[C][3])){G={seriesIndex:D,pointIndex:C,gridData:p,data:K.data[C]}}}else{if(!A.hlc){var z=K._yaxis.series_u2p;if(J>=p[0]-A._tickLength&&J<=p[0]+A._tickLength&&I>=z(K.data[C][2])&&I<=z(K.data[C][3])){G={seriesIndex:D,pointIndex:C,gridData:p,data:K.data[C]}}}else{var z=K._yaxis.series_u2p;if(J>=p[0]-A._tickLength&&J<=p[0]+A._tickLength&&I>=z(K.data[C][1])&&I<=z(K.data[C][2])){G={seriesIndex:D,pointIndex:C,gridData:p,data:K.data[C]}}}}}else{H=Math.sqrt((J-p[0])*(J-p[0])+(I-p[1])*(I-p[1]));if(H<=E&&(H<=B||B==null)){B=H;G={seriesIndex:D,pointIndex:C,gridData:p,data:K.data[C]}}}}}}return G}this.onClick=function(A){var z=w(A);var C=A.data.plot;var B=x(C,z.gridPos.x,z.gridPos.y);A.data.plot.eventCanvas._elem.trigger("jqplotClick",[z.gridPos,z.dataPos,B,C])};this.onDblClick=function(A){var z=w(A);var C=A.data.plot;var B=x(C,z.gridPos.x,z.gridPos.y);A.data.plot.eventCanvas._elem.trigger("jqplotDblClick",[z.gridPos,z.dataPos,B,C])};this.onMouseDown=function(A){var z=w(A);var C=A.data.plot;var B=x(C,z.gridPos.x,z.gridPos.y);A.data.plot.eventCanvas._elem.trigger("jqplotMouseDown",[z.gridPos,z.dataPos,B,C])};this.onMouseUp=function(A){var z=w(A);A.data.plot.eventCanvas._elem.trigger("jqplotMouseUp",[z.gridPos,z.dataPos,null,A.data.plot])};this.onMouseMove=function(A){var z=w(A);var C=A.data.plot;var B=x(C,z.gridPos.x,z.gridPos.y);A.data.plot.eventCanvas._elem.trigger("jqplotMouseMove",[z.gridPos,z.dataPos,B,C])};this.onMouseEnter=function(A){var z=w(A);var B=A.data.plot;A.data.plot.eventCanvas._elem.trigger("jqplotMouseEnter",[z.gridPos,z.dataPos,null,B])};this.onMouseLeave=function(A){var z=w(A);var B=A.data.plot;A.data.plot.eventCanvas._elem.trigger("jqplotMouseLeave",[z.gridPos,z.dataPos,null,B])};this.drawSeries=function(B,z){var D,C,A;if(z!=c){C=this.series[z];A=C.shadowCanvas._ctx;A.clearRect(0,0,A.canvas.width,A.canvas.height);C.drawShadow(A,B,this);A=C.canvas._ctx;A.clearRect(0,0,A.canvas.width,A.canvas.height);C.draw(A,B,this)}else{for(D=0;D<this.series.length;D++){C=this.series[D];A=C.shadowCanvas._ctx;A.clearRect(0,0,A.canvas.width,A.canvas.height);C.drawShadow(A,B,this);A=C.canvas._ctx;A.clearRect(0,0,A.canvas.width,A.canvas.height);C.draw(A,B,this)}}}}h.jqplot.ColorGenerator=function(w){var v=0;this.next=function(){if(v<w.length){return w[v++]}else{v=0;return w[v++]}};this.previous=function(){if(v>0){return w[v--]}else{v=w.length-1;return w[v]}};this.get=function(x){return w[x]};this.setColors=function(x){w=x};this.reset=function(){v=0}};h.jqplot.hex2rgb=function(x,v){x=x.replace("#","");if(x.length==3){x=x[0]+x[0]+x[1]+x[1]+x[2]+x[2]}var w;w="rgba("+parseInt(x.slice(0,2),16)+", "+parseInt(x.slice(2,4),16)+", "+parseInt(x.slice(4,6),16);if(v){w+=", "+v}w+=")";return w};h.jqplot.rgb2hex=function(z){var x=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *(?:, *[0-9.]*)?\)/;var v=z.match(x);var y="#";for(i=1;i<4;i++){var w;if(v[i].search(/%/)!=-1){w=parseInt(255*v[i]/100,10).toString(16);if(w.length==1){w="0"+w}}else{w=parseInt(v[i],10).toString(16);if(w.length==1){w="0"+w}}y+=w}return y};h.jqplot.normalize2rgb=function(w,v){if(w.search(/^ *rgba?\(/)!=-1){return w}else{if(w.search(/^ *#?[0-9a-fA-F]?[0-9a-fA-F]/)!=-1){return h.jqplot.hex2rgb(w,v)}else{throw"invalid color spec"}}};h.jqplot.getColorComponents=function(z){var y=h.jqplot.normalize2rgb(z);var x=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *,? *([0-9.]* *)?\)/;var v=y.match(x);var w=[];for(i=1;i<4;i++){if(v[i].search(/%/)!=-1){w[i-1]=parseInt(255*v[i]/100,10)}else{w[i-1]=parseInt(v[i],10)}}w[3]=parseFloat(v[4])?parseFloat(v[4]):1;return w};h.jqplot.log=function(){if(window.console&&h.jqplot.debug){if(arguments.length==1){console.log(arguments[0])}else{console.log(arguments)}}};var f=h.jqplot.log;h.jqplot.AxisLabelRenderer=function(v){h.jqplot.ElemContainer.call(this);this.axis;this.show=true;this.label="";this._elem;this.escapeHTML=false;h.extend(true,this,v)};h.jqplot.AxisLabelRenderer.prototype=new h.jqplot.ElemContainer();h.jqplot.AxisLabelRenderer.prototype.constructor=h.jqplot.AxisLabelRenderer;h.jqplot.AxisLabelRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.AxisLabelRenderer.prototype.draw=function(){this._elem=h('<div style="position:absolute;" class="jqplot-'+this.axis+'-label"></div>');if(Number(this.label)){this._elem.css("white-space","nowrap")}if(!this.escapeHTML){this._elem.html(this.label)}else{this._elem.text(this.label)}return this._elem};h.jqplot.AxisLabelRenderer.prototype.pack=function(){};h.jqplot.AxisTickRenderer=function(v){h.jqplot.ElemContainer.call(this);this.mark="outside";this.axis;this.showMark=true;this.showGridline=true;this.isMinorTick=false;this.size=4;this.markSize=6;this.show=true;this.showLabel=true;this.label="";this.value=null;this._styles={};this.formatter=h.jqplot.DefaultTickFormatter;this.formatString="";this.fontFamily;this.fontSize;this.textColor;this._elem;h.extend(true,this,v)};h.jqplot.AxisTickRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.AxisTickRenderer.prototype=new h.jqplot.ElemContainer();h.jqplot.AxisTickRenderer.prototype.constructor=h.jqplot.AxisTickRenderer;h.jqplot.AxisTickRenderer.prototype.setTick=function(v,x,w){this.value=v;this.axis=x;if(w){this.isMinorTick=true}return this};h.jqplot.AxisTickRenderer.prototype.draw=function(){if(!this.label){this.label=this.formatter(this.formatString,this.value)}style='style="position:absolute;';if(Number(this.label)){style+="white-space:nowrap;"}style+='"';this._elem=h("<div "+style+' class="jqplot-'+this.axis+'-tick">'+this.label+"</div>");for(var v in this._styles){this._elem.css(v,this._styles[v])}if(this.fontFamily){this._elem.css("font-family",this.fontFamily)}if(this.fontSize){this._elem.css("font-size",this.fontSize)}if(this.textColor){this._elem.css("color",this.textColor)}return this._elem};h.jqplot.DefaultTickFormatter=function(v,w){if(typeof w=="number"){if(!v){v="%.1f"}return h.jqplot.sprintf(v,w)}else{return String(w)}};h.jqplot.AxisTickRenderer.prototype.pack=function(){};h.jqplot.CanvasGridRenderer=function(){this.shadowRenderer=new h.jqplot.ShadowRenderer()};h.jqplot.CanvasGridRenderer.prototype.init=function(w){this._ctx;h.extend(true,this,w);var v={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};this.renderer.shadowRenderer.init(v)};h.jqplot.CanvasGridRenderer.prototype.createElement=function(){var y=document.createElement("canvas");var v=this._plotDimensions.width;var x=this._plotDimensions.height;y.width=v;y.height=x;this._elem=h(y);this._elem.addClass("jqplot-grid-canvas");this._elem.css({position:"absolute",left:0,top:0});if(h.browser.msie){window.G_vmlCanvasManager.init_(document)}if(h.browser.msie){y=window.G_vmlCanvasManager.initElement(y)}this._top=this._offsets.top;this._bottom=x-this._offsets.bottom;this._left=this._offsets.left;this._right=v-this._offsets.right;this._width=this._right-this._left;this._height=this._bottom-this._top;return this._elem};h.jqplot.CanvasGridRenderer.prototype.draw=function(){this._ctx=this._elem.get(0).getContext("2d");var L=this._ctx;var E=this._axes;L.save();L.fillStyle=this.background;L.fillRect(this._left,this._top,this._width,this._height);if(this.drawGridlines){L.save();L.lineJoin="miter";L.lineCap="butt";L.lineWidth=this.gridLineWidth;L.strokeStyle=this.gridLineColor;var G,D;var v=["xaxis","yaxis","x2axis","y2axis"];for(var A=4;A>0;A--){var w=v[A-1];var y=E[w];var H=y._ticks;if(y.show){for(var z=H.length;z>0;z--){var K=H[z-1];if(K.show){var F=Math.round(y.u2p(K.value))+0.5;switch(w){case"xaxis":if(K.showGridline){C(F,this._top,F,this._bottom)}if(K.showMark&&K.mark){s=K.markSize;m=K.mark;var F=Math.round(y.u2p(K.value))+0.5;switch(m){case"outside":G=this._bottom;D=this._bottom+s;break;case"inside":G=this._bottom-s;D=this._bottom;break;case"cross":G=this._bottom-s;D=this._bottom+s;break;default:G=this._bottom;D=this._bottom+s;break}if(this.shadow){this.renderer.shadowRenderer.draw(L,[[F,G],[F,D]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}C(F,G,F,D)}break;case"yaxis":if(K.showGridline){C(this._right,F,this._left,F)}if(K.showMark&&K.mark){s=K.markSize;m=K.mark;var F=Math.round(y.u2p(K.value))+0.5;switch(m){case"outside":G=this._left-s;D=this._left;break;case"inside":G=this._left;D=this._left+s;break;case"cross":G=this._left-s;D=this._left+s;break;default:G=this._left-s;D=this._left;break}if(this.shadow){this.renderer.shadowRenderer.draw(L,[[G,F],[D,F]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}C(G,F,D,F,{strokeStyle:y.borderColor})}break;case"x2axis":if(K.showGridline){C(F,this._bottom,F,this._top)}if(K.showMark&&K.mark){s=K.markSize;m=K.mark;var F=Math.round(y.u2p(K.value))+0.5;switch(m){case"outside":G=this._top-s;D=this._top;break;case"inside":G=this._top;D=this._top+s;break;case"cross":G=this._top-s;D=this._top+s;break;default:G=this._top-s;D=this._top;break}if(this.shadow){this.renderer.shadowRenderer.draw(L,[[F,G],[F,D]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}C(F,G,F,D)}break;case"y2axis":if(K.showGridline){C(this._left,F,this._right,F)}if(K.showMark&&K.mark){s=K.markSize;m=K.mark;var F=Math.round(y.u2p(K.value))+0.5;switch(m){case"outside":G=this._right;D=this._right+s;break;case"inside":G=this._right-s;D=this._right;break;case"cross":G=this._right-s;D=this._right+s;break;default:G=this._right;D=this._right+s;break}if(this.shadow){this.renderer.shadowRenderer.draw(L,[[G,F],[D,F]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}C(G,F,D,F,{strokeStyle:y.borderColor})}break;default:break}}}}}v=["y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];for(var A=7;A>0;A--){var y=E[v[A-1]];var H=y._ticks;if(y.show){var J=H[y.numberTicks-1];var B=H[0];var x=y.getLeft();var I=[[x,J.getTop()+J.getHeight()/2],[x,B.getTop()+B.getHeight()/2+1]];if(this.shadow){this.renderer.shadowRenderer.draw(L,I,{lineCap:"butt",fill:false,closePath:false})}C(I[0][0],I[0][1],I[1][0],I[1][1],{lineCap:"butt",strokeStyle:y.borderColor,lineWidth:y.borderWidth});for(var z=H.length;z>0;z--){var K=H[z-1];s=K.markSize;m=K.mark;var F=Math.round(y.u2p(K.value))+0.5;if(K.showMark&&K.mark){switch(m){case"outside":G=x;D=x+s;break;case"inside":G=x-s;D=x;break;case"cross":G=x-s;D=x+s;break;default:G=x;D=x+s;break}I=[[G,F],[D,F]];if(this.shadow){this.renderer.shadowRenderer.draw(L,I,{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}C(G,F,D,F,{strokeStyle:y.borderColor})}}}}L.restore()}function C(Q,P,N,M,O){L.save();O=O||{};h.extend(true,L,O);L.beginPath();L.moveTo(Q,P);L.lineTo(N,M);L.stroke();L.restore()}if(this.shadow){var I=[[this._left,this._bottom],[this._right,this._bottom],[this._right,this._top]];this.renderer.shadowRenderer.draw(L,I)}C(this._left,this._top,this._right,this._top,{lineCap:"round",strokeStyle:E.x2axis.borderColor,lineWidth:E.x2axis.borderWidth});C(this._right,this._top,this._right,this._bottom,{lineCap:"round",strokeStyle:E.y2axis.borderColor,lineWidth:E.y2axis.borderWidth});C(this._right,this._bottom,this._left,this._bottom,{lineCap:"round",strokeStyle:E.xaxis.borderColor,lineWidth:E.xaxis.borderWidth});C(this._left,this._bottom,this._left,this._top,{lineCap:"round",strokeStyle:E.yaxis.borderColor,lineWidth:E.yaxis.borderWidth});L.restore()};var r=24*60*60*1000;var j=function(v,w){v=String(v);while(v.length<w){v="0"+v}return v};var e={millisecond:1,second:1000,minute:60*1000,hour:60*60*1000,day:r,week:7*r,month:{add:function(x,v){e.year.add(x,Math[v>0?"floor":"ceil"](v/12));var w=x.getMonth()+(v%12);if(w==12){w=0;x.setYear(x.getFullYear()+1)}else{if(w==-1){w=11;x.setYear(x.getFullYear()-1)}}x.setMonth(w)},diff:function(z,x){var v=z.getFullYear()-x.getFullYear();var w=z.getMonth()-x.getMonth()+(v*12);var y=z.getDate()-x.getDate();return w+(y/30)}},year:{add:function(w,v){w.setYear(w.getFullYear()+Math[v>0?"floor":"ceil"](v))},diff:function(w,v){return e.month.diff(w,v)/12}}};for(var u in e){if(u.substring(u.length-1)!="s"){e[u+"s"]=e[u]}}var t=function(y,x){if(Date.prototype.strftime.formatShortcuts[x]){return y.strftime(Date.prototype.strftime.formatShortcuts[x])}else{var v=(Date.prototype.strftime.formatCodes[x]||"").split(".");var w=y["get"+v[0]]?y["get"+v[0]]():"";if(v[1]){w=j(w,v[1])}return w}};var q={succ:function(v){return this.clone().add(1,v)},add:function(x,w){var v=e[w]||e.day;if(typeof v=="number"){this.setTime(this.getTime()+(v*x))}else{v.add(this,x)}return this},diff:function(w,z,v){w=Date.create(w);if(w===null){return null}var x=e[z]||e.day;if(typeof x=="number"){var y=(this.getTime()-w.getTime())/x}else{var y=x.diff(this,w)}return(v?y:Math[y>0?"floor":"ceil"](y))},strftime:function(w){var y=w||"%Y-%m-%d",v="",x;while(y.length>0){if(x=y.match(Date.prototype.strftime.formatCodes.matcher)){v+=y.slice(0,x.index);v+=(x[1]||"")+t(this,x[2]);y=y.slice(x.index+x[0].length)}else{v+=y;y=""}}return v},getShortYear:function(){return this.getYear()%100},getMonthNumber:function(){return this.getMonth()+1},getMonthName:function(){return Date.MONTHNAMES[this.getMonth()]},getAbbrMonthName:function(){return Date.ABBR_MONTHNAMES[this.getMonth()]},getDayName:function(){return Date.DAYNAMES[this.getDay()]},getAbbrDayName:function(){return Date.ABBR_DAYNAMES[this.getDay()]},getDayOrdinal:function(){return Date.ORDINALNAMES[this.getDate()%10]},getHours12:function(){var v=this.getHours();return v>12?v-12:(v==0?12:v)},getAmPm:function(){return this.getHours()>=12?"PM":"AM"},getUnix:function(){return Math.round(this.getTime()/1000,0)},getGmtOffset:function(){var v=this.getTimezoneOffset()/60;var w=v<0?"+":"-";v=Math.abs(v);return w+j(Math.floor(v),2)+":"+j((v%1)*60,2)},getTimezoneName:function(){var v=/(?:\((.+)\)$| ([A-Z]{3}) )/.exec(this.toString());return v[1]||v[2]||"GMT"+this.getGmtOffset()},toYmdInt:function(){return(this.getFullYear()*10000)+(this.getMonthNumber()*100)+this.getDate()},clone:function(){return new Date(this.getTime())}};for(var a in q){Date.prototype[a]=q[a]}var d={create:function(v){if(v instanceof Date){return v}if(typeof v=="number"){return new Date(v)}var A=String(v).replace(/^\s*(.+)\s*$/,"$1"),w=0,x=Date.create.patterns.length,y;var z=A;while(w<x){ms=Date.parse(z);if(!isNaN(ms)){return new Date(ms)}y=Date.create.patterns[w];if(typeof y=="function"){obj=y(z);if(obj instanceof Date){return obj}}else{z=A.replace(y[0],y[1])}w++}return NaN},MONTHNAMES:"January February March April May June July August September October November December".split(" "),ABBR_MONTHNAMES:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAYNAMES:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ABBR_DAYNAMES:"Sun Mon Tue Wed Thu Fri Sat".split(" "),ORDINALNAMES:"th st nd rd th th th th th th".split(" "),ISO:"%Y-%m-%dT%H:%M:%S.%N%G",SQL:"%Y-%m-%d %H:%M:%S",daysInMonth:function(v,w){if(w==2){return new Date(v,1,29).getDate()==29?29:28}return[c,31,c,31,30,31,30,31,31,30,31,30,31][w]}};for(var a in d){Date[a]=d[a]}Date.prototype.strftime.formatCodes={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",o:"DayOrdinal",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"};Date.prototype.strftime.formatShortcuts={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","%":"%"};Date.create.patterns=[[/-/g,"/"],[/st|nd|rd|th/g,""],[/(3[01]|[0-2]\d)\s*\.\s*(1[0-2]|0\d)\s*\.\s*([1-9]\d{3})/,"$2/$1/$3"],[/([1-9]\d{3})\s*-\s*(1[0-2]|0\d)\s*-\s*(3[01]|[0-2]\d)/,"$2/$3/$1"],function(y){var w=y.match(/^(?:(.+)\s+)?([012]?\d)(?:\s*\:\s*(\d\d))?(?:\s*\:\s*(\d\d(\.\d*)?))?\s*(am|pm)?\s*$/i);if(w){if(w[1]){var x=Date.create(w[1]);if(isNaN(x)){return}}else{var x=new Date();x.setMilliseconds(0)}var v=parseFloat(w[2]);if(w[6]){v=w[6].toLowerCase()=="am"?(v==12?0:v):(v==12?12:v+12)}x.setHours(v,parseInt(w[3]||0,10),parseInt(w[4]||0,10),((parseFloat(w[5]||0))||0)*1000);return x}else{return y}},function(y){var w=y.match(/^(?:(.+))[T|\s+]([012]\d)(?:\:(\d\d))(?:\:(\d\d))(?:\.\d+)([\+\-]\d\d\:\d\d)$/i);if(w){if(w[1]){var x=Date.create(w[1]);if(isNaN(x)){return}}else{var x=new Date();x.setMilliseconds(0)}var v=parseFloat(w[2]);x.setHours(v,parseInt(w[3],10),parseInt(w[4],10),parseFloat(w[5])*1000);return x}else{return y}},function(A){var x=A.match(/^([0-3]?\d)\s*[-\/.\s]{1}\s*([a-zA-Z]{3,9})\s*[-\/.\s]{1}\s*([0-3]?\d)$/);if(x){var z=new Date();var B=parseFloat(String(z.getFullYear()).slice(2,4));var C=parseInt(String(z.getFullYear())/100,10)*100;var E=1;var F=parseFloat(x[1]);var D=parseFloat(x[3]);var w,v,G;if(F>31){v=x[3];if(F<B+E){w=C+F}else{w=C-100+F}}else{v=x[1];if(D<B+E){w=C+D}else{w=C-100+D}}var G=h.inArray(x[2],Date.ABBR_MONTHNAMES);if(G==-1){G=h.inArray(x[2],Date.MONTHNAMES)}z.setFullYear(w,G,v);z.setHours(0,0,0,0);return z}else{return A}}];if(h.jqplot.config.debug){h.date=Date.create}h.jqplot.DivTitleRenderer=function(){};h.jqplot.DivTitleRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.DivTitleRenderer.prototype.draw=function(){var w=this.renderer;if(!this.text){this.show=false;this._elem=h('<div style="height:0px;width:0px;"></div>')}else{if(this.text){var v="position:absolute;top:0px;left:0px;";v+=(this._plotWidth)?"width:"+this._plotWidth+"px;":"";v+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";v+=(this.fontSize)?"font-size:"+this.fontSize+";":"";v+=(this.textAlign)?"text-align:"+this.textAlign+";":"text-align:center;";v+=(this.textColor)?"color:"+this.textColor+";":"";this._elem=h('<div class="jqplot-title" style="'+v+'">'+this.text+"</div>")}}return this._elem};h.jqplot.DivTitleRenderer.prototype.pack=function(){};h.jqplot.LineRenderer=function(){this.shapeRenderer=new h.jqplot.ShapeRenderer();this.shadowRenderer=new h.jqplot.ShadowRenderer()};h.jqplot.LineRenderer.prototype.init=function(w){h.extend(true,this.renderer,w);var y={lineJoin:"round",lineCap:"round",fill:this.fill,isarc:false,strokeStyle:this.color,fillStyle:this.fillColor,lineWidth:this.lineWidth,closePath:this.fill};this.renderer.shapeRenderer.init(y);if(this.lineWidth>2.5){var x=this.shadowOffset*(1+(Math.atan((this.lineWidth/2.5))/0.785398163-1)*0.6)}else{var x=this.shadowOffset*Math.atan((this.lineWidth/2.5))/0.785398163}var v={lineJoin:"round",lineCap:"round",fill:this.fill,isarc:false,angle:this.shadowAngle,offset:x,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.lineWidth,closePath:this.fill};this.renderer.shadowRenderer.init(v)};h.jqplot.LineRenderer.prototype.setGridData=function(A){var w=this._xaxis.series_u2p;var z=this._yaxis.series_u2p;var x=this._plotData;var y=this._prevPlotData;this.gridData=[];this._prevGridData=[];for(var v=0;v<this.data.length;v++){if(x[v]!=null){this.gridData.push([w.call(this._xaxis,x[v][0]),z.call(this._yaxis,x[v][1])])}if(y[v]!=null){this._prevGridData.push([w.call(this._xaxis,y[v][0]),z.call(this._yaxis,y[v][1])])}}};h.jqplot.LineRenderer.prototype.makeGridData=function(y,A){var x=this._xaxis.series_u2p;var z=this._yaxis.series_u2p;var w=[];var B=[];for(var v=0;v<y.length;v++){if(y[v]!=null){w.push([x.call(this._xaxis,y[v][0]),z.call(this._yaxis,y[v][1])])}}return w};h.jqplot.LineRenderer.prototype.draw=function(G,N,w){var K;var E=(w!=c)?w:{};var y=(E.shadow!=c)?E.shadow:this.shadow;var P=(E.showLine!=c)?E.showLine:this.showLine;var J=(E.fill!=c)?E.fill:this.fill;var v=(E.fillAndStroke!=c)?E.fillAndStroke:this.fillAndStroke;G.save();if(N.length){if(P){if(J){if(this.fillToZero){var z=new h.jqplot.ColorGenerator(this.negativeSeriesColors);var L=z.get(this.index);if(!this.useNegativeColors){L=E.fillStyle}var C=false;var D=E.fillStyle;if(v){var O=N.slice(0)}if(this.index==0||!this._stack){var H=[];var M=this._yaxis.series_u2p(0);var x=this._xaxis.series_u2p(0);if(this.fillAxis=="y"){H.push([N[0][0],M]);for(var K=0;K<N.length-1;K++){H.push(N[K]);if(this._plotData[K][1]*this._plotData[K+1][1]<0){if(this._plotData[K][1]<0){C=true;E.fillStyle=L}else{C=false;E.fillStyle=D}var B=N[K][0]+(N[K+1][0]-N[K][0])*(M-N[K][1])/(N[K+1][1]-N[K][1]);H.push([B,M]);if(y){this.renderer.shadowRenderer.draw(G,H,E)}this.renderer.shapeRenderer.draw(G,H,E);H=[[B,M]]}}if(this._plotData[N.length-1][1]<0){C=true;E.fillStyle=L}else{C=false;E.fillStyle=D}H.push(N[N.length-1]);H.push([N[N.length-1][0],M])}if(y){this.renderer.shadowRenderer.draw(G,H,E)}this.renderer.shapeRenderer.draw(G,H,E)}else{var F=this._prevGridData;for(var K=F.length;K>0;K--){N.push(F[K-1])}if(y){this.renderer.shadowRenderer.draw(G,N,E)}this.renderer.shapeRenderer.draw(G,N,E)}}else{if(v){var O=N.slice(0)}if(this.index==0||!this._stack){var A=G.canvas.height;N.unshift([N[0][0],A]);len=N.length;N.push([N[len-1][0],A])}else{var F=this._prevGridData;for(var K=F.length;K>0;K--){N.push(F[K-1])}}if(y){this.renderer.shadowRenderer.draw(G,N,E)}this.renderer.shapeRenderer.draw(G,N,E)}if(v){var I=h.extend(true,{},E,{fill:false,closePath:false});this.renderer.shapeRenderer.draw(G,O,I);if(this.markerRenderer.show){for(K=0;K<O.length;K++){this.markerRenderer.draw(O[K][0],O[K][1],G,E.markerOptions)}}}}else{if(y){this.renderer.shadowRenderer.draw(G,N,E)}this.renderer.shapeRenderer.draw(G,N,E)}}if(this.markerRenderer.show&&!J){for(K=0;K<N.length;K++){this.markerRenderer.draw(N[K][0],N[K][1],G,E.markerOptions)}}}G.restore()};h.jqplot.LineRenderer.prototype.drawShadow=function(v,x,w){};h.jqplot.LinearAxisRenderer=function(){};h.jqplot.LinearAxisRenderer.prototype.init=function(x){h.extend(true,this,x);var v=this._dataBounds;for(var y=0;y<this._series.length;y++){var z=this._series[y];var A=z._plotData;for(var w=0;w<A.length;w++){if(this.name=="xaxis"||this.name=="x2axis"){if(A[w][0]<v.min||v.min==null){v.min=A[w][0]}if(A[w][0]>v.max||v.max==null){v.max=A[w][0]}}else{if(A[w][1]<v.min||v.min==null){v.min=A[w][1]}if(A[w][1]>v.max||v.max==null){v.max=A[w][1]}}}}};h.jqplot.LinearAxisRenderer.prototype.draw=function(v){if(this.show){this.renderer.createTicks.call(this);var B=0;var w;this._elem=h('<div class="jqplot-axis jqplot-'+this.name+'" style="position:absolute;"></div>');if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var A=this._label.draw(v);A.appendTo(this._elem)}if(this.showTicks){var z=this._ticks;for(var y=0;y<z.length;y++){var x=z[y];if(x.showLabel&&(!x.isMinorTick||this.showMinorTicks)){var A=x.draw(v);A.appendTo(this._elem)}}}}return this._elem};h.jqplot.LinearAxisRenderer.prototype.reset=function(){this.min=this._min;this.max=this._max;this.tickInterval=this._tickInterval;this.numberTicks=this._numberTicks};h.jqplot.LinearAxisRenderer.prototype.set=function(){var D=0;var y;var x=0;var C=0;var v=(this._label==null)?false:this._label.show;if(this.show&&this.showTicks){var B=this._ticks;for(var A=0;A<B.length;A++){var z=B[A];if(z.showLabel&&(!z.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){y=z._elem.outerHeight(true)}else{y=z._elem.outerWidth(true)}if(y>D){D=y}}}if(v){x=this._label._elem.outerWidth(true);C=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){D=D+C;this._elem.css({height:D+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){D=D+C;this._elem.css({height:D+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){D=D+x;this._elem.css({width:D+"px",left:"0px",top:"0px"});if(v&&this._label.constructor==h.jqplot.AxisLabelRenderer){this._label._elem.css("width",x+"px")}}else{D=D+x;this._elem.css({width:D+"px",right:"0px",top:"0px"});if(v&&this._label.constructor==h.jqplot.AxisLabelRenderer){this._label._elem.css("width",x+"px")}}}}}};h.jqplot.LinearAxisRenderer.prototype.createTicks=function(){var ab=this._ticks;var X=this.ticks;var ac=this.name;var aa=this._dataBounds;var S,Y;var P,T;var y,x;var v,U;if(X.length){for(U=0;U<X.length;U++){var D=X[U];var G=new this.tickRenderer(this.tickOptions);if(D.constructor==Array){G.value=D[0];G.label=D[1];if(!this.showTicks){G.showLabel=false;G.showMark=false}else{if(!this.showTickMarks){G.showMark=false}}G.setTick(D[0],this.name);this._ticks.push(G)}else{G.value=D;if(!this.showTicks){G.showLabel=false;G.showMark=false}else{if(!this.showTickMarks){G.showMark=false}}G.setTick(D,this.name);this._ticks.push(G)}}this.numberTicks=X.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(ac=="xaxis"||ac=="x2axis"){S=this._plotDimensions.width}else{S=this._plotDimensions.height}if(!this.autoscale&&this.min!=null&&this.max!=null&&this.numberTicks!=null){this.tickInterval=null}P=((this.min!=null)?this.min:aa.min);T=((this.max!=null)?this.max:aa.max);if(P==T){var E=0.05;if(P>0){E=Math.max(Math.log(P)/Math.LN10,0.05)}P-=E;T+=E}var K=T-P;var O,R;var W;if(this.autoscale&&this.min==null&&this.max==null){var J,z,L;var F=false;var N=false;var w={min:null,max:null,average:null,stddev:null};for(var U=0;U<this._series.length;U++){var I=this._series[U];var B=(I.fillAxis=="x")?I._xaxis.name:I._yaxis.name;if(this.name==B){var H=I._plotValues[I.fillAxis];var A=H[0];var C=H[0];for(var Q=1;Q<H.length;Q++){if(H[Q]<A){A=H[Q]}else{if(H[Q]>C){C=H[Q]}}}var M=(C-A)/C;if(I.renderer.constructor==h.jqplot.BarRenderer){if(A>=0&&(I.fillToZero||M>0.1)){F=true}else{F=false;if(I.fill&&I.fillToZero&&A<0&&C>0){N=true}else{N=false}}}else{if(I.fill){if(A>=0&&(I.fillToZero||M>0.1)){F=true}else{if(A<0&&C>0&&I.fillToZero){F=false;N=true}else{F=false;N=false}}}else{if(A<0){F=false}}}}}if(F){this.numberTicks=2+Math.ceil((S-(this.tickSpacing-1))/this.tickSpacing);this.min=0;z=T/(this.numberTicks-1);W=Math.pow(10,Math.abs(Math.floor(Math.log(z)/Math.LN10)));if(z/W==parseInt(z/W,10)){z+=W}this.tickInterval=Math.ceil(z/W)*W;this.max=this.tickInterval*(this.numberTicks-1)}else{if(N){this.numberTicks=2+Math.ceil((S-(this.tickSpacing-1))/this.tickSpacing);var V=Math.ceil(Math.abs(P)/K*(this.numberTicks-1));var Z=this.numberTicks-1-V;z=Math.max(Math.abs(P/V),Math.abs(T/Z));W=Math.pow(10,Math.abs(Math.floor(Math.log(z)/Math.LN10)));this.tickInterval=Math.ceil(z/W)*W;this.max=this.tickInterval*Z;this.min=-this.tickInterval*V}else{if(this.numberTicks==null){if(this.tickInterval){this.numberTicks=3+Math.ceil(K/this.tickInterval)}else{this.numberTicks=2+Math.ceil((S-(this.tickSpacing-1))/this.tickSpacing)}}if(this.tickInterval==null){z=K/(this.numberTicks-1);if(z<1){W=Math.pow(10,Math.abs(Math.floor(Math.log(z)/Math.LN10)))}else{W=1}this.tickInterval=Math.ceil(z*W*this.pad)/W}else{W=1/this.tickInterval}J=this.tickInterval*(this.numberTicks-1);L=(J-K)/2;if(this.min==null){this.min=Math.floor(W*(P-L))/W}if(this.max==null){this.max=this.min+J}}}}else{O=(this.min!=null)?this.min:P-K*(this.padMin-1);R=(this.max!=null)?this.max:T+K*(this.padMax-1);this.min=O;this.max=R;K=this.max-this.min;if(this.numberTicks==null){if(this.tickInterval!=null){this.numberTicks=Math.ceil((this.max-this.min)/this.tickInterval)+1;this.max=this.min+this.tickInterval*(this.numberTicks-1)}else{if(S>100){this.numberTicks=parseInt(3+(S-100)/75,10)}else{this.numberTicks=2}}}if(this.tickInterval==null){this.tickInterval=K/(this.numberTicks-1)}}for(var U=0;U<this.numberTicks;U++){v=this.min+U*this.tickInterval;var G=new this.tickRenderer(this.tickOptions);if(!this.showTicks){G.showLabel=false;G.showMark=false}else{if(!this.showTickMarks){G.showMark=false}}G.setTick(v,this.name);this._ticks.push(G)}}};h.jqplot.LinearAxisRenderer.prototype.pack=function(F,A){var I=this._ticks;var G=this.max;var C=this.min;var z=A.max;var M=A.min;var D=(this._label==null)?false:this._label.show;for(var v in F){this._elem.css(v,F[v])}this._offsets=A;var y=z-M;var L=G-C;this.p2u=function(w){return(w-M)*L/y+C};this.u2p=function(w){return(w-C)*y/L+M};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(w){return(w-C)*y/L};this.series_p2u=function(w){return w*L/y+C}}else{this.series_u2p=function(w){return(w-G)*y/L};this.series_p2u=function(w){return w*L/y+G}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(i=0;i<I.length;i++){var K=I[i];if(K.show&&K.showLabel){var B;if(K.constructor==h.jqplot.CanvasAxisTickRenderer&&K.angle){var J=(this.name=="xaxis")?1:-1;switch(K.labelPosition){case"auto":if(J*K.angle<0){B=-K.getWidth()+K._textRenderer.height*Math.sin(-K._textRenderer.angle)/2}else{B=-K._textRenderer.height*Math.sin(K._textRenderer.angle)/2}break;case"end":B=-K.getWidth()+K._textRenderer.height*Math.sin(-K._textRenderer.angle)/2;break;case"start":B=-K._textRenderer.height*Math.sin(K._textRenderer.angle)/2;break;case"middle":B=-K.getWidth()/2+K._textRenderer.height*Math.sin(-K._textRenderer.angle)/2;break;default:B=-K.getWidth()/2+K._textRenderer.height*Math.sin(-K._textRenderer.angle)/2;break}}else{B=-K.getWidth()/2}var x=this.u2p(K.value)+B+"px";K._elem.css("left",x);K.pack()}}if(D){var H=this._label._elem.outerWidth(true);this._label._elem.css("left",M+y/2-H/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}}else{for(i=0;i<I.length;i++){var K=I[i];if(K.show&&K.showLabel){var B;if(K.constructor==h.jqplot.CanvasAxisTickRenderer&&K.angle){var J=(this.name=="yaxis")?1:-1;switch(K.labelPosition){case"auto":case"end":if(J*K.angle<0){B=-K._textRenderer.height*Math.cos(-K._textRenderer.angle)/2}else{B=-K.getHeight()+K._textRenderer.height*Math.cos(K._textRenderer.angle)/2}break;case"start":if(K.angle>0){B=-K._textRenderer.height*Math.cos(-K._textRenderer.angle)/2}else{B=-K.getHeight()+K._textRenderer.height*Math.cos(K._textRenderer.angle)/2}break;case"middle":B=-K.getHeight()/2;break;default:B=-K.getHeight()/2;break}}else{B=-K.getHeight()/2}var x=this.u2p(K.value)+B+"px";K._elem.css("top",x);K.pack()}}if(D){var E=this._label._elem.outerHeight(true);this._label._elem.css("top",z-y/2-E/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}};h.jqplot.MarkerRenderer=function(v){this.show=true;this.style="filledCircle";this.lineWidth=2;this.size=9;this.color="#666666";this.shadow=true;this.shadowAngle=45;this.shadowOffset=1;this.shadowDepth=3;this.shadowAlpha="0.07";this.shadowRenderer=new h.jqplot.ShadowRenderer();this.shapeRenderer=new h.jqplot.ShapeRenderer();h.extend(true,this,v)};h.jqplot.MarkerRenderer.prototype.init=function(v){h.extend(true,this,v);var x={angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,lineWidth:this.lineWidth,depth:this.shadowDepth,closePath:true};if(this.style.indexOf("filled")!=-1){x.fill=true}if(this.style.indexOf("ircle")!=-1){x.isarc=true;x.closePath=false}this.shadowRenderer.init(x);var w={fill:false,isarc:false,strokeStyle:this.color,fillStyle:this.color,lineWidth:this.lineWidth,closePath:true};if(this.style.indexOf("filled")!=-1){w.fill=true}if(this.style.indexOf("ircle")!=-1){w.isarc=true;w.closePath=false}this.shapeRenderer.init(w)};h.jqplot.MarkerRenderer.prototype.drawDiamond=function(z,w,C,B,E){var v=1.2;var F=this.size/2/v;var D=this.size/2*v;var A=[[z-F,w],[z,w+D],[z+F,w],[z,w-D]];if(this.shadow){this.shadowRenderer.draw(C,A)}this.shapeRenderer.draw(C,A,E);C.restore()};h.jqplot.MarkerRenderer.prototype.drawPlus=function(A,z,D,C,G){var w=1;var H=this.size/2*w;var E=this.size/2*w;var F=[[A,z-E],[A,z+E]];var B=[[A+H,z],[A-H,z]];var v=h.extend(true,{},this.options,{closePath:false});if(this.shadow){this.shadowRenderer.draw(D,F,{closePath:false});this.shadowRenderer.draw(D,B,{closePath:false})}this.shapeRenderer.draw(D,F,v);this.shapeRenderer.draw(D,B,v);D.restore()};h.jqplot.MarkerRenderer.prototype.drawX=function(A,z,D,C,G){var w=1;var H=this.size/2*w;var E=this.size/2*w;var v=h.extend(true,{},this.options,{closePath:false});var F=[[A-H,z-E],[A+H,z+E]];var B=[[A-H,z+E],[A+H,z-E]];if(this.shadow){this.shadowRenderer.draw(D,F,{closePath:false});this.shadowRenderer.draw(D,B,{closePath:false})}this.shapeRenderer.draw(D,F,v);this.shapeRenderer.draw(D,B,v);D.restore()};h.jqplot.MarkerRenderer.prototype.drawDash=function(z,w,C,B,E){var v=1;var F=this.size/2*v;var D=this.size/2*v;var A=[[z-F,w],[z+F,w]];if(this.shadow){this.shadowRenderer.draw(C,A)}this.shapeRenderer.draw(C,A,E);C.restore()};h.jqplot.MarkerRenderer.prototype.drawSquare=function(z,w,C,B,E){var v=1;var F=this.size/2/v;var D=this.size/2*v;var A=[[z-F,w-D],[z-F,w+D],[z+F,w+D],[z+F,w-D]];if(this.shadow){this.shadowRenderer.draw(C,A)}this.shapeRenderer.draw(C,A,E);C.restore()};h.jqplot.MarkerRenderer.prototype.drawCircle=function(w,E,A,D,B){var v=this.size/2;var z=2*Math.PI;var C=[w,E,v,0,z,true];if(this.shadow){this.shadowRenderer.draw(A,C)}this.shapeRenderer.draw(A,C,B);A.restore()};h.jqplot.MarkerRenderer.prototype.draw=function(v,A,w,z){z=z||{};switch(this.style){case"diamond":this.drawDiamond(v,A,w,false,z);break;case"filledDiamond":this.drawDiamond(v,A,w,true,z);break;case"circle":this.drawCircle(v,A,w,false,z);break;case"filledCircle":this.drawCircle(v,A,w,true,z);break;case"square":this.drawSquare(v,A,w,false,z);break;case"filledSquare":this.drawSquare(v,A,w,true,z);break;case"x":this.drawX(v,A,w,true,z);break;case"plus":this.drawPlus(v,A,w,true,z);break;case"dash":this.drawDash(v,A,w,true,z);break;default:this.drawDiamond(v,A,w,false,z);break}};h.jqplot.ShadowRenderer=function(v){this.angle=45;this.offset=1;this.alpha=0.07;this.lineWidth=1.5;this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.depth=3;this.isarc=false;h.extend(true,this,v)};h.jqplot.ShadowRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.ShadowRenderer.prototype.draw=function(E,C,F){E.save();var v=(F!=null)?F:{};var D=(v.fill!=null)?v.fill:this.fill;var B=(v.closePath!=null)?v.closePath:this.closePath;var y=(v.offset!=null)?v.offset:this.offset;var w=(v.alpha!=null)?v.alpha:this.alpha;var A=(v.depth!=null)?v.depth:this.depth;E.lineWidth=(v.lineWidth!=null)?v.lineWidth:this.lineWidth;E.lineJoin=(v.lineJoin!=null)?v.lineJoin:this.lineJoin;E.lineCap=(v.lineCap!=null)?v.lineCap:this.lineCap;E.strokeStyle="rgba(0,0,0,"+w+")";E.fillStyle="rgba(0,0,0,"+w+")";for(var x=0;x<A;x++){E.translate(Math.cos(this.angle*Math.PI/180)*y,Math.sin(this.angle*Math.PI/180)*y);E.beginPath();if(this.isarc){E.arc(C[0],C[1],C[2],C[3],C[4],true)}else{E.moveTo(C[0][0],C[0][1]);for(var z=1;z<C.length;z++){E.lineTo(C[z][0],C[z][1])}}if(B){E.closePath()}if(D){E.fill()}else{E.stroke()}}E.restore()};h.jqplot.ShapeRenderer=function(v){this.lineWidth=1.5;this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.isarc=false;this.fillRect=false;this.strokeRect=false;this.clearRect=false;this.strokeStyle="#999999";this.fillStyle="#999999";h.extend(true,this,v)};h.jqplot.ShapeRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.ShapeRenderer.prototype.draw=function(D,B,F){D.save();var v=(F!=null)?F:{};var C=(v.fill!=null)?v.fill:this.fill;var z=(v.closePath!=null)?v.closePath:this.closePath;var A=(v.fillRect!=null)?v.fillRect:this.fillRect;var x=(v.strokeRect!=null)?v.strokeRect:this.strokeRect;var w=(v.clearRect!=null)?v.clearRect:this.clearRect;var E=(v.isarc!=null)?v.isarc:this.isarc;D.lineWidth=v.lineWidth||this.lineWidth;D.lineJoin=v.lineJoing||this.lineJoin;D.lineCap=v.lineCap||this.lineCap;D.strokeStyle=(v.strokeStyle||v.color)||this.strokeStyle;D.fillStyle=v.fillStyle||this.fillStyle;D.beginPath();if(E){D.arc(B[0],B[1],B[2],B[3],B[4],true);if(z){D.closePath()}if(C){D.fill()}else{D.stroke()}D.restore();return}else{if(w){D.clearRect(B[0],B[1],B[2],B[3]);D.restore();return}else{if(A||x){if(A){D.fillRect(B[0],B[1],B[2],B[3])}if(x){D.strokeRect(B[0],B[1],B[2],B[3]);D.restore();return}}else{D.moveTo(B[0][0],B[0][1]);for(var y=1;y<B.length;y++){D.lineTo(B[y][0],B[y][1])}if(z){D.closePath()}if(C){D.fill()}else{D.stroke()}}}}D.restore()};h.jqplot.TableLegendRenderer=function(){};h.jqplot.TableLegendRenderer.prototype.init=function(v){h.extend(true,this,v)};h.jqplot.TableLegendRenderer.prototype.addrow=function(x,w,A){var v=(A)?this.rowSpacing:"0";var z=h('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);h('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+v+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+w+';"></div></div></td>').appendTo(z);var y=h('<td class="jqplot-table-legend" style="padding-top:'+v+';"></td>');y.appendTo(z);if(this.escapeHtml){y.text(x)}else{y.html(x)}};h.jqplot.TableLegendRenderer.prototype.draw=function(){var B=this;if(this.show){var z=this._series;var D="position:absolute;";D+=(this.background)?"background:"+this.background+";":"";D+=(this.border)?"border:"+this.border+";":"";D+=(this.fontSize)?"font-size:"+this.fontSize+";":"";D+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";D+=(this.textColor)?"color:"+this.textColor+";":"";this._elem=h('<table class="jqplot-table-legend" style="'+D+'"></table>');var v=false;for(var A=0;A<z.length;A++){s=z[A];if(s.show&&s.showLabel){var y=s.label.toString();if(y){var w=s.color;if(s._stack&&!s.fill){w=""}this.renderer.addrow.call(this,y,w,v);v=true}for(var x=0;x<h.jqplot.addLegendRowHooks.length;x++){var C=h.jqplot.addLegendRowHooks[x].call(this,s);if(C){this.renderer.addrow.call(this,C.label,C.color,v);v=true}}}}}return this._elem};h.jqplot.TableLegendRenderer.prototype.pack=function(y){if(this.show){var x={_top:y.top,_left:y.left,_right:y.right,_bottom:this._plotDimensions.height-y.bottom};switch(this.location){case"nw":var w=x._left+this.xoffset;var v=x._top+this.yoffset;this._elem.css("left",w);this._elem.css("top",v);break;case"n":var w=(y.left+(this._plotDimensions.width-y.right))/2-this.getWidth()/2;var v=x._top+this.yoffset;this._elem.css("left",w);this._elem.css("top",v);break;case"ne":var w=y.right+this.xoffset;var v=x._top+this.yoffset;this._elem.css({right:w,top:v});break;case"e":var w=y.right+this.xoffset;var v=(y.top+(this._plotDimensions.height-y.bottom))/2-this.getHeight()/2;this._elem.css({right:w,top:v});break;case"se":var w=y.right+this.xoffset;var v=y.bottom+this.yoffset;this._elem.css({right:w,bottom:v});break;case"s":var w=(y.left+(this._plotDimensions.width-y.right))/2-this.getWidth()/2;var v=y.bottom+this.yoffset;this._elem.css({left:w,bottom:v});break;case"sw":var w=x._left+this.xoffset;var v=y.bottom+this.yoffset;this._elem.css({left:w,bottom:v});break;case"w":var w=x._left+this.xoffset;var v=(y.top+(this._plotDimensions.height-y.bottom))/2-this.getHeight()/2;this._elem.css({left:w,top:v});break;default:var w=x._right-this.xoffset;var v=x._bottom+this.yoffset;this._elem.css({right:w,bottom:v});break}}};h.jqplot.sprintf=function(){function A(G,C,D,F){var E=(G.length>=C)?"":Array(1+C-G.length>>>0).join(D);return F?G+E:E+G}function x(H,G,J,E,F,D){var I=E-H.length;if(I>0){var C=" ";if(D){C=" "}if(J||!F){H=A(H,E,C,J)}else{H=H.slice(0,G.length)+A("",I,"0",true)+H.slice(G.length)}}return H}function B(K,D,I,E,C,H,J,G){var F=K>>>0;I=I&&F&&{"2":"0b","8":"0","16":"0x"}[D]||"";K=I+A(F.toString(D),H||0,"0",false);return x(K,I,E,C,J,G)}function v(G,H,E,C,F,D){if(C!=null){G=G.slice(0,C)}return x(G,"",H,E,F,D)}var w=arguments,y=0,z=w[y++];return z.replace(h.jqplot.sprintf.regex,function(V,I,J,M,X,T,G){if(V=="%%"){return"%"}var N=false,K="",L=false,U=false,H=false;for(var S=0;J&&S<J.length;S++){switch(J.charAt(S)){case" ":K=" ";break;case"+":K="+";break;case"-":N=true;break;case"0":L=true;break;case"#":U=true;break;case"&":H=true;break}}if(!M){M=0}else{if(M=="*"){M=+w[y++]}else{if(M.charAt(0)=="*"){M=+w[M.slice(1,-1)]}else{M=+M}}}if(M<0){M=-M;N=true}if(!isFinite(M)){throw new Error("$.jqplot.sprintf: (minimum-)width must be finite")}if(!T){T="fFeE".indexOf(G)>-1?6:(G=="d")?0:void (0)}else{if(T=="*"){T=+w[y++]}else{if(T.charAt(0)=="*"){T=+w[T.slice(1,-1)]}else{T=+T}}}var P=I?w[I.slice(0,-1)]:w[y++];switch(G){case"s":if(P==null){return""}return v(String(P),N,M,T,L,H);case"c":return v(String.fromCharCode(+P),N,M,T,L,H);case"b":return B(P,2,U,N,M,T,L,H);case"o":return B(P,8,U,N,M,T,L,H);case"x":return B(P,16,U,N,M,T,L,H);case"X":return B(P,16,U,N,M,T,L,H).toUpperCase();case"u":return B(P,10,U,N,M,T,L,H);case"i":case"d":var E=parseInt(+P,10);if(isNaN(E)){return""}var R=E<0?"-":K;P=R+A(String(Math.abs(E)),T,"0",false);return x(P,R,N,M,L,H);case"e":case"E":case"f":case"F":case"g":case"G":var E=+P;if(isNaN(E)){return""}var R=E<0?"-":K;var F=["toExponential","toFixed","toPrecision"]["efg".indexOf(G.toLowerCase())];var W=["toString","toUpperCase"]["eEfFgG".indexOf(G)%2];P=R+Math.abs(E)[F](T);return x(P,R,N,M,L,H)[W]();case"p":case"P":var E=+P;if(isNaN(E)){return""}var R=E<0?"-":K;var O=String(Number(Math.abs(E)).toExponential()).split(/e|E/);var D=(O[0].indexOf(".")!=-1)?O[0].length-1:O[0].length;var Q=(O[1]<0)?-O[1]-1:0;if(Math.abs(E)<1){if(D+Q<=T){P=R+Math.abs(E).toPrecision(D)}else{if(D<=T-1){P=R+Math.abs(E).toExponential(D-1)}else{P=R+Math.abs(E).toExponential(T-1)}}}else{var C=(D<=T)?D:T;P=R+Math.abs(E).toPrecision(C)}var W=["toString","toUpperCase"]["pP".indexOf(G)%2];return x(P,R,N,M,L,H)[W]();case"n":return"";default:return V}})};h.jqplot.sprintf.regex=/%%|%(\d+\$)?([-+#0& ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([nAscboxXuidfegpEGP])/g})(jQuery);/** - * Copyright (c) 2009 Chris Leonello +(function(G){var q;G.fn.emptyForce=function(){for(var aa=0,ab;(ab=G(this)[aa])!=null;aa++){if(ab.nodeType===1){jQuery.cleanData(ab.getElementsByTagName("*"))}if(G.jqplot_use_excanvas){ab.outerHTML=""}else{while(ab.firstChild){ab.removeChild(ab.firstChild)}}ab=null}return G(this)};G.fn.removeChildForce=function(aa){while(aa.firstChild){this.removeChildForce(aa.firstChild);aa.removeChild(aa.firstChild)}};G.jqplot=function(ag,ad,ab){var ac,aa;if(ab==null){if(jQuery.isArray(ad)){ac=ad;aa=null}else{if(typeof(ad)==="object"){ac=null;aa=ad}}}else{ac=ad;aa=ab}var af=new M();G("#"+ag).removeClass("jqplot-error");if(G.jqplot.config.catchErrors){try{af.init(ag,ac,aa);af.draw();af.themeEngine.init.call(af);return af}catch(ae){var ah=G.jqplot.config.errorMessage||ae.message;G("#"+ag).append('<div class="jqplot-error-message">'+ah+"</div>");G("#"+ag).addClass("jqplot-error");document.getElementById(ag).style.background=G.jqplot.config.errorBackground;document.getElementById(ag).style.border=G.jqplot.config.errorBorder;document.getElementById(ag).style.fontFamily=G.jqplot.config.errorFontFamily;document.getElementById(ag).style.fontSize=G.jqplot.config.errorFontSize;document.getElementById(ag).style.fontStyle=G.jqplot.config.errorFontStyle;document.getElementById(ag).style.fontWeight=G.jqplot.config.errorFontWeight}}else{af.init(ag,ac,aa);af.draw();af.themeEngine.init.call(af);return af}};G.jqplot.version="1.0.0b2_r947";G.jqplot.CanvasManager=function(){if(typeof G.jqplot.CanvasManager.canvases=="undefined"){G.jqplot.CanvasManager.canvases=[];G.jqplot.CanvasManager.free=[]}var aa=[];this.getCanvas=function(){var ad;var ac=true;if(!G.jqplot.use_excanvas){for(var ae=0,ab=G.jqplot.CanvasManager.canvases.length;ae<ab;ae++){if(G.jqplot.CanvasManager.free[ae]===true){ac=false;ad=G.jqplot.CanvasManager.canvases[ae];G.jqplot.CanvasManager.free[ae]=false;aa.push(ae);break}}}if(ac){ad=document.createElement("canvas");aa.push(G.jqplot.CanvasManager.canvases.length);G.jqplot.CanvasManager.canvases.push(ad);G.jqplot.CanvasManager.free.push(false)}return ad};this.initCanvas=function(ab){if(G.jqplot.use_excanvas){return window.G_vmlCanvasManager.initElement(ab)}return ab};this.freeAllCanvases=function(){for(var ac=0,ab=aa.length;ac<ab;ac++){this.freeCanvas(aa[ac])}aa=[]};this.freeCanvas=function(ab){if(G.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==q){window.G_vmlCanvasManager.uninitElement(G.jqplot.CanvasManager.canvases[ab]);G.jqplot.CanvasManager.canvases[ab]=null}else{var ac=G.jqplot.CanvasManager.canvases[ab];ac.getContext("2d").clearRect(0,0,ac.width,ac.height);G(ac).unbind().removeAttr("class").removeAttr("style");G(ac).css({left:"",top:"",position:""});ac.width=0;ac.height=0;G.jqplot.CanvasManager.free[ab]=true}}};G.jqplot.log=function(){if(window.console){window.console.log.apply(window.console,arguments)}};G.jqplot.config={enablePlugins:false,defaultHeight:300,defaultWidth:400,UTCAdjust:false,timezoneOffset:new Date(new Date().getTimezoneOffset()*60000),errorMessage:"",errorBackground:"",errorBorder:"",errorFontFamily:"",errorFontSize:"",errorFontStyle:"",errorFontWeight:"",catchErrors:false,defaultTickFormatString:"%.1f",defaultColors:["#4bb2c5","#EAA228","#c5b47f","#579575","#839557","#958c12","#953579","#4b5de4","#d8b83f","#ff5800","#0085cc","#c747a3","#cddf54","#FBD178","#26B4E3","#bd70c7"],defaultNegativeColors:["#498991","#C08840","#9F9274","#546D61","#646C4A","#6F6621","#6E3F5F","#4F64B0","#A89050","#C45923","#187399","#945381","#959E5C","#C7AF7B","#478396","#907294"],dashLength:4,gapLength:4,dotGapLength:2.5,srcLocation:"jqplot/src/",pluginLocation:"jqplot/src/plugins/"};G.jqplot.arrayMax=function(aa){return Math.max.apply(Math,aa)};G.jqplot.arrayMin=function(aa){return Math.min.apply(Math,aa)};G.jqplot.enablePlugins=G.jqplot.config.enablePlugins;G.jqplot.support_canvas=function(){if(typeof G.jqplot.support_canvas.result=="undefined"){G.jqplot.support_canvas.result=!!document.createElement("canvas").getContext}return G.jqplot.support_canvas.result};G.jqplot.support_canvas_text=function(){if(typeof G.jqplot.support_canvas_text.result=="undefined"){if(window.G_vmlCanvasManager!==q&&window.G_vmlCanvasManager._version>887){G.jqplot.support_canvas_text.result=true}else{G.jqplot.support_canvas_text.result=!!(document.createElement("canvas").getContext&&typeof document.createElement("canvas").getContext("2d").fillText=="function")}}return G.jqplot.support_canvas_text.result};G.jqplot.use_excanvas=(G.browser.msie&&!G.jqplot.support_canvas())?true:false;G.jqplot.preInitHooks=[];G.jqplot.postInitHooks=[];G.jqplot.preParseOptionsHooks=[];G.jqplot.postParseOptionsHooks=[];G.jqplot.preDrawHooks=[];G.jqplot.postDrawHooks=[];G.jqplot.preDrawSeriesHooks=[];G.jqplot.postDrawSeriesHooks=[];G.jqplot.preDrawLegendHooks=[];G.jqplot.addLegendRowHooks=[];G.jqplot.preSeriesInitHooks=[];G.jqplot.postSeriesInitHooks=[];G.jqplot.preParseSeriesOptionsHooks=[];G.jqplot.postParseSeriesOptionsHooks=[];G.jqplot.eventListenerHooks=[];G.jqplot.preDrawSeriesShadowHooks=[];G.jqplot.postDrawSeriesShadowHooks=[];G.jqplot.ElemContainer=function(){this._elem;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null}};G.jqplot.ElemContainer.prototype.createElement=function(ad,af,ab,ac,ag){this._offsets=af;var aa=ab||"jqplot";var ae=document.createElement(ad);this._elem=G(ae);this._elem.addClass(aa);this._elem.css(ac);this._elem.attr(ag);ae=null;return this._elem};G.jqplot.ElemContainer.prototype.getWidth=function(){if(this._elem){return this._elem.outerWidth(true)}else{return null}};G.jqplot.ElemContainer.prototype.getHeight=function(){if(this._elem){return this._elem.outerHeight(true)}else{return null}};G.jqplot.ElemContainer.prototype.getPosition=function(){if(this._elem){return this._elem.position()}else{return{top:null,left:null,bottom:null,right:null}}};G.jqplot.ElemContainer.prototype.getTop=function(){return this.getPosition().top};G.jqplot.ElemContainer.prototype.getLeft=function(){return this.getPosition().left};G.jqplot.ElemContainer.prototype.getBottom=function(){return this._elem.css("bottom")};G.jqplot.ElemContainer.prototype.getRight=function(){return this._elem.css("right")};function r(aa){G.jqplot.ElemContainer.call(this);this.name=aa;this._series=[];this.show=false;this.tickRenderer=G.jqplot.AxisTickRenderer;this.tickOptions={};this.labelRenderer=G.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=G.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._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={}}r.prototype=new G.jqplot.ElemContainer();r.prototype.constructor=r;r.prototype.init=function(){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)};r.prototype.draw=function(aa,ab){if(this.__ticks){this.__ticks=null}return this.renderer.draw.call(this,aa,ab)};r.prototype.set=function(){this.renderer.set.call(this)};r.prototype.pack=function(ab,aa){if(this.show){this.renderer.pack.call(this,ab,aa)}if(this._min==null){this._min=this.min;this._max=this.max;this._tickInterval=this.tickInterval;this._numberTicks=this.numberTicks;this.__ticks=this._ticks}};r.prototype.reset=function(){this.renderer.reset.call(this)};r.prototype.resetScale=function(aa){G.extend(true,this,{min:null,max:null,numberTicks:null,tickInterval:null,_ticks:[],ticks:[]},aa);this.resetDataBounds()};r.prototype.resetDataBounds=function(){var ah=this._dataBounds;ah.min=null;ah.max=null;var ab,ai,af;var ac=(this.show)?true:false;for(var ae=0;ae<this._series.length;ae++){ai=this._series[ae];af=ai._plotData;if(ai._type==="line"&&ai.renderer.bands.show&&this.name.charAt(0)!=="x"){af=[[0,ai.renderer.bands._min],[1,ai.renderer.bands._max]]}var aa=1,ag=1;if(ai._type!=null&&ai._type=="ohlc"){aa=3;ag=2}for(var ad=0,ab=af.length;ad<ab;ad++){if(this.name=="xaxis"||this.name=="x2axis"){if((af[ad][0]!=null&&af[ad][0]<ah.min)||ah.min==null){ah.min=af[ad][0]}if((af[ad][0]!=null&&af[ad][0]>ah.max)||ah.max==null){ah.max=af[ad][0]}}else{if((af[ad][aa]!=null&&af[ad][aa]<ah.min)||ah.min==null){ah.min=af[ad][aa]}if((af[ad][ag]!=null&&af[ad][ag]>ah.max)||ah.max==null){ah.max=af[ad][ag]}}}if(ac&&ai.renderer.constructor!==G.jqplot.BarRenderer){ac=false}else{if(ac&&this._options.hasOwnProperty("forceTickAt0")&&this._options.forceTickAt0==false){ac=false}else{if(ac&&ai.renderer.constructor===G.jqplot.BarRenderer){if(ai.barDirection=="vertical"&&this.name!="xaxis"&&this.name!="x2axis"){if(this._options.pad!=null||this._options.padMin!=null){ac=false}}else{if(ai.barDirection=="horizontal"&&(this.name=="xaxis"||this.name=="x2axis")){if(this._options.pad!=null||this._options.padMin!=null){ac=false}}}}}}}if(ac&&this.renderer.constructor===G.jqplot.LinearAxisRenderer&&ah.min>=0){this.padMin=1;this.forceTickAt0=true}};function m(aa){G.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=G.jqplot.TableLegendRenderer;this.rendererOptions={};this.preDraw=false;this.marginTop=null;this.marginRight=null;this.marginBottom=null;this.marginLeft=null;this.escapeHtml=false;this._series=[];G.extend(true,this,aa)}m.prototype=new G.jqplot.ElemContainer();m.prototype.constructor=m;m.prototype.setOptions=function(aa){G.extend(true,this,aa);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}};m.prototype.init=function(){this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions)};m.prototype.draw=function(ab){for(var aa=0;aa<G.jqplot.preDrawLegendHooks.length;aa++){G.jqplot.preDrawLegendHooks[aa].call(this,ab)}return this.renderer.draw.call(this,ab)};m.prototype.pack=function(aa){this.renderer.pack.call(this,aa)};function t(aa){G.jqplot.ElemContainer.call(this);this.text=aa;this.show=true;this.fontFamily;this.fontSize;this.textAlign;this.textColor;this.renderer=G.jqplot.DivTitleRenderer;this.rendererOptions={};this.escapeHtml=false}t.prototype=new G.jqplot.ElemContainer();t.prototype.constructor=t;t.prototype.init=function(){this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions)};t.prototype.draw=function(aa){return this.renderer.draw.call(this,aa)};t.prototype.pack=function(){this.renderer.pack.call(this)};function N(){G.jqplot.ElemContainer.call(this);this.show=true;this.xaxis="xaxis";this._xaxis;this.yaxis="yaxis";this._yaxis;this.gridBorderWidth=2;this.renderer=G.jqplot.LineRenderer;this.rendererOptions={};this.data=[];this.gridData=[];this.label="";this.showLabel=true;this.color;this.negativeColor;this.lineWidth=2.5;this.lineJoin="round";this.lineCap="round";this.linePattern="solid";this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.25;this.shadowDepth=3;this.shadowAlpha="0.1";this.breakOnNull=false;this.markerRenderer=G.jqplot.MarkerRenderer;this.markerOptions={};this.showLine=true;this.showMarker=true;this.index;this.fill=false;this.fillColor;this.fillAlpha;this.fillAndStroke=false;this.disableStack=false;this._stack=false;this.neighborThreshold=4;this.fillToZero=false;this.fillToValue=0;this.fillAxis="y";this.useNegativeColors=true;this._stackData=[];this._plotData=[];this._plotValues={x:[],y:[]};this._intervals={x:{},y:{}};this._prevPlotData=[];this._prevGridData=[];this._stackAxis="y";this._primaryAxis="_xaxis";this.canvas=new G.jqplot.GenericCanvas();this.shadowCanvas=new G.jqplot.GenericCanvas();this.plugins={};this._sumy=0;this._sumx=0;this._type=""}N.prototype=new G.jqplot.ElemContainer();N.prototype.constructor=N;N.prototype.init=function(ac,ag,ae){this.index=ac;this.gridBorderWidth=ag;var af=this.data;var ab=[],ad;for(ad=0;ad<af.length;ad++){if(!this.breakOnNull){if(af[ad]==null||af[ad][0]==null||af[ad][1]==null){continue}else{ab.push(af[ad])}}else{ab.push(af[ad])}}this.data=ab;if(!this.color&&this.show){this.color=ae.colorGenerator.get(this.index)}if(!this.negativeColor&&this.show){this.negativeColor=ae.negativeColorGenerator.get(this.index)}if(!this.fillColor){this.fillColor=this.color}if(this.fillAlpha){var aa=G.jqplot.normalize2rgb(this.fillColor);var aa=G.jqplot.getColorComponents(aa);this.fillColor="rgba("+aa[0]+","+aa[1]+","+aa[2]+","+this.fillAlpha+")"}this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions,ae);this.markerRenderer=new this.markerRenderer();if(!this.markerOptions.color){this.markerOptions.color=this.color}if(this.markerOptions.show==null){this.markerOptions.show=this.showMarker}this.showMarker=this.markerOptions.show;this.markerRenderer.init(this.markerOptions)};N.prototype.draw=function(ag,ad,af){var ab=(ad==q)?{}:ad;ag=(ag==q)?this.canvas._ctx:ag;var aa,ae,ac;for(aa=0;aa<G.jqplot.preDrawSeriesHooks.length;aa++){G.jqplot.preDrawSeriesHooks[aa].call(this,ag,ab)}if(this.show){this.renderer.setGridData.call(this,af);if(!ab.preventJqPlotSeriesDrawTrigger){G(ag.canvas).trigger("jqplotSeriesDraw",[this.data,this.gridData])}ae=[];if(ab.data){ae=ab.data}else{if(!this._stack){ae=this.data}else{ae=this._plotData}}ac=ab.gridData||this.renderer.makeGridData.call(this,ae,af);if(this._type==="line"&&this.renderer.smooth&&this.renderer._smoothedData.length){ac=this.renderer._smoothedData}this.renderer.draw.call(this,ag,ac,ab,af)}for(aa=0;aa<G.jqplot.postDrawSeriesHooks.length;aa++){G.jqplot.postDrawSeriesHooks[aa].call(this,ag,ab)}ag=ad=af=aa=ae=ac=null};N.prototype.drawShadow=function(ag,ad,af){var ab=(ad==q)?{}:ad;ag=(ag==q)?this.shadowCanvas._ctx:ag;var aa,ae,ac;for(aa=0;aa<G.jqplot.preDrawSeriesShadowHooks.length;aa++){G.jqplot.preDrawSeriesShadowHooks[aa].call(this,ag,ab)}if(this.shadow){this.renderer.setGridData.call(this,af);ae=[];if(ab.data){ae=ab.data}else{if(!this._stack){ae=this.data}else{ae=this._plotData}}ac=ab.gridData||this.renderer.makeGridData.call(this,ae,af);this.renderer.drawShadow.call(this,ag,ac,ab)}for(aa=0;aa<G.jqplot.postDrawSeriesShadowHooks.length;aa++){G.jqplot.postDrawSeriesShadowHooks[aa].call(this,ag,ab)}ag=ad=af=aa=ae=ac=null};N.prototype.toggleDisplay=function(ab){var aa,ac;if(ab.data.series){aa=ab.data.series}else{aa=this}if(ab.data.speed){ac=ab.data.speed}if(ac){if(aa.canvas._elem.is(":hidden")){aa.canvas._elem.removeClass("jqplot-series-hidden");if(aa.shadowCanvas._elem){aa.shadowCanvas._elem.fadeIn(ac)}aa.canvas._elem.fadeIn(ac);aa.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+aa.index).fadeIn(ac)}else{aa.canvas._elem.addClass("jqplot-series-hidden");if(aa.shadowCanvas._elem){aa.shadowCanvas._elem.fadeOut(ac)}aa.canvas._elem.fadeOut(ac);aa.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+aa.index).fadeOut(ac)}}else{if(aa.canvas._elem.is(":hidden")){aa.canvas._elem.removeClass("jqplot-series-hidden");if(aa.shadowCanvas._elem){aa.shadowCanvas._elem.show()}aa.canvas._elem.show();aa.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+aa.index).show()}else{aa.canvas._elem.addClass("jqplot-series-hidden");if(aa.shadowCanvas._elem){aa.shadowCanvas._elem.hide()}aa.canvas._elem.hide();aa.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+aa.index).hide()}}};function H(){G.jqplot.ElemContainer.call(this);this.drawGridlines=true;this.gridLineColor="#cccccc";this.gridLineWidth=1;this.background="#fffdf6";this.borderColor="#999999";this.borderWidth=2;this.drawBorder=true;this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.5;this.shadowWidth=3;this.shadowDepth=3;this.shadowColor=null;this.shadowAlpha="0.07";this._left;this._top;this._right;this._bottom;this._width;this._height;this._axes=[];this.renderer=G.jqplot.CanvasGridRenderer;this.rendererOptions={};this._offsets={top:null,bottom:null,left:null,right:null}}H.prototype=new G.jqplot.ElemContainer();H.prototype.constructor=H;H.prototype.init=function(){this.renderer=new this.renderer();this.renderer.init.call(this,this.rendererOptions)};H.prototype.createElement=function(aa,ab){this._offsets=aa;return this.renderer.createElement.call(this,ab)};H.prototype.draw=function(){this.renderer.draw.call(this)};G.jqplot.GenericCanvas=function(){G.jqplot.ElemContainer.call(this);this._ctx};G.jqplot.GenericCanvas.prototype=new G.jqplot.ElemContainer();G.jqplot.GenericCanvas.prototype.constructor=G.jqplot.GenericCanvas;G.jqplot.GenericCanvas.prototype.createElement=function(ae,ac,ab,af){this._offsets=ae;var aa="jqplot";if(ac!=q){aa=ac}var ad;ad=af.canvasManager.getCanvas();if(ab!=null){this._plotDimensions=ab}ad.width=this._plotDimensions.width-this._offsets.left-this._offsets.right;ad.height=this._plotDimensions.height-this._offsets.top-this._offsets.bottom;this._elem=G(ad);this._elem.css({position:"absolute",left:this._offsets.left,top:this._offsets.top});this._elem.addClass(aa);ad=af.canvasManager.initCanvas(ad);ad=null;return this._elem};G.jqplot.GenericCanvas.prototype.setContext=function(){this._ctx=this._elem.get(0).getContext("2d");return this._ctx};G.jqplot.GenericCanvas.prototype.resetCanvas=function(){if(this._elem){if(G.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==q){window.G_vmlCanvasManager.uninitElement(this._elem.get(0))}this._elem.emptyForce()}this._ctx=null};G.jqplot.HooksManager=function(){this.hooks=[]};G.jqplot.HooksManager.prototype.addOnce=function(ab){var ac=false,aa;for(aa=0;aa<this.hooks.length;aa++){if(this.hooks[aa][0]==ab){ac=true}}if(!ac){this.hooks.push(ab)}};G.jqplot.HooksManager.prototype.add=function(aa){this.hooks.push(aa)};G.jqplot.EventListenerManager=function(){this.hooks=[]};G.jqplot.EventListenerManager.prototype.addOnce=function(ad,ac){var ae=false,ab,aa;for(aa=0;aa<this.hooks.length;aa++){ab=this.hooks[aa];if(ab[0]==ad&&ab[1]==ac){ae=true}}if(!ae){this.hooks.push([ad,ac])}};G.jqplot.EventListenerManager.prototype.add=function(ab,aa){this.hooks.push([ab,aa])};var P=["yMidAxis","xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];function M(){this.data=[];this.dataRenderer;this.dataRendererOptions;this.noDataIndicator={show:false,indicator:"Loading Data...",axes:{xaxis:{min:0,max:10,tickInterval:2,show:true},yaxis:{min:0,max:12,tickInterval:3,show:true}}};this.targetId=null;this.target=null;this.defaults={axesDefaults:{},axes:{xaxis:{},yaxis:{},x2axis:{},y2axis:{},y3axis:{},y4axis:{},y5axis:{},y6axis:{},y7axis:{},y8axis:{},y9axis:{},yMidAxis:{}},seriesDefaults:{},series:[]};this.series=[];this.axes={xaxis:new r("xaxis"),yaxis:new r("yaxis"),x2axis:new r("x2axis"),y2axis:new r("y2axis"),y3axis:new r("y3axis"),y4axis:new r("y4axis"),y5axis:new r("y5axis"),y6axis:new r("y6axis"),y7axis:new r("y7axis"),y8axis:new r("y8axis"),y9axis:new r("y9axis"),yMidAxis:new r("yMidAxis")};this.grid=new H();this.legend=new m();this.baseCanvas=new G.jqplot.GenericCanvas();this.seriesStack=[];this.previousSeriesStack=[];this.eventCanvas=new G.jqplot.GenericCanvas();this._width=null;this._height=null;this._plotDimensions={height:null,width:null};this._gridPadding={top:null,right:null,bottom:null,left:null};this._defaultGridPadding={top:10,right:10,bottom:23,left:10};this.syncXTicks=true;this.syncYTicks=true;this.seriesColors=G.jqplot.config.defaultColors;this.negativeSeriesColors=G.jqplot.config.defaultNegativeColors;this.sortData=true;var ac=0;this.textColor;this.fontFamily;this.fontSize;this.title=new t();this.options={};this.stackSeries=false;this.defaultAxisStart=1;this._stackData=[];this._plotData=[];this.plugins={};this._drawCount=0;this.drawIfHidden=false;this.captureRightClick=false;this.themeEngine=new G.jqplot.ThemeEngine();this._sumy=0;this._sumx=0;this.preInitHooks=new G.jqplot.HooksManager();this.postInitHooks=new G.jqplot.HooksManager();this.preParseOptionsHooks=new G.jqplot.HooksManager();this.postParseOptionsHooks=new G.jqplot.HooksManager();this.preDrawHooks=new G.jqplot.HooksManager();this.postDrawHooks=new G.jqplot.HooksManager();this.preDrawSeriesHooks=new G.jqplot.HooksManager();this.postDrawSeriesHooks=new G.jqplot.HooksManager();this.preDrawLegendHooks=new G.jqplot.HooksManager();this.addLegendRowHooks=new G.jqplot.HooksManager();this.preSeriesInitHooks=new G.jqplot.HooksManager();this.postSeriesInitHooks=new G.jqplot.HooksManager();this.preParseSeriesOptionsHooks=new G.jqplot.HooksManager();this.postParseSeriesOptionsHooks=new G.jqplot.HooksManager();this.eventListenerHooks=new G.jqplot.EventListenerManager();this.preDrawSeriesShadowHooks=new G.jqplot.HooksManager();this.postDrawSeriesShadowHooks=new G.jqplot.HooksManager();this.colorGenerator=new G.jqplot.ColorGenerator();this.negativeColorGenerator=new G.jqplot.ColorGenerator();this.canvasManager=new G.jqplot.CanvasManager();this.init=function(ak,ah,am){am=am||{};for(var ai=0;ai<G.jqplot.preInitHooks.length;ai++){G.jqplot.preInitHooks[ai].call(this,ak,ah,am)}for(var ai=0;ai<this.preInitHooks.hooks.length;ai++){this.preInitHooks.hooks[ai].call(this,ak,ah,am)}this.targetId="#"+ak;this.target=G("#"+ak);this.target.removeClass("jqplot-error");if(!this.target.get(0)){throw"No plot target specified"}if(this.target.css("position")=="static"){this.target.css("position","relative")}if(!this.target.hasClass("jqplot-target")){this.target.addClass("jqplot-target")}if(!this.target.height()){var aj;if(am&&am.height){aj=parseInt(am.height,10)}else{if(this.target.attr("data-height")){aj=parseInt(this.target.attr("data-height"),10)}else{aj=parseInt(G.jqplot.config.defaultHeight,10)}}this._height=aj;this.target.css("height",aj+"px")}else{this._height=aj=this.target.height()}if(!this.target.width()){var al;if(am&&am.width){al=parseInt(am.width,10)}else{if(this.target.attr("data-width")){al=parseInt(this.target.attr("data-width"),10)}else{al=parseInt(G.jqplot.config.defaultWidth,10)}}this._width=al;this.target.css("width",al+"px")}else{this._width=al=this.target.width()}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Canvas dimension not set"}if(am.dataRenderer&&jQuery.isFunction(am.dataRenderer)){if(am.dataRendererOptions){this.dataRendererOptions=am.dataRendererOptions}this.dataRenderer=am.dataRenderer;ah=this.dataRenderer(ah,this,this.dataRendererOptions)}if(am.noDataIndicator&&jQuery.isPlainObject(am.noDataIndicator)){G.extend(true,this.noDataIndicator,am.noDataIndicator)}if(ah==null||jQuery.isArray(ah)==false||ah.length==0||jQuery.isArray(ah[0])==false||ah[0].length==0){if(this.noDataIndicator.show==false){throw {name:"DataError",message:"No data to plot."}}else{for(var ae in this.noDataIndicator.axes){for(var af in this.noDataIndicator.axes[ae]){this.axes[ae][af]=this.noDataIndicator.axes[ae][af]}}this.postDrawHooks.add(function(){var at=this.eventCanvas.getHeight();var ap=this.eventCanvas.getWidth();var ao=G('<div class="jqplot-noData-container" style="position:absolute;"></div>');this.target.append(ao);ao.height(at);ao.width(ap);ao.css("top",this.eventCanvas._offsets.top);ao.css("left",this.eventCanvas._offsets.left);var ar=G('<div class="jqplot-noData-contents" style="text-align:center; position:relative; margin-left:auto; margin-right:auto;"></div>');ao.append(ar);ar.html(this.noDataIndicator.indicator);var aq=ar.height();var an=ar.width();ar.height(aq);ar.width(an);ar.css("top",(at-aq)/2+"px")})}}this.data=ah;this.parseOptions(am);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;for(var ai=0;ai<this.series.length;ai++){this.seriesStack.push(ai);this.previousSeriesStack.push(ai);this.series[ai].shadowCanvas._plotDimensions=this._plotDimensions;this.series[ai].canvas._plotDimensions=this._plotDimensions;for(var ag=0;ag<G.jqplot.preSeriesInitHooks.length;ag++){G.jqplot.preSeriesInitHooks[ag].call(this.series[ai],ak,ah,this.options.seriesDefaults,this.options.series[ai],this)}for(var ag=0;ag<this.preSeriesInitHooks.hooks.length;ag++){this.preSeriesInitHooks.hooks[ag].call(this.series[ai],ak,ah,this.options.seriesDefaults,this.options.series[ai],this)}this.populatePlotData(this.series[ai],ai);this.series[ai]._plotDimensions=this._plotDimensions;this.series[ai].init(ai,this.grid.borderWidth,this);for(var ag=0;ag<G.jqplot.postSeriesInitHooks.length;ag++){G.jqplot.postSeriesInitHooks[ag].call(this.series[ai],ak,ah,this.options.seriesDefaults,this.options.series[ai],this)}for(var ag=0;ag<this.postSeriesInitHooks.hooks.length;ag++){this.postSeriesInitHooks.hooks[ag].call(this.series[ai],ak,ah,this.options.seriesDefaults,this.options.series[ai],this)}this._sumy+=this.series[ai]._sumy;this._sumx+=this.series[ai]._sumx}for(var ai=0;ai<12;ai++){name=P[ai];this.axes[name]._plotDimensions=this._plotDimensions;this.axes[name].init();if(this.axes[name].borderColor==null){if(name.charAt(0)!=="x"&&this.axes[name].useSeriesColor===true&&this.axes[name].show){this.axes[name].borderColor=this.axes[name]._series[0].color}else{this.axes[name].borderColor=this.grid.borderColor}}}if(this.sortData){aa(this.series)}this.grid.init();this.grid._axes=this.axes;this.legend._series=this.series;for(var ai=0;ai<G.jqplot.postInitHooks.length;ai++){G.jqplot.postInitHooks[ai].call(this,ak,ah,am)}for(var ai=0;ai<this.postInitHooks.hooks.length;ai++){this.postInitHooks.hooks[ai].call(this,ak,ah,am)}};this.resetAxesScale=function(aj,af){var ah=af||{};var ai=aj||this.axes;if(ai===true){ai=this.axes}if(jQuery.isArray(ai)){for(var ag=0;ag<ai.length;ag++){this.axes[ai[ag]].resetScale(ah[ai[ag]])}}else{if(typeof(ai)==="object"){for(var ae in ai){this.axes[ae].resetScale(ah[ae])}}}};this.reInitialize=function(){this._height=this.target.height();this._width=this.target.width();if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Target dimension not set"}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;for(var ai in this.axes){this.axes[ai]._plotWidth=this._width;this.axes[ai]._plotHeight=this._height}this.title._plotWidth=this._width;if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this._sumy=0;this._sumx=0;for(var ag=0;ag<this.series.length;ag++){this.populatePlotData(this.series[ag],ag);if(this.series[ag]._type==="line"&&this.series[ag].renderer.bands.show){this.series[ag].renderer.initBands.call(this.series[ag],this.series[ag].renderer.options,this)}this.series[ag]._plotDimensions=this._plotDimensions;this.series[ag].canvas._plotDimensions=this._plotDimensions;this._sumy+=this.series[ag]._sumy;this._sumx+=this.series[ag]._sumx}for(var ae=0;ae<12;ae++){name=P[ae];var af=this.axes[name]._ticks;for(var ag=0;ag<af.length;ag++){var ah=af[ag]._elem;if(ah){if(G.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==q){window.G_vmlCanvasManager.uninitElement(ah.get(0))}ah.emptyForce();ah=null;af._elem=null}}af=null;this.axes[name]._plotDimensions=this._plotDimensions;this.axes[name]._ticks=[]}if(this.sortData){aa(this.series)}this.grid._axes=this.axes;this.legend._series=this.series};function aa(ai){var am,an,ao,ae,al;for(var aj=0;aj<ai.length;aj++){var af;var ak=[ai[aj].data,ai[aj]._stackData,ai[aj]._plotData,ai[aj]._prevPlotData];for(var ag=0;ag<4;ag++){af=true;am=ak[ag];if(ai[aj]._stackAxis=="x"){for(var ah=0;ah<am.length;ah++){if(typeof(am[ah][1])!="number"){af=false;break}}if(af){am.sort(function(aq,ap){return aq[1]-ap[1]})}}else{for(var ah=0;ah<am.length;ah++){if(typeof(am[ah][0])!="number"){af=false;break}}if(af){am.sort(function(aq,ap){return aq[0]-ap[0]})}}}}}this.populatePlotData=function(ai,aj){this._plotData=[];this._stackData=[];ai._stackData=[];ai._plotData=[];var am={x:[],y:[]};if(this.stackSeries&&!ai.disableStack){ai._stack=true;var ak=ai._stackAxis=="x"?0:1;var al=ak?0:1;var an=G.extend(true,[],ai.data);var ao=G.extend(true,[],ai.data);for(var ag=0;ag<aj;ag++){var ae=this.series[ag].data;for(var af=0;af<ae.length;af++){an[af][0]+=ae[af][0];an[af][1]+=ae[af][1];ao[af][ak]+=ae[af][ak]}}for(var ah=0;ah<ao.length;ah++){am.x.push(ao[ah][0]);am.y.push(ao[ah][1])}this._plotData.push(ao);this._stackData.push(an);ai._stackData=an;ai._plotData=ao;ai._plotValues=am}else{for(var ah=0;ah<ai.data.length;ah++){am.x.push(ai.data[ah][0]);am.y.push(ai.data[ah][1])}this._stackData.push(ai.data);this.series[aj]._stackData=ai.data;this._plotData.push(ai.data);ai._plotData=ai.data;ai._plotValues=am}if(aj>0){ai._prevPlotData=this.series[aj-1]._plotData}ai._sumy=0;ai._sumx=0;for(ah=ai.data.length-1;ah>-1;ah--){ai._sumy+=ai.data[ah][1];ai._sumx+=ai.data[ah][0]}};this.getNextSeriesColor=(function(af){var ae=0;var ag=af.seriesColors;return function(){if(ae<ag.length){return ag[ae++]}else{ae=0;return ag[ae++]}}})(this);this.parseOptions=function(am){for(var ai=0;ai<this.preParseOptionsHooks.hooks.length;ai++){this.preParseOptionsHooks.hooks[ai].call(this,am)}for(var ai=0;ai<G.jqplot.preParseOptionsHooks.length;ai++){G.jqplot.preParseOptionsHooks[ai].call(this,am)}this.options=G.extend(true,{},this.defaults,am);this.stackSeries=this.options.stackSeries;if(this.options.seriesColors){this.seriesColors=this.options.seriesColors}if(this.options.negativeSeriesColors){this.negativeSeriesColors=this.options.negativeSeriesColors}if(this.options.captureRightClick){this.captureRightClick=this.options.captureRightClick}this.defaultAxisStart=(am&&am.defaultAxisStart!=null)?am.defaultAxisStart:this.defaultAxisStart;this.colorGenerator.setColors(this.seriesColors);this.negativeColorGenerator.setColors(this.negativeSeriesColors);G.extend(true,this._gridPadding,this.options.gridPadding);this.sortData=(this.options.sortData!=null)?this.options.sortData:this.sortData;for(var ai=0;ai<12;ai++){var ae=P[ai];var ag=this.axes[ae];ag._options=G.extend(true,{},this.options.axesDefaults,this.options.axes[ae]);G.extend(true,ag,this.options.axesDefaults,this.options.axes[ae]);ag._plotWidth=this._width;ag._plotHeight=this._height}var ak=function(aq,ao,ar){var an=[];var ap;ao=ao||"vertical";if(!jQuery.isArray(aq[0])){for(ap=0;ap<aq.length;ap++){if(ao=="vertical"){an.push([ar+ap,aq[ap]])}else{an.push([aq[ap],ar+ap])}}}else{G.extend(true,an,aq)}return an};var aj=0;for(var ai=0;ai<this.data.length;ai++){var al=new N();for(var ah=0;ah<G.jqplot.preParseSeriesOptionsHooks.length;ah++){G.jqplot.preParseSeriesOptionsHooks[ah].call(al,this.options.seriesDefaults,this.options.series[ai])}for(var ah=0;ah<this.preParseSeriesOptionsHooks.hooks.length;ah++){this.preParseSeriesOptionsHooks.hooks[ah].call(al,this.options.seriesDefaults,this.options.series[ai])}G.extend(true,al,{seriesColors:this.seriesColors,negativeSeriesColors:this.negativeSeriesColors},this.options.seriesDefaults,this.options.series[ai]);var af="vertical";if(al.renderer===G.jqplot.BarRenderer&&al.rendererOptions&&al.rendererOptions.barDirection=="horizontal"&&al.transposeData===true){af="horizontal"}al.data=ak(this.data[ai],af,this.defaultAxisStart);switch(al.xaxis){case"xaxis":al._xaxis=this.axes.xaxis;break;case"x2axis":al._xaxis=this.axes.x2axis;break;default:break}al._yaxis=this.axes[al.yaxis];al._xaxis._series.push(al);al._yaxis._series.push(al);if(al.show){al._xaxis.show=true;al._yaxis.show=true}if(!al.label){al.label="Series "+(ai+1).toString()}this.series.push(al);for(var ah=0;ah<G.jqplot.postParseSeriesOptionsHooks.length;ah++){G.jqplot.postParseSeriesOptionsHooks[ah].call(this.series[ai],this.options.seriesDefaults,this.options.series[ai])}for(var ah=0;ah<this.postParseSeriesOptionsHooks.hooks.length;ah++){this.postParseSeriesOptionsHooks.hooks[ah].call(this.series[ai],this.options.seriesDefaults,this.options.series[ai])}}G.extend(true,this.grid,this.options.grid);for(var ai=0;ai<12;ai++){var ae=P[ai];var ag=this.axes[ae];if(ag.borderWidth==null){ag.borderWidth=this.grid.borderWidth}}if(typeof this.options.title=="string"){this.title.text=this.options.title}else{if(typeof this.options.title=="object"){G.extend(true,this.title,this.options.title)}}this.title._plotWidth=this._width;this.legend.setOptions(this.options.legend);for(var ai=0;ai<G.jqplot.postParseOptionsHooks.length;ai++){G.jqplot.postParseOptionsHooks[ai].call(this,am)}for(var ai=0;ai<this.postParseOptionsHooks.hooks.length;ai++){this.postParseOptionsHooks.hooks[ai].call(this,am)}};this.destroy=function(){this.canvasManager.freeAllCanvases();if(this.eventCanvas&&this.eventCanvas._elem){this.eventCanvas._elem.unbind()}this.target.empty();this.target[0].innerHTML=""};this.replot=function(af){var ag=af||{};var ae=ag.clear||true;var ah=ag.resetAxes||false;this.target.trigger("jqplotPreReplot");if(ae){this.destroy()}this.reInitialize();if(ah){this.resetAxesScale(ah,ag.axes)}this.draw();this.target.trigger("jqplotPostReplot")};this.redraw=function(ae){ae=(ae!=null)?ae:true;this.target.trigger("jqplotPreRedraw");if(ae){this.canvasManager.freeAllCanvases();this.eventCanvas._elem.unbind();this.target.empty()}for(var ag in this.axes){this.axes[ag]._ticks=[]}for(var af=0;af<this.series.length;af++){this.populatePlotData(this.series[af],af)}this._sumy=0;this._sumx=0;for(af=0;af<this.series.length;af++){this._sumy+=this.series[af]._sumy;this._sumx+=this.series[af]._sumx}this.draw();this.target.trigger("jqplotPostRedraw")};this.draw=function(){if(this.drawIfHidden||this.target.is(":visible")){this.target.trigger("jqplotPreDraw");var al,aj;for(al=0;al<G.jqplot.preDrawHooks.length;al++){G.jqplot.preDrawHooks[al].call(this)}for(al=0;al<this.preDrawHooks.hooks.length;al++){this.preDrawHooks.hooks[al].call(this)}this.target.append(this.baseCanvas.createElement({left:0,right:0,top:0,bottom:0},"jqplot-base-canvas",null,this));this.baseCanvas.setContext();this.target.append(this.title.draw());this.title.pack({top:0,left:0});var au=this.legend.draw();var aq={top:0,left:0,bottom:0,right:0};if(this.legend.placement=="outsideGrid"){this.target.append(au);switch(this.legend.location){case"n":aq.top+=this.legend.getHeight();break;case"s":aq.bottom+=this.legend.getHeight();break;case"ne":case"e":case"se":aq.right+=this.legend.getWidth();break;case"nw":case"w":case"sw":aq.left+=this.legend.getWidth();break;default:aq.right+=this.legend.getWidth();break}au=au.detach()}var ae=this.axes;for(al=0;al<12;al++){name=P[al];this.target.append(ae[name].draw(this.baseCanvas._ctx,this));ae[name].set()}if(ae.yaxis.show){aq.left+=ae.yaxis.getWidth()}var ah=["y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];var af=[0,0,0,0,0,0,0,0];var an=0;var ai;for(ai=0;ai<8;ai++){if(ae[ah[ai]].show){an+=ae[ah[ai]].getWidth();af[ai]=an}}aq.right+=an;if(ae.x2axis.show){aq.top+=ae.x2axis.getHeight()}if(this.title.show){aq.top+=this.title.getHeight()}if(ae.xaxis.show){aq.bottom+=ae.xaxis.getHeight()}if(this.options.gridDimensions&&G.isPlainObject(this.options.gridDimensions)){var ak=parseInt(this.options.gridDimensions.width,10)||0;var ag=parseInt(this.options.gridDimensions.height,10)||0;var ar=(this._width-aq.left-aq.right-ak)/2;var at=(this._height-aq.top-aq.bottom-ag)/2;if(at>=0&&ar>=0){aq.top+=at;aq.bottom+=at;aq.left+=ar;aq.right+=ar}}var am=["top","bottom","left","right"];for(var ai in am){if(this._gridPadding[am[ai]]==null&&aq[am[ai]]>0){this._gridPadding[am[ai]]=aq[am[ai]]}else{if(this._gridPadding[am[ai]]==null){this._gridPadding[am[ai]]=this._defaultGridPadding[am[ai]]}}}var ap=(this.legend.placement=="outsideGrid")?{top:this.title.getHeight(),left:0,right:0,bottom:0}:this._gridPadding;ae.xaxis.pack({position:"absolute",bottom:this._gridPadding.bottom-ae.xaxis.getHeight(),left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});ae.yaxis.pack({position:"absolute",top:0,left:this._gridPadding.left-ae.yaxis.getWidth(),height:this._height},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top});ae.x2axis.pack({position:"absolute",top:this._gridPadding.top-ae.x2axis.getHeight(),left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});for(al=8;al>0;al--){ae[ah[al-1]].pack({position:"absolute",top:0,right:this._gridPadding.right-af[al-1]},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top})}var ao=(this._width-this._gridPadding.left-this._gridPadding.right)/2+this._gridPadding.left-ae.yMidAxis.getWidth()/2;ae.yMidAxis.pack({position:"absolute",top:0,left:ao,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();for(al=0;al<this.series.length;al++){aj=this.seriesStack[al];this.target.append(this.series[aj].shadowCanvas.createElement(this._gridPadding,"jqplot-series-shadowCanvas",null,this));this.series[aj].shadowCanvas.setContext();this.series[aj].shadowCanvas._elem.data("seriesIndex",aj)}for(al=0;al<this.series.length;al++){aj=this.seriesStack[al];this.target.append(this.series[aj].canvas.createElement(this._gridPadding,"jqplot-series-canvas",null,this));this.series[aj].canvas.setContext();this.series[aj].canvas._elem.data("seriesIndex",aj)}this.target.append(this.eventCanvas.createElement(this._gridPadding,"jqplot-event-canvas",null,this));this.eventCanvas.setContext();this.eventCanvas._ctx.fillStyle="rgba(0,0,0,0)";this.eventCanvas._ctx.fillRect(0,0,this.eventCanvas._ctx.canvas.width,this.eventCanvas._ctx.canvas.height);this.bindCustomEvents();if(this.legend.preDraw){this.eventCanvas._elem.before(au);this.legend.pack(ap);if(this.legend._elem){this.drawSeries({legendInfo:{location:this.legend.location,placement:this.legend.placement,width:this.legend.getWidth(),height:this.legend.getHeight(),xoffset:this.legend.xoffset,yoffset:this.legend.yoffset}})}else{this.drawSeries()}}else{this.drawSeries();if(this.series.length){G(this.series[this.series.length-1].canvas._elem).after(au)}this.legend.pack(ap)}for(var al=0;al<G.jqplot.eventListenerHooks.length;al++){this.eventCanvas._elem.bind(G.jqplot.eventListenerHooks[al][0],{plot:this},G.jqplot.eventListenerHooks[al][1])}for(var al=0;al<this.eventListenerHooks.hooks.length;al++){this.eventCanvas._elem.bind(this.eventListenerHooks.hooks[al][0],{plot:this},this.eventListenerHooks.hooks[al][1])}for(var al=0;al<G.jqplot.postDrawHooks.length;al++){G.jqplot.postDrawHooks[al].call(this)}for(var al=0;al<this.postDrawHooks.hooks.length;al++){this.postDrawHooks.hooks[al].call(this)}if(this.target.is(":visible")){this._drawCount+=1}this.target.trigger("jqplotPostDraw",[this])}};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 ab(am){var al=am.data.plot;var ah=al.eventCanvas._elem.offset();var ak={x:am.pageX-ah.left,y:am.pageY-ah.top};var ai={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 aj=["xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];var ae=al.axes;var af,ag;for(af=11;af>0;af--){ag=aj[af-1];if(ae[ag].show){ai[ag]=ae[ag].series_p2u(ak[ag.charAt(0)])}}return{offsets:ah,gridPos:ak,dataPos:ai}}function ad(ae,af){var aj=af.series;var aO,aN,aM,aH,aI,aC,aB,ao,am,ar,at,aD;var aL,aP,aJ,ak,aA,aF;var ag,aG;for(aM=af.seriesStack.length-1;aM>=0;aM--){aO=af.seriesStack[aM];aH=aj[aO];switch(aH.renderer.constructor){case G.jqplot.BarRenderer:case G.jqplot.PyramidRenderer:aC=ae.x;aB=ae.y;for(aN=0;aN<aH._barPoints.length;aN++){aA=aH._barPoints[aN];aJ=aH.gridData[aN];if(aC>aA[0][0]&&aC<aA[2][0]&&aB>aA[2][1]&&aB<aA[0][1]){return{seriesIndex:aH.index,pointIndex:aN,gridData:aJ,data:aH.data[aN],points:aH._barPoints[aN]}}}break;case G.jqplot.DonutRenderer:ar=aH.startAngle/180*Math.PI;aC=ae.x-aH._center[0];aB=ae.y-aH._center[1];aI=Math.sqrt(Math.pow(aC,2)+Math.pow(aB,2));if(aC>0&&-aB>=0){ao=2*Math.PI-Math.atan(-aB/aC)}else{if(aC>0&&-aB<0){ao=-Math.atan(-aB/aC)}else{if(aC<0){ao=Math.PI-Math.atan(-aB/aC)}else{if(aC==0&&-aB>0){ao=3*Math.PI/2}else{if(aC==0&&-aB<0){ao=Math.PI/2}else{if(aC==0&&aB==0){ao=0}}}}}}if(ar){ao-=ar;if(ao<0){ao+=2*Math.PI}else{if(ao>2*Math.PI){ao-=2*Math.PI}}}am=aH.sliceMargin/180*Math.PI;if(aI<aH._radius&&aI>aH._innerRadius){for(aN=0;aN<aH.gridData.length;aN++){at=(aN>0)?aH.gridData[aN-1][1]+am:am;aD=aH.gridData[aN][1];if(ao>at&&ao<aD){return{seriesIndex:aH.index,pointIndex:aN,gridData:aH.gridData[aN],data:aH.data[aN]}}}}break;case G.jqplot.PieRenderer:ar=aH.startAngle/180*Math.PI;aC=ae.x-aH._center[0];aB=ae.y-aH._center[1];aI=Math.sqrt(Math.pow(aC,2)+Math.pow(aB,2));if(aC>0&&-aB>=0){ao=2*Math.PI-Math.atan(-aB/aC)}else{if(aC>0&&-aB<0){ao=-Math.atan(-aB/aC)}else{if(aC<0){ao=Math.PI-Math.atan(-aB/aC)}else{if(aC==0&&-aB>0){ao=3*Math.PI/2}else{if(aC==0&&-aB<0){ao=Math.PI/2}else{if(aC==0&&aB==0){ao=0}}}}}}if(ar){ao-=ar;if(ao<0){ao+=2*Math.PI}else{if(ao>2*Math.PI){ao-=2*Math.PI}}}am=aH.sliceMargin/180*Math.PI;if(aI<aH._radius){for(aN=0;aN<aH.gridData.length;aN++){at=(aN>0)?aH.gridData[aN-1][1]+am:am;aD=aH.gridData[aN][1];if(ao>at&&ao<aD){return{seriesIndex:aH.index,pointIndex:aN,gridData:aH.gridData[aN],data:aH.data[aN]}}}}break;case G.jqplot.BubbleRenderer:aC=ae.x;aB=ae.y;var ay=null;if(aH.show){for(var aN=0;aN<aH.gridData.length;aN++){aJ=aH.gridData[aN];aP=Math.sqrt((aC-aJ[0])*(aC-aJ[0])+(aB-aJ[1])*(aB-aJ[1]));if(aP<=aJ[2]&&(aP<=aL||aL==null)){aL=aP;ay={seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}if(ay!=null){return ay}}break;case G.jqplot.FunnelRenderer:aC=ae.x;aB=ae.y;var aE=aH._vertices,ai=aE[0],ah=aE[aE.length-1],al,ax,aq;function aK(aS,aU,aT){var aR=(aU[1]-aT[1])/(aU[0]-aT[0]);var aQ=aU[1]-aR*aU[0];var aV=aS+aU[1];return[(aV-aQ)/aR,aV]}al=aK(aB,ai[0],ah[3]);ax=aK(aB,ai[1],ah[2]);for(aN=0;aN<aE.length;aN++){aq=aE[aN];if(aB>=aq[0][1]&&aB<=aq[3][1]&&aC>=al[0]&&aC<=ax[0]){return{seriesIndex:aH.index,pointIndex:aN,gridData:null,data:aH.data[aN]}}}break;case G.jqplot.LineRenderer:aC=ae.x;aB=ae.y;aI=aH.renderer;if(aH.show){if((aH.fill||(aH.renderer.bands.show&&aH.renderer.bands.fill))&&(!af.plugins.highlighter||!af.plugins.highlighter.show)){var ap=false;if(aC>aH._boundingBox[0][0]&&aC<aH._boundingBox[1][0]&&aB>aH._boundingBox[1][1]&&aB<aH._boundingBox[0][1]){var aw=aH._areaPoints.length;var az;var aN=aw-1;for(var az=0;az<aw;az++){var av=[aH._areaPoints[az][0],aH._areaPoints[az][1]];var au=[aH._areaPoints[aN][0],aH._areaPoints[aN][1]];if(av[1]<aB&&au[1]>=aB||au[1]<aB&&av[1]>=aB){if(av[0]+(aB-av[1])/(au[1]-av[1])*(au[0]-av[0])<aC){ap=!ap}}aN=az}}if(ap){return{seriesIndex:aO,pointIndex:null,gridData:aH.gridData,data:aH.data,points:aH._areaPoints}}break}else{aG=aH.markerRenderer.size/2+aH.neighborThreshold;ag=(aG>0)?aG:0;for(var aN=0;aN<aH.gridData.length;aN++){aJ=aH.gridData[aN];if(aI.constructor==G.jqplot.OHLCRenderer){if(aI.candleStick){var an=aH._yaxis.series_u2p;if(aC>=aJ[0]-aI._bodyWidth/2&&aC<=aJ[0]+aI._bodyWidth/2&&aB>=an(aH.data[aN][2])&&aB<=an(aH.data[aN][3])){return{seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}else{if(!aI.hlc){var an=aH._yaxis.series_u2p;if(aC>=aJ[0]-aI._tickLength&&aC<=aJ[0]+aI._tickLength&&aB>=an(aH.data[aN][2])&&aB<=an(aH.data[aN][3])){return{seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}else{var an=aH._yaxis.series_u2p;if(aC>=aJ[0]-aI._tickLength&&aC<=aJ[0]+aI._tickLength&&aB>=an(aH.data[aN][1])&&aB<=an(aH.data[aN][2])){return{seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}}}else{if(aJ[0]!=null&&aJ[1]!=null){aP=Math.sqrt((aC-aJ[0])*(aC-aJ[0])+(aB-aJ[1])*(aB-aJ[1]));if(aP<=ag&&(aP<=aL||aL==null)){aL=aP;return{seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}}}}}break;default:aC=ae.x;aB=ae.y;aI=aH.renderer;if(aH.show){aG=aH.markerRenderer.size/2+aH.neighborThreshold;ag=(aG>0)?aG:0;for(var aN=0;aN<aH.gridData.length;aN++){aJ=aH.gridData[aN];if(aI.constructor==G.jqplot.OHLCRenderer){if(aI.candleStick){var an=aH._yaxis.series_u2p;if(aC>=aJ[0]-aI._bodyWidth/2&&aC<=aJ[0]+aI._bodyWidth/2&&aB>=an(aH.data[aN][2])&&aB<=an(aH.data[aN][3])){return{seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}else{if(!aI.hlc){var an=aH._yaxis.series_u2p;if(aC>=aJ[0]-aI._tickLength&&aC<=aJ[0]+aI._tickLength&&aB>=an(aH.data[aN][2])&&aB<=an(aH.data[aN][3])){return{seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}else{var an=aH._yaxis.series_u2p;if(aC>=aJ[0]-aI._tickLength&&aC<=aJ[0]+aI._tickLength&&aB>=an(aH.data[aN][1])&&aB<=an(aH.data[aN][2])){return{seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}}}else{aP=Math.sqrt((aC-aJ[0])*(aC-aJ[0])+(aB-aJ[1])*(aB-aJ[1]));if(aP<=ag&&(aP<=aL||aL==null)){aL=aP;return{seriesIndex:aO,pointIndex:aN,gridData:aJ,data:aH.data[aN]}}}}}break}}return null}this.onClick=function(ag){var af=ab(ag);var ai=ag.data.plot;var ah=ad(af.gridPos,ai);var ae=jQuery.Event("jqplotClick");ae.pageX=ag.pageX;ae.pageY=ag.pageY;G(this).trigger(ae,[af.gridPos,af.dataPos,ah,ai])};this.onDblClick=function(ag){var af=ab(ag);var ai=ag.data.plot;var ah=ad(af.gridPos,ai);var ae=jQuery.Event("jqplotDblClick");ae.pageX=ag.pageX;ae.pageY=ag.pageY;G(this).trigger(ae,[af.gridPos,af.dataPos,ah,ai])};this.onMouseDown=function(ag){var af=ab(ag);var ai=ag.data.plot;var ah=ad(af.gridPos,ai);var ae=jQuery.Event("jqplotMouseDown");ae.pageX=ag.pageX;ae.pageY=ag.pageY;G(this).trigger(ae,[af.gridPos,af.dataPos,ah,ai])};this.onMouseUp=function(ag){var af=ab(ag);var ae=jQuery.Event("jqplotMouseUp");ae.pageX=ag.pageX;ae.pageY=ag.pageY;G(this).trigger(ae,[af.gridPos,af.dataPos,null,ag.data.plot])};this.onRightClick=function(ag){var af=ab(ag);var ai=ag.data.plot;var ah=ad(af.gridPos,ai);if(ai.captureRightClick){if(ag.which==3){var ae=jQuery.Event("jqplotRightClick");ae.pageX=ag.pageX;ae.pageY=ag.pageY;G(this).trigger(ae,[af.gridPos,af.dataPos,ah,ai])}else{var ae=jQuery.Event("jqplotMouseUp");ae.pageX=ag.pageX;ae.pageY=ag.pageY;G(this).trigger(ae,[af.gridPos,af.dataPos,ah,ai])}}};this.onMouseMove=function(ag){var af=ab(ag);var ai=ag.data.plot;var ah=ad(af.gridPos,ai);var ae=jQuery.Event("jqplotMouseMove");ae.pageX=ag.pageX;ae.pageY=ag.pageY;G(this).trigger(ae,[af.gridPos,af.dataPos,ah,ai])};this.onMouseEnter=function(ag){var af=ab(ag);var ah=ag.data.plot;var ae=jQuery.Event("jqplotMouseEnter");ae.pageX=ag.pageX;ae.pageY=ag.pageY;ae.relatedTarget=ag.relatedTarget;G(this).trigger(ae,[af.gridPos,af.dataPos,null,ah])};this.onMouseLeave=function(ag){var af=ab(ag);var ah=ag.data.plot;var ae=jQuery.Event("jqplotMouseLeave");ae.pageX=ag.pageX;ae.pageY=ag.pageY;ae.relatedTarget=ag.relatedTarget;G(this).trigger(ae,[af.gridPos,af.dataPos,null,ah])};this.drawSeries=function(ag,ae){var ai,ah,af;ae=(typeof(ag)==="number"&&ae==null)?ag:ae;ag=(typeof(ag)==="object")?ag:{};if(ae!=q){ah=this.series[ae];af=ah.shadowCanvas._ctx;af.clearRect(0,0,af.canvas.width,af.canvas.height);ah.drawShadow(af,ag,this);af=ah.canvas._ctx;af.clearRect(0,0,af.canvas.width,af.canvas.height);ah.draw(af,ag,this);if(ah.renderer.constructor==G.jqplot.BezierCurveRenderer){if(ae<this.series.length-1){this.drawSeries(ae+1)}}}else{for(ai=0;ai<this.series.length;ai++){ah=this.series[ai];af=ah.shadowCanvas._ctx;af.clearRect(0,0,af.canvas.width,af.canvas.height);ah.drawShadow(af,ag,this);af=ah.canvas._ctx;af.clearRect(0,0,af.canvas.width,af.canvas.height);ah.draw(af,ag,this)}}ag=ae=ai=ah=af=null};this.moveSeriesToFront=function(af){af=parseInt(af,10);var ai=G.inArray(af,this.seriesStack);if(ai==-1){return}if(ai==this.seriesStack.length-1){this.previousSeriesStack=this.seriesStack.slice(0);return}var ae=this.seriesStack[this.seriesStack.length-1];var ah=this.series[af].canvas._elem.detach();var ag=this.series[af].shadowCanvas._elem.detach();this.series[ae].shadowCanvas._elem.after(ag);this.series[ae].canvas._elem.after(ah);this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack.splice(ai,1);this.seriesStack.push(af)};this.moveSeriesToBack=function(af){af=parseInt(af,10);var ai=G.inArray(af,this.seriesStack);if(ai==0||ai==-1){return}var ae=this.seriesStack[0];var ah=this.series[af].canvas._elem.detach();var ag=this.series[af].shadowCanvas._elem.detach();this.series[ae].shadowCanvas._elem.before(ag);this.series[ae].canvas._elem.before(ah);this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack.splice(ai,1);this.seriesStack.unshift(af)};this.restorePreviousSeriesOrder=function(){var ak,aj,ai,ah,ag,ae,af;if(this.seriesStack==this.previousSeriesStack){return}for(ak=1;ak<this.previousSeriesStack.length;ak++){ae=this.previousSeriesStack[ak];af=this.previousSeriesStack[ak-1];ai=this.series[ae].canvas._elem.detach();ah=this.series[ae].shadowCanvas._elem.detach();this.series[af].shadowCanvas._elem.after(ah);this.series[af].canvas._elem.after(ai)}ag=this.seriesStack.slice(0);this.seriesStack=this.previousSeriesStack.slice(0);this.previousSeriesStack=ag};this.restoreOriginalSeriesOrder=function(){var ai,ah,ae=[],ag,af;for(ai=0;ai<this.series.length;ai++){ae.push(ai)}if(this.seriesStack==ae){return}this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack=ae;for(ai=1;ai<this.seriesStack.length;ai++){ag=this.series[ai].canvas._elem.detach();af=this.series[ai].shadowCanvas._elem.detach();this.series[ai-1].shadowCanvas._elem.after(af);this.series[ai-1].canvas._elem.after(ag)}};this.activateTheme=function(ae){this.themeEngine.activate(this,ae)}}G.jqplot.computeHighlightColors=function(ab){var ad;if(jQuery.isArray(ab)){ad=[];for(var af=0;af<ab.length;af++){var ae=G.jqplot.getColorComponents(ab[af]);var aa=[ae[0],ae[1],ae[2]];var ag=aa[0]+aa[1]+aa[2];for(var ac=0;ac<3;ac++){aa[ac]=(ag>660)?aa[ac]*0.85:0.73*aa[ac]+90;aa[ac]=parseInt(aa[ac],10);(aa[ac]>255)?255:aa[ac]}aa[3]=0.3+0.35*ae[3];ad.push("rgba("+aa[0]+","+aa[1]+","+aa[2]+","+aa[3]+")")}}else{var ae=G.jqplot.getColorComponents(ab);var aa=[ae[0],ae[1],ae[2]];var ag=aa[0]+aa[1]+aa[2];for(var ac=0;ac<3;ac++){aa[ac]=(ag>660)?aa[ac]*0.85:0.73*aa[ac]+90;aa[ac]=parseInt(aa[ac],10);(aa[ac]>255)?255:aa[ac]}aa[3]=0.3+0.35*ae[3];ad="rgba("+aa[0]+","+aa[1]+","+aa[2]+","+aa[3]+")"}return ad};G.jqplot.ColorGenerator=function(ab){ab=ab||G.jqplot.config.defaultColors;var aa=0;this.next=function(){if(aa<ab.length){return ab[aa++]}else{aa=0;return ab[aa++]}};this.previous=function(){if(aa>0){return ab[aa--]}else{aa=ab.length-1;return ab[aa]}};this.get=function(ad){var ac=ad-ab.length*Math.floor(ad/ab.length);return ab[ac]};this.setColors=function(ac){ab=ac};this.reset=function(){aa=0};this.getIndex=function(){return aa};this.setIndex=function(ac){aa=ac}};G.jqplot.hex2rgb=function(ac,aa){ac=ac.replace("#","");if(ac.length==3){ac=ac.charAt(0)+ac.charAt(0)+ac.charAt(1)+ac.charAt(1)+ac.charAt(2)+ac.charAt(2)}var ab;ab="rgba("+parseInt(ac.slice(0,2),16)+", "+parseInt(ac.slice(2,4),16)+", "+parseInt(ac.slice(4,6),16);if(aa){ab+=", "+aa}ab+=")";return ab};G.jqplot.rgb2hex=function(af){var ac=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *(?:, *[0-9.]*)?\)/;var aa=af.match(ac);var ae="#";for(var ad=1;ad<4;ad++){var ab;if(aa[ad].search(/%/)!=-1){ab=parseInt(255*aa[ad]/100,10).toString(16);if(ab.length==1){ab="0"+ab}}else{ab=parseInt(aa[ad],10).toString(16);if(ab.length==1){ab="0"+ab}}ae+=ab}return ae};G.jqplot.normalize2rgb=function(ab,aa){if(ab.search(/^ *rgba?\(/)!=-1){return ab}else{if(ab.search(/^ *#?[0-9a-fA-F]?[0-9a-fA-F]/)!=-1){return G.jqplot.hex2rgb(ab,aa)}else{throw"invalid color spec"}}};G.jqplot.getColorComponents=function(af){af=G.jqplot.colorKeywordMap[af]||af;var ad=G.jqplot.normalize2rgb(af);var ac=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *,? *([0-9.]* *)?\)/;var aa=ad.match(ac);var ab=[];for(var ae=1;ae<4;ae++){if(aa[ae].search(/%/)!=-1){ab[ae-1]=parseInt(255*aa[ae]/100,10)}else{ab[ae-1]=parseInt(aa[ae],10)}}ab[3]=parseFloat(aa[4])?parseFloat(aa[4]):1;return ab};G.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)"};G.jqplot.AxisLabelRenderer=function(aa){G.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;G.extend(true,this,aa)};G.jqplot.AxisLabelRenderer.prototype=new G.jqplot.ElemContainer();G.jqplot.AxisLabelRenderer.prototype.constructor=G.jqplot.AxisLabelRenderer;G.jqplot.AxisLabelRenderer.prototype.init=function(aa){G.extend(true,this,aa)};G.jqplot.AxisLabelRenderer.prototype.draw=function(aa,ab){if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=G('<div style="position:absolute;" class="jqplot-'+this.axis+'-label"></div>');if(Number(this.label)){this._elem.css("white-space","nowrap")}if(!this.escapeHTML){this._elem.html(this.label)}else{this._elem.text(this.label)}if(this.fontFamily){this._elem.css("font-family",this.fontFamily)}if(this.fontSize){this._elem.css("font-size",this.fontSize)}if(this.textColor){this._elem.css("color",this.textColor)}return this._elem};G.jqplot.AxisLabelRenderer.prototype.pack=function(){};G.jqplot.AxisTickRenderer=function(aa){G.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=G.jqplot.DefaultTickFormatter;this.prefix="";this.formatString="";this.fontFamily;this.fontSize;this.textColor;this.escapeHTML=false;this._elem;this._breakTick=false;G.extend(true,this,aa)};G.jqplot.AxisTickRenderer.prototype.init=function(aa){G.extend(true,this,aa)};G.jqplot.AxisTickRenderer.prototype=new G.jqplot.ElemContainer();G.jqplot.AxisTickRenderer.prototype.constructor=G.jqplot.AxisTickRenderer;G.jqplot.AxisTickRenderer.prototype.setTick=function(aa,ac,ab){this.value=aa;this.axis=ac;if(ab){this.isMinorTick=true}return this};G.jqplot.AxisTickRenderer.prototype.draw=function(){if(this.label===null){this.label=this.prefix+this.formatter(this.formatString,this.value)}var ab={position:"absolute"};if(Number(this.label)){ab.whitSpace="nowrap"}if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=G(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(ab);for(var aa in this._styles){this._elem.css(aa,this._styles[aa])}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};G.jqplot.DefaultTickFormatter=function(aa,ab){if(typeof ab=="number"){if(!aa){aa=G.jqplot.config.defaultTickFormatString}return G.jqplot.sprintf(aa,ab)}else{return String(ab)}};G.jqplot.AxisTickRenderer.prototype.pack=function(){};G.jqplot.CanvasGridRenderer=function(){this.shadowRenderer=new G.jqplot.ShadowRenderer()};G.jqplot.CanvasGridRenderer.prototype.init=function(ab){this._ctx;G.extend(true,this,ab);var aa={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(aa)};G.jqplot.CanvasGridRenderer.prototype.createElement=function(ad){var ac;if(this._elem){if(G.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==q){ac=this._elem.get(0);window.G_vmlCanvasManager.uninitElement(ac);ac=null}this._elem.emptyForce();this._elem=null}ac=ad.canvasManager.getCanvas();var aa=this._plotDimensions.width;var ab=this._plotDimensions.height;ac.width=aa;ac.height=ab;this._elem=G(ac);this._elem.addClass("jqplot-grid-canvas");this._elem.css({position:"absolute",left:0,top:0});ac=ad.canvasManager.initCanvas(ac);this._top=this._offsets.top;this._bottom=ab-this._offsets.bottom;this._left=this._offsets.left;this._right=aa-this._offsets.right;this._width=this._right-this._left;this._height=this._bottom-this._top;ac=null;return this._elem};G.jqplot.CanvasGridRenderer.prototype.draw=function(){this._ctx=this._elem.get(0).getContext("2d");var al=this._ctx;var ao=this._axes;al.save();al.clearRect(0,0,this._plotDimensions.width,this._plotDimensions.height);al.fillStyle=this.backgroundColor||this.background;al.fillRect(this._left,this._top,this._width,this._height);al.save();al.lineJoin="miter";al.lineCap="butt";al.lineWidth=this.gridLineWidth;al.strokeStyle=this.gridLineColor;var ar,aq,ai,aj;var af=["xaxis","yaxis","x2axis","y2axis"];for(var ap=4;ap>0;ap--){var av=af[ap-1];var aa=ao[av];var at=aa._ticks;var ak=at.length;if(aa.show){if(aa.drawBaseline){var au={};if(aa.baselineWidth!==null){au.lineWidth=aa.baselineWidth}if(aa.baselineColor!==null){au.strokeStyle=aa.baselineColor}switch(av){case"xaxis":ah(this._left,this._bottom,this._right,this._bottom,au);break;case"yaxis":ah(this._left,this._bottom,this._left,this._top,au);break;case"x2axis":ah(this._left,this._bottom,this._right,this._bottom,au);break;case"y2axis":ah(this._right,this._bottom,this._right,this._top,au);break}}for(var am=ak;am>0;am--){var ag=at[am-1];if(ag.show){var ad=Math.round(aa.u2p(ag.value))+0.5;switch(av){case"xaxis":if(ag.showGridline&&this.drawGridlines&&((!ag.isMinorTick&&aa.drawMajorGridlines)||(ag.isMinorTick&&aa.drawMinorGridlines))){ah(ad,this._top,ad,this._bottom)}if(ag.showMark&&ag.mark&&((!ag.isMinorTick&&aa.drawMajorTickMarks)||(ag.isMinorTick&&aa.drawMinorTickMarks))){ai=ag.markSize;aj=ag.mark;var ad=Math.round(aa.u2p(ag.value))+0.5;switch(aj){case"outside":ar=this._bottom;aq=this._bottom+ai;break;case"inside":ar=this._bottom-ai;aq=this._bottom;break;case"cross":ar=this._bottom-ai;aq=this._bottom+ai;break;default:ar=this._bottom;aq=this._bottom+ai;break}if(this.shadow){this.renderer.shadowRenderer.draw(al,[[ad,ar],[ad,aq]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}ah(ad,ar,ad,aq)}break;case"yaxis":if(ag.showGridline&&this.drawGridlines&&((!ag.isMinorTick&&aa.drawMajorGridlines)||(ag.isMinorTick&&aa.drawMinorGridlines))){ah(this._right,ad,this._left,ad)}if(ag.showMark&&ag.mark&&((!ag.isMinorTick&&aa.drawMajorTickMarks)||(ag.isMinorTick&&aa.drawMinorTickMarks))){ai=ag.markSize;aj=ag.mark;var ad=Math.round(aa.u2p(ag.value))+0.5;switch(aj){case"outside":ar=this._left-ai;aq=this._left;break;case"inside":ar=this._left;aq=this._left+ai;break;case"cross":ar=this._left-ai;aq=this._left+ai;break;default:ar=this._left-ai;aq=this._left;break}if(this.shadow){this.renderer.shadowRenderer.draw(al,[[ar,ad],[aq,ad]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ah(ar,ad,aq,ad,{strokeStyle:aa.borderColor})}break;case"x2axis":if(ag.showGridline&&this.drawGridlines&&((!ag.isMinorTick&&aa.drawMajorGridlines)||(ag.isMinorTick&&aa.drawMinorGridlines))){ah(ad,this._bottom,ad,this._top)}if(ag.showMark&&ag.mark&&((!ag.isMinorTick&&aa.drawMajorTickMarks)||(ag.isMinorTick&&aa.drawMinorTickMarks))){ai=ag.markSize;aj=ag.mark;var ad=Math.round(aa.u2p(ag.value))+0.5;switch(aj){case"outside":ar=this._top-ai;aq=this._top;break;case"inside":ar=this._top;aq=this._top+ai;break;case"cross":ar=this._top-ai;aq=this._top+ai;break;default:ar=this._top-ai;aq=this._top;break}if(this.shadow){this.renderer.shadowRenderer.draw(al,[[ad,ar],[ad,aq]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}ah(ad,ar,ad,aq)}break;case"y2axis":if(ag.showGridline&&this.drawGridlines&&((!ag.isMinorTick&&aa.drawMajorGridlines)||(ag.isMinorTick&&aa.drawMinorGridlines))){ah(this._left,ad,this._right,ad)}if(ag.showMark&&ag.mark&&((!ag.isMinorTick&&aa.drawMajorTickMarks)||(ag.isMinorTick&&aa.drawMinorTickMarks))){ai=ag.markSize;aj=ag.mark;var ad=Math.round(aa.u2p(ag.value))+0.5;switch(aj){case"outside":ar=this._right;aq=this._right+ai;break;case"inside":ar=this._right-ai;aq=this._right;break;case"cross":ar=this._right-ai;aq=this._right+ai;break;default:ar=this._right;aq=this._right+ai;break}if(this.shadow){this.renderer.shadowRenderer.draw(al,[[ar,ad],[aq,ad]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ah(ar,ad,aq,ad,{strokeStyle:aa.borderColor})}break;default:break}}}ag=null}aa=null;at=null}af=["y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];for(var ap=7;ap>0;ap--){var aa=ao[af[ap-1]];var at=aa._ticks;if(aa.show){var ab=at[aa.numberTicks-1];var ae=at[0];var ac=aa.getLeft();var an=[[ac,ab.getTop()+ab.getHeight()/2],[ac,ae.getTop()+ae.getHeight()/2+1]];if(this.shadow){this.renderer.shadowRenderer.draw(al,an,{lineCap:"butt",fill:false,closePath:false})}ah(an[0][0],an[0][1],an[1][0],an[1][1],{lineCap:"butt",strokeStyle:aa.borderColor,lineWidth:aa.borderWidth});for(var am=at.length;am>0;am--){var ag=at[am-1];ai=ag.markSize;aj=ag.mark;var ad=Math.round(aa.u2p(ag.value))+0.5;if(ag.showMark&&ag.mark){switch(aj){case"outside":ar=ac;aq=ac+ai;break;case"inside":ar=ac-ai;aq=ac;break;case"cross":ar=ac-ai;aq=ac+ai;break;default:ar=ac;aq=ac+ai;break}an=[[ar,ad],[aq,ad]];if(this.shadow){this.renderer.shadowRenderer.draw(al,an,{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ah(ar,ad,aq,ad,{strokeStyle:aa.borderColor})}ag=null}ae=null}aa=null;at=null}al.restore();function ah(aA,az,ax,aw,ay){al.save();ay=ay||{};if(ay.lineWidth==null||ay.lineWidth!=0){G.extend(true,al,ay);al.beginPath();al.moveTo(aA,az);al.lineTo(ax,aw);al.stroke();al.restore()}}if(this.shadow){var an=[[this._left,this._bottom],[this._right,this._bottom],[this._right,this._top]];this.renderer.shadowRenderer.draw(al,an)}if(this.borderWidth!=0&&this.drawBorder){ah(this._left,this._top,this._right,this._top,{lineCap:"round",strokeStyle:ao.x2axis.borderColor,lineWidth:ao.x2axis.borderWidth});ah(this._right,this._top,this._right,this._bottom,{lineCap:"round",strokeStyle:ao.y2axis.borderColor,lineWidth:ao.y2axis.borderWidth});ah(this._right,this._bottom,this._left,this._bottom,{lineCap:"round",strokeStyle:ao.xaxis.borderColor,lineWidth:ao.xaxis.borderWidth});ah(this._left,this._bottom,this._left,this._top,{lineCap:"round",strokeStyle:ao.yaxis.borderColor,lineWidth:ao.yaxis.borderWidth})}al.restore();al=null;ao=null};G.jqplot.DivTitleRenderer=function(){};G.jqplot.DivTitleRenderer.prototype.init=function(aa){G.extend(true,this,aa)};G.jqplot.DivTitleRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}var ad=this.renderer;var ac=document.createElement("div");this._elem=G(ac);this._elem.addClass("jqplot-title");if(!this.text){this.show=false;this._elem.height(0);this._elem.width(0)}else{if(this.text){var aa;if(this.color){aa=this.color}else{if(this.textColor){aa=this.textColor}}var ab={position:"absolute",top:"0px",left:"0px"};if(this._plotWidth){ab.width=this._plotWidth+"px"}if(this.fontSize){ab.fontSize=this.fontSize}if(typeof this.textAlign==="string"){ab.textAlign=this.textAlign}else{ab.textAlign="center"}if(aa){ab.color=aa}if(this.paddingBottom){ab.paddingBottom=this.paddingBottom}if(this.fontFamily){ab.fontFamily=this.fontFamily}this._elem.css(ab);if(this.escapeHtml){this._elem.text(this.text)}else{this._elem.html(this.text)}}}ac=null;return this._elem};G.jqplot.DivTitleRenderer.prototype.pack=function(){};var n=0.1;G.jqplot.LinePattern=function(ao,aj){var ai={dotted:[n,G.jqplot.config.dotGapLength],dashed:[G.jqplot.config.dashLength,G.jqplot.config.gapLength],solid:null};if(typeof aj==="string"){if(aj[0]==="."||aj[0]==="-"){var ap=aj;aj=[];for(var ah=0,ae=ap.length;ah<ae;ah++){if(ap[ah]==="."){aj.push(n)}else{if(ap[ah]==="-"){aj.push(G.jqplot.config.dashLength)}else{continue}}aj.push(G.jqplot.config.gapLength)}}else{aj=ai[aj]}}if(!(aj&&aj.length)){return ao}var ad=0;var ak=aj[0];var am=0;var al=0;var ag=0;var aa=0;var an=function(aq,ar){ao.moveTo(aq,ar);am=aq;al=ar;ag=aq;aa=ar};var ac=function(aq,ax){var av=ao.lineWidth;var at=aq-am;var ar=ax-al;var au=Math.sqrt(at*at+ar*ar);if((au>0)&&(av>0)){at/=au;ar/=au;while(true){var aw=av*ak;if(aw<au){am+=aw*at;al+=aw*ar;if((ad&1)==0){ao.lineTo(am,al)}else{ao.moveTo(am,al)}au-=aw;ad++;if(ad>=aj.length){ad=0}ak=aj[ad]}else{am=aq;al=ax;if((ad&1)==0){ao.lineTo(am,al)}else{ao.moveTo(am,al)}ak-=au/av;break}}}};var ab=function(){ao.beginPath()};var af=function(){ac(ag,aa)};return{moveTo:an,lineTo:ac,beginPath:ab,closePath:af}};G.jqplot.LineRenderer=function(){this.shapeRenderer=new G.jqplot.ShapeRenderer();this.shadowRenderer=new G.jqplot.ShadowRenderer()};G.jqplot.LineRenderer.prototype.init=function(ab,ag){ab=ab||{};this._type="line";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 ae={highlightMouseOver:ab.highlightMouseOver,highlightMouseDown:ab.highlightMouseDown,highlightColor:ab.highlightColor};delete (ab.highlightMouseOver);delete (ab.highlightMouseDown);delete (ab.highlightColor);G.extend(true,this.renderer,ab);this.renderer.options=ab;if(this.renderer.bandData.length>1&&(!ab.bands||ab.bands.show==null)){this.renderer.bands.show=true}else{if(ab.bands&&ab.bands.show==null&&ab.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,ag)}if(this._stack){this.renderer.smooth=false}var af={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(af);var ac=ab.shadowOffset;if(ac==null){if(this.lineWidth>2.5){ac=1.25*(1+(Math.atan((this.lineWidth/2.5))/0.785398163-1)*0.6)}else{ac=1.25*Math.atan((this.lineWidth/2.5))/0.785398163}}var aa={lineJoin:this.lineJoin,lineCap:this.lineCap,fill:this.fill,isarc:false,angle:this.shadowAngle,offset:ac,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.lineWidth,linePattern:this.linePattern,closePath:this.fill};this.renderer.shadowRenderer.init(aa);this._areaPoints=[];this._boundingBox=[[],[]];if(!this.isTrendline&&this.fill||this.renderer.bands.show){this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColor=null;if(ae.highlightMouseDown&&ae.highlightMouseOver==null){ae.highlightMouseOver=false}G.extend(true,this,{highlightMouseOver:ae.highlightMouseOver,highlightMouseDown:ae.highlightMouseDown,highlightColor:ae.highlightColor});if(!this.highlightColor){var ad=(this.renderer.bands.show)?this.renderer.bands.fillColor:this.fillColor;this.highlightColor=G.jqplot.computeHighlightColors(ad)}if(this.highlighter){this.highlighter.show=false}}if(!this.isTrendline&&ag){ag.plugins.lineRenderer={};ag.postInitHooks.addOnce(u);ag.postDrawHooks.addOnce(Y);ag.eventListenerHooks.addOnce("jqplotMouseMove",f);ag.eventListenerHooks.addOnce("jqplotMouseDown",c);ag.eventListenerHooks.addOnce("jqplotMouseUp",X);ag.eventListenerHooks.addOnce("jqplotClick",e);ag.eventListenerHooks.addOnce("jqplotRightClick",o)}};G.jqplot.LineRenderer.prototype.initBands=function(ad,an){var ae=ad.bandData||[];var ag=this.renderer.bands;ag.hiData=[];ag.lowData=[];var au=this.data;ag._max=null;ag._min=null;if(ae.length==2){if(G.isArray(ae[0][0])){var ah;var aa=0,ak=0;for(var ao=0,al=ae[0].length;ao<al;ao++){ah=ae[0][ao];if((ah[1]!=null&&ah[1]>ag._max)||ag._max==null){ag._max=ah[1]}if((ah[1]!=null&&ah[1]<ag._min)||ag._min==null){ag._min=ah[1]}}for(var ao=0,al=ae[1].length;ao<al;ao++){ah=ae[1][ao];if((ah[1]!=null&&ah[1]>ag._max)||ag._max==null){ag._max=ah[1];ak=1}if((ah[1]!=null&&ah[1]<ag._min)||ag._min==null){ag._min=ah[1];aa=1}}if(ak===aa){ag.show=false}ag.hiData=ae[ak];ag.lowData=ae[aa]}else{if(ae[0].length===au.length&&ae[1].length===au.length){var ac=(ae[0][0]>ae[1][0])?0:1;var av=(ac)?0:1;for(var ao=0,al=au.length;ao<al;ao++){ag.hiData.push([au[ao][0],ae[ac][ao]]);ag.lowData.push([au[ao][0],ae[av][ao]])}}else{ag.show=false}}}else{if(ae.length>2&&!G.isArray(ae[0][0])){var ac=(ae[0][0]>ae[0][1])?0:1;var av=(ac)?0:1;for(var ao=0,al=ae.length;ao<al;ao++){ag.hiData.push([au[ao][0],ae[ao][ac]]);ag.lowData.push([au[ao][0],ae[ao][av]])}}else{var aj=ag.interval;var at=null;var ar=null;var ab=null;var am=null;if(G.isArray(aj)){at=aj[0];ar=aj[1]}else{at=aj}if(isNaN(at)){if(at.charAt(at.length-1)==="%"){ab="multiply";at=parseFloat(at)/100+1}}else{at=parseFloat(at);ab="add"}if(ar!==null&&isNaN(ar)){if(ar.charAt(ar.length-1)==="%"){am="multiply";ar=parseFloat(ar)/100+1}}else{if(ar!==null){ar=parseFloat(ar);am="add"}}if(at!==null){if(ar===null){ar=-at;am=ab;if(am==="multiply"){ar+=2}}if(at<ar){var ap=at;at=ar;ar=ap;ap=ab;ab=am;am=ap}for(var ao=0,al=au.length;ao<al;ao++){switch(ab){case"add":ag.hiData.push([au[ao][0],au[ao][1]+at]);break;case"multiply":ag.hiData.push([au[ao][0],au[ao][1]*at]);break}switch(am){case"add":ag.lowData.push([au[ao][0],au[ao][1]+ar]);break;case"multiply":ag.lowData.push([au[ao][0],au[ao][1]*ar]);break}}}else{ag.show=false}}}var af=ag.hiData;var ai=ag.lowData;for(var ao=0,al=af.length;ao<al;ao++){if((af[ao][1]!=null&&af[ao][1]>ag._max)||ag._max==null){ag._max=af[ao][1]}}for(var ao=0,al=ai.length;ao<al;ao++){if((ai[ao][1]!=null&&ai[ao][1]<ag._min)||ag._min==null){ag._min=ai[ao][1]}}if(ag.fillColor===null){var aq=G.jqplot.getColorComponents(ag.color);aq[3]=aq[3]*0.5;ag.fillColor="rgba("+aq[0]+", "+aq[1]+", "+aq[2]+", "+aq[3]+")"}};function F(ab,aa){return(3.4182054+aa)*Math.pow(ab,-0.3534992)}function j(ac,ab){var aa=Math.sqrt(Math.pow((ab[0]-ac[0]),2)+Math.pow((ab[1]-ac[1]),2));return 5.7648*Math.log(aa)+7.4456}function v(aa){var ab=(Math.exp(2*aa)-1)/(Math.exp(2*aa)+1);return ab}function E(aC){var al=this.renderer.smooth;var aw=this.canvas.getWidth();var ag=this._xaxis.series_p2u;var az=this._yaxis.series_p2u;var ay=null;var af=null;var ar=aC.length/aw;var ac=[];var aq=[];if(!isNaN(parseFloat(al))){ay=parseFloat(al)}else{ay=F(ar,0.5)}var ao=[];var ad=[];for(var ax=0,at=aC.length;ax<at;ax++){ao.push(aC[ax][1]);ad.push(aC[ax][0])}function an(aD,aE){if(aD-aE==0){return Math.pow(10,10)}else{return aD-aE}}var ap,ak,aj,ai;var aa=aC.length-1;for(var ae=1,au=aC.length;ae<au;ae++){var ab=[];var am=[];for(var av=0;av<2;av++){var ax=ae-1+av;if(ax==0||ax==aa){ab[av]=Math.pow(10,10)}else{if(ao[ax+1]-ao[ax]==0||ao[ax]-ao[ax-1]==0){ab[av]=0}else{if(((ad[ax+1]-ad[ax])/(ao[ax+1]-ao[ax])+(ad[ax]-ad[ax-1])/(ao[ax]-ao[ax-1]))==0){ab[av]=0}else{if((ao[ax+1]-ao[ax])*(ao[ax]-ao[ax-1])<0){ab[av]=0}else{ab[av]=2/(an(ad[ax+1],ad[ax])/(ao[ax+1]-ao[ax])+an(ad[ax],ad[ax-1])/(ao[ax]-ao[ax-1]))}}}}}if(ae==1){ab[0]=3/2*(ao[1]-ao[0])/an(ad[1],ad[0])-ab[1]/2}else{if(ae==aa){ab[1]=3/2*(ao[aa]-ao[aa-1])/an(ad[aa],ad[aa-1])-ab[0]/2}}am[0]=-2*(ab[1]+2*ab[0])/an(ad[ae],ad[ae-1])+6*(ao[ae]-ao[ae-1])/Math.pow(an(ad[ae],ad[ae-1]),2);am[1]=2*(2*ab[1]+ab[0])/an(ad[ae],ad[ae-1])-6*(ao[ae]-ao[ae-1])/Math.pow(an(ad[ae],ad[ae-1]),2);ai=1/6*(am[1]-am[0])/an(ad[ae],ad[ae-1]);aj=1/2*(ad[ae]*am[0]-ad[ae-1]*am[1])/an(ad[ae],ad[ae-1]);ak=(ao[ae]-ao[ae-1]-aj*(Math.pow(ad[ae],2)-Math.pow(ad[ae-1],2))-ai*(Math.pow(ad[ae],3)-Math.pow(ad[ae-1],3)))/an(ad[ae],ad[ae-1]);ap=ao[ae-1]-ak*ad[ae-1]-aj*Math.pow(ad[ae-1],2)-ai*Math.pow(ad[ae-1],3);var aB=(ad[ae]-ad[ae-1])/ay;var aA,ah;for(var av=0,at=ay;av<at;av++){aA=[];ah=ad[ae-1]+av*aB;aA.push(ah);aA.push(ap+ak*ah+aj*Math.pow(ah,2)+ai*Math.pow(ah,3));ac.push(aA);aq.push([ag(aA[0]),az(aA[1])])}}ac.push(aC[ax]);aq.push([ag(aC[ax][0]),az(aC[ax][1])]);return[ac,aq]}function A(ai){var ah=this.renderer.smooth;var aN=this.renderer.tension;var aa=this.canvas.getWidth();var aA=this._xaxis.series_p2u;var aj=this._yaxis.series_p2u;var aB=null;var aC=null;var aM=null;var aH=null;var aF=null;var al=null;var aK=null;var af=null;var aD,aE,aw,av,at,aq;var ad,ab,an,am;var au,ar,aG;var ao=[];var ac=[];var ae=ai.length/aa;var aL,ap,ay,az,ax;var ak=[];var ag=[];if(!isNaN(parseFloat(ah))){aB=parseFloat(ah)}else{aB=F(ae,0.5)}if(!isNaN(parseFloat(aN))){aN=parseFloat(aN)}for(var aJ=0,aI=ai.length-1;aJ<aI;aJ++){if(aN===null){al=Math.abs((ai[aJ+1][1]-ai[aJ][1])/(ai[aJ+1][0]-ai[aJ][0]));aL=0.3;ap=0.6;ay=(ap-aL)/2;az=2.5;ax=-1.4;af=al/az+ax;aH=ay*v(af)-ay*v(ax)+aL;if(aJ>0){aK=Math.abs((ai[aJ][1]-ai[aJ-1][1])/(ai[aJ][0]-ai[aJ-1][0]))}af=aK/az+ax;aF=ay*v(af)-ay*v(ax)+aL;aM=(aH+aF)/2}else{aM=aN}for(aD=0;aD<aB;aD++){aE=aD/aB;aw=(1+2*aE)*Math.pow((1-aE),2);av=aE*Math.pow((1-aE),2);at=Math.pow(aE,2)*(3-2*aE);aq=Math.pow(aE,2)*(aE-1);if(ai[aJ-1]){ad=aM*(ai[aJ+1][0]-ai[aJ-1][0]);ab=aM*(ai[aJ+1][1]-ai[aJ-1][1])}else{ad=aM*(ai[aJ+1][0]-ai[aJ][0]);ab=aM*(ai[aJ+1][1]-ai[aJ][1])}if(ai[aJ+2]){an=aM*(ai[aJ+2][0]-ai[aJ][0]);am=aM*(ai[aJ+2][1]-ai[aJ][1])}else{an=aM*(ai[aJ+1][0]-ai[aJ][0]);am=aM*(ai[aJ+1][1]-ai[aJ][1])}au=aw*ai[aJ][0]+at*ai[aJ+1][0]+av*ad+aq*an;ar=aw*ai[aJ][1]+at*ai[aJ+1][1]+av*ab+aq*am;aG=[au,ar];ak.push(aG);ag.push([aA(au),aj(ar)])}}ak.push(ai[aI]);ag.push([aA(ai[aI][0]),aj(ai[aI][1])]);return[ak,ag]}G.jqplot.LineRenderer.prototype.setGridData=function(ai){var ae=this._xaxis.series_u2p;var aa=this._yaxis.series_u2p;var af=this._plotData;var aj=this._prevPlotData;this.gridData=[];this._prevGridData=[];this.renderer._smoothedData=[];this.renderer._smoothedPlotData=[];this.renderer._hiBandGridData=[];this.renderer._lowBandGridData=[];this.renderer._hiBandSmoothedData=[];this.renderer._lowBandSmoothedData=[];var ad=this.renderer.bands;var ab=false;for(var ag=0,ac=this.data.length;ag<ac;ag++){if(af[ag][0]!=null&&af[ag][1]!=null){this.gridData.push([ae.call(this._xaxis,af[ag][0]),aa.call(this._yaxis,af[ag][1])])}else{if(af[ag][0]==null){ab=true;this.gridData.push([null,aa.call(this._yaxis,af[ag][1])])}else{if(af[ag][1]==null){ab=true;this.gridData.push([ae.call(this._xaxis,af[ag][0]),null])}}}if(aj[ag]!=null&&aj[ag][0]!=null&&aj[ag][1]!=null){this._prevGridData.push([ae.call(this._xaxis,aj[ag][0]),aa.call(this._yaxis,aj[ag][1])])}else{if(aj[ag]!=null&&aj[ag][0]==null){this._prevGridData.push([null,aa.call(this._yaxis,aj[ag][1])])}else{if(aj[ag]!=null&&aj[ag][0]!=null&&aj[ag][1]==null){this._prevGridData.push([ae.call(this._xaxis,aj[ag][0]),null])}}}}if(ab){this.renderer.smooth=false;if(this._type==="line"){ad.show=false}}if(this._type==="line"&&ad.show){for(var ag=0,ac=ad.hiData.length;ag<ac;ag++){this.renderer._hiBandGridData.push([ae.call(this._xaxis,ad.hiData[ag][0]),aa.call(this._yaxis,ad.hiData[ag][1])])}for(var ag=0,ac=ad.lowData.length;ag<ac;ag++){this.renderer._lowBandGridData.push([ae.call(this._xaxis,ad.lowData[ag][0]),aa.call(this._yaxis,ad.lowData[ag][1])])}}if(this._type==="line"&&this.renderer.smooth&&this.gridData.length>2){var ah;if(this.renderer.constrainSmoothing){ah=E.call(this,this.gridData);this.renderer._smoothedData=ah[0];this.renderer._smoothedPlotData=ah[1];if(ad.show){ah=E.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ah[0];ah=E.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ah[0]}ah=null}else{ah=A.call(this,this.gridData);this.renderer._smoothedData=ah[0];this.renderer._smoothedPlotData=ah[1];if(ad.show){ah=A.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ah[0];ah=A.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ah[0]}ah=null}}};G.jqplot.LineRenderer.prototype.makeGridData=function(ah,aj){var af=this._xaxis.series_u2p;var aa=this._yaxis.series_u2p;var ak=[];var ac=[];this.renderer._smoothedData=[];this.renderer._smoothedPlotData=[];this.renderer._hiBandGridData=[];this.renderer._lowBandGridData=[];this.renderer._hiBandSmoothedData=[];this.renderer._lowBandSmoothedData=[];var ae=this.renderer.bands;var ab=false;for(var ag=0;ag<ah.length;ag++){if(ah[ag][0]!=null&&ah[ag][1]!=null){ak.push([af.call(this._xaxis,ah[ag][0]),aa.call(this._yaxis,ah[ag][1])])}else{if(ah[ag][0]==null){ab=true;ak.push([null,aa.call(this._yaxis,ah[ag][1])])}else{if(ah[ag][1]==null){ab=true;ak.push([af.call(this._xaxis,ah[ag][0]),null])}}}}if(ab){this.renderer.smooth=false;if(this._type==="line"){ae.show=false}}if(this._type==="line"&&ae.show){for(var ag=0,ad=ae.hiData.length;ag<ad;ag++){this.renderer._hiBandGridData.push([af.call(this._xaxis,ae.hiData[ag][0]),aa.call(this._yaxis,ae.hiData[ag][1])])}for(var ag=0,ad=ae.lowData.length;ag<ad;ag++){this.renderer._lowBandGridData.push([af.call(this._xaxis,ae.lowData[ag][0]),aa.call(this._yaxis,ae.lowData[ag][1])])}}if(this._type==="line"&&this.renderer.smooth&&ak.length>2){var ai;if(this.renderer.constrainSmoothing){ai=E.call(this,ak);this.renderer._smoothedData=ai[0];this.renderer._smoothedPlotData=ai[1];if(ae.show){ai=E.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ai[0];ai=E.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ai[0]}ai=null}else{ai=A.call(this,ak);this.renderer._smoothedData=ai[0];this.renderer._smoothedPlotData=ai[1];if(ae.show){ai=A.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ai[0];ai=A.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ai[0]}ai=null}}return ak};G.jqplot.LineRenderer.prototype.draw=function(ap,aB,ab,au){var av;var aj=G.extend(true,{},ab);var ad=(aj.shadow!=q)?aj.shadow:this.shadow;var aC=(aj.showLine!=q)?aj.showLine:this.showLine;var at=(aj.fill!=q)?aj.fill:this.fill;var aa=(aj.fillAndStroke!=q)?aj.fillAndStroke:this.fillAndStroke;var ak,aq,an,ax;ap.save();if(aB.length){if(aC){if(at){if(this.fillToZero){var ay=this.negativeColor;if(!this.useNegativeColors){ay=aj.fillStyle}var ah=false;var ai=aj.fillStyle;if(aa){var aA=aB.slice(0)}if(this.index==0||!this._stack){var ao=[];var aE=(this.renderer.smooth)?this.renderer._smoothedPlotData:this._plotData;this._areaPoints=[];var az=this._yaxis.series_u2p(this.fillToValue);var ac=this._xaxis.series_u2p(this.fillToValue);aj.closePath=true;if(this.fillAxis=="y"){ao.push([aB[0][0],az]);this._areaPoints.push([aB[0][0],az]);for(var av=0;av<aB.length-1;av++){ao.push(aB[av]);this._areaPoints.push(aB[av]);if(aE[av][1]*aE[av+1][1]<0){if(aE[av][1]<0){ah=true;aj.fillStyle=ay}else{ah=false;aj.fillStyle=ai}var ag=aB[av][0]+(aB[av+1][0]-aB[av][0])*(az-aB[av][1])/(aB[av+1][1]-aB[av][1]);ao.push([ag,az]);this._areaPoints.push([ag,az]);if(ad){this.renderer.shadowRenderer.draw(ap,ao,aj)}this.renderer.shapeRenderer.draw(ap,ao,aj);ao=[[ag,az]]}}if(aE[aB.length-1][1]<0){ah=true;aj.fillStyle=ay}else{ah=false;aj.fillStyle=ai}ao.push(aB[aB.length-1]);this._areaPoints.push(aB[aB.length-1]);ao.push([aB[aB.length-1][0],az]);this._areaPoints.push([aB[aB.length-1][0],az])}if(ad){this.renderer.shadowRenderer.draw(ap,ao,aj)}this.renderer.shapeRenderer.draw(ap,ao,aj)}else{var am=this._prevGridData;for(var av=am.length;av>0;av--){aB.push(am[av-1])}if(ad){this.renderer.shadowRenderer.draw(ap,aB,aj)}this._areaPoints=aB;this.renderer.shapeRenderer.draw(ap,aB,aj)}}else{if(aa){var aA=aB.slice(0)}if(this.index==0||!this._stack){var ae=ap.canvas.height;aB.unshift([aB[0][0],ae]);var aw=aB.length;aB.push([aB[aw-1][0],ae])}else{var am=this._prevGridData;for(var av=am.length;av>0;av--){aB.push(am[av-1])}}this._areaPoints=aB;if(ad){this.renderer.shadowRenderer.draw(ap,aB,aj)}this.renderer.shapeRenderer.draw(ap,aB,aj)}if(aa){var ar=G.extend(true,{},aj,{fill:false,closePath:false});this.renderer.shapeRenderer.draw(ap,aA,ar);if(this.markerRenderer.show){if(this.renderer.smooth){aA=this.gridData}for(av=0;av<aA.length;av++){this.markerRenderer.draw(aA[av][0],aA[av][1],ap,aj.markerOptions)}}}}else{if(this.renderer.bands.show){var af;var aD=G.extend(true,{},aj);if(this.renderer.bands.showLines){af=(this.renderer.smooth)?this.renderer._hiBandSmoothedData:this.renderer._hiBandGridData;this.renderer.shapeRenderer.draw(ap,af,aj);af=(this.renderer.smooth)?this.renderer._lowBandSmoothedData:this.renderer._lowBandGridData;this.renderer.shapeRenderer.draw(ap,af,aD)}if(this.renderer.bands.fill){if(this.renderer.smooth){af=this.renderer._hiBandSmoothedData.concat(this.renderer._lowBandSmoothedData.reverse())}else{af=this.renderer._hiBandGridData.concat(this.renderer._lowBandGridData.reverse())}this._areaPoints=af;aD.closePath=true;aD.fill=true;aD.fillStyle=this.renderer.bands.fillColor;this.renderer.shapeRenderer.draw(ap,af,aD)}}if(ad){this.renderer.shadowRenderer.draw(ap,aB,aj)}this.renderer.shapeRenderer.draw(ap,aB,aj)}}var ak=an=aq=ax=null;for(av=0;av<this._areaPoints.length;av++){var al=this._areaPoints[av];if(ak>al[0]||ak==null){ak=al[0]}if(ax<al[1]||ax==null){ax=al[1]}if(an<al[0]||an==null){an=al[0]}if(aq>al[1]||aq==null){aq=al[1]}}if(this.type==="line"&&this.renderer.bands.show){ax=this._yaxis.series_u2p(this.renderer.bands._min);aq=this._yaxis.series_u2p(this.renderer.bands._max)}this._boundingBox=[[ak,ax],[an,aq]];if(this.markerRenderer.show&&!at){if(this.renderer.smooth){aB=this.gridData}for(av=0;av<aB.length;av++){if(aB[av][0]!=null&&aB[av][1]!=null){this.markerRenderer.draw(aB[av][0],aB[av][1],ap,aj.markerOptions)}}}}ap.restore()};G.jqplot.LineRenderer.prototype.drawShadow=function(aa,ac,ab){};function u(ad,ac,aa){for(var ab=0;ab<this.series.length;ab++){if(this.series[ab].renderer.constructor==G.jqplot.LineRenderer){if(this.series[ab].highlightMouseOver){this.series[ab].highlightMouseDown=false}}}}function Y(){if(this.plugins.lineRenderer&&this.plugins.lineRenderer.highlightCanvas){this.plugins.lineRenderer.highlightCanvas.resetCanvas();this.plugins.lineRenderer.highlightCanvas=null}this.plugins.lineRenderer.highlightedSeriesIndex=null;this.plugins.lineRenderer.highlightCanvas=new G.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.lineRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-lineRenderer-highlight-canvas",this._plotDimensions,this));this.plugins.lineRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(aa){U(aa.data.plot)})}function W(ag,af,ad,ac){var ab=ag.series[af];var aa=ag.plugins.lineRenderer.highlightCanvas;aa._ctx.clearRect(0,0,aa._ctx.canvas.width,aa._ctx.canvas.height);ab._highlightedPoint=ad;ag.plugins.lineRenderer.highlightedSeriesIndex=af;var ae={fillStyle:ab.highlightColor};if(ab.type==="line"&&ab.renderer.bands.show){ae.fill=true;ae.closePath=true}ab.renderer.shapeRenderer.draw(aa._ctx,ac,ae);aa=null}function U(ac){var aa=ac.plugins.lineRenderer.highlightCanvas;aa._ctx.clearRect(0,0,aa._ctx.canvas.width,aa._ctx.canvas.height);for(var ab=0;ab<ac.series.length;ab++){ac.series[ab]._highlightedPoint=null}ac.plugins.lineRenderer.highlightedSeriesIndex=null;ac.target.trigger("jqplotDataUnhighlight");aa=null}function f(ae,ad,ah,ag,af){if(ag){var ac=[ag.seriesIndex,ag.pointIndex,ag.data];var ab=jQuery.Event("jqplotDataMouseOver");ab.pageX=ae.pageX;ab.pageY=ae.pageY;af.target.trigger(ab,ac);if(af.series[ac[0]].highlightMouseOver&&!(ac[0]==af.plugins.lineRenderer.highlightedSeriesIndex)){var aa=jQuery.Event("jqplotDataHighlight");aa.pageX=ae.pageX;aa.pageY=ae.pageY;af.target.trigger(aa,ac);W(af,ag.seriesIndex,ag.pointIndex,ag.points)}}else{if(ag==null){U(af)}}}function c(ad,ac,ag,af,ae){if(af){var ab=[af.seriesIndex,af.pointIndex,af.data];if(ae.series[ab[0]].highlightMouseDown&&!(ab[0]==ae.plugins.lineRenderer.highlightedSeriesIndex)){var aa=jQuery.Event("jqplotDataHighlight");aa.pageX=ad.pageX;aa.pageY=ad.pageY;ae.target.trigger(aa,ab);W(ae,af.seriesIndex,af.pointIndex,af.points)}}else{if(af==null){U(ae)}}}function X(ac,ab,af,ae,ad){var aa=ad.plugins.lineRenderer.highlightedSeriesIndex;if(aa!=null&&ad.series[aa].highlightMouseDown){U(ad)}}function e(ad,ac,ag,af,ae){if(af){var ab=[af.seriesIndex,af.pointIndex,af.data];var aa=jQuery.Event("jqplotDataClick");aa.pageX=ad.pageX;aa.pageY=ad.pageY;ae.target.trigger(aa,ab)}}function o(ae,ad,ah,ag,af){if(ag){var ac=[ag.seriesIndex,ag.pointIndex,ag.data];var aa=af.plugins.lineRenderer.highlightedSeriesIndex;if(aa!=null&&af.series[aa].highlightMouseDown){U(af)}var ab=jQuery.Event("jqplotDataRightClick");ab.pageX=ae.pageX;ab.pageY=ae.pageY;af.target.trigger(ab,ac)}}G.jqplot.LinearAxisRenderer=function(){};G.jqplot.LinearAxisRenderer.prototype.init=function(aa){this.breakPoints=null;this.breakTickLabel="≈";this.drawBaseline=true;this.baselineWidth=null;this.baselineColor=null;this.forceTickAt0=false;this.forceTickAt100=false;this.tickInset=0;this.minorTicks=0;this.alignTicks=false;this._autoFormatString="";this._overrideFormatString=false;this._scalefact=1;G.extend(true,this,aa);if(this.breakPoints){if(!G.isArray(this.breakPoints)){this.breakPoints=null}else{if(this.breakPoints.length<2||this.breakPoints[1]<=this.breakPoints[0]){this.breakPoints=null}}}if(this.numberTicks!=null&&this.numberTicks<2){this.numberTicks=2}this.resetDataBounds()};G.jqplot.LinearAxisRenderer.prototype.draw=function(aa,ah){if(this.show){this.renderer.createTicks.call(this,ah);var ag=0;var ab;if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=G(document.createElement("div"));this._elem.addClass("jqplot-axis jqplot-"+this.name);this._elem.css("position","absolute");if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var af=this._label.draw(aa,ah);af.appendTo(this._elem);af=null}var ae=this._ticks;var ad;for(var ac=0;ac<ae.length;ac++){ad=ae[ac];if(ad.show&&ad.showLabel&&(!ad.isMinorTick||this.showMinorTicks)){this._elem.append(ad.draw(aa,ah))}}ad=null;ae=null}return this._elem};G.jqplot.LinearAxisRenderer.prototype.reset=function(){this.min=this._options.min;this.max=this._options.max;this.tickInterval=this._options.tickInterval;this.numberTicks=this._options.numberTicks;this._autoFormatString="";if(this._overrideFormatString&&this.tickOptions&&this.tickOptions.formatString){this.tickOptions.formatString=""}};G.jqplot.LinearAxisRenderer.prototype.set=function(){var ah=0;var ac;var ab=0;var ag=0;var aa=(this._label==null)?false:this._label.show;if(this.show){var af=this._ticks;var ae;for(var ad=0;ad<af.length;ad++){ae=af[ad];if(!ae._breakTick&&ae.show&&ae.showLabel&&(!ae.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){ac=ae._elem.outerHeight(true)}else{ac=ae._elem.outerWidth(true)}if(ac>ah){ah=ac}}}ae=null;af=null;if(aa){ab=this._label._elem.outerWidth(true);ag=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){ah=ah+ag;this._elem.css({height:ah+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){ah=ah+ag;this._elem.css({height:ah+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){ah=ah+ab;this._elem.css({width:ah+"px",left:"0px",top:"0px"});if(aa&&this._label.constructor==G.jqplot.AxisLabelRenderer){this._label._elem.css("width",ab+"px")}}else{ah=ah+ab;this._elem.css({width:ah+"px",right:"0px",top:"0px"});if(aa&&this._label.constructor==G.jqplot.AxisLabelRenderer){this._label._elem.css("width",ab+"px")}}}}}};G.jqplot.LinearAxisRenderer.prototype.createTicks=function(ac){var aM=this._ticks;var aC=this.ticks;var ar=this.name;var au=this._dataBounds;var aa,ag;var aY,aA;var ai,ah;var aW,aT;var az=this.min;var aX=this.max;var aP=this.numberTicks;var a2=this.tickInterval;if(aC.length){for(aT=0;aT<aC.length;aT++){var aG=aC[aT];var aN=new this.tickRenderer(this.tickOptions);if(G.isArray(aG)){aN.value=aG[0];if(this.breakPoints){if(aG[0]==this.breakPoints[0]){aN.label=this.breakTickLabel;aN._breakTick=true;aN.showGridline=false;aN.showMark=false}else{if(aG[0]>this.breakPoints[0]&&aG[0]<=this.breakPoints[1]){aN.show=false;aN.showGridline=false;aN.label=aG[1]}else{aN.label=aG[1]}}}else{aN.label=aG[1]}aN.setTick(aG[0],this.name);this._ticks.push(aN)}else{if(G.isPlainObject(aG)){G.extend(true,aN,aG);aN.axis=this.name;this._ticks.push(aN)}else{aN.value=aG;if(this.breakPoints){if(aG==this.breakPoints[0]){aN.label=this.breakTickLabel;aN._breakTick=true;aN.showGridline=false;aN.showMark=false}else{if(aG>this.breakPoints[0]&&aG<=this.breakPoints[1]){aN.show=false;aN.showGridline=false}}}aN.setTick(aG,this.name);this._ticks.push(aN)}}}this.numberTicks=aC.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(ar=="xaxis"||ar=="x2axis"){aa=this._plotDimensions.width}else{aa=this._plotDimensions.height}var ap=this.numberTicks;if(this.alignTicks){if(this.name==="x2axis"&&ac.axes.xaxis.show){ap=ac.axes.xaxis.numberTicks}else{if(this.name.charAt(0)==="y"&&this.name!=="yaxis"&&this.name!=="yMidAxis"&&ac.axes.yaxis.show){ap=ac.axes.yaxis.numberTicks}}}aY=((this.min!=null)?this.min:au.min);aA=((this.max!=null)?this.max:au.max);var an=aA-aY;var aL,aq;var al;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(aY>0){aY=0}if(aA<0){aA=0}}if(this.forceTickAt100){if(aY>100){aY=100}if(aA<100){aA=100}}var af=30;var aI=Math.max(aa,af+1);this._scalefact=(aI-af)/300;var aH=G.jqplot.LinearTickGenerator(aY,aA,this._scalefact,ap);var ao=aY+an*(this.padMin-1);var aJ=aA-an*(this.padMax-1);if(aY<ao||aA>aJ){ao=aY-an*(this.padMin-1);aJ=aA+an*(this.padMax-1);aH=G.jqplot.LinearTickGenerator(ao,aJ,this._scalefact,ap)}this.min=aH[0];this.max=aH[1];this.numberTicks=aH[2];this._autoFormatString=aH[3];this.tickInterval=aH[4]}else{if(aY==aA){var ab=0.05;if(aY>0){ab=Math.max(Math.log(aY)/Math.LN10,0.05)}aY-=ab;aA+=ab}if(this.autoscale&&this.min==null&&this.max==null){var ad,ae,ak;var av=false;var aF=false;var at={min:null,max:null,average:null,stddev:null};for(var aT=0;aT<this._series.length;aT++){var aO=this._series[aT];var aw=(aO.fillAxis=="x")?aO._xaxis.name:aO._yaxis.name;if(this.name==aw){var aK=aO._plotValues[aO.fillAxis];var ay=aK[0];var aU=aK[0];for(var aS=1;aS<aK.length;aS++){if(aK[aS]<ay){ay=aK[aS]}else{if(aK[aS]>aU){aU=aK[aS]}}}var am=(aU-ay)/aU;if(aO.renderer.constructor==G.jqplot.BarRenderer){if(ay>=0&&(aO.fillToZero||am>0.1)){av=true}else{av=false;if(aO.fill&&aO.fillToZero&&ay<0&&aU>0){aF=true}else{aF=false}}}else{if(aO.fill){if(ay>=0&&(aO.fillToZero||am>0.1)){av=true}else{if(ay<0&&aU>0&&aO.fillToZero){av=false;aF=true}else{av=false;aF=false}}}else{if(ay<0){av=false}}}}}if(av){this.numberTicks=2+Math.ceil((aa-(this.tickSpacing-1))/this.tickSpacing);this.min=0;az=0;ae=aA/(this.numberTicks-1);al=Math.pow(10,Math.abs(Math.floor(Math.log(ae)/Math.LN10)));if(ae/al==parseInt(ae/al,10)){ae+=al}this.tickInterval=Math.ceil(ae/al)*al;this.max=this.tickInterval*(this.numberTicks-1)}else{if(aF){this.numberTicks=2+Math.ceil((aa-(this.tickSpacing-1))/this.tickSpacing);var aB=Math.ceil(Math.abs(aY)/an*(this.numberTicks-1));var a1=this.numberTicks-1-aB;ae=Math.max(Math.abs(aY/aB),Math.abs(aA/a1));al=Math.pow(10,Math.abs(Math.floor(Math.log(ae)/Math.LN10)));this.tickInterval=Math.ceil(ae/al)*al;this.max=this.tickInterval*a1;this.min=-this.tickInterval*aB}else{if(this.numberTicks==null){if(this.tickInterval){this.numberTicks=3+Math.ceil(an/this.tickInterval)}else{this.numberTicks=2+Math.ceil((aa-(this.tickSpacing-1))/this.tickSpacing)}}if(this.tickInterval==null){ae=an/(this.numberTicks-1);if(ae<1){al=Math.pow(10,Math.abs(Math.floor(Math.log(ae)/Math.LN10)))}else{al=1}this.tickInterval=Math.ceil(ae*al*this.pad)/al}else{al=1/this.tickInterval}ad=this.tickInterval*(this.numberTicks-1);ak=(ad-an)/2;if(this.min==null){this.min=Math.floor(al*(aY-ak))/al}if(this.max==null){this.max=this.min+ad}}}var ax=G.jqplot.getSignificantFigures(this.tickInterval);var aE;if(ax.digitsLeft>=ax.significantDigits){aE="%d"}else{var al=Math.max(0,5-ax.digitsLeft);al=Math.min(al,ax.digitsRight);aE="%."+al+"f"}this._autoFormatString=aE}else{aL=(this.min!=null)?this.min:aY-an*(this.padMin-1);aq=(this.max!=null)?this.max:aA+an*(this.padMax-1);an=aq-aL;if(this.numberTicks==null){if(this.tickInterval!=null){this.numberTicks=Math.ceil((aq-aL)/this.tickInterval)+1}else{if(aa>100){this.numberTicks=parseInt(3+(aa-100)/75,10)}else{this.numberTicks=2}}}if(this.tickInterval==null){this.tickInterval=an/(this.numberTicks-1)}if(this.max==null){aq=aL+this.tickInterval*(this.numberTicks-1)}if(this.min==null){aL=aq-this.tickInterval*(this.numberTicks-1)}var ax=G.jqplot.getSignificantFigures(this.tickInterval);var aE;if(ax.digitsLeft>=ax.significantDigits){aE="%d"}else{var al=Math.max(0,5-ax.digitsLeft);al=Math.min(al,ax.digitsRight);aE="%."+al+"f"}this._autoFormatString=aE;this.min=aL;this.max=aq}if(this.renderer.constructor==G.jqplot.LinearAxisRenderer&&this._autoFormatString==""){an=this.max-this.min;var aZ=new this.tickRenderer(this.tickOptions);var aD=aZ.formatString||G.jqplot.config.defaultTickFormatString;var aD=aD.match(G.jqplot.sprintf.regex)[0];var aV=0;if(aD){if(aD.search(/[fFeEgGpP]/)>-1){var aR=aD.match(/\%\.(\d{0,})?[eEfFgGpP]/);if(aR){aV=parseInt(aR[1],10)}else{aV=6}}else{if(aD.search(/[di]/)>-1){aV=0}}var aj=Math.pow(10,-aV);if(this.tickInterval<aj){if(aP==null&&a2==null){this.tickInterval=aj;if(aX==null&&az==null){this.min=Math.floor(this._dataBounds.min/aj)*aj;if(this.min==this._dataBounds.min){this.min=this._dataBounds.min-this.tickInterval}this.max=Math.ceil(this._dataBounds.max/aj)*aj;if(this.max==this._dataBounds.max){this.max=this._dataBounds.max+this.tickInterval}var aQ=(this.max-this.min)/this.tickInterval;aQ=aQ.toFixed(11);aQ=Math.ceil(aQ);this.numberTicks=aQ+1}else{if(aX==null){var aQ=(this._dataBounds.max-this.min)/this.tickInterval;aQ=aQ.toFixed(11);this.numberTicks=Math.ceil(aQ)+2;this.max=this.min+this.tickInterval*(this.numberTicks-1)}else{if(az==null){var aQ=(this.max-this._dataBounds.min)/this.tickInterval;aQ=aQ.toFixed(11);this.numberTicks=Math.ceil(aQ)+2;this.min=this.max-this.tickInterval*(this.numberTicks-1)}else{this.numberTicks=Math.ceil((aX-az)/this.tickInterval)+1;this.min=Math.floor(az*Math.pow(10,aV))/Math.pow(10,aV);this.max=Math.ceil(aX*Math.pow(10,aV))/Math.pow(10,aV);this.numberTicks=Math.ceil((this.max-this.min)/this.tickInterval)+1}}}}}}}}if(this._overrideFormatString&&this._autoFormatString!=""){this.tickOptions=this.tickOptions||{};this.tickOptions.formatString=this._autoFormatString}var aN,a0;for(var aT=0;aT<this.numberTicks;aT++){aW=this.min+aT*this.tickInterval;aN=new this.tickRenderer(this.tickOptions);aN.setTick(aW,this.name);this._ticks.push(aN);if(aT<this.numberTicks-1){for(var aS=0;aS<this.minorTicks;aS++){aW+=this.tickInterval/(this.minorTicks+1);a0=G.extend(true,{},this.tickOptions,{name:this.name,value:aW,label:"",isMinorTick:true});aN=new this.tickRenderer(a0);this._ticks.push(aN)}}aN=null}}if(this.tickInset){this.min=this.min-this.tickInset*this.tickInterval;this.max=this.max+this.tickInset*this.tickInterval}aM=null};G.jqplot.LinearAxisRenderer.prototype.resetTickValues=function(ac){if(G.isArray(ac)&&ac.length==this._ticks.length){var ab;for(var aa=0;aa<ac.length;aa++){ab=this._ticks[aa];ab.value=ac[aa];ab.label=ab.formatter(ab.formatString,ac[aa]);ab.label=ab.prefix+ab.label;ab._elem.html(ab.label)}ab=null;this.min=G.jqplot.arrayMin(ac);this.max=G.jqplot.arrayMax(ac);this.pack()}};G.jqplot.LinearAxisRenderer.prototype.pack=function(ac,ab){ac=ac||{};ab=ab||this._offsets;var aq=this._ticks;var am=this.max;var al=this.min;var ah=ab.max;var af=ab.min;var aj=(this._label==null)?false:this._label.show;for(var ak in ac){this._elem.css(ak,ac[ak])}this._offsets=ab;var ad=ah-af;var ae=am-al;if(this.breakPoints){ae=ae-this.breakPoints[1]+this.breakPoints[0];this.p2u=function(at){return(at-af)*ae/ad+al};this.u2p=function(at){if(at>this.breakPoints[0]&&at<this.breakPoints[1]){at=this.breakPoints[0]}if(at<=this.breakPoints[0]){return(at-al)*ad/ae+af}else{return(at-this.breakPoints[1]+this.breakPoints[0]-al)*ad/ae+af}};if(this.name.charAt(0)=="x"){this.series_u2p=function(at){if(at>this.breakPoints[0]&&at<this.breakPoints[1]){at=this.breakPoints[0]}if(at<=this.breakPoints[0]){return(at-al)*ad/ae}else{return(at-this.breakPoints[1]+this.breakPoints[0]-al)*ad/ae}};this.series_p2u=function(at){return at*ae/ad+al}}else{this.series_u2p=function(at){if(at>this.breakPoints[0]&&at<this.breakPoints[1]){at=this.breakPoints[0]}if(at>=this.breakPoints[1]){return(at-am)*ad/ae}else{return(at+this.breakPoints[1]-this.breakPoints[0]-am)*ad/ae}};this.series_p2u=function(at){return at*ae/ad+am}}}else{this.p2u=function(at){return(at-af)*ae/ad+al};this.u2p=function(at){return(at-al)*ad/ae+af};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(at){return(at-al)*ad/ae};this.series_p2u=function(at){return at*ae/ad+al}}else{this.series_u2p=function(at){return(at-am)*ad/ae};this.series_p2u=function(at){return at*ae/ad+am}}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(var an=0;an<aq.length;an++){var ai=aq[an];if(ai.show&&ai.showLabel){var aa;if(ai.constructor==G.jqplot.CanvasAxisTickRenderer&&ai.angle){var ap=(this.name=="xaxis")?1:-1;switch(ai.labelPosition){case"auto":if(ap*ai.angle<0){aa=-ai.getWidth()+ai._textRenderer.height*Math.sin(-ai._textRenderer.angle)/2}else{aa=-ai._textRenderer.height*Math.sin(ai._textRenderer.angle)/2}break;case"end":aa=-ai.getWidth()+ai._textRenderer.height*Math.sin(-ai._textRenderer.angle)/2;break;case"start":aa=-ai._textRenderer.height*Math.sin(ai._textRenderer.angle)/2;break;case"middle":aa=-ai.getWidth()/2+ai._textRenderer.height*Math.sin(-ai._textRenderer.angle)/2;break;default:aa=-ai.getWidth()/2+ai._textRenderer.height*Math.sin(-ai._textRenderer.angle)/2;break}}else{aa=-ai.getWidth()/2}var ar=this.u2p(ai.value)+aa+"px";ai._elem.css("left",ar);ai.pack()}}if(aj){var ag=this._label._elem.outerWidth(true);this._label._elem.css("left",af+ad/2-ag/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}}else{for(var an=0;an<aq.length;an++){var ai=aq[an];if(ai.show&&ai.showLabel){var aa;if(ai.constructor==G.jqplot.CanvasAxisTickRenderer&&ai.angle){var ap=(this.name=="yaxis")?1:-1;switch(ai.labelPosition){case"auto":case"end":if(ap*ai.angle<0){aa=-ai._textRenderer.height*Math.cos(-ai._textRenderer.angle)/2}else{aa=-ai.getHeight()+ai._textRenderer.height*Math.cos(ai._textRenderer.angle)/2}break;case"start":if(ai.angle>0){aa=-ai._textRenderer.height*Math.cos(-ai._textRenderer.angle)/2}else{aa=-ai.getHeight()+ai._textRenderer.height*Math.cos(ai._textRenderer.angle)/2}break;case"middle":aa=-ai.getHeight()/2;break;default:aa=-ai.getHeight()/2;break}}else{aa=-ai.getHeight()/2}var ar=this.u2p(ai.value)+aa+"px";ai._elem.css("top",ar);ai.pack()}}if(aj){var ao=this._label._elem.outerHeight(true);this._label._elem.css("top",ah-ad/2-ao/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}aq=null};function g(ab){var aa;ab=Math.abs(ab);if(ab>=10){aa="%d"}else{if(ab>1){if(ab===parseInt(ab)){aa="%d"}else{aa="%.1f"}}else{var ac=-Math.floor(Math.log(ab)/Math.LN10);aa="%."+ac+"f"}}return aa}var a=[0.1,0.2,0.3,0.4,0.5,0.8,1,2,3,4,5];var b=function(ab){var aa=a.indexOf(ab);if(aa>0){return a[aa-1]}else{return a[a.length-1]/100}};var h=function(ab){var aa=a.indexOf(ab);if(aa<a.length-1){return a[aa+1]}else{return a[0]*100}};function R(ab,ae){var ad=ab/(ae-1);var ac=Math.pow(10,Math.floor(Math.log(ad)/Math.LN10));var af=ad/ac;var aa;if(ac<1){if(af>5){aa=10*ac}else{if(af>2){aa=5*ac}else{if(af>1){aa=2*ac}else{aa=ac}}}}else{if(af>5){aa=10*ac}else{if(af>4){aa=5*ac}else{if(af>3){aa=4*ac}else{if(af>2){aa=3*ac}else{if(af>1){aa=2*ac}else{aa=ac}}}}}}return aa}function L(ab,aa){var ad=Math.floor(Math.log(ab)/Math.LN10);var af=Math.pow(10,ad);var ae=ab/af;var ac;ae=ae/aa;if(ae<=0.38){ac=0.1}else{if(ae<=1.6){ac=0.2}else{if(ae<=4){ac=0.5}else{if(ae<=8){ac=1}else{if(ae<=16){ac=2}else{ac=5}}}}}return ac*af}function s(ac,ab){var ae=Math.floor(Math.log(ac)/Math.LN10);var ag=Math.pow(10,ae);var af=ac/ag;var aa;var ad;af=af/ab;if(af<=0.38){ad=0.1}else{if(af<=1.6){ad=0.2}else{if(af<=4){ad=0.5}else{if(af<=8){ad=1}else{if(af<=16){ad=2}else{ad=5}}}}}aa=ad*ag;return[aa,ad,ag]}G.jqplot.LinearTickGenerator=function(af,ag,ac,ad){if(af===ag){ag=(ag)?0:1}ac=ac||1;if(ag<af){var ah=ag;ag=af;af=ah}var ab=[];var ai=L(ag-af,ac);if(ad==null){ab[0]=Math.floor(af/ai)*ai;ab[1]=Math.ceil(ag/ai)*ai;ab[2]=Math.round((ab[1]-ab[0])/ai+1);ab[3]=g(ai);ab[4]=ai}else{var ae=[];ae[0]=Math.floor(af/ai)*ai;ae[1]=Math.ceil(ag/ai)*ai;ae[2]=Math.round((ae[1]-ae[0])/ai+1);ae[3]=g(ai);ae[4]=ai;if(ae[2]===ad){ab=ae}else{var aa=R(ae[1]-ae[0],ad);ab[0]=ae[0];ab[2]=ad;ab[4]=aa;ab[3]=g(aa);ab[1]=ab[0]+(ab[2]-1)*ab[4]}}return ab};G.jqplot.LinearTickGenerator.bestLinearInterval=L;G.jqplot.LinearTickGenerator.bestInterval=R;G.jqplot.LinearTickGenerator.bestLinearComponents=s;G.jqplot.MarkerRenderer=function(aa){this.show=true;this.style="filledCircle";this.lineWidth=2;this.size=9;this.color="#666666";this.shadow=true;this.shadowAngle=45;this.shadowOffset=1;this.shadowDepth=3;this.shadowAlpha="0.07";this.shadowRenderer=new G.jqplot.ShadowRenderer();this.shapeRenderer=new G.jqplot.ShapeRenderer();G.extend(true,this,aa)};G.jqplot.MarkerRenderer.prototype.init=function(aa){G.extend(true,this,aa);var ac={angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,lineWidth:this.lineWidth,depth:this.shadowDepth,closePath:true};if(this.style.indexOf("filled")!=-1){ac.fill=true}if(this.style.indexOf("ircle")!=-1){ac.isarc=true;ac.closePath=false}this.shadowRenderer.init(ac);var ab={fill:false,isarc:false,strokeStyle:this.color,fillStyle:this.color,lineWidth:this.lineWidth,closePath:true};if(this.style.indexOf("filled")!=-1){ab.fill=true}if(this.style.indexOf("ircle")!=-1){ab.isarc=true;ab.closePath=false}this.shapeRenderer.init(ab)};G.jqplot.MarkerRenderer.prototype.drawDiamond=function(ac,ab,af,ae,ah){var aa=1.2;var ai=this.size/2/aa;var ag=this.size/2*aa;var ad=[[ac-ai,ab],[ac,ab+ag],[ac+ai,ab],[ac,ab-ag]];if(this.shadow){this.shadowRenderer.draw(af,ad)}this.shapeRenderer.draw(af,ad,ah)};G.jqplot.MarkerRenderer.prototype.drawPlus=function(ad,ac,ag,af,aj){var ab=1;var ak=this.size/2*ab;var ah=this.size/2*ab;var ai=[[ad,ac-ah],[ad,ac+ah]];var ae=[[ad+ak,ac],[ad-ak,ac]];var aa=G.extend(true,{},this.options,{closePath:false});if(this.shadow){this.shadowRenderer.draw(ag,ai,{closePath:false});this.shadowRenderer.draw(ag,ae,{closePath:false})}this.shapeRenderer.draw(ag,ai,aa);this.shapeRenderer.draw(ag,ae,aa)};G.jqplot.MarkerRenderer.prototype.drawX=function(ad,ac,ag,af,aj){var ab=1;var ak=this.size/2*ab;var ah=this.size/2*ab;var aa=G.extend(true,{},this.options,{closePath:false});var ai=[[ad-ak,ac-ah],[ad+ak,ac+ah]];var ae=[[ad-ak,ac+ah],[ad+ak,ac-ah]];if(this.shadow){this.shadowRenderer.draw(ag,ai,{closePath:false});this.shadowRenderer.draw(ag,ae,{closePath:false})}this.shapeRenderer.draw(ag,ai,aa);this.shapeRenderer.draw(ag,ae,aa)};G.jqplot.MarkerRenderer.prototype.drawDash=function(ac,ab,af,ae,ah){var aa=1;var ai=this.size/2*aa;var ag=this.size/2*aa;var ad=[[ac-ai,ab],[ac+ai,ab]];if(this.shadow){this.shadowRenderer.draw(af,ad)}this.shapeRenderer.draw(af,ad,ah)};G.jqplot.MarkerRenderer.prototype.drawLine=function(af,ae,aa,ad,ab){var ac=[af,ae];if(this.shadow){this.shadowRenderer.draw(aa,ac)}this.shapeRenderer.draw(aa,ac,ab)};G.jqplot.MarkerRenderer.prototype.drawSquare=function(ac,ab,af,ae,ah){var aa=1;var ai=this.size/2/aa;var ag=this.size/2*aa;var ad=[[ac-ai,ab-ag],[ac-ai,ab+ag],[ac+ai,ab+ag],[ac+ai,ab-ag]];if(this.shadow){this.shadowRenderer.draw(af,ad)}this.shapeRenderer.draw(af,ad,ah)};G.jqplot.MarkerRenderer.prototype.drawCircle=function(ab,ah,ad,ag,ae){var aa=this.size/2;var ac=2*Math.PI;var af=[ab,ah,aa,0,ac,true];if(this.shadow){this.shadowRenderer.draw(ad,af)}this.shapeRenderer.draw(ad,af,ae)};G.jqplot.MarkerRenderer.prototype.draw=function(aa,ad,ab,ac){ac=ac||{};if(ac.show==null||ac.show!=false){if(ac.color&&!ac.fillStyle){ac.fillStyle=ac.color}if(ac.color&&!ac.strokeStyle){ac.strokeStyle=ac.color}switch(this.style){case"diamond":this.drawDiamond(aa,ad,ab,false,ac);break;case"filledDiamond":this.drawDiamond(aa,ad,ab,true,ac);break;case"circle":this.drawCircle(aa,ad,ab,false,ac);break;case"filledCircle":this.drawCircle(aa,ad,ab,true,ac);break;case"square":this.drawSquare(aa,ad,ab,false,ac);break;case"filledSquare":this.drawSquare(aa,ad,ab,true,ac);break;case"x":this.drawX(aa,ad,ab,true,ac);break;case"plus":this.drawPlus(aa,ad,ab,true,ac);break;case"dash":this.drawDash(aa,ad,ab,true,ac);break;case"line":this.drawLine(aa,ad,ab,false,ac);break;default:this.drawDiamond(aa,ad,ab,false,ac);break}}};G.jqplot.ShadowRenderer=function(aa){this.angle=45;this.offset=1;this.alpha=0.07;this.lineWidth=1.5;this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.depth=3;this.strokeStyle="rgba(0,0,0,0.1)";this.isarc=false;G.extend(true,this,aa)};G.jqplot.ShadowRenderer.prototype.init=function(aa){G.extend(true,this,aa)};G.jqplot.ShadowRenderer.prototype.draw=function(an,al,ap){an.save();var aa=(ap!=null)?ap:{};var am=(aa.fill!=null)?aa.fill:this.fill;var ai=(aa.fillRect!=null)?aa.fillRect:this.fillRect;var ah=(aa.closePath!=null)?aa.closePath:this.closePath;var ae=(aa.offset!=null)?aa.offset:this.offset;var ac=(aa.alpha!=null)?aa.alpha:this.alpha;var ag=(aa.depth!=null)?aa.depth:this.depth;var ao=(aa.isarc!=null)?aa.isarc:this.isarc;var aj=(aa.linePattern!=null)?aa.linePattern:this.linePattern;an.lineWidth=(aa.lineWidth!=null)?aa.lineWidth:this.lineWidth;an.lineJoin=(aa.lineJoin!=null)?aa.lineJoin:this.lineJoin;an.lineCap=(aa.lineCap!=null)?aa.lineCap:this.lineCap;an.strokeStyle=aa.strokeStyle||this.strokeStyle||"rgba(0,0,0,"+ac+")";an.fillStyle=aa.fillStyle||this.fillStyle||"rgba(0,0,0,"+ac+")";for(var ad=0;ad<ag;ad++){var ak=G.jqplot.LinePattern(an,aj);an.translate(Math.cos(this.angle*Math.PI/180)*ae,Math.sin(this.angle*Math.PI/180)*ae);ak.beginPath();if(ao){an.arc(al[0],al[1],al[2],al[3],al[4],true)}else{if(ai){if(ai){an.fillRect(al[0],al[1],al[2],al[3])}}else{if(al&&al.length){var ab=true;for(var af=0;af<al.length;af++){if(al[af][0]!=null&&al[af][1]!=null){if(ab){ak.moveTo(al[af][0],al[af][1]);ab=false}else{ak.lineTo(al[af][0],al[af][1])}}else{ab=true}}}}}if(ah){ak.closePath()}if(am){an.fill()}else{an.stroke()}}an.restore()};G.jqplot.ShapeRenderer=function(aa){this.lineWidth=1.5;this.linePattern="solid";this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.isarc=false;this.fillRect=false;this.strokeRect=false;this.clearRect=false;this.strokeStyle="#999999";this.fillStyle="#999999";G.extend(true,this,aa)};G.jqplot.ShapeRenderer.prototype.init=function(aa){G.extend(true,this,aa)};G.jqplot.ShapeRenderer.prototype.draw=function(al,aj,an){al.save();var aa=(an!=null)?an:{};var ak=(aa.fill!=null)?aa.fill:this.fill;var af=(aa.closePath!=null)?aa.closePath:this.closePath;var ag=(aa.fillRect!=null)?aa.fillRect:this.fillRect;var ad=(aa.strokeRect!=null)?aa.strokeRect:this.strokeRect;var ab=(aa.clearRect!=null)?aa.clearRect:this.clearRect;var am=(aa.isarc!=null)?aa.isarc:this.isarc;var ah=(aa.linePattern!=null)?aa.linePattern:this.linePattern;var ai=G.jqplot.LinePattern(al,ah);al.lineWidth=aa.lineWidth||this.lineWidth;al.lineJoin=aa.lineJoin||this.lineJoin;al.lineCap=aa.lineCap||this.lineCap;al.strokeStyle=(aa.strokeStyle||aa.color)||this.strokeStyle;al.fillStyle=aa.fillStyle||this.fillStyle;al.beginPath();if(am){al.arc(aj[0],aj[1],aj[2],aj[3],aj[4],true);if(af){al.closePath()}if(ak){al.fill()}else{al.stroke()}al.restore();return}else{if(ab){al.clearRect(aj[0],aj[1],aj[2],aj[3]);al.restore();return}else{if(ag||ad){if(ag){al.fillRect(aj[0],aj[1],aj[2],aj[3])}if(ad){al.strokeRect(aj[0],aj[1],aj[2],aj[3]);al.restore();return}}else{if(aj&&aj.length){var ac=true;for(var ae=0;ae<aj.length;ae++){if(aj[ae][0]!=null&&aj[ae][1]!=null){if(ac){ai.moveTo(aj[ae][0],aj[ae][1]);ac=false}else{ai.lineTo(aj[ae][0],aj[ae][1])}}else{ac=true}}if(af){ai.closePath()}if(ak){al.fill()}else{al.stroke()}}}}}al.restore()};G.jqplot.TableLegendRenderer=function(){};G.jqplot.TableLegendRenderer.prototype.init=function(aa){G.extend(true,this,aa)};G.jqplot.TableLegendRenderer.prototype.addrow=function(aj,ad,aa,ah){var ae=(aa)?this.rowSpacing+"px":"0px";var ai;var ac;var ab;var ag;var af;ab=document.createElement("tr");ai=G(ab);ai.addClass("jqplot-table-legend");ab=null;if(ah){ai.prependTo(this._elem)}else{ai.appendTo(this._elem)}if(this.showSwatches){ac=G(document.createElement("td"));ac.addClass("jqplot-table-legend jqplot-table-legend-swatch");ac.css({textAlign:"center",paddingTop:ae});ag=G(document.createElement("div"));ag.addClass("jqplot-table-legend-swatch-outline");af=G(document.createElement("div"));af.addClass("jqplot-table-legend-swatch");af.css({backgroundColor:ad,borderColor:ad});ai.append(ac.append(ag.append(af)))}if(this.showLabels){ac=G(document.createElement("td"));ac.addClass("jqplot-table-legend jqplot-table-legend-label");ac.css("paddingTop",ae);ai.append(ac);if(this.escapeHtml){ac.text(aj)}else{ac.html(aj)}}ac=null;ag=null;af=null;ai=null;ab=null};G.jqplot.TableLegendRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}if(this.show){var af=this._series;var ab=document.createElement("table");this._elem=G(ab);this._elem.addClass("jqplot-table-legend");var ak={position:"absolute"};if(this.background){ak.background=this.background}if(this.border){ak.border=this.border}if(this.fontSize){ak.fontSize=this.fontSize}if(this.fontFamily){ak.fontFamily=this.fontFamily}if(this.textColor){ak.textColor=this.textColor}if(this.marginTop!=null){ak.marginTop=this.marginTop}if(this.marginBottom!=null){ak.marginBottom=this.marginBottom}if(this.marginLeft!=null){ak.marginLeft=this.marginLeft}if(this.marginRight!=null){ak.marginRight=this.marginRight}var aa=false,ah=false,aj;for(var ag=0;ag<af.length;ag++){aj=af[ag];if(aj._stack||aj.renderer.constructor==G.jqplot.BezierCurveRenderer){ah=true}if(aj.show&&aj.showLabel){var ae=this.labels[ag]||aj.label.toString();if(ae){var ac=aj.color;if(ah&&ag<af.length-1){aa=true}else{if(ah&&ag==af.length-1){aa=false}}this.renderer.addrow.call(this,ae,ac,aa,ah);aa=true}for(var ad=0;ad<G.jqplot.addLegendRowHooks.length;ad++){var ai=G.jqplot.addLegendRowHooks[ad].call(this,aj);if(ai){this.renderer.addrow.call(this,ai.label,ai.color,aa);aa=true}}ae=null}}}return this._elem};G.jqplot.TableLegendRenderer.prototype.pack=function(ac){if(this.show){if(this.placement=="insideGrid"){switch(this.location){case"nw":var ab=ac.left;var aa=ac.top;this._elem.css("left",ab);this._elem.css("top",aa);break;case"n":var ab=(ac.left+(this._plotDimensions.width-ac.right))/2-this.getWidth()/2;var aa=ac.top;this._elem.css("left",ab);this._elem.css("top",aa);break;case"ne":var ab=ac.right;var aa=ac.top;this._elem.css({right:ab,top:aa});break;case"e":var ab=ac.right;var aa=(ac.top+(this._plotDimensions.height-ac.bottom))/2-this.getHeight()/2;this._elem.css({right:ab,top:aa});break;case"se":var ab=ac.right;var aa=ac.bottom;this._elem.css({right:ab,bottom:aa});break;case"s":var ab=(ac.left+(this._plotDimensions.width-ac.right))/2-this.getWidth()/2;var aa=ac.bottom;this._elem.css({left:ab,bottom:aa});break;case"sw":var ab=ac.left;var aa=ac.bottom;this._elem.css({left:ab,bottom:aa});break;case"w":var ab=ac.left;var aa=(ac.top+(this._plotDimensions.height-ac.bottom))/2-this.getHeight()/2;this._elem.css({left:ab,top:aa});break;default:var ab=ac.right;var aa=ac.bottom;this._elem.css({right:ab,bottom:aa});break}}else{if(this.placement=="outside"){switch(this.location){case"nw":var ab=this._plotDimensions.width-ac.left;var aa=ac.top;this._elem.css("right",ab);this._elem.css("top",aa);break;case"n":var ab=(ac.left+(this._plotDimensions.width-ac.right))/2-this.getWidth()/2;var aa=this._plotDimensions.height-ac.top;this._elem.css("left",ab);this._elem.css("bottom",aa);break;case"ne":var ab=this._plotDimensions.width-ac.right;var aa=ac.top;this._elem.css({left:ab,top:aa});break;case"e":var ab=this._plotDimensions.width-ac.right;var aa=(ac.top+(this._plotDimensions.height-ac.bottom))/2-this.getHeight()/2;this._elem.css({left:ab,top:aa});break;case"se":var ab=this._plotDimensions.width-ac.right;var aa=ac.bottom;this._elem.css({left:ab,bottom:aa});break;case"s":var ab=(ac.left+(this._plotDimensions.width-ac.right))/2-this.getWidth()/2;var aa=this._plotDimensions.height-ac.bottom;this._elem.css({left:ab,top:aa});break;case"sw":var ab=this._plotDimensions.width-ac.left;var aa=ac.bottom;this._elem.css({right:ab,bottom:aa});break;case"w":var ab=this._plotDimensions.width-ac.left;var aa=(ac.top+(this._plotDimensions.height-ac.bottom))/2-this.getHeight()/2;this._elem.css({right:ab,top:aa});break;default:var ab=ac.right;var aa=ac.bottom;this._elem.css({right:ab,bottom:aa});break}}else{switch(this.location){case"nw":this._elem.css({left:0,top:ac.top});break;case"n":var ab=(ac.left+(this._plotDimensions.width-ac.right))/2-this.getWidth()/2;this._elem.css({left:ab,top:ac.top});break;case"ne":this._elem.css({right:0,top:ac.top});break;case"e":var aa=(ac.top+(this._plotDimensions.height-ac.bottom))/2-this.getHeight()/2;this._elem.css({right:ac.right,top:aa});break;case"se":this._elem.css({right:ac.right,bottom:ac.bottom});break;case"s":var ab=(ac.left+(this._plotDimensions.width-ac.right))/2-this.getWidth()/2;this._elem.css({left:ab,bottom:ac.bottom});break;case"sw":this._elem.css({left:ac.left,bottom:ac.bottom});break;case"w":var aa=(ac.top+(this._plotDimensions.height-ac.bottom))/2-this.getHeight()/2;this._elem.css({left:ac.left,top:aa});break;default:this._elem.css({right:ac.right,bottom:ac.bottom});break}}}}};G.jqplot.ThemeEngine=function(){this.themes={};this.activeTheme=null};G.jqplot.ThemeEngine.prototype.init=function(){var ad=new G.jqplot.Theme({_name:"Default"});var ag,ab,af;for(ag in ad.target){if(ag=="textColor"){ad.target[ag]=this.target.css("color")}else{ad.target[ag]=this.target.css(ag)}}if(this.title.show&&this.title._elem){for(ag in ad.title){if(ag=="textColor"){ad.title[ag]=this.title._elem.css("color")}else{ad.title[ag]=this.title._elem.css(ag)}}}for(ag in ad.grid){ad.grid[ag]=this.grid[ag]}if(ad.grid.backgroundColor==null&&this.grid.background!=null){ad.grid.backgroundColor=this.grid.background}if(this.legend.show&&this.legend._elem){for(ag in ad.legend){if(ag=="textColor"){ad.legend[ag]=this.legend._elem.css("color")}else{ad.legend[ag]=this.legend._elem.css(ag)}}}var ac;for(ab=0;ab<this.series.length;ab++){ac=this.series[ab];if(ac.renderer.constructor==G.jqplot.LineRenderer){ad.series.push(new l())}else{if(ac.renderer.constructor==G.jqplot.BarRenderer){ad.series.push(new O())}else{if(ac.renderer.constructor==G.jqplot.PieRenderer){ad.series.push(new d())}else{if(ac.renderer.constructor==G.jqplot.DonutRenderer){ad.series.push(new B())}else{if(ac.renderer.constructor==G.jqplot.FunnelRenderer){ad.series.push(new T())}else{if(ac.renderer.constructor==G.jqplot.MeterGaugeRenderer){ad.series.push(new y())}else{ad.series.push({})}}}}}}for(ag in ad.series[ab]){ad.series[ab][ag]=ac[ag]}}var aa,ae;for(ag in this.axes){ae=this.axes[ag];aa=ad.axes[ag]=new K();aa.borderColor=ae.borderColor;aa.borderWidth=ae.borderWidth;if(ae._ticks&&ae._ticks[0]){for(af in aa.ticks){if(ae._ticks[0].hasOwnProperty(af)){aa.ticks[af]=ae._ticks[0][af]}else{if(ae._ticks[0]._elem){aa.ticks[af]=ae._ticks[0]._elem.css(af)}}}}if(ae._label&&ae._label.show){for(af in aa.label){if(ae._label[af]){aa.label[af]=ae._label[af]}else{if(ae._label._elem){if(af=="textColor"){aa.label[af]=ae._label._elem.css("color")}else{aa.label[af]=ae._label._elem.css(af)}}}}}}this.themeEngine._add(ad);this.themeEngine.activeTheme=this.themeEngine.themes[ad._name]};G.jqplot.ThemeEngine.prototype.get=function(aa){if(!aa){return this.activeTheme}else{return this.themes[aa]}};function J(ab,aa){return ab-aa}G.jqplot.ThemeEngine.prototype.getThemeNames=function(){var aa=[];for(var ab in this.themes){aa.push(ab)}return aa.sort(J)};G.jqplot.ThemeEngine.prototype.getThemes=function(){var ab=[];var aa=[];for(var ad in this.themes){ab.push(ad)}ab.sort(J);for(var ac=0;ac<ab.length;ac++){aa.push(this.themes[ab[ac]])}return aa};G.jqplot.ThemeEngine.prototype.activate=function(an,at){var aa=false;if(!at&&this.activeTheme&&this.activeTheme._name){at=this.activeTheme._name}if(!this.themes.hasOwnProperty(at)){throw new Error("No theme of that name")}else{var af=this.themes[at];this.activeTheme=af;var ar,al=false,ak=false;var ab=["xaxis","x2axis","yaxis","y2axis"];for(ao=0;ao<ab.length;ao++){var ag=ab[ao];if(af.axesStyles.borderColor!=null){an.axes[ag].borderColor=af.axesStyles.borderColor}if(af.axesStyles.borderWidth!=null){an.axes[ag].borderWidth=af.axesStyles.borderWidth}}for(var aq in an.axes){var ad=an.axes[aq];if(ad.show){var aj=af.axes[aq]||{};var ah=af.axesStyles;var ae=G.jqplot.extend(true,{},aj,ah);ar=(af.axesStyles.borderColor!=null)?af.axesStyles.borderColor:ae.borderColor;if(ae.borderColor!=null){ad.borderColor=ae.borderColor;aa=true}ar=(af.axesStyles.borderWidth!=null)?af.axesStyles.borderWidth:ae.borderWidth;if(ae.borderWidth!=null){ad.borderWidth=ae.borderWidth;aa=true}if(ad._ticks&&ad._ticks[0]){for(var ac in ae.ticks){ar=ae.ticks[ac];if(ar!=null){ad.tickOptions[ac]=ar;ad._ticks=[];aa=true}}}if(ad._label&&ad._label.show){for(var ac in ae.label){ar=ae.label[ac];if(ar!=null){ad.labelOptions[ac]=ar;aa=true}}}}}for(var am in af.grid){if(af.grid[am]!=null){an.grid[am]=af.grid[am]}}if(!aa){an.grid.draw()}if(an.legend.show){for(am in af.legend){if(af.legend[am]!=null){an.legend[am]=af.legend[am]}}}if(an.title.show){for(am in af.title){if(af.title[am]!=null){an.title[am]=af.title[am]}}}var ao;for(ao=0;ao<af.series.length;ao++){var ai={};var ap=false;for(am in af.series[ao]){ar=(af.seriesStyles[am]!=null)?af.seriesStyles[am]:af.series[ao][am];if(ar!=null){ai[am]=ar;if(am=="color"){an.series[ao].renderer.shapeRenderer.fillStyle=ar;an.series[ao].renderer.shapeRenderer.strokeStyle=ar;an.series[ao][am]=ar}else{if((am=="lineWidth")||(am=="linePattern")){an.series[ao].renderer.shapeRenderer[am]=ar;an.series[ao][am]=ar}else{if(am=="markerOptions"){Q(an.series[ao].markerOptions,ar);Q(an.series[ao].markerRenderer,ar)}else{an.series[ao][am]=ar}}}aa=true}}}if(aa){an.target.empty();an.draw()}for(am in af.target){if(af.target[am]!=null){an.target.css(am,af.target[am])}}}};G.jqplot.ThemeEngine.prototype._add=function(ab,aa){if(aa){ab._name=aa}if(!ab._name){ab._name=Date.parse(new Date())}if(!this.themes.hasOwnProperty(ab._name)){this.themes[ab._name]=ab}else{throw new Error("jqplot.ThemeEngine Error: Theme already in use")}};G.jqplot.ThemeEngine.prototype.remove=function(aa){if(aa=="Default"){return false}return delete this.themes[aa]};G.jqplot.ThemeEngine.prototype.newTheme=function(aa,ac){if(typeof(aa)=="object"){ac=ac||aa;aa=null}if(ac&&ac._name){aa=ac._name}else{aa=aa||Date.parse(new Date())}var ab=this.copy(this.themes.Default._name,aa);G.jqplot.extend(ab,ac);return ab};function w(ac){if(ac==null||typeof(ac)!="object"){return ac}var aa=new ac.constructor();for(var ab in ac){aa[ab]=w(ac[ab])}return aa}G.jqplot.clone=w;function Q(ac,ab){if(ab==null||typeof(ab)!="object"){return}for(var aa in ab){if(aa=="highlightColors"){ac[aa]=w(ab[aa])}if(ab[aa]!=null&&typeof(ab[aa])=="object"){if(!ac.hasOwnProperty(aa)){ac[aa]={}}Q(ac[aa],ab[aa])}else{ac[aa]=ab[aa]}}}G.jqplot.merge=Q;G.jqplot.extend=function(){var af=arguments[0]||{},ad=1,ae=arguments.length,aa=false,ac;if(typeof af==="boolean"){aa=af;af=arguments[1]||{};ad=2}if(typeof af!=="object"&&!toString.call(af)==="[object Function]"){af={}}for(;ad<ae;ad++){if((ac=arguments[ad])!=null){for(var ab in ac){var ag=af[ab],ah=ac[ab];if(af===ah){continue}if(aa&&ah&&typeof ah==="object"&&!ah.nodeType){af[ab]=G.jqplot.extend(aa,ag||(ah.length!=null?[]:{}),ah)}else{if(ah!==q){af[ab]=ah}}}}}return af};G.jqplot.ThemeEngine.prototype.rename=function(ab,aa){if(ab=="Default"||aa=="Default"){throw new Error("jqplot.ThemeEngine Error: Cannot rename from/to Default")}if(this.themes.hasOwnProperty(aa)){throw new Error("jqplot.ThemeEngine Error: New name already in use.")}else{if(this.themes.hasOwnProperty(ab)){var ac=this.copy(ab,aa);this.remove(ab);return ac}}throw new Error("jqplot.ThemeEngine Error: Old name or new name invalid")};G.jqplot.ThemeEngine.prototype.copy=function(aa,ac,ae){if(ac=="Default"){throw new Error("jqplot.ThemeEngine Error: Cannot copy over Default theme")}if(!this.themes.hasOwnProperty(aa)){var ab="jqplot.ThemeEngine Error: Source name invalid";throw new Error(ab)}if(this.themes.hasOwnProperty(ac)){var ab="jqplot.ThemeEngine Error: Target name invalid";throw new Error(ab)}else{var ad=w(this.themes[aa]);ad._name=ac;G.jqplot.extend(true,ad,ae);this._add(ad);return ad}};G.jqplot.Theme=function(aa,ab){if(typeof(aa)=="object"){ab=ab||aa;aa=null}aa=aa||Date.parse(new Date());this._name=aa;this.target={backgroundColor:null};this.legend={textColor:null,fontFamily:null,fontSize:null,border:null,background:null};this.title={textColor:null,fontFamily:null,fontSize:null,textAlign:null};this.seriesStyles={};this.series=[];this.grid={drawGridlines:null,gridLineColor:null,gridLineWidth:null,backgroundColor:null,borderColor:null,borderWidth:null,shadow:null};this.axesStyles={label:{},ticks:{}};this.axes={};if(typeof(ab)=="string"){this._name=ab}else{if(typeof(ab)=="object"){G.jqplot.extend(true,this,ab)}}};var K=function(){this.borderColor=null;this.borderWidth=null;this.ticks=new k();this.label=new p()};var k=function(){this.show=null;this.showGridline=null;this.showLabel=null;this.showMark=null;this.size=null;this.textColor=null;this.whiteSpace=null;this.fontSize=null;this.fontFamily=null};var p=function(){this.textColor=null;this.whiteSpace=null;this.fontSize=null;this.fontFamily=null;this.fontWeight=null};var l=function(){this.color=null;this.lineWidth=null;this.linePattern=null;this.shadow=null;this.fillColor=null;this.showMarker=null;this.markerOptions=new D()};var D=function(){this.show=null;this.style=null;this.lineWidth=null;this.size=null;this.color=null;this.shadow=null};var O=function(){this.color=null;this.seriesColors=null;this.lineWidth=null;this.shadow=null;this.barPadding=null;this.barMargin=null;this.barWidth=null;this.highlightColors=null};var d=function(){this.seriesColors=null;this.padding=null;this.sliceMargin=null;this.fill=null;this.shadow=null;this.startAngle=null;this.lineWidth=null;this.highlightColors=null};var B=function(){this.seriesColors=null;this.padding=null;this.sliceMargin=null;this.fill=null;this.shadow=null;this.startAngle=null;this.lineWidth=null;this.innerDiameter=null;this.thickness=null;this.ringMargin=null;this.highlightColors=null};var T=function(){this.color=null;this.lineWidth=null;this.shadow=null;this.padding=null;this.sectionMargin=null;this.seriesColors=null;this.highlightColors=null};var y=function(){this.padding=null;this.backgroundColor=null;this.ringColor=null;this.tickColor=null;this.ringWidth=null;this.intervalColors=null;this.intervalInnerRadius=null;this.intervalOuterRadius=null;this.hubRadius=null;this.needleThickness=null;this.needlePad=null};G.fn.jqplotChildText=function(){return G(this).contents().filter(function(){return this.nodeType==3}).text()};G.fn.jqplotGetComputedFontStyle=function(){var ad=window.getComputedStyle?window.getComputedStyle(this[0]):this[0].currentStyle;var ab=ad["font-style"]?["font-style","font-weight","font-size","font-family"]:["fontStyle","fontWeight","fontSize","fontFamily"];var ae=[];for(var ac=0;ac<ab.length;++ac){var aa=String(ad[ab[ac]]);if(aa&&aa!="normal"){ae.push(aa)}}return ae.join(" ")};G.fn.jqplotToImageCanvas=function(ac){ac=ac||{};var an=(ac.x_offset==null)?0:ac.x_offset;var ap=(ac.y_offset==null)?0:ac.y_offset;var ae=(ac.backgroundColor==null)?"rgb(255,255,255)":ac.backgroundColor;if(G(this).width()==0||G(this).height()==0){return null}if(!G.jqplot.support_canvas){return null}var ag=document.createElement("canvas");var at=G(this).outerHeight(true);var al=G(this).outerWidth(true);var af=G(this).offset();var ah=af.left;var aj=af.top;var am=0,ak=0;var aq=["jqplot-table-legend","jqplot-xaxis-tick","jqplot-x2axis-tick","jqplot-yaxis-tick","jqplot-y2axis-tick","jqplot-y3axis-tick","jqplot-y4axis-tick","jqplot-y5axis-tick","jqplot-y6axis-tick","jqplot-y7axis-tick","jqplot-y8axis-tick","jqplot-y9axis-tick","jqplot-xaxis-label","jqplot-x2axis-label","jqplot-yaxis-label","jqplot-y2axis-label","jqplot-y3axis-label","jqplot-y4axis-label","jqplot-y5axis-label","jqplot-y6axis-label","jqplot-y7axis-label","jqplot-y8axis-label","jqplot-y9axis-label"];var ai,aa,ab,au;for(var ar in aq){G(this).find("."+aq[ar]).each(function(){ai=G(this).offset().top-aj;aa=G(this).offset().left-ah;au=aa+G(this).outerWidth(true)+am;ab=ai+G(this).outerHeight(true)+ak;if(aa<-am){al=al-am-aa;am=-aa}if(ai<-ak){at=at-ak-ai;ak=-ai}if(au>al){al=au}if(ab>at){at=ab}})}ag.width=al+Number(an);ag.height=at+Number(ap);var ad=ag.getContext("2d");ad.save();ad.fillStyle=ae;ad.fillRect(0,0,ag.width,ag.height);ad.restore();ad.translate(am,ak);ad.textAlign="left";ad.textBaseline="top";function av(ax){var ay=parseInt(G(ax).css("line-height"));if(isNaN(ay)){ay=parseInt(G(ax).css("font-size"))*1.2}return ay}function aw(ay,ax,aL,az,aH,aA){var aJ=av(ay);var aD=G(ay).innerWidth();var aE=G(ay).innerHeight();var aG=aL.split(/\s+/);var aK=aG.length;var aI="";var aF=[];var aN=aH;var aM=az;for(var aC=0;aC<aK;aC++){aI+=aG[aC];if(ax.measureText(aI).width>aD){aF.push(aC);aI=""}}if(aF.length===0){if(G(ay).css("textAlign")==="center"){aM=az+(aA-ax.measureText(aI).width)/2-am}ax.fillText(aL,aM,aH)}else{aI=aG.slice(0,aF[0]).join(" ");if(G(ay).css("textAlign")==="center"){aM=az+(aA-ax.measureText(aI).width)/2-am}ax.fillText(aI,aM,aN);aN+=aJ;for(var aC=1,aB=aF.length;aC<aB;aC++){aI=aG.slice(aF[aC-1],aF[aC]).join(" ");if(G(ay).css("textAlign")==="center"){aM=az+(aA-ax.measureText(aI).width)/2-am}ax.fillText(aI,aM,aN);aN+=aJ}aI=aG.slice(aF[aC-1],aG.length).join(" ");if(G(ay).css("textAlign")==="center"){aM=az+(aA-ax.measureText(aI).width)/2-am}ax.fillText(aI,aM,aN)}}function ao(az,aC,ax){var aG=az.tagName.toLowerCase();var ay=G(az).position();var aD=window.getComputedStyle?window.getComputedStyle(az):az.currentStyle;var aB=aC+ay.left+parseInt(aD.marginLeft)+parseInt(aD.borderLeftWidth)+parseInt(aD.paddingLeft);var aE=ax+ay.top+parseInt(aD.marginTop)+parseInt(aD.borderTopWidth)+parseInt(aD.paddingTop);var aF=ag.width;if((aG=="div"||aG=="span")&&!G(az).hasClass("jqplot-highlighter-tooltip")){G(az).children().each(function(){ao(this,aB,aE)});var aH=G(az).jqplotChildText();if(aH){ad.font=G(az).jqplotGetComputedFontStyle();ad.fillStyle=G(az).css("color");aw(az,ad,aH,aB,aE,aF)}}else{if(aG==="table"&&G(az).hasClass("jqplot-table-legend")){ad.strokeStyle=G(az).css("border-top-color");ad.fillStyle=G(az).css("background-color");ad.fillRect(aB,aE,G(az).innerWidth(),G(az).innerHeight());if(parseInt(G(az).css("border-top-width"))>0){ad.strokeRect(aB,aE,G(az).innerWidth(),G(az).innerHeight())}G(az).find("div.jqplot-table-legend-swatch-outline").each(function(){var aN=G(this);ad.strokeStyle=aN.css("border-top-color");var aJ=aB+aN.position().left;var aK=aE+aN.position().top;ad.strokeRect(aJ,aK,aN.innerWidth(),aN.innerHeight());aJ+=parseInt(aN.css("padding-left"));aK+=parseInt(aN.css("padding-top"));var aM=aN.innerHeight()-2*parseInt(aN.css("padding-top"));var aI=aN.innerWidth()-2*parseInt(aN.css("padding-left"));var aL=aN.children("div.jqplot-table-legend-swatch");ad.fillStyle=aL.css("background-color");ad.fillRect(aJ,aK,aI,aM)});G(az).find("td.jqplot-table-legend-label").each(function(){var aK=G(this);var aI=aB+aK.position().left;var aJ=aE+aK.position().top+parseInt(aK.css("padding-top"));ad.font=aK.jqplotGetComputedFontStyle();ad.fillStyle=aK.css("color");ad.fillText(aK.text(),aI,aJ)});var aA=null}else{if(aG=="canvas"){ad.drawImage(az,aB,aE)}}}}G(this).children().each(function(){ao(this,an,ap)});return ag};G.fn.jqplotToImageStr=function(ab){var aa=G(this).jqplotToImageCanvas(ab);if(aa){return aa.toDataURL("image/png")}else{return null}};G.fn.jqplotToImageElem=function(aa){var ab=document.createElement("img");var ac=G(this).jqplotToImageStr(aa);ab.src=ac;return ab};G.fn.jqplotToImageElemStr=function(aa){var ab="<img src="+G(this).jqplotToImageStr(aa)+" />";return ab};G.fn.jqplotSaveImage=function(){var aa=G(this).jqplotToImageStr({});if(aa){window.location.href=aa.replace("image/png","image/octet-stream")}};G.fn.jqplotViewImage=function(){var ab=G(this).jqplotToImageElemStr({});var ac=G(this).jqplotToImageStr({});if(ab){var aa=window.open("");aa.document.open("image/png");aa.document.write(ab);aa.document.close();aa=null}};var Z=function(){this.syntax=Z.config.syntax;this._type="jsDate";this.utcOffset=new Date().getTimezoneOffset*60000;this.proxy=new Date();this.options={};this.locale=Z.regional.getLocale();this.formatString="";this.defaultCentury=Z.config.defaultCentury;switch(arguments.length){case 0:break;case 1:if(i(arguments[0])=="[object Object]"&&arguments[0]._type!="jsDate"){var ac=this.options=arguments[0];this.syntax=ac.syntax||this.syntax;this.defaultCentury=ac.defaultCentury||this.defaultCentury;this.proxy=Z.createDate(ac.date)}else{this.proxy=Z.createDate(arguments[0])}break;default:var aa=[];for(var ab=0;ab<arguments.length;ab++){aa.push(arguments[ab])}this.proxy=new Date(this.utcOffset);this.proxy.setFullYear.apply(this.proxy,aa.slice(0,3));if(aa.slice(3).length){this.proxy.setHours.apply(this.proxy,aa.slice(3))}break}};Z.config={defaultLocale:"en",syntax:"perl",defaultCentury:1900};Z.prototype.add=function(ac,ab){var aa=z[ab]||z.day;if(typeof aa=="number"){this.proxy.setTime(this.proxy.getTime()+(aa*ac))}else{aa.add(this,ac)}return this};Z.prototype.clone=function(){return new Z(this.proxy.getTime())};Z.prototype.diff=function(ab,ae,aa){ab=new Z(ab);if(ab===null){return null}var ac=z[ae]||z.day;if(typeof ac=="number"){var ad=(this.proxy.getTime()-ab.proxy.getTime())/ac}else{var ad=ac.diff(this.proxy,ab.proxy)}return(aa?ad:Math[ad>0?"floor":"ceil"](ad))};Z.prototype.getAbbrDayName=function(){return Z.regional[this.locale]["dayNamesShort"][this.proxy.getDay()]};Z.prototype.getAbbrMonthName=function(){return Z.regional[this.locale]["monthNamesShort"][this.proxy.getMonth()]};Z.prototype.getAMPM=function(){return this.proxy.getHours()>=12?"PM":"AM"};Z.prototype.getAmPm=function(){return this.proxy.getHours()>=12?"pm":"am"};Z.prototype.getCentury=function(){return parseInt(this.proxy.getFullYear()/100,10)};Z.prototype.getDate=function(){return this.proxy.getDate()};Z.prototype.getDay=function(){return this.proxy.getDay()};Z.prototype.getDayOfWeek=function(){var aa=this.proxy.getDay();return aa===0?7:aa};Z.prototype.getDayOfYear=function(){var ab=this.proxy;var aa=ab-new Date(""+ab.getFullYear()+"/1/1 GMT");aa+=ab.getTimezoneOffset()*60000;ab=null;return parseInt(aa/60000/60/24,10)+1};Z.prototype.getDayName=function(){return Z.regional[this.locale]["dayNames"][this.proxy.getDay()]};Z.prototype.getFullWeekOfYear=function(){var ad=this.proxy;var aa=this.getDayOfYear();var ac=6-ad.getDay();var ab=parseInt((aa+ac)/7,10);return ab};Z.prototype.getFullYear=function(){return this.proxy.getFullYear()};Z.prototype.getGmtOffset=function(){var aa=this.proxy.getTimezoneOffset()/60;var ab=aa<0?"+":"-";aa=Math.abs(aa);return ab+I(Math.floor(aa),2)+":"+I((aa%1)*60,2)};Z.prototype.getHours=function(){return this.proxy.getHours()};Z.prototype.getHours12=function(){var aa=this.proxy.getHours();return aa>12?aa-12:(aa==0?12:aa)};Z.prototype.getIsoWeek=function(){var ad=this.proxy;var ac=ad.getWeekOfYear();var aa=(new Date(""+ad.getFullYear()+"/1/1")).getDay();var ab=ac+(aa>4||aa<=1?0:1);if(ab==53&&(new Date(""+ad.getFullYear()+"/12/31")).getDay()<4){ab=1}else{if(ab===0){ad=new Z(new Date(""+(ad.getFullYear()-1)+"/12/31"));ab=ad.getIsoWeek()}}ad=null;return ab};Z.prototype.getMilliseconds=function(){return this.proxy.getMilliseconds()};Z.prototype.getMinutes=function(){return this.proxy.getMinutes()};Z.prototype.getMonth=function(){return this.proxy.getMonth()};Z.prototype.getMonthName=function(){return Z.regional[this.locale]["monthNames"][this.proxy.getMonth()]};Z.prototype.getMonthNumber=function(){return this.proxy.getMonth()+1};Z.prototype.getSeconds=function(){return this.proxy.getSeconds()};Z.prototype.getShortYear=function(){return this.proxy.getYear()%100};Z.prototype.getTime=function(){return this.proxy.getTime()};Z.prototype.getTimezoneAbbr=function(){return this.proxy.toString().replace(/^.*\(([^)]+)\)$/,"$1")};Z.prototype.getTimezoneName=function(){var aa=/(?:\((.+)\)$| ([A-Z]{3}) )/.exec(this.toString());return aa[1]||aa[2]||"GMT"+this.getGmtOffset()};Z.prototype.getTimezoneOffset=function(){return this.proxy.getTimezoneOffset()};Z.prototype.getWeekOfYear=function(){var aa=this.getDayOfYear();var ac=7-this.getDayOfWeek();var ab=parseInt((aa+ac)/7,10);return ab};Z.prototype.getUnix=function(){return Math.round(this.proxy.getTime()/1000,0)};Z.prototype.getYear=function(){return this.proxy.getYear()};Z.prototype.next=function(aa){aa=aa||"day";return this.clone().add(1,aa)};Z.prototype.set=function(){switch(arguments.length){case 0:this.proxy=new Date();break;case 1:if(i(arguments[0])=="[object Object]"&&arguments[0]._type!="jsDate"){var ac=this.options=arguments[0];this.syntax=ac.syntax||this.syntax;this.defaultCentury=ac.defaultCentury||this.defaultCentury;this.proxy=Z.createDate(ac.date)}else{this.proxy=Z.createDate(arguments[0])}break;default:var aa=[];for(var ab=0;ab<arguments.length;ab++){aa.push(arguments[ab])}this.proxy=new Date(this.utcOffset);this.proxy.setFullYear.apply(this.proxy,aa.slice(0,3));if(aa.slice(3).length){this.proxy.setHours.apply(this.proxy,aa.slice(3))}break}};Z.prototype.setDate=function(aa){return this.proxy.setDate(aa)};Z.prototype.setFullYear=function(){return this.proxy.setFullYear.apply(this.proxy,arguments)};Z.prototype.setHours=function(){return this.proxy.setHours.apply(this.proxy,arguments)};Z.prototype.setMilliseconds=function(aa){return this.proxy.setMilliseconds(aa)};Z.prototype.setMinutes=function(){return this.proxy.setMinutes.apply(this.proxy,arguments)};Z.prototype.setMonth=function(){return this.proxy.setMonth.apply(this.proxy,arguments)};Z.prototype.setSeconds=function(){return this.proxy.setSeconds.apply(this.proxy,arguments)};Z.prototype.setTime=function(aa){return this.proxy.setTime(aa)};Z.prototype.setYear=function(){return this.proxy.setYear.apply(this.proxy,arguments)};Z.prototype.strftime=function(aa){aa=aa||this.formatString||Z.regional[this.locale]["formatString"];return Z.strftime(this,aa,this.syntax)};Z.prototype.toString=function(){return this.proxy.toString()};Z.prototype.toYmdInt=function(){return(this.proxy.getFullYear()*10000)+(this.getMonthNumber()*100)+this.proxy.getDate()};Z.regional={en:{monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],formatString:"%Y-%m-%d %H:%M:%S"},fr:{monthNames:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthNamesShort:["Jan","Fév","Mar","Avr","Mai","Jun","Jul","Aoû","Sep","Oct","Nov","Déc"],dayNames:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],dayNamesShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],formatString:"%Y-%m-%d %H:%M:%S"},de:{monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],formatString:"%Y-%m-%d %H:%M:%S"},es:{monthNames:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthNamesShort:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],dayNames:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mié","Juv","Vie","Sáb"],formatString:"%Y-%m-%d %H:%M:%S"},ru:{monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],formatString:"%Y-%m-%d %H:%M:%S"},ar:{monthNames:["كانون الثاني","شباط","آذار","نيسان","آذار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["السبت","الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة"],dayNamesShort:["سبت","أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة"],formatString:"%Y-%m-%d %H:%M:%S"},pt:{monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],formatString:"%Y-%m-%d %H:%M:%S"},"pt-BR":{monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],formatString:"%Y-%m-%d %H:%M:%S"}};Z.regional["en-US"]=Z.regional["en-GB"]=Z.regional.en;Z.regional.getLocale=function(){var aa=Z.config.defaultLocale;if(document&&document.getElementsByTagName("html")&&document.getElementsByTagName("html")[0].lang){aa=document.getElementsByTagName("html")[0].lang;if(!Z.regional.hasOwnProperty(aa)){aa=Z.config.defaultLocale}}return aa};var x=24*60*60*1000;var I=function(aa,ad){aa=String(aa);var ab=ad-aa.length;var ac=String(Math.pow(10,ab)).slice(1);return ac.concat(aa)};var z={millisecond:1,second:1000,minute:60*1000,hour:60*60*1000,day:x,week:7*x,month:{add:function(ac,aa){z.year.add(ac,Math[aa>0?"floor":"ceil"](aa/12));var ab=ac.getMonth()+(aa%12);if(ab==12){ab=0;ac.setYear(ac.getFullYear()+1)}else{if(ab==-1){ab=11;ac.setYear(ac.getFullYear()-1)}}ac.setMonth(ab)},diff:function(ae,ac){var aa=ae.getFullYear()-ac.getFullYear();var ab=ae.getMonth()-ac.getMonth()+(aa*12);var ad=ae.getDate()-ac.getDate();return ab+(ad/30)}},year:{add:function(ab,aa){ab.setYear(ab.getFullYear()+Math[aa>0?"floor":"ceil"](aa))},diff:function(ab,aa){return z.month.diff(ab,aa)/12}}};for(var S in z){if(S.substring(S.length-1)!="s"){z[S+"s"]=z[S]}}var C=function(ae,ad,ab){if(Z.formats[ab]["shortcuts"][ad]){return Z.strftime(ae,Z.formats[ab]["shortcuts"][ad],ab)}else{var aa=(Z.formats[ab]["codes"][ad]||"").split(".");var ac=ae["get"+aa[0]]?ae["get"+aa[0]]():"";if(aa[1]){ac=I(ac,aa[1])}return ac}};Z.strftime=function(ag,ad,ac,ah){var ab="perl";var af=Z.regional.getLocale();if(ac&&Z.formats.hasOwnProperty(ac)){ab=ac}else{if(ac&&Z.regional.hasOwnProperty(ac)){af=ac}}if(ah&&Z.formats.hasOwnProperty(ah)){ab=ah}else{if(ah&&Z.regional.hasOwnProperty(ah)){af=ah}}if(i(ag)!="[object Object]"||ag._type!="jsDate"){ag=new Z(ag);ag.locale=af}if(!ad){ad=ag.formatString||Z.regional[af]["formatString"]}var aa=ad||"%Y-%m-%d",ai="",ae;while(aa.length>0){if(ae=aa.match(Z.formats[ab].codes.matcher)){ai+=aa.slice(0,ae.index);ai+=(ae[1]||"")+C(ag,ae[2],ab);aa=aa.slice(ae.index+ae[0].length)}else{ai+=aa;aa=""}}return ai};Z.formats={ISO:"%Y-%m-%dT%H:%M:%S.%N%G",SQL:"%Y-%m-%d %H:%M:%S"};Z.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","%":"%"}};Z.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","%":"%"}};Z.createDate=function(ac){if(ac==null){return new Date()}if(ac instanceof Date){return ac}if(typeof ac=="number"){return new Date(ac)}var ah=String(ac).replace(/^\s*(.+)\s*$/g,"$1");ah=ah.replace(/^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,4})/,"$1/$2/$3");ah=ah.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{4})/i,"$1 $2 $3");var ag=ah.match(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i);if(ag&&ag.length>3){var al=parseFloat(ag[3]);var af=Z.config.defaultCentury+al;af=String(af);ah=ah.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i,ag[1]+" "+ag[2]+" "+af)}ag=ah.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})[^0-9]/);function ak(ap,ao){var av=parseFloat(ao[1]);var au=parseFloat(ao[2]);var at=parseFloat(ao[3]);var ar=Z.config.defaultCentury;var an,am,aw,aq;if(av>31){am=at;aw=au;an=ar+av}else{am=au;aw=av;an=ar+at}aq=aw+"/"+am+"/"+an;return ap.replace(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})/,aq)}if(ag&&ag.length>3){ah=ak(ah,ag)}var ag=ah.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})$/);if(ag&&ag.length>3){ah=ak(ah,ag)}var ae=0;var ab=Z.matchers.length;var aj,aa,ai=ah,ad;while(ae<ab){aa=Date.parse(ai);if(!isNaN(aa)){return new Date(aa)}aj=Z.matchers[ae];if(typeof aj=="function"){ad=aj.call(Z,ai);if(ad instanceof Date){return ad}}else{ai=ah.replace(aj[0],aj[1])}ae++}return NaN};Z.daysInMonth=function(aa,ab){if(ab==2){return new Date(aa,1,29).getDate()==29?29:28}return[q,31,q,31,30,31,30,31,31,30,31,30,31][ab]};Z.matchers=[[/(3[01]|[0-2]\d)\s*\.\s*(1[0-2]|0\d)\s*\.\s*([1-9]\d{3})/,"$2/$1/$3"],[/([1-9]\d{3})\s*-\s*(1[0-2]|0\d)\s*-\s*(3[01]|[0-2]\d)/,"$2/$3/$1"],function(ad){var ab=ad.match(/^(?:(.+)\s+)?([012]?\d)(?:\s*\:\s*(\d\d))?(?:\s*\:\s*(\d\d(\.\d*)?))?\s*(am|pm)?\s*$/i);if(ab){if(ab[1]){var ac=this.createDate(ab[1]);if(isNaN(ac)){return}}else{var ac=new Date();ac.setMilliseconds(0)}var aa=parseFloat(ab[2]);if(ab[6]){aa=ab[6].toLowerCase()=="am"?(aa==12?0:aa):(aa==12?12:aa+12)}ac.setHours(aa,parseInt(ab[3]||0,10),parseInt(ab[4]||0,10),((parseFloat(ab[5]||0))||0)*1000);return ac}else{return ad}},function(ad){var ab=ad.match(/^(?:(.+))[T|\s+]([012]\d)(?:\:(\d\d))(?:\:(\d\d))(?:\.\d+)([\+\-]\d\d\:\d\d)$/i);if(ab){if(ab[1]){var ac=this.createDate(ab[1]);if(isNaN(ac)){return}}else{var ac=new Date();ac.setMilliseconds(0)}var aa=parseFloat(ab[2]);ac.setHours(aa,parseInt(ab[3],10),parseInt(ab[4],10),parseFloat(ab[5])*1000);return ac}else{return ad}},function(ae){var ac=ae.match(/^([0-3]?\d)\s*[-\/.\s]{1}\s*([a-zA-Z]{3,9})\s*[-\/.\s]{1}\s*([0-3]?\d)$/);if(ac){var ad=new Date();var af=Z.config.defaultCentury;var ah=parseFloat(ac[1]);var ag=parseFloat(ac[3]);var ab,aa,ai;if(ah>31){aa=ag;ab=af+ah}else{aa=ah;ab=af+ag}var ai=V(ac[2],Z.regional[Z.regional.getLocale()]["monthNamesShort"]);if(ai==-1){ai=V(ac[2],Z.regional[Z.regional.getLocale()]["monthNames"])}ad.setFullYear(ab,ai,aa);ad.setHours(0,0,0,0);return ad}else{return ae}}];function V(ac,ad){if(ad.indexOf){return ad.indexOf(ac)}for(var aa=0,ab=ad.length;aa<ab;aa++){if(ad[aa]===ac){return aa}}return -1}function i(aa){if(aa===null){return"[object Null]"}return Object.prototype.toString.call(aa)}G.jsDate=Z;G.jqplot.sprintf=function(){function ag(am,ai,aj,al){var ak=(am.length>=ai)?"":Array(1+ai-am.length>>>0).join(aj);return al?am+ak:ak+am}function ad(ak){var aj=new String(ak);for(var ai=10;ai>0;ai--){if(aj==(aj=aj.replace(/^(\d+)(\d{3})/,"$1"+G.jqplot.sprintf.thousandsSeparator+"$2"))){break}}return aj}function ac(an,am,ap,ak,al,aj){var ao=ak-an.length;if(ao>0){var ai=" ";if(aj){ai=" "}if(ap||!al){an=ag(an,ak,ai,ap)}else{an=an.slice(0,am.length)+ag("",ao,"0",true)+an.slice(am.length)}}return an}function ah(aq,aj,ao,ak,ai,an,ap,am){var al=aq>>>0;ao=ao&&al&&{"2":"0b","8":"0","16":"0x"}[aj]||"";aq=ao+ag(al.toString(aj),an||0,"0",false);return ac(aq,ao,ak,ai,ap,am)}function aa(am,an,ak,ai,al,aj){if(ai!=null){am=am.slice(0,ai)}return ac(am,"",an,ak,al,aj)}var ab=arguments,ae=0,af=ab[ae++];return af.replace(G.jqplot.sprintf.regex,function(aE,ap,aq,au,aG,aB,an){if(aE=="%%"){return"%"}var av=false,ar="",at=false,aD=false,ao=false,am=false;for(var aA=0;aq&&aA<aq.length;aA++){switch(aq.charAt(aA)){case" ":ar=" ";break;case"+":ar="+";break;case"-":av=true;break;case"0":at=true;break;case"#":aD=true;break;case"&":ao=true;break;case"'":am=true;break}}if(!au){au=0}else{if(au=="*"){au=+ab[ae++]}else{if(au.charAt(0)=="*"){au=+ab[au.slice(1,-1)]}else{au=+au}}}if(au<0){au=-au;av=true}if(!isFinite(au)){throw new Error("$.jqplot.sprintf: (minimum-)width must be finite")}if(!aB){aB="fFeE".indexOf(an)>-1?6:(an=="d")?0:void (0)}else{if(aB=="*"){aB=+ab[ae++]}else{if(aB.charAt(0)=="*"){aB=+ab[aB.slice(1,-1)]}else{aB=+aB}}}var ax=ap?ab[ap.slice(0,-1)]:ab[ae++];switch(an){case"s":if(ax==null){return""}return aa(String(ax),av,au,aB,at,ao);case"c":return aa(String.fromCharCode(+ax),av,au,aB,at,ao);case"b":return ah(ax,2,aD,av,au,aB,at,ao);case"o":return ah(ax,8,aD,av,au,aB,at,ao);case"x":return ah(ax,16,aD,av,au,aB,at,ao);case"X":return ah(ax,16,aD,av,au,aB,at,ao).toUpperCase();case"u":return ah(ax,10,aD,av,au,aB,at,ao);case"i":var ak=parseInt(+ax,10);if(isNaN(ak)){return""}var az=ak<0?"-":ar;var aC=am?ad(String(Math.abs(ak))):String(Math.abs(ak));ax=az+ag(aC,aB,"0",false);return ac(ax,az,av,au,at,ao);case"d":var ak=Math.round(+ax);if(isNaN(ak)){return""}var az=ak<0?"-":ar;var aC=am?ad(String(Math.abs(ak))):String(Math.abs(ak));ax=az+ag(aC,aB,"0",false);return ac(ax,az,av,au,at,ao);case"e":case"E":case"f":case"F":case"g":case"G":var ak=+ax;if(isNaN(ak)){return""}var az=ak<0?"-":ar;var al=["toExponential","toFixed","toPrecision"]["efg".indexOf(an.toLowerCase())];var aF=["toString","toUpperCase"]["eEfFgG".indexOf(an)%2];var aC=Math.abs(ak)[al](aB);aC=am?ad(aC):aC;ax=az+aC;return ac(ax,az,av,au,at,ao)[aF]();case"p":case"P":var ak=+ax;if(isNaN(ak)){return""}var az=ak<0?"-":ar;var aw=String(Number(Math.abs(ak)).toExponential()).split(/e|E/);var aj=(aw[0].indexOf(".")!=-1)?aw[0].length-1:aw[0].length;var ay=(aw[1]<0)?-aw[1]-1:0;if(Math.abs(ak)<1){if(aj+ay<=aB){ax=az+Math.abs(ak).toPrecision(aj)}else{if(aj<=aB-1){ax=az+Math.abs(ak).toExponential(aj-1)}else{ax=az+Math.abs(ak).toExponential(aB-1)}}}else{var ai=(aj<=aB)?aj:aB;ax=az+Math.abs(ak).toPrecision(ai)}var aF=["toString","toUpperCase"]["pP".indexOf(an)%2];return ac(ax,az,av,au,at,ao)[aF]();case"n":return"";default:return aE}})};G.jqplot.sprintf.thousandsSeparator=",";G.jqplot.sprintf.regex=/%%|%(\d+\$)?([-+#0&\' ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([nAscboxXuidfegpEGP])/g;G.jqplot.getSignificantFigures=function(ae){var ag=String(Number(Math.abs(ae)).toExponential()).split(/e|E/);var af=(ag[0].indexOf(".")!=-1)?ag[0].length-1:ag[0].length;var ab=(ag[1]<0)?-ag[1]-1:0;var aa=parseInt(ag[1]);var ac=(aa+1>0)?aa+1:0;var ad=(af<=ac)?0:af-aa-1;return{significantDigits:af,digitsLeft:ac,digitsRight:ad,zeros:ab,exponent:aa}};G.jqplot.getPrecision=function(ab){var aa=G.jqplot.getSignificantFigures(ab);var ac=aa[1]-1-parseInt(aa[0][1]);return ac}})(jQuery);/** + * jqPlot + * Pure JavaScript plotting plugin using jQuery + * + * Version: 1.0.0b2_r947 + * + * Copyright (c) 2009-2011 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 + * 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 dot leonello at gmail dot com or see http://www.jqplot.com/info.php . + * chris at jqplot dot com or see http://www.jqplot.com/info.php . * * If you are feeling kind and generous, consider supporting the project by * making a donation at: http://www.jqplot.com/donate.php . + * + * sprintf functions contained in jqplot.sprintf.js by Ash Searle: + * + * version 2007.04.27 + * author Ash Searle + * http://hexmen.com/blog/2007/03/printf-sprintf/ + * http://hexmen.com/js/sprintf.js + * The author (Ash Searle) has placed this code in the public domain: + * "This code is unrestricted: you are free to use it however you like." + * + * included jsDate library by Chris Leonello: + * + * Copyright (c) 2010-2011 Chris Leonello + * + * jsDate is currently available for use in all personal or commercial projects + * under both the MIT and GPL version 2.0 licenses. This means that you can + * choose the license that best suits your project and use it accordingly. + * + * jsDate borrows many concepts and ideas from the Date Instance + * Methods by Ken Snyder along with some parts of Ken's actual code. + * + * Ken's origianl Date Instance Methods and copyright notice: + * + * Ken Snyder (ken d snyder at gmail dot com) + * 2008-09-10 + * version 2.0.2 (http://kendsnyder.com/sandbox/date/) + * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) + * + * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. + * Larry has generously given permission to adapt his code for inclusion + * into jqPlot. + * + * Larry's original code can be found here: + * + * https://github.com/lsiden/export-jqplot-to-png + * + * */ -(function(f){f.jqplot.Trendline=function(){this.show=f.jqplot.config.enablePlugins;this.color="#666666";this.renderer=new f.jqplot.LineRenderer();this.rendererOptions={marker:{show:false}};this.label="";this.type="linear";this.shadow=true;this.markerRenderer={show:false};this.lineWidth=1.5;this.shadowAngle=45;this.shadowOffset=1;this.shadowAlpha=0.07;this.shadowDepth=3};f.jqplot.postParseSeriesOptionsHooks.push(e);f.jqplot.postDrawSeriesHooks.push(g);f.jqplot.addLegendRowHooks.push(a);function a(k){var i=k.trendline.label.toString();var j=null;if(this.renderer.constructor!=f.jqplot.PieRenderer&&k.trendline.show&&i){j={label:i,color:k.trendline.color}}return j}function e(j,i){if(this.renderer.constructor!=f.jqplot.PieRenderer){this.trendline=new f.jqplot.Trendline();i=i||{};f.extend(true,this.trendline,{color:this.color},j.trendline,i.trendline);this.trendline.renderer.init.call(this.trendline,null)}}function g(m,i){i=f.extend(true,{},this.trendline,i);if(i.show&&this.renderer.constructor!=f.jqplot.PieRenderer){var k;var l=i.data||this.data;k=c(l,this.trendline.type);var j=i.gridData||this.renderer.makeGridData.call(this,k.data);this.trendline.renderer.draw.call(this.trendline,m,j,{showLine:true,shadow:this.trendline.shadow})}}function b(w,v,n){var u=(n==null)?"linear":n;var s=w.length;var t;var z;var o=0;var m=0;var r=0;var q=0;var l=0;var j=[];var k=[];if(u=="linear"){k=w;j=v}else{if(u=="exp"||u=="exponential"){for(var p=0;p<v.length;p++){if(v[p]<=0){s--}else{k.push(w[p]);j.push(Math.log(v[p]))}}}}for(var p=0;p<s;p++){o=o+k[p];m=m+j[p];q=q+k[p]*j[p];r=r+k[p]*k[p];l=l+j[p]*j[p]}t=(s*q-o*m)/(s*r-o*o);z=(m-t*o)/s;return[t,z]}function h(k,j){var i;i=b(k,j,"linear");return[i[0],i[1]]}function d(o,m){var k;var i=o;var n=m;k=b(i,n,"exp");var l=Math.exp(k[0]);var j=Math.exp(k[1]);return[l,j]}function c(l,j){var p=(j==null)?"linear":j;var n;var o;var r=[];var q=[];var m=[];for(k=0;k<l.length;k++){if(l[k]!=null&&l[k][0]!=null&&l[k][1]!=null){r.push(l[k][0]);q.push(l[k][1])}}if(p=="linear"){n=h(r,q);for(var k=0;k<r.length;k++){o=n[0]*r[k]+n[1];m.push([r[k],o])}}else{if(p=="exp"||p=="exponential"){n=d(r,q);for(var k=0;k<r.length;k++){o=n[1]*Math.pow(n[0],r[k]);m.push([r[k],o])}}}return{data:m,slope:n[0],intercept:n[1]}}})(jQuery);/** - * Copyright (c) 2009 Chris Leonello +(function(f){f.jqplot.Trendline=function(){this.show=f.jqplot.config.enablePlugins;this.color="#666666";this.renderer=new f.jqplot.LineRenderer();this.rendererOptions={marker:{show:false}};this.label="";this.type="linear";this.shadow=true;this.markerRenderer={show:false};this.lineWidth=1.5;this.shadowAngle=45;this.shadowOffset=1;this.shadowAlpha=0.07;this.shadowDepth=3;this.isTrendline=true};f.jqplot.postSeriesInitHooks.push(e);f.jqplot.postDrawSeriesHooks.push(g);f.jqplot.addLegendRowHooks.push(a);function a(k){var j=null;if(k.trendline&&k.trendline.show){var i=k.trendline.label.toString();if(i){j={label:i,color:k.trendline.color}}}return j}function e(m,k,j,i,l){if(this._type&&(this._type==="line"||this._type=="bar")){this.trendline=new f.jqplot.Trendline();i=i||{};f.extend(true,this.trendline,{color:this.color},j.trendline,i.trendline);this.trendline.renderer.init.call(this.trendline,null)}}function g(m,i){i=f.extend(true,{},this.trendline,i);if(this.trendline&&i.show){var k;var l=i.data||this.data;k=c(l,this.trendline.type);var j=i.gridData||this.renderer.makeGridData.call(this,k.data);this.trendline.renderer.draw.call(this.trendline,m,j,{showLine:true,shadow:this.trendline.shadow})}}function b(w,v,n){var u=(n==null)?"linear":n;var s=w.length;var t;var z;var o=0;var m=0;var r=0;var q=0;var l=0;var j=[];var k=[];if(u=="linear"){k=w;j=v}else{if(u=="exp"||u=="exponential"){for(var p=0;p<v.length;p++){if(v[p]<=0){s--}else{k.push(w[p]);j.push(Math.log(v[p]))}}}}for(var p=0;p<s;p++){o=o+k[p];m=m+j[p];q=q+k[p]*j[p];r=r+k[p]*k[p];l=l+j[p]*j[p]}t=(s*q-o*m)/(s*r-o*o);z=(m-t*o)/s;return[t,z]}function h(k,j){var i;i=b(k,j,"linear");return[i[0],i[1]]}function d(o,m){var k;var i=o;var n=m;k=b(i,n,"exp");var l=Math.exp(k[0]);var j=Math.exp(k[1]);return[l,j]}function c(l,j){var p=(j==null)?"linear":j;var n;var o;var r=[];var q=[];var m=[];for(k=0;k<l.length;k++){if(l[k]!=null&&l[k][0]!=null&&l[k][1]!=null){r.push(l[k][0]);q.push(l[k][1])}}if(p=="linear"){n=h(r,q);for(var k=0;k<r.length;k++){o=n[0]*r[k]+n[1];m.push([r[k],o])}}else{if(p=="exp"||p=="exponential"){n=d(r,q);for(var k=0;k<r.length;k++){o=n[1]*Math.pow(n[0],r[k]);m.push([r[k],o])}}}return{data:m,slope:n[0],intercept:n[1]}}})(jQuery);/** + * jqPlot + * Pure JavaScript plotting plugin using jQuery + * + * Version: 1.0.0b2_r947 + * + * Copyright (c) 2009-2011 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 + * 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 dot leonello at gmail dot com or see http://www.jqplot.com/info.php . + * chris at jqplot dot com or see http://www.jqplot.com/info.php . * * If you are feeling kind and generous, consider supporting the project by * making a donation at: http://www.jqplot.com/donate.php . + * + * sprintf functions contained in jqplot.sprintf.js by Ash Searle: + * + * version 2007.04.27 + * author Ash Searle + * http://hexmen.com/blog/2007/03/printf-sprintf/ + * http://hexmen.com/js/sprintf.js + * The author (Ash Searle) has placed this code in the public domain: + * "This code is unrestricted: you are free to use it however you like." + * + * included jsDate library by Chris Leonello: + * + * Copyright (c) 2010-2011 Chris Leonello + * + * jsDate is currently available for use in all personal or commercial projects + * under both the MIT and GPL version 2.0 licenses. This means that you can + * choose the license that best suits your project and use it accordingly. + * + * jsDate borrows many concepts and ideas from the Date Instance + * Methods by Ken Snyder along with some parts of Ken's actual code. + * + * Ken's origianl Date Instance Methods and copyright notice: + * + * Ken Snyder (ken d snyder at gmail dot com) + * 2008-09-10 + * version 2.0.2 (http://kendsnyder.com/sandbox/date/) + * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) + * + * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. + * Larry has generously given permission to adapt his code for inclusion + * into jqPlot. + * + * Larry's original code can be found here: + * + * https://github.com/lsiden/export-jqplot-to-png + * + * */ -(function(b){b.jqplot.PieRenderer=function(){b.jqplot.LineRenderer.call(this)};b.jqplot.PieRenderer.prototype=new b.jqplot.LineRenderer();b.jqplot.PieRenderer.prototype.constructor=b.jqplot.PieRenderer;b.jqplot.PieRenderer.prototype.init=function(d){this.diameter=null;this.padding=20;this.sliceMargin=0;this.fill=true;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=5;this.tickRenderer=b.jqplot.PieTickRenderer;b.extend(true,this,d);if(this.diameter!=null){this.diameter=this.diameter-this.sliceMargin}this._diameter=null};b.jqplot.PieRenderer.prototype.setGridData=function(d){};b.jqplot.PieRenderer.prototype.makeGridData=function(g,h){var d=[];var j=[];for(var f=0;f<g.length;f++){d.push(g[f][1]);j.push([g[f][0]]);if(f>0){d[f]+=d[f-1]}}var e=Math.PI*2/d[d.length-1];for(var f=0;f<d.length;f++){j[f][1]=d[f]*e}return j};b.jqplot.PieRenderer.prototype.drawSlice=function(n,l,k,f,h){var d=this._diameter/2;var m=this.fill;var j=this.lineWidth;n.save();n.translate(this.sliceMargin*Math.cos((l+k)/2),this.sliceMargin*Math.sin((l+k)/2));if(h){for(var g=0;g<this.shadowDepth;g++){n.save();n.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));e()}}else{e()}function e(){if(k>6.282){k=6.282;if(l>k){l=6.281}}n.beginPath();n.moveTo(0,0);n.fillStyle=f;n.strokeStyle=f;n.lineWidth=j;n.arc(0,0,d,l,k,false);n.closePath();if(m){n.fill()}else{n.stroke()}}if(h){for(var g=0;g<this.shadowDepth;g++){n.restore()}}n.restore()};b.jqplot.PieRenderer.prototype.draw=function(v,B,k){var y;var s=(k!=undefined)?k:{};var g=0;var f=0;var l=1;var e=new this.colorGenerator(this.seriesColors);if(k.legendInfo){var q=k.legendInfo;switch(q.location){case"nw":g=q.width+q.xoffset;break;case"w":g=q.width+q.xoffset;break;case"sw":g=q.width+q.xoffset;break;case"ne":g=q.width+q.xoffset;l=-1;break;case"e":g=q.width+q.xoffset;l=-1;break;case"se":g=q.width+q.xoffset;l=-1;break;case"n":f=q.height+q.yoffset;break;case"s":f=q.height+q.yoffset;l=-1;break;default:break}}var n=(s.shadow!=undefined)?s.shadow:this.shadow;var C=(s.showLine!=undefined)?s.showLine:this.showLine;var x=(s.fill!=undefined)?s.fill:this.fill;var j=v.canvas.width;var p=v.canvas.height;var o=j-g-2*this.padding;var z=p-f-2*this.padding;var A=Math.min(o,z);this._diameter=this.diameter||A-this.sliceMargin;var t=this._diameter/2;v.save();v.translate((j-l*g)/2+l*g,(p-l*f)/2+l*f);if(this.shadow){var u="rgba(0,0,0,"+this.shadowAlpha+")";for(var y=0;y<B.length;y++){var m=(y==0)?0:B[y-1][1];this.renderer.drawSlice.call(this,v,m,B[y][1],u,true)}}for(var y=0;y<B.length;y++){var m=(y==0)?0:B[y-1][1];this.renderer.drawSlice.call(this,v,m,B[y][1],e.next())}v.restore()};b.jqplot.PieAxisRenderer=function(){b.jqplot.LinearAxisRenderer.call(this)};b.jqplot.PieAxisRenderer.prototype=new b.jqplot.LinearAxisRenderer();b.jqplot.PieAxisRenderer.prototype.constructor=b.jqplot.PieAxisRenderer;b.jqplot.PieAxisRenderer.prototype.init=function(d){this.tickRenderer=b.jqplot.PieTickRenderer;b.extend(true,this,d);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};b.jqplot.PieLegendRenderer=function(){b.jqplot.TableLegendRenderer.call(this)};b.jqplot.PieLegendRenderer.prototype=new b.jqplot.TableLegendRenderer();b.jqplot.PieLegendRenderer.prototype.constructor=b.jqplot.PieLegendRenderer;b.jqplot.PieLegendRenderer.prototype.draw=function(){var k=this;if(this.show){var f=this._series;var m="position:absolute;";m+=(this.background)?"background:"+this.background+";":"";m+=(this.border)?"border:"+this.border+";":"";m+=(this.fontSize)?"font-size:"+this.fontSize+";":"";m+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";m+=(this.textColor)?"color:"+this.textColor+";":"";this._elem=b('<table class="jqplot-table-legend" style="'+m+'"></table>');var d=false;var l=f[0];var h=new l.colorGenerator(l.seriesColors);if(l.show){var j=l.data;for(var g=0;g<j.length;g++){var e=j[g][0].toString();if(e){this.renderer.addrow.call(this,e,h.next(),d);d=true}}}}return this._elem};function a(h,g,e){e=e||{};e.axesDefaults=e.axesDefaults||{};e.legend=e.legend||{};e.seriesDefaults=e.seriesDefaults||{};var d=false;if(e.seriesDefaults.renderer==b.jqplot.PieRenderer){d=true}else{if(e.series){for(var f=0;f<e.series.length;f++){if(e.series[f].renderer==b.jqplot.PieRenderer){d=true}}}}if(d){e.axesDefaults.renderer=b.jqplot.PieAxisRenderer;e.legend.renderer=b.jqplot.PieLegendRenderer;e.legend.preDraw=true}}function c(d){for(var e=0;e<this.series.length;e++){this.series[e].seriesColors=this.seriesColors;this.series[e].colorGenerator=this.colorGenerator}}b.jqplot.preInitHooks.push(a);b.jqplot.postParseOptionsHooks.push(c);b.jqplot.PieTickRenderer=function(){b.jqplot.AxisTickRenderer.call(this)};b.jqplot.PieTickRenderer.prototype=new b.jqplot.AxisTickRenderer();b.jqplot.PieTickRenderer.prototype.constructor=b.jqplot.PieTickRenderer})(jQuery); +(function(e){e.jqplot.PieRenderer=function(){e.jqplot.LineRenderer.call(this)};e.jqplot.PieRenderer.prototype=new e.jqplot.LineRenderer();e.jqplot.PieRenderer.prototype.constructor=e.jqplot.PieRenderer;e.jqplot.PieRenderer.prototype.init=function(q,u){this.diameter=null;this.padding=20;this.sliceMargin=0;this.fill=true;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=5;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.dataLabels="percent";this.showDataLabels=false;this.dataLabelFormatString=null;this.dataLabelThreshold=3;this.dataLabelPositionFactor=0.52;this.dataLabelNudge=2;this.dataLabelCenterOn=true;this.startAngle=0;this.tickRenderer=e.jqplot.PieTickRenderer;this._drawData=true;this._type="pie";if(q.highlightMouseDown&&q.highlightMouseOver==null){q.highlightMouseOver=false}e.extend(true,this,q);if(this.sliceMargin<0){this.sliceMargin=0}this._diameter=null;this._radius=null;this._sliceAngles=[];this._highlightedPoint=null;if(this.highlightColors.length==0){for(var s=0;s<this.seriesColors.length;s++){var r=e.jqplot.getColorComponents(this.seriesColors[s]);var o=[r[0],r[1],r[2]];var t=o[0]+o[1]+o[2];for(var p=0;p<3;p++){o[p]=(t>570)?o[p]*0.8:o[p]+0.3*(255-o[p]);o[p]=parseInt(o[p],10)}this.highlightColors.push("rgb("+o[0]+","+o[1]+","+o[2]+")")}}this.highlightColorGenerator=new e.jqplot.ColorGenerator(this.highlightColors);u.postParseOptionsHooks.addOnce(m);u.postInitHooks.addOnce(g);u.eventListenerHooks.addOnce("jqplotMouseMove",b);u.eventListenerHooks.addOnce("jqplotMouseDown",a);u.eventListenerHooks.addOnce("jqplotMouseUp",l);u.eventListenerHooks.addOnce("jqplotClick",f);u.eventListenerHooks.addOnce("jqplotRightClick",n);u.postDrawHooks.addOnce(i)};e.jqplot.PieRenderer.prototype.setGridData=function(t){var p=[];var u=[];var o=this.startAngle/180*Math.PI;var s=0;this._drawData=false;for(var r=0;r<this.data.length;r++){if(this.data[r][1]!=0){this._drawData=true}p.push(this.data[r][1]);u.push([this.data[r][0]]);if(r>0){p[r]+=p[r-1]}s+=this.data[r][1]}var q=Math.PI*2/p[p.length-1];for(var r=0;r<p.length;r++){u[r][1]=p[r]*q;u[r][2]=this.data[r][1]/s}this.gridData=u};e.jqplot.PieRenderer.prototype.makeGridData=function(t,u){var p=[];var v=[];var s=0;var o=this.startAngle/180*Math.PI;this._drawData=false;for(var r=0;r<t.length;r++){if(this.data[r][1]!=0){this._drawData=true}p.push(t[r][1]);v.push([t[r][0]]);if(r>0){p[r]+=p[r-1]}s+=t[r][1]}var q=Math.PI*2/p[p.length-1];for(var r=0;r<p.length;r++){v[r][1]=p[r]*q;v[r][2]=t[r][1]/s}return v};function h(o){return Math.sin((o-(o-Math.PI)/8/Math.PI)/2)}function j(u,t,o,v,r){var w=0;var q=t-u;var s=Math.abs(q);var p=o;if(v==false){p+=r}if(p>0&&s>0.01&&s<6.282){w=parseFloat(p)/2/h(q)}return w}e.jqplot.PieRenderer.prototype.drawSlice=function(B,z,y,u,w){if(this._drawData){var p=this._radius;var A=this.fill;var x=this.lineWidth;var s=this.sliceMargin;if(this.fill==false){s+=this.lineWidth}B.save();B.translate(this._center[0],this._center[1]);var D=j(z,y,this.sliceMargin,this.fill,this.lineWidth);var o=D*Math.cos((z+y)/2);var C=D*Math.sin((z+y)/2);if((y-z)<=Math.PI){p-=D}else{p+=D}B.translate(o,C);if(w){for(var v=0,t=this.shadowDepth;v<t;v++){B.save();B.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));q(p)}for(var v=0,t=this.shadowDepth;v<t;v++){B.restore()}}else{q(p)}B.restore()}function q(r){if(y>6.282+this.startAngle){y=6.282+this.startAngle;if(z>y){z=6.281+this.startAngle}}if(z>=y){return}B.beginPath();B.fillStyle=u;B.strokeStyle=u;B.lineWidth=x;B.arc(0,0,r,z,y,false);B.lineTo(0,0);B.closePath();if(A){B.fill()}else{B.stroke()}}};e.jqplot.PieRenderer.prototype.draw=function(B,z,E,o){var W;var H=(E!=undefined)?E:{};var t=0;var s=0;var N=1;var L=new e.jqplot.ColorGenerator(this.seriesColors);if(E.legendInfo&&E.legendInfo.placement=="insideGrid"){var J=E.legendInfo;switch(J.location){case"nw":t=J.width+J.xoffset;break;case"w":t=J.width+J.xoffset;break;case"sw":t=J.width+J.xoffset;break;case"ne":t=J.width+J.xoffset;N=-1;break;case"e":t=J.width+J.xoffset;N=-1;break;case"se":t=J.width+J.xoffset;N=-1;break;case"n":s=J.height+J.yoffset;break;case"s":s=J.height+J.yoffset;N=-1;break;default:break}}var K=(H.shadow!=undefined)?H.shadow:this.shadow;var A=(H.fill!=undefined)?H.fill:this.fill;var C=B.canvas.width;var I=B.canvas.height;var Q=C-t-2*this.padding;var X=I-s-2*this.padding;var M=Math.min(Q,X);var Y=M;this._sliceAngles=[];var v=this.sliceMargin;if(this.fill==false){v+=this.lineWidth}var q;var G=0;var R,aa,Z,ab;var D=this.startAngle/180*Math.PI;for(var W=0,V=z.length;W<V;W++){aa=(W==0)?D:z[W-1][1]+D;Z=z[W][1]+D;this._sliceAngles.push([aa,Z]);q=j(aa,Z,this.sliceMargin,this.fill,this.lineWidth);if(Math.abs(Z-aa)>Math.PI){G=Math.max(q,G)}}if(this.diameter!=null&&this.diameter>0){this._diameter=this.diameter-2*G}else{this._diameter=Y-2*G}if(this._diameter<6){e.jqplot.log("Diameter of pie too small, not rendering.");return}var S=this._radius=this._diameter/2;this._center=[(C-N*t)/2+N*t+G*Math.cos(D),(I-N*s)/2+N*s+G*Math.sin(D)];if(this.shadow){for(var W=0,V=z.length;W<V;W++){ab="rgba(0,0,0,"+this.shadowAlpha+")";this.renderer.drawSlice.call(this,B,this._sliceAngles[W][0],this._sliceAngles[W][1],ab,true)}}for(var W=0;W<z.length;W++){this.renderer.drawSlice.call(this,B,this._sliceAngles[W][0],this._sliceAngles[W][1],L.next(),false);if(this.showDataLabels&&z[W][2]*100>=this.dataLabelThreshold){var F,U=(this._sliceAngles[W][0]+this._sliceAngles[W][1])/2,T;if(this.dataLabels=="label"){F=this.dataLabelFormatString||"%s";T=e.jqplot.sprintf(F,z[W][0])}else{if(this.dataLabels=="value"){F=this.dataLabelFormatString||"%d";T=e.jqplot.sprintf(F,this.data[W][1])}else{if(this.dataLabels=="percent"){F=this.dataLabelFormatString||"%d%%";T=e.jqplot.sprintf(F,z[W][2]*100)}else{if(this.dataLabels.constructor==Array){F=this.dataLabelFormatString||"%s";T=e.jqplot.sprintf(F,this.dataLabels[W])}}}}var p=(this._radius)*this.dataLabelPositionFactor+this.sliceMargin+this.dataLabelNudge;var P=this._center[0]+Math.cos(U)*p+this.canvas._offsets.left;var O=this._center[1]+Math.sin(U)*p+this.canvas._offsets.top;var u=e('<div class="jqplot-pie-series jqplot-data-label" style="position:absolute;">'+T+"</div>").insertBefore(o.eventCanvas._elem);if(this.dataLabelCenterOn){P-=u.width()/2;O-=u.height()/2}else{P-=u.width()*Math.sin(U/2);O-=u.height()/2}P=Math.round(P);O=Math.round(O);u.css({left:P,top:O})}}};e.jqplot.PieAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.PieAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.PieAxisRenderer.prototype.constructor=e.jqplot.PieAxisRenderer;e.jqplot.PieAxisRenderer.prototype.init=function(o){this.tickRenderer=e.jqplot.PieTickRenderer;e.extend(true,this,o);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};e.jqplot.PieLegendRenderer=function(){e.jqplot.TableLegendRenderer.call(this)};e.jqplot.PieLegendRenderer.prototype=new e.jqplot.TableLegendRenderer();e.jqplot.PieLegendRenderer.prototype.constructor=e.jqplot.PieLegendRenderer;e.jqplot.PieLegendRenderer.prototype.init=function(o){this.numberRows=null;this.numberColumns=null;e.extend(true,this,o)};e.jqplot.PieLegendRenderer.prototype.draw=function(){var r=this;if(this.show){var B=this._series;this._elem=e(document.createElement("table"));this._elem.addClass("jqplot-table-legend");var E={position:"absolute"};if(this.background){E.background=this.background}if(this.border){E.border=this.border}if(this.fontSize){E.fontSize=this.fontSize}if(this.fontFamily){E.fontFamily=this.fontFamily}if(this.textColor){E.textColor=this.textColor}if(this.marginTop!=null){E.marginTop=this.marginTop}if(this.marginBottom!=null){E.marginBottom=this.marginBottom}if(this.marginLeft!=null){E.marginLeft=this.marginLeft}if(this.marginRight!=null){E.marginRight=this.marginRight}this._elem.css(E);var I=false,A=false,o,y;var C=B[0];var p=new e.jqplot.ColorGenerator(C.seriesColors);if(C.show){var J=C.data;if(this.numberRows){o=this.numberRows;if(!this.numberColumns){y=Math.ceil(J.length/o)}else{y=this.numberColumns}}else{if(this.numberColumns){y=this.numberColumns;o=Math.ceil(J.length/this.numberColumns)}else{o=J.length;y=1}}var H,G;var q,w,v;var x,z,F;var D=0;var u,t;for(H=0;H<o;H++){q=e(document.createElement("tr"));q.addClass("jqplot-table-legend");if(A){q.prependTo(this._elem)}else{q.appendTo(this._elem)}for(G=0;G<y;G++){if(D<J.length){x=this.labels[D]||J[D][0].toString();F=p.next();if(!A){if(H>0){I=true}else{I=false}}else{if(H==o-1){I=false}else{I=true}}z=(I)?this.rowSpacing:"0";w=e(document.createElement("td"));w.addClass("jqplot-table-legend jqplot-table-legend-swatch");w.css({textAlign:"center",paddingTop:z});u=e(document.createElement("div"));u.addClass("jqplot-table-legend-swatch-outline");t=e(document.createElement("div"));t.addClass("jqplot-table-legend-swatch");t.css({backgroundColor:F,borderColor:F});w.append(u.append(t));v=e(document.createElement("td"));v.addClass("jqplot-table-legend jqplot-table-legend-label");v.css("paddingTop",z);if(this.escapeHtml){v.text(x)}else{v.html(x)}if(A){v.prependTo(q);w.prependTo(q)}else{w.appendTo(q);v.appendTo(q)}I=true}D++}}}}return this._elem};e.jqplot.PieRenderer.prototype.handleMove=function(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];r.target.trigger("jqplotDataMouseOver",o);if(r.series[o[0]].highlightMouseOver&&!(o[0]==r.plugins.pieRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){r.target.trigger("jqplotDataHighlight",o);d(r,o[0],o[1])}}else{if(s==null){k(r)}}};function c(s,r,p){p=p||{};p.axesDefaults=p.axesDefaults||{};p.legend=p.legend||{};p.seriesDefaults=p.seriesDefaults||{};var o=false;if(p.seriesDefaults.renderer==e.jqplot.PieRenderer){o=true}else{if(p.series){for(var q=0;q<p.series.length;q++){if(p.series[q].renderer==e.jqplot.PieRenderer){o=true}}}}if(o){p.axesDefaults.renderer=e.jqplot.PieAxisRenderer;p.legend.renderer=e.jqplot.PieLegendRenderer;p.legend.preDraw=true;p.seriesDefaults.pointLabels={show:false}}}function g(r,q,o){for(var p=0;p<this.series.length;p++){if(this.series[p].renderer.constructor==e.jqplot.PieRenderer){if(this.series[p].highlightMouseOver){this.series[p].highlightMouseDown=false}}}}function m(o){for(var p=0;p<this.series.length;p++){this.series[p].seriesColors=this.seriesColors;this.series[p].colorGenerator=e.jqplot.colorGenerator}}function d(t,r,q){var p=t.series[r];var o=t.plugins.pieRenderer.highlightCanvas;o._ctx.clearRect(0,0,o._ctx.canvas.width,o._ctx.canvas.height);p._highlightedPoint=q;t.plugins.pieRenderer.highlightedSeriesIndex=r;p.renderer.drawSlice.call(p,o._ctx,p._sliceAngles[q][0],p._sliceAngles[q][1],p.highlightColorGenerator.get(q),false)}function k(q){var o=q.plugins.pieRenderer.highlightCanvas;o._ctx.clearRect(0,0,o._ctx.canvas.width,o._ctx.canvas.height);for(var p=0;p<q.series.length;p++){q.series[p]._highlightedPoint=null}q.plugins.pieRenderer.highlightedSeriesIndex=null;q.target.trigger("jqplotDataUnhighlight")}function b(s,r,v,u,t){if(u){var q=[u.seriesIndex,u.pointIndex,u.data];var p=jQuery.Event("jqplotDataMouseOver");p.pageX=s.pageX;p.pageY=s.pageY;t.target.trigger(p,q);if(t.series[q[0]].highlightMouseOver&&!(q[0]==t.plugins.pieRenderer.highlightedSeriesIndex&&q[1]==t.series[q[0]]._highlightedPoint)){var o=jQuery.Event("jqplotDataHighlight");o.pageX=s.pageX;o.pageY=s.pageY;t.target.trigger(o,q);d(t,q[0],q[1])}}else{if(u==null){k(t)}}}function a(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];if(s.series[p[0]].highlightMouseDown&&!(p[0]==s.plugins.pieRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var o=jQuery.Event("jqplotDataHighlight");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);d(s,p[0],p[1])}}else{if(t==null){k(s)}}}function l(q,p,t,s,r){var o=r.plugins.pieRenderer.highlightedSeriesIndex;if(o!=null&&r.series[o].highlightMouseDown){k(r)}}function f(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataClick");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}function n(s,r,v,u,t){if(u){var q=[u.seriesIndex,u.pointIndex,u.data];var o=t.plugins.pieRenderer.highlightedSeriesIndex;if(o!=null&&t.series[o].highlightMouseDown){k(t)}var p=jQuery.Event("jqplotDataRightClick");p.pageX=s.pageX;p.pageY=s.pageY;t.target.trigger(p,q)}}function i(){if(this.plugins.pieRenderer&&this.plugins.pieRenderer.highlightCanvas){this.plugins.pieRenderer.highlightCanvas.resetCanvas();this.plugins.pieRenderer.highlightCanvas=null}this.plugins.pieRenderer={highlightedSeriesIndex:null};this.plugins.pieRenderer.highlightCanvas=new e.jqplot.GenericCanvas();var p=e(this.targetId+" .jqplot-data-label");if(p.length){e(p[0]).before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-pieRenderer-highlight-canvas",this._plotDimensions,this))}else{this.eventCanvas._elem.before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-pieRenderer-highlight-canvas",this._plotDimensions,this))}var o=this.plugins.pieRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(q){k(q.data.plot)})}e.jqplot.preInitHooks.push(c);e.jqplot.PieTickRenderer=function(){e.jqplot.AxisTickRenderer.call(this)};e.jqplot.PieTickRenderer.prototype=new e.jqplot.AxisTickRenderer();e.jqplot.PieTickRenderer.prototype.constructor=e.jqplot.PieTickRenderer})(jQuery); \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/js/sparkline/jquery.sparkline.js b/wp-content/plugins/wp-piwik/js/sparkline/jquery.sparkline.js new file mode 100644 index 0000000000000000000000000000000000000000..3ffb051593a0a52456ab5df6cc53e4a0f0ff45f0 --- /dev/null +++ b/wp-content/plugins/wp-piwik/js/sparkline/jquery.sparkline.js @@ -0,0 +1,3001 @@ +/** +* +* jquery.sparkline.js +* +* v2.0 +* (c) Splunk, Inc +* Contact: Gareth Watts (gareth@splunk.com) +* http://omnipotent.net/jquery.sparkline/ +* +* Generates inline sparkline charts from data supplied either to the method +* or inline in HTML +* +* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag +* (Firefox 2.0+, Safari, Opera, etc) +* +* License: New BSD License +* +* Copyright (c) 2012, Splunk Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* * Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright notice, +* this list of conditions and the following disclaimer in the documentation +* and/or other materials provided with the distribution. +* * Neither the name of Splunk Inc nor the names of its contributors may +* be used to endorse or promote products derived from this software without +* specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* +* Usage: +* $(selector).sparkline(values, options) +* +* If values is undefined or set to 'html' then the data values are read from the specified tag: +* <p>Sparkline: <span class="sparkline">1,4,6,6,8,5,3,5</span></p> +* $('.sparkline').sparkline(); +* There must be no spaces in the enclosed data set +* +* Otherwise values must be an array of numbers or null values +* <p>Sparkline: <span id="sparkline1">This text replaced if the browser is compatible</span></p> +* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5]) +* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5]) +* +* Values can also be specified in an HTML comment, or as a values attribute: +* <p>Sparkline: <span class="sparkline"><!--1,4,6,6,8,5,3,5 --></span></p> +* <p>Sparkline: <span class="sparkline" values="1,4,6,6,8,5,3,5"></span></p> +* $('.sparkline').sparkline(); +* +* For line charts, x values can also be specified: +* <p>Sparkline: <span class="sparkline">1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5</span></p> +* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ]) +* +* By default, options should be passed in as teh second argument to the sparkline function: +* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'}) +* +* Options can also be set by passing them on the tag itself. This feature is disabled by default though +* as there's a slight performance overhead: +* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true}) +* <p>Sparkline: <span class="sparkline" sparkType="bar" sparkBarColor="red">loading</span></p> +* Prefix all options supplied as tag attribute with "spark" (configurable by setting tagOptionPrefix) +* +* Supported options: +* lineColor - Color of the line used for the chart +* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart +* width - Width of the chart - Defaults to 3 times the number of values in pixels +* height - Height of the chart - Defaults to the height of the containing element +* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied +* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied +* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax +* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied +* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied +* composite - If true then don't erase any existing chart attached to the tag, but draw +* another chart over the top - Note that width and height are ignored if an +* existing chart is detected. +* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values' +* enableTagOptions - Whether to check tags for sparkline options +* tagOptionPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark' +* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a +* hidden dom element, avoding a browser reflow +* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled, +* making the plugin perform much like it did in 1.x +* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled) +* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled +* defaults to false (highlights enabled) +* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase +* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body +* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied +* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis +* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis +* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip +* callback is given arguments of (sparkline, options, fields) +* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title +* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries) +* to control the format of the tooltip +* tooltipPrefix - A string to prepend to each field displayed in a tooltip +* tooltipSuffix - A string to append to each field displayed in a tooltip +* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true) +* tooltipValueLookups - An object or range map to map field values to tooltip strings +* (eg. to map -1 to "Lost", 0 to "Draw", and 1 to "Win") +* numberFormatter - Optional callback for formatting numbers in tooltips +* numberDigitGroupSep - Character to use for group separator in numbers "1,234" - Defaults to "," +* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to "." +* numberDigitGroupCount - Number of digits between group separator - Defaults to 3 +* +* There are 7 types of sparkline, selected by supplying a "type" option of 'line' (default), +* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box' +* line - Line chart. Options: +* spotColor - Set to '' to not end each line in a circular spot +* minSpotColor - If set, color of spot at minimum value +* maxSpotColor - If set, color of spot at maximum value +* spotRadius - Radius in pixels +* lineWidth - Width of line in pixels +* normalRangeMin +* normalRangeMax - If set draws a filled horizontal bar between these two values marking the "normal" +* or expected range of values +* normalRangeColor - Color to use for the above bar +* drawNormalOnTop - Draw the normal range above the chart fill color if true +* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart +* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable +* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable +* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map +* +* bar - Bar chart. Options: +* barColor - Color of bars for postive values +* negBarColor - Color of bars for negative values +* zeroColor - Color of bars with zero values +* nullColor - Color of bars with null values - Defaults to omitting the bar entirely +* barWidth - Width of bars in pixels +* colorMap - Optional mappnig of values to colors to override the *BarColor values above +* can be an Array of values to control the color of individual bars or a range map +* to specify colors for individual ranges of values +* barSpacing - Gap between bars in pixels +* zeroAxis - Centers the y-axis around zero if true +* +* tristate - Charts values of win (>0), lose (<0) or draw (=0) +* posBarColor - Color of win values +* negBarColor - Color of lose values +* zeroBarColor - Color of draw values +* barWidth - Width of bars in pixels +* barSpacing - Gap between bars in pixels +* colorMap - Optional mappnig of values to colors to override the *BarColor values above +* can be an Array of values to control the color of individual bars or a range map +* to specify colors for individual ranges of values +* +* discrete - Options: +* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height +* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor +* thresholdColor +* +* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ... +* options: +* targetColor - The color of the vertical target marker +* targetWidth - The width of the target marker in pixels +* performanceColor - The color of the performance measure horizontal bar +* rangeColors - Colors to use for each qualitative range background color +* +* pie - Pie chart. Options: +* sliceColors - An array of colors to use for pie slices +* offset - Angle in degrees to offset the first slice - Try -90 or +90 +* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border) +* borderColor - Color to use for the pie chart border - Defaults to #000 +* +* box - Box plot. Options: +* raw - Set to true to supply pre-computed plot points as values +* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier +* When set to false you can supply any number of values and the box plot will +* be computed for you. Default is false. +* showOutliers - Set to true (default) to display outliers as circles +* outlierIRQ - Interquartile range used to determine outliers. Default 1.5 +* boxLineColor - Outline color of the box +* boxFillColor - Fill color for the box +* whiskerColor - Line color used for whiskers +* outlierLineColor - Outline color of outlier circles +* outlierFillColor - Fill color of the outlier circles +* spotRadius - Radius of outlier circles +* medianColor - Line color of the median line +* target - Draw a target cross hair at the supplied value (default undefined) +* +* +* +* Examples: +* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false }); +* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 }); +* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }): +* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' }); +* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' }); +* $('#pie').sparkline([1,1,2], { type:'pie' }); +*/ + +/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */ + +(function ($) { + 'use strict'; + + var UNSET_OPTION = {}, + getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues, + remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap, + MouseHandler, Tooltip, barHighlightMixin, + line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles, + VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0; + + /** + * Default configuration settings + */ + getDefaults = function () { + return { + // Settings common to most/all chart types + common: { + type: 'line', + lineColor: '#00f', + fillColor: '#cdf', + defaultPixelsPerValue: 3, + width: 'auto', + height: 'auto', + composite: false, + tagValuesAttribute: 'values', + tagOptionsPrefix: 'spark', + enableTagOptions: false, + enableHighlight: true, + highlightLighten: 1.4, + tooltipSkipNull: true, + tooltipPrefix: '', + tooltipSuffix: '', + disableHiddenCheck: false, + numberFormatter: false, + numberDigitGroupCount: 3, + numberDigitGroupSep: ',', + numberDecimalMark: '.', + disableTooltips: false, + disableInteraction: false + }, + // Defaults for line charts + line: { + spotColor: '#f80', + highlightSpotColor: '#5f5', + highlightLineColor: '#f22', + spotRadius: 1.5, + minSpotColor: '#f80', + maxSpotColor: '#f80', + lineWidth: 1, + normalRangeMin: undefined, + normalRangeMax: undefined, + normalRangeColor: '#ccc', + drawNormalOnTop: false, + chartRangeMin: undefined, + chartRangeMax: undefined, + chartRangeMinX: undefined, + chartRangeMaxX: undefined, + tooltipFormat: new SPFormat('<span style="color: {{color}}">●</span> {{prefix}}{{y}}{{suffix}}') + }, + // Defaults for bar charts + bar: { + barColor: '#3366cc', + negBarColor: '#f44', + stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00', + '#dd4477', '#0099c6', '#990099'], + zeroColor: undefined, + nullColor: undefined, + zeroAxis: true, + barWidth: 4, + barSpacing: 1, + chartRangeMax: undefined, + chartRangeMin: undefined, + chartRangeClip: false, + colorMap: undefined, + tooltipFormat: new SPFormat('<span style="color: {{color}}">●</span> {{prefix}}{{value}}{{suffix}}') + }, + // Defaults for tristate charts + tristate: { + barWidth: 4, + barSpacing: 1, + posBarColor: '#6f6', + negBarColor: '#f44', + zeroBarColor: '#999', + colorMap: {}, + tooltipFormat: new SPFormat('<span style="color: {{color}}">●</span> {{value:map}}'), + tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } } + }, + // Defaults for discrete charts + discrete: { + lineHeight: 'auto', + thresholdColor: undefined, + thresholdValue: 0, + chartRangeMax: undefined, + chartRangeMin: undefined, + chartRangeClip: false, + tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}') + }, + // Defaults for bullet charts + bullet: { + targetColor: '#f33', + targetWidth: 3, // width of the target bar in pixels + performanceColor: '#33f', + rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'], + base: undefined, // set this to a number to change the base start number + tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'), + tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} } + }, + // Defaults for pie charts + pie: { + offset: 0, + sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00', + '#dd4477', '#0099c6', '#990099'], + borderWidth: 0, + borderColor: '#000', + tooltipFormat: new SPFormat('<span style="color: {{color}}">●</span> {{value}} ({{percent.1}}%)') + }, + // Defaults for box plots + box: { + raw: false, + boxLineColor: '#000', + boxFillColor: '#cdf', + whiskerColor: '#000', + outlierLineColor: '#333', + outlierFillColor: '#fff', + medianColor: '#f00', + showOutliers: true, + outlierIQR: 1.5, + spotRadius: 1.5, + target: undefined, + targetColor: '#4a2', + chartRangeMax: undefined, + chartRangeMin: undefined, + tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'), + tooltipFormatFieldlistKey: 'field', + tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median', + uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier', + lw: 'Left Whisker', rw: 'Right Whisker'} } + } + }; + }; + + // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname + defaultStyles = '.jqstooltip { ' + + 'position: absolute;' + + 'left: 0px;' + + 'top: 0px;' + + 'visibility: hidden;' + + 'background: rgb(0, 0, 0) transparent;' + + 'background-color: rgba(0,0,0,0.6);' + + 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' + + '-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";' + + 'color: white;' + + 'font: 10px arial, san serif;' + + 'text-align: left;' + + 'white-space: nowrap;' + + 'padding: 5px;' + + 'border: 1px solid white;' + + '}' + + '.jqsfield { ' + + 'color: white;' + + 'font: 10px arial, san serif;' + + 'text-align: left;' + + '}'; + + initStyles = function() { + addCSS(defaultStyles); + }; + + $(initStyles); + + /** + * Utilities + */ + + createClass = function (/* [baseclass, [mixin, ...]], definition */) { + var Class, args; + Class = function () { + this.init.apply(this, arguments); + }; + if (arguments.length > 1) { + if (arguments[0]) { + Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]); + Class._super = arguments[0].prototype; + } else { + Class.prototype = arguments[arguments.length - 1]; + } + if (arguments.length > 2) { + args = Array.prototype.slice.call(arguments, 1, -1); + args.unshift(Class.prototype); + $.extend.apply($, args); + } + } else { + Class.prototype = arguments[0]; + } + Class.prototype.cls = Class; + return Class; + }; + + /** + * Wraps a format string for tooltips + * {{x}} + * {{x.2} + * {{x:months}} + */ + $.SPFormatClass = SPFormat = createClass({ + fre: /\{\{([\w.]+?)(:(.+?))?\}\}/g, + precre: /(\w+)\.(\d+)/, + + init: function (format, fclass) { + this.format = format; + this.fclass = fclass; + }, + + render: function (fieldset, lookups, options) { + var self = this, + fields = fieldset, + match, token, lookupkey, fieldvalue, prec; + return this.format.replace(this.fre, function () { + var lookup; + token = arguments[1]; + lookupkey = arguments[3]; + match = self.precre.exec(token); + if (match) { + prec = match[2]; + token = match[1]; + } else { + prec = false; + } + fieldvalue = fields[token]; + if (fieldvalue === undefined) { + return ''; + } + if (lookupkey && lookups && lookups[lookupkey]) { + lookup = lookups[lookupkey]; + if (lookup.get) { // RangeMap + return lookups[lookupkey].get(fieldvalue) || fieldvalue; + } else { + return lookups[lookupkey][fieldvalue] || fieldvalue; + } + } + if (isNumber(fieldvalue)) { + if (options.get('numberFormatter')) { + fieldvalue = options.get('numberFormatter')(fieldvalue); + } else { + fieldvalue = formatNumber(fieldvalue, prec, + options.get('numberDigitGroupCount'), + options.get('numberDigitGroupSep'), + options.get('numberDecimalMark')); + } + } + return fieldvalue; + }); + } + }); + + // convience method to avoid needing the new operator + $.spformat = function(format, fclass) { + return new SPFormat(format, fclass); + }; + + clipval = function (val, min, max) { + if (val < min) { + return min; + } + if (val > max) { + return max; + } + return val; + }; + + quartile = function (values, q) { + var vl; + if (q === 2) { + vl = Math.floor(values.length / 2); + return values.length % 2 ? values[vl] : (values[vl] + values[vl + 1]) / 2; + } else { + vl = Math.floor(values.length / 4); + return values.length % 2 ? (values[vl * q] + values[vl * q + 1]) / 2 : values[vl * q]; + } + }; + + normalizeValue = function (val) { + var nf; + switch (val) { + case 'undefined': + val = undefined; + break; + case 'null': + val = null; + break; + case 'true': + val = true; + break; + case 'false': + val = false; + break; + default: + nf = parseFloat(val); + if (val == nf) { + val = nf; + } + } + return val; + }; + + normalizeValues = function (vals) { + var i, result = []; + for (i = vals.length; i--;) { + result[i] = normalizeValue(vals[i]); + } + return result; + }; + + remove = function (vals, filter) { + var i, vl, result = []; + for (i = 0, vl = vals.length; i < vl; i++) { + if (vals[i] !== filter) { + result.push(vals[i]); + } + } + return result; + }; + + isNumber = function (num) { + return !isNaN(parseFloat(num)) && isFinite(num); + }; + + formatNumber = function (num, prec, groupsize, groupsep, decsep) { + var p, i; + num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split(''); + p = (p = $.inArray('.', num)) < 0 ? num.length : p; + if (p < num.length) { + num[p] = decsep; + } + for (i = p - groupsize; i > 0; i -= groupsize) { + num.splice(i, 0, groupsep); + } + return num.join(''); + }; + + // determine if all values of an array match a value + // returns true if the array is empty + all = function (val, arr, ignoreNull) { + var i; + for (i = arr.length; i--; ) { + if (arr[i] !== val || (!ignoreNull && val === null)) { + return false; + } + } + return true; + }; + + // sums the numeric values in an array, ignoring other values + sum = function (vals) { + var total = 0, i; + for (i = vals.length; i--;) { + total += typeof vals[i] === 'number' ? vals[i] : 0; + } + return total; + }; + + ensureArray = function (val) { + return $.isArray(val) ? val : [val]; + }; + + // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/ + addCSS = function(css) { + var tag; + //if ('\v' == 'v') /* ie only */ { + if (document.createStyleSheet) { + document.createStyleSheet().cssText = css; + } else { + tag = document.createElement('style'); + tag.type = 'text/css'; + document.getElementsByTagName('head')[0].appendChild(tag); + tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css; + } + }; + + // Provide a cross-browser interface to a few simple drawing primitives + $.fn.simpledraw = function (width, height, useExisting, interact) { + var target, mhandler; + if (useExisting && (target = this.data('_jqs_vcanvas'))) { + return target; + } + if (width === undefined) { + width = $(this).innerWidth(); + } + if (height === undefined) { + height = $(this).innerHeight(); + } + if ($.browser.hasCanvas) { + target = new VCanvas_canvas(width, height, this, interact); + } else if ($.browser.msie) { + target = new VCanvas_vml(width, height, this); + } else { + return false; + } + mhandler = $(this).data('_jqs_mhandler'); + if (mhandler) { + mhandler.registerCanvas(target); + } + return target; + }; + + $.fn.cleardraw = function () { + var target = this.data('_jqs_vcanvas'); + if (target) { + target.reset(); + } + }; + + $.RangeMapClass = RangeMap = createClass({ + init: function (map) { + var key, range, rangelist = []; + for (key in map) { + if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) { + range = key.split(':'); + range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]); + range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]); + range[2] = map[key]; + rangelist.push(range); + } + } + this.map = map; + this.rangelist = rangelist || false; + }, + + get: function (value) { + var rangelist = this.rangelist, + i, range, result; + if ((result = this.map[value]) !== undefined) { + return result; + } + if (rangelist) { + for (i = rangelist.length; i--;) { + range = rangelist[i]; + if (range[0] <= value && range[1] >= value) { + return range[2]; + } + } + } + return undefined; + } + }); + + // Convenience function + $.range_map = function(map) { + return new RangeMap(map); + }; + + MouseHandler = createClass({ + init: function (el, options) { + var $el = $(el); + this.$el = $el; + this.options = options; + this.currentPageX = 0; + this.currentPageY = 0; + this.el = el; + this.splist = []; + this.tooltip = null; + this.over = false; + this.displayTooltips = !options.get('disableTooltips'); + this.highlightEnabled = !options.get('disableHighlight'); + }, + + registerSparkline: function (sp) { + this.splist.push(sp); + if (this.over) { + this.updateDisplay(); + } + }, + + registerCanvas: function (canvas) { + var $canvas = $(canvas.canvas); + this.canvas = canvas; + this.$canvas = $canvas; + $canvas.mouseenter($.proxy(this.mouseenter, this)); + $canvas.mouseleave($.proxy(this.mouseleave, this)); + $canvas.click($.proxy(this.mouseclick, this)); + }, + + reset: function (removeTooltip) { + this.splist = []; + if (this.tooltip && removeTooltip) { + this.tooltip.remove(); + this.tooltip = undefined; + } + }, + + mouseclick: function (e) { + var clickEvent = $.Event('sparklineClick'); + clickEvent.originalEvent = e; + clickEvent.sparklines = this.splist; + this.$el.trigger(clickEvent); + }, + + mouseenter: function (e) { + $(document.body).unbind('mousemove.jqs'); + $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this)); + this.over = true; + this.currentPageX = e.pageX; + this.currentPageY = e.pageY; + this.currentEl = e.target; + if (!this.tooltip && this.displayTooltips) { + this.tooltip = new Tooltip(this.options); + this.tooltip.updatePosition(e.pageX, e.pageY); + } + this.updateDisplay(); + }, + + mouseleave: function () { + $(document.body).unbind('mousemove.jqs'); + var splist = this.splist, + spcount = splist.length, + needsRefresh = false, + sp, i; + this.over = false; + this.currentEl = null; + + if (this.tooltip) { + this.tooltip.remove(); + this.tooltip = null; + } + + for (i = 0; i < spcount; i++) { + sp = splist[i]; + if (sp.clearRegionHighlight()) { + needsRefresh = true; + } + } + + if (needsRefresh) { + this.canvas.render(); + } + }, + + mousemove: function (e) { + this.currentPageX = e.pageX; + this.currentPageY = e.pageY; + this.currentEl = e.target; + if (this.tooltip) { + this.tooltip.updatePosition(e.pageX, e.pageY); + } + this.updateDisplay(); + }, + + updateDisplay: function () { + var splist = this.splist, + spcount = splist.length, + needsRefresh = false, + offset = this.$canvas.offset(), + localX = this.currentPageX - offset.left, + localY = this.currentPageY - offset.top, + tooltiphtml, sp, i, result, changeEvent; + if (!this.over) { + return; + } + for (i = 0; i < spcount; i++) { + sp = splist[i]; + result = sp.setRegionHighlight(this.currentEl, localX, localY); + if (result) { + needsRefresh = true; + } + } + if (needsRefresh) { + changeEvent = $.Event('sparklineRegionChange'); + changeEvent.sparklines = this.splist; + this.$el.trigger(changeEvent); + if (this.tooltip) { + tooltiphtml = ''; + for (i = 0; i < spcount; i++) { + sp = splist[i]; + tooltiphtml += sp.getCurrentRegionTooltip(); + } + this.tooltip.setContent(tooltiphtml); + } + if (!this.disableHighlight) { + this.canvas.render(); + } + } + if (result === null) { + this.mouseleave(); + } + } + }); + + + Tooltip = createClass({ + sizeStyle: 'position: static !important;' + + 'display: block !important;' + + 'visibility: hidden !important;' + + 'float: left !important;', + + init: function (options) { + var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'), + sizetipStyle = this.sizeStyle, + offset; + this.container = options.get('tooltipContainer') || document.body; + this.tooltipOffsetX = options.get('tooltipOffsetX', 10); + this.tooltipOffsetY = options.get('tooltipOffsetY', 12); + // remove any previous lingering tooltip + $('#jqssizetip').remove(); + $('#jqstooltip').remove(); + this.sizetip = $('<div/>', { + id: 'jqssizetip', + style: sizetipStyle, + 'class': tooltipClassname + }); + this.tooltip = $('<div/>', { + id: 'jqstooltip', + 'class': tooltipClassname + }).appendTo(this.container); + // account for the container's location + offset = this.tooltip.offset(); + this.offsetLeft = offset.left; + this.offsetTop = offset.top; + this.hidden = true; + $(window).unbind('resize.jqs scroll.jqs'); + $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this)); + this.updateWindowDims(); + }, + + updateWindowDims: function () { + this.scrollTop = $(window).scrollTop(); + this.scrollLeft = $(window).scrollLeft(); + this.scrollRight = this.scrollLeft + $(window).width(); + this.updatePosition(); + }, + + getSize: function (content) { + this.sizetip.html(content).appendTo(this.container); + this.width = this.sizetip.width() + 1; + this.height = this.sizetip.height(); + this.sizetip.remove(); + }, + + setContent: function (content) { + if (!content) { + this.tooltip.css('visibility', 'hidden'); + this.hidden = true; + return; + } + this.getSize(content); + this.tooltip.html(content) + .css({ + 'width': this.width, + 'height': this.height, + 'visibility': 'visible' + }); + if (this.hidden) { + this.hidden = false; + this.updatePosition(); + } + }, + + updatePosition: function (x, y) { + if (x === undefined) { + if (this.mousex === undefined) { + return; + } + x = this.mousex - this.offsetLeft; + y = this.mousey - this.offsetTop; + + } else { + this.mousex = x = x - this.offsetLeft; + this.mousey = y = y - this.offsetTop; + } + if (!this.height || !this.width || this.hidden) { + return; + } + + y -= this.height + this.tooltipOffsetY; + x += this.tooltipOffsetX; + + if (y < this.scrollTop) { + y = this.scrollTop; + } + if (x < this.scrollLeft) { + x = this.scrollLeft; + } else if (x + this.width > this.scrollRight) { + x = this.scrollRight - this.width; + } + + this.tooltip.css({ + 'left': x, + 'top': y + }); + }, + + remove: function () { + this.tooltip.remove(); + this.sizetip.remove(); + this.sizetip = this.tooltip = undefined; + $(window).unbind('resize.jqs scroll.jqs'); + } + }); + + pending = []; + $.fn.sparkline = function (userValues, userOptions) { + return this.each(function () { + var options = new $.fn.sparkline.options(this, userOptions), + $this = $(this), + render, i; + render = function () { + var values, width, height, tmp, mhandler, sp, vals; + if (userValues === 'html' || userValues === undefined) { + vals = this.getAttribute(options.get('tagValuesAttribute')); + if (vals === undefined || vals === null) { + vals = $this.html(); + } + values = vals.replace(/(^\s*<!--)|(-->\s*$)|\s+/g, '').split(','); + } else { + values = userValues; + } + + width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width'); + if (options.get('height') === 'auto') { + if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) { + // must be a better way to get the line height + tmp = document.createElement('span'); + tmp.innerHTML = 'a'; + $this.html(tmp); + height = $(tmp).innerHeight() || $(tmp).height(); + $(tmp).remove(); + tmp = null; + } + } else { + height = options.get('height'); + } + + if (!options.get('disableInteraction')) { + mhandler = $.data(this, '_jqs_mhandler'); + if (!mhandler) { + mhandler = new MouseHandler(this, options); + $.data(this, '_jqs_mhandler', mhandler); + } else if (!options.get('composite')) { + mhandler.reset(); + } + } else { + mhandler = false; + } + + if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) { + if (!$.data(this, '_jqs_errnotify')) { + alert('Attempted to attach a composite sparkline to an element with no existing sparkline'); + $.data(this, '_jqs_errnotify', true); + } + return; + } + + sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height); + + sp.render(); + + if (mhandler) { + mhandler.registerSparkline(sp); + } + }; + // jQuery 1.3.0 completely changed the meaning of :hidden :-/ + if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || ($.fn.jquery < '1.3.0' && $(this).parents().is(':hidden')) || !$(this).parents('body').length) { + if (!options.get('composite') && $.data(this, '_jqs_pending')) { + // remove any existing references to the element + for (i = pending.length; i; i--) { + if (pending[i - 1][0] == this) { + pending.splice(i - 1, 1); + } + } + } + pending.push([this, render]); + $.data(this, '_jqs_pending', true); + } else { + render.call(this); + } + }); + }; + + $.fn.sparkline.defaults = getDefaults(); + + + $.sparkline_display_visible = function () { + var el, i, pl; + var done = []; + for (i = 0, pl = pending.length; i < pl; i++) { + el = pending[i][0]; + if ($(el).is(':visible') && !$(el).parents().is(':hidden')) { + pending[i][1].call(el); + $.data(pending[i][0], '_jqs_pending', false); + done.push(i); + } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) { + // element has been inserted and removed from the DOM + // If it was not yet inserted into the dom then the .data request + // will return true. + // removing from the dom causes the data to be removed. + $.data(pending[i][0], '_jqs_pending', false); + done.push(i); + } + } + for (i = done.length; i; i--) { + pending.splice(done[i - 1], 1); + } + }; + + + /** + * User option handler + */ + $.fn.sparkline.options = createClass({ + init: function (tag, userOptions) { + var extendedOptions, defaults, base, tagOptionType; + this.userOptions = userOptions = userOptions || {}; + this.tag = tag; + this.tagValCache = {}; + defaults = $.fn.sparkline.defaults; + base = defaults.common; + this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix); + + tagOptionType = this.getTagSetting('type'); + if (tagOptionType === UNSET_OPTION) { + extendedOptions = defaults[userOptions.type || base.type]; + } else { + extendedOptions = defaults[tagOptionType]; + } + this.mergedOptions = $.extend({}, base, extendedOptions, userOptions); + }, + + + getTagSetting: function (key) { + var prefix = this.tagOptionsPrefix, + val, i, pairs, keyval; + if (prefix === false || prefix === undefined) { + return UNSET_OPTION; + } + if (this.tagValCache.hasOwnProperty(key)) { + val = this.tagValCache.key; + } else { + val = this.tag.getAttribute(prefix + key); + if (val === undefined || val === null) { + val = UNSET_OPTION; + } else if (val.substr(0, 1) === '[') { + val = val.substr(1, val.length - 2).split(','); + for (i = val.length; i--;) { + val[i] = normalizeValue(val[i].replace(/(^\s*)|(\s*$)/g, '')); + } + } else if (val.substr(0, 1) === '{') { + pairs = val.substr(1, val.length - 2).split(','); + val = {}; + for (i = pairs.length; i--;) { + keyval = pairs[i].split(':', 2); + val[keyval[0].replace(/(^\s*)|(\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\s*)|(\s*$)/g, '')); + } + } else { + val = normalizeValue(val); + } + this.tagValCache.key = val; + } + return val; + }, + + get: function (key, defaultval) { + var tagOption = this.getTagSetting(key), + result; + if (tagOption !== UNSET_OPTION) { + return tagOption; + } + return (result = this.mergedOptions[key]) === undefined ? defaultval : result; + } + }); + + + $.fn.sparkline._base = createClass({ + disabled: false, + + init: function (el, values, options, width, height) { + this.el = el; + this.$el = $(el); + this.values = values; + this.options = options; + this.width = width; + this.height = height; + this.currentRegion = undefined; + }, + + /** + * Setup the canvas + */ + initTarget: function () { + var interactive = !this.options.get('disableInteraction'); + if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) { + this.disabled = true; + } else { + this.canvasWidth = this.target.pixelWidth; + this.canvasHeight = this.target.pixelHeight; + } + }, + + /** + * Actually render the chart to the canvas + */ + render: function () { + if (this.disabled) { + this.el.innerHTML = ''; + return false; + } + return true; + }, + + /** + * Return a region id for a given x/y co-ordinate + */ + getRegion: function (x, y) { + }, + + /** + * Highlight an item based on the moused-over x,y co-ordinate + */ + setRegionHighlight: function (el, x, y) { + var currentRegion = this.currentRegion, + highlightEnabled = !this.options.get('disableHighlight'), + newRegion; + if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) { + return null; + } + newRegion = this.getRegion(el, x, y); + if (currentRegion !== newRegion) { + if (currentRegion !== undefined && highlightEnabled) { + this.removeHighlight(); + } + this.currentRegion = newRegion; + if (newRegion !== undefined && highlightEnabled) { + this.renderHighlight(); + } + return true; + } + return false; + }, + + /** + * Reset any currently highlighted item + */ + clearRegionHighlight: function () { + if (this.currentRegion !== undefined) { + this.removeHighlight(); + this.currentRegion = undefined; + return true; + } + return false; + }, + + renderHighlight: function () { + this.changeHighlight(true); + }, + + removeHighlight: function () { + this.changeHighlight(false); + }, + + changeHighlight: function (highlight) {}, + + /** + * Fetch the HTML to display as a tooltip + */ + getCurrentRegionTooltip: function () { + var options = this.options, + header = '', + entries = [], + fields, formats, formatlen, fclass, text, i, + showFields, showFieldsKey, newFields, fv, + formatter, format, fieldlen, j; + if (this.currentRegion === undefined) { + return ''; + } + fields = this.getCurrentRegionFields(); + formatter = options.get('tooltipFormatter'); + if (formatter) { + return formatter(this, options, fields); + } + if (options.get('tooltipChartTitle')) { + header += '<div class="jqs jqstitle">' + options.get('tooltipChartTitle') + '</div>\n'; + } + formats = this.options.get('tooltipFormat'); + if (!formats) { + return ''; + } + if (!$.isArray(formats)) { + formats = [formats]; + } + if (!$.isArray(fields)) { + fields = [fields]; + } + showFields = this.options.get('tooltipFormatFieldlist'); + showFieldsKey = this.options.get('tooltipFormatFieldlistKey'); + if (showFields && showFieldsKey) { + // user-selected ordering of fields + newFields = []; + for (i = fields.length; i--;) { + fv = fields[i][showFieldsKey]; + if ((j = $.inArray(fv, showFields)) != -1) { + newFields[j] = fields[i]; + } + } + fields = newFields; + } + formatlen = formats.length; + fieldlen = fields.length; + for (i = 0; i < formatlen; i++) { + format = formats[i]; + if (typeof format === 'string') { + format = new SPFormat(format); + } + fclass = format.fclass || 'jqsfield'; + for (j = 0; j < fieldlen; j++) { + if (!fields[j].isNull || !options.get('tooltipSkipNull')) { + $.extend(fields[j], { + prefix: options.get('tooltipPrefix'), + suffix: options.get('tooltipSuffix') + }); + text = format.render(fields[j], options.get('tooltipValueLookups'), options); + entries.push('<div class="' + fclass + '">' + text + '</div>'); + } + } + } + if (entries.length) { + return header + entries.join('\n'); + } + return ''; + }, + + getCurrentRegionFields: function () {}, + + calcHighlightColor: function (color, options) { + var highlightColor = options.get('highlightColor'), + lighten = options.get('highlightLighten'), + parse, mult, rgbnew, i; + if (highlightColor) { + return highlightColor; + } + if (lighten) { + // extract RGB values + parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color); + if (parse) { + rgbnew = []; + mult = color.length === 4 ? 16 : 1; + for (i = 0; i < 3; i++) { + rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255); + } + return 'rgb(' + rgbnew.join(',') + ')'; + } + + } + return color; + } + + }); + + barHighlightMixin = { + changeHighlight: function (highlight) { + var currentRegion = this.currentRegion, + target = this.target, + shapeids = this.regionShapes[currentRegion], + newShapes; + // will be null if the region value was null + if (shapeids) { + newShapes = this.renderRegion(currentRegion, highlight); + if ($.isArray(newShapes) || $.isArray(shapeids)) { + target.replaceWithShapes(shapeids, newShapes); + this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) { + return newShape.id; + }); + } else { + target.replaceWithShape(shapeids, newShapes); + this.regionShapes[currentRegion] = newShapes.id; + } + } + }, + + render: function () { + var values = this.values, + target = this.target, + regionShapes = this.regionShapes, + shapes, ids, i, j; + + if (!this.cls._super.render.call(this)) { + return; + } + for (i = values.length; i--;) { + shapes = this.renderRegion(i); + if (shapes) { + if ($.isArray(shapes)) { + ids = []; + for (j = shapes.length; j--;) { + shapes[j].append(); + ids.push(shapes[j].id); + } + regionShapes[i] = ids; + } else { + shapes.append(); + regionShapes[i] = shapes.id; // store just the shapeid + } + } else { + // null value + regionShapes[i] = null; + } + } + target.render(); + } + }; + + /** + * Line charts + */ + $.fn.sparkline.line = line = createClass($.fn.sparkline._base, { + type: 'line', + + init: function (el, values, options, width, height) { + line._super.init.call(this, el, values, options, width, height); + this.vertices = []; + this.regionMap = []; + this.xvalues = []; + this.yvalues = []; + this.yminmax = []; + this.hightlightSpotId = null; + this.lastShapeId = null; + this.initTarget(); + }, + + getRegion: function (el, x, y) { + var i, + regionMap = this.regionMap; // maps regions to value positions + for (i = regionMap.length; i--;) { + if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) { + return regionMap[i][2]; + } + } + return undefined; + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion; + return { + isNull: this.yvalues[currentRegion] === null, + x: this.xvalues[currentRegion], + y: this.yvalues[currentRegion], + color: this.options.get('lineColor'), + fillColor: this.options.get('fillColor'), + offset: currentRegion + }; + }, + + renderHighlight: function () { + var currentRegion = this.currentRegion, + target = this.target, + vertex = this.vertices[currentRegion], + options = this.options, + spotRadius = options.get('spotRadius'), + highlightSpotColor = options.get('highlightSpotColor'), + highlightLineColor = options.get('highlightLineColor'), + highlightSpot, highlightLine; + + if (!vertex) { + return; + } + if (spotRadius && highlightSpotColor) { + highlightSpot = target.drawCircle(vertex[0], vertex[1], + spotRadius, undefined, highlightSpotColor); + this.highlightSpotId = highlightSpot.id; + target.insertAfterShape(this.lastShapeId, highlightSpot); + } + if (highlightLineColor) { + highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0], + this.canvasTop + this.canvasHeight, highlightLineColor); + this.highlightLineId = highlightLine.id; + target.insertAfterShape(this.lastShapeId, highlightLine); + } + }, + + removeHighlight: function () { + var target = this.target; + if (this.highlightSpotId) { + target.removeShapeId(this.highlightSpotId); + this.highlightSpotId = null; + } + if (this.highlightLineId) { + target.removeShapeId(this.highlightLineId); + this.highlightLineId = null; + } + }, + + scanValues: function () { + var values = this.values, + valcount = values.length, + xvalues = this.xvalues, + yvalues = this.yvalues, + yminmax = this.yminmax, + i, val, isStr, isArray, sp; + for (i = 0; i < valcount; i++) { + val = values[i]; + isStr = typeof(values[i]) === 'string'; + isArray = typeof(values[i]) === 'object' && values[i] instanceof Array; + sp = isStr && values[i].split(':'); + if (isStr && sp.length === 2) { // x:y + xvalues.push(Number(sp[0])); + yvalues.push(Number(sp[1])); + yminmax.push(Number(sp[1])); + } else if (isArray) { + xvalues.push(val[0]); + yvalues.push(val[1]); + yminmax.push(val[1]); + } else { + xvalues.push(i); + if (values[i] === null || values[i] === 'null') { + yvalues.push(null); + } else { + yvalues.push(Number(val)); + yminmax.push(Number(val)); + } + } + } + if (this.options.get('xvalues')) { + xvalues = this.options.get('xvalues'); + } + + this.maxy = this.maxyorg = Math.max.apply(Math, yminmax); + this.miny = this.minyorg = Math.min.apply(Math, yminmax); + + this.maxx = Math.max.apply(Math, xvalues); + this.minx = Math.min.apply(Math, xvalues); + + this.xvalues = xvalues; + this.yvalues = yvalues; + this.yminmax = yminmax; + + }, + + processRangeOptions: function () { + var options = this.options, + normalRangeMin = options.get('normalRangeMin'), + normalRangeMax = options.get('normalRangeMax'); + + if (normalRangeMin !== undefined) { + if (normalRangeMin < this.miny) { + this.miny = normalRangeMin; + } + if (normalRangeMax > this.maxy) { + this.maxy = normalRangeMax; + } + } + if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) { + this.miny = options.get('chartRangeMin'); + } + if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) { + this.maxy = options.get('chartRangeMax'); + } + if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) { + this.minx = options.get('chartRangeMinX'); + } + if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) { + this.maxx = options.get('chartRangeMaxX'); + } + + }, + + drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) { + var normalRangeMin = this.options.get('normalRangeMin'), + normalRangeMax = this.options.get('normalRangeMax'), + ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))), + height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey); + this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append(); + }, + + render: function () { + var options = this.options, + target = this.target, + canvasWidth = this.canvasWidth, + canvasHeight = this.canvasHeight, + vertices = this.vertices, + spotRadius = options.get('spotRadius'), + regionMap = this.regionMap, + rangex, rangey, yvallast, + canvasTop, canvasLeft, + vertex, path, paths, x, y, xnext, xpos, xposnext, + last, next, yvalcount, lineShapes, fillShapes, plen, + valueSpots, color, xvalues, yvalues, i; + + if (!line._super.render.call(this)) { + return; + } + + this.scanValues(); + this.processRangeOptions(); + + xvalues = this.xvalues; + yvalues = this.yvalues; + + if (!this.yminmax.length || this.yvalues.length < 2) { + // empty or all null valuess + return; + } + + canvasTop = canvasLeft = 0; + + rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx; + rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny; + yvallast = this.yvalues.length - 1; + + if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) { + spotRadius = 0; + } + if (spotRadius) { + // adjust the canvas size as required so that spots will fit + if (options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) { + canvasHeight -= Math.ceil(spotRadius); + } + if (options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) { + canvasHeight -= Math.ceil(spotRadius); + canvasTop += Math.ceil(spotRadius); + } + if ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy)) { + canvasLeft += Math.ceil(spotRadius); + canvasWidth -= Math.ceil(spotRadius); + } + if (options.get('spotColor') || + (options.get('minSpotColor') || options.get('maxSpotColor') && + (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) { + canvasWidth -= Math.ceil(spotRadius); + } + } + + + canvasHeight--; + + if (options.get('normalRangeMin') && !options.get('drawNormalOnTop')) { + this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey); + } + + path = []; + paths = [path]; + last = next = null; + yvalcount = yvalues.length; + for (i = 0; i < yvalcount; i++) { + x = xvalues[i]; + xnext = xvalues[i + 1]; + y = yvalues[i]; + xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)); + xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth; + next = xpos + ((xposnext - xpos) / 2); + regionMap[i] = [last || 0, next, i]; + last = next; + if (y === null) { + if (i) { + if (yvalues[i - 1] !== null) { + path = []; + paths.push(path); + vertices.push(null); + } + } + } else { + if (y < this.miny) { + y = this.miny; + } + if (y > this.maxy) { + y = this.maxy; + } + if (!path.length) { + // previous value was null + path.push([xpos, canvasTop + canvasHeight]); + } + vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))]; + path.push(vertex); + vertices.push(vertex); + } + } + + lineShapes = []; + fillShapes = []; + plen = paths.length; + for (i = 0; i < plen; i++) { + path = paths[i]; + if (path.length) { + if (options.get('fillColor')) { + path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]); + fillShapes.push(path.slice(0)); + path.pop(); + } + // if there's only a single point in this path, then we want to display it + // as a vertical line which means we keep path[0] as is + if (path.length > 2) { + // else we want the first value + path[0] = [path[0][0], path[1][1]]; + } + lineShapes.push(path); + } + } + + // draw the fill first, then optionally the normal range, then the line on top of that + plen = fillShapes.length; + for (i = 0; i < plen; i++) { + target.drawShape(fillShapes[i], + options.get('fillColor'), options.get('fillColor')).append(); + } + + if (options.get('normalRangeMin') && options.get('drawNormalOnTop')) { + this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey); + } + + plen = lineShapes.length; + for (i = 0; i < plen; i++) { + target.drawShape(lineShapes[i], options.get('lineColor'), undefined, + options.get('lineWidth')).append(); + } + + if (spotRadius && options.get('valueSpots')) { + valueSpots = options.get('valueSpots'); + if (valueSpots.get === undefined) { + valueSpots = new RangeMap(valueSpots); + } + for (i = 0; i < yvalcount; i++) { + color = valueSpots.get(yvalues[i]); + if (color) { + target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)), + canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))), + spotRadius, undefined, + color).append(); + } + } + + } + if (spotRadius && options.get('spotColor')) { + target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)), + canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))), + spotRadius, undefined, + options.get('spotColor')).append(); + } + if (this.maxy !== this.minyorg) { + if (spotRadius && options.get('minSpotColor')) { + x = xvalues[$.inArray(this.minyorg, yvalues)]; + target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)), + canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))), + spotRadius, undefined, + options.get('minSpotColor')).append(); + } + if (spotRadius && options.get('maxSpotColor')) { + x = xvalues[$.inArray(this.maxyorg, yvalues)]; + target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)), + canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))), + spotRadius, undefined, + options.get('maxSpotColor')).append(); + } + } + + this.lastShapeId = target.getLastShapeId(); + this.canvasTop = canvasTop; + target.render(); + } + }); + + /** + * Bar charts + */ + $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, { + type: 'bar', + + init: function (el, values, options, width, height) { + var barWidth = parseInt(options.get('barWidth'), 10), + barSpacing = parseInt(options.get('barSpacing'), 10), + chartRangeMin = options.get('chartRangeMin'), + chartRangeMax = options.get('chartRangeMax'), + chartRangeClip = options.get('chartRangeClip'), + stackMin = Infinity, + stackMax = -Infinity, + isStackString, groupMin, groupMax, stackRanges, + numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax, + stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf; + bar._super.init.call(this, el, values, options, width, height); + + // scan values to determine whether to stack bars + for (i = 0, vlen = values.length; i < vlen; i++) { + val = values[i]; + isStackString = typeof(val) === 'string' && val.indexOf(':') > -1; + if (isStackString || $.isArray(val)) { + stacked = true; + if (isStackString) { + val = values[i] = normalizeValues(val.split(':')); + } + val = remove(val, null); // min/max will treat null as zero + groupMin = Math.min.apply(Math, val); + groupMax = Math.max.apply(Math, val); + if (groupMin < stackMin) { + stackMin = groupMin; + } + if (groupMax > stackMax) { + stackMax = groupMax; + } + } + } + + this.stacked = stacked; + this.regionShapes = {}; + this.barWidth = barWidth; + this.barSpacing = barSpacing; + this.totalBarWidth = barWidth + barSpacing; + this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing); + + this.initTarget(); + + if (chartRangeClip) { + clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin; + clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax; + } + + numValues = []; + stackRanges = stacked ? [] : numValues; + var stackTotals = []; + var stackRangesNeg = []; + for (i = 0, vlen = values.length; i < vlen; i++) { + if (stacked) { + vlist = values[i]; + values[i] = svals = []; + stackTotals[i] = 0; + stackRanges[i] = stackRangesNeg[i] = 0; + for (j = 0, slen = vlist.length; j < slen; j++) { + val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j]; + if (val !== null) { + if (val > 0) { + stackTotals[i] += val; + } + if (stackMin < 0 && stackMax > 0) { + if (val < 0) { + stackRangesNeg[i] += Math.abs(val); + } else { + stackRanges[i] += val; + } + } else { + stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin)); + } + numValues.push(val); + } + } + } else { + val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i]; + val = values[i] = normalizeValue(val); + if (val !== null) { + numValues.push(val); + } + } + } + this.max = max = Math.max.apply(Math, numValues); + this.min = min = Math.min.apply(Math, numValues); + this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max; + this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min; + + if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) { + min = options.get('chartRangeMin'); + } + if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) { + max = options.get('chartRangeMax'); + } + + this.zeroAxis = zeroAxis = options.get('zeroAxis', true); + if (min <= 0 && max >= 0 && zeroAxis) { + xaxisOffset = 0; + } else if (zeroAxis == false) { + xaxisOffset = min; + } else if (min > 0) { + xaxisOffset = min; + } else { + xaxisOffset = max; + } + this.xaxisOffset = xaxisOffset; + + range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min; + + // as we plot zero/min values a single pixel line, we add a pixel to all other + // values - Reduce the effective canvas size to suit + this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1; + + if (min < xaxisOffset) { + yMaxCalc = (stacked && max >= 0) ? stackMax : max; + yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight; + if (yoffset !== Math.ceil(yoffset)) { + this.canvasHeightEf -= 2; + yoffset = Math.ceil(yoffset); + } + } else { + yoffset = this.canvasHeight; + } + this.yoffset = yoffset; + + if ($.isArray(options.get('colorMap'))) { + this.colorMapByIndex = options.get('colorMap'); + this.colorMapByValue = null; + } else { + this.colorMapByIndex = null; + this.colorMapByValue = options.get('colorMap'); + if (this.colorMapByValue && this.colorMapByValue.get === undefined) { + this.colorMapByValue = new RangeMap(this.colorMapByValue); + } + } + + this.range = range; + }, + + getRegion: function (el, x, y) { + var result = Math.floor(x / this.totalBarWidth); + return (result < 0 || result >= this.values.length) ? undefined : result; + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion, + values = ensureArray(this.values[currentRegion]), + result = [], + value, i; + for (i = values.length; i--;) { + value = values[i]; + result.push({ + isNull: value === null, + value: value, + color: this.calcColor(i, value, currentRegion), + offset: currentRegion + }); + } + return result; + }, + + calcColor: function (stacknum, value, valuenum) { + var colorMapByIndex = this.colorMapByIndex, + colorMapByValue = this.colorMapByValue, + options = this.options, + color, newColor; + if (this.stacked) { + color = options.get('stackedBarColor'); + } else { + color = (value < 0) ? options.get('negBarColor') : options.get('barColor'); + } + if (value === 0 && options.get('zeroColor') !== undefined) { + color = options.get('zeroColor'); + } + if (colorMapByValue && (newColor = colorMapByValue.get(value))) { + color = newColor; + } else if (colorMapByIndex && colorMapByIndex.length > valuenum) { + color = colorMapByIndex[valuenum]; + } + return $.isArray(color) ? color[stacknum % color.length] : color; + }, + + /** + * Render bar(s) for a region + */ + renderRegion: function (valuenum, highlight) { + var vals = this.values[valuenum], + options = this.options, + xaxisOffset = this.xaxisOffset, + result = [], + range = this.range, + stacked = this.stacked, + target = this.target, + x = valuenum * this.totalBarWidth, + canvasHeightEf = this.canvasHeightEf, + yoffset = this.yoffset, + y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin; + + vals = $.isArray(vals) ? vals : [vals]; + valcount = vals.length; + val = vals[0]; + isNull = all(null, vals); + allMin = all(xaxisOffset, vals, true); + + if (isNull) { + if (options.get('nullColor')) { + color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options); + y = (yoffset > 0) ? yoffset - 1 : yoffset; + return target.drawRect(x, y, this.barWidth - 1, 0, color, color); + } else { + return undefined; + } + } + yoffsetNeg = yoffset; + for (i = 0; i < valcount; i++) { + val = vals[i]; + + if (stacked && val === xaxisOffset) { + if (!allMin || minPlotted) { + continue; + } + minPlotted = true; + } + + if (range > 0) { + height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1; + } else { + height = 1; + } + if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) { + y = yoffsetNeg; + yoffsetNeg += height; + } else { + y = yoffset - height; + yoffset -= height; + } + color = this.calcColor(i, val, valuenum); + if (highlight) { + color = this.calcHighlightColor(color, options); + } + result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color)); + } + if (result.length === 1) { + return result[0]; + } + return result; + } + }); + + /** + * Tristate charts + */ + $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, { + type: 'tristate', + + init: function (el, values, options, width, height) { + var barWidth = parseInt(options.get('barWidth'), 10), + barSpacing = parseInt(options.get('barSpacing'), 10); + tristate._super.init.call(this, el, values, options, width, height); + + this.regionShapes = {}; + this.barWidth = barWidth; + this.barSpacing = barSpacing; + this.totalBarWidth = barWidth + barSpacing; + this.values = $.map(values, Number); + this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing); + + if ($.isArray(options.get('colorMap'))) { + this.colorMapByIndex = options.get('colorMap'); + this.colorMapByValue = null; + } else { + this.colorMapByIndex = null; + this.colorMapByValue = options.get('colorMap'); + if (this.colorMapByValue && this.colorMapByValue.get === undefined) { + this.colorMapByValue = new RangeMap(this.colorMapByValue); + } + } + this.initTarget(); + }, + + getRegion: function (el, x, y) { + return Math.floor(x / this.totalBarWidth); + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion; + return { + isNull: this.values[currentRegion] === undefined, + value: this.values[currentRegion], + color: this.calcColor(this.values[currentRegion], currentRegion), + offset: currentRegion + }; + }, + + calcColor: function (value, valuenum) { + var values = this.values, + options = this.options, + colorMapByIndex = this.colorMapByIndex, + colorMapByValue = this.colorMapByValue, + color, newColor; + + if (colorMapByValue && (newColor = colorMapByValue.get(value))) { + color = newColor; + } else if (colorMapByIndex && colorMapByIndex.length > valuenum) { + color = colorMapByIndex[valuenum]; + } else if (values[valuenum] < 0) { + color = options.get('negBarColor'); + } else if (values[valuenum] > 0) { + color = options.get('posBarColor'); + } else { + color = options.get('zeroBarColor'); + } + return color; + }, + + renderRegion: function (valuenum, highlight) { + var values = this.values, + options = this.options, + target = this.target, + canvasHeight, height, halfHeight, + x, y, color; + + canvasHeight = target.pixelHeight; + halfHeight = Math.round(canvasHeight / 2); + + x = valuenum * this.totalBarWidth; + if (values[valuenum] < 0) { + y = halfHeight; + height = halfHeight - 1; + } else if (values[valuenum] > 0) { + y = 0; + height = halfHeight - 1; + } else { + y = halfHeight - 1; + height = 2; + } + color = this.calcColor(values[valuenum], valuenum); + if (color === null) { + return; + } + if (highlight) { + color = this.calcHighlightColor(color, options); + } + return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color); + } + }); + + /** + * Discrete charts + */ + $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, { + type: 'discrete', + + init: function (el, values, options, width, height) { + discrete._super.init.call(this, el, values, options, width, height); + + this.regionShapes = {}; + this.values = values = $.map(values, Number); + this.min = Math.min.apply(Math, values); + this.max = Math.max.apply(Math, values); + this.range = this.max - this.min; + this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width; + this.interval = Math.floor(width / values.length); + this.itemWidth = width / values.length; + if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) { + this.min = options.get('chartRangeMin'); + } + if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) { + this.max = options.get('chartRangeMax'); + } + this.initTarget(); + if (this.target) { + this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight'); + } + }, + + getRegion: function (el, x, y) { + return Math.floor(x / this.itemWidth); + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion; + return { + isNull: this.values[currentRegion] === undefined, + value: this.values[currentRegion], + offset: currentRegion + }; + }, + + renderRegion: function (valuenum, highlight) { + var values = this.values, + options = this.options, + min = this.min, + max = this.max, + range = this.range, + interval = this.interval, + target = this.target, + canvasHeight = this.canvasHeight, + lineHeight = this.lineHeight, + pheight = canvasHeight - lineHeight, + ytop, val, color, x; + + val = clipval(values[valuenum], min, max); + x = valuenum * interval; + ytop = Math.round(pheight - pheight * ((val - min) / range)); + color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor'); + if (highlight) { + color = this.calcHighlightColor(color, options); + } + return target.drawLine(x, ytop, x, ytop + lineHeight, color); + } + }); + + /** + * Bullet charts + */ + $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, { + type: 'bullet', + + init: function (el, values, options, width, height) { + var min, max; + bullet._super.init.call(this, el, values, options, width, height); + + // values: target, performance, range1, range2, range3 + values = $.map(values, Number); + min = Math.min.apply(Math, values); + max = Math.max.apply(Math, values); + if (options.get('base') === undefined) { + min = min < 0 ? min : 0; + } else { + min = options.get('base'); + } + this.min = min; + this.max = max; + this.range = max - min; + this.shapes = {}; + this.valueShapes = {}; + this.regiondata = {}; + this.width = width = options.get('width') === 'auto' ? '4.0em' : width; + this.target = this.$el.simpledraw(width, height, options.get('composite')); + if (!values.length) { + this.disabled = true; + } + this.initTarget(); + }, + + getRegion: function (el, x, y) { + var shapeid = this.target.getShapeAt(el, x, y); + return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined; + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion; + return { + fieldkey: currentRegion.substr(0, 1), + value: this.values[currentRegion.substr(1)], + region: currentRegion + }; + }, + + changeHighlight: function (highlight) { + var currentRegion = this.currentRegion, + shapeid = this.valueShapes[currentRegion], + shape; + delete this.shapes[shapeid]; + switch (currentRegion.substr(0, 1)) { + case 'r': + shape = this.renderRange(currentRegion.substr(1), highlight); + break; + case 'p': + shape = this.renderPerformance(highlight); + break; + case 't': + shape = this.renderTarget(highlight); + break; + } + this.valueShapes[currentRegion] = shape.id; + this.shapes[shape.id] = currentRegion; + this.target.replaceWithShape(shapeid, shape); + }, + + renderRange: function (rn, highlight) { + var rangeval = this.values[rn], + rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)), + color = this.options.get('rangeColors')[rn - 2]; + if (highlight) { + color = this.calcHighlightColor(color, this.options); + } + return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color); + }, + + renderPerformance: function (highlight) { + var perfval = this.values[1], + perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)), + color = this.options.get('performanceColor'); + if (highlight) { + color = this.calcHighlightColor(color, this.options); + } + return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1, + Math.round(this.canvasHeight * 0.4) - 1, color, color); + }, + + renderTarget: function (highlight) { + var targetval = this.values[0], + x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)), + targettop = Math.round(this.canvasHeight * 0.10), + targetheight = this.canvasHeight - (targettop * 2), + color = this.options.get('targetColor'); + if (highlight) { + color = this.calcHighlightColor(color, this.options); + } + return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color); + }, + + render: function () { + var vlen = this.values.length, + target = this.target, + i, shape; + if (!bullet._super.render.call(this)) { + return; + } + for (i = 2; i < vlen; i++) { + shape = this.renderRange(i).append(); + this.shapes[shape.id] = 'r' + i; + this.valueShapes['r' + i] = shape.id; + } + shape = this.renderPerformance().append(); + this.shapes[shape.id] = 'p1'; + this.valueShapes.p1 = shape.id; + shape = this.renderTarget().append(); + this.shapes[shape.id] = 't0'; + this.valueShapes.t0 = shape.id; + target.render(); + } + }); + + /** + * Pie charts + */ + $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, { + type: 'pie', + + init: function (el, values, options, width, height) { + var total = 0, i; + + pie._super.init.call(this, el, values, options, width, height); + + this.shapes = {}; // map shape ids to value offsets + this.valueShapes = {}; // maps value offsets to shape ids + this.values = values = $.map(values, Number); + + if (options.get('width') === 'auto') { + this.width = this.height; + } + + if (values.length > 0) { + for (i = values.length; i--;) { + total += values[i]; + } + } + this.total = total; + this.initTarget(); + this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2); + }, + + getRegion: function (el, x, y) { + var shapeid = this.target.getShapeAt(el, x, y); + return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined; + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion; + return { + isNull: this.values[currentRegion] === undefined, + value: this.values[currentRegion], + percent: this.values[currentRegion] / this.total * 100, + color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length], + offset: currentRegion + }; + }, + + changeHighlight: function (highlight) { + var currentRegion = this.currentRegion, + newslice = this.renderSlice(currentRegion, highlight), + shapeid = this.valueShapes[currentRegion]; + delete this.shapes[shapeid]; + this.target.replaceWithShape(shapeid, newslice); + this.valueShapes[currentRegion] = newslice.id; + this.shapes[newslice.id] = currentRegion; + }, + + renderSlice: function (valuenum, highlight) { + var target = this.target, + options = this.options, + radius = this.radius, + borderWidth = options.get('borderWidth'), + offset = options.get('offset'), + circle = 2 * Math.PI, + values = this.values, + total = this.total, + next = offset ? (2*Math.PI)*(offset/360) : 0, + start, end, i, vlen, color; + + vlen = values.length; + for (i = 0; i < vlen; i++) { + start = next; + end = next; + if (total > 0) { // avoid divide by zero + end = next + (circle * (values[i] / total)); + } + if (valuenum === i) { + color = options.get('sliceColors')[i % options.get('sliceColors').length]; + if (highlight) { + color = this.calcHighlightColor(color, options); + } + + return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color); + } + next = end; + } + }, + + render: function () { + var target = this.target, + values = this.values, + options = this.options, + radius = this.radius, + borderWidth = options.get('borderWidth'), + shape, i; + + if (!pie._super.render.call(this)) { + return; + } + if (borderWidth) { + target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)), + options.get('borderColor'), undefined, borderWidth).append(); + } + for (i = values.length; i--;) { + shape = this.renderSlice(i).append(); + this.valueShapes[i] = shape.id; // store just the shapeid + this.shapes[shape.id] = i; + } + target.render(); + } + }); + + /** + * Box plots + */ + $.fn.sparkline.box = box = createClass($.fn.sparkline._base, { + type: 'box', + + init: function (el, values, options, width, height) { + box._super.init.call(this, el, values, options, width, height); + this.values = $.map(values, Number); + this.width = options.get('width') === 'auto' ? '4.0em' : width; + this.initTarget(); + if (!this.values.length) { + this.disabled = 1; + } + }, + + /** + * Simulate a single region + */ + getRegion: function () { + return 1; + }, + + getCurrentRegionFields: function () { + var result = [ + { field: 'lq', value: this.quartiles[0] }, + { field: 'med', value: this.quartiles[1] }, + { field: 'uq', value: this.quartiles[2] }, + { field: 'lo', value: this.loutlier }, + { field: 'ro', value: this.routlier } + ]; + if (this.lwhisker !== undefined) { + result.push({ field: 'lw', value: this.lwhisker}); + } + if (this.rwhisker !== undefined) { + result.push({ field: 'rw', value: this.rwhisker}); + } + return result; + }, + + render: function () { + var target = this.target, + values = this.values, + vlen = values.length, + options = this.options, + canvasWidth = this.canvasWidth, + canvasHeight = this.canvasHeight, + minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'), + maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'), + canvasLeft = 0, + lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i, + size, unitSize; + + if (!box._super.render.call(this)) { + return; + } + + if (options.get('raw')) { + if (options.get('showOutliers') && values.length > 5) { + loutlier = values[0]; + lwhisker = values[1]; + q1 = values[2]; + q2 = values[3]; + q3 = values[4]; + rwhisker = values[5]; + routlier = values[6]; + } else { + lwhisker = values[0]; + q1 = values[1]; + q2 = values[2]; + q3 = values[3]; + rwhisker = values[4]; + } + } else { + values.sort(function (a, b) { return a - b; }); + q1 = quartile(values, 1); + q2 = quartile(values, 2); + q3 = quartile(values, 3); + iqr = q3 - q1; + if (options.get('showOutliers')) { + lwhisker = rwhisker = undefined; + for (i = 0; i < vlen; i++) { + if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) { + lwhisker = values[i]; + } + if (values[i] < q3 + (iqr * options.get('outlierIQR'))) { + rwhisker = values[i]; + } + } + loutlier = values[0]; + routlier = values[vlen - 1]; + } else { + lwhisker = values[0]; + rwhisker = values[vlen - 1]; + } + } + this.quartiles = [q1, q2, q3]; + this.lwhisker = lwhisker; + this.rwhisker = rwhisker; + this.loutlier = loutlier; + this.routlier = routlier; + + unitSize = canvasWidth / (maxValue - minValue + 1); + if (options.get('showOutliers')) { + canvasLeft = Math.ceil(options.get('spotRadius')); + canvasWidth -= 2 * Math.ceil(options.get('spotRadius')); + unitSize = canvasWidth / (maxValue - minValue + 1); + if (loutlier < lwhisker) { + target.drawCircle((loutlier - minValue) * unitSize + canvasLeft, + canvasHeight / 2, + options.get('spotRadius'), + options.get('outlierLineColor'), + options.get('outlierFillColor')).append(); + } + if (routlier > rwhisker) { + target.drawCircle((routlier - minValue) * unitSize + canvasLeft, + canvasHeight / 2, + options.get('spotRadius'), + options.get('outlierLineColor'), + options.get('outlierFillColor')).append(); + } + } + + // box + target.drawRect( + Math.round((q1 - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight * 0.1), + Math.round((q3 - q1) * unitSize), + Math.round(canvasHeight * 0.8), + options.get('boxLineColor'), + options.get('boxFillColor')).append(); + // left whisker + target.drawLine( + Math.round((lwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 2), + Math.round((q1 - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 2), + options.get('lineColor')).append(); + target.drawLine( + Math.round((lwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 4), + Math.round((lwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight - canvasHeight / 4), + options.get('whiskerColor')).append(); + // right whisker + target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 2), + Math.round((q3 - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 2), + options.get('lineColor')).append(); + target.drawLine( + Math.round((rwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 4), + Math.round((rwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight - canvasHeight / 4), + options.get('whiskerColor')).append(); + // median line + target.drawLine( + Math.round((q2 - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight * 0.1), + Math.round((q2 - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight * 0.9), + options.get('medianColor')).append(); + if (options.get('target')) { + size = Math.ceil(options.get('spotRadius')); + target.drawLine( + Math.round((options.get('target') - minValue) * unitSize + canvasLeft), + Math.round((canvasHeight / 2) - size), + Math.round((options.get('target') - minValue) * unitSize + canvasLeft), + Math.round((canvasHeight / 2) + size), + options.get('targetColor')).append(); + target.drawLine( + Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size), + Math.round(canvasHeight / 2), + Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size), + Math.round(canvasHeight / 2), + options.get('targetColor')).append(); + } + target.render(); + } + }); + + // Setup a very simple "virtual canvas" to make drawing the few shapes we need easier + // This is accessible as $(foo).simpledraw() + + if ($.browser.msie && !document.namespaces.v) { + document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML'); + } + + if ($.browser.hasCanvas === undefined) { + $.browser.hasCanvas = document.createElement('canvas').getContext !== undefined; + } + + VShape = createClass({ + init: function (target, id, type, args) { + this.target = target; + this.id = id; + this.type = type; + this.args = args; + }, + append: function () { + this.target.appendShape(this); + return this; + } + }); + + VCanvas_base = createClass({ + _pxregex: /(\d+)(px)?\s*$/i, + + init: function (width, height, target) { + if (!width) { + return; + } + this.width = width; + this.height = height; + this.target = target; + this.lastShapeId = null; + if (target[0]) { + target = target[0]; + } + $.data(target, '_jqs_vcanvas', this); + }, + + drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) { + return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth); + }, + + drawShape: function (path, lineColor, fillColor, lineWidth) { + return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]); + }, + + drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) { + return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]); + }, + + drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) { + return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]); + }, + + drawRect: function (x, y, width, height, lineColor, fillColor) { + return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]); + }, + + getElement: function () { + return this.canvas; + }, + + /** + * Return the most recently inserted shape id + */ + getLastShapeId: function () { + return this.lastShapeId; + }, + + /** + * Clear and reset the canvas + */ + reset: function () { + alert('reset not implemented'); + }, + + _insert: function (el, target) { + $(target).html(el); + }, + + /** + * Calculate the pixel dimensions of the canvas + */ + _calculatePixelDims: function (width, height, canvas) { + // XXX This should probably be a configurable option + var match; + match = this._pxregex.exec(height); + if (match) { + this.pixelHeight = match[1]; + } else { + this.pixelHeight = $(canvas).height(); + } + match = this._pxregex.exec(width); + if (match) { + this.pixelWidth = match[1]; + } else { + this.pixelWidth = $(canvas).width(); + } + }, + + /** + * Generate a shape object and id for later rendering + */ + _genShape: function (shapetype, shapeargs) { + var id = shapeCount++; + shapeargs.unshift(id); + return new VShape(this, id, shapetype, shapeargs); + }, + + /** + * Add a shape to the end of the render queue + */ + appendShape: function (shape) { + alert('appendShape not implemented'); + }, + + /** + * Replace one shape with another + */ + replaceWithShape: function (shapeid, shape) { + alert('replaceWithShape not implemented'); + }, + + /** + * Insert one shape after another in the render queue + */ + insertAfterShape: function (shapeid, shape) { + alert('insertAfterShape not implemented'); + }, + + /** + * Remove a shape from the queue + */ + removeShapeId: function (shapeid) { + alert('removeShapeId not implemented'); + }, + + /** + * Find a shape at the specified x/y co-ordinates + */ + getShapeAt: function (el, x, y) { + alert('getShapeAt not implemented'); + }, + + /** + * Render all queued shapes onto the canvas + */ + render: function () { + alert('render not implemented'); + } + }); + + VCanvas_canvas = createClass(VCanvas_base, { + init: function (width, height, target, interact) { + VCanvas_canvas._super.init.call(this, width, height, target); + this.canvas = document.createElement('canvas'); + if (target[0]) { + target = target[0]; + } + $.data(target, '_jqs_vcanvas', this); + $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' }); + this._insert(this.canvas, target); + this._calculatePixelDims(width, height, this.canvas); + this.canvas.width = this.pixelWidth; + this.canvas.height = this.pixelHeight; + this.interact = interact; + this.shapes = {}; + this.shapeseq = []; + this.currentTargetShapeId = undefined; + $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight}); + }, + + _getContext: function (lineColor, fillColor, lineWidth) { + var context = this.canvas.getContext('2d'); + if (lineColor !== undefined) { + context.strokeStyle = lineColor; + } + context.lineWidth = lineWidth === undefined ? 1 : lineWidth; + if (fillColor !== undefined) { + context.fillStyle = fillColor; + } + return context; + }, + + reset: function () { + var context = this._getContext(); + context.clearRect(0, 0, this.pixelWidth, this.pixelHeight); + this.shapes = {}; + this.shapeseq = []; + this.currentTargetShapeId = undefined; + }, + + _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) { + var context = this._getContext(lineColor, fillColor, lineWidth), + i, plen; + context.beginPath(); + context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5); + for (i = 1, plen = path.length; i < plen; i++) { + context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines + } + if (lineColor !== undefined) { + context.stroke(); + } + if (fillColor !== undefined) { + context.fill(); + } + if (this.targetX !== undefined && this.targetY !== undefined && + context.isPointInPath(this.targetX, this.targetY)) { + this.currentTargetShapeId = shapeid; + } + }, + + _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) { + var context = this._getContext(lineColor, fillColor, lineWidth); + context.beginPath(); + context.arc(x, y, radius, 0, 2 * Math.PI, false); + if (this.targetX !== undefined && this.targetY !== undefined && + context.isPointInPath(this.targetX, this.targetY)) { + this.currentTargetShapeId = shapeid; + } + if (lineColor !== undefined) { + context.stroke(); + } + if (fillColor !== undefined) { + context.fill(); + } + }, + + _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) { + var context = this._getContext(lineColor, fillColor); + context.beginPath(); + context.moveTo(x, y); + context.arc(x, y, radius, startAngle, endAngle, false); + context.lineTo(x, y); + context.closePath(); + if (lineColor !== undefined) { + context.stroke(); + } + if (fillColor) { + context.fill(); + } + if (this.targetX !== undefined && this.targetY !== undefined && + context.isPointInPath(this.targetX, this.targetY)) { + this.currentTargetShapeId = shapeid; + } + }, + + _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) { + return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor); + }, + + appendShape: function (shape) { + this.shapes[shape.id] = shape; + this.shapeseq.push(shape.id); + this.lastShapeId = shape.id; + return shape.id; + }, + + replaceWithShape: function (shapeid, shape) { + var shapeseq = this.shapeseq, + i; + this.shapes[shape.id] = shape; + for (i = shapeseq.length; i--;) { + if (shapeseq[i] == shapeid) { + shapeseq[i] = shape.id; + } + } + delete this.shapes[shapeid]; + }, + + replaceWithShapes: function (shapeids, shapes) { + var shapeseq = this.shapeseq, + shapemap = {}, + sid, i, first; + + for (i = shapeids.length; i--;) { + shapemap[shapeids[i]] = true; + } + for (i = shapeseq.length; i--;) { + sid = shapeseq[i]; + if (shapemap[sid]) { + shapeseq.splice(i, 1); + delete this.shapes[sid]; + first = i; + } + } + for (i = shapes.length; i--;) { + shapeseq.splice(first, 0, shapes[i].id); + this.shapes[shapes[i].id] = shapes[i]; + } + + }, + + insertAfterShape: function (shapeid, shape) { + var shapeseq = this.shapeseq, + i; + for (i = shapeseq.length; i--;) { + if (shapeseq[i] === shapeid) { + shapeseq.splice(i + 1, 0, shape.id); + this.shapes[shape.id] = shape; + return; + } + } + }, + + removeShapeId: function (shapeid) { + var shapeseq = this.shapeseq, + i; + for (i = shapeseq.length; i--;) { + if (shapeseq[i] === shapeid) { + shapeseq.splice(i, 1); + break; + } + } + delete this.shapes[shapeid]; + }, + + getShapeAt: function (el, x, y) { + this.targetX = x; + this.targetY = y; + this.render(); + return this.currentTargetShapeId; + }, + + render: function () { + var shapeseq = this.shapeseq, + shapes = this.shapes, + shapeCount = shapeseq.length, + context = this._getContext(), + shapeid, shape, i; + context.clearRect(0, 0, this.pixelWidth, this.pixelHeight); + for (i = 0; i < shapeCount; i++) { + shapeid = shapeseq[i]; + shape = shapes[shapeid]; + this['_draw' + shape.type].apply(this, shape.args); + } + if (!this.interact) { + // not interactive so no need to keep the shapes array + this.shapes = {}; + this.shapeseq = []; + } + } + + }); + + VCanvas_vml = createClass(VCanvas_base, { + init: function (width, height, target) { + var groupel; + VCanvas_vml._super.init.call(this, width, height, target); + if (target[0]) { + target = target[0]; + } + $.data(target, '_jqs_vcanvas', this); + this.canvas = document.createElement('span'); + $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'}); + this._insert(this.canvas, target); + this._calculatePixelDims(width, height, this.canvas); + this.canvas.width = this.pixelWidth; + this.canvas.height = this.pixelHeight; + groupel = '<v:group coordorigin="0 0" coordsize="' + this.pixelWidth + ' ' + this.pixelHeight + '"' + + ' style="position:absolute;top:0;left:0;width:' + this.pixelWidth + 'px;height=' + this.pixelHeight + 'px;"></v:group>'; + this.canvas.insertAdjacentHTML('beforeEnd', groupel); + this.group = $(this.canvas).children()[0]; + this.rendered = false; + this.prerender = ''; + }, + + _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) { + var vpath = [], + initial, stroke, fill, closed, vel, plen, i; + for (i = 0, plen = path.length; i < plen; i++) { + vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]); + } + initial = vpath.splice(0, 1); + lineWidth = lineWidth === undefined ? 1 : lineWidth; + stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="' + lineWidth + 'px" strokeColor="' + lineColor + '" '; + fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" '; + closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : ''; + vel = '<v:shape coordorigin="0 0" coordsize="' + this.pixelWidth + ' ' + this.pixelHeight + '" ' + + ' id="jqsshape' + shapeid + '" ' + + stroke + + fill + + ' style="position:absolute;left:0px;top:0px;height:' + this.pixelHeight + 'px;width:' + this.pixelWidth + 'px;padding:0px;margin:0px;" ' + + ' path="m ' + initial + ' l ' + vpath.join(', ') + ' ' + closed + 'e">' + + ' </v:shape>'; + return vel; + }, + + _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) { + var stroke, fill, vel; + x -= radius; + y -= radius; + stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="' + lineWidth + 'px" strokeColor="' + lineColor + '" '; + fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" '; + vel = '<v:oval ' + + ' id="jqsshape' + shapeid + '" ' + + stroke + + fill + + ' style="position:absolute;top:' + y + 'px; left:' + x + 'px; width:' + (radius * 2) + 'px; height:' + (radius * 2) + 'px"></v:oval>'; + return vel; + + }, + + _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) { + var vpath, startx, starty, endx, endy, stroke, fill, vel; + if (startAngle === endAngle) { + return; // VML seems to have problem when start angle equals end angle. + } + if ((endAngle - startAngle) === (2 * Math.PI)) { + startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0 + endAngle = (2 * Math.PI); + } + + startx = x + Math.round(Math.cos(startAngle) * radius); + starty = y + Math.round(Math.sin(startAngle) * radius); + endx = x + Math.round(Math.cos(endAngle) * radius); + endy = y + Math.round(Math.sin(endAngle) * radius); + + // Prevent very small slices from being mistaken as a whole pie + if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) { + return; + } + + vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy]; + stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="1px" strokeColor="' + lineColor + '" '; + fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" '; + vel = '<v:shape coordorigin="0 0" coordsize="' + this.pixelWidth + ' ' + this.pixelHeight + '" ' + + ' id="jqsshape' + shapeid + '" ' + + stroke + + fill + + ' style="position:absolute;left:0px;top:0px;height:' + this.pixelHeight + 'px;width:' + this.pixelWidth + 'px;padding:0px;margin:0px;" ' + + ' path="m ' + x + ',' + y + ' wa ' + vpath.join(', ') + ' x e">' + + ' </v:shape>'; + return vel; + }, + + _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) { + return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor); + }, + + reset: function () { + this.group.innerHTML = ''; + }, + + appendShape: function (shape) { + var vel = this['_draw' + shape.type].apply(this, shape.args); + if (this.rendered) { + this.group.insertAdjacentHTML('beforeEnd', vel); + } else { + this.prerender += vel; + } + this.lastShapeId = shape.id; + return shape.id; + }, + + replaceWithShape: function (shapeid, shape) { + var existing = $('#jqsshape' + shapeid), + vel = this['_draw' + shape.type].apply(this, shape.args); + existing[0].outerHTML = vel; + }, + + replaceWithShapes: function (shapeids, shapes) { + // replace the first shapeid with all the new shapes then toast the remaining old shapes + var existing = $('#jqsshape' + shapeids[0]), + replace = '', + slen = shapes.length, + i; + for (i = 0; i < slen; i++) { + replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args); + } + existing[0].outerHTML = replace; + for (i = 1; i < shapeids.length; i++) { + $('#jqsshape' + shapeids[i]).remove(); + } + }, + + insertAfterShape: function (shapeid, shape) { + var existing = $('#jqsshape' + shapeid), + vel = this['_draw' + shape.type].apply(this, shape.args); + existing[0].insertAdjacentHTML('afterEnd', vel); + }, + + removeShapeId: function (shapeid) { + var existing = $('#jqsshape' + shapeid); + this.group.removeChild(existing[0]); + }, + + getShapeAt: function (el, x, y) { + var shapeid = el.id.substr(8); + return shapeid; + }, + + render: function () { + if (!this.rendered) { + // batch the intial render into a single repaint + this.group.innerHTML = this.prerender; + this.rendered = true; + } + } + }); + + +})(jQuery); diff --git a/wp-content/plugins/wp-piwik/js/sparkline/jquery.sparkline.min.js b/wp-content/plugins/wp-piwik/js/sparkline/jquery.sparkline.min.js new file mode 100644 index 0000000000000000000000000000000000000000..ea174b6d6e90213f3498649775cb32aafdc87416 --- /dev/null +++ b/wp-content/plugins/wp-piwik/js/sparkline/jquery.sparkline.min.js @@ -0,0 +1,5 @@ +/* jquery.sparkline 2.0 - http://omnipotent.net/jquery.sparkline/ +** Licensed under the New BSD License - see above site for details */ + +(function(a){"use strict";var b={},c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I=0;c=function(){return{common:{type:"line",lineColor:"#00f",fillColor:"#cdf",defaultPixelsPerValue:3,width:"auto",height:"auto",composite:!1,tagValuesAttribute:"values",tagOptionsPrefix:"spark",enableTagOptions:!1,enableHighlight:!0,highlightLighten:1.4,tooltipSkipNull:!0,tooltipPrefix:"",tooltipSuffix:"",disableHiddenCheck:!1,numberFormatter:!1,numberDigitGroupCount:3,numberDigitGroupSep:",",numberDecimalMark:".",disableTooltips:!1,disableInteraction:!1},line:{spotColor:"#f80",highlightSpotColor:"#5f5",highlightLineColor:"#f22",spotRadius:1.5,minSpotColor:"#f80",maxSpotColor:"#f80",lineWidth:1,normalRangeMin:undefined,normalRangeMax:undefined,normalRangeColor:"#ccc",drawNormalOnTop:!1,chartRangeMin:undefined,chartRangeMax:undefined,chartRangeMinX:undefined,chartRangeMaxX:undefined,tooltipFormat:new e('<span style="color: {{color}}">●</span> {{prefix}}{{y}}{{suffix}}')},bar:{barColor:"#3366cc",negBarColor:"#f44",stackedBarColor:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],zeroColor:undefined,nullColor:undefined,zeroAxis:!0,barWidth:4,barSpacing:1,chartRangeMax:undefined,chartRangeMin:undefined,chartRangeClip:!1,colorMap:undefined,tooltipFormat:new e('<span style="color: {{color}}">●</span> {{prefix}}{{value}}{{suffix}}')},tristate:{barWidth:4,barSpacing:1,posBarColor:"#6f6",negBarColor:"#f44",zeroBarColor:"#999",colorMap:{},tooltipFormat:new e('<span style="color: {{color}}">●</span> {{value:map}}'),tooltipValueLookups:{map:{"-1":"Loss",0:"Draw",1:"Win"}}},discrete:{lineHeight:"auto",thresholdColor:undefined,thresholdValue:0,chartRangeMax:undefined,chartRangeMin:undefined,chartRangeClip:!1,tooltipFormat:new e("{{prefix}}{{value}}{{suffix}}")},bullet:{targetColor:"#f33",targetWidth:3,performanceColor:"#33f",rangeColors:["#d3dafe","#a8b6ff","#7f94ff"],base:undefined,tooltipFormat:new e("{{fieldkey:fields}} - {{value}}"),tooltipValueLookups:{fields:{r:"Range",p:"Performance",t:"Target"}}},pie:{offset:0,sliceColors:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],borderWidth:0,borderColor:"#000",tooltipFormat:new e('<span style="color: {{color}}">●</span> {{value}} ({{percent.1}}%)')},box:{raw:!1,boxLineColor:"#000",boxFillColor:"#cdf",whiskerColor:"#000",outlierLineColor:"#333",outlierFillColor:"#fff",medianColor:"#f00",showOutliers:!0,outlierIQR:1.5,spotRadius:1.5,target:undefined,targetColor:"#4a2",chartRangeMax:undefined,chartRangeMin:undefined,tooltipFormat:new e("{{field:fields}}: {{value}}"),tooltipFormatFieldlistKey:"field",tooltipValueLookups:{fields:{lq:"Lower Quartile",med:"Median",uq:"Upper Quartile",lo:"Left Outlier",ro:"Right Outlier",lw:"Left Whisker",rw:"Right Whisker"}}}}},B='.jqstooltip { position: absolute;left: 0px;top: 0px;visibility: hidden;background: rgb(0, 0, 0) transparent;background-color: rgba(0,0,0,0.6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";color: white;font: 10px arial, san serif;text-align: left;white-space: nowrap;padding: 5px;border: 1px solid white;}.jqsfield { color: white;font: 10px arial, san serif;text-align: left;}',C=function(){n(B)},a(C),d=function(){var b,c;return b=function(){this.init.apply(this,arguments)},arguments.length>1?(arguments[0]?(b.prototype=a.extend(new arguments[0],arguments[arguments.length-1]),b._super=arguments[0].prototype):b.prototype=arguments[arguments.length-1],arguments.length>2&&(c=Array.prototype.slice.call(arguments,1,-1),c.unshift(b.prototype),a.extend.apply(a,c))):b.prototype=arguments[0],b.prototype.cls=b,b},a.SPFormatClass=e=d({fre:/\{\{([\w.]+?)(:(.+?))?\}\}/g,precre:/(\w+)\.(\d+)/,init:function(a,b){this.format=a,this.fclass=b},render:function(a,b,c){var d=this,e=a,f,g,h,i,j;return this.format.replace(this.fre,function(){var a;return g=arguments[1],h=arguments[3],f=d.precre.exec(g),f?(j=f[2],g=f[1]):j=!1,i=e[g],i===undefined?"":h&&b&&b[h]?(a=b[h],a.get?b[h].get(i)||i:b[h][i]||i):(k(i)&&(c.get("numberFormatter")?i=c.get("numberFormatter")(i):i=p(i,j,c.get("numberDigitGroupCount"),c.get("numberDigitGroupSep"),c.get("numberDecimalMark"))),i)})}}),a.spformat=function(a,b){return new e(a,b)},f=function(a,b,c){return a<b?b:a>c?c:a},g=function(a,b){var c;return b===2?(c=Math.floor(a.length/2),a.length%2?a[c]:(a[c]+a[c+1])/2):(c=Math.floor(a.length/4),a.length%2?(a[c*b]+a[c*b+1])/2:a[c*b])},h=function(a){var b;switch(a){case"undefined":a=undefined;break;case"null":a=null;break;case"true":a=!0;break;case"false":a=!1;break;default:b=parseFloat(a),a==b&&(a=b)}return a},i=function(a){var b,c=[];for(b=a.length;b--;)c[b]=h(a[b]);return c},j=function(a,b){var c,d,e=[];for(c=0,d=a.length;c<d;c++)a[c]!==b&&e.push(a[c]);return e},k=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},p=function(b,c,d,e,f){var g,h;b=(c===!1?parseFloat(b).toString():b.toFixed(c)).split(""),g=(g=a.inArray(".",b))<0?b.length:g,g<b.length&&(b[g]=f);for(h=g-d;h>0;h-=d)b.splice(h,0,e);return b.join("")},l=function(a,b,c){var d;for(d=b.length;d--;)if(b[d]!==a||!c&&a===null)return!1;return!0},m=function(a){var b=0,c;for(c=a.length;c--;)b+=typeof a[c]=="number"?a[c]:0;return b},o=function(b){return a.isArray(b)?b:[b]},n=function(a){var b;document.createStyleSheet?document.createStyleSheet().cssText=a:(b=document.createElement("style"),b.type="text/css",document.getElementsByTagName("head")[0].appendChild(b),b[typeof document.body.style.WebkitAppearance=="string"?"innerText":"innerHTML"]=a)},a.fn.simpledraw=function(b,c,d,e){var f,g;if(d&&(f=this.data("_jqs_vcanvas")))return f;b===undefined&&(b=a(this).innerWidth()),c===undefined&&(c=a(this).innerHeight());if(a.browser.hasCanvas)f=new F(b,c,this,e);else{if(!a.browser.msie)return!1;f=new G(b,c,this)}return g=a(this).data("_jqs_mhandler"),g&&g.registerCanvas(f),f},a.fn.cleardraw=function(){var a=this.data("_jqs_vcanvas");a&&a.reset()},a.RangeMapClass=q=d({init:function(a){var b,c,d=[];for(b in a)a.hasOwnProperty(b)&&typeof b=="string"&&b.indexOf(":")>-1&&(c=b.split(":"),c[0]=c[0].length===0?-Infinity:parseFloat(c[0]),c[1]=c[1].length===0?Infinity:parseFloat(c[1]),c[2]=a[b],d.push(c));this.map=a,this.rangelist=d||!1},get:function(a){var b=this.rangelist,c,d,e;if((e=this.map[a])!==undefined)return e;if(b)for(c=b.length;c--;){d=b[c];if(d[0]<=a&&d[1]>=a)return d[2]}return undefined}}),a.range_map=function(a){return new q(a)},r=d({init:function(b,c){var d=a(b);this.$el=d,this.options=c,this.currentPageX=0,this.currentPageY=0,this.el=b,this.splist=[],this.tooltip=null,this.over=!1,this.displayTooltips=!c.get("disableTooltips"),this.highlightEnabled=!c.get("disableHighlight")},registerSparkline:function(a){this.splist.push(a),this.over&&this.updateDisplay()},registerCanvas:function(b){var c=a(b.canvas);this.canvas=b,this.$canvas=c,c.mouseenter(a.proxy(this.mouseenter,this)),c.mouseleave(a.proxy(this.mouseleave,this)),c.click(a.proxy(this.mouseclick,this))},reset:function(a){this.splist=[],this.tooltip&&a&&(this.tooltip.remove(),this.tooltip=undefined)},mouseclick:function(b){var c=a.Event("sparklineClick");c.originalEvent=b,c.sparklines=this.splist,this.$el.trigger(c)},mouseenter:function(b){a(document.body).unbind("mousemove.jqs"),a(document.body).bind("mousemove.jqs",a.proxy(this.mousemove,this)),this.over=!0,this.currentPageX=b.pageX,this.currentPageY=b.pageY,this.currentEl=b.target,!this.tooltip&&this.displayTooltips&&(this.tooltip=new s(this.options),this.tooltip.updatePosition(b.pageX,b.pageY)),this.updateDisplay()},mouseleave:function(){a(document.body).unbind("mousemove.jqs");var b=this.splist,c=b.length,d=!1,e,f;this.over=!1,this.currentEl=null,this.tooltip&&(this.tooltip.remove(),this.tooltip=null);for(f=0;f<c;f++)e=b[f],e.clearRegionHighlight()&&(d=!0);d&&this.canvas.render()},mousemove:function(a){this.currentPageX=a.pageX,this.currentPageY=a.pageY,this.currentEl=a.target,this.tooltip&&this.tooltip.updatePosition(a.pageX,a.pageY),this.updateDisplay()},updateDisplay:function(){var b=this.splist,c=b.length,d=!1,e=this.$canvas.offset(),f=this.currentPageX-e.left,g=this.currentPageY-e.top,h,i,j,k,l;if(!this.over)return;for(j=0;j<c;j++)i=b[j],k=i.setRegionHighlight(this.currentEl,f,g),k&&(d=!0);if(d){l=a.Event("sparklineRegionChange"),l.sparklines=this.splist,this.$el.trigger(l);if(this.tooltip){h="";for(j=0;j<c;j++)i=b[j],h+=i.getCurrentRegionTooltip();this.tooltip.setContent(h)}this.disableHighlight||this.canvas.render()}k===null&&this.mouseleave()}}),s=d({sizeStyle:"position: static !important;display: block !important;visibility: hidden !important;float: left !important;",init:function(b){var c=b.get("tooltipClassname","jqstooltip"),d=this.sizeStyle,e;this.container=b.get("tooltipContainer")||document.body,this.tooltipOffsetX=b.get("tooltipOffsetX",10),this.tooltipOffsetY=b.get("tooltipOffsetY",12),a("#jqssizetip").remove(),a("#jqstooltip").remove(),this.sizetip=a("<div/>",{id:"jqssizetip",style:d,"class":c}),this.tooltip=a("<div/>",{id:"jqstooltip","class":c}).appendTo(this.container),e=this.tooltip.offset(),this.offsetLeft=e.left,this.offsetTop=e.top,this.hidden=!0,a(window).unbind("resize.jqs scroll.jqs"),a(window).bind("resize.jqs scroll.jqs",a.proxy(this.updateWindowDims,this)),this.updateWindowDims()},updateWindowDims:function(){this.scrollTop=a(window).scrollTop(),this.scrollLeft=a(window).scrollLeft(),this.scrollRight=this.scrollLeft+a(window).width(),this.updatePosition()},getSize:function(a){this.sizetip.html(a).appendTo(this.container),this.width=this.sizetip.width()+1,this.height=this.sizetip.height(),this.sizetip.remove()},setContent:function(a){if(!a){this.tooltip.css("visibility","hidden"),this.hidden=!0;return}this.getSize(a),this.tooltip.html(a).css({width:this.width,height:this.height,visibility:"visible"}),this.hidden&&(this.hidden=!1,this.updatePosition())},updatePosition:function(a,b){if(a===undefined){if(this.mousex===undefined)return;a=this.mousex-this.offsetLeft,b=this.mousey-this.offsetTop}else this.mousex=a-=this.offsetLeft,this.mousey=b-=this.offsetTop;if(!this.height||!this.width||this.hidden)return;b-=this.height+this.tooltipOffsetY,a+=this.tooltipOffsetX,b<this.scrollTop&&(b=this.scrollTop),a<this.scrollLeft?a=this.scrollLeft:a+this.width>this.scrollRight&&(a=this.scrollRight-this.width),this.tooltip.css({left:a,top:b})},remove:function(){this.tooltip.remove(),this.sizetip.remove(),this.sizetip=this.tooltip=undefined,a(window).unbind("resize.jqs scroll.jqs")}}),H=[],a.fn.sparkline=function(b,c){return this.each(function(){var d=new a.fn.sparkline.options(this,c),e=a(this),f,g;f=function(){var c,f,g,h,i,j,k;if(b==="html"||b===undefined){k=this.getAttribute(d.get("tagValuesAttribute"));if(k===undefined||k===null)k=e.html();c=k.replace(/(^\s*<!--)|(-->\s*$)|\s+/g,"").split(",")}else c=b;f=d.get("width")==="auto"?c.length*d.get("defaultPixelsPerValue"):d.get("width");if(d.get("height")==="auto"){if(!d.get("composite")||!a.data(this,"_jqs_vcanvas"))h=document.createElement("span"),h.innerHTML="a",e.html(h),g=a(h).innerHeight()||a(h).height(),a(h).remove(),h=null}else g=d.get("height");d.get("disableInteraction")?i=!1:(i=a.data(this,"_jqs_mhandler"),i?d.get("composite")||i.reset():(i=new r(this,d),a.data(this,"_jqs_mhandler",i)));if(d.get("composite")&&!a.data(this,"_jqs_vcanvas")){a.data(this,"_jqs_errnotify")||(alert("Attempted to attach a composite sparkline to an element with no existing sparkline"),a.data(this,"_jqs_errnotify",!0));return}j=new(a.fn.sparkline[d.get("type")])(this,c,d,f,g),j.render(),i&&i.registerSparkline(j)};if(a(this).html()&&!d.get("disableHiddenCheck")&&a(this).is(":hidden")||a.fn.jquery<"1.3.0"&&a(this).parents().is(":hidden")||!a(this).parents("body").length){if(!d.get("composite")&&a.data(this,"_jqs_pending"))for(g=H.length;g;g--)H[g-1][0]==this&&H.splice(g-1,1);H.push([this,f]),a.data(this,"_jqs_pending",!0)}else f.call(this)})},a.fn.sparkline.defaults=c(),a.sparkline_display_visible=function(){var b,c,d,e=[];for(c=0,d=H.length;c<d;c++)b=H[c][0],a(b).is(":visible")&&!a(b).parents().is(":hidden")?(H[c][1].call(b),a.data(H[c][0],"_jqs_pending",!1),e.push(c)):!a(b).closest("html").length&&!a.data(b,"_jqs_pending")&&(a.data(H[c][0],"_jqs_pending",!1),e.push(c));for(c=e.length;c;c--)H.splice(e[c-1],1)},a.fn.sparkline.options=d({init:function(c,d){var e,f,g,h;this.userOptions=d=d||{},this.tag=c,this.tagValCache={},f=a.fn.sparkline.defaults,g=f.common,this.tagOptionsPrefix=d.enableTagOptions&&(d.tagOptionsPrefix||g.tagOptionsPrefix),h=this.getTagSetting("type"),h===b?e=f[d.type||g.type]:e=f[h],this.mergedOptions=a.extend({},g,e,d)},getTagSetting:function(a){var c=this.tagOptionsPrefix,d,e,f,g;if(c===!1||c===undefined)return b;if(this.tagValCache.hasOwnProperty(a))d=this.tagValCache.key;else{d=this.tag.getAttribute(c+a);if(d===undefined||d===null)d=b;else if(d.substr(0,1)==="["){d=d.substr(1,d.length-2).split(",");for(e=d.length;e--;)d[e]=h(d[e].replace(/(^\s*)|(\s*$)/g,""))}else if(d.substr(0,1)==="{"){f=d.substr(1,d.length-2).split(","),d={};for(e=f.length;e--;)g=f[e].split(":",2),d[g[0].replace(/(^\s*)|(\s*$)/g,"")]=h(g[1].replace(/(^\s*)|(\s*$)/g,""))}else d=h(d);this.tagValCache.key=d}return d},get:function(a,c){var d=this.getTagSetting(a),e;return d!==b?d:(e=this.mergedOptions[a])===undefined?c:e}}),a.fn.sparkline._base=d({disabled:!1,init:function(b,c,d,e,f){this.el=b,this.$el=a(b),this.values=c,this.options=d,this.width=e,this.height=f,this.currentRegion=undefined},initTarget:function(){var a=!this.options.get("disableInteraction");(this.target=this.$el.simpledraw(this.width,this.height,this.options.get("composite"),a))?(this.canvasWidth=this.target.pixelWidth,this.canvasHeight=this.target.pixelHeight):this.disabled=!0},render:function(){return this.disabled?(this.el.innerHTML="",!1):!0},getRegion:function(a,b){},setRegionHighlight:function(a,b,c){var d=this.currentRegion,e=!this.options.get("disableHighlight"),f;return b>this.canvasWidth||c>this.canvasHeight||b<0||c<0?null:(f=this.getRegion(a,b,c),d!==f?(d!==undefined&&e&&this.removeHighlight(),this.currentRegion=f,f!==undefined&&e&&this.renderHighlight(),!0):!1)},clearRegionHighlight:function(){return this.currentRegion!==undefined?(this.removeHighlight(),this.currentRegion=undefined,!0):!1},renderHighlight:function(){this.changeHighlight(!0)},removeHighlight:function(){this.changeHighlight(!1)},changeHighlight:function(a){},getCurrentRegionTooltip:function(){var b=this.options,c="",d=[],f,g,h,i,j,k,l,m,n,o,p,q,r,s;if(this.currentRegion===undefined)return"";f=this.getCurrentRegionFields(),p=b.get("tooltipFormatter");if(p)return p(this,b,f);b.get("tooltipChartTitle")&&(c+='<div class="jqs jqstitle">'+b.get("tooltipChartTitle")+"</div>\n"),g=this.options.get("tooltipFormat");if(!g)return"";a.isArray(g)||(g=[g]),a.isArray(f)||(f=[f]),l=this.options.get("tooltipFormatFieldlist"),m=this.options.get("tooltipFormatFieldlistKey");if(l&&m){n=[];for(k=f.length;k--;)o=f[k][m],(s=a.inArray(o,l))!=-1&&(n[s]=f[k]);f=n}h=g.length,r=f.length;for(k=0;k<h;k++){q=g[k],typeof q=="string"&&(q=new e(q)),i=q.fclass||"jqsfield";for(s=0;s<r;s++)if(!f[s].isNull||!b.get("tooltipSkipNull"))a.extend(f[s],{prefix:b.get("tooltipPrefix"),suffix:b.get("tooltipSuffix")}),j=q.render(f[s],b.get("tooltipValueLookups"),b),d.push('<div class="'+i+'">'+j+"</div>")}return d.length?c+d.join("\n"):""},getCurrentRegionFields:function(){},calcHighlightColor:function(a,b){var c=b.get("highlightColor"),d=b.get("highlightLighten"),e,g,h,i;if(c)return c;if(d){e=/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(a)||/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(a);if(e){h=[],g=a.length===4?16:1;for(i=0;i<3;i++)h[i]=f(Math.round(parseInt(e[i+1],16)*g*d),0,255);return"rgb("+h.join(",")+")"}}return a}}),t={changeHighlight:function(b){var c=this.currentRegion,d=this.target,e=this.regionShapes[c],f;e&&(f=this.renderRegion(c,b),a.isArray(f)||a.isArray(e)?(d.replaceWithShapes(e,f),this.regionShapes[c]=a.map(f,function(a){return a.id})):(d.replaceWithShape(e,f),this.regionShapes[c]=f.id))},render:function(){var b=this.values,c=this.target,d=this.regionShapes,e,f,g,h;if(!this.cls._super.render.call(this))return;for(g=b.length;g--;){e=this.renderRegion(g);if(e)if(a.isArray(e)){f=[];for(h=e.length;h--;)e[h].append(),f.push(e[h].id);d[g]=f}else e.append(),d[g]=e.id;else d[g]=null}c.render()}},a.fn.sparkline.line=u=d(a.fn.sparkline._base,{type:"line",init:function(a,b,c,d,e){u._super.init.call(this,a,b,c,d,e),this.vertices=[],this.regionMap=[],this.xvalues=[],this.yvalues=[],this.yminmax=[],this.hightlightSpotId=null,this.lastShapeId=null,this.initTarget()},getRegion:function(a,b,c){var d,e=this.regionMap;for(d=e.length;d--;)if(e[d]!==null&&b>=e[d][0]&&b<=e[d][1])return e[d][2];return undefined},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.yvalues[a]===null,x:this.xvalues[a],y:this.yvalues[a],color:this.options.get("lineColor"),fillColor:this.options.get("fillColor"),offset:a}},renderHighlight:function(){var a=this.currentRegion,b=this.target,c=this.vertices[a],d=this.options,e=d.get("spotRadius"),f=d.get("highlightSpotColor"),g=d.get("highlightLineColor"),h,i;if(!c)return;e&&f&&(h=b.drawCircle(c[0],c[1],e,undefined,f),this.highlightSpotId=h.id,b.insertAfterShape(this.lastShapeId,h)),g&&(i=b.drawLine(c[0],this.canvasTop,c[0],this.canvasTop+this.canvasHeight,g),this.highlightLineId=i.id,b.insertAfterShape(this.lastShapeId,i))},removeHighlight:function(){var a=this.target;this.highlightSpotId&&(a.removeShapeId(this.highlightSpotId),this.highlightSpotId=null),this.highlightLineId&&(a.removeShapeId(this.highlightLineId),this.highlightLineId=null)},scanValues:function(){var a=this.values,b=a.length,c=this.xvalues,d=this.yvalues,e=this.yminmax,f,g,h,i,j;for(f=0;f<b;f++)g=a[f],h=typeof a[f]=="string",i=typeof a[f]=="object"&&a[f]instanceof Array,j=h&&a[f].split(":"),h&&j.length===2?(c.push(Number(j[0])),d.push(Number(j[1])),e.push(Number(j[1]))):i?(c.push(g[0]),d.push(g[1]),e.push(g[1])):(c.push(f),a[f]===null||a[f]==="null"?d.push(null):(d.push(Number(g)),e.push(Number(g))));this.options.get("xvalues")&&(c=this.options.get("xvalues")),this.maxy=this.maxyorg=Math.max.apply(Math,e),this.miny=this.minyorg=Math.min.apply(Math,e),this.maxx=Math.max.apply(Math,c),this.minx=Math.min.apply(Math,c),this.xvalues=c,this.yvalues=d,this.yminmax=e},processRangeOptions:function(){var a=this.options,b=a.get("normalRangeMin"),c=a.get("normalRangeMax");b!==undefined&&(b<this.miny&&(this.miny=b),c>this.maxy&&(this.maxy=c)),a.get("chartRangeMin")!==undefined&&(a.get("chartRangeClip")||a.get("chartRangeMin")<this.miny)&&(this.miny=a.get("chartRangeMin")),a.get("chartRangeMax")!==undefined&&(a.get("chartRangeClip")||a.get("chartRangeMax")>this.maxy)&&(this.maxy=a.get("chartRangeMax")),a.get("chartRangeMinX")!==undefined&&(a.get("chartRangeClipX")||a.get("chartRangeMinX")<this.minx)&&(this.minx=a.get("chartRangeMinX")),a.get("chartRangeMaxX")!==undefined&&(a.get("chartRangeClipX")||a.get("chartRangeMaxX")>this.maxx)&&(this.maxx=a.get("chartRangeMaxX"))},drawNormalRange:function(a,b,c,d,e){var f=this.options.get("normalRangeMin"),g=this.options.get("normalRangeMax"),h=b+Math.round(c-c*((g-this.miny)/e)),i=Math.round(c*(g-f)/e);this.target.drawRect(a,h,d,i,undefined,this.options.get("normalRangeColor")).append()},render:function(){var b=this.options,c=this.target,d=this.canvasWidth,e=this.canvasHeight,f=this.vertices,g=b.get("spotRadius"),h=this.regionMap,i,j,k,l,m,n,o,p,r,s,t,v,w,x,y,z,A,B,C,D,E,F,G,H;if(!u._super.render.call(this))return;this.scanValues(),this.processRangeOptions(),F=this.xvalues,G=this.yvalues;if(!this.yminmax.length||this.yvalues.length<2)return;l=m=0,i=this.maxx-this.minx===0?1:this.maxx-this.minx,j=this.maxy-this.miny===0?1:this.maxy-this.miny,k=this.yvalues.length-1,g&&(d<g*4||e<g*4)&&(g=0);if(g){if(b.get("minSpotColor")||b.get("spotColor")&&G[k]===this.miny)e-=Math.ceil(g);if(b.get("maxSpotColor")||b.get("spotColor")&&G[k]===this.maxy)e-=Math.ceil(g),l+=Math.ceil(g);(b.get("minSpotColor")||b.get("maxSpotColor"))&&(G[0]===this.miny||G[0]===this.maxy)&&(m+=Math.ceil(g),d-=Math.ceil(g));if(b.get("spotColor")||b.get("minSpotColor")||b.get("maxSpotColor")&&(G[k]===this.miny||G[k]===this.maxy))d-=Math.ceil(g)}e--,b.get("normalRangeMin")&&!b.get("drawNormalOnTop")&&this.drawNormalRange(m,l,e,d,j),o=[],p=[o],x=y=null,z=G.length;for(H=0;H<z;H++)r=F[H],t=F[H+1],s=G[H],v=m+Math.round((r-this.minx)*(d/i)),w=H<z-1?m+Math.round((t-this.minx)*(d/i)):d,y=v+(w-v)/2,h[H]=[x||0,y,H],x=y,s===null?H&&G[H-1]!==null&&(o=[],p.push(o),f.push(null)):(s<this.miny&&(s=this.miny),s>this.maxy&&(s=this.maxy),o.length||o.push([v,l+e]),n=[v,l+Math.round(e-e*((s-this.miny)/j))],o.push(n),f.push(n));A=[],B=[],C=p.length;for(H=0;H<C;H++)o=p[H],o.length&&(b.get("fillColor")&&(o.push([o[o.length-1][0],l+e]),B.push(o.slice(0)),o.pop()),o.length>2&&(o[0]=[o[0][0],o[1][1]]),A.push(o));C=B.length;for(H=0;H<C;H++)c.drawShape(B[H],b.get("fillColor"),b.get("fillColor")).append();b.get("normalRangeMin")&&b.get("drawNormalOnTop")&&this.drawNormalRange(m,l,e,d,j),C=A.length;for(H=0;H<C;H++)c.drawShape(A[H],b.get("lineColor"),undefined,b.get("lineWidth")).append();if(g&&b.get("valueSpots")){D=b.get("valueSpots"),D.get===undefined&&(D=new q(D));for(H=0;H<z;H++)E=D.get(G[H]),E&&c.drawCircle(m+Math.round((F[H]-this.minx)*(d/i)),l+Math.round(e-e*((G[H]-this.miny)/j)),g,undefined,E).append()}g&&b.get("spotColor")&&c.drawCircle(m+Math.round((F[F.length-1]-this.minx)*(d/i)),l+Math.round(e-e*((G[k]-this.miny)/j)),g,undefined,b.get("spotColor")).append(),this.maxy!==this.minyorg&&(g&&b.get("minSpotColor")&&(r=F[a.inArray(this.minyorg,G)],c.drawCircle(m+Math.round((r-this.minx)*(d/i)),l+Math.round(e-e*((this.minyorg-this.miny)/j)),g,undefined,b.get("minSpotColor")).append()),g&&b.get("maxSpotColor")&&(r=F[a.inArray(this.maxyorg,G)],c.drawCircle(m+Math.round((r-this.minx)*(d/i)),l+Math.round(e-e*((this.maxyorg-this.miny)/j)),g,undefined,b.get("maxSpotColor")).append())),this.lastShapeId=c.getLastShapeId(),this.canvasTop=l,c.render()}}),a.fn.sparkline.bar=v=d(a.fn.sparkline._base,t,{type:"bar",init:function(b,c,d,e,g){var k=parseInt(d.get("barWidth"),10),l=parseInt(d.get("barSpacing"),10),m=d.get("chartRangeMin"),n=d.get("chartRangeMax"),o=d.get("chartRangeClip"),p=Infinity,r=-Infinity,s,t,u,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P;v._super.init.call(this,b,c,d,e,g);for(y=0,z=c.length;y<z;y++){M=c[y],s=typeof M=="string"&&M.indexOf(":")>-1;if(s||a.isArray(M))H=!0,s&&(M=c[y]=i(M.split(":"))),M=j(M,null),t=Math.min.apply(Math,M),u=Math.max.apply(Math,M),t<p&&(p=t),u>r&&(r=u)}this.stacked=H,this.regionShapes={},this.barWidth=k,this.barSpacing=l,this.totalBarWidth=k+l,this.width=e=c.length*k+(c.length-1)*l,this.initTarget(),o&&(F=m===undefined?-Infinity:m,G=n===undefined?Infinity:n),x=[],w=H?[]:x;var Q=[],R=[];for(y=0,z=c.length;y<z;y++)if(H){I=c[y],c[y]=L=[],Q[y]=0,w[y]=R[y]=0;for(J=0,K=I.length;J<K;J++)M=L[J]=o?f(I[J],F,G):I[J],M!==null&&(M>0&&(Q[y]+=M),p<0&&r>0?M<0?R[y]+=Math.abs(M):w[y]+=M:w[y]+=Math.abs(M-(M<0?r:p)),x.push(M))}else M=o?f(c[y],F,G):c[y],M=c[y]=h(M),M!==null&&x.push(M);this.max=E=Math.max.apply(Math,x),this.min=D=Math.min.apply(Math,x),this.stackMax=r=H?Math.max.apply(Math,Q):E,this.stackMin=p=H?Math.min.apply(Math,x):D,d.get("chartRangeMin")!==undefined&&(d.get("chartRangeClip")||d.get("chartRangeMin")<D)&&(D=d.get("chartRangeMin")),d.get("chartRangeMax")!==undefined&&(d.get("chartRangeClip")||d.get("chartRangeMax")>E)&&(E=d.get("chartRangeMax")),this.zeroAxis=B=d.get("zeroAxis",!0),D<=0&&E>=0&&B?C=0:B==0?C=D:D>0?C=D:C=E,this.xaxisOffset=C,A=H?Math.max.apply(Math,w)+Math.max.apply(Math,R):E-D,this.canvasHeightEf=B&&D<0?this.canvasHeight-2:this.canvasHeight-1,D<C?(O=H&&E>=0?r:E,N=(O-C)/A*this.canvasHeight,N!==Math.ceil(N)&&(this.canvasHeightEf-=2,N=Math.ceil(N))):N=this.canvasHeight,this.yoffset=N,a.isArray(d.get("colorMap"))?(this.colorMapByIndex=d.get("colorMap"),this.colorMapByValue=null):(this.colorMapByIndex=null,this.colorMapByValue=d.get("colorMap"),this.colorMapByValue&&this.colorMapByValue.get===undefined&&(this.colorMapByValue=new q(this.colorMapByValue))),this.range=A},getRegion:function(a,b,c){var d=Math.floor(b/this.totalBarWidth);return d<0||d>=this.values.length?undefined:d},getCurrentRegionFields:function(){var a=this.currentRegion,b=o(this.values[a]),c=[],d,e;for(e=b.length;e--;)d=b[e],c.push({isNull:d===null,value:d,color:this.calcColor(e,d,a),offset:a});return c},calcColor:function(b,c,d){var e=this.colorMapByIndex,f=this.colorMapByValue,g=this.options,h,i;return this.stacked?h=g.get("stackedBarColor"):h=c<0?g.get("negBarColor"):g.get("barColor"),c===0&&g.get("zeroColor")!==undefined&&(h=g.get("zeroColor")),f&&(i=f.get(c))?h=i:e&&e.length>d&&(h=e[d]),a.isArray(h)?h[b%h.length]:h},renderRegion:function(b,c){var d=this.values[b],e=this.options,f=this.xaxisOffset,g=[],h=this.range,i=this.stacked,j=this.target,k=b*this.totalBarWidth,m=this.canvasHeightEf,n=this.yoffset,o,p,q,r,s,t,u,v,w,x;d=a.isArray(d)?d:[d],u=d.length,v=d[0],r=l(null,d),x=l(f,d,!0);if(r)return e.get("nullColor")?(q=c?e.get("nullColor"):this.calcHighlightColor(e.get("nullColor"),e),o=n>0?n-1:n,j.drawRect(k,o,this.barWidth-1,0,q,q)):undefined;s=n;for(t=0;t<u;t++){v=d[t];if(i&&v===f){if(!x||w)continue;w=!0}h>0?p=Math.floor(m*(Math.abs(v-f)/h))+1:p=1,v<f||v===f&&n===0?(o=s,s+=p):(o=n-p,n-=p),q=this.calcColor(t,v,b),c&&(q=this.calcHighlightColor(q,e)),g.push(j.drawRect(k,o,this.barWidth-1,p-1,q,q))}return g.length===1?g[0]:g}}),a.fn.sparkline.tristate=w=d(a.fn.sparkline._base,t,{type:"tristate",init:function(b,c,d,e,f){var g=parseInt(d.get("barWidth"),10),h=parseInt(d.get("barSpacing"),10);w._super.init.call(this,b,c,d,e,f),this.regionShapes={},this.barWidth=g,this.barSpacing=h,this.totalBarWidth=g+h,this.values=a.map(c,Number),this.width=e=c.length*g+(c.length-1)*h,a.isArray(d.get("colorMap"))?(this.colorMapByIndex=d.get("colorMap"),this.colorMapByValue=null):(this.colorMapByIndex=null,this.colorMapByValue=d.get("colorMap"),this.colorMapByValue&&this.colorMapByValue.get===undefined&&(this.colorMapByValue=new q(this.colorMapByValue))),this.initTarget()},getRegion:function(a,b,c){return Math.floor(b/this.totalBarWidth)},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.values[a]===undefined,value:this.values[a],color:this.calcColor(this.values[a],a),offset:a}},calcColor:function(a,b){var c=this.values,d=this.options,e=this.colorMapByIndex,f=this.colorMapByValue,g,h;return f&&(h=f.get(a))?g=h:e&&e.length>b?g=e[b]:c[b]<0?g=d.get("negBarColor"):c[b]>0?g=d.get("posBarColor"):g=d.get("zeroBarColor"),g},renderRegion:function(a,b){var c=this.values,d=this.options,e=this.target,f,g,h,i,j,k;f=e.pixelHeight,h=Math.round(f/2),i=a*this.totalBarWidth,c[a]<0?(j=h,g=h-1):c[a]>0?(j=0,g=h-1):(j=h-1,g=2),k=this.calcColor(c[a],a);if(k===null)return;return b&&(k=this.calcHighlightColor(k,d)),e.drawRect(i,j,this.barWidth-1,g-1,k,k)}}),a.fn.sparkline.discrete=x=d(a.fn.sparkline._base,t,{type:"discrete",init:function(b,c,d,e,f){x._super.init.call(this,b,c,d,e,f),this.regionShapes={},this.values=c=a.map(c,Number),this.min=Math.min.apply(Math,c),this.max=Math.max.apply(Math,c),this.range=this.max-this.min,this.width=e=d.get("width")==="auto"?c.length*2:this.width,this.interval=Math.floor(e/c.length),this.itemWidth=e/c.length,d.get("chartRangeMin")!==undefined&&(d.get("chartRangeClip")||d.get("chartRangeMin")<this.min)&&(this.min=d.get("chartRangeMin")),d.get("chartRangeMax")!==undefined&&(d.get("chartRangeClip")||d.get("chartRangeMax")>this.max)&&(this.max=d.get("chartRangeMax")),this.initTarget(),this.target&&(this.lineHeight=d.get("lineHeight")==="auto"?Math.round(this.canvasHeight*.3):d.get("lineHeight"))},getRegion:function(a,b,c){return Math.floor(b/this.itemWidth)},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.values[a]===undefined,value:this.values[a],offset:a}},renderRegion:function(a,b){var c=this.values,d=this.options,e=this.min,g=this.max,h=this.range,i=this.interval,j=this.target,k=this.canvasHeight,l=this.lineHeight,m=k-l,n,o,p,q;return o=f(c[a],e,g),q=a*i,n=Math.round(m-m*((o-e)/h)),p=d.get("thresholdColor")&&o<d.get("thresholdValue")?d.get("thresholdColor"):d.get("lineColor"),b&&(p=this.calcHighlightColor(p,d)),j.drawLine(q,n,q,n+l,p)}}),a.fn.sparkline.bullet=y=d(a.fn.sparkline._base,{type:"bullet",init:function(b,c,d,e,f){var g,h;y._super.init.call(this,b,c,d,e,f),c=a.map(c,Number),g=Math.min.apply(Math,c),h=Math.max.apply(Math,c),d.get("base")===undefined?g=g<0?g:0:g=d.get("base"),this.min=g,this.max=h,this.range=h-g,this.shapes={},this.valueShapes={},this.regiondata={},this.width=e=d.get("width")==="auto"?"4.0em":e,this.target=this.$el.simpledraw(e,f,d.get("composite")),c.length||(this.disabled=!0),this.initTarget()},getRegion:function(a,b,c){var d=this.target.getShapeAt(a,b,c);return d!==undefined&&this.shapes[d]!==undefined?this.shapes[d]:undefined},getCurrentRegionFields:function(){var a=this.currentRegion;return{fieldkey:a.substr(0,1),value:this.values[a.substr(1)],region:a}},changeHighlight:function(a){var b=this.currentRegion,c=this.valueShapes[b],d;delete this.shapes[c];switch(b.substr(0,1)){case"r":d=this.renderRange(b.substr(1),a);break;case"p":d=this.renderPerformance(a);break;case"t":d=this.renderTarget(a)}this.valueShapes[b]=d.id,this.shapes[d.id]=b,this.target.replaceWithShape(c,d)},renderRange:function(a,b){var c=this.values[a],d=Math.round(this.canvasWidth*((c-this.min)/this.range)),e=this.options.get("rangeColors")[a-2];return b&&(e=this.calcHighlightColor(e,this.options)),this.target.drawRect(0,0,d-1,this.canvasHeight-1,e,e)},renderPerformance:function(a){var b=this.values[1],c=Math.round(this.canvasWidth*((b-this.min)/this.range)),d=this.options.get("performanceColor");return a&&(d=this.calcHighlightColor(d,this.options)),this.target.drawRect(0,Math.round(this.canvasHeight*.3),c-1,Math.round(this.canvasHeight*.4)-1,d,d)},renderTarget:function(a){var b=this.values[0],c=Math.round(this.canvasWidth*((b-this.min)/this.range)-this.options.get("targetWidth")/2),d=Math.round(this.canvasHeight*.1),e=this.canvasHeight-d*2,f=this.options.get("targetColor");return a&&(f=this.calcHighlightColor(f,this.options)),this.target.drawRect(c,d,this.options.get("targetWidth")-1,e-1,f,f)},render:function(){var a=this.values.length,b=this.target,c,d;if(!y._super.render.call(this))return;for(c=2;c<a;c++)d=this.renderRange(c).append(),this.shapes[d.id]="r"+c,this.valueShapes["r"+c]=d.id;d=this.renderPerformance().append(),this.shapes[d.id]="p1",this.valueShapes.p1=d.id,d=this.renderTarget().append(),this.shapes[d.id]="t0",this.valueShapes.t0=d.id,b.render()}}),a.fn.sparkline.pie=z=d(a.fn.sparkline._base,{type:"pie",init:function(b,c,d,e,f){var g=0,h;z._super.init.call(this,b,c,d,e,f),this.shapes={},this.valueShapes={},this.values=c=a.map(c,Number),d.get("width")==="auto"&&(this.width=this.height);if(c.length>0)for(h=c.length;h--;)g+=c[h];this.total=g,this.initTarget(),this.radius=Math.floor(Math.min(this.canvasWidth,this.canvasHeight)/2)},getRegion:function(a,b,c){var d=this.target.getShapeAt(a,b,c);return d!==undefined&&this.shapes[d]!==undefined?this.shapes[d]:undefined},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.values[a]===undefined,value:this.values[a],percent:this.values[a]/this.total*100,color:this.options.get("sliceColors")[a%this.options.get("sliceColors").length],offset:a}},changeHighlight:function(a){var b=this.currentRegion,c=this.renderSlice(b,a),d=this.valueShapes[b];delete this.shapes[d],this.target.replaceWithShape(d,c),this.valueShapes[b]=c.id,this.shapes[c.id]=b},renderSlice:function(a,b){var c=this.target,d=this.options,e=this.radius,f=d.get("borderWidth"),g=d.get("offset"),h=2*Math.PI,i=this.values,j=this.total,k=g?2*Math.PI*(g/360):0,l,m,n,o,p;o=i.length;for(n=0;n<o;n++){l=k,m=k,j>0&&(m=k+h*(i[n]/j));if(a===n)return p=d.get("sliceColors")[n%d.get("sliceColors").length],b&&(p=this.calcHighlightColor(p,d)),c.drawPieSlice(e,e,e-f,l,m,undefined,p);k=m}},render:function(){var a=this.target,b=this.values,c=this.options,d=this.radius,e=c.get("borderWidth"),f,g;if(!z._super.render.call(this))return;e&&a.drawCircle(d,d,Math.floor(d-e/2),c.get("borderColor"),undefined,e).append();for(g=b.length;g--;)f=this.renderSlice(g).append(),this.valueShapes[g]=f.id,this.shapes[f.id]=g;a.render()}}),a.fn.sparkline.box=A=d(a.fn.sparkline._base,{type:"box",init:function(b,c,d,e,f){A._super.init.call(this,b,c,d,e,f),this.values=a.map(c,Number),this.width=d.get("width")==="auto"?"4.0em":e,this.initTarget(),this.values.length||(this +.disabled=1)},getRegion:function(){return 1},getCurrentRegionFields:function(){var a=[{field:"lq",value:this.quartiles[0]},{field:"med",value:this.quartiles[1]},{field:"uq",value:this.quartiles[2]},{field:"lo",value:this.loutlier},{field:"ro",value:this.routlier}];return this.lwhisker!==undefined&&a.push({field:"lw",value:this.lwhisker}),this.rwhisker!==undefined&&a.push({field:"rw",value:this.rwhisker}),a},render:function(){var a=this.target,b=this.values,c=b.length,d=this.options,e=this.canvasWidth,f=this.canvasHeight,h=d.get("chartRangeMin")===undefined?Math.min.apply(Math,b):d.get("chartRangeMin"),i=d.get("chartRangeMax")===undefined?Math.max.apply(Math,b):d.get("chartRangeMax"),j=0,k,l,m,n,o,p,q,r,s,t,u;if(!A._super.render.call(this))return;if(d.get("raw"))d.get("showOutliers")&&b.length>5?(l=b[0],k=b[1],n=b[2],o=b[3],p=b[4],q=b[5],r=b[6]):(k=b[0],n=b[1],o=b[2],p=b[3],q=b[4]);else{b.sort(function(a,b){return a-b}),n=g(b,1),o=g(b,2),p=g(b,3),m=p-n;if(d.get("showOutliers")){k=q=undefined;for(s=0;s<c;s++)k===undefined&&b[s]>n-m*d.get("outlierIQR")&&(k=b[s]),b[s]<p+m*d.get("outlierIQR")&&(q=b[s]);l=b[0],r=b[c-1]}else k=b[0],q=b[c-1]}this.quartiles=[n,o,p],this.lwhisker=k,this.rwhisker=q,this.loutlier=l,this.routlier=r,u=e/(i-h+1),d.get("showOutliers")&&(j=Math.ceil(d.get("spotRadius")),e-=2*Math.ceil(d.get("spotRadius")),u=e/(i-h+1),l<k&&a.drawCircle((l-h)*u+j,f/2,d.get("spotRadius"),d.get("outlierLineColor"),d.get("outlierFillColor")).append(),r>q&&a.drawCircle((r-h)*u+j,f/2,d.get("spotRadius"),d.get("outlierLineColor"),d.get("outlierFillColor")).append()),a.drawRect(Math.round((n-h)*u+j),Math.round(f*.1),Math.round((p-n)*u),Math.round(f*.8),d.get("boxLineColor"),d.get("boxFillColor")).append(),a.drawLine(Math.round((k-h)*u+j),Math.round(f/2),Math.round((n-h)*u+j),Math.round(f/2),d.get("lineColor")).append(),a.drawLine(Math.round((k-h)*u+j),Math.round(f/4),Math.round((k-h)*u+j),Math.round(f-f/4),d.get("whiskerColor")).append(),a.drawLine(Math.round((q-h)*u+j),Math.round(f/2),Math.round((p-h)*u+j),Math.round(f/2),d.get("lineColor")).append(),a.drawLine(Math.round((q-h)*u+j),Math.round(f/4),Math.round((q-h)*u+j),Math.round(f-f/4),d.get("whiskerColor")).append(),a.drawLine(Math.round((o-h)*u+j),Math.round(f*.1),Math.round((o-h)*u+j),Math.round(f*.9),d.get("medianColor")).append(),d.get("target")&&(t=Math.ceil(d.get("spotRadius")),a.drawLine(Math.round((d.get("target")-h)*u+j),Math.round(f/2-t),Math.round((d.get("target")-h)*u+j),Math.round(f/2+t),d.get("targetColor")).append(),a.drawLine(Math.round((d.get("target")-h)*u+j-t),Math.round(f/2),Math.round((d.get("target")-h)*u+j+t),Math.round(f/2),d.get("targetColor")).append()),a.render()}}),a.browser.msie&&!document.namespaces.v&&document.namespaces.add("v","urn:schemas-microsoft-com:vml","#default#VML"),a.browser.hasCanvas===undefined&&(a.browser.hasCanvas=document.createElement("canvas").getContext!==undefined),D=d({init:function(a,b,c,d){this.target=a,this.id=b,this.type=c,this.args=d},append:function(){return this.target.appendShape(this),this}}),E=d({_pxregex:/(\d+)(px)?\s*$/i,init:function(b,c,d){if(!b)return;this.width=b,this.height=c,this.target=d,this.lastShapeId=null,d[0]&&(d=d[0]),a.data(d,"_jqs_vcanvas",this)},drawLine:function(a,b,c,d,e,f){return this.drawShape([[a,b],[c,d]],e,f)},drawShape:function(a,b,c,d){return this._genShape("Shape",[a,b,c,d])},drawCircle:function(a,b,c,d,e,f){return this._genShape("Circle",[a,b,c,d,e,f])},drawPieSlice:function(a,b,c,d,e,f,g){return this._genShape("PieSlice",[a,b,c,d,e,f,g])},drawRect:function(a,b,c,d,e,f){return this._genShape("Rect",[a,b,c,d,e,f])},getElement:function(){return this.canvas},getLastShapeId:function(){return this.lastShapeId},reset:function(){alert("reset not implemented")},_insert:function(b,c){a(c).html(b)},_calculatePixelDims:function(b,c,d){var e;e=this._pxregex.exec(c),e?this.pixelHeight=e[1]:this.pixelHeight=a(d).height(),e=this._pxregex.exec(b),e?this.pixelWidth=e[1]:this.pixelWidth=a(d).width()},_genShape:function(a,b){var c=I++;return b.unshift(c),new D(this,c,a,b)},appendShape:function(a){alert("appendShape not implemented")},replaceWithShape:function(a,b){alert("replaceWithShape not implemented")},insertAfterShape:function(a,b){alert("insertAfterShape not implemented")},removeShapeId:function(a){alert("removeShapeId not implemented")},getShapeAt:function(a,b,c){alert("getShapeAt not implemented")},render:function(){alert("render not implemented")}}),F=d(E,{init:function(b,c,d,e){F._super.init.call(this,b,c,d),this.canvas=document.createElement("canvas"),d[0]&&(d=d[0]),a.data(d,"_jqs_vcanvas",this),a(this.canvas).css({display:"inline-block",width:b,height:c,verticalAlign:"top"}),this._insert(this.canvas,d),this._calculatePixelDims(b,c,this.canvas),this.canvas.width=this.pixelWidth,this.canvas.height=this.pixelHeight,this.interact=e,this.shapes={},this.shapeseq=[],this.currentTargetShapeId=undefined,a(this.canvas).css({width:this.pixelWidth,height:this.pixelHeight})},_getContext:function(a,b,c){var d=this.canvas.getContext("2d");return a!==undefined&&(d.strokeStyle=a),d.lineWidth=c===undefined?1:c,b!==undefined&&(d.fillStyle=b),d},reset:function(){var a=this._getContext();a.clearRect(0,0,this.pixelWidth,this.pixelHeight),this.shapes={},this.shapeseq=[],this.currentTargetShapeId=undefined},_drawShape:function(a,b,c,d,e){var f=this._getContext(c,d,e),g,h;f.beginPath(),f.moveTo(b[0][0]+.5,b[0][1]+.5);for(g=1,h=b.length;g<h;g++)f.lineTo(b[g][0]+.5,b[g][1]+.5);c!==undefined&&f.stroke(),d!==undefined&&f.fill(),this.targetX!==undefined&&this.targetY!==undefined&&f.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=a)},_drawCircle:function(a,b,c,d,e,f,g){var h=this._getContext(e,f,g);h.beginPath(),h.arc(b,c,d,0,2*Math.PI,!1),this.targetX!==undefined&&this.targetY!==undefined&&h.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=a),e!==undefined&&h.stroke(),f!==undefined&&h.fill()},_drawPieSlice:function(a,b,c,d,e,f,g,h){var i=this._getContext(g,h);i.beginPath(),i.moveTo(b,c),i.arc(b,c,d,e,f,!1),i.lineTo(b,c),i.closePath(),g!==undefined&&i.stroke(),h&&i.fill(),this.targetX!==undefined&&this.targetY!==undefined&&i.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=a)},_drawRect:function(a,b,c,d,e,f,g){return this._drawShape(a,[[b,c],[b+d,c],[b+d,c+e],[b,c+e],[b,c]],f,g)},appendShape:function(a){return this.shapes[a.id]=a,this.shapeseq.push(a.id),this.lastShapeId=a.id,a.id},replaceWithShape:function(a,b){var c=this.shapeseq,d;this.shapes[b.id]=b;for(d=c.length;d--;)c[d]==a&&(c[d]=b.id);delete this.shapes[a]},replaceWithShapes:function(a,b){var c=this.shapeseq,d={},e,f,g;for(f=a.length;f--;)d[a[f]]=!0;for(f=c.length;f--;)e=c[f],d[e]&&(c.splice(f,1),delete this.shapes[e],g=f);for(f=b.length;f--;)c.splice(g,0,b[f].id),this.shapes[b[f].id]=b[f]},insertAfterShape:function(a,b){var c=this.shapeseq,d;for(d=c.length;d--;)if(c[d]===a){c.splice(d+1,0,b.id),this.shapes[b.id]=b;return}},removeShapeId:function(a){var b=this.shapeseq,c;for(c=b.length;c--;)if(b[c]===a){b.splice(c,1);break}delete this.shapes[a]},getShapeAt:function(a,b,c){return this.targetX=b,this.targetY=c,this.render(),this.currentTargetShapeId},render:function(){var a=this.shapeseq,b=this.shapes,c=a.length,d=this._getContext(),e,f,g;d.clearRect(0,0,this.pixelWidth,this.pixelHeight);for(g=0;g<c;g++)e=a[g],f=b[e],this["_draw"+f.type].apply(this,f.args);this.interact||(this.shapes={},this.shapeseq=[])}}),G=d(E,{init:function(b,c,d){var e;G._super.init.call(this,b,c,d),d[0]&&(d=d[0]),a.data(d,"_jqs_vcanvas",this),this.canvas=document.createElement("span"),a(this.canvas).css({display:"inline-block",position:"relative",overflow:"hidden",width:b,height:c,margin:"0px",padding:"0px",verticalAlign:"top"}),this._insert(this.canvas,d),this._calculatePixelDims(b,c,this.canvas),this.canvas.width=this.pixelWidth,this.canvas.height=this.pixelHeight,e='<v:group coordorigin="0 0" coordsize="'+this.pixelWidth+" "+this.pixelHeight+'"'+' style="position:absolute;top:0;left:0;width:'+this.pixelWidth+"px;height="+this.pixelHeight+'px;"></v:group>',this.canvas.insertAdjacentHTML("beforeEnd",e),this.group=a(this.canvas).children()[0],this.rendered=!1,this.prerender=""},_drawShape:function(a,b,c,d,e){var f=[],g,h,i,j,k,l,m;for(m=0,l=b.length;m<l;m++)f[m]=""+b[m][0]+","+b[m][1];return g=f.splice(0,1),e=e===undefined?1:e,h=c===undefined?' stroked="false" ':' strokeWeight="'+e+'px" strokeColor="'+c+'" ',i=d===undefined?' filled="false"':' fillColor="'+d+'" filled="true" ',j=f[0]===f[f.length-1]?"x ":"",k='<v:shape coordorigin="0 0" coordsize="'+this.pixelWidth+" "+this.pixelHeight+'" '+' id="jqsshape'+a+'" '+h+i+' style="position:absolute;left:0px;top:0px;height:'+this.pixelHeight+"px;width:"+this.pixelWidth+'px;padding:0px;margin:0px;" '+' path="m '+g+" l "+f.join(", ")+" "+j+'e">'+" </v:shape>",k},_drawCircle:function(a,b,c,d,e,f,g){var h,i,j;return b-=d,c-=d,h=e===undefined?' stroked="false" ':' strokeWeight="'+g+'px" strokeColor="'+e+'" ',i=f===undefined?' filled="false"':' fillColor="'+f+'" filled="true" ',j='<v:oval id="jqsshape'+a+'" '+h+i+' style="position:absolute;top:'+c+"px; left:"+b+"px; width:"+d*2+"px; height:"+d*2+'px"></v:oval>',j},_drawPieSlice:function(a,b,c,d,e,f,g,h){var i,j,k,l,m,n,o,p;if(e===f)return;f-e===2*Math.PI&&(e=0,f=2*Math.PI),j=b+Math.round(Math.cos(e)*d),k=c+Math.round(Math.sin(e)*d),l=b+Math.round(Math.cos(f)*d),m=c+Math.round(Math.sin(f)*d);if(j===l&&k===m&&f-e<Math.PI)return;return i=[b-d,c-d,b+d,c+d,j,k,l,m],n=g===undefined?' stroked="false" ':' strokeWeight="1px" strokeColor="'+g+'" ',o=h===undefined?' filled="false"':' fillColor="'+h+'" filled="true" ',p='<v:shape coordorigin="0 0" coordsize="'+this.pixelWidth+" "+this.pixelHeight+'" '+' id="jqsshape'+a+'" '+n+o+' style="position:absolute;left:0px;top:0px;height:'+this.pixelHeight+"px;width:"+this.pixelWidth+'px;padding:0px;margin:0px;" '+' path="m '+b+","+c+" wa "+i.join(", ")+' x e">'+" </v:shape>",p},_drawRect:function(a,b,c,d,e,f,g){return this._drawShape(a,[[b,c],[b,c+e],[b+d,c+e],[b+d,c],[b,c]],f,g)},reset:function(){this.group.innerHTML=""},appendShape:function(a){var b=this["_draw"+a.type].apply(this,a.args);return this.rendered?this.group.insertAdjacentHTML("beforeEnd",b):this.prerender+=b,this.lastShapeId=a.id,a.id},replaceWithShape:function(b,c){var d=a("#jqsshape"+b),e=this["_draw"+c.type].apply(this,c.args);d[0].outerHTML=e},replaceWithShapes:function(b,c){var d=a("#jqsshape"+b[0]),e="",f=c.length,g;for(g=0;g<f;g++)e+=this["_draw"+c[g].type].apply(this,c[g].args);d[0].outerHTML=e;for(g=1;g<b.length;g++)a("#jqsshape"+b[g]).remove()},insertAfterShape:function(b,c){var d=a("#jqsshape"+b),e=this["_draw"+c.type].apply(this,c.args);d[0].insertAdjacentHTML("afterEnd",e)},removeShapeId:function(b){var c=a("#jqsshape"+b);this.group.removeChild(c[0])},getShapeAt:function(a,b,c){var d=a.id.substr(8);return d},render:function(){this.rendered||(this.group.innerHTML=this.prerender,this.rendered=!0)}})})(jQuery); \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/js/wp-piwik.js b/wp-content/plugins/wp-piwik/js/wp-piwik.js index 34d8e8824b6aab332f00cfa2c7fe7cb406e6c59f..0788528a616ece37667765a0b49a6536d88d431d 100644 --- a/wp-content/plugins/wp-piwik/js/wp-piwik.js +++ b/wp-content/plugins/wp-piwik/js/wp-piwik.js @@ -1,9 +1,3 @@ -jQuery( function($) { - // close postboxes that should be closed - jQuery('.if-js-closed').removeClass('if-js-closed').addClass('closed'); - postboxes.add_postbox_toggles('wppiwik'); -} ); - -function datelink(strPage,strDate) { - window.location.href='index.php?page='+strPage+'&date='+strDate; -} +function datelink(strPage,strDate,intSite) { + window.location.href='index.php?page='+strPage+'&date='+strDate+'&wpmu_show_stats='+intSite; +} \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/languages/.htaccess b/wp-content/plugins/wp-piwik/languages/.htaccess new file mode 100644 index 0000000000000000000000000000000000000000..3a42882788717c9ed1d5c2fcc3277d21ec13152b --- /dev/null +++ b/wp-content/plugins/wp-piwik/languages/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-de_DE.mo b/wp-content/plugins/wp-piwik/languages/wp-piwik-de_DE.mo index e56fcabc8baa0d24d34dd24c6a865e9351d99169..9a47efb36620cb5be87e82a14e49553812f5393e 100755 Binary files a/wp-content/plugins/wp-piwik/languages/wp-piwik-de_DE.mo and b/wp-content/plugins/wp-piwik/languages/wp-piwik-de_DE.mo differ diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-de_DE.po b/wp-content/plugins/wp-piwik/languages/wp-piwik-de_DE.po old mode 100644 new mode 100755 index b49eac4f5d6f28818bb14e5531d305de22cec41a..6cc24d65d115a0833e25a9448690275659c623f1 --- a/wp-content/plugins/wp-piwik/languages/wp-piwik-de_DE.po +++ b/wp-content/plugins/wp-piwik/languages/wp-piwik-de_DE.po @@ -153,9 +153,13 @@ msgstr "gestern" msgid "today" msgstr "heute" +#: wp-piwik.php:144 wp-piwik.php:559 +msgid "last30" +msgstr "letzte 30 Tage" + #: wp-piwik.php:144 wp-piwik.php:559 msgid "last 30 days" -msgstr "letzten 30 Tage" +msgstr "letzte 30 Tage" #: wp-piwik.php:179 msgid "Settings" @@ -187,7 +191,7 @@ msgstr "Piwik URL" #: wp-piwik.php:461 wp-piwik.php:623 msgid "Auth token" -msgstr "Auth token" +msgstr "Auth Token" #: wp-piwik.php:467 wp-piwik.php:628 msgid "To enable Piwik statistics, please enter your Piwik" @@ -239,8 +243,8 @@ msgid "Track 404" msgstr "404-Tracking" #: wp-piwik.php:532 -msgid "If you add the Piwik javascript code by wp_footer(), WP-Piwik can automatically add a 404-category to track 404-page-visits." -msgstr "Wenn Du den Piwik-Code per wp_footer() in Dein Blog einbindest, kann WP-Piwik automatisch eine eigene Kategorie für 404-Seiten hinzufügen." +msgid "WP-Piwik can automatically add a 404-category to track 404-page-visits." +msgstr "WP-Piwik kann automatisch eine eigene Kategorie für 404-Seiten hinzufügen." #: wp-piwik.php:536 wp-piwik.php:644 msgid "Tracking filter" @@ -337,7 +341,7 @@ msgid "Thank you very much for your donation" msgstr "Vielen Dank für eure Spenden" msgid "and all people flattering this" -msgstr "und allen Nutzern, die bei Flatter klicken" +msgstr "und alle Nutzern, die bei Flatter klicken" msgid "Graphs powered by <a href=\"http://www.jqplot.com/\">jqPlot</a>, an open source project by Chris Leonello. Give it a try! (License: GPL 2.0 and MIT)" msgstr "Die Graphen werden mit <a href=\"http://www.jqplot.com/\">jqPlot</a> erstellt, einem Open-Source-Projekt von Chris Leonello. Probiere es mal aus! (Lizenz: GPL 2.0 und MIT)" @@ -355,7 +359,7 @@ msgid "Thank you very much, all users who send me mails containing criticism, co msgstr "Vielen Dank an alle Nutzer, die mir Mails mit Kritik, Lob, Featurewünsche und Bugmeldungen senden. Ihr helft mir dabei, WP-Piwik viel besser zu machen." msgid "Thank <strong>you</strong> for using my plugin. It is the best commendation if my piece of code is really used!" -msgstr "Vielen Dank an <strong>Dich</strong> für die Nutzung meines Plugins. Es ist das größte Lob, wenn mein Code tatsächlich benutzt wird!" +msgstr "Vielen Dank an <strong>Dich</strong> für die Nutzung meines Plugins. Es ist das größte Lob, wenn mein Code tatsächlich benutzt wird!" msgid "Changes saved" msgstr "Änderungen gespeichert" @@ -381,7 +385,7 @@ msgstr "Board-Daten" msgid "Display an overview widget to your WordPress dashboard." msgstr "Zeigt ein Übersichts-Widget auf dem WordPress-Dashboard." -msgid "Boad chart" +msgid "Board chart" msgstr "Board-Chart" msgid "Display a visitor graph widget to your WordPress dashboard." @@ -389,3 +393,282 @@ msgstr "Zeigt einen Besucher-Graph als Widget auf dem WordPress-Dashboard." msgid "No data available." msgstr "Keine Daten vorhanden." + +msgid "Check this to automatically choose your blog from your Piwik sites by URL. If your blog is not added to Piwik yet, WP-Piwik will add a new site." +msgstr "Aktiviere diesen Haken, um Dein Blog über seine URL automatisch aus Deinen Piwik-Seiten auszuwählen. Wenn Dein Blog bisher nicht zu Piwik hinzugefügt wurde, wird WP-Piwik eine neue Seite hinzufügen." + +msgid "If you add the Piwik javascript code by wp_footer()," +msgstr "Wenn Du den Piwik-Code per wp_footer() in Dein Blog einbindest," + +msgid "WP-Piwik can automatically use js/index.php instead of piwik.js. See" +msgstr "WP-Piwik kann automatisch js/index.php statt piwik.js verwenden. Siehe" + +msgid "WP-Piwik can automatically force the Tracking Code to sent data in POST. See" +msgstr "WP-Piwik kann automatisch den Tracking Code zwingen, die Daten via POST zu senden. Siehe" + +msgid "Avoid mod_security" +msgstr "Umgehe mod_security" + +msgid "Determined site" +msgstr "Ermittelte Seite" + +msgid "Auto config" +msgstr "Auto-Konfiguration" + +msgid "Use js/index.php" +msgstr "Nutze js/index.php" + +msgid "Show overview" +msgstr "Zeige Übersicht" + +msgid "Hide overview" +msgstr "Zeige keine Übersicht" + +msgid "SEO <em>(slow!)</em>" +msgstr "SEO <em>(langsam!)</em>" + +msgid "Display SEO ranking data on statistics page. <em>(Slow!)</em>" +msgstr "Zeige SEO-Rankingdaten auf der Statistik-Seite. <em>(Langsam!)</em>" + +msgid "Configure WP-Piwik widgets to be shown on your WordPress Home Dashboard." +msgstr "Konfiguriere WP-Piwik-Widgets, die auf Deinem WordPress Home Dashboard erscheinen sollen." + +msgid "SEO data" +msgstr "SEO-Daten" + +msgid "the Piwik team itself" +msgstr "das Piwik-Team selbst" + +msgid "Metabox support inspired by" +msgstr "Die Metabox-Unterstützung wurde inspiriert von" + +msgid "WP-Piwik support board" +msgstr "WP-Piwik Support Board" + +msgid "no registration required, English & German" +msgstr "keine Registrierung erforderlich, Englisch & Deutsch" + +msgid "WordPress.org forum about WP-Piwik" +msgstr "WordPress.org Forum über WP-Piwik" + +msgid "WordPress.org registration required, English" +msgstr "Registrierung bei WordPress.org notwendig, Englisch" + +msgid "Please don't forget to vote the compatibility at the" +msgstr "Bitte denke daran, eine Kompatibilitätsbewertung abzugeben:" + +msgid "Donate" +msgstr "Spenden" + +msgid "My Amazon.de wishlist" +msgstr "Meine Wunschliste bei Amazon.de" + +msgid "Piwik error" +msgstr "Piwik-Fehler" + +msgid "Important" +msgstr "Wichtig" + +msgid "Thanks for using WP-Piwik!" +msgstr "Vielen Dank für die Verwendung von WP-Piwik!" + +msgid "Auto site configuration is" +msgstr "Die Auto-Konfiguration ist" + +msgid "Tracking code insertion is" +msgstr "Das Einfügen des Tracking-Codes ist" + +msgid "enabled" +msgstr "aktiviert" + +msgid "disabled" +msgstr "deaktiviert" + +msgid "You are using Piwik" +msgstr "Du verwendest Piwik" + +msgid "and" +msgstr "und" + +msgid "Error: cURL is not enabled and fopen is not allowed to open URLs. WP-Piwik won't be able to connect to Piwik." +msgstr "Fehler: cURL ist nicht aktiviert und fopen darf keine URLs öffnen. WP-Piwik kann so keine Verbindung zu Piwik aufbauen." + +msgid "<strong>Important note:</strong> If you do not host this blog on your own, your site admin is able to get your auth token from the database." +msgstr "<strong>Wichtiger Hinweis:</strong> Wenn Du dieses Blog nicht selber hostest, kann Dein Site Admin Deinen Auth Token aus der Datenbank auslesen." + +msgid "Add tracking code" +msgstr "Tracking-Code einfügen" + +msgid "Tracking code preview" +msgstr "Tracking-Code Vorschau" + +msgid "Piwik Settings" +msgstr "Piwik Einstellungen" + +msgid "Statistics" +msgstr "Statistiken" + +msgid "Either allow_url_fopen has to be enabled <em>or</em> cURL has to be available:" +msgstr "Entweder allow_url_fopen muss aktiviert <em>oder</em> cURL muss verfügbar sein:" + +msgid "cURL is" +msgstr "cURL ist" + +msgid "allow_url_fopen is" +msgstr "allow_url_fopen ist" + +msgid "not" +msgstr "nicht" + +msgid "available" +msgstr "verfügbar" + +msgid "Test script result" +msgstr "Ergebnis des Testskripts" + +msgid "Please confirm your reset request" +msgstr "Bitte bestätige Deine Reset-Anweisung" + +msgid "YES, please reset <strong>all</strong> WP-Piwik settings <strong>except</strong> auth token and Piwi URL." +msgstr "JA, bitte setze <strong>alle</strong> WP-Piwik Einstellung außer Auth Token und Piwik URL zurück." + +msgid "WP-Piwik reset done" +msgstr "WP-Piwik wurde zurückgesetzt" + +msgid "Get more debug information" +msgstr "Erhalte weitere Debug-Informationen" + +msgid "Run test script" +msgstr "Starte Testskript" + +msgid "Get site configuration details" +msgstr "Ermittle Detailinformationen zur Seitenkonfiguration" + +msgid "Reset WP-Piwik settings except auth token and Piwik URL" +msgstr "Setzte die Einstellungen von WP-Piwik mit Ausnahme von Auth Token und Piwik URL zurück." + +msgid "You have to enter your auth token and the Piwik URL before you can access more debug functions." +msgstr "Du musst Deinen Auth Token und die Piwik URL eingeben, bevor Du auf weitere Debug-Funktionen zugreifen kannst." + +msgid "Latest support threads on WordPress.org" +msgstr "Die letzten Support-Beiträge auf WordPress.org" + +msgid "This will not affect Piwik itself. Resetting large networks may take some minutes." +msgstr "Dies hat keinen Einfluss auf Piwik selbst. Das Zurücksetzen großer Netzwerke kann einige Minuten dauern." + +msgid ", and all people flattering this" +msgstr " und allen, die WP-Piwik flattrn" + +msgid "Disable time limit" +msgstr "Zeitlimit deaktivieren" + +msgid "Use set_time_limit(0) if stats page causes a time out." +msgstr "Verwende set_time_limit(0) falls die Statistik-Seite einen Timeout erzeugt." + +msgid "in network mode" +msgstr "im Netzwerk-Modus" + +msgid "To enable Piwik statistics, please enter" +msgstr "Um die Piwik-Statistiken zu aktivieren, gibt bitte die folgenden Daten ein:" + +msgid "your Piwik base URL (like http://mydomain.com/piwik) or your Piwik server path (like /var/www/mydomain.com/httpdocs/piwik/)" +msgstr "Die URL Deiner Piwik-Installation (z.B. http://mydomain.com/piwik) oder den Serverpfad zu Deiner Piwik-Installation (z.B. /var/www/mydomain.com/httpdocs/piwik/)" + +msgid "your personal Piwik authentification token. You can get the token on the API page inside your Piwik interface. It looks like "1234a5cd6789e0a12345b678cd9012ef"." +msgstr "Deinen persönlichen Piwik Authentifikations-Token. Du findest ihn auf der API-Seite des Piwik-Interfaces. Er sieht z.B. so aus: "1234a5cd6789e0a12345b678cd9012ef"." + +msgid "No idea what I'm talking about?" +msgstr "Keine Idee, wovon ich rede?" + +msgid "Get help." +msgstr "Hier gibt es Hilfe." + +msgid "Piwik path" +msgstr "Piwik Pfad" + +msgid "Disable cookies" +msgstr "Cookies deaktivieren" + +msgid "Disable all tracking cookies for a visitor." +msgstr "Schalte alle Tracking-Cookies für Besucher ab." + +msgid "Show graph on WordPress Toolbar" +msgstr "Zeige einen Graphen in der WordPress Toolbar" + +msgid "Display the last 30 days visitor stats on WordPress Toolbar." +msgstr "Zeige die Besucherstatistik der letzten 30 Tage in der WordPress Toolbar an." + +msgid "Graphs powered by <a href=\"http://www.jqplot.com/\">jqPlot</a> (License: GPL 2.0 and MIT) and <a href=\"http://omnipotent.net/jquery.sparkline/\">jQuery Sparklines</a> (License: New BSD License)." +msgstr "Die Graphen werden mit <a href=\"http://www.jqplot.com/\">jqPlot</a> (Lizenz: GPL 2.0 and MIT) und <a href=\"http://omnipotent.net/jquery.sparkline/\">jQuery Sparklines</a> (Lizenz: New BSD License) erstellt." + +msgid "Tabbed settings page suggested by the" +msgstr "Die Tabs für die Einstellungen wurden inspiriert von einem Artikel im" + +msgid "If you like to use the PHP API and also to enable tracking by WP-Piwik, please enter your Piwik URL, too. Otherwise your tracking code may be erroneous." +msgstr "Falls Du die PHP API verwenden und das Tracking per WP-Piwik aktivieren willst, gib bitte auch Deine Piwik URL an. Andernfalls könnte Dein Tracking Code fehlerhaft sein." + +msgid "Title" +msgstr "Titel" + +msgid "Site ID (Piwik)" +msgstr "Seiten-ID (Piwik)" + +msgid "Expert Settings" +msgstr "Expertenkonfiguration" + +msgid "Disable SSL peer verification" +msgstr "SSL Peer-Verifikation deaktivieren" + +msgid "not recommended" +msgstr "Nicht empfohlen" + +msgid "Invalid path. Please enter the file path to Piwik." +msgstr "Ungültiger Pfad. Bitte gib den Dateipfad von Piwik an." + +msgid "Enable shortcodes in post or page content." +msgstr "Aktiviere Shortcodes innerhalb von Artikeln und Seiten." + +msgid "Connection timeout" +msgstr "Verbindungs-Timeout" + +msgid "User agent" +msgstr "User Agent" + +msgid "Default tracking" +msgstr "Standard-Tracking" + +msgid "Use proxy script" +msgstr "Verwende Proxy-Skript" + +msgid "WP-Piwik uses the Piwik default tracking code." +msgstr "WP-Piwik verwendet den normalen Tracking Code." + +msgid "WP-Piwik can automatically use js/index.php instead of piwik.js and piwik.php. See" +msgstr "WP-Piwik kann automatisch js/index.php statt piwik.js und piwik.php verwenden. Siehe" + +msgid "WP-Piwik will use the piwik.php proxy script. See" +msgstr "WP-Piwik benutzt das piwik.php-Proxy-Skript, siehe" + +msgid "Enable shortcodes" +msgstr "Aktiviere Shortcodes" + +msgid "Requests" +msgstr "Anfragen" + +msgid "Site Search Keywords" +msgstr "Suchanfragen" + +msgid "Site Search without Results" +msgstr "Suchanfragen ohne Ergebnisse" + +msgid "Disabled in proxy mode." +msgstr "Im Proxy-Modus deaktiviert." + +msgid "Leave blank if you do not want to define a CDN URL or you do not know what this is." +msgstr "Einfach freilassen, falls Du keine CDN URL definieren möchtest oder nicht weißt, worum es geht." + +msgid "Adds the <noscript> code to your footer." +msgstr "Fügt den <noscript>-Code im Footer ein." + +msgid "Use Piwik's advanced Site Search Analytics feature. See" +msgstr "Benutze Piwiks erweiterte Site Search Analyse. Siehe" \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-es_ES.mo b/wp-content/plugins/wp-piwik/languages/wp-piwik-es_ES.mo new file mode 100644 index 0000000000000000000000000000000000000000..f07de716af83deb044546b77b9f5229c147667eb Binary files /dev/null and b/wp-content/plugins/wp-piwik/languages/wp-piwik-es_ES.mo differ diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-es_ES.po b/wp-content/plugins/wp-piwik/languages/wp-piwik-es_ES.po new file mode 100644 index 0000000000000000000000000000000000000000..678a7743a755ac0a46326b67bf4f8f836bac23e0 --- /dev/null +++ b/wp-content/plugins/wp-piwik/languages/wp-piwik-es_ES.po @@ -0,0 +1,485 @@ +# Translation of the WordPress plugin WP-Piwik 0.8.0 by André Bräkling. +# Copyright (C) 2010 André Bräkling +# This file is distributed under the same license as the WP-Piwik package. +# André Bräkling <webmaster@braekling.de>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: WP-Piwik 0.8.4\n" +"Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-piwik\n" +"POT-Creation-Date: 2010-07-19 18:06+0000\n" +"PO-Revision-Date: 2012-05-12 19:00+0100\n" +"Last-Translator: \n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: dashboard/browsers.php:12 +#: dashboard/browsers.php:33 +msgid "Browser" +msgstr "Navegador" + +#: dashboard/browsers.php:22 +#: dashboard/pages.php:43 +#: dashboard/screens.php:22 +#: dashboard/systems.php:22 +msgid "Others" +msgstr "Otros" + +#: dashboard/browsers.php:34 +#: dashboard/keywords.php:17 +#: dashboard/pages.php:22 +#: dashboard/screens.php:33 +#: dashboard/systems.php:35 +#: dashboard/visitors.php:53 +#: dashboard/websites.php:19 +#: wp-piwik.php:305 +msgid "Unique" +msgstr "Único" + +#: dashboard/browsers.php:35 +#: dashboard/plugins.php:33 +#: dashboard/screens.php:34 +#: dashboard/systems.php:36 +msgid "Percent" +msgstr "Porcentaje" + +#: dashboard/keywords.php:12 +msgid "Keywords" +msgstr "Palabras Clave" + +#: dashboard/keywords.php:17 +msgid "Keyword" +msgstr "Palabra Clave" + +#: dashboard/overview.php:12 +msgid "Overview" +msgstr "Información General" + +#: dashboard/overview.php:42 +#: dashboard/visitors.php:24 +msgid "Visitors" +msgstr "Visitantes" + +#: dashboard/overview.php:43 +msgid "Unique visitors" +msgstr "Visitantes Únicos" + +#: dashboard/overview.php:44 +msgid "Page views" +msgstr "Páginas vistas" + +#: dashboard/overview.php:45 +msgid "Max. page views in one visit" +msgstr "Máximo de páginas vistas durante una visita" + +#: dashboard/overview.php:46 +msgid "Total time spent" +msgstr "Tiempo total empleado" + +msgid "Time/visit" +msgstr "Tiempo/Visita" + +#: dashboard/overview.php:47 +msgid "Bounce count" +msgstr "Número de rebotes" + +#: dashboard/overview.php:49 +#: wp-piwik.php:563 +msgid "Shortcut" +msgstr "Enlace directo" + +#: dashboard/pages.php:13 +msgid "Pages" +msgstr "Páginas" + +#: dashboard/pages.php:21 +msgid "Page" +msgstr "Página" + +#: dashboard/pages.php:23 +#: dashboard/plugins.php:32 +#: dashboard/visitors.php:52 +msgid "Visits" +msgstr "Visitas" + +#: dashboard/plugins.php:12 +#: dashboard/plugins.php:31 +msgid "Plugins" +msgstr "Plugins" + +#: dashboard/screens.php:12 +#: dashboard/screens.php:32 +msgid "Resolution" +msgstr "Resolución" + +#: dashboard/systems.php:12 +#: dashboard/systems.php:34 +msgid "Operating System" +msgstr "Sistema Operativo" + +#: dashboard/visitors.php:51 +msgid "Date" +msgstr "Fecha" + +#: dashboard/visitors.php:54 +msgid "Bounced" +msgstr "Rebotado" + +#: dashboard/visitors.php:67 +msgid "Unique TOTAL" +msgstr "Únicas TOTAL" + +#: dashboard/visitors.php:67 +msgid "Sum" +msgstr "Suma" + +#: dashboard/visitors.php:67 +msgid "Avg" +msgstr "Media" + +#: dashboard/websites.php:12 +msgid "Websites" +msgstr "Sitios Web" + +#: dashboard/websites.php:18 +msgid "Website" +msgstr "Sitio Web" + +#: wp-piwik.php:110 +#: wp-piwik.php:365 +msgid "Piwik Statistics" +msgstr "Estadísticas de Piwik" + +#. #-#-#-#-# plugin.pot (WP-Piwik 0.8.0) #-#-#-#-# +#. Plugin Name of the plugin/theme +#: wp-piwik.php:111 +#: wp-piwik.php:122 +#: wp-piwik.php:123 +#: wp-piwik.php:146 +msgid "WP-Piwik" +msgstr "WP-Piwik" + +#: wp-piwik.php:130 +#: wp-piwik.php:131 +msgid "WPMU-Piwik" +msgstr "WPMU-Piwik" + +#: wp-piwik.php:142 +#: wp-piwik.php:557 +msgid "yesterday" +msgstr "ayer" + +#: wp-piwik.php:143 +#: wp-piwik.php:558 +msgid "today" +msgstr "hoy" + +#: wp-piwik.php:144 +#: wp-piwik.php:559 +msgid "last30" +msgstr "últimos 30" + +#: wp-piwik.php:144 +#: wp-piwik.php:559 +msgid "last 30 days" +msgstr "últimos 30 días" + +#: wp-piwik.php:179 +msgid "Settings" +msgstr "Ajustes" + +#: wp-piwik.php:381 +msgid "Change" +msgstr "Cambiar" + +#: wp-piwik.php:382 +msgid "Currently shown stats:" +msgstr "Estaísticas mostradas actualmente:" + +#: wp-piwik.php:383 +msgid "Current shown stats: <strong>Overall</strong>" +msgstr "Estadísticas mostradas actualmente: <strong>todas</strong>" + +#: wp-piwik.php:448 +msgid "WP-Piwik Settings" +msgstr "Ajustes de WP-Piwik" + +#: wp-piwik.php:455 +#: wp-piwik.php:617 +msgid "Account settings" +msgstr "Ajustes de la cuenta" + +#: wp-piwik.php:457 +#: wp-piwik.php:619 +msgid "Piwik URL" +msgstr "Dirección de Piwik" + +#: wp-piwik.php:461 +#: wp-piwik.php:623 +msgid "Auth token" +msgstr "Auth token" + +#: wp-piwik.php:467 +#: wp-piwik.php:628 +msgid "To enable Piwik statistics, please enter your Piwik base URL (like http://mydomain.com/piwik) and your personal authentification token. You can get the token on the API page inside your Piwik interface. It looks like "1234a5cd6789e0a12345b678cd9012ef"." +msgstr "Para habilitar las estadísticas de Piwik , por favor introduce la dirección de tu instalación de Piwik (por ejemplo http://mydomain.com/piwik) y tu Auth Token. Puedes ver tu Auth Token s desde la sección API dentro del interfaz de . Es algo similar a: "1234a5cd6789e0a12345b678cd9012ef"." + +#: wp-piwik.php:477 +msgid "<strong>Important note:</strong> If you do not host this blog on your own, your site admin is able to get your auth token from the database. So he is able to access your statistics. You should never use an auth token with more than simple view access!" +msgstr "<strong>Nota importante :</strong> Si no albergas este blog bajo tu propio servidor, el administror es capaz de ver el auth token desde la base de datos. Por lo tanto podría acceder a tus estadísticas. No deberías utilizar nunca un auth token con más permisos que los de lectura." + +#: wp-piwik.php:485 +#: wp-piwik.php:489 +msgid "An error occured" +msgstr "Ocurrió un error" + +#: wp-piwik.php:486 +msgid "Please check URL and auth token. You need at least view access to one site." +msgstr "Por favor comprueba tu URL y el Auth Token. Necesitas al menos acceso de lectura a un sitio web." + +#: wp-piwik.php:492 +msgid "Choose site" +msgstr "Selecciona sitio" + +#: wp-piwik.php:511 +#: wp-piwik.php:547 +#: wp-piwik.php:584 +#: wp-piwik.php:658 +msgid "Save settings" +msgstr "Guardar ajustes" + +#: wp-piwik.php:515 +#: wp-piwik.php:643 +msgid "Tracking settings" +msgstr "Ajustes de seguimiento" + +#: wp-piwik.php:521 +msgid "Add script" +msgstr "Añadir Script" + +#: wp-piwik.php:525 +msgid "If your template uses wp_footer(), WP-Piwik can automatically add the Piwik javascript code to your blog." +msgstr "Si tu plantilla utiliza wp_footer(), WP-Piwik puede añadir el código javascript de Piwik de forma automática a tu blog." + +#: wp-piwik.php:528 +msgid "Track 404" +msgstr "Seguimiento de errores 404" + +#: wp-piwik.php:532 +msgid "WP-Piwik can automatically add a 404-category to track 404-page-visits." +msgstr "WP-Piwik puede añadir automáticamente una categoría-404 para hacer el seguimiento de los errores 404" + +#: wp-piwik.php:536 +#: wp-piwik.php:644 +msgid "Tracking filter" +msgstr "Filtro de seguimiento" + +msgid "Choose users by user role you do <strong>not</strong> want to track." +msgstr "Selecciona, por el rol de usuario, los usuarios sobre los cuales <strong>no</strong> quieres hacer seguimiento." + +msgid "Choose users by user role you do <strong>not</strong> want to track. Requires enabled "Add script"-functionality." +msgstr "Selecciona, por el rol de usuario, los usuarios sobre los cuales <strong>no</strong> quieres hacer seguimiento. Requiera que la funcionalidad de \"Añadir script a wp_footer()\" esté activada." + +#: wp-piwik.php:551 +msgid "Statistic view settings" +msgstr "Ajustes de la vista de estadísticas" + +#: wp-piwik.php:554 +msgid "Dashboard" +msgstr "Dashboard" + +#: wp-piwik.php:556 +msgid "No" +msgstr "No" + +#: wp-piwik.php:557 +#: wp-piwik.php:558 +#: wp-piwik.php:559 +msgid "Yes" +msgstr "Si" + +#: wp-piwik.php:562 +msgid "Display a dashboard widget to your WordPress dashboard." +msgstr "Mostrar un widget de Dashboard a su panel de WordPress." + +#: wp-piwik.php:567 +msgid "Display a shortcut to Piwik itself." +msgstr "Mostar un enlace directo al propio Piwik" + +#: wp-piwik.php:568 +msgid "Display to" +msgstr "Mostrar a" + +#: wp-piwik.php:579 +msgid "Choose user roles allowed to see the statistics page." +msgstr "Selecciona los roles de usuario que pueden acceder a las estadísticas." + +#: wp-piwik.php:612 +msgid "WPMU-Piwik Settings" +msgstr "Ajustos de WPMU-Piwik" + +#: wp-piwik.php:636 +msgid "<strong>Important note:</strong> You have to choose a token which provides administration access. WPMU-Piwik will create new Piwik sites for each blog if it is shown the first time and it is not added yet. All users can access their own statistics only, while site admins can access all statistics. To avoid conflicts, you should use a clean Piwik installation without other sites added. The provided themes should use wp_footer, because it adds the Piwik javascript code to each page." +msgstr "<strong>Note importante :</strong> Necesitas seleccionar un token que tenga accso de admistración. WPMU-Piwik creará nuevo sitios en piwik para cada blog. si es visto por primera vez y no ha sido añadido todavía. Todos los usuarios pueden acceder solamente a sus estadísticas, mientras los administradores pueden acceder a todas. Para evitar conflictos, debes utilizar una instalación nueva de Piwik, sin ningún sitio configurado. Todos los temás deberán utilizar wp_footer, puesto que es la función que se encarga de añadir el código de javascript a cada página." + +#: wp-piwik.php:671 +msgid "If you like WP-Piwik, you can support its development by a donation:" +msgstr "Si te gusta WP-Piwik, puedes añadir a su desarrollo con una donación:" + +#: wp-piwik.php:687 +msgid "My Amazon.de wishlist (German)" +msgstr "Mi whitlist en Amazon.de ( Alemán )" + +#. Plugin URI of the plugin/theme +msgid "http://www.braekling.de/wp-piwik-wpmu-piwik-wordpress/" +msgstr "http://www.braekling.de/wp-piwik-wpmu-piwik-wordpress/" + +#. Description of the plugin/theme +msgid "Adds Piwik stats to your dashboard menu and Piwik code to your wordpress footer." +msgstr "Añade las estadísticas de Piwik al menú de tu Dashboard y el código de piwik al pie de tu Wordpress" + +#. Author of the plugin/theme +msgid "André Bräkling" +msgstr "André Bräkling" + +#. Author URI of the plugin/theme +msgid "http://www.braekling.de" +msgstr "http://www.braekling.de" + +msgid "Credits" +msgstr "Créditos" + +msgid "Thank you very much for your donation" +msgstr "Muchas gracias por vuestra donación" + +msgid "and all people flattering this" +msgstr "y a todas las personas hablando de esto" + +msgid "Graphs powered by <a href=\"http://www.jqplot.com/\">jqPlot</a>, an open source project by Chris Leonello. Give it a try! (License: GPL 2.0 and MIT)" +msgstr "Gráficos por <a href=\"http://www.jqplot.com/\">jqPlot</a> un proyecto open source por Chris Leonello. Pruébalo! (Licencia: GPL 2.0 y MIT)" + +msgid "Thank you very much" +msgstr "Muchas gracias" + +msgid ", and" +msgstr "y" + +msgid "for your translation work" +msgstr "por vuestro trabajo de traducción" + +msgid "Thank you very much, all users who send me mails containing criticism, commendation, feature requests and bug reports! You help me to make WP-Piwik much better." +msgstr "Muchísimas gracias a todos los usuarios que me habéis enviado emails con críticas, recomendaciones, sugerencias de mejoras y reportes de errores. Me ayudais a hacer WP-Piwik mucho mejor." + +msgid "Thank <strong>you</strong> for using my plugin. It is the best commendation if my piece of code is really used!" +msgstr "Gracias a <strong>ti</strong>por utilizar mi plugin. Es el mayor elogio que mi plugin sea realmente utilizado." + +msgid "Changes saved" +msgstr "Cambios guardados" + +msgid "installed" +msgstr "instalado" + +msgid "Next you should connect to Piwik" +msgstr "A continuación, debe conectarse a Piwik" + +msgid "Please validate your configuration" +msgstr "Por favor valida tu configuración" + +msgid "Default date" +msgstr "Fecha por defecto" + +msgid "Default date shown on statistics page." +msgstr "Fecha por defecto mostrada en la página de estadísticas" + +msgid "Dashboard data" +msgstr "Datos del panel" + +msgid "Display an overview widget to your WordPress dashboard." +msgstr "Muestra un widget de resumen en tu panel el Wordpress" + +msgid "Board chart" +msgstr "Board-Chart" + +msgid "Display a visitor graph widget to your WordPress dashboard." +msgstr "Mostrar un widget gráfico de usuarios en tu panel de Wordpress" + +msgid "No data available." +msgstr "No hay datos disponibles." + +msgid "Check this to automatically choose your blog from your Piwik sites by URL. If your blog is not added to Piwik yet, WP-Piwik will add a new site." +msgstr "Selecciona esto para elegir automáticamente tu blog desde el listado de sitios de Piwik por la dirección. Si tu blog no está todavía añadido en Piwik, WP-Piwik añadirá un sitio nuevo." + +msgid "If you add the Piwik javascript code by wp_footer()," +msgstr "Si añades el código de Piwik desde wp_footer()," + +msgid "WP-Piwik can automatically use js/index.php instead of piwik.js. See" +msgstr "WP-Piwik puede utilizar js/index.php en lugar de statt piwik.js de forma automática. Ver" + +msgid "WP-Piwik can automatically force the Tracking Code to sent data in POST. See" +msgstr "WP-Piwik puede forzar de manera automática al Código de seguimiento a enviar los datos por POST. Ver" + +msgid "Avoid mod_security" +msgstr "Evitar mod_security" + +msgid "Determined site" +msgstr "Sitio determinado" + +msgid "Auto config" +msgstr "Auto-configuración" + +msgid "Use js/index.php" +msgstr "Utilizar js/index.php" + +msgid "Show overview" +msgstr "Mostrar información general" + +msgid "Hide overview" +msgstr "Ocultar información general" + +msgid "SEO <em>(slow!)</em>" +msgstr "SEO <em>(lento!)</em>" + +msgid "Display SEO ranking data on statistics page. <em>(Slow!)</em>" +msgstr "Muestra el ranking SEO en la página de estadísticas. <em>(Lento!)</em>" + +msgid "Configure WP-Piwik widgets to be shown on your WordPress Home Dashboard." +msgstr "Configura los Widgets de WP-Piwik que se mostrarán en la portada de Wordpress" + +msgid "SEO data" +msgstr "Información SEO" + +msgid "the Piwik team itself" +msgstr "El equipo de Piwik" + +msgid "Metabox support inspired by" +msgstr "Soporte Metabox inspirado por" + +msgid "WP-Piwik support board" +msgstr "Foro de soporte de WP-Piwik" + +msgid "no registration required, English & German" +msgstr "Registro no requerido, Ingles y Alemán" + +msgid "WordPress.org forum about WP-Piwik" +msgstr "Foros de Wordpress.com sobre WP-Piwik" + +msgid "WordPress.org registration required, English" +msgstr "Registro en WordPress.org requerido, Inglés" + +msgid "Please don't forget to vote the compatibility at the" +msgstr "Por favor no te olvides de votar la compatibilidad en " + +msgid "Donate" +msgstr "Donar" + +msgid "My Amazon.de wishlist" +msgstr "Mi lista en Amazon.de" + +msgid "Piwik error" +msgstr "Error de Piwik" + +msgid "Important" +msgstr "Importante" + diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-fa_IR.mo b/wp-content/plugins/wp-piwik/languages/wp-piwik-fa_IR.mo new file mode 100644 index 0000000000000000000000000000000000000000..f817eeda3ca09293d66f8a5ac8731be1faf8ec36 Binary files /dev/null and b/wp-content/plugins/wp-piwik/languages/wp-piwik-fa_IR.mo differ diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-fa_IR.po b/wp-content/plugins/wp-piwik/languages/wp-piwik-fa_IR.po new file mode 100644 index 0000000000000000000000000000000000000000..a5467e5bfe23504aa62eba5ed8801a326358a49f --- /dev/null +++ b/wp-content/plugins/wp-piwik/languages/wp-piwik-fa_IR.po @@ -0,0 +1,408 @@ +# Translation of the WordPress plugin WP-Piwik 0.8.0 by André Bräkling. +# Copyright (C) 2010 André Bräkling +# This file is distributed under the same license as the WP-Piwik package. +# André Bräkling <webmaster@braekling.de>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: WP-Piwik 0.8.4\n" +"Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-piwik\n" +"POT-Creation-Date: 2010-07-19 18:06+0000\n" +"PO-Revision-Date: 2011-11-16 11:13+0330\n" +"Last-Translator: hossein <hossein@email.com>\n" +"Language-Team: Persian <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Persian\n" +"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: dashboard/browsers.php:12 +#: dashboard/browsers.php:33 +msgid "Browser" +msgstr "مرورگر" + +#: dashboard/browsers.php:22 +#: dashboard/pages.php:43 +#: dashboard/screens.php:22 +#: dashboard/systems.php:22 +msgid "Others" +msgstr "غیره" + +#: dashboard/browsers.php:34 +#: dashboard/keywords.php:17 +#: dashboard/pages.php:22 +#: dashboard/screens.php:33 +#: dashboard/systems.php:35 +#: dashboard/visitors.php:53 +#: dashboard/websites.php:19 +#: wp-piwik.php:305 +msgid "Unique" +msgstr "یکتا" + +#: dashboard/browsers.php:35 +#: dashboard/plugins.php:33 +#: dashboard/screens.php:34 +#: dashboard/systems.php:36 +msgid "Percent" +msgstr "درصد" + +#: dashboard/keywords.php:12 +msgid "Keywords" +msgstr "کلمات کلیدی" + +#: dashboard/keywords.php:17 +msgid "Keyword" +msgstr "کلمه کلیدی" + +#: dashboard/overview.php:12 +msgid "Overview" +msgstr "نمای کلی" + +#: dashboard/overview.php:42 +#: dashboard/visitors.php:24 +msgid "Visitors" +msgstr "بازدید کنندگان" + +#: dashboard/overview.php:43 +msgid "Unique visitors" +msgstr "بازدیدکنندگان یکتا" + +#: dashboard/overview.php:44 +msgid "Page views" +msgstr "نمایش صفحه" + +#: dashboard/overview.php:45 +msgid "Max. page views in one visit" +msgstr "حداکثر تعداد نمایش صفحه در یک بازدید" + +#: dashboard/overview.php:46 +msgid "Total time spent" +msgstr "زمان سپری شده" + +msgid "Time/visit" +msgstr "زمان/بازدید" + +#: dashboard/overview.php:47 +msgid "Bounce count" +msgstr "تعداد بازگشت" + +#: dashboard/overview.php:49 +#: wp-piwik.php:563 +msgid "Shortcut" +msgstr "میانبر" + +#: dashboard/pages.php:13 +msgid "Pages" +msgstr "صفحه" + +#: dashboard/pages.php:21 +msgid "Page" +msgstr "صفحه" + +#: dashboard/pages.php:23 +#: dashboard/plugins.php:32 +#: dashboard/visitors.php:52 +msgid "Visits" +msgstr "بازدید" + +#: dashboard/plugins.php:12 +#: dashboard/plugins.php:31 +msgid "Plugins" +msgstr "افزونه" + +#: dashboard/screens.php:12 +#: dashboard/screens.php:32 +msgid "Resolution" +msgstr "وضوح" + +#: dashboard/systems.php:12 +#: dashboard/systems.php:34 +msgid "Operating System" +msgstr "سیستم عامل" + +#: dashboard/visitors.php:51 +msgid "Date" +msgstr "تاریخ" + +#: dashboard/visitors.php:54 +msgid "Bounced" +msgstr "بازگشت" + +#: dashboard/visitors.php:67 +msgid "Unique TOTAL" +msgstr "مجموع یکتا" + +#: dashboard/visitors.php:67 +msgid "Sum" +msgstr "مجموع" + +#: dashboard/visitors.php:67 +msgid "Avg" +msgstr "میانگین" + +#: dashboard/websites.php:12 +msgid "Websites" +msgstr "سایت" + +#: dashboard/websites.php:18 +msgid "Website" +msgstr "سایت" + +#: wp-piwik.php:110 +#: wp-piwik.php:365 +msgid "Piwik Statistics" +msgstr "آمارگیر" + +#. #-#-#-#-# plugin.pot (WP-Piwik 0.8.0) #-#-#-#-# +#. Plugin Name of the plugin/theme +#: wp-piwik.php:111 +#: wp-piwik.php:122 +#: wp-piwik.php:123 +#: wp-piwik.php:146 +msgid "WP-Piwik" +msgstr "آمار" + +#: wp-piwik.php:130 +#: wp-piwik.php:131 +msgid "WPMU-Piwik" +msgstr "آمارگیر چندکاربره" + +#: wp-piwik.php:142 +#: wp-piwik.php:557 +msgid "yesterday" +msgstr "دیروز" + +#: wp-piwik.php:143 +#: wp-piwik.php:558 +msgid "today" +msgstr "امروز" + +#: wp-piwik.php:144 +#: wp-piwik.php:559 +msgid "last 30 days" +msgstr "30 روز اخیر" + +#: wp-piwik.php:179 +msgid "Settings" +msgstr "تنظیمات" + +#: wp-piwik.php:381 +msgid "Change" +msgstr "تغییر" + +#: wp-piwik.php:382 +msgid "Currently shown stats:" +msgstr "آمار نمایش جاری:" + +#: wp-piwik.php:383 +msgid "Current shown stats: <strong>Overall</strong>" +msgstr "آمار نمایش جاری: <strong>مجموع</strong>" + +#: wp-piwik.php:448 +msgid "WP-Piwik Settings" +msgstr "تنظیمات آمار" + +#: wp-piwik.php:455 +#: wp-piwik.php:617 +msgid "Account settings" +msgstr "تنظیمات حساب" + +#: wp-piwik.php:457 +#: wp-piwik.php:619 +msgid "Piwik URL" +msgstr "آدرس پیویک" + +#: wp-piwik.php:461 +#: wp-piwik.php:623 +msgid "Auth token" +msgstr "نشانه اعتبارسنجی" + +#: wp-piwik.php:467 +#: wp-piwik.php:628 +msgid "To enable Piwik statistics, please enter your Piwik base URL (like http://mydomain.com/piwik) and your personal authentification token. You can get the token on the API page inside your Piwik interface. It looks like "1234a5cd6789e0a12345b678cd9012ef"." +msgstr "برای فعال کردن آمار پیویک، لطفاً آدرس نصب پایه پیویک (مانند http://mydomain.com/piwik) و نشانه اعتبارسنجی خود را وارد کنید. شما میتوانید در بخش API رابط کاربری پیویک، آن را به دست بیاورید. این نشانه چیزی مانند این است:"1234a5cd6789e0a12345b678cd9012ef"." + +#: wp-piwik.php:477 +msgid "<strong>Important note:</strong> If you do not host this blog on your own, your site admin is able to get your auth token from the database. So he is able to access your statistics. You should never use an auth token with more than simple view access!" +msgstr "<strong>نکته مهم:</strong> اگر شما وبلاگ را خود میزبانی نکنید، مدیر سایت شما نیز میتواند با دسترسی به پایگاه داده نشانه اعتبارسنجی شما را به دست آورد. بنابراین شما نباید هرگز از نشانه اعتبارسنجی با دسترسی بالاتر از نمایش ساده استفاده کنید." + +#: wp-piwik.php:485 +#: wp-piwik.php:489 +msgid "An error occured" +msgstr "خطائی رخ داده است" + +#: wp-piwik.php:486 +msgid "Please check URL and auth token. You need at least view access to one site." +msgstr "لطفاً آدرس نصب پیویک و نشانه اعتبارسنجی را بررسی کنید. شما باید حداقل دسترسی نمایش به یک سایت داشته باشید." + +#: wp-piwik.php:492 +msgid "Choose site" +msgstr "انتخاب سایت" + +#: wp-piwik.php:511 +#: wp-piwik.php:547 +#: wp-piwik.php:584 +#: wp-piwik.php:658 +msgid "Save settings" +msgstr "ذخیره تنظیمات" + +#: wp-piwik.php:515 +#: wp-piwik.php:643 +msgid "Tracking settings" +msgstr "تنظیمات رهگیری" + +#: wp-piwik.php:521 +msgid "Add script" +msgstr "افزودن اسکریپت" + +#: wp-piwik.php:525 +msgid "If your template uses wp_footer(), WP-Piwik can automatically add the Piwik javascript code to your blog." +msgstr "اگر از قالبی استفاده میکنید که از wp_footer() بهره میگیرد، آنگاه افزونه میتواند به طور خودکار کد جاوااسکریپت را به وبلاگ شما اضافه کند." + +#: wp-piwik.php:528 +msgid "Track 404" +msgstr "رهگیری 404 (صفحه یافت نشد)" + +#: wp-piwik.php:532 +msgid "If you add the Piwik javascript code by wp_footer(), WP-Piwik can automatically add a 404-category to track 404-page-visits." +msgstr "اگر جاواسکریپت پیویک را با wp_footer() استفاده میکنید، آنگاه افزونه میتواند به طور خودکار دسته 404 را به برای رهگیری بازدیدهای صفحات ناموجود اضافه کند." + +#: wp-piwik.php:536 +#: wp-piwik.php:644 +msgid "Tracking filter" +msgstr "پالایه رهگیری" + +msgid "Choose users by user role you do <strong>not</strong> want to track." +msgstr "کاربرانی را که <strong>نمیخواهید</strong> رهگیری شوند با توجه به وظیفه انتخاب کنید." + +msgid "Choose users by user role you do <strong>not</strong> want to track. Requires enabled "Add script"-functionality." +msgstr "کاربرانی را که <strong>نمیخواهید</strong> رهگیری شوند با توجه به وظیفه انتخاب کنید: باید قابلیت "افزودن اسکریپت" فعال باشد." + +#: wp-piwik.php:551 +msgid "Statistic view settings" +msgstr "تنظیمات نمایش آمار" + +#: wp-piwik.php:554 +msgid "Dashboard" +msgstr "پیشخوان" + +#: wp-piwik.php:556 +msgid "No" +msgstr "خیر" + +#: wp-piwik.php:557 +#: wp-piwik.php:558 +#: wp-piwik.php:559 +msgid "Yes" +msgstr "بله" + +#: wp-piwik.php:562 +msgid "Display a dashboard widget to your WordPress dashboard." +msgstr "نمایش یک ویدجت در پیشخوان وردپرس شما." + +#: wp-piwik.php:567 +msgid "Display a shortcut to Piwik itself." +msgstr "نمایش یک میانبر به پیویک اصلی." + +#: wp-piwik.php:568 +msgid "Display to" +msgstr "نمایش در" + +#: wp-piwik.php:579 +msgid "Choose user roles allowed to see the statistics page." +msgstr "انتخاب کاربرانی که مجازند صفحه آمار ر اببینند." + +#: wp-piwik.php:612 +msgid "WPMU-Piwik Settings" +msgstr "تنظیمات پیویک چندکاربره" + +#: wp-piwik.php:636 +msgid "<strong>Important note:</strong> You have to choose a token which provides administration access. WPMU-Piwik will create new Piwik sites for each blog if it is shown the first time and it is not added yet. All users can access their own statistics only, while site admins can access all statistics. To avoid conflicts, you should use a clean Piwik installation without other sites added. The provided themes should use wp_footer, because it adds the Piwik javascript code to each page." +msgstr " <strong>نکته مهم:</strong> شما باید نشانهای با دسترسی مدیریتی انتخاب کنید. پیویک چندکاربره برای هر وبلاگ، اگر اولی نمایش باشد یا اضافه نشده باشد، یک سایت جدید ایجاد میکند. کاربران تنها میتوانند به آمار خود دسترسی داشته باشند، اما مدیر سایت میتواند به همه آمار دسترسی داشته باشد. برای جلوگیری از تعارض، باید یک پیویک نصب شده تمیز بدون هیچ سایت افزوده شده استفاده شود. قالب استفاده شده باید از wp_footer بهره بگیرد، چون پیویک کد جاوااسکریپت را به هر صفحه اضافه میکند." + +#: wp-piwik.php:671 +msgid "If you like WP-Piwik, you can support its development by a donation:" +msgstr "اگر افزونه پیویک برای وردپرس را دوست دارید، با کمک مالی از آن حمایت کنید:" + +#: wp-piwik.php:687 +msgid "My Amazon.de wishlist (German)" +msgstr "مورد علاقههای من در آمازون (آلمانی)" + +#. Plugin URI of the plugin/theme +msgid "http://www.braekling.de/wp-piwik-wpmu-piwik-wordpress/" +msgstr "http://www.braekling.de/wp-piwik-wpmu-piwik-wordpress/" + +#. Description of the plugin/theme +msgid "Adds Piwik stats to your dashboard menu and Piwik code to your wordpress footer." +msgstr "آمار پیویک را به منوی پیشخوان و کد پیویک به پانویس وردپرس اضافه میکند." + +#. Author of the plugin/theme +msgid "André Bräkling" +msgstr "آندرکوت بروملینگ" + +#. Author URI of the plugin/theme +msgid "http://www.braekling.de" +msgstr "http://www.braekling.de" + +msgid "Credits" +msgstr "سازندگان" + +msgid "Thank you very much for your donation" +msgstr "از شما به خاطر هدایایتان تشکر میکنم" + +msgid "and all people flattering this" +msgstr "و تمام افرادی که تشکر کردند" + +msgid "Graphs powered by <a href=\"http://www.jqplot.com/\">jqPlot</a>, an open source project by Chris Leonello. Give it a try! (License: GPL 2.0 and MIT)" +msgstr "نمودارها توسط <a href=\"http://www.jqplot.com/\">jqPlot</a> ایجاد شدهاند, که یک پروژه کدباز است که توسط کریس لئونلو ایجاد شده است. امتحانش کنید (اجازهنامه: GPL 2.0 und MIT)" + +msgid "Thank you very much" +msgstr "از شما بسیار متشکریم" + +msgid ", and" +msgstr "، و" + +msgid "for your translation work" +msgstr "برای فعالیت شما در ترجمه" + +msgid "Thank you very much, all users who send me mails containing criticism, commendation, feature requests and bug reports! You help me to make WP-Piwik much better." +msgstr "از شما بسیار متشکریم، تمام کاربرانی که به من ایمیل زدند، تشکر کردند، و درخواست ویژگی یا گزارش باگ انجام دادند. ش ما کمک کردید که پیویک وردپرس بسیار بهتر شود." + +msgid "Thank <strong>you</strong> for using my plugin. It is the best commendation if my piece of code is really used!" +msgstr "از <strong>شما</strong> به خاطر استفاده از این افزونه متشکریم. بهترین تقدیر این است که کدی که من نوشتم واقعاً استفاده شود." + +msgid "Changes saved" +msgstr "تغییرات ذخیره شد" + +msgid "installed" +msgstr "نصب شده" + +msgid "Next you should connect to Piwik" +msgstr "سپس باید به پیویک متصل شوید" + +msgid "Please validate your configuration" +msgstr "لطفاً صحت تنظیمات خود را بررسی کنید" + +msgid "Default date" +msgstr "تاریخ پیشگزیده" + +msgid "Default date shown on statistics page." +msgstr "دادههای پیشگزیده نمایش داده شده در صفحه آمار" + +msgid "Dashboard data" +msgstr "داده پیشخوان" + +msgid "Display an overview widget to your WordPress dashboard." +msgstr "نمایش آمار کلی در پیشخوان وردپرس شما." + +msgid "Boad chart" +msgstr "صفحه آمار" + +msgid "Display a visitor graph widget to your WordPress dashboard." +msgstr "نمایش نمودار بازدید کنندگان در پیشخوان وردپرس شما." + +msgid "No data available." +msgstr "دادهای در دسترس نیست" + diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-it_IT.mo b/wp-content/plugins/wp-piwik/languages/wp-piwik-it_IT.mo new file mode 100644 index 0000000000000000000000000000000000000000..1752a696b39c423f8b130ecbb7325ba99f558603 Binary files /dev/null and b/wp-content/plugins/wp-piwik/languages/wp-piwik-it_IT.mo differ diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-it_IT.po b/wp-content/plugins/wp-piwik/languages/wp-piwik-it_IT.po new file mode 100644 index 0000000000000000000000000000000000000000..afc5412114028b792d1b48f663f90fc25a1e2523 --- /dev/null +++ b/wp-content/plugins/wp-piwik/languages/wp-piwik-it_IT.po @@ -0,0 +1,740 @@ +# Translation of the WordPress plugin WP-Piwik 0.8.0 by André Bräkling. +# Copyright (C) 2010 André Bräkling +# This file is distributed under the same license as the WP-Piwik package. +# +# André Bräkling <webmaster@braekling.de>, 2011. +# Stef Binde <ste@vogliaditerra.com>, 2013. +msgid "" +msgstr "" +"Project-Id-Version: WP-Piwik 0.8.4\n" +"Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-piwik\n" +"POT-Creation-Date: 2010-07-19 18:06+0000\n" +"PO-Revision-Date: 2013-02-21 18:11+0100\n" +"Last-Translator: Stef Binde <ste@vogliaditerra.com>\n" +"Language-Team: Italian <ste@vogliaditerra.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Lokalize 1.5\n" + +#: dashboard/browsers.php:12 dashboard/browsers.php:33 +msgid "Browser" +msgstr "Browser" + +#: dashboard/browsers.php:22 dashboard/pages.php:43 dashboard/screens.php:22 +#: dashboard/systems.php:22 +msgid "Others" +msgstr "Altri " + +#: dashboard/browsers.php:34 dashboard/keywords.php:17 dashboard/pages.php:22 +#: dashboard/screens.php:33 dashboard/systems.php:35 dashboard/visitors.php:53 +#: dashboard/websites.php:19 wp-piwik.php:305 +msgid "Unique" +msgstr "Unici" + +#: dashboard/browsers.php:35 dashboard/plugins.php:33 dashboard/screens.php:34 +#: dashboard/systems.php:36 +msgid "Percent" +msgstr "Percentuale" + +#: dashboard/keywords.php:12 +msgid "Keywords" +msgstr "Parole chiave" + +#: dashboard/keywords.php:17 +msgid "Keyword" +msgstr "Parole chiavi" + +#: dashboard/overview.php:12 +msgid "Overview" +msgstr "Resoconto" + +#: dashboard/overview.php:42 dashboard/visitors.php:24 +msgid "Visitors" +msgstr "Visitatori" + +#: dashboard/overview.php:43 +msgid "Unique visitors" +msgstr "Visitatori unici" + +#: dashboard/overview.php:44 +msgid "Page views" +msgstr "Pagine viste" + +#: dashboard/overview.php:45 +msgid "Max. page views in one visit" +msgstr "Massimo di pagine viste in una visita" + +#: dashboard/overview.php:46 +msgid "Total time spent" +msgstr "Tempo di rimanenza" + +msgid "Time/visit" +msgstr "Media durata per visita" + +#: dashboard/overview.php:47 +msgid "Bounce count" +msgstr "Rimbalzi " + +#: dashboard/overview.php:49 wp-piwik.php:563 +msgid "Shortcut" +msgstr "Scorciatoia" + +#: dashboard/pages.php:13 +msgid "Pages" +msgstr "Pagine" + +#: dashboard/pages.php:21 +msgid "Page" +msgstr "Pagina" + +#: dashboard/pages.php:23 dashboard/plugins.php:32 dashboard/visitors.php:52 +msgid "Visits" +msgstr "Visite" + +#: dashboard/plugins.php:12 dashboard/plugins.php:31 +msgid "Plugins" +msgstr "Plugins" + +#: dashboard/screens.php:12 dashboard/screens.php:32 +msgid "Resolution" +msgstr "Risoluzione" + +#: dashboard/systems.php:12 dashboard/systems.php:34 +msgid "Operating System" +msgstr "Sistemi operativi" + +#: dashboard/visitors.php:51 +msgid "Date" +msgstr "Data" + +#: dashboard/visitors.php:54 +msgid "Bounced" +msgstr "Uscite" + +#: dashboard/visitors.php:67 +msgid "Unique TOTAL" +msgstr "Unici totali" + +#: dashboard/visitors.php:67 +msgid "Sum" +msgstr "Somma" + +#: dashboard/visitors.php:67 +msgid "Avg" +msgstr "Media" + +#: dashboard/websites.php:12 +msgid "Websites" +msgstr "Provenienze" + +#: dashboard/websites.php:18 +msgid "Website" +msgstr "Pagina web" + +#: wp-piwik.php:110 wp-piwik.php:365 +msgid "Piwik Statistics" +msgstr "Statistiche Piwik" + +#. #-#-#-#-# plugin.pot (WP-Piwik 0.8.0) #-#-#-#-# +#. Plugin Name of the plugin/theme +#: wp-piwik.php:111 wp-piwik.php:122 wp-piwik.php:123 wp-piwik.php:146 +msgid "WP-Piwik" +msgstr "WP-Piwik" + +#: wp-piwik.php:130 wp-piwik.php:131 +msgid "WPMU-Piwik" +msgstr "WPMU-Piwik" + +#: wp-piwik.php:142 wp-piwik.php:557 +msgid "yesterday" +msgstr "ieri" + +#: wp-piwik.php:143 wp-piwik.php:558 +msgid "today" +msgstr "oggi" + +#: wp-piwik.php:144 wp-piwik.php:559 +msgid "last30" +msgstr "ultimi 30 giorni" + +#: wp-piwik.php:144 wp-piwik.php:559 +msgid "last 30 days" +msgstr "ultimi 30 giorni" + +#: wp-piwik.php:179 +msgid "Settings" +msgstr "Impostazioni" + +#: wp-piwik.php:381 +msgid "Change" +msgstr "Cambia" + +#: wp-piwik.php:382 +msgid "Currently shown stats:" +msgstr "Statistiche mostrate attualmente:" + +#: wp-piwik.php:383 +msgid "Current shown stats: <strong>Overall</strong>" +msgstr "Statistiche mostrate attualmente<strong>Tutte<strong>" + +#: wp-piwik.php:448 +msgid "WP-Piwik Settings" +msgstr "Impostazioni di WP-Piwik" + +#: wp-piwik.php:455 wp-piwik.php:617 +msgid "Account settings" +msgstr "Impostazioni Account" + +#: wp-piwik.php:457 wp-piwik.php:619 +msgid "Piwik URL" +msgstr "URL di Piwik" + +#: wp-piwik.php:461 wp-piwik.php:623 +msgid "Auth token" +msgstr "Auth Token" + +#: wp-piwik.php:467 wp-piwik.php:628 +msgid "" +"To enable Piwik statistics, please enter your Piwik" +" base URL (like http://mydomain.com/piwik) and your" +" personal authentification token. You can get the token" +" on the API page inside your Piwik interface. It looks" +" like "1234a5cd6789e0a12345b678cd9012ef"." +msgstr "" +"Per abilitare le statistiche di Piwik devi inserire URL della installazione" +"di Piwik (p.e.. http://miosito.com/piwik) e la chiave personale di " +"autenticazione (Token). La chiave si trova nell'interfaccia di Piwik sulla " +"pagina API. Ha un aspetto simile a: " +""1234a5cd6789e0a12345b678cd9012ef"." + +#: wp-piwik.php:477 +msgid "" +"<strong>Important note:</strong> If you do not host this blog on your own, " +"your site admin is able to get your auth token from the database. So he is " +"able to access your statistics. You should never use an auth token with more " +"than simple view access!" +msgstr "" +"<strong>Nota importante:</strong><strong>Nota importante:</strong> Se non è " +"un hosting personale l'amministratore del sito può passarti il codice di " +"autorizzazione (auth token) dal database. Mai usare un auth token con più " +"diritti che lettura." + +#: wp-piwik.php:485 wp-piwik.php:489 +msgid "An error occured" +msgstr "E' successo un errore" + +#: wp-piwik.php:486 +msgid "" +"Please check URL and auth token. You need at least view access to one site." +msgstr "" +"Controlla URL e la chiave di autenticazione (token). Come minimo occorrono " +"diritti di lettura per una pagina." + +#: wp-piwik.php:492 +msgid "Choose site" +msgstr "Seleziona pagina" + +#: wp-piwik.php:511 wp-piwik.php:547 wp-piwik.php:584 wp-piwik.php:658 +msgid "Save settings" +msgstr "Salva la configurazione" + +#: wp-piwik.php:515 wp-piwik.php:643 +msgid "Tracking settings" +msgstr "Impostazioni Tracking" + +#: wp-piwik.php:521 +msgid "Add script" +msgstr "Aggiungi script" + +#: wp-piwik.php:525 +msgid "" +"If your template uses wp_footer(), WP-Piwik can automatically add the Piwik " +"javascript code to your blog." +msgstr "" +"Se il tuo template usa wp_footer() Piwik ci può inserire il codice javascript " +"nel tuo blog automaticamente." + +#: wp-piwik.php:528 +msgid "Track 404" +msgstr "Tracciamento 404" + +#: wp-piwik.php:532 +msgid "WP-Piwik can automatically add a 404-category to track 404-page-visits." +msgstr "" +"WP-Piwik può aggiungere in automatico una categoria per tracciare visite 404." + +#: wp-piwik.php:536 wp-piwik.php:644 +msgid "Tracking filter" +msgstr "Filtro tracciamento" + +msgid "Choose users by user role you do <strong>not</strong> want to track." +msgstr "Seleziona utenti per ruolo che <b>non</b> vuoi tracciare." + +msgid "" +"Choose users by user role you do <strong>not</strong> want to track. Requires " +"enabled "Add script"-functionality." +msgstr "" +"Seleziona utenti per ruolo che <b>non</b> vuoi tracciare. " +"La funziona tracciamento deve essere abilita." + +#: wp-piwik.php:551 +msgid "Statistic view settings" +msgstr "Impostazioni per le statistiche" + +#: wp-piwik.php:554 +msgid "Dashboard" +msgstr "Dashboard" + +#: wp-piwik.php:556 +msgid "No" +msgstr "No" + +#: wp-piwik.php:557 wp-piwik.php:558 wp-piwik.php:559 +msgid "Yes" +msgstr "Sì" + +#: wp-piwik.php:562 +msgid "Display a dashboard widget to your WordPress dashboard." +msgstr "Visualizza un widget per la dashboard di Wordpress." + +#: wp-piwik.php:567 +msgid "Display a shortcut to Piwik itself." +msgstr "Visualizzare una scorciatoia per il Piwik principale." + +#: wp-piwik.php:568 +msgid "Display to" +msgstr "visualizzare per" + +#: wp-piwik.php:579 +msgid "Choose user roles allowed to see the statistics page." +msgstr "Seleziona il ruolo per poter accedere alla pagina di statistiche." + +#: wp-piwik.php:612 +msgid "WPMU-Piwik Settings" +msgstr "Impostazioni WPMU-Piwik" + +#: wp-piwik.php:636 +msgid "" +"<strong>Important note:</strong> You have to choose a token which provides " +"administration access. WPMU-Piwik will create new Piwik sites for each blog " +"if it is shown the first time and it is not added yet. All users can access " +"their own statistics only, while site admins can access all statistics. To " +"avoid conflicts, you should use a clean Piwik installation without other " +"sites added. The provided themes should use wp_footer, because it adds the " +"Piwik javascript code to each page." +msgstr "" +"<strong>Nota importante:</strong> Devi scegliere un token che permette " +"accesso come amministratore. WPMU-Piwik creerà nuove pagine Piwik per " +"ciascuno blog nuovo non aggiunto già. Gli utenti possono accedere alle loro " +"statistiche mentre gli amministratori del sito possono accedere a tutte le " +"statistiche. Per evitare conflitti dovresti usare una installazione Piwik " +"fresca e pulita. I temi scelti dovrebbero usare wp_footer per aggiungere il " +"codice ad ogni pagina." + +#: wp-piwik.php:671 +msgid "If you like WP-Piwik, you can support its development by a donation:" +msgstr "" +"Se ti piace WP-Piwik e vuoi contribuire al suo sviluppo, considera una " +"donazione." + +#: wp-piwik.php:687 +msgid "My Amazon.de wishlist (German)" +msgstr "Mia wishlist Amazon (tedesco)" + +#. Plugin URI of the plugin/theme +msgid "http://www.braekling.de/wp-piwik-wpmu-piwik-wordpress/" +msgstr "http://www.braekling.de/wp-piwik-wpmu-piwik-wordpress/" + +#. Description of the plugin/theme +msgid "" +"Adds Piwik stats to your dashboard menu and Piwik code to your wordpress " +"footer." +msgstr "" +"Aggiunge le statistiche di Piwik al menu della Dashboard è il codice di " +"Piwik nel piè di pagina di Wordpress." + +#. Author of the plugin/theme +msgid "André Bräkling" +msgstr "André Bräkling" + +#. Author URI of the plugin/theme +msgid "http://www.braekling.de" +msgstr "http://www.braekling.de" + +msgid "Credits" +msgstr "Ringraziamenti" + +msgid "Thank you very much for your donation" +msgstr "Grazie per le vostre donazioni" + +msgid "and all people flattering this" +msgstr "e a tutti gli utenti che cliccano Flattr" + +msgid "" +"Graphs powered by <a href=\"http://www.jqplot.com/\">jqPlot</a>, an open " +"source project by Chris Leonello. Give it a try! (License: GPL 2.0 and MIT)" +msgstr "" +"I grafici sono generati con <a href=\"http://www.jqplot.com/\">jqPlot</a> " +"un progetto Open-Source di Chris Leonello. Provalo!" +"(Licenza: GPL 2.0 e MIT)" + +msgid "Thank you very much" +msgstr "Mille grazie" + +msgid ", and" +msgstr ", e" + +msgid "for your translation work" +msgstr "per il vostro lavoro di traduzione" + +msgid "" +"Thank you very much, all users who send me mails containing criticism, " +"commendation, feature requests and bug reports! You help me to make WP-Piwik " +"much better." +msgstr "" +"Un ringraziamento sentito per tutti gli utenti che mi inviano critiche, " +"proposte e bug reports! Mi aiutate di migliorare WP-Piwik." + +msgid "" +"Thank <strong>you</strong> for using my plugin. It is the best commendation " +"if my piece of code is really used!" +msgstr "" +"Grazie <strong> a te</strong> per usare il mio plugin. E' la più grande " +"soddisfazione se il mio codice viene usato realmente!" + +msgid "Changes saved" +msgstr "Cambiamenti salvati" + +msgid "installed" +msgstr "installato" + +msgid "Next you should connect to Piwik" +msgstr "Adesso crea una connessione a Piwik" + +msgid "Please validate your configuration" +msgstr "Per favore controlla la tua configurazione" + +msgid "Default date" +msgstr "Default data" + +msgid "Default date shown on statistics page." +msgstr "Il giorno che verrà mostrato sulla pagina delle statistiche." + +msgid "Dashboard data" +msgstr "Dati del dashboard" + +msgid "Display an overview widget to your WordPress dashboard." +msgstr "Visualizza un widget per il resoconto sulla dashboard di Wordpress." + +msgid "Board chart" +msgstr "Board-Chart" + +msgid "Display a visitor graph widget to your WordPress dashboard." +msgstr "Visualizza un grafico con le visite sul Dashboard di Wordpress." + +msgid "No data available." +msgstr "Nessun dato disponibile." + +msgid "" +"Check this to automatically choose your blog from your Piwik sites by URL. If " +"your blog is not added to Piwik yet, WP-Piwik will add a new site." +msgstr "" +"Spunta questo per selezionare automaticamente il tuo blog tra i siti Piwik " +"tramite l'URL. Se il tuo blog non è inserito in Piwik Wp-Piwik lo aggiungerà." + +msgid "If you add the Piwik javascript code by wp_footer()," +msgstr "Se inserisci il codice di Piwik tramite wp_footer() nel tuo blog," + +msgid "WP-Piwik can automatically use js/index.php instead of piwik.js. See" +msgstr "" +"WP-Piwik può usare automaticamente js/index.php al posto di piwik.js. Vedi" + +msgid "" +"WP-Piwik can automatically force the Tracking Code to sent data in POST. See" +msgstr "" +"WP-Piwik può automaticamente forzare l'invio del codice di tracciamento in " +"POST. Vedi" + +msgid "Avoid mod_security" +msgstr "Evita mod_security" + +msgid "Determined site" +msgstr "Sito rilevato" + +msgid "Auto config" +msgstr "Configurazione automatica" + +msgid "Use js/index.php" +msgstr "Usa js/index.php" + +msgid "Show overview" +msgstr "Visualizza resoconto" + +msgid "Hide overview" +msgstr "Nessun resoconto" + +msgid "SEO <em>(slow!)</em>" +msgstr "SEO <em>(lento!)</em>" + +msgid "Display SEO ranking data on statistics page. <em>(Slow!)</em>" +msgstr "" +"Visualizza dati SEO ranking sulla pagina delle statistiche. <em>(Lento!)</em>" + +msgid "" +"Configure WP-Piwik widgets to be shown on your WordPress Home Dashboard." +msgstr "" +"Configura i widget di WP-Piwik per il resoconto sulla Dashboard di Wordpress." + +msgid "SEO data" +msgstr "Dati SEO" + +msgid "the Piwik team itself" +msgstr "il team di Piwik stesso" + +msgid "Metabox support inspired by" +msgstr "Supporto Metabox ispirato da" + +msgid "WP-Piwik support board" +msgstr "WP-Piwik Support Board" + +msgid "no registration required, English & German" +msgstr "nessuna registrazione, inglese e tedesco" + +msgid "WordPress.org forum about WP-Piwik" +msgstr "WordPress.org Forum di WP-Piwik" + +msgid "WordPress.org registration required, English" +msgstr "Registrazione presso Wordpress.org obbligatorio, in inglese" + +msgid "Please don't forget to vote the compatibility at the" +msgstr "Non scordarti di dare una valutazione di compatibilità nella " + +msgid "Donate" +msgstr "Donazioni" + +msgid "My Amazon.de wishlist" +msgstr "Mia lista di desideri pressom Amazon.de" + +msgid "Piwik error" +msgstr "Errore di Piwik" + +msgid "Important" +msgstr "Wichtig" + +msgid "Thanks for using WP-Piwik!" +msgstr "Grazie per usare WP-Piwik!" + +msgid "Auto site configuration is" +msgstr "La configurazione automatico è" + +msgid "Tracking code insertion is" +msgstr "L'inserimento del codice tracciamento è" + +msgid "enabled" +msgstr "attivato" + +msgid "disabled" +msgstr "disattivato" + +msgid "You are using Piwik" +msgstr "Stai usando Piwik" + +msgid "and" +msgstr "e" + +msgid "" +"Error: cURL is not enabled and fopen is not allowed to open URLs. WP-Piwik " +"won't be able to connect to Piwik." +msgstr "" +"Errore: cUrl non è attivato e fopen non ha i permessi per aprire Url. " +"Wp-Piwik non può connettersi a Piwik." + +msgid "" +"<strong>Important note:</strong> If you do not host this blog on your own, " +"your site admin is able to get your auth token from the database." +msgstr "" +"<strong>Nota importante:</strong> Se non è un hosting personale " +"l'amministratore del sito può passarti il codice di autorizzazione (auth " +"token) dal database." + +msgid "Add tracking code" +msgstr "Inserisci codice tracciamento" + +msgid "Tracking code preview" +msgstr "Previsione codice" + +msgid "Piwik Settings" +msgstr "Impostazioni di Piwik" + +msgid "Statistics" +msgstr "Statistiche" + +msgid "" +"Either allow_url_fopen has to be enabled <em>or</em> cURL has to be available:" +msgstr "" +"O allow_url_fopen deve essere attivato <em>o</em> cURL deve essere " +"disponibile:" + +msgid "cURL is" +msgstr "cURL è" + +msgid "allow_url_fopen is" +msgstr "allow_url_fopen è" + +msgid "not" +msgstr "non" + +msgid "available" +msgstr "disponibile" + +msgid "Test script result" +msgstr "Risultati del test" + +msgid "Please confirm your reset request" +msgstr "Conferma la tua richiesta di reset" + +msgid "" +"YES, please reset <strong>all</strong> WP-Piwik settings <strong>except<" +"/strong> auth token and Piwi URL." +msgstr "" +"Sì, resetta <strong>tutte </strong> le impostazioni di WP-Piwiki con " +"eccezione del codice di autenticazione e l'Url di Piwik." + +msgid "WP-Piwik reset done" +msgstr "WP-Piwik è stato resettato" + +msgid "Get more debug information" +msgstr "Ottieni più informazioni per il debug" + +msgid "Run test script" +msgstr "Avvia script di test" + +msgid "Get site configuration details" +msgstr "Ottieni dettagli sulla configurazione del sito" + +msgid "Reset WP-Piwik settings except auth token and Piwik URL" +msgstr "" +"Resetta tutte le impostazioni di WP-Piwik, con eccezione del codice di " +"autenticazione e l'URL di Piwik" + +msgid "" +"You have to enter your auth token and the Piwik URL before you can access " +"more debug functions." +msgstr "" +"Devi inserire il tuo codice di autenticazione e l'URL di Piwik prima che puoi " +"usare più funzioni debug." + +msgid "Latest support threads on WordPress.org" +msgstr "Gli ultimi thread di supporto su WordPress.org" + +msgid "" +"This will not affect Piwik itself. Resetting large networks may take some " +"minutes." +msgstr "" +"Questo non avrà affetto su Piwik stesso. Resettare grandi reti potrebbe " +"richiedere alcuni minuti." + +msgid ", and all people flattering this" +msgstr ", è tutti che usano Flattr per donazioni a WP-Piwik" + +msgid "Disable time limit" +msgstr "Disattivare limite del tempo" + +msgid "Use set_time_limit(0) if stats page causes a time out." +msgstr "" +"Usa set_time_limit(0) nel caso che la pagina delle statistiche genera un " +"timeout." + +msgid "in network mode" +msgstr "in modalità rete" + +msgid "To enable Piwik statistics, please enter" +msgstr "Per attivare le statistiche di Piwik devi inserire" + +msgid "" +"your Piwik base URL (like http://mydomain.com/piwik) or your Piwik server " +"path (like /var/www/mydomain.com/httpdocs/piwik/)" +msgstr "" +"L'URL della tua installazione di Piwik (esempio: http://miosito.com/piwik) o " +"il " +"percorso server all'installazione di Piwik (esempio: " +"/var/www/miodominio.com/httpdocs/piwik/)" + +msgid "" +"your personal Piwik authentification token. You can get the token on the API " +"page inside your Piwik interface. It looks like " +""1234a5cd6789e0a12345b678cd9012ef"." +msgstr "" +"La chiave personale di autenticazione (Token). La chiave puoi ottenere" +"nell'interfaccia di Piwik sulla pagina API. Ha un aspetto simile a: " +""1234a5cd6789e0a12345b678cd9012ef"." + +msgid "No idea what I'm talking about?" +msgstr "Non ci hai capito niente?" + +msgid "Get help." +msgstr "Qui ottieni aiuto." + +msgid "Piwik path" +msgstr "Percorso di Piwik " + +msgid "Disable cookies" +msgstr "Disattivare cookies" + +msgid "Disable all tracking cookies for a visitor." +msgstr "Disattiva tutti cookie per i visitatori." + +msgid "Show graph on WordPress Toolbar" +msgstr "Visualizza un grafico nella barra degli strumenti di Wordpress" + +msgid "Display the last 30 days visitor stats on WordPress Toolbar." +msgstr "" +"Visualizza la statistica delle visite negli ultimi 30 giorni nella barra " +"degli strumenti di Wordpress." + +msgid "" +"Graphs powered by <a href=\"http://www.jqplot.com/\">jqPlot</a> (License: GPL " +"2.0 and MIT) and <a href=\"http://omnipotent.net/jquery.sparkline/\">jQuery " +"Sparklines</a> (License: New BSD License)." +msgstr "" +"I grafici sono generati con <a href=\"http://wwwjqplot.com/\">jqPlot</a> " +"e <a href=\"http://omnipotent.net/jquery.sparkline/\">jQuery " +"Sparklines</a> (Licenza: New BSD License)." + +msgid "Tabbed settings page suggested by the" +msgstr "La pagina delle impostazioni usando i tab consigliato di" + +msgid "" +"If you like to use the PHP API and also to enable tracking by WP-Piwik, " +"please enter your Piwik URL, too. Otherwise your tracking code may be " +"erroneous." +msgstr "" +"Se preferisci usare PHP API e il tracciamento con WP-Piwik, " +"inserisci anche l'Url di Piwik. Altrimenti il tuo codice di tracciamento " +"potrebbero contenere degli errori." + +msgid "Title" +msgstr "Titolo" + +msgid "Site ID (Piwik)" +msgstr "ID Pagina (Piwik)" + +msgid "Expert Settings" +msgstr "Impostazioni per esperti" + +msgid "Disable SSL peer verification" +msgstr "Disattivare verificazione Peer SSL" + +msgid "not recommended" +msgstr "sconsigliato" + +msgid "Invalid path. Please enter the file path to Piwik." +msgstr "Percorso non valido. Per favore inserire il percorso corretto a Piwik." + +msgid "Enable shortcodes in post or page content." +msgstr "Attiva scorciatoie nel contenuto di articoli e pagine. " + + diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-lt_LT.mo b/wp-content/plugins/wp-piwik/languages/wp-piwik-lt_LT.mo new file mode 100644 index 0000000000000000000000000000000000000000..373ec9c2a20e33fbfbcca7e385bd69761fbeac10 Binary files /dev/null and b/wp-content/plugins/wp-piwik/languages/wp-piwik-lt_LT.mo differ diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-lt_LT.po b/wp-content/plugins/wp-piwik/languages/wp-piwik-lt_LT.po new file mode 100644 index 0000000000000000000000000000000000000000..28ecd65adfe7862d9bbf6fb288a98f5a0069f209 --- /dev/null +++ b/wp-content/plugins/wp-piwik/languages/wp-piwik-lt_LT.po @@ -0,0 +1,186 @@ +# WP-Piwik 0.3.0 - Belorussian language file +# Copyright (C) 2009 Andre Braekling +# This file is distributed under the same license as the WP-Piwik package. +# Andre Braekling <webmaster@braekling.de>, 2009. +# FatCow http://www.fatcow.com, 2009. +msgid "" +msgstr "" +"Project-Id-Version: 0.3.0\n" +"Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-piwik\n" +"POT-Creation-Date: 2009-06-09 19:05+0000\n" +"PO-Revision-Date: 2011-07-28 11:57+0200\n" +"Last-Translator: Natalija Strazdauskienė <ciuvir@mail.ru>\n" +"Language-Team: Nata Strazda <nata@epastas.lt>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Lithuanian\n" +"X-Poedit-Country: LITHUANIA\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: dashboard/browsers.php:8 +#: dashboard/browsers.php:37 +msgid "Browser" +msgstr "Naršyklė" + +msgid "Resolution" +msgstr "Rezoliucija" + +msgid "Operating System" +msgstr "Opercainė Sistema" + +#: dashboard/browsers.php:37 +#: dashboard/keywords.php:13 +#: dashboard/visitors.php:56 +#: dashboard/websites.php:13 +msgid "Unique" +msgstr "Unikalus" + +#: dashboard/browsers.php:37 +msgid "Percent" +msgstr "Procentai" + +#: dashboard/keywords.php:8 +msgid "Keywords" +msgstr "Raktiniai žodžiai" + +#: dashboard/keywords.php:13 +msgid "Keyword" +msgstr "Raktinis žodis" + +#: dashboard/overview.php:8 +msgid "Overview" +msgstr "Aprašymas" + +#: dashboard/overview.php:16 +#: dashboard/visitors.php:21 +msgid "Visitors" +msgstr "Lankytojai" + +#: dashboard/overview.php:17 +msgid "Unique visitors" +msgstr "Unikalių lankytojų" + +#: dashboard/overview.php:18 +msgid "Page views" +msgstr "Puslapio peržiūros" + +#: dashboard/overview.php:19 +msgid "Max. page views in one visit" +msgstr "Maksimalus puslapių peržiūrų skaičius per vieną apsilankymą" + +#: dashboard/overview.php:20 +msgid "Total time spent by visitors" +msgstr "Iš viso praleista lankytojais laiko" + +#: dashboard/overview.php:21 +msgid "Bounce count" +msgstr "Atsisakymų skaičius" + +#: dashboard/visitors.php:56 +msgid "Date" +msgstr "Data" + +#: dashboard/visitors.php:56 +msgid "Visits" +msgstr "Apsilankymai" + +#: dashboard/visitors.php:56 +msgid "Bounced" +msgstr "Atsisakymai" + +#: dashboard/websites.php:8 +msgid "Websites" +msgstr "Svetainės" + +#: dashboard/websites.php:13 +msgid "Website" +msgstr "Svetainė" + +#: wp-piwik.php:49 +#: wp-piwik.php:147 +msgid "Piwik Statistics" +msgstr "Piwik statistika" + +#. #-#-#-#-# plugin.pot (PACKAGE VERSION) #-#-#-#-# +#. Plugin Name of an extension +#: wp-piwik.php:49 +msgid "WP-Piwik" +msgstr "WP-Piwik" + +#: wp-piwik.php:53 +#: wp-piwik.php:185 +msgid "WP-Piwik Settings" +msgstr "WP-Piwik nustatymai" + +#: wp-piwik.php:59 +msgid "Settings" +msgstr "Nustatymai" + +#: wp-piwik.php:112 +msgid "Remote access to Piwik not possible. Enable allow_url_fopen or CURL." +msgstr "Nuotolinė prieiga prie Piwik neįmanoma. Įjunkite allow_url_fopen arba Curl." + +#: wp-piwik.php:190 +msgid "Account settings" +msgstr "Paskyros nustatymai" + +#: wp-piwik.php:192 +msgid "Piwik URL" +msgstr "Piwik URL" + +#: wp-piwik.php:196 +msgid "Auth token" +msgstr "Autentifikavimo požymis" + +#: wp-piwik.php:200 +msgid "To enable Piwik statistics, please enter your Piwik base URL (like http://mydomain.com/piwik) and your personal authentification token. You can get the token on the API page inside your Piwik interface. It looks like "1234a5cd6789e0a12345b678cd9012ef"." +msgstr "Kad įjungti Piwik statistiką, prašome įvesti savo Piwik bazinį URL (pvz. http://mydomain.com/piwik) ir savo asmens autentifikavimo raktą. Galite gauti raktą API puslapyje savo Piwik sąsajos viduje. Jis atrodo kaip "1234a5cd6789e0a12345b678cd9012ef"." + +#: wp-piwik.php:205 +#: wp-piwik.php:207 +msgid "An error occured" +msgstr "Įvyko klaida" + +#: wp-piwik.php:205 +msgid "Please check URL and auth token. You need at least view access to one site." +msgstr "Prašome patikrinti URL ir valdymo raktą. Jums reikia tai, kad turėti prieigą prie vienos svetainės." + +#: wp-piwik:php:215 +msgid "Choose site" +msgstr "Pasirinkti svetainę" + +#: wp-piwik.php:221 +msgid "If your template uses wp_footer(), WP-Piwik can automatically add the Piwik javascript code to your blog." +msgstr "Jei jūsų šablonas naudoja wp_footer() WP-Piwik gali automatiškai įtraukti Piwik JavaScript kodą į jūsų dienoraštį." + +#: wp-piwik.php:226 +msgid "Add script to wp_footer()" +msgstr "Pridėti scenarijų wp_footer()" + +msgid "Tracking filter" +msgstr "Stebėjimo filtras" + +msgid "Choose users by user role you do <strong>not</strong> want to track. Requires enabled "Add script to wp_footer()"-functionality." +msgstr "Pasirinkite vartotojus pagal jų vaidmenis, kuriuos <strong>nenorite</strong> sekti. Reikalaujama, kad būtų "įjungtas skripto wp_footer()"-funkcionalumas." + +#: wp-piwik.php:229 +msgid "Save settings" +msgstr "Išsaugoti nustatymus" + +#. Plugin URI of an extension +msgid "http://dev.braekling.de/wordpress-plugins/dev/wp-piwik/index.html" +msgstr "http://dev.braekling.de/wordpress-plugins/dev/wp-piwik/index.html" + +#. Description of an extension +msgid "Adds Piwik stats to your dashboard menu and Piwik code to your wordpress footer." +msgstr "Prideda Piwik statistiką į savo įrankių juostos meniu ir Piwik kodą į savo WordPress poraštę." + +#. Author of an extension +msgid "André Bräkling" +msgstr "André Bräkling" + +#. Author URI of an extension +msgid "http://www.braekling.de" +msgstr "http://www.braekling.de" + diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-nl_NL.mo b/wp-content/plugins/wp-piwik/languages/wp-piwik-nl_NL.mo index ce1d0dedb8d7bd635f2dcdc68d4261cdd107f0b2..592a343ab0f7bcb23a82d5bac0bc6b85b9e735f2 100644 Binary files a/wp-content/plugins/wp-piwik/languages/wp-piwik-nl_NL.mo and b/wp-content/plugins/wp-piwik/languages/wp-piwik-nl_NL.mo differ diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-nl_NL.po b/wp-content/plugins/wp-piwik/languages/wp-piwik-nl_NL.po index cb560f3eedcf216b0cd72aa43166c8d9ddd79546..8b65b217e7ce5e6fe7bbc35f16ebe96aae8d66df 100644 --- a/wp-content/plugins/wp-piwik/languages/wp-piwik-nl_NL.po +++ b/wp-content/plugins/wp-piwik/languages/wp-piwik-nl_NL.po @@ -109,7 +109,7 @@ msgstr "Bezoeken" #: dashboard/visitors.php:56 msgid "Bounced" -msgstr "Geweigerd" +msgstr "Bounced" #: dashboard/websites.php:8 msgid "Websites" diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-ro_RO.mo b/wp-content/plugins/wp-piwik/languages/wp-piwik-ro_RO.mo new file mode 100644 index 0000000000000000000000000000000000000000..fcdf76cb27114a8b62e851176d851efbfba34b15 Binary files /dev/null and b/wp-content/plugins/wp-piwik/languages/wp-piwik-ro_RO.mo differ diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-ro_RO.po b/wp-content/plugins/wp-piwik/languages/wp-piwik-ro_RO.po new file mode 100644 index 0000000000000000000000000000000000000000..e381e3dc6dbb5b8527140dfa9d55a18632b11513 --- /dev/null +++ b/wp-content/plugins/wp-piwik/languages/wp-piwik-ro_RO.po @@ -0,0 +1,184 @@ +# This file is distributed under the same license as the WP-Piwik package. +# Andre Braekling <webmaster@braekling.de>, 2009. +# FatCow http://www.fatcow.com, 2009. +msgid "" +msgstr "" +"Project-Id-Version: 0.3.0\n" +"Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-piwik\n" +"POT-Creation-Date: 2009-06-09 19:05+0000\n" +"PO-Revision-Date: 2012-03-14 16:52+0200\n" +"X-Poedit-Language: Romanian\n" +"X-Poedit-Country: Romania\n" +"Language-Team: Web Geeks\n" +"Last-Translator: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: dashboard/browsers.php:8 +#: dashboard/browsers.php:37 +msgid "Browser" +msgstr "Browser-ul" + +msgid "Resolution" +msgstr "Rezoluţie" + +msgid "Operating System" +msgstr "Sistem de operare" + +#: dashboard/browsers.php:37 +#: dashboard/keywords.php:13 +#: dashboard/visitors.php:56 +#: dashboard/websites.php:13 +msgid "Unique" +msgstr "Unic" + +#: dashboard/browsers.php:37 +msgid "Percent" +msgstr "%" + +#: dashboard/keywords.php:8 +msgid "Keywords" +msgstr "Cuvinte cheie" + +#: dashboard/keywords.php:13 +msgid "Keyword" +msgstr "Cuvinte cheie" + +#: dashboard/overview.php:8 +msgid "Overview" +msgstr "Prezentare generală" + +#: dashboard/overview.php:16 +#: dashboard/visitors.php:21 +msgid "Visitors" +msgstr "Vizitatori" + +#: dashboard/overview.php:17 +msgid "Unique visitors" +msgstr "Vizitatori unici" + +#: dashboard/overview.php:18 +msgid "Page views" +msgstr "Vizualizări de pagină" + +#: dashboard/overview.php:19 +msgid "Max. page views in one visit" +msgstr "Max. page views într-o singură vizită" + +#: dashboard/overview.php:20 +msgid "Total time spent by visitors" +msgstr "Timpul total petrecut de vizitatori" + +#: dashboard/overview.php:21 +msgid "Bounce count" +msgstr "Bounce count" + +#: dashboard/visitors.php:56 +msgid "Date" +msgstr "Data" + +#: dashboard/visitors.php:56 +msgid "Visits" +msgstr "Vizite" + +#: dashboard/visitors.php:56 +msgid "Bounced" +msgstr "Bounced" + +#: dashboard/websites.php:8 +msgid "Websites" +msgstr "Site-uri Web" + +#: dashboard/websites.php:13 +msgid "Website" +msgstr "Site-ul Web" + +#: wp-piwik.php:49 +#: wp-piwik.php:147 +msgid "Piwik Statistics" +msgstr "Statistici piwik" + +#. #-#-#-#-# plugin.pot (PACKAGE VERSION) #-#-#-#-# +#. Plugin Name of an extension +#: wp-piwik.php:49 +msgid "WP-Piwik" +msgstr "WP-Piwik" + +#: wp-piwik.php:53 +#: wp-piwik.php:185 +msgid "WP-Piwik Settings" +msgstr "Setările WP-Piwik" + +#: wp-piwik.php:59 +msgid "Settings" +msgstr "Setări" + +#: wp-piwik.php:112 +msgid "Remote access to Piwik not possible. Enable allow_url_fopen or CURL." +msgstr "Acces la distanţă la Piwik nu este posibil. Activaţi allow_url_fopen sau îndoire." + +#: wp-piwik.php:190 +msgid "Account settings" +msgstr "Setări cont" + +#: wp-piwik.php:192 +msgid "Piwik URL" +msgstr "Piwik URL" + +#: wp-piwik.php:196 +msgid "Auth token" +msgstr "Simbol Auth" + +#: wp-piwik.php:200 +msgid "To enable Piwik statistics, please enter your Piwik base URL (like http://mydomain.com/piwik) and your personal authentification token. You can get the token on the API page inside your Piwik interface. It looks like \"1234a5cd6789e0a12345b678cd9012ef\"." +msgstr "Piwik statisticilor, vă rugăm să introduceţi URL bază Piwik (cum ar fi http://mydomain.com/piwik) şi dumneavoastră simbol authentification personale. Puteţi obţine simbolul pe pagina API în interiorul interfaţa dumneavoastră Piwik. Se pare ca \"1234a5cd6789e0a12345b678cd9012ef\"." + +#: wp-piwik.php:205 +#: wp-piwik.php:207 +msgid "An error occured" +msgstr "Eroare" + +#: wp-piwik.php:205 +msgid "Please check URL and auth token. You need at least view access to one site." +msgstr "Vă rugăm să verificaţi URL-ul şi auth simbol. Nevoie vizualizaţi cel puțin accesul la un site." + +#: wp-piwik:php:215 +msgid "Choose site" +msgstr "Alege site-ul" + +#: wp-piwik.php:221 +msgid "If your template uses wp_footer(), WP-Piwik can automatically add the Piwik javascript code to your blog." +msgstr "Dacă şablonul utilizează wp_footer(), WP-Piwik poate adăuga automat codul javascript Piwik la blog-ul." + +#: wp-piwik.php:226 +msgid "Add script to wp_footer()" +msgstr "Adăugaţi script la wp_footer()" + +msgid "Tracking filter" +msgstr "Filtru de urmărire" + +msgid "Choose users by user role you do <strong>not</strong> want to track. Requires enabled \"Add script to wp_footer()\"-functionality." +msgstr "Selectaţi utilizatorii de rolul de utilizator tu a face <strong>nu</strong> nevoie pentru a urmări. Necesită activat \"Adăuga script-ul (wp_footer)\"-funcţionalitate." + +#: wp-piwik.php:229 +msgid "Save settings" +msgstr "Salvaţi setările" + +#. Plugin URI of an extension +msgid "http://dev.braekling.de/wordpress-plugins/dev/wp-piwik/index.html" +msgstr "http://dev.braekling.de/Wordpress-plugins/dev/WP-piwik/index.html" + +#. Description of an extension +msgid "Adds Piwik stats to your dashboard menu and Piwik code to your wordpress footer." +msgstr "Adaugă Piwik stats meniul tabloul de bord şi Piwik codul de subsol dumneavoastră wordpress." + +#. Author of an extension +msgid "André Bräkling" +msgstr "André Bräkling" + +#. Author URI of an extension +msgid "http://www.braekling.de" +msgstr "http://www.braekling.de" + diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-sq.mo b/wp-content/plugins/wp-piwik/languages/wp-piwik-sq.mo index a8d54bd29cb72dbf93d23833312cca40c0f488f4..da0addc5eafa263fe9318d041aad071dfd257b65 100755 Binary files a/wp-content/plugins/wp-piwik/languages/wp-piwik-sq.mo and b/wp-content/plugins/wp-piwik/languages/wp-piwik-sq.mo differ diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-sq.po b/wp-content/plugins/wp-piwik/languages/wp-piwik-sq.po index f77be982cd29bad20306b582a5a6e5149bccf97a..87bf1ac354462cd80933a9897487217fab4600cd 100755 --- a/wp-content/plugins/wp-piwik/languages/wp-piwik-sq.po +++ b/wp-content/plugins/wp-piwik/languages/wp-piwik-sq.po @@ -7,253 +7,430 @@ msgid "" msgstr "" "Project-Id-Version: 0.3.0\n" "Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-piwik\n" -"POT-Creation-Date: 2009-06-09 19:05+0000\n" -"PO-Revision-Date: 2010-06-10 14:39+0200\n" +"POT-Creation-Date: 2010-07-19 18:06+0000\n" +"PO-Revision-Date: 2012-03-02 19:11+0200\n" "Last-Translator: Besnik Bleta <besnik@programeshqip.org>\n" "Language-Team: Albanian <besnik@programeshqip.org>\n" +"Language: sq\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: dashboard/browsers.php:8 -#: dashboard/browsers.php:37 +#: dashboard/browsers.php:12 +#: dashboard/browsers.php:33 msgid "Browser" msgstr "Shfletues" +#: dashboard/browsers.php:22 +#: dashboard/pages.php:43 +#: dashboard/screens.php:22 +#: dashboard/systems.php:22 msgid "Others" msgstr "Të tjerë" -msgid "Resolution" -msgstr "Qartësi" - -msgid "Operating System" -msgstr "Sistem Operativ" - -msgid "Shortcut" -msgstr "Shkurtore" - -msgid "Advertisement" -msgstr "Reklamë" - -msgid "Looking for premium themes? Visit " -msgstr "Po shihni për tema me pagesë? Vizitoni " - -msgid "Avg" -msgstr "Mes" - -msgid "Sum" -msgstr "Shuma" - -msgid "Unique TOTAL" -msgstr "GJITHSEJ unikë" - -#: dashboard/browsers.php:37 -#: dashboard/keywords.php:13 -#: dashboard/visitors.php:56 -#: dashboard/websites.php:13 +#: dashboard/browsers.php:34 +#: dashboard/keywords.php:17 +#: dashboard/pages.php:22 +#: dashboard/screens.php:33 +#: dashboard/systems.php:35 +#: dashboard/visitors.php:53 +#: dashboard/websites.php:19 +#: wp-piwik.php:305 msgid "Unique" msgstr "Unikë" -#: dashboard/browsers.php:37 +#: dashboard/browsers.php:35 +#: dashboard/plugins.php:33 +#: dashboard/screens.php:34 +#: dashboard/systems.php:36 msgid "Percent" msgstr "Përqindje" -#: dashboard/keywords.php:8 +#: dashboard/keywords.php:12 msgid "Keywords" msgstr "Fjalëkyça" -#: dashboard/keywords.php:13 +#: dashboard/keywords.php:17 msgid "Keyword" msgstr "Fjalëkyç" -#: dashboard/overview.php:8 +#: dashboard/overview.php:12 msgid "Overview" msgstr "Përmbledhje" -#: dashboard/overview.php:16 -#: dashboard/visitors.php:21 +#: dashboard/overview.php:42 +#: dashboard/visitors.php:24 msgid "Visitors" msgstr "Vizitorë" -#: dashboard/overview.php:17 +#: dashboard/overview.php:43 msgid "Unique visitors" msgstr "Vizitorë unikë" -#: dashboard/overview.php:18 +#: dashboard/overview.php:44 msgid "Page views" msgstr "Parje faqesh" -#: dashboard/overview.php:19 +#: dashboard/overview.php:45 msgid "Max. page views in one visit" msgstr "Maksimum parje faqesh në një vizitë" -#: dashboard/overview.php:20 -msgid "Total time spent by visitors" -msgstr "Kohë e harxhuar nga vizitorët gjithsej" +#: dashboard/overview.php:46 +msgid "Total time spent" +msgstr "Kohë e harxhuar gjithsej" -#: dashboard/overview.php:21 +msgid "Time/visit" +msgstr "Kohë/vizitë" + +#: dashboard/overview.php:47 msgid "Bounce count" msgstr "Numër kthimesh" -#: dashboard/visitors.php:56 -msgid "Date" -msgstr "Datë" +#: dashboard/overview.php:49 +#: wp-piwik.php:563 +msgid "Shortcut" +msgstr "Shkurtore" + +#: dashboard/pages.php:13 +msgid "Pages" +msgstr "Faqe" -#: dashboard/visitors.php:56 +#: dashboard/pages.php:21 +msgid "Page" +msgstr "Faqe" + +#: dashboard/pages.php:23 +#: dashboard/plugins.php:32 +#: dashboard/visitors.php:52 msgid "Visits" msgstr "Vizita" -#: dashboard/visitors.php:56 +#: dashboard/plugins.php:12 +#: dashboard/plugins.php:31 +msgid "Plugins" +msgstr "Shtojca" + +#: dashboard/screens.php:12 +#: dashboard/screens.php:32 +msgid "Resolution" +msgstr "Qartësi" + +#: dashboard/systems.php:12 +#: dashboard/systems.php:34 +msgid "Operating System" +msgstr "Sistem Operativ" + +#: dashboard/visitors.php:51 +msgid "Date" +msgstr "Datë" + +#: dashboard/visitors.php:54 msgid "Bounced" msgstr "Të kthyera" -#: dashboard/websites.php:8 +#: dashboard/visitors.php:67 +msgid "Unique TOTAL" +msgstr "GJITHSEJ unikë" + +#: dashboard/visitors.php:67 +msgid "Sum" +msgstr "Shuma" + +#: dashboard/visitors.php:67 +msgid "Avg" +msgstr "Mes" + +#: dashboard/websites.php:12 msgid "Websites" msgstr "\"Websites\"-e" -#: dashboard/websites.php:13 +#: dashboard/websites.php:18 msgid "Website" msgstr "\"Website\"" -#: wp-piwik.php:49 -#: wp-piwik.php:147 +#: wp-piwik.php:110 +#: wp-piwik.php:365 msgid "Piwik Statistics" msgstr "Statistika Piwik" -#. #-#-#-#-# plugin.pot (PACKAGE VERSION) #-#-#-#-# -#. Plugin Name of an extension -#: wp-piwik.php:49 +#. #-#-#-#-# plugin.pot (WP-Piwik 0.8.0) #-#-#-#-# +#. Plugin Name of the plugin/theme +#: wp-piwik.php:111 +#: wp-piwik.php:122 +#: wp-piwik.php:123 +#: wp-piwik.php:146 msgid "WP-Piwik" msgstr "WP-Piwik" -#: wp-piwik.php:53 -#: wp-piwik.php:185 -msgid "WP-Piwik Settings" -msgstr "Rregullime për WP-Piwik" +#: wp-piwik.php:130 +#: wp-piwik.php:131 +msgid "WPMU-Piwik" +msgstr "WPMU-Piwik" + +#: wp-piwik.php:142 +#: wp-piwik.php:557 +msgid "yesterday" +msgstr "dje" + +#: wp-piwik.php:143 +#: wp-piwik.php:558 +msgid "today" +msgstr "sot" -#: wp-piwik.php:59 +#: wp-piwik.php:144 +#: wp-piwik.php:559 +msgid "last 30 days" +msgstr "30 ditët e fundit" + +#: wp-piwik.php:179 msgid "Settings" msgstr "Rregullime" -#: wp-piwik.php:112 -msgid "Remote access to Piwik not possible. Enable allow_url_fopen or CURL." -msgstr "Nuk arrihet hyrja e largët te Piwik. Aktivizoni allow_url_fopen ose CURL." +#: wp-piwik.php:381 +msgid "Change" +msgstr "Ndryshoje" + +#: wp-piwik.php:382 +msgid "Currently shown stats:" +msgstr "Statistika të treguara tani:" + +#: wp-piwik.php:383 +msgid "Current shown stats: <strong>Overall</strong>" +msgstr "Statistika të treguara tani: <strong>Përmbledhtazi</strong>" + +#: wp-piwik.php:448 +msgid "WP-Piwik Settings" +msgstr "Rregullime për WP-Piwik" -#: wp-piwik.php:190 +#: wp-piwik.php:455 +#: wp-piwik.php:617 msgid "Account settings" msgstr "Rregullime llogarie" -#: wp-piwik.php:192 +#: wp-piwik.php:457 +#: wp-piwik.php:619 msgid "Piwik URL" msgstr "URL Piwik-u" -#: wp-piwik.php:196 +#: wp-piwik.php:461 +#: wp-piwik.php:623 msgid "Auth token" msgstr "\"Token\" mirëfilltësimi" -#: wp-piwik.php:200 +#: wp-piwik.php:467 +#: wp-piwik.php:628 msgid "To enable Piwik statistics, please enter your Piwik base URL (like http://mydomain.com/piwik) and your personal authentification token. You can get the token on the API page inside your Piwik interface. It looks like "1234a5cd6789e0a12345b678cd9012ef"." -msgstr "Për të aktivizuar statistikat Piwik, ju lutem jepni URL-në tuaj bazë për Piwik-un (diçka të ngjashme me http://përkatësiaime.com/piwik) dhe varguan për mirëfilltësimin tuaj personal. Vargun do ta gjeni te faqja për API-n brenda ndërfaqes së Piwik-ut tuaj. Ngjan me diçka si "1234a5cd6789e0a12345b678cd9012ef"." +msgstr "Për të aktivizuar statistikat Piwik, ju lutem jepni URL-në tuaj bazë për Piwik-un (diçka të ngjashme me http://mydomain.com/piwik) dhe varguan për mirëfilltësimin tuaj personal. Vargun do ta gjeni te faqja për API-n brenda ndërfaqes së Piwik-ut tuaj. Ngjan me diçka si "1234a5cd6789e0a12345b678cd9012ef"." + +#: wp-piwik.php:477 +msgid "<strong>Important note:</strong> If you do not host this blog on your own, your site admin is able to get your auth token from the database. So he is able to access your statistics. You should never use an auth token with more than simple view access!" +msgstr "<strong>Shënim i rëndësishëm:</strong> Nëse nuk e strehoni vetë këtë blog, përgjegjësi i site-it tuaj është në gjendje të ketë prej bazës së të dhënave \"token\"-in tuaj të mirëfilltësimit. Pra është ne gjendje të hyjë në statistikat tuaja. Kurrë nuk do të duhej të përdornit një \"token\" mirëfilltësimi që lejon më tepër se hyrje të thjeshtë vetëm për parje!" -#: wp-piwik.php:205 -#: wp-piwik.php:207 +#: wp-piwik.php:485 +#: wp-piwik.php:489 msgid "An error occured" msgstr "Ndodhi një gabim" -#: wp-piwik.php:205 +#: wp-piwik.php:486 msgid "Please check URL and auth token. You need at least view access to one site." msgstr "Ju lutem, kontrolloni URL-në dhe vargun e mirëfilltësimit. Keni nevojë për të drejta parjeje të paktën në një \"site\"." -#: wp-piwik:php:215 +#: wp-piwik.php:492 msgid "Choose site" msgstr "Zgjidhni \"site\"" -#: wp-piwik.php:221 +#: wp-piwik.php:511 +#: wp-piwik.php:547 +#: wp-piwik.php:584 +#: wp-piwik.php:658 +msgid "Save settings" +msgstr "Ruaji rregullimet" + +#: wp-piwik.php:515 +#: wp-piwik.php:643 +msgid "Tracking settings" +msgstr "Rregullime gjurmimi" + +#: wp-piwik.php:521 +msgid "Add script" +msgstr "Shtoni programth" + +#: wp-piwik.php:525 msgid "If your template uses wp_footer(), WP-Piwik can automatically add the Piwik javascript code to your blog." msgstr "Po qe se gjedhja juaj përdor wp_footer(), WP-Piwik mund të shtojë vetvetiu te blogu juaj kodin Javascript për Piwik-un." -#: wp-piwik.php:226 -msgid "Add script to wp_footer()" -msgstr "Shtoje \"script\"-in te wp_footer()" +#: wp-piwik.php:528 +msgid "Track 404" +msgstr "Gjedhe 404" + +#: wp-piwik.php:532 +msgid "If you add the Piwik javascript code by wp_footer(), WP-Piwik can automatically add a 404-category to track 404-page-visits." +msgstr "If you add the Piwik javascript code by wp_footer(), WP-Piwik can automatically add a 404-category to track 404-page-visits.Po qe se e shtoni kodin Piwik Javascript përmes wp_footer(), WP-Piwik-u mund të shtojë vetvetiu një kategori 404 për të gjurmuar vizitat në faqe 404." +#: wp-piwik.php:536 +#: wp-piwik.php:644 msgid "Tracking filter" msgstr "Filtër Gjurmimesh" -msgid "Choose users by user role you do <strong>not</strong> want to track. Requires enabled "Add script to wp_footer()"-functionality." -msgstr "Zgjidhni përdoruesa sipas rolit të përdoruesit të cilin <strong>nuk</strong> doni të gjurmohet. Lyp të aktivizuar funksionin "Add script to wp_footer()"." - msgid "Choose users by user role you do <strong>not</strong> want to track." msgstr "Zgjidhni përdoruesa sipas rolit të përdoruesit të cilin <strong>nuk</strong> doni të gjurmohet." -msgid "Display statistics to" -msgstr "Shfaqja statistikat" +msgid "Choose users by user role you do <strong>not</strong> want to track. Requires enabled "Add script"-functionality." +msgstr "Zgjidhni përdoruesa sipas rolesh përdoruesish të cilin <strong>nuk</strong> doni të gjurmohet. Lyp të aktivizuar funksionin "Shtoni skript te wp_footer()"." -msgid "or above" -msgstr "ose sipër" +#: wp-piwik.php:551 +msgid "Statistic view settings" +msgstr "Rregullime lidhur me parjen e statistikave" -msgid "Minimum user level required to display statistics page." -msgstr "Shkallë minimum e përdoruesit, e domosdoshme për t'i shfaqur faqen e statistikave." +#: wp-piwik.php:554 +msgid "Dashboard" +msgstr "Pulti" -#: wp-piwik.php:229 -msgid "Save settings" -msgstr "Ruaji rregullimet" +#: wp-piwik.php:556 +msgid "No" +msgstr "Jo" -msgid "Currently shown stats:" -msgstr "Statistika të treguara tani:" +#: wp-piwik.php:557 +#: wp-piwik.php:558 +#: wp-piwik.php:559 +msgid "Yes" +msgstr "Po" -msgid "Change" -msgstr "Ndryshoje" +#: wp-piwik.php:562 +msgid "Display a dashboard widget to your WordPress dashboard." +msgstr "Shfaqni te pulti juaj WordPress një “widget” pulti." + +#: wp-piwik.php:567 +msgid "Display a shortcut to Piwik itself." +msgstr "Shfaq një shkurtore për te vetë Piwik-u." + +#: wp-piwik.php:568 +msgid "Display to" +msgstr "Shfaqe te" + +#: wp-piwik.php:579 +msgid "Choose user roles allowed to see the statistics page." +msgstr "Zgjidhni role përdoruesish të cilëve t’u lejohet të shohin faqen e statistikave." +#: wp-piwik.php:612 msgid "WPMU-Piwik Settings" msgstr "Rregullime për WPMU-Piwik" +#: wp-piwik.php:636 msgid "<strong>Important note:</strong> You have to choose a token which provides administration access. WPMU-Piwik will create new Piwik sites for each blog if it is shown the first time and it is not added yet. All users can access their own statistics only, while site admins can access all statistics. To avoid conflicts, you should use a clean Piwik installation without other sites added. The provided themes should use wp_footer, because it adds the Piwik javascript code to each page." msgstr "<strong>Shënim i rëndësishëm:</strong> Duhet të zgjidhni një \"token\" që lejon hyrje si administrator. WPMU-Piwik do të krijojë \"site\"-e të rinj Piwik për çdo blog, nëse është shfaqur për herë të parë dhe nuk është shtuar ende. Cilido përdorues mund të hyjë vetëm te statistikat e tij, ndërkohë që përgjegjësit e site-it mund të hyjnë në krejt statistikat. Për të shmangur përplasjet, do të duhej të përdornit një instalim nga e para të Piwik-ut, pa \"site\"-e të tjerë të shtuar. Temat e dhëna duhet të përdorin wp_footer, sepse ky shton kodin javascript Piwik te secila faqe." -msgid "<strong>Important note:</strong> If you do not host this blog on your own, your site admin is able to get your auth token from the database. So he is able to access your statistics. You should never use an auth token with more than simple view access!" -msgstr "<strong>Shënim i rëndësishëm:</strong> Nëse nuk e strehoni vetë këtë blog, përgjegjësi i site-it tuaj është në gjendje të ketë prej bazës së të dhënave \"token\"-in tuaj të mirëfilltësimit. Pra është ne gjendje të hyjë në statistikat tuaja. Kurrë nuk do të duhej të përdornit një \"token\" mirëfilltësimi që lejon më tepër se hyrje të thjeshtë vetëm për parje!" - -msgid "WP-Piwik uses the Google Chart API to create graphs. To avoid this, just check this box." -msgstr "WP-Piwik përdor Google Chart API për krijim grafiqesh. Për ta shmangur këtë, thjesht klikoni këtu." +#: wp-piwik.php:671 +msgid "If you like WP-Piwik, you can support its development by a donation:" +msgstr "Nëse ju pëlqen WP-Piwik-u, zhvillimin e tij mund ta mbështesni me një dhurim:" -msgid "Disable Google Chart API" -msgstr "Çaktivizo API Google Chart" +#: wp-piwik.php:687 +msgid "My Amazon.de wishlist (German)" +msgstr "Lista ime e dëshirave te Amazon.de (në Gjermanisht)" -#. Plugin URI of an extension -msgid "http://dev.braekling.de/wordpress-plugins/dev/wp-piwik/index.html" -msgstr "http://dev.braekling.de/wordpress-plugins/dev/wp-piwik/index.html" +#. Plugin URI of the plugin/theme +msgid "http://www.braekling.de/wp-piwik-wpmu-piwik-wordpress/" +msgstr "http://www.braekling.de/wp-piwik-wpmu-piwik-wordpress/" -#. Description of an extension +#. Description of the plugin/theme msgid "Adds Piwik stats to your dashboard menu and Piwik code to your wordpress footer." msgstr "Shton te menuja e pultit tuaj statistika Piwik dhe kodin për Piwik te \"footer\"-i juaj Wordpress." -#. Author of an extension +#. Author of the plugin/theme msgid "André Bräkling" msgstr "André Bräkling" -#. Author URI of an extension +#. Author URI of the plugin/theme msgid "http://www.braekling.de" msgstr "http://www.braekling.de" -msgid "last 30 days" -msgstr "30 ditët e fundit" +msgid "Credits" +msgstr "Kredite" -msgid "today" -msgstr "sot" +msgid "Thank you very much for your donation" +msgstr "Shumë faleminderit për dhurimin tuaj" -msgid "yesterday" -msgstr "dje" +msgid "and all people flattering this" +msgstr "dhe krejt personat që e mburrin këtë" -msgid "No" -msgstr "Jo" +msgid "Graphs powered by <a href=\"http://www.jqplot.com/\">jqPlot</a>, an open source project by Chris Leonello. Give it a try! (License: GPL 2.0 and MIT)" +msgstr "Grafikët bazohen në <a href=\"http://www.jqplot.com/\">jqPlot</a>, një projekt me burim të hapur nga Chris Leonello. Provojeni dhe ju! (Lejuar sipas Lejesh: GPL 2.0 dhe MIT)" -msgid "Yes" -msgstr "Po" +msgid "Thank you very much" +msgstr "Shumë faleminderit" + +msgid ", and" +msgstr ", dhe " + +msgid "for your translation work" +msgstr "për punën tuaj në përkthim" + +msgid "Thank you very much, all users who send me mails containing criticism, commendation, feature requests and bug reports! You help me to make WP-Piwik much better." +msgstr "Shumë faleminderit për krejt përdoruesit që më dërgojnë postë me kritika, lavdërime, kërkesa për karakteristika të reja dhe njoftime të metash! Ju më ndihmoni ta bëj WP-Piwik-un më të mirë." + +msgid "Thank <strong>you</strong> for using my plugin. It is the best commendation if my piece of code is really used!" +msgstr "Ju faleminderit që përdorni shtojcën time. Është lavdërimi më i mirë për programin tim është përdorimi i tij!" + +msgid "Changes saved" +msgstr "Ndryshimet u ruajtën" + +msgid "installed" +msgstr "u instalua" + +msgid "Next you should connect to Piwik" +msgstr "Më tej, lypset të lidheni te Piwik" + +msgid "Please validate your configuration" +msgstr "Ju lutem, vleftësoni formësimin tuaj" + +msgid "Default date" +msgstr "Data e parazgjedhur" + +msgid "Default date shown on statistics page." +msgstr "Datë e parazgjedhur që tregohet te faqja e statistikave. " + +msgid "Dashboard data" +msgstr "Të dhëna pulti" + +msgid "Display an overview widget to your WordPress dashboard." +msgstr "Shfaqni te pulti juaj WordPress një “widget” përmbledhës." + +#, fuzzy +msgid "Boad chart" +msgstr "Grafik boad" + +msgid "Display a visitor graph widget to your WordPress dashboard." +msgstr "Shfaqni te pulti juaj WordPress një “widget” grafiku mbi vizitorët." + +msgid "No data available." +msgstr "Pa të dhëna të passhme." + +#~ msgid "Advertisement" +#~ msgstr "Reklamë" + +#~ msgid "Looking for premium themes? Visit " +#~ msgstr "Po shihni për tema me pagesë? Vizitoni " + +#~ msgid "Remote access to Piwik not possible. Enable allow_url_fopen or CURL." +#~ msgstr "" +#~ "Nuk arrihet hyrja e largët te Piwik. Aktivizoni allow_url_fopen ose CURL." + +#~ msgid "Add script to wp_footer()" +#~ msgstr "Shtoje \"script\"-in te wp_footer()" + +#~ msgid "or above" +#~ msgstr "ose sipër" -msgid "Show overview on WordPress dashboard" -msgstr "Shfaqe përmbledhjen në pultin e WordPress-it" +#~ msgid "" +#~ "WP-Piwik uses the Google Chart API to create graphs. To avoid this, just " +#~ "check this box." +#~ msgstr "" +#~ "WP-Piwik përdor Google Chart API për krijim grafiqesh. Për ta shmangur " +#~ "këtë, thjesht klikoni këtu." -msgid "Show Piwik link in overview" -msgstr "Shfaq te përmbledhja lidhjen Piwik" +#~ msgid "Disable Google Chart API" +#~ msgstr "Çaktivizo API Google Chart" +#~ msgid "Show Piwik link in overview" +#~ msgstr "Shfaq te përmbledhja lidhjen Piwik" diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-ua_UA.mo b/wp-content/plugins/wp-piwik/languages/wp-piwik-ua_UA.mo new file mode 100644 index 0000000000000000000000000000000000000000..0b96c2f0c0d8f3ae25f0b78a38d9b97d158e7b26 Binary files /dev/null and b/wp-content/plugins/wp-piwik/languages/wp-piwik-ua_UA.mo differ diff --git a/wp-content/plugins/wp-piwik/languages/wp-piwik-ua_UA.po b/wp-content/plugins/wp-piwik/languages/wp-piwik-ua_UA.po new file mode 100644 index 0000000000000000000000000000000000000000..a69440bd8732c887657c28a5c3b2683a24cafabb --- /dev/null +++ b/wp-content/plugins/wp-piwik/languages/wp-piwik-ua_UA.po @@ -0,0 +1,186 @@ +# WP-Piwik 0.3.0 - Belorussian language file +# Copyright (C) 2009 Andre Braekling +# This file is distributed under the same license as the WP-Piwik package. +# Andre Braekling <webmaster@braekling.de>, 2009. +# FatCow http://www.fatcow.com, 2009. +msgid "" +msgstr "" +"Project-Id-Version: 0.3.0\n" +"Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-piwik\n" +"POT-Creation-Date: 2009-06-09 19:05+0000\n" +"PO-Revision-Date: 2011-07-07 22:43+0200\n" +"Last-Translator: Alexandr <pixelpwnz@gmail.com>\n" +"Language-Team: Alyona Lompar <alyona.lompar@aol.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Ukrainian\n" +"X-Poedit-Country: UKRAINE\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: dashboard/browsers.php:8 +#: dashboard/browsers.php:37 +msgid "Browser" +msgstr "Браузер" + +msgid "Resolution" +msgstr "Розширення" + +msgid "Operating System" +msgstr "Операційна система" + +#: dashboard/browsers.php:37 +#: dashboard/keywords.php:13 +#: dashboard/visitors.php:56 +#: dashboard/websites.php:13 +msgid "Unique" +msgstr "Унікальність" + +#: dashboard/browsers.php:37 +msgid "Percent" +msgstr "Відсотків" + +#: dashboard/keywords.php:8 +msgid "Keywords" +msgstr "Ключові слова" + +#: dashboard/keywords.php:13 +msgid "Keyword" +msgstr "Ключове слово" + +#: dashboard/overview.php:8 +msgid "Overview" +msgstr "Опис" + +#: dashboard/overview.php:16 +#: dashboard/visitors.php:21 +msgid "Visitors" +msgstr "Відвідувачів" + +#: dashboard/overview.php:17 +msgid "Unique visitors" +msgstr "Унікальних відвідувачів" + +#: dashboard/overview.php:18 +msgid "Page views" +msgstr "Переглядів сторінки" + +#: dashboard/overview.php:19 +msgid "Max. page views in one visit" +msgstr "Макс. Сторінок переглянуто за один візит" + +#: dashboard/overview.php:20 +msgid "Total time spent by visitors" +msgstr "Всього часу, проведеного відвідувачем" + +#: dashboard/overview.php:21 +msgid "Bounce count" +msgstr "Кількість відмов" + +#: dashboard/visitors.php:56 +msgid "Date" +msgstr "Дата" + +#: dashboard/visitors.php:56 +msgid "Visits" +msgstr "Візитів" + +#: dashboard/visitors.php:56 +msgid "Bounced" +msgstr "Відмов" + +#: dashboard/websites.php:8 +msgid "Websites" +msgstr "Сайтів" + +#: dashboard/websites.php:13 +msgid "Website" +msgstr "Вебсайт" + +#: wp-piwik.php:49 +#: wp-piwik.php:147 +msgid "Piwik Statistics" +msgstr "Piwik статистика" + +#. #-#-#-#-# plugin.pot (PACKAGE VERSION) #-#-#-#-# +#. Plugin Name of an extension +#: wp-piwik.php:49 +msgid "WP-Piwik" +msgstr "WP-Piwik" + +#: wp-piwik.php:53 +#: wp-piwik.php:185 +msgid "WP-Piwik Settings" +msgstr "WP-Piwik налаштування" + +#: wp-piwik.php:59 +msgid "Settings" +msgstr "Настройки" + +#: wp-piwik.php:112 +msgid "Remote access to Piwik not possible. Enable allow_url_fopen or CURL." +msgstr "Віддалений доступ до Piwik неможливий. Увімкніть allow_url_fopen або CURL." + +#: wp-piwik.php:190 +msgid "Account settings" +msgstr "Параметри облікового запису" + +#: wp-piwik.php:192 +msgid "Piwik URL" +msgstr "Piwik URL" + +#: wp-piwik.php:196 +msgid "Auth token" +msgstr "Авто token" + +#: wp-piwik.php:200 +msgid "To enable Piwik statistics, please enter your Piwik base URL (like http://mydomain.com/piwik) and your personal authentification token. You can get the token on the API page inside your Piwik interface. It looks like "1234a5cd6789e0a12345b678cd9012ef"." +msgstr "Для того щоб увімкнути Piwik статистику, будь ласка, введіть Ваш Piwik Базовий URL (наприклад, http://mydomain.com/piwik), і ваш особистий знак автентичності. Ви можете отримати знак на сторінці API всередині інтерфейсу Piwik. Він має вигляд як цей "1234a5cd6789e0a12345b678cd9012ef"." + +#: wp-piwik.php:205 +#: wp-piwik.php:207 +msgid "An error occured" +msgstr "Сталася помилка" + +#: wp-piwik.php:205 +msgid "Please check URL and auth token. You need at least view access to one site." +msgstr "Будь ласка, перевірте URL та AUTH маркер. Вам потрібно мінімум відкрити доступ до одного сайту." + +#: wp-piwik:php:215 +msgid "Choose site" +msgstr "Вибрати сайт" + +#: wp-piwik.php:221 +msgid "If your template uses wp_footer(), WP-Piwik can automatically add the Piwik javascript code to your blog." +msgstr "Якщо в шаблоні використовуються wp_footer (), WP-Piwik може автоматично додати Piwik JavaScript код до вашого блогу." + +#: wp-piwik.php:226 +msgid "Add script to wp_footer()" +msgstr "Додати скрипт в wp_footer ()" + +msgid "Tracking filter" +msgstr "Слідкуючий фільтр" + +msgid "Choose users by user role you do <strong>not</strong> want to track. Requires enabled "Add script to wp_footer()"-functionality." +msgstr "Виберіть користувачів з користувачів, які<strong> не </ STRONG>потрібно відстежувати. Повинен бути ввімкнений функціонал "Add script to wp_footer()"." + +#: wp-piwik.php:229 +msgid "Save settings" +msgstr "Зберегти налаштування" + +#. Plugin URI of an extension +msgid "http://dev.braekling.de/wordpress-plugins/dev/wp-piwik/index.html" +msgstr "http://dev.braekling.de/wordpress-plugins/dev/wp-piwik/index.html" + +#. Description of an extension +msgid "Adds Piwik stats to your dashboard menu and Piwik code to your wordpress footer." +msgstr "Додає Piwik статистику до меню панелі інструментів і Piwik код до WordPress колонтитула." + +#. Author of an extension +msgid "André Bräkling" +msgstr "André Bräkling" + +#. Author URI of an extension +msgid "http://www.braekling.de" +msgstr "http://www.braekling.de" + diff --git a/wp-content/plugins/wp-piwik/piwik.php b/wp-content/plugins/wp-piwik/piwik.php new file mode 100644 index 0000000000000000000000000000000000000000..8f72dae71ef09ec6b3526c0aa6960bfd67a29ae1 --- /dev/null +++ b/wp-content/plugins/wp-piwik/piwik.php @@ -0,0 +1,123 @@ +<?php + + require( '../../../wp-load.php' ); + + $arySettings = wp_piwik::loadSettings(); + +/* PIWIK PROXY SCRIPT */ + +/* == Description == + This script allows to track statistics using Piwik, without revealing the + Piwik Server URL. This is useful for users who track multiple websites + in the same Piwik server, but don't want to show in the source code of all tracked + websites the Piwik server URL. + + == Requirements == + To run this properly you will need + - Piwik server latest version + - One or several website(s) to track with this Piwik server, for example http://trackedsite.com + - The website to track must run on a server with PHP5 support + - In your php.ini you must check that the following is set: "allow_url_fopen = On" + + == How to track trackedsite.com in your Piwik without revealing the Piwik server URL? == + + 1) In your Piwik server, login as Super user + 2) create a user, set the login for example: "UserTrackingAPI" + 3) Assign this user "admin" permission on all websites you wish to track without showing the Piwik URL + 4) Copy the "token_auth" for this user, and paste it below in this file, in $TOKEN_AUTH = "xyz" + 5) In this file, below this help test, edit $PIWIK_URL variable and change http://piwik-server.com/piwik/ with the URL to your Piwik server. + 6) Upload this modified piwik.php file in the website root directory, for example at: http://trackedsite.com/piwik.php + This file (http://trackedsite.com/piwik.php) will be called by the Piwik Javascript, + instead of calling directly the (secret) Piwik Server URL (http://piwik-server.com/piwik/). + 7) You now need to add the modified Piwik Javascript Code to the footer of your pages at http://trackedsite.com/ + Go to Piwik > Settings > Websites > Show Javascript Tracking Code. + Copy the Javascript snippet. Then, edit this code and change the last lines to the following: + [...] + (function() { + var u=(("https:" == document.location.protocol) ? "https" : "http") + "://trackedsite.com/"; + _paq.push(["setTrackerUrl", u+"piwik.php"]); + var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript"; + g.defer=true; g.async=true; g.src=u+"piwik.php"; s.parentNode.insertBefore(g,s); + })(); + </script> + <!-- End Piwik Code --> + + What's changed in this code snippet compared to the normal Piwik code? + A) the (secret) Piwik URL is now replaced by your website URL + B) the "piwik.js" becomes "piwik.php" because this piwik.php proxy script will also display and proxy the Javascript file + C) the <noscript> part of the code at the end is removed, + since it is not currently used by Piwik, and it contains the (secret) Piwik URL which you want to hide. + 8) Paste the modified Piwik Javascript code in your website "trackedsite.com" pages you wish to track. + This modified Javascript Code will then track visits/pages/conversions by calling trackedsite.com/piwik.php + which will then automatically call your (hidden) Piwik Server URL. + 9) Done! + At this stage, example.com should be tracked by your Piwik without showing the Piwik server URL. + Repeat the steps 6), 7) and 8) for each website you wish to track in Piwik. +*/ + +// Edit the line below, and replace http://piwik-server.com/piwik/ +// with your Piwik URL ending with a slash. +// This URL will never be revealed to visitors or search engines. +$PIWIK_URL = $arySettings['global']['piwik_url']; + +// Edit the line below, and replace xyz by the token_auth for the user "UserTrackingAPI" +// which you created when you followed instructions above. +$TOKEN_AUTH = $arySettings['global']['piwik_token']; + +// Maximum time, in seconds, to wait for the Piwik server to return the 1*1 GIF +$timeout = 5; + + + +// DO NOT MODIFY BELOW +// --------------------------- +// 1) PIWIK.JS PROXY: No _GET parameter, we serve the JS file +if(empty($_GET)) +{ + $modifiedSince = false; + if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) + { + $modifiedSince = $_SERVER['HTTP_IF_MODIFIED_SINCE']; + // strip any trailing data appended to header + if (false !== ($semicolon = strpos($modifiedSince, ';'))) + { + $modifiedSince = strtotime(substr($modifiedSince, 0, $semicolon)); + } + } + // Re-download the piwik.js once a day maximum + $lastModified = time()-86400; + + // set HTTP response headers + header('Vary: Accept-Encoding'); + + // Returns 304 if not modified since + if (!empty($modifiedSince) && $modifiedSince < $lastModified) + { + header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified'); + } + else + { + header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); + @header('Content-Type: application/javascript; charset=UTF-8'); + if( $piwikJs = file_get_contents($PIWIK_URL.'piwik.js')) { + echo $piwikJs; + } else { + header($_SERVER['SERVER_PROTOCOL'] . '505 Internal server error'); + } + } + exit; +} + +// 2) PIWIK.PHP PROXY: GET parameters found, this is a tracking request, we redirect it to Piwik +$url = $PIWIK_URL."piwik.php?cip=".@$_SERVER['REMOTE_ADDR']."&token_auth=".$TOKEN_AUTH.'&'; +foreach($_GET as $key=>$value) { + $url .= $key .'='.urlencode($value).'&'; +} +header("Content-Type: image/gif"); +$stream_options = array('http' => array( + 'user_agent' => @$_SERVER['HTTP_USER_AGENT'], + 'header' => "Accept-Language: " . @str_replace(array("\n","\t","\r"), "", $_SERVER['HTTP_ACCEPT_LANGUAGE']) . "\r\n" , + 'timeout' => $timeout +)); +$ctx = stream_context_create($stream_options); +echo file_get_contents($url, 0, $ctx); \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/readme.txt b/wp-content/plugins/wp-piwik/readme.txt index 42c24c26ce839fbb51bda8f60444385c4f59411f..1f623f8cdb6f2aeb4b193100e06314d07a16a567 100644 --- a/wp-content/plugins/wp-piwik/readme.txt +++ b/wp-content/plugins/wp-piwik/readme.txt @@ -1,83 +1,233 @@ === WP-Piwik === Contributors: Braekling -Requires at least: 3.0.1 -Tested up to: 3.1.3 -Stable tag: 0.8.7 +Requires at least: 3.5 +Tested up to: 3.5.1 +Stable tag: 0.9.9.1 Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6046779 Tags: statistics, stats, analytics, piwik, wpmu -This plugin adds a piwik stats site to your WordPress or WordPress multisite dashboard. +This plugin adds a Piwik stats site to your WordPress or WordPress multisite dashboard. == Description == This plugin adds a Piwik stats site to your WordPress dashboard. It's also able to add the Piwik tracking code to your blog using wp_footer. -**You need a running Piwik installation** and at least view access to your stats. Also PHP 5 or higher is strictly required. - +**You need a running Piwik (at least 1.11) installation** and at least view access to your stats. Also PHP 5 or higher is strictly required. Look at the [Piwik website](http://piwik.org/) to get further information about Piwik. *This plugin is not created or provided by the Piwik project team.* -Languages: English, Albanian, Belorussian, Dutch, French, German, Swedish, Norwegian +Languages: English, German, Albanian, Azerbaijani, Belorussian, Dutch, French, Greek, Lithuanian, Norwegian, Persian, Romanian, Russian, Spanish, Swedish, Ukrainian + +*Note: If you vote "It's broken", please tell me about your problem. It's hard to fix a bug I don't know about! ;-)* + += Shortcodes = +You can use following shortcodes if activated: + + [wp-piwik module="overview" title="" period="day" date="yesterday"] +Shows overview table like WP-Piwik's overview dashboard. See Piwik API documentation on VisitsSummary.get to get more information on period and day. Multiple data arrays will be cumulated. If you fill the title attribute, its content will be shown in the table's title. -*Note: If you vote "It's broken", please tell me about your problem. It's hard to fix a bug I don't know about! ;)* + [wp-piwik module="opt-out" language="en" width="100%" height="200px"] +Shows the Piwik opt-out Iframe. You can change the Iframe's language by the language attribute (e.g. de for German language) and its width and height using the corresponding attributes. + + [wp-piwik] +is equal to *[wp-piwik module="overview" title="" period="day" date="yesterday"]*. + +More shortcodes will follow soon. = WP multisite = -Version 0.6.0+ includes experimental WP multisite support. +See section "Installation". -**Experimental** += Credits = -The WP multisite support is currently experimental. Please test it on your own (e.g. using a local copy of your WP multisite) before you use it in an user context. +* Graphs powered by [jqPlot](http://www.jqplot.com/) (GPL 2.0 and MIT) and and [jQuery Sparklines](http://omnipotent.net/jquery.sparkline/) (New BSD License). +* Metabox support inspired by [Heiko Rabe's metabox demo plugin](http://www.code-styling.de/english/how-to-use-wordpress-metaboxes-at-own-plugins). +* Translation credits see plugin settings +* Donations: Marco L., Rolf W., Tobias U., Lars K., Donna F., Kevin D., Ramos S, Thomas M., John C., Andreas G., Ben M., the Piwik team itself, and all people flattering this. +* All users who send me mails containing criticism, commendation, feature requests and bug reports - you help me to make WP-Piwik much better! -**Simple** +Thank you all! -Just add WP-Piwik to your /wp-content/plugins folder. So each user can enable WP-Piwik and use his own Piwik instance. +== Frequently Asked Questions == -**Extended (WPMU-Piwik)** += Where can I find the Piwik URL and the Piwik auth token? = -1. Add WP-Piwik to your /wp-content/plugins folder. Open wp-piwik.php -2. Go to line 30 ($GLOBALS['wp-piwik_wpmu'] = false;) -3. Change to $GLOBALS['wp-piwik_wpmu'] = true; -4. You should use a clear Piwik installation and a token with full admin rights due to avoid conflicts. WPMU-Piwik will add a new site to Piwik each time a new blog is visited the first time. -5. Users have access to their own statistics, site admins can access each blog's statistics. Please test it on your own (e.g. using a local copy of your WPMU) before you use it in an user context. +WP-Piwik requires Piwik. If you did not install Piwik yet, first get it at the [Piwik website](http://www.piwik.org). -= Credits = +If Piwik works, you'll be able to configure WP-Piwik: The Piwik URL is the same URL you use to access your Piwik, e.g. for the demo site: http://demo.piwik.org. The auth token is some kind of secret password, which allows WP-Piwik to get the necessary data from Piwik. The super user's auth token, i.e. a full access password for your Piwik, can be found on Piwik's API site. You can find a detailed description [here](http://peepbo.de/board/viewtopic.php?f=5&t=10). -* Graphs powered by [jqPlot](http://www.jqplot.com/), an open source project by Chris Leonello. Give it a try! (GPL 2.0 and MIT) -* Albanian [sq] language file by [Besnik Bleta](http://blogu.programeshqip.org/). -* Azerbaijani [az_AZ] language file by [Galina Miklosic](wwww.webhostinggeeks.com). -* Belorussian [be_BY] language file by [FatCow](http://www.fatcow.com/). -* Dutch [nl_NL] language file by [Rene](http://www.pamukkaleturkey.com/). -* French [fr_FR] language file by Fab. -* Greek [gr_GR] language file by [AggelioPolis](www.aggeliopolis.gr). -* Russian [ru_RU] language file by Natalya. -* Swedish [sv_SE] language file by [EzBizNiz](http://ezbizniz.com/). -* Norwegian [nb_NO] language file by Gormer. += How to reset/remove all WP-Piwik settings without uninstalling? = -Thank you, guys! +Login to your admin dashboard and open http://YOUR_BLOG_URL/wp-admin/options-general.php?page=wp-piwik/wp-piwik.php&tab=support&mode=resetconfirmed&full=1 + += Tracking does not work on HostGator! = + +Try to enable the "avoid mod_security" option (WP-Piwik settings, Tracking tab) or create a mod_security whitelist. + += WP-Piwik does not work with SSL! = + +See [this support thread](http://wordpress.org/support/topic/plugin-wp-piwik-https-ssl-support?replies=3). == Installation == += Install WP-Piwik on a simple WordPress blog = + 1. Upload the full `wp-piwik` directory into your `wp-content/plugins` directory. -2. Activate the plugin through the 'Plugins' menu in WordPress. +2. Activate the plugin through the 'Plugins' menu in WordPress. 3. Open the new 'Settings/WP-Piwik Settings' menu, enter your Piwik base URL and your auth token. Save settings. -4. If you have view access to multiple site stats, choose your blog and save settings again. + +4. If you have view access to multiple site stats and did not enable "auto config", choose your blog and save settings again. + 5. Look at 'Dashboard/WP-Piwik' to get your site stats. += Install WP-Piwik on a WordPress blog network (WPMU/WP multisite) = + +There are two differents methods to use WP-Piwik in a multisite environment: +* As a Site Specific Plugin it behaves like a plugin installed on a simple WordPress blog. Each user can enable, configure and use WP-Piwik on his own. Users can even use their own Piwik instances (and accordingly they have to). +* Using WP-Piwik as a Network Plugin equates to a central approach. A single Piwik instance is used and the site admin configures the plugin completely. Users are just allowed to see their own statistics, site admins can see each blog's stats. + +*Site Specific Plugin* + +Just add WP-Piwik to your /wp-content/plugins folder and enable the Plugins page for individual site administrators. Each user has to enable and configure WP-Piwik on his own if he want to use the plugin. + +*Network Plugin* + +The Network Plugin support is still experimental. Please test it on your own (e.g. using a local copy of your WP multisite) before you use it in an user context. + +Add WP-Piwik to your /wp-content/plugins folder and enable it as [Network Plugin](http://codex.wordpress.org/Create_A_Network#WordPress_Plugins). Users can access their own statistics, site admins can access each blog's statistics and the plugin's configuration. == Screenshots == 1. WP-Piwik settings. 2. WP-Piwik statistics page. 3. Closer look to a pie chart. +4. WordPress toolbar graph. + +== Upgrade Notice == + +Please update Piwik if not done yet (Piwik 1.11 or higher is recommended)! == Changelog == += 0.9.9.1 = +* CDN support: http and https separated, see http://wordpress.org/support/topic/request-cdn-support-1 +* Made <noscript> code optional. Move <noscript> code to site footer. + += 0.9.9.0 = +* Piwik 1.11 compaitbility fixes (Piwik 1.11 required now!) +* Depending on Piwik 1.11 WP-Piwik will use async tracking now +* CDN support added, see http://wordpress.org/support/topic/request-cdn-support-1 + += 0.9.8.1 = +* Warning on empty data removed (overview table) +* Removed a possible deadlock +* Bugfix: Apply tracking code settings everytime the tracking code is updated +* Reset/uninstall script bugfix regarding network mode + += 0.9.8 = +* WordPress 3.5 compatibility fix: http://wordpress.org/support/topic/v35-errors-fix?replies=5 (Thanks Christian Foellmann!) +* Advanced Search Result Analytics, see http://piwik.org/docs/javascript-tracking/#toc-tracking-internal-search-keywords-categories-and-no-result-search-keywords +* Site Search stats added +* Use js/index.php: Replaces piwik.js and piwik.php by js/ (instead of piwik.js only) +* Connection timeout setting added +* Full reset option added +* Uninstall script added +* Stats metaboxes: Date formatted +* Use proxy settings defined in wp-config.php +* Piwik.php proxy script added (see http://piwik.org/faq/how-to/#faq_132) +* Bugfix: After upgrade, Piwik automatically places cookies again (http://wordpress.org/support/topic/after-upgrade-piwik-automatically-places-cookies-again) + += 0.9.7 = +* Shortcodes added +* WP-Piwik will rename sites in Piwik if site name changes in WordPress +* Bugfix: Tracking code changes should stay active after WP-Piwik updates + += 0.9.6.3 = +* Piwik 1.9+ compatibility fix (Piwik 1.9 required!) +* Browser version details added + += 0.9.6.2 = +* Bugfix: ["Create Piwik site" link (network dashboard)](http://wordpress.org/support/topic/plugin-wp-piwik-you-attempted-to-access-the-networks-dashboard-but-you-do-not) + += 0.9.6.1 = +* Toolbar graph bugfix + += 0.9.6 = +* Option: Disable SSL peer verification (REST API) +* Option: Use own user agent +* Test script displays additional information (e.g. response headers) +* Using WordPress metabox concept properly +* Bugfix: Sparkline script only loaded if required +* Stats site supports up to 3 columns +* Network admin stats: Choose site using a paged table (instead of a select box). +* Feature: [Custom variables](http://piwik.org/docs/javascript-tracking/#toc-custom-variables), using [custom post meta boxes](http://wp.smashingmagazine.com/2011/10/04/create-custom-post-meta-boxes-wordpress/). +* Some minor bugfixes + += 0.9.5 = +* WordPress 3.4 compatible (workaround) + += 0.9.4 = +* Requires at least Piwik 1.8.2! +* Choose between HTTP API or PHP API +* Show graph on WordPress Toolbar +* Add option to disable cookies - Thanks to Mathias T.! +* Update bugfix: Upgrading from WP-Piwik 0.8.7 or less will work again +* Some minor bugfixes + += 0.9.3 = +* Bugfix: Adding a new site will work again. + += 0.9.2 = +* Uses $wpdb->blogs instead of $wpdb->prefix.'blogs' to keep it compatible to different database plugins +* Bugfix: SEO dashboard widget will work even if "last 30" is selected +* Bugfix: New created blogs won't show "Please specify a value for 'idSite'." anymore. +* Bugfix: New network sites without title will be created +* Bugfix: Upgrading from old versions will work again +* Tabbed settings +* Debug tools added (testscript, site configuration overview and WP-Piwik reset) +* Support forum RSS feed +* Language updates +* Optionally use of set_time_limit(0) on stats page time out + += 0.9.1 = +* Bugfix: Usage as "Site Specific Plugin" [mixed up the different sites settings](http://wordpress.org/support/topic/plugin-wp-piwik-as-simple-plugin-with-multisite-fills-auth-with-last-used-token) (network mode) +* Hotfix: Avoid "Unknown site/blog" message without giving a chance to choose an existing site. Thank you, Taimon! + += 0.9.0 = +* Auto-configuration +* No code change required to enable WPMU mode anymore (Still experimental. Please create a backup before trying 0.9.0!) +* All features in WPMU available +* Bugfix: Removed unnecessary API calls done with each site request - Thank you, Martin B.! +* Bugfix: [No stats on dashboard](http://wordpress.org/support/topic/no-stats-on-dashboard-new-install) (sometimes this issue still occured, should be fixed now) +* Code cleanup (still not finished) +* Minor UI fixes +* Minor language/gettext improvements +* Security improvements +* Show SEO rank stats (very slow, caching will be added in 0.9.1) +* WordPress dashboard SEO rank widget (very slow, caching will be added in 0.9.1) +* New option: use js/index.php +* New option: avoid mod_security +* Mulisite: Order blog list alphabetically (Network Admin stats site) +* Settings: Order site list alphabetically (site list shown if order conf is disabled) + += 0.8.10 = +* jqplot update (IE 9 compatibility) - Thank you, Martin! +* Bugfix: [No stats on dashboard](http://wordpress.org/support/topic/no-stats-on-dashboard-new-install) +* Layout fix: [Graph width on dashboard](http://wordpress.org/support/topic/stats-graph-in-dashboard-changed) +* Minor code cleanup + += 0.8.9 = +* WP 3.2 compatible, metabox support + += 0.8.8 = +* Bugfix: Will also work with index.php in Piwik path +* Bugfix: last30 dashboard widget - show correct bounce rate + = 0.8.7 = * New language files (Azerbaijani, Greek, Russian) * Fixed hardcoded database prefix (WPMU-Piwik) @@ -175,4 +325,4 @@ Thank you, guys! * Browser stats and bounced visitors = 0.2.0 = -* First public version. +* First public version. \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/screenshot-4.gif b/wp-content/plugins/wp-piwik/screenshot-4.gif new file mode 100644 index 0000000000000000000000000000000000000000..85cec05db2c78ad2cf072fc3ba484b7a7922efec Binary files /dev/null and b/wp-content/plugins/wp-piwik/screenshot-4.gif differ diff --git a/wp-content/plugins/wp-piwik/settings/.htaccess b/wp-content/plugins/wp-piwik/settings/.htaccess new file mode 100644 index 0000000000000000000000000000000000000000..3a42882788717c9ed1d5c2fcc3277d21ec13152b --- /dev/null +++ b/wp-content/plugins/wp-piwik/settings/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/wp-content/plugins/wp-piwik/settings/credits.php b/wp-content/plugins/wp-piwik/settings/credits.php new file mode 100644 index 0000000000000000000000000000000000000000..bf772c952998a71d93cfd3521583035d18002d0f --- /dev/null +++ b/wp-content/plugins/wp-piwik/settings/credits.php @@ -0,0 +1,31 @@ +<tr> + <td> + <strong><?php _e('Thank you very much for your donation', 'wp-piwik'); ?>:</strong> Marco L., Rolf W., Tobias U., Lars K., Donna F., Kevin D., Ramos S., Thomas M., John C., Andreas G., Ben M., <?php _e('the Piwik team itself','wp-piwik');?><?php _e(', and all people flattering this','wp-piwik'); ?>! + </td> +</tr> +<tr> + <td> + <?php _e('Graphs powered by <a href="http://www.jqplot.com/">jqPlot</a> (License: GPL 2.0 and MIT) and <a href="http://omnipotent.net/jquery.sparkline/">jQuery Sparklines</a> (License: New BSD License).','wp-piwik'); ?> + </td> +</tr> +<tr> + <td> + <?php _e('Metabox support inspired by', 'wp-piwik'); echo ' <a href="http://www.code-styling.de/english/how-to-use-wordpress-metaboxes-at-own-plugins">Heiko Rabe\'s metabox demo plugin</a>.';?> + <?php _e('Tabbed settings page suggested by the', 'wp-piwik'); echo' <a href="http://wp.smashingmagazine.com/2011/10/20/create-tabs-wordpress-settings-pages/">Smashing Magazine</a>.';?> + </td> +</tr> +<tr> + <td> + <?php _e('Thank you very much','wp-piwik'); ?>, <a href="http://blogu.programeshqip.org/">Besnik Bleta</a>, <a href="http://www.fatcow.com/">FatCow</a>, <a href="http://www.pamukkaleturkey.com/">Rene</a>, Fab, <a href="http://ezbizniz.com/">EzBizNiz</a>, Gormer, Natalya, <a href="www.aggeliopolis.gr">AggelioPolis</a><?php _e(', and', 'wp-piwik'); ?> <a href="http://wwww.webhostinggeeks.com">Web Hosting Geeks</a>, <a href="http://www.webhostingrating.com">Web Hosting Rating</a>, <a href="http://www.webhostinghub.com">Nata Strazda (Web Hosting Hub)</a>, <a href="http://www.libreoffice.ir">Hossein, LibreOffice localization team</a> & <a href="http://www.vogliaditerra.com">Ste</a> <?php _e('for your translation work','wp-piwik'); ?>! + </td> +</tr> +<tr> + <td> + <?php _e('Thank you very much, all users who send me mails containing criticism, commendation, feature requests and bug reports! You help me to make WP-Piwik much better.','wp-piwik'); ?> + </td> +</tr> +<tr> + <td> + <?php _e('Thank <strong>you</strong> for using my plugin. It is the best commendation if my piece of code is really used!','wp-piwik'); ?> + </td> +</tr> \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/settings/homepage.php b/wp-content/plugins/wp-piwik/settings/homepage.php new file mode 100644 index 0000000000000000000000000000000000000000..3ac1dcc4d226237b432b8ab46cbcf9a792ae172c --- /dev/null +++ b/wp-content/plugins/wp-piwik/settings/homepage.php @@ -0,0 +1,11 @@ +<?php +$strVersion = $this->callPiwikAPI('API.getPiwikVersion'); +// http://wordpress.org/support/rss/tags/wp-piwik +?><tr><td><strong><?php _e('Thanks for using WP-Piwik!', 'wp-piwik'); ?></strong></td></tr> +<tr><td><?php +if (is_array($strVersion) && $strVersion['result'] == 'error') self::showErrorMessage($strVersion['message']); +elseif (empty($strVersion)) self::showErrorMessage('Piwik did not answer. Please check your entered Piwik URL.'); +else echo __('You are using Piwik','wp-piwik').' '.$strVersion.' '.__('and', 'wp-piwik').' WP-Piwik '.self::$strVersion.(is_plugin_active_for_network('wp-piwik/wp-piwik.php')?' '.__('in network mode'):'').'.'; +?></td></tr> +<tr><td><?php _e('Auto site configuration is','wp-piwik'); ?> <strong><?php echo (self::$aryGlobalSettings['auto_site_config']?__('enabled','wp-piwik'):__('disabled','wp-piwik')); ?>.</strong></td></tr> +<tr><td><?php _e('Tracking code insertion is','wp-piwik'); ?> <strong><?php echo (self::$aryGlobalSettings['add_tracking_code']?__('enabled','wp-piwik'):__('disabled','wp-piwik')); ?>.</strong></td></tr> \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/settings/piwik.php b/wp-content/plugins/wp-piwik/settings/piwik.php new file mode 100644 index 0000000000000000000000000000000000000000..3bb836f806d06cc630a9d07c71d5437766505569 --- /dev/null +++ b/wp-content/plugins/wp-piwik/settings/piwik.php @@ -0,0 +1,119 @@ +<?php +$bolCURL = function_exists('curl_init'); +$bolFOpen = ini_get('allow_url_fopen'); +if (!$bolFOpen && !$bolCURL) { +?><tr> + <td colspan="2"> + <strong><?php _e('Error: cURL is not enabled and fopen is not allowed to open URLs. WP-Piwik won\'t be able to connect to Piwik.'); ?></strong> + </td> +</tr><?php } else { ?><tr> + <th colspan="2"> + <?php _e('To enable Piwik statistics, please enter', 'wp-piwik'); ?>: + <ol> + <li><?php _e('your Piwik base URL (like http://mydomain.com/piwik) or your Piwik server path (like /var/www/mydomain.com/httpdocs/piwik/)', 'wp-piwik'); ?></li> + <li><?php _e('your personal Piwik authentification token. You can get the token on the API page inside your Piwik interface. It looks like "1234a5cd6789e0a12345b678cd9012ef".', 'wp-piwik'); ?></li> + </ol> + <?php _e('No idea what I\'m talking about?', 'wp-piwik'); ?> <a href="http://peepbo.de/board/viewtopic.php?f=5&t=10"><?php _e('Get help.', 'wp-piwik'); ?></a> + <?php if (!is_plugin_active_for_network('wp-piwik/wp-piwik.php')) { ?> + <p><?php _e('<strong>Important note:</strong> If you do not host this blog on your own, your site admin is able to get your auth token from the database.', 'wp-piwik'); ?></p> + <?php } ?> + </th> +</tr><tr> + <th><?php _e('Piwik URL', 'wp-piwik'); ?> (REST API):</th> + <td> + <input type="radio" name="wp-piwik_mode" onchange="javascript:$j('#wp-piwik_path,#wp-piwik_path-label').toggleClass('wp-piwik-input-hide');" value="http" <?php echo (self::$aryGlobalSettings['piwik_mode']=='http'?'checked="checked" ':''); ?>/> + <input id="wp-piwik_url" name="wp-piwik_url" type="text" value="<?php echo self::$aryGlobalSettings['piwik_url']; ?>" /> + <label for="wp-piwik_url"></label> + </td> +</tr><tr> + <th><?php _e('Piwik path', 'wp-piwik'); ?> (PHP API, beta):</th> + <td> + <input type="radio" name="wp-piwik_mode" onchange="javascript:$j('#wp-piwik_path,#wp-piwik_path-label').toggleClass('wp-piwik-input-hide');" value="php" <?php echo (self::$aryGlobalSettings['piwik_mode']=='php'?'checked="checked" ':''); ?>/> + <input <?php echo (self::$aryGlobalSettings['piwik_mode']!='php'?'class="wp-piwik-input-hide" ':''); ?>id="wp-piwik_path" name="wp-piwik_path" type="text" value="<?php echo self::$aryGlobalSettings['piwik_path']; ?>" /> + <label <?php echo (self::$aryGlobalSettings['piwik_mode']!='php'?'class="wp-piwik-input-hide" ':''); ?>id="wp-piwik_path-label" for="wp-piwik_path"><?php _e('If you like to use the PHP API and also to enable tracking by WP-Piwik, please enter your Piwik URL, too. Otherwise your tracking code may be erroneous.','wp-piwik'); ?> [<a href="http://dev.piwik.org/trac/ticket/3220">Details</a>]</label> + <?php + if (isset($_POST['wp-piwik_path']) && !empty($_POST['wp-piwik_path']) && realpath($_POST['wp-piwik_path']) === false) + echo '<p class="wp-piwik-eyecatcher">'.__('Invalid path. Please enter the file path to Piwik.', 'wp-piwik').'</p>'; + ?> + </td> +</tr><tr> + <th><?php _e('Auth token', 'wp-piwik'); ?>:</th> + <td> + <input name="wp-piwik_token" id="wp-piwik_token" type="text" value="<?php echo self::$aryGlobalSettings['piwik_token']; ?>" /> + <label for="wp-piwik_token"></label> + </td> +</tr><?php if (!is_plugin_active_for_network('wp-piwik/wp-piwik.php')) { ?><tr> + <th><?php _e('Auto config', 'wp-piwik'); ?>:</th> + <td> + <input name="wp-piwik_auto_site_config" id="wp-piwik_auto_site_config" value="1" type="checkbox"<?php echo (self::$aryGlobalSettings['auto_site_config']?' checked="checked"':'') ?>/> + <label for="wp-piwik_auto_site_config"><?php _e('Check this to automatically choose your blog from your Piwik sites by URL. If your blog is not added to Piwik yet, WP-Piwik will add a new site.', 'wp-piwik') ?></label> + </td> +</tr> +<?php +if (!empty(self::$aryGlobalSettings['piwik_url']) && !empty(self::$aryGlobalSettings['piwik_token'])) { + $aryData = $this->callPiwikAPI('SitesManager.getSitesWithAtLeastViewAccess'); + if (empty($aryData)) { + echo '<tr><td colspan="2">'; + self::showErrorMessage(__('Please check URL and auth token. You need at least view access to one site.', 'wp-piwik')); + echo '</td></tr>'; + } + elseif (isset($aryData['result']) && $aryData['result'] == 'error') { + echo '<tr><td colspan="2">'; + self::showErrorMessage($aryData['message']); + echo '</td></tr>'; + } else if (!self::$aryGlobalSettings['auto_site_config']) { + echo '<tr><th>'.__('Choose site', 'wp-piwik').':</th><td>'; + echo '<select name="wp-piwik_siteid" id="wp-piwik_siteid">'; + $aryOptions = array(); + foreach ($aryData as $arySite) + $aryOptions[$arySite['name'].'#'.$arySite['idsite']] = '<option value="'.$arySite['idsite']. + '"'.($arySite['idsite']==self::$arySettings['site_id']?' selected="selected"':''). + '>'.htmlentities($arySite['name'], ENT_QUOTES, 'utf-8'). + '</option>'; + ksort($aryOptions); + foreach ($aryOptions as $strOption) echo $strOption; + echo '</select></td></tr>'; + } else { + if (empty(self::$arySettings['site_id'])) + $this->addPiwikSite(); + echo '<tr><th>'.__('Determined site', 'wp-piwik').':</th><td>'; + echo '<div class="input-text-wrap">'; + if (is_array(self::$arySettings['site_id']) && self::$arySettings['site_id']['result'] == 'error') + self::showErrorMessage(self::$arySettings['site_id']['message']); + else foreach ($aryData as $arySite) + if ($arySite['idsite'] == self::$arySettings['site_id']) {echo '<em>'.htmlentities($arySite['name'], ENT_QUOTES, 'utf-8').'</em>'; break;} + echo '<input type="hidden" name="wp-piwik_siteid" id="wp-piwik_siteid" value="'.(int)self::$arySettings['site_id'].'" /></td></tr>'; + } +} +}} +// Expert settings (cURL only) +?><tr> + <th colspan="2"><strong><?php _e('Expert Settings', 'wp-piwik'); ?>:</strong></th> +</tr><tr> + <th><label><?php _e('Connection timeout', 'wp-piwik'); ?>:</label></th> + <td> + <input style="width:50px;" type="text" name="wp-piwik_timeout" value="<?php echo self::$aryGlobalSettings['connection_timeout']; ?>" /> + </td> +</tr> +<?php if (function_exists('curl_init')) { ?> +<tr> + <th><label <?php echo (self::$aryGlobalSettings['piwik_mode']=='php'?'class="wp-piwik-input-hide" ':''); ?>id="wp-piwik_disable_ssl_verify-label"><?php _e('Disable SSL peer verification', 'wp-piwik'); ?>:</label></th> + <td> + <input <?php echo (self::$aryGlobalSettings['piwik_mode']=='php'?'class="wp-piwik-input-hide" ':''); ?>id="wp-piwik_disable_ssl_verify" name="wp-piwik_disable_ssl_verify" type="checkbox"<?php echo (self::$aryGlobalSettings['disable_ssl_verify']?'checked="checked"':''); ?> /> (<?php _e('not recommended','wp-piwik'); ?>) + </td> +</tr><tr> + <th><label><?php _e('User agent', 'wp-piwik'); ?>:</label></th> + <td> + <input type="radio" onchange="javascript:$j('#wp-piwik-useragent').toggleClass('readonly="readonly"');" name="wp-piwik_useragent" value="php" <?php echo (self::$aryGlobalSettings['piwik_useragent']=='php'?'checked="checked" ':''); ?>/> PHP default (<?php echo ini_get('user_agent'); ?>) + </td> +</tr><tr> + <th></th> + <td> + <input type="radio" onchange="javascript:$j('#wp-piwik-useragent').toggleClass('wp-piwik-useragent-disable');" name="wp-piwik_useragent" value="own" <?php echo (self::$aryGlobalSettings['piwik_useragent']=='own'?'checked="checked" ':''); ?>/> <input type="text" id="wp-piwik-useragent" name="wp-piwik_useragent_string" value="<?php echo self::$aryGlobalSettings['piwik_useragent_string']; ?>" /> + </td> +</tr> +<?php } else { ?> +<tr> + <td colspan="2"><?php _e('Further expert settings require cURL. See <a href="http://www.php.net/manual/curl.setup.php">PHP manual</a>', 'wp-piwik'); ?>.</td> +</tr> +<?php } \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/settings/sitebrowser.php b/wp-content/plugins/wp-piwik/settings/sitebrowser.php new file mode 100644 index 0000000000000000000000000000000000000000..0f0fde76bb2a53ad997c8c594ceae3f5ace27913 --- /dev/null +++ b/wp-content/plugins/wp-piwik/settings/sitebrowser.php @@ -0,0 +1,98 @@ +<?php +$bolCURL = function_exists('curl_init'); +$bolFOpen = ini_get('allow_url_fopen'); +if (!$bolFOpen && !$bolCURL) { +?><tr> + <td colspan="2"> + <strong><?php _e('Error: cURL is not enabled and fopen is not allowed to open URLs. WP-Piwik won\'t be able to connect to Piwik.'); ?></strong> + </td> +</tr><?php } else { ?> +</table> +<?php +if (!class_exists('WP_List_Table')) + require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' ); + +if (isset($_GET['wpmu_show_stats']) && ($_GET['wpmu_show_stats'] == (int) $_GET['wpmu_show_stats'])) + $this->addPiwikSite(); + +// See wpengineer.com/2426/wp_list_table-a-step-by-step-guide/ +class SiteBrowser extends WP_List_Table { + + var $aryData = array(); + + function get_columns(){ + $columns = array( + 'id' => __('ID','wp-piwik'), + 'name' => __('Title','wp-piwik'), + 'siteurl' => __('URL','wp-piwik'), + 'piwikid' => __('Site ID (Piwik)','wp-piwik') + ); + return $columns; + } + + function prepare_items($bolNetwork = false) { + $current_page = $this->get_pagenum(); + $per_page = 10; + global $blog_id; + global $wpdb; + global $pagenow; + if (is_plugin_active_for_network('wp-piwik/wp-piwik.php')) { + $total_items = $wpdb->get_var('SELECT COUNT(*) FROM '.$wpdb->blogs); + $aryBlogs = $wpdb->get_results($wpdb->prepare('SELECT blog_id FROM '.$wpdb->blogs.' ORDER BY blog_id LIMIT %d,%d',(($current_page-1)*$per_page),$per_page)); + foreach ($aryBlogs as $aryBlog) { + $objBlog = get_blog_details($aryBlog->blog_id, true); + $this->aryData[] = array( + 'name' => $objBlog->blogname, + 'id' => $objBlog->blog_id, + 'siteurl' => $objBlog->siteurl, + 'piwikid' => WP_Piwik::getSiteID($objBlog->blog_id) + ); + } + } else { + $objBlog = get_bloginfo(); + $this->aryData[] = array( + 'name' => get_bloginfo('name'), + 'id' => '-', + 'siteurl' => get_bloginfo('url'), + 'piwikid' => WP_Piwik::getSiteID() + ); + $total_items = 1; + } + $columns = $this->get_columns(); + $hidden = array(); + $sortable = array(); + $this->_column_headers = array($columns, $hidden, $sortable); + $this->set_pagination_args(array( + 'total_items' => $total_items, + 'per_page' => $per_page + )); + if ($bolNetwork) $pagenow = 'settings.php'; + foreach ($this->aryData as $intKey => $aryDataset) { + if (empty($aryDataset['piwikid']) || !is_int($aryDataset['piwikid'])) + $this->aryData[$intKey]['piwikid'] = '<a href="'.admin_url(($pagenow == 'settings.php'?'network/':'')).$pagenow.'?page=wp-piwik/wp-piwik.php&tab=sitebrowser'.($aryDataset['id'] != '-'?'&wpmu_show_stats='.$aryDataset['id']:'').'">Create Piwik site</a>'; + if ($bolNetwork) + $this->aryData[$intKey]['name'] = '<a href="?page=wp-piwik_stats&wpmu_show_stats='.$aryDataset['id'].'">'.$aryDataset['name'].'</a>'; + } + $this->items = $this->aryData; + return count($this->items); + } + + function column_default( $item, $column_name ) { + switch( $column_name ) { + case 'id': + case 'name': + case 'siteurl': + case 'piwikid': + return $item[$column_name]; + default: + return print_r($item,true); + } + } +} +$objSiteBrowser = new SiteBrowser(); +$intCnt = $objSiteBrowser->prepare_items($this->bolNetwork); +if ($intCnt > 0) $objSiteBrowser->display(); +else echo '<p>No site configured yet.</p>' +?> +<table> +<?php } ?> \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/settings/support.php b/wp-content/plugins/wp-piwik/settings/support.php new file mode 100644 index 0000000000000000000000000000000000000000..a8426b7bad718ce78c71c2ed3d83d6391a719b91 --- /dev/null +++ b/wp-content/plugins/wp-piwik/settings/support.php @@ -0,0 +1,63 @@ +<tr> + <td><a href="http://peepbo.de/board/viewforum.php?f=3"><?php _e('WP-Piwik support board','wp-piwik'); ?></a> (<?php _e('no registration required, English & German','wp-piwik'); ?>)</td> +</tr> +<tr> + <td><a href="http://wordpress.org/tags/wp-piwik?forum_id=10"><?php _e('WordPress.org forum about WP-Piwik','wp-piwik'); ?></a> (<?php _e('WordPress.org registration required, English','wp-piwik'); ?>)</td> +</tr> +<tr> + <td><?php _e('Please don\'t forget to vote the compatibility at the','wp-piwik'); ?> <a href="http://wordpress.org/extend/plugins/wp-piwik/">WordPress.org Plugin Directory</a>.</td> +</tr> +<tr> + <td> + <h3><?php _e('Debugging', 'wp-piwik'); ?></h3> + <p><?php _e('Either allow_url_fopen has to be enabled <em>or</em> cURL has to be available:', 'wp-piwik'); ?></p> + <ol> + <li><?php + _e('cURL is','wp-piwik'); + echo ' <strong>'.(function_exists('curl_init')?'':__('not','wp-piwik')).' '; + _e('available','wp-piwik'); + ?></strong>.</li> + <li><?php + _e('allow_url_fopen is','wp-piwik'); + echo ' <strong>'.(ini_get('allow_url_fopen')?'':__('not','wp-piwik')).' '; + _e('enabled','wp-piwik'); + ?></strong>.</li> + </ol> +<?php if (!(empty(self::$aryGlobalSettings['piwik_token']) || empty(self::$aryGlobalSettings['piwik_url']))) { ?> +<?php + if (isset($_GET['mode'])) { + switch ($_GET['mode']) { + case 'testscript': + echo '<p><strong>'.__('Test script result','wp-piwik').'</strong></p>'; + self::loadTestscript(); + break; + case 'reset': + echo '<p class="wp-piwik-eyecatcher"><strong class="wp-piwik-error">'.__('Please confirm your reset request','wp-piwik').':</strong> <a href="?page=wp-piwik/wp-piwik.php&tab=support&mode=resetconfirmed">'.__('YES, please reset <strong>all</strong> WP-Piwik settings <strong>except</strong> auth token and Piwi URL.', 'wp-piwik').'</a></p>'; + break; + case 'resetconfirmed': + // Increase time limit before resetting + set_time_limit(0); + self::resetSettings((isset($_GET['full']) && $_GET['full'])); + echo '<p class="wp-piwik-eyecatcher"><strong>'.__('WP-Piwik reset done','wp-piwik').'</strong></p>'; + default: + } + } +?> + <p><strong><?php _e('Get more debug information', 'wp-piwik'); ?>:</strong></p> + <ol> + <li><a href="?page=wp-piwik/wp-piwik.php&tab=support&mode=testscript"><?php _e('Run test script','wp-piwik'); ?></a></li> + <li><a href="?page=wp-piwik/wp-piwik.php&tab=sitebrowser"><?php _e('Get site configuration details','wp-piwik'); ?></a></li> + <li><a href="?page=wp-piwik/wp-piwik.php&tab=support&mode=reset"><?php _e('Reset WP-Piwik settings except auth token and Piwik URL','wp-piwik'); ?></a> (<?php _e('This will not affect Piwik itself. Resetting large networks may take some minutes.', 'wp-piwik'); ?>)</li> + </ol> +<?php } else echo '<p>'.__('You have to enter your auth token and the Piwik URL before you can access more debug functions.', 'wp-piwik').'</p>'; ?> + </td> +</tr> +<tr><td><h3><?php _e('Latest support threads on WordPress.org', 'wp-piwik'); ?></h3> +<?php + $arySupportThreads = self::readRSSFeed('http://wordpress.org/support/rss/plugin/wp-piwik'); + if (!empty($arySupportThreads)) { + echo '<ol>'; + foreach ($arySupportThreads as $arySupportThread) echo '<li><a href="'.$arySupportThread['url'].'">'.$arySupportThread['title'].'</a></li>'; + echo '</ol>'; + } +?></td></tr> \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/settings/tracking.php b/wp-content/plugins/wp-piwik/settings/tracking.php new file mode 100644 index 0000000000000000000000000000000000000000..cd481693a229d57484e79ab25b7cf85467d1cedc --- /dev/null +++ b/wp-content/plugins/wp-piwik/settings/tracking.php @@ -0,0 +1,98 @@ +<?php +$bolCURL = function_exists('curl_init'); +$bolFOpen = ini_get('allow_url_fopen'); +if (!$bolFOpen && !$bolCURL) { +?><tr> + <td colspan="2"> + <strong><?php _e('Error: cURL is not enabled and fopen is not allowed to open URLs. WP-Piwik won\'t be able to connect to Piwik.'); ?></strong> + </td> +</tr><?php } else { ?> +<tr><td colspan="2"><?php _e('Add tracking code', 'wp-piwik'); ?>: + <input + onchange="javascript:$j('#wp-piwik-tracking-settings').toggleClass('wp-piwik-form-table-hide');" + type="checkbox" value="1" id="wp-piwik_addjs" name="wp-piwik_addjs"<?php echo (self::$aryGlobalSettings['add_tracking_code']?' checked="checked"':''); ?> /> + <label for="wp-piwik_addjs"><?php _e('If your template uses wp_footer(), WP-Piwik can automatically add the Piwik javascript code to your blog.', 'wp-piwik'); ?></label> +</td></tr> +</table> +<?php +if (self::$aryGlobalSettings['add_tracking_code']) { + $strJavaScript = $this->callPiwikAPI('SitesManager.getJavascriptTag'); + if (is_array($strJavaScript)) { + if (isset($strJavaScript['result']) && $strJavaScript['result'] == 'error') + self::showErrorMessage(__($strJavaScript['message'],'wp-piwik')); + } else { + // Save javascript code + self::$arySettings['tracking_code'] = $strJavaScript; + } + self::saveSettings(); +} +?> +<table id="wp-piwik-tracking-settings" class="wp-piwik-form-table form-table<?php echo (!self::$aryGlobalSettings['add_tracking_code']?' wp-piwik-form-table-hide':''); ?>"> +<tr><th><?php _e('Tracking code preview', 'wp-piwik'); ?>:</th><td> +<textarea id="wp-piwik_jscode" name="wp-piwik_jscode" readonly="readonly" rows="13" cols="80"> +<?php echo (is_plugin_active_for_network('wp-piwik/wp-piwik.php')?'*** SITE SPECIFIC EXAMPLE CODE ***'."\n":'').htmlentities(self::$arySettings['tracking_code']); ?> +</textarea> +</td></tr> + +<tr><th><?php _e('<noscript> code preview', 'wp-piwik'); ?>:</th><td> +<textarea id="wp-piwik_nocode" name="wp-piwik_nocode" readonly="readonly" rows="2" cols="80"> +<?php echo (is_plugin_active_for_network('wp-piwik/wp-piwik.php')?'*** SITE SPECIFIC EXAMPLE CODE ***'."\n":'').htmlentities(self::$arySettings['noscript_code']); ?> +</textarea> +</td></tr> + +<tr><th><?php _e('Default tracking', 'wp-piwik'); ?>:</th><td> + <input type="radio" value="0" id="wp-piwik_default" name="wp-piwik_trackingmode"<?php echo (self::$aryGlobalSettings['track_mode']==0?' checked="checked"':''); ?> /> + <label for="wp-piwik_compress"><?php _e('WP-Piwik uses the Piwik default tracking code.', 'wp-piwik'); ?> <a href="http://demo.piwik.org/js/README">js/README</a>.</label> +</td></tr> + +<tr><th><?php _e('Use js/index.php', 'wp-piwik'); ?>:</th><td> + <input type="radio" value="1" id="wp-piwik_compress" name="wp-piwik_trackingmode"<?php echo (self::$aryGlobalSettings['track_mode']==1?' checked="checked"':''); ?> /> + <label for="wp-piwik_compress"><?php _e('WP-Piwik can automatically use js/index.php instead of piwik.js and piwik.php. See', 'wp-piwik'); ?> <a href="http://demo.piwik.org/js/README">js/README</a>.</label> +</td></tr> + +<tr><th><?php _e('Use proxy script', 'wp-piwik'); ?>:</th><td> + <input type="radio" value="2" id="wp-piwik_proxy" name="wp-piwik_trackingmode"<?php echo (self::$aryGlobalSettings['track_mode']==2?' checked="checked"':''); ?> /> + <label for="wp-piwik_compress"><?php _e('WP-Piwik will use the piwik.php proxy script. See', 'wp-piwik'); ?> <a href="http://piwik.org/faq/how-to/#faq_132">Piwik FAQ</a>.</label> +</td></tr> + + +<tr><th><?php _e('Add <noscript>', 'wp-piwik'); ?>:</th><td> + <input type="checkbox" value="1" id="wp-piwik_noscript" name="wp-piwik_noscript"<?php echo (self::$aryGlobalSettings['track_noscript']?' checked="checked"':''); ?> /> + <label for="wp-piwik_noscript"><?php echo _e('Adds the <noscript> code to your footer.', 'wp-piwik'); ?> <?php _e('Disabled in proxy mode.', 'wp-piwik'); ?></label> +</td></tr> + +<tr><th><?php _e('Disable cookies', 'wp-piwik'); ?>:</th><td> + <input type="checkbox" value="1" id="wp-piwik_disable_cookies" name="wp-piwik_disable_cookies"<?php echo (self::$aryGlobalSettings['disable_cookies']?' checked="checked"':''); ?> /> + <label for="wp-piwik_disable_cookies"><?php echo _e('Disable all tracking cookies for a visitor.', 'wp-piwik'); ?></label> +</td></tr> + +<tr><th><?php _e('Track search', 'wp-piwik'); ?>:</th><td> + <input type="checkbox" value="1" id="wp-piwik_search" name="wp-piwik_search"<?php echo (self::$aryGlobalSettings['track_search']?' checked="checked"':''); ?> /> + <label for="wp-piwik_search"><?php echo _e('Use Piwik\'s advanced Site Search Analytics feature. See', 'wp-piwik'); ?> <a href="http://piwik.org/docs/javascript-tracking/#toc-tracking-internal-search-keywords-categories-and-no-result-search-keywords">Piwik documentation</a>.</label> +</td></tr> + +<tr><th><?php _e('Track 404', 'wp-piwik'); ?>:</th><td> + <input type="checkbox" value="1" id="wp-piwik_404" name="wp-piwik_404"<?php echo (self::$aryGlobalSettings['track_404']?' checked="checked"':''); ?> /> + <label for="wp-piwik_404"><?php echo _e('WP-Piwik can automatically add a 404-category to track 404-page-visits.', 'wp-piwik'); ?></label> +</td></tr> +<tr><th><?php _e('Avoid mod_security', 'wp-piwik'); ?>:</th><td> + <input type="checkbox" value="1" id="wp-piwik_reqpost" name="wp-piwik_reqpost"<?php echo (self::$aryGlobalSettings['track_post']?' checked="checked"':''); ?> /> + <label for="wp-piwik_reqpost"><?php _e('WP-Piwik can automatically force the Tracking Code to sent data in POST. See', 'wp-piwik'); ?> <a href="http://piwik.org/faq/troubleshooting/#faq_100">Piwik FAQ</a>. <?php _e('Disabled in proxy mode.', 'wp-piwik'); ?></label> +</td></tr> + +<tr><th><?php _e('CDN URL', 'wp-piwik'); ?>:</th><td> + http://<input type="text" value="<?php echo self::$aryGlobalSettings['track_cdnurl']; ?>" id="wp-piwik_cdnurl" name="wp-piwik_cdnurl" /> https://<input type="text" value="<?php echo self::$aryGlobalSettings['track_cdnurlssl']; ?>" id="wp-piwik_cdnurlssl" name="wp-piwik_cdnurlssl" /><br /> + <label for="wp-piwik_reqpost"><?php _e('Leave blank if you do not want to define a CDN URL or you do not know what this is.', 'wp-piwik'); ?></label> +</td></tr> + +<tr><th><?php _e('Tracking filter', 'wp-piwik'); ?>:</th><td> +<?php + global $wp_roles; + $aryFilter = self::$aryGlobalSettings['capability_stealth']; + foreach($wp_roles->role_names as $strKey => $strName) { + echo '<input type="checkbox" '.(isset($aryFilter[$strKey]) && $aryFilter[$strKey]?'checked="checked" ':'').'value="1" name="wp-piwik_filter['.$strKey.']" /> '.$strName.' '; + } +?><br><?php _e('Choose users by user role you do <strong>not</strong> want to track.','wp-piwik'); ?></td></tr> +</table> +<table class="wp-piwik-form-table form-table"> +<?php } ?> \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/settings/views.php b/wp-content/plugins/wp-piwik/settings/views.php new file mode 100644 index 0000000000000000000000000000000000000000..9e92aa89ca9e86711a2fc86a349e47af1f6a6793 --- /dev/null +++ b/wp-content/plugins/wp-piwik/settings/views.php @@ -0,0 +1,56 @@ +<?php +$bolCURL = function_exists('curl_init'); +$bolFOpen = ini_get('allow_url_fopen'); +if (!$bolFOpen && !$bolCURL) { +?><tr> + <td colspan="2"> + <strong><?php _e('Error: cURL is not enabled and fopen is not allowed to open URLs. WP-Piwik won\'t be able to connect to Piwik.'); ?></strong> + </td> +</tr><?php } else { ?> +<tr><th>Piwik <?php _e('Default date', 'wp-piwik'); ?>:</th><td> + <select id="wp-piwik_default_date" name="wp-piwik_default_date"> + <option value="yesterday"<?php echo (self::$aryGlobalSettings['default_date'] == 'yesterday'?' selected="selected"':'');?>> <?php _e('yesterday', 'wp-piwik');?></option> + <option value="today"<?php echo (self::$aryGlobalSettings['default_date'] == 'today'?' selected="selected"':'');?>> <?php _e('today', 'wp-piwik');?></option> + </select> + <label for="wp-piwik_default_date"><?php echo _e('Default date shown on statistics page.', 'wp-piwik'); ?></label> +</td></tr> +<tr><th><?php _e('Home Dashboard', 'wp-piwik'); ?>:</th><td> + <select id="wp-piwik_dbwidget" name="wp-piwik_dbwidget"> + <option value="0"'<?php echo (!self::$aryGlobalSettings['dashboard_widget']?' selected="selected"':''); ?>><?php _e('Hide overview', 'wp-piwik'); ?></option> + <option value="yesterday"<?php echo (self::$aryGlobalSettings['dashboard_widget'] == 'yesterday'?' selected="selected"':''); ?>><?php echo __('Show overview','wp-piwik').' ('.__('yesterday', 'wp-piwik').')'; ?></option> + <option value="today"<?php echo (self::$aryGlobalSettings['dashboard_widget'] == 'today'?' selected="selected"':''); ?>><?php echo __('Show overview','wp-piwik').' ('.__('today', 'wp-piwik').')'; ?></option> + <option value="last30"<?php echo (self::$aryGlobalSettings['dashboard_widget'] == 'last30'?' selected="selected"':''); ?>><?php echo __('Show overview','wp-piwik').' ('.__('last 30 days','wp-piwik').')'; ?></option> + </select> + <input type="checkbox" value="1" name="wp-piwik_dbchart" id="wp-piwik_dbchart"<?php echo (self::$aryGlobalSettings['dashboard_chart']?' checked="checked"':""); ?>/> <?php _e('Chart', 'wp-piwik'); ?> + <input type="checkbox" value="1" name="wp-piwik_dbseo" id="wp-piwik_dbseo"<?php echo (self::$aryGlobalSettings['dashboard_seo']?' checked="checked"':""); ?>/> <?php _e('SEO <em>(slow!)</em>', 'wp-piwik'); ?> + <br><?php _e('Configure WP-Piwik widgets to be shown on your WordPress Home Dashboard.', 'wp-piwik'); ?> +</td></tr> +<tr><th><?php _e('Show graph on WordPress Toolbar', 'wp-piwik'); ?>:</th><td> + <input type="checkbox" value="1" id="wp-piwik_toolbar" name="wp-piwik_toolbar"<?php echo (self::$aryGlobalSettings['toolbar']?' checked="checked"':''); ?> /> + <label for="wp-piwik_toolbar"><?php echo _e('Display the last 30 days visitor stats on WordPress Toolbar.', 'wp-piwik'); ?></label> +</td></tr> +<tr><th><?php _e('SEO data', 'wp-piwik'); ?>:</th><td> + <input type="checkbox" value="1" id="wp-piwik_statsseo" name="wp-piwik_statsseo"<?php echo (self::$aryGlobalSettings['stats_seo']?' checked="checked"':''); ?> /> + <label for="wp-piwik_statsseo"><?php echo _e('Display SEO ranking data on statistics page. <em>(Slow!)</em>', 'wp-piwik'); ?></label> +</td></tr> +<tr><th>Piwik <?php _e('Shortcut', 'wp-piwik'); ?>:</th><td> + <input type="checkbox" value="1" id="wp-piwik_piwiklink" name="wp-piwik_piwiklink"<?php echo (self::$aryGlobalSettings['piwik_shortcut']?' checked="checked"':''); ?> /> + <label for="wp-piwik_piwiklink"><?php echo _e('Display a shortcut to Piwik itself.', 'wp-piwik'); ?></label> +</td></tr> +<tr><th>Piwik <?php _e('Display to', 'wp-piwik'); ?>:</th><td> +<?php + global $wp_roles; + foreach($wp_roles->role_names as $strKey => $strName) + echo '<input name="wp-piwik_displayto['.$strKey.']" type="checkbox" value="1"'.(isset(self::$aryGlobalSettings['capability_read_stats'][$strKey]) && self::$aryGlobalSettings['capability_read_stats'][$strKey]?' checked="checked"':'').'/> '.$strName.' '; +?> + <br><?php echo _e('Choose user roles allowed to see the statistics page.', 'wp-piwik'); ?> +</td></tr> +<tr><th><?php _e('Disable time limit', 'wp-piwik'); ?>:</th><td> + <input type="checkbox" value="1" id="wp-piwik_disabletimelimit" name="wp-piwik_disabletimelimit"<?php echo (self::$aryGlobalSettings['disable_timelimit']?' checked="checked"':''); ?> /> + <label for="wp-piwik_disabletimelimit"><?php echo _e('Use set_time_limit(0) if stats page causes a time out.', 'wp-piwik'); ?></label> +</td></tr> +<tr><th><?php _e('Enable shortcodes', 'wp-piwik'); ?>:</th><td> + <input type="checkbox" value="1" id="wp-piwik_shortcodes" name="wp-piwik_shortcodes"<?php echo (self::$aryGlobalSettings['shortcodes']?' checked="checked"':''); ?> /> + <label for="wp-piwik_shortcodes"><?php echo _e('Enable shortcodes in post or page content.', 'wp-piwik'); ?></label> +</td></tr> +<?php } ?> \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/shortcodes/overview.php b/wp-content/plugins/wp-piwik/shortcodes/overview.php new file mode 100644 index 0000000000000000000000000000000000000000..f5e946a129f4f01a057528bdc411ab9cb3cd03a6 --- /dev/null +++ b/wp-content/plugins/wp-piwik/shortcodes/overview.php @@ -0,0 +1,48 @@ +<?php +/********************************* + WP-Piwik::Short:Overview +**********************************/ +$aryData = $this->callPiwikAPI('VisitsSummary.get', + $this->aryAttributes['period'], + $this->aryAttributes['date'], + $this->aryAttributes['limit'] +); + +$this->strResult = '<table><tr><th>'.__('Overview', 'wp-piwik').($this->aryAttributes['title']?' '.$this->aryAttributes['title']:'').'</th></tr>'; + +function summize($aryData) { + $aryTmp = array(); + foreach ($aryData as $aryValues) + foreach($aryValues as $strKey => $intValue) + if (isset($aryTmp[$strKey])) $aryTmp[$strKey] += $intValue; + else $aryTmp[$strKey] = $intValue; + $aryTmp['bounce_rate'] = ($aryTmp['nb_uniq_visitors']==0?0:round($aryTmp['bounce_count']/$aryTmp['nb_visits']*100,2)).'%'; + + return $aryTmp; +} + +if (is_array($aryData)) { + if (isset($aryData['result']) && $aryData['result'] == 'error') + $this->strResult .= '<tr><td>'.__('Error', 'wp-piwik').':'.'</td><td>'.$aryData['message'].'</td></tr>'; + else { + if (is_array(current($aryData))) + $aryData = summize($aryData); + $strTime = + floor($aryData['sum_visit_length']/3600).'h '. + floor(($aryData['sum_visit_length'] % 3600)/60).'m '. + floor(($aryData['sum_visit_length'] % 3600) % 60).'s'; + $strAvgTime = + floor($aryData['avg_time_on_site']/3600).'h '. + floor(($aryData['avg_time_on_site'] % 3600)/60).'m '. + floor(($aryData['avg_time_on_site'] % 3600) % 60).'s'; + $this->strResult .= '<tr><td>'.__('Visitors', 'wp-piwik').':'.'</td><td>'.$aryData['nb_visits'].'</td></tr>'; + $this->strResult .= '<tr><td>'.__('Unique visitors', 'wp-piwik').':'.'</td><td>'.$aryData['nb_uniq_visitors'].'</td></tr>'; + $this->strResult .= '<tr><td>'.__('Page views', 'wp-piwik').':'.'</td><td>'.$aryData['nb_actions'].' (Ø '.$aryData['nb_actions_per_visit'].')</td></tr>'; + $this->strResult .= '<tr><td>'.__('Max. page views in one visit', 'wp-piwik').':'.'</td><td>'.$aryData['max_actions'].'</td></tr>'; + $this->strResult .= '<tr><td>'.__('Total time spent', 'wp-piwik').':'.'</td><td>'.$strTime.'</td></tr>'; + $this->strResult .= '<tr><td>'.__('Time/visit', 'wp-piwik').':'.'</td><td>'.$strAvgTime.'</td></tr>'; + $this->strResult .= '<tr><td>'.__('Bounce count', 'wp-piwik').':'.'</td><td>'.$aryData['bounce_count'].' ('.$aryData['bounce_rate'].')</td></tr>'; + } +} else $this->strResult .= '<tr><td>'.__('No data available', 'wp-piwik').'</td></tr>'; + +$this->strResult .= '</table>'; \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/uninstall.php b/wp-content/plugins/wp-piwik/uninstall.php new file mode 100644 index 0000000000000000000000000000000000000000..f6b983fe22d1251e863fb9a15ed852db34e4abb3 --- /dev/null +++ b/wp-content/plugins/wp-piwik/uninstall.php @@ -0,0 +1,17 @@ +<?php + +// Check if uninstall call is valid +if (!defined('WP_UNINSTALL_PLUGIN')) exit(); + +global $wpdb; + +if (function_exists('is_multisite') && is_multisite()) { + delete_site_option('wp-piwik_global-settings'); + $aryBlogs = $wpdb->get_results('SELECT blog_id FROM '.$wpdb->blogs.' ORDER BY blog_id'); + if (is_array($aryBlogs)) + foreach ($aryBlogs as $aryBlog) + delete_blog_option($aryBlog->blog_id, 'wp-piwik_settings'); +} + +delete_option('wp-piwik_global-settings'); +delete_option('wp-piwik_settings'); \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/update/.htaccess b/wp-content/plugins/wp-piwik/update/.htaccess new file mode 100644 index 0000000000000000000000000000000000000000..3a42882788717c9ed1d5c2fcc3277d21ec13152b --- /dev/null +++ b/wp-content/plugins/wp-piwik/update/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/wp-content/plugins/wp-piwik/update/80403.php b/wp-content/plugins/wp-piwik/update/80403.php new file mode 100644 index 0000000000000000000000000000000000000000..41561b7f68dd047a3a7082259d53e57600da65a1 --- /dev/null +++ b/wp-content/plugins/wp-piwik/update/80403.php @@ -0,0 +1,47 @@ +<?php +// Capability read stats: Translate level to role +$aryTranslate = array( + 'level_10' => array('administrator' => true), + 'level_7' => array('editor' => true, 'administrator' => true), + 'level_2' => array('author' => true, 'editor' => true, 'administrator' => true), + 'level_1' => array('contributor' => true, 'author' => true, 'editor' => true, 'administrator' => true), + 'level_0' => array('subscriber' => true, 'contributor' => true, 'author' => true, 'editor' => true, 'administrator' => true) +); +$strDisplayToLevel = get_option('wp-piwik_displayto','level_10'); +if (!is_array($strDisplayToLevel) && isset($aryTranslate[$strDisplayToLevel])) $aryDisplayToCap = $aryTranslate[$strDisplayToLevel]; +else $aryDisplayToCap = array('administrator' => true); +// Build settings arrays +$aryDashboardWidgetRange = array(0 => false, 1 => 'yesterday', 2 => 'today', 3 => 'last30'); +if (self::$bolWPMU) self::$aryGlobalSettings = array( + 'revision' => get_site_option('wpmu-piwik_revision', 0), + 'add_tracking_code' => true, + 'last_settings_update' => get_site_option('wpmu-piwik_settingsupdate', time()), + 'piwik_token' => get_site_option('wpmu-piwik_token', ''), + 'piwik_url' => get_site_option('wpmu-piwik_url', ''), + 'dashboard_widget' => false, + 'capability_stealth' => get_site_option('wpmu-piwik_filter', array()), + 'capability_read_stats' => $aryDisplayToCap, + 'piwik_shortcut' => false, +); +else self::$aryGlobalSettings = array( + 'revision' => get_option('wp-piwik_revision',0), + 'add_tracking_code' => get_option('wp-piwik_addjs'), + 'last_settings_update' => get_option('wp-piwik_settingsupdate', time()), + 'piwik_token' => get_option('wp-piwik_token', ''), + 'piwik_url' => get_option('wp-piwik_url', ''), + 'dashboard_widget' => $aryDashboardWidgetRange[get_option('wp-piwik_dbwidget', 0)], + 'capability_stealth' => get_option('wp-piwik_filter', array()), + 'capability_read_stats' => $aryDisplayToCap, + 'piwik_shortcut' => get_option('wp-piwik_piwiklink',false), +); +$this->installSite(false); +// Remove deprecated option values +$aryRemoveOptions = array( + 'wp-piwik_disable_gapi','wp-piwik_displayto', + 'wp-piwik_revision','wp-piwik_addjs','wp-piwik_settingsupdate','wp-piwik_token', + 'wp-piwik_url','wp-piwik_dbwidget','wp-piwik_filter','wp-piwik_piwiklink' +); +foreach ($aryRemoveOptions as $strRemoveOption) { + if (self::$bolWPMU) delete_site_option($strRemoveOption); + else delete_option($strRemoveOption); +} \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/update/80502.php b/wp-content/plugins/wp-piwik/update/80502.php new file mode 100644 index 0000000000000000000000000000000000000000..be662b10477c944321c473f809b960d0fd409efa --- /dev/null +++ b/wp-content/plugins/wp-piwik/update/80502.php @@ -0,0 +1,2 @@ +<?php +self::$aryGlobalSettings['default_date'] = 'yesterday'; \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/update/80602.php b/wp-content/plugins/wp-piwik/update/80602.php new file mode 100644 index 0000000000000000000000000000000000000000..9945b42535c2a76b27608f38b482ec2569c96886 --- /dev/null +++ b/wp-content/plugins/wp-piwik/update/80602.php @@ -0,0 +1,2 @@ +<?php +self::$aryGlobalSettings['dashboard_chart'] = false; \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/update/80800.php b/wp-content/plugins/wp-piwik/update/80800.php new file mode 100644 index 0000000000000000000000000000000000000000..af60505ebfd38335cc5a5a380be5941b6c12b4a2 --- /dev/null +++ b/wp-content/plugins/wp-piwik/update/80800.php @@ -0,0 +1,2 @@ +<?php +self::$aryGlobalSettings['piwik_url'] = self::checkURL(self::$aryGlobalSettings['piwik_url']); \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/update/90001.php b/wp-content/plugins/wp-piwik/update/90001.php new file mode 100644 index 0000000000000000000000000000000000000000..25fad7c1418972327612338542bbaf5ebce311c0 --- /dev/null +++ b/wp-content/plugins/wp-piwik/update/90001.php @@ -0,0 +1,12 @@ +<?php +$aryWPMUConfig = get_site_option('wpmu-piwik_global-settings',false); +if (is_plugin_active_for_network('wp-piwik/wp-piwik.php') && $aryWPMUConfig) { + self::$aryGlobalSettings = $aryWPMUConfig; + delete_site_option('wpmu-piwik_global-settings'); + self::$aryGlobalSettings['auto_site_config'] = true; +} else self::$aryGlobalSettings['auto_site_config'] = false; +self::$aryGlobalSettings['dashboard_seo'] = false; +self::$aryGlobalSettings['stats_seo'] = false; +self::$aryGlobalSettings['track_404'] = self::$arySettings['track_404']; +self::$aryGlobalSettings['track_compress'] = false; +self::$aryGlobalSettings['track_post'] = false; \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/update/90206.php b/wp-content/plugins/wp-piwik/update/90206.php new file mode 100644 index 0000000000000000000000000000000000000000..9870b9aec007781bc235b8d3257d330e5ee71e99 --- /dev/null +++ b/wp-content/plugins/wp-piwik/update/90206.php @@ -0,0 +1,2 @@ +<?php +self::$aryGlobalSettings['disable_timelimit'] = false; \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/update/90405.php b/wp-content/plugins/wp-piwik/update/90405.php new file mode 100644 index 0000000000000000000000000000000000000000..bce3d92b1c559f8e17a45ff0a2ec23005aa621c7 --- /dev/null +++ b/wp-content/plugins/wp-piwik/update/90405.php @@ -0,0 +1,5 @@ +<?php +self::$aryGlobalSettings['piwik_mode'] = 'http'; +self::$aryGlobalSettings['piwik_path'] = ''; +self::$aryGlobalSettings['toolbar'] = false; +self::$aryGlobalSettings['disable_cookies'] = false; diff --git a/wp-content/plugins/wp-piwik/update/90601.php b/wp-content/plugins/wp-piwik/update/90601.php new file mode 100644 index 0000000000000000000000000000000000000000..6f383a9381e9b19b58902724e86c0e747c7ded3f --- /dev/null +++ b/wp-content/plugins/wp-piwik/update/90601.php @@ -0,0 +1,3 @@ +<?php +self::$aryGlobalSettings['piwik_useragent'] = 'php'; +self::$aryGlobalSettings['piwik_useragent_string'] = 'WP-Piwik'; \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/update/90700.php b/wp-content/plugins/wp-piwik/update/90700.php new file mode 100644 index 0000000000000000000000000000000000000000..6f1b8d64bcf2d0c49bafbf1d16a8cbe6a5859731 --- /dev/null +++ b/wp-content/plugins/wp-piwik/update/90700.php @@ -0,0 +1,2 @@ +<?php +self::$aryGlobalSettings['shortcodes'] = false; \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/update/90801.php b/wp-content/plugins/wp-piwik/update/90801.php new file mode 100644 index 0000000000000000000000000000000000000000..aa1ad670f7f182338b3e309c47a6c101aa55f017 --- /dev/null +++ b/wp-content/plugins/wp-piwik/update/90801.php @@ -0,0 +1,10 @@ +<?php +self::$aryGlobalSettings['track_search'] = false; +self::$aryGlobalSettings['connection_timeout'] = 5; +if (isset(self::$aryGlobalSettings['track_compress']) && self::$aryGlobalSettings['track_compress']) + self::$aryGlobalSettings['track_mode'] = 1; +else + self::$aryGlobalSettings['track_mode'] = 0; + +if (isset(self::$aryGlobalSettings['track_compress'])) + unset(self::$aryGlobalSettings['track_compress']); \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/update/90821.php b/wp-content/plugins/wp-piwik/update/90821.php new file mode 100644 index 0000000000000000000000000000000000000000..254d2055d90d61f406ac3766055be0c4d4fe3092 --- /dev/null +++ b/wp-content/plugins/wp-piwik/update/90821.php @@ -0,0 +1,2 @@ +<?php +self::$aryGlobalSettings['track_cdnurl'] = ''; diff --git a/wp-content/plugins/wp-piwik/update/90910.php b/wp-content/plugins/wp-piwik/update/90910.php new file mode 100644 index 0000000000000000000000000000000000000000..1caa7e0b00d51031f1c5c9c40db39a9e8bba34e0 --- /dev/null +++ b/wp-content/plugins/wp-piwik/update/90910.php @@ -0,0 +1,3 @@ +<?php +self::$aryGlobalSettings['track_cdnurlssl'] = self::$aryGlobalSettings['track_cdnurl']; +self::$aryGlobalSettings['track_noscript'] = false; \ No newline at end of file diff --git a/wp-content/plugins/wp-piwik/wp-piwik.php b/wp-content/plugins/wp-piwik/wp-piwik.php old mode 100644 new mode 100755 index d7f33c64d070160b9533d64d3681b530e8e60f1d..fd22e2a0c2b2e104ccdbb2d2100a8cb49b559399 --- a/wp-content/plugins/wp-piwik/wp-piwik.php +++ b/wp-content/plugins/wp-piwik/wp-piwik.php @@ -2,16 +2,16 @@ /* Plugin Name: WP-Piwik -Plugin URI: http://www.braekling.de/wp-piwik-wpmu-piwik-wordpress/ +Plugin URI: http://wordpress.org/extend/plugins/wp-piwik/ -Description: Adds Piwik stats to your dashboard menu and Piwik code to your wordpress footer. +Description: Adds Piwik stats to your dashboard menu and Piwik code to your wordpress header. -Version: 0.8.7 +Version: 0.9.9.1 Author: André Bräkling Author URI: http://www.braekling.de ****************************************************************************************** - Copyright (C) 2009-2011 Andre Braekling (email: webmaster@braekling.de) + Copyright (C) 2009-2013 Andre Braekling (email: webmaster@braekling.de) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,103 +27,180 @@ Author URI: http://www.braekling.de along with this program. If not, see <http://www.gnu.org/licenses/>. *******************************************************************************************/ -// Change this to enable *experimental* multisite-mode -$GLOBALS['wp-piwik_wpmu'] = false; +/** + * Avoid direct calls to this file if wp core files not present + * seen (as some other parts) in Heiko Rabe's metabox demo plugin + * + * @see http://tinyurl.com/5r5vnzs + */ +if (!function_exists ('add_action')) { + header('Status: 403 Forbidden'); + header('HTTP/1.1 403 Forbidden'); + exit(); +} + +/** + * Makes sure all required include files are loaded before trying to use it + * + * @see http://codex.wordpress.org/Function_Reference/is_plugin_active_for_network + * @see http://codex.wordpress.org/Function_Reference/get_current_screen + */ +if (!function_exists('is_plugin_active_for_network')) + require_once(ABSPATH.'/wp-admin/includes/plugin.php'); class wp_piwik { private static - $intRevisionId = 80700, - $strVersion = '0.8.7', - $intDashboardID = 6, - $bolWPMU = false, - $bolOverall = false, + $intRevisionId = 90910, + $strVersion = '0.9.9.1', + $intDashboardID = 30, $strPluginBasename = NULL, + $bolJustActivated = false, $aryGlobalSettings = array( - 'revision' => 0, + 'revision' => 90910, 'add_tracking_code' => false, 'last_settings_update' => 0, 'piwik_token' => '', 'piwik_url' => '', + 'piwik_path' => '', + 'piwik_mode' => 'http', + 'piwik_useragent' => 'php', + 'piwik_useragent_string' => 'WP-Piwik', + 'connection_timeout' => 5, 'dashboard_widget' => false, 'dashboard_chart' => false, + 'dashboard_seo' => false, + 'stats_seo' => false, 'capability_stealth' => array(), 'capability_read_stats' => array('administrator' => true), 'piwik_shortcut' => false, - 'default_date' => 'yesterday' + 'default_date' => 'yesterday', + 'auto_site_config' => true, + 'track_404' => false, + 'track_search' => false, + 'track_mode' => 0, + 'track_post' => false, + 'track_proxy' => false, + 'track_cdnurlssl' => '', + 'track_noscript' => false, + 'disable_timelimit' => false, + 'disable_ssl_verify' => false, + 'disable_cookies' => false, + 'toolbar' => false, + 'shortcodes' => false ), $arySettings = array( + 'name' => '', 'tracking_code' => '', 'site_id' => NULL, - 'track_404' => false, 'last_tracking_code_update' => 0, - 'dashboard_revision' => 0 + 'dashboard_revision' => 0, + 'noscript_code' => '' ); + + private + $intStatsPage = NULL, + $bolNetwork = false, + $aryAttributes = array(), + $strResult = ''; /** * Load plugin settings */ static function loadSettings() { - // Running as multisite? - if (isset($GLOBALS['wp-piwik_wpmu']) && $GLOBALS['wp-piwik_wpmu']) self::$bolWPMU = true; - // Get global settings depending on mode - self::$aryGlobalSettings = - (self::$bolWPMU? - get_site_option('wpmu-piwik_global-settings',self::$aryGlobalSettings): - get_option('wp-piwik_global-settings',self::$aryGlobalSettings) - ); - // Get mode-independent settings + // Get global settings + self::$aryGlobalSettings = (is_plugin_active_for_network('wp-piwik/wp-piwik.php')? + get_site_option('wp-piwik_global-settings',self::$aryGlobalSettings): + get_option('wp-piwik_global-settings',self::$aryGlobalSettings) + ); + // Get site settings self::$arySettings = get_option('wp-piwik_settings',self::$arySettings); + + return array( + 'global' => self::$aryGlobalSettings, + 'specific' => self::$arySettings + ); } /** * Save plugin settings */ static function saveSettings() { - // Save global settings depending on mode - if (self::$bolWPMU) update_site_option('wpmu-piwik_global-settings',self::$aryGlobalSettings); - else update_option('wp-piwik_global-settings',self::$aryGlobalSettings); - // Save mode-independent settings + // Save global settings + if (is_plugin_active_for_network('wp-piwik/wp-piwik.php')) + update_site_option('wp-piwik_global-settings',self::$aryGlobalSettings); + else + update_option('wp-piwik_global-settings',self::$aryGlobalSettings); + // Save blog settings update_option('wp-piwik_settings',self::$arySettings); - // Assign capabilities to roles + // Load WP_Roles class global $wp_roles; - if (is_object($wp_roles)) - foreach($wp_roles->role_names as $strKey => $strName) { - $objRole = get_role($strKey); - foreach (array('stealth', 'read_stats') as $strCap) - if (isset(self::$aryGlobalSettings['capability_'.$strCap][$strKey]) && self::$aryGlobalSettings['capability_'.$strCap][$strKey]) - $objRole->add_cap('wp-piwik_'.$strCap); - else - $objRole->remove_cap('wp-piwik_'.$strCap); - } + if (!is_object($wp_roles)) + $wp_roles = new WP_Roles(); + if (!is_object($wp_roles)) die("STILL NO OBJECT"); + // Assign capabilities to roles + foreach($wp_roles->role_names as $strKey => $strName) { + $objRole = get_role($strKey); + foreach (array('stealth', 'read_stats') as $strCap) + if (isset(self::$aryGlobalSettings['capability_'.$strCap][$strKey]) && self::$aryGlobalSettings['capability_'.$strCap][$strKey]) + $objRole->add_cap('wp-piwik_'.$strCap); + else $objRole->remove_cap('wp-piwik_'.$strCap); + } } /** * Constructor */ function __construct() { + // Call install function on activation + register_activation_hook(__FILE__, array($this, 'installPlugin')); // Store plugin basename self::$strPluginBasename = plugin_basename(__FILE__); // Load current settings self::loadSettings(); // Upgrade? - if (self::$aryGlobalSettings['revision'] < self::$intRevisionId) $this->install(); + if (self::$aryGlobalSettings['revision'] < self::$intRevisionId) $this->upgradePlugin(); // Settings changed? - if (isset($_POST['action']) && $_POST['action'] == 'save_settings') + if (isset($_POST['action']) && $_POST['action'] == 'save_wp-piwik_settings') $this->applySettings(); + // Set Piwik globals if PHP API is used + elseif (isset(self::$aryGlobalSettings['piwik_mode']) && self::$aryGlobalSettings['piwik_mode'] == 'php') + self::definePiwikConstants(); // Load language file load_plugin_textdomain('wp-piwik', false, dirname(self::$strPluginBasename)."/languages/"); - // Call install function on activation - register_activation_hook(__FILE__, array($this, 'install')); // Add meta links to plugin details - if (!self::$bolWPMU) add_filter('plugin_row_meta', array($this, 'set_plugin_meta'), 10, 2); - // Add tracking code to footer if enabled - if (self::$aryGlobalSettings['add_tracking_code']) add_action('wp_footer', array($this, 'footer')); - // Add admin menu - add_action('admin_menu', array($this, 'build_menu')); + add_filter('plugin_row_meta', array($this, 'setPluginMeta'), 10, 2); + // Register columns + add_filter('screen_layout_columns', array(&$this, 'onScreenLayoutColumns'), 10, 2); + // Add network admin menu if required + if (is_plugin_active_for_network('wp-piwik/wp-piwik.php')) + add_action('network_admin_menu', array($this, 'buildNetworkAdminMenu')); + // Add admin menu + add_action('admin_menu', array($this, 'buildAdminMenu')); + // Register the callback been used if options of page been submitted and needs to be processed + add_action('admin_post_save_wp-piwik_stats', array(&$this, 'onStatsPageSaveChanges')); + // Register own post meta boxes + add_action('load-post.php', array(&$this, 'postMetaboxes')); + add_action('load-post-new.php', array(&$this, 'postMetaboxes')); // Add dashboard widget if enabled - if (self::$aryGlobalSettings['dashboard_widget'] || self::$aryGlobalSettings['dashboard_chart']) - add_action('wp_dashboard_setup', array($this, 'extend_wp_dashboard_setup')); + /* TODO: Use bitmask here */ + if (self::$aryGlobalSettings['dashboard_widget'] || self::$aryGlobalSettings['dashboard_chart'] || self::$aryGlobalSettings['dashboard_seo']) + add_action('wp_dashboard_setup', array($this, 'extendWordPressDashboard')); + // Add Toolbar graph if enabled + if (self::$aryGlobalSettings['toolbar']) { + add_action(is_admin()?'admin_head':'wp_head', array($this, 'loadToolbarRequirements')); + add_action('admin_bar_menu', array(&$this, 'extendWordPressToolbar'), 1000); + } + // Enable shortcodes if enabled + if (self::$aryGlobalSettings['shortcodes']) + add_shortcode( 'wp-piwik', array(&$this, 'shortcode')); + + // Add tracking code to header if enabled + if (self::$aryGlobalSettings['add_tracking_code']) { + add_action('wp_head', array($this, 'site_header')); + // Add <noscript> code if enabled + if (self::$aryGlobalSettings['track_noscript']) add_action('wp_footer', array($this, 'site_footer')); + } } /** @@ -132,72 +209,24 @@ class wp_piwik { function __destruct() {} /** - * Install or upgrade + * Include WP-Piwik files */ - function install() { - - // Update: Translate options - if (self::$aryGlobalSettings['revision'] < 80403) { - // Capability read stats: Translate level to role - $aryTranslate = array( - 'level_10' => array('administrator' => true), - 'level_7' => array('editor' => true, 'administrator' => true), - 'level_2' => array('author' => true, 'editor' => true, 'administrator' => true), - 'level_1' => array('contributor' => true, 'author' => true, 'editor' => true, 'administrator' => true), - 'level_0' => array('subscriber' => true, 'contributor' => true, 'author' => true, 'editor' => true, 'administrator' => true) - ); - $strDisplayToLevel = get_option('wp-piwik_displayto','level_10'); - if (!is_array($strDisplayToLevel) && isset($aryTranslate[$strDisplayToLevel])) $aryDisplayToCap = $aryTranslate[$strDisplayToLevel]; - else $aryDisplayToCap = array('administrator' => true); - // Build settings arrays - $aryDashboardWidgetRange = array(0 => false, 1 => 'yesterday', 2 => 'today', 3 => 'last30'); - if (self::$bolWPMU) self::$aryGlobalSettings = array( - 'revision' => get_site_option('wpmu-piwik_revision', 0), - 'add_tracking_code' => true, - 'last_settings_update' => get_site_option('wpmu-piwik_settingsupdate', time()), - 'piwik_token' => get_site_option('wpmu-piwik_token', ''), - 'piwik_url' => get_site_option('wpmu-piwik_url', ''), - 'dashboard_widget' => false, - 'capability_stealth' => get_site_option('wpmu-piwik_filter', array()), - 'capability_read_stats' => $aryDisplayToCap, - 'piwik_shortcut' => false, - ); - else self::$aryGlobalSettings = array( - 'revision' => get_option('wp-piwik_revision',0), - 'add_tracking_code' => get_option('wp-piwik_addjs'), - 'last_settings_update' => get_option('wp-piwik_settingsupdate', time()), - 'piwik_token' => get_option('wp-piwik_token', ''), - 'piwik_url' => get_option('wp-piwik_url', ''), - 'dashboard_widget' => $aryDashboardWidgetRange[get_option('wp-piwik_dbwidget', 0)], - 'capability_stealth' => get_option('wp-piwik_filter', array()), - 'capability_read_stats' => $aryDisplayToCap, - 'piwik_shortcut' => get_option('wp-piwik_piwiklink',false), - ); - - $this->installSite(false); - - // Remove deprecated option values - $aryRemoveOptions = array( - 'wp-piwik_disable_gapi','wp-piwik_displayto', - 'wp-piwik_revision','wp-piwik_addjs','wp-piwik_settingsupdate','wp-piwik_token', - 'wp-piwik_url','wp-piwik_dbwidget','wp-piwik_filter','wp-piwik_piwiklink' - ); - foreach ($aryRemoveOptions as $strRemoveOption) { - if (self::$bolWPMU) delete_site_option($strRemoveOption); - else delete_option($strRemoveOption); - } - }; - if (self::$aryGlobalSettings['revision'] < 80502) { - self::$aryGlobalSettings['default_date'] = 'yesterday'; - } - if (self::$aryGlobalSettings['revision'] < 80602) { - self::$aryGlobalSettings['dashboard_chart'] = false; - } - add_action('admin_footer', array($this, 'updateMessage')); + private function includeFile($strFile) { + if (file_exists(dirname(__FILE__).DIRECTORY_SEPARATOR.$strFile.'.php')) + include(dirname(__FILE__).DIRECTORY_SEPARATOR.$strFile.'.php'); + } + + /** + * Install + */ + function installPlugin() { + // Keep activation/installation/upgrade in mind + self::$bolJustActivated = true; + // Show an info message after upgrade/install + add_action('admin_notices', array($this, 'updateMessage')); // Set current revision ID self::$aryGlobalSettings['revision'] = self::$intRevisionId; self::$aryGlobalSettings['last_settings_update'] = time(); - // Save upgraded or default settings self::saveSettings(); // Reload settings @@ -205,190 +234,468 @@ class wp_piwik { } /** - * Install or upgrade site settings + * Uninstall */ - function installSite($bolSave = true) { + static function uninstallPlugin() { + // Check if uninstall call is valid + if (!defined('WP_UNINSTALL_PLUGIN')) + exit(); + self::resetSettings(true); + } + + /** + * Upgrade + */ + function upgradePlugin() { + add_action('admin_notices', array($this, 'updateMessage')); + // Update: Translate options + if (self::$aryGlobalSettings['revision'] < 80403) + self::includeFile('update/80403'); + if (self::$aryGlobalSettings['revision'] < 80502) + self::includeFile('update/80502'); + if (self::$aryGlobalSettings['revision'] < 80602) + self::includeFile('update/80602'); + if (self::$aryGlobalSettings['revision'] < 80800) + self::includeFile('update/80800'); + if (self::$aryGlobalSettings['revision'] < 90001) + self::includeFile('update/90001'); + if (self::$aryGlobalSettings['revision'] < 90206) + self::includeFile('update/90206'); + if (self::$aryGlobalSettings['revision'] < 90405) + self::includeFile('update/90405'); + if (self::$aryGlobalSettings['revision'] < 90601) + self::includeFile('update/90601'); + if (self::$aryGlobalSettings['revision'] < 90700) + self::includeFile('update/90700'); + if (self::$aryGlobalSettings['revision'] < 90805) + self::includeFile('update/90801'); + if (self::$aryGlobalSettings['revision'] < 90821) + self::includeFile('update/90821'); + if (self::$aryGlobalSettings['revision'] < 90910) + self::includeFile('update/90910'); + + // Install new version + $this->installPlugin(); + } + + /** + * Upgrade outdated site settings + */ + function updateSite() { self::$arySettings = array( 'tracking_code' => '', 'site_id' => get_option('wp-piwik_siteid', NULL), - 'track_404' => get_option('wp-piwik_404', false), - 'last_tracking_code_update' => get_option('wp-piwik_scriptupdate', 0), + 'last_tracking_code_update' => 0, 'dashboard_revision' => get_option('wp-piwik_dashboardid', 0) ); - + self::$aryGlobalSettings['last_settings_update'] = time(); // Remove deprecated option values - $aryRemoveOptions = array( - 'wp-piwik_siteid','wp-piwik_404','wp-piwik_scriptupdate','wp-piwik_dashboardid','wp-piwik_jscode' - ); - foreach ($aryRemoveOptions as $strRemoveOption) { - delete_option($strRemoveOption); - }; - if ($bolSave) { - // Save upgraded or default settings - self::saveSettings(); - // Reload settings - self::loadSettings(); - } + $aryRemoveOptions = array('wp-piwik_siteid','wp-piwik_404','wp-piwik_scriptupdate','wp-piwik_dashboardid','wp-piwik_jscode'); + foreach ($aryRemoveOptions as $strRemoveOption) delete_option($strRemoveOption); + // Save upgraded or default settings + self::saveSettings(); + // Reload settings + self::loadSettings(); } /** * Send a message after installing/updating */ function updateMessage() { + // Message text $strText = 'WP-Piwik '.self::$strVersion.' '.__('installed','wp-piwik').'.'; - $strSettings = (empty(self::$aryGlobalSettings['piwik_token']) && empty(self::$aryGlobalSettings['piwik_url'])? + // Next step information + $strSettings = (!self::isConfigured()? __('Next you should connect to Piwik','wp-piwik'): __('Please validate your configuration','wp-piwik') ); - $strLink = sprintf('<a href="options-general.php?page=%s">%s</a>', self::$strPluginBasename, __('Settings', 'wp-piwik')); - echo '<div id="message" class="updated fade"><p>'.$strText.' '.$strSettings.': '.$strLink.'.</p></div>'; + // Create settings Link + $strLink = sprintf('<a href="'.(is_plugin_active_for_network('wp-piwik/wp-piwik.php')?'settings':'options-general').'.php?page=%s">%s</a>', self::$strPluginBasename, __('Settings', 'wp-piwik')); + // Display message + echo '<div class="updated fade"><p>'.$strText.' <strong>'.__('Important', 'wp-piwik').':</strong> '.$strSettings.': '.$strLink.'.</p></div>'; } /** * Add tracking code */ - function footer() { + function site_header() { // Hotfix: Custom capability problem with WP multisite - if (self::$bolWPMU) { + if (is_multisite()) { foreach (self::$aryGlobalSettings['capability_stealth'] as $strKey => $strVal) if ($strVal && current_user_can($strKey)) return; - // Add tracking code? - } elseif (current_user_can('wp-piwik_stealth')) return; - // Hotfix: Update WPMU site if not done yet - if (self::$bolWPMU && get_option('wp-piwik_siteid', false)) $this->installSite(); - // Handle new WPMU site - if (self::$bolWPMU && empty(self::$arySettings['tracking_code'])) { - $aryReturn = $this->create_wpmu_site(); - self::$arySettings['tracking_code'] = $aryReturn['js']; + // Don't add tracking code? + } elseif (current_user_can('wp-piwik_stealth')) { + echo '<!-- *** WP-Piwik - see http://wordpress.org/extend/plugins/wp-piwik/ ******** -->'."\n"; + echo '<!-- Current user should not be tracked. -->'."\n"; + echo '<!-- *** /WP-Piwik *********************************************************** -->'."\n"; + return; + } + // Hotfix: Update network site if not done yet + if (is_plugin_active_for_network('wp-piwik/wp-piwik.php') && get_option('wp-piwik_siteid', false)) $this->updateSite(); + // Autohandle site if no tracking code available + if (empty(self::$arySettings['tracking_code'])) + $aryReturn = $this->addPiwikSite(); + // Update/get code if outdated/unknown + if (self::$arySettings['last_tracking_code_update'] < self::$aryGlobalSettings['last_settings_update'] || empty(self::$arySettings['tracking_code'])) { + self::$arySettings['tracking_code'] = $this->callPiwikAPI('SitesManager.getJavascriptTag'); self::saveSettings(); - // Handle existing WPMU site - } elseif (self::$bolWPMU) { - if (self::$arySettings['last_tracking_code_update'] < self::$aryGlobalSettings['last_settings_update']) { - $strJSCode = $this->call_API('SitesManager.getJavascriptTag'); - self::$arySettings['tracking_code'] = html_entity_decode((is_string($strJSCode)?$strJSCode:'<!-- WP-Piwik ERROR: Tracking code not availbale -->'."\n")); - self::$arySettings['last_tracking_code_update'] = time(); - self::saveSettings(); - } - // Get code if not known - } elseif (empty($strJSCode)) { - $strJSCode = $this->call_API('SitesManager.getJavascriptTag'); - self::$arySettings['tracking_code'] = html_entity_decode((is_string($strJSCode)?$strJSCode:'<!-- WP-Piwik ERROR: Tracking code not availbale -->'."\n")); - self::saveSettings(); } // Change code if 404 - if (is_404() and self::$arySettings['track_404']) $strTrackingCode = str_replace('piwikTracker.trackPageView();', 'piwikTracker.setDocumentTitle(\'404/URL = \'+encodeURIComponent(document.location.pathname+document.location.search) + \'/From = \' + encodeURIComponent(document.referrer));piwikTracker.trackPageView();', self::$arySettings['tracking_code']); - else $strTrackingCode = self::$arySettings['tracking_code']; + if (is_404() && self::$aryGlobalSettings['track_404']) + $strTrackingCode = str_replace("_paq.push(['trackPageView']);", "_paq.push(['setDocumentTitle', '404/URL = '+String(document.location.pathname+document.location.search).replace(/\//g,'%2f') + '/From = ' + String(document.referrer).replace(/\//g,'%2f')]);\n_paq.push(['trackPageView']);", self::$arySettings['tracking_code']); + // Change code if search result + elseif (is_search() && self::$aryGlobalSettings['track_search']) { + $objSearch = new WP_Query("s=" . get_search_query() . '&showposts=-1'); + $intResultCount = $objSearch->post_count; + $strTrackingCode = str_replace("_paq.push(['trackPageView']);", "_paq.push(['trackSiteSearch','".get_search_query()."', false, ".$intResultCount."]);\n_paq.push(['trackPageView']);", self::$arySettings['tracking_code']); + // Use default tracking code + } else + $strTrackingCode = self::$arySettings['tracking_code']; // Send tracking code - echo '<!-- *** WP-Piwik - see http://www.braekling.de/wp-piwik-wpmu-piwik-wordpress/ -->'."\n"; + echo '<!-- *** WP-Piwik - see http://wordpress.org/extend/plugins/wp-piwik/ ******** -->'."\n"; + // Add custom variables if set: + if (is_single()) { + $strCustomVars = ''; + for ($i = 1; $i <= 5; $i++) { + // Get post ID + $intID = get_the_ID(); + // Get key + $strMetaKey = get_post_meta($intID, 'wp-piwik_custom_cat'.$i, true); + // Get value + $strMetaVal = get_post_meta($intID, 'wp-piwik_custom_val'.$i, true); + if (!empty($strMetaKey) && !empty($strMetaVal)) + $strCustomVars .= "_paq.push(['setCustomVariable',".$i.", '".$strMetaKey."', '".$strMetaVal."', 'page']);\n"; + } + if (!empty($strMetaKey)) $strTrackingCode = str_replace("_paq.push(['trackPageView']);", $strCustomVars."_paq.push(['trackPageView']);", $strTrackingCode); + } echo $strTrackingCode; echo '<!-- *** /WP-Piwik *********************************************************** -->'."\n"; + $strName = get_bloginfo('name'); + if (!isset(self::$arySettings['name']) || self::$arySettings['name'] != $strName) + $this->updatePiwikSite(); + } + + /** + * Add noscript code + */ + function site_footer() { + // Hotfix: Custom capability problem with WP multisite + if (is_multisite()) { + foreach (self::$aryGlobalSettings['capability_stealth'] as $strKey => $strVal) + if ($strVal && current_user_can($strKey)) + return; + // Don't add tracking code? + } elseif (current_user_can('wp-piwik_stealth')) return; + // Send tracking code + echo '<!-- *** WP-Piwik - see http://wordpress.org/extend/plugins/wp-piwik/ ******** -->'."\n"; + echo self::$arySettings['noscript_code']."\n"; + echo '<!-- *** /WP-Piwik *********************************************************** -->'."\n"; + } + + /** + * Shortcode function + **/ + + function shortcode($aryAttributes) { + $this->aryAttributes = shortcode_atts( + array( + 'title' => '', + 'module' => 'overview', + 'period' => 'day', + 'date' => 'yesterday', + 'limit' => 10, + 'width' => '100%', + 'height' => '200px', + 'language' => 'en' + ), $aryAttributes); + switch ($this->aryAttributes['module']) { + case 'opt-out': + $this->strResult = '<iframe frameborder="no" width="'.$this->aryAttributes['width'].'" height="'.$this->aryAttributes['height'].'" src="'.self::$aryGlobalSettings['piwik_url'].'index.php?module=CoreAdminHome&action=optOut&language='.$this->aryAttributes['language'].'"></iframe>'; + break; + case 'overview': + default: + self::includeFile('shortcodes/overview'); + } + return $this->strResult; + } + + /** + * Add metaboxes to posts + */ + function postMetaboxes() { + add_action('add_meta_boxes', array(&$this, 'postAddMetaboxes')); + add_action('save_post', array(&$this, 'postCustomvarsSave'), 10, 2); + } + + /** + * Create post meta boxes + */ + function postAddMetaboxes() { + add_meta_box( + 'wp-piwik_post_customvars', + __('Piwik Custom Variables', 'wp-piwik'), + array(&$this, 'postCustomvars'), + 'post', + 'side', + 'default' + ); + } + + /** + * Display custom variables meta box + */ + function postCustomvars($objPost, $objBox ) { + wp_nonce_field(basename( __FILE__ ), 'wp-piwik_post_customvars_nonce'); ?> + <table> + <tr><th></th><th><?php _e('Name', 'wp-piwik'); ?></th><th><?php _e('Value', 'wp-piwik'); ?></th></tr> + <?php for($i = 1; $i <= 5; $i++) { ?> + <tr> + <th><label for="wp-piwik_customvar1"><?php echo $i; ?>: </label></th> + <td><input class="widefat" type="text" name="wp-piwik_custom_cat<?php echo $i; ?>" value="<?php echo esc_attr(get_post_meta($objPost->ID, 'wp-piwik_custom_cat'.$i, true ) ); ?>" size="200" /></td> + <td><input class="widefat" type="text" name="wp-piwik_custom_val<?php echo $i; ?>" value="<?php echo esc_attr(get_post_meta($objPost->ID, 'wp-piwik_custom_val'.$i, true ) ); ?>" size="200" /></td> + </tr> + <?php } ?> + </table> + <p><?php _e('Set custom variables for a page view', 'wp-piwik'); ?>. (<a href="http://piwik.org/docs/custom-variables/"><?php _e('More information', 'wp-piwik'); ?></a>.)</p> + <?php + } + + /** + * Save post custom variables + */ + function postCustomvarsSave($intID, $objPost) { + // Verify the nonce before proceeding. + if (!isset( $_POST['wp-piwik_post_customvars_nonce'] ) || !wp_verify_nonce( $_POST['wp-piwik_post_customvars_nonce'], basename( __FILE__ ) ) ) + return $intID; + // Get post type object + $objPostType = get_post_type_object($objPost->post_type); + // Check if the current user has permission to edit the post. + if (!current_user_can($objPostType->cap->edit_post, $intID)) + return $intID; + $aryNames = array('cat', 'val'); + for ($i = 1; $i <= 5; $i++) + for ($j = 0; $j <= 1; $j++) { + // Get data + $strMetaVal = (isset($_POST['wp-piwik_custom_'.$aryNames[$j].$i])?htmlentities($_POST['wp-piwik_custom_'.$aryNames[$j].$i]):''); + // Create key + $strMetaKey = 'wp-piwik_custom_'.$aryNames[$j].$i; + // Get the meta value of the custom field key + $strCurVal = get_post_meta($intID, $strMetaKey, true); + // Add meta val: + if ($strMetaVal && '' == $strCurVal) + add_post_meta($intID, $strMetaKey, $strMetaVal, true); + // Update meta val: + elseif ($strMetaVal && $strMetaVal != $strCurVal) + update_post_meta($intID, $strMetaKey, $strMetaVal); + // Delete meta val: + elseif (''==$strMetaVal && $strCurVal) + delete_post_meta($intID, $strMetaKey, $strCurVal); + } } /** * Add pages to admin menu */ - function build_menu() { + function buildAdminMenu() { // Show stats dashboard page if WP-Piwik is configured - if (!empty(self::$aryGlobalSettings['piwik_token']) && !empty(self::$aryGlobalSettings['piwik_url'])) { + if (self::isConfigured()) { // Add dashboard page - $intStatsPage = add_dashboard_page( + $this->intStatsPage = add_dashboard_page( __('Piwik Statistics', 'wp-piwik'), __('WP-Piwik', 'wp-piwik'), - (!self::$bolWPMU?'wp-piwik_read_stats':'administrator'), - __FILE__, - array($this, 'show_stats') + 'wp-piwik_read_stats', + 'wp-piwik_stats', + array($this, 'showStats') ); // Add required scripts - add_action('admin_print_scripts-'.$intStatsPage, array($this, 'load_scripts')); + add_action('admin_print_scripts-'.$this->intStatsPage, array($this, 'loadStatsScripts')); // Add required styles - add_action('admin_print_styles-'.$intStatsPage, array($this, 'add_admin_style')); + add_action('admin_print_styles-'.$this->intStatsPage, array($this, 'addAdminStyle')); // Add required header tags - add_action('admin_head-'.$intStatsPage, array($this, 'add_admin_header')); + add_action('admin_head-'.$this->intStatsPage, array($this, 'addAdminHeaderStats')); + // Stats page onload callback + add_action('load-'.$this->intStatsPage, array(&$this, 'onloadStatsPage')); } - // Add options page if not multi-user - if (!self::$bolWPMU) + if (!is_plugin_active_for_network('wp-piwik/wp-piwik.php')) { // Add options page $intOptionsPage = add_options_page( __('WP-Piwik', 'wp-piwik'), __('WP-Piwik', 'wp-piwik'), - 'activate_plugins', + 'activate_plugins', __FILE__, - array($this, 'show_settings') + array($this, 'showSettings') ); - // Add options page if multi-user and current user is site admin - elseif (function_exists('is_super_admin') && is_super_admin()) - // Add options page - $intOptionsPage = add_options_page( - __('WPMU-Piwik', 'wpmu-piwik'), - __('WPMU-Piwik', 'wpmu-piwik'), - 'manage_sites', - __FILE__, - array($this, 'show_mu_settings') + // Add required scripts + add_action('admin_print_scripts-'.$this->intStatsPage, array($this, 'loadSettingsScripts')); + // Add required header tags + add_action('admin_head-'.$intOptionsPage, array($this, 'addAdminHeaderSettings')); + // Add styles required by options page + add_action('admin_print_styles-'.$intOptionsPage, array($this, 'addAdminStyle')); + } + } + + /** + * Add pages to network admin menu + */ + function buildNetworkAdminMenu() { + // Show stats dashboard page if WP-Piwik is configured + if (self::isConfigured()) { + // Add dashboard page + $this->intStatsPage = add_dashboard_page( + __('Piwik Statistics', 'wp-piwik'), + __('WP-Piwik', 'wp-piwik'), + 'manage_sites', + 'wp-piwik_stats', + array($this, 'showStatsNetwork') ); - else $intOptionsPage = false; + // Add required scripts + add_action('admin_print_scripts-'.$this->intStatsPage, array($this, 'loadStatsScripts')); + // Add required styles + add_action('admin_print_styles-'.$this->intStatsPage, array($this, 'addAdminStyle')); + // Add required header tags + add_action('admin_head-'.$this->intStatsPage, array($this, 'addAdminHeaderStats')); + // Stats page onload callback + add_action('load-'.$this->intStatsPage, array(&$this, 'onloadStatsPage')); + } + $intOptionsPage = add_submenu_page( + 'settings.php', + __('WP-Piwik', 'wp-piwik'), + __('WP-Piwik', 'wp-piwik'), + 'manage_sites', + __FILE__, + array($this, 'showSettings') + ); + // Add styles required by options page - if ($intOptionsPage) - add_action('admin_print_styles-'.$intOptionsPage, array($this, 'add_admin_style')); + add_action('admin_print_styles-'.$intOptionsPage, array($this, 'addAdminStyle')); + add_action('admin_head-'.$intOptionsPage, array($this, 'addAdminHeaderSettings')); } - - function extend_wp_dashboard_setup() { + + /** + * Support two columns + * seen in Heiko Rabe's metabox demo plugin + * + * @see http://tinyurl.com/5r5vnzs + */ + function onScreenLayoutColumns($aryColumns, $strScreen) { + if ($strScreen == $this->intStatsPage) + $aryColumns[$this->intStatsPage] = 3; + return $aryColumns; + } + + /** + * Add widgets to WordPress dashboard + */ + function extendWordPressDashboard() { + // Is user allowed to see stats? if (current_user_can('wp-piwik_read_stats')) { + // TODO: Use bitmask here + // Add data widget if enabled if (self::$aryGlobalSettings['dashboard_widget']) - wp_add_dashboard_widget( - 'wp-piwik_dashboard_widget', - __('WP-Piwik', 'wp-piwik').' - '.__(self::$aryGlobalSettings['dashboard_widget'], 'wp-piwik'), - array (&$this, 'add_wp_dashboard_widget') - ); - if (self::$aryGlobalSettings['dashboard_chart']) { + $this->addWordPressDashboardWidget(); + // Add chart widget if enabled + if (self::$aryGlobalSettings['dashboard_chart']) { // Add required scripts - add_action('admin_print_scripts-index.php', array($this, 'load_scripts')); + add_action('admin_print_scripts-index.php', array($this, 'loadStatsScripts')); // Add required styles - add_action('admin_print_styles-index.php', array($this, 'add_admin_style')); + add_action('admin_print_styles-index.php', array($this, 'addAdminStyle')); // Add required header tags - add_action('admin_head-index.php', array($this, 'add_admin_header')); - wp_add_dashboard_widget( - 'wp-piwik_dashboard_chart', - __('WP-Piwik', 'wp-piwik').' - '.__('Visitors', 'wp-piwik'), - array (&$this, 'add_wp_dashboard_chart') - ); + add_action('admin_head-index.php', array($this, 'addAdminHeaderStats')); + $this->addWordPressDashboardChart(); } + // Add SEO widget if enabled + if (self::$aryGlobalSettings['dashboard_seo']) + $this->addWordPressDashboardSEO(); } } + + /** + * Add widgets to WordPress Toolbar + */ + public function extendWordPressToolbar(&$objToolbar) { + // Is user allowed to see stats? + if (current_user_can('wp-piwik_read_stats')) { + $aryUnique = $this->callPiwikAPI('VisitsSummary.getUniqueVisitors','day','last30',null); + if (!is_array($aryUnique)) $aryUnique = array(); + $strGraph = '<script type="text/javascript">'; + $strGraph .= "var \$jSpark = jQuery.noConflict();\$jSpark(function() {var piwikSparkVals=[".implode(',',$aryUnique)."];\$jSpark('.wp-piwik_dynbar').sparkline(piwikSparkVals, {type: 'bar', barColor: '#ccc', barWidth:2});});"; + $strGraph .= '</script>'; + $strGraph .= '<span class="wp-piwik_dynbar">Loading...</span>'; + $objToolbar->add_menu(array( + 'id' => 'wp-piwik_stats', + 'title' => $strGraph, + 'href' => admin_url().'?page=wp-piwik_stats' + )); + } + } - function add_wp_dashboard_widget() { - $arySetup = array( - 'params' => array( - 'period' => 'day', - 'date' => self::$aryGlobalSettings['dashboard_widget'], - 'limit' => null - ), + /** + * Add a data widget to the WordPress dashboard + */ + function addWordPressDashboardWidget() { + $aryConfig = array( + 'params' => array('period' => 'day','date' => self::$aryGlobalSettings['dashboard_widget'],'limit' => null), 'inline' => true, ); - $this->create_dashboard_widget('overview', $arySetup); + $strFile = 'overview'; + add_meta_box( + 'wp-piwik_stats-dashboard-overview', + __('WP-Piwik', 'wp-piwik').' - '.__(self::$aryGlobalSettings['dashboard_widget'], 'wp-piwik'), + array(&$this, 'createDashboardWidget'), + 'dashboard', + 'side', + 'high', + array('strFile' => $strFile, 'aryConfig' => $aryConfig) + ); } /** * Add a visitor chart to the WordPress dashboard */ - function add_wp_dashboard_chart() { - $arySetup = array( - 'params' => array( - 'period' => 'day', - 'date' => 'last30', - 'limit' => null - ), + function addWordPressDashboardChart() { + $aryConfig = array( + 'params' => array('period' => 'day','date' => 'last30','limit' => null), 'inline' => true, ); - $this->create_dashboard_widget('visitors', $arySetup); + $strFile = 'visitors'; + add_meta_box( + 'wp-piwik_stats-dashboard-chart', + __('WP-Piwik', 'wp-piwik').' - '.__('Visitors', 'wp-piwik'), + array(&$this, 'createDashboardWidget'), + 'dashboard', + 'side', + 'high', + array('strFile' => $strFile, 'aryConfig' => $aryConfig) + ); } + /** + * Add a SEO widget to the WordPress dashboard + */ + function addWordPressDashboardSEO() { + $aryConfig = array( + 'params' => array('period' => 'day','date' => 'today','limit' => null), + 'inline' => true, + ); + $strFile = 'seo'; + add_meta_box( + 'wp-piwik_stats-dashboard-seo', + __('WP-Piwik', 'wp-piwik').' - '.__('SEO', 'wp-piwik'), + array(&$this, 'createDashboardWidget'), + 'dashboard', + 'side', + 'high', + array('strFile' => $strFile, 'aryConfig' => $aryConfig) + ); + } + /** * Add plugin meta links to plugin details * * @see http://wpengineer.com/1295/meta-links-for-wordpress-plugins/ */ - function set_plugin_meta($strLinks, $strFile) { + function setPluginMeta($strLinks, $strFile) { // Get plugin basename $strPlugin = plugin_basename(__FILE__); // Add link just to this plugin's details @@ -396,7 +703,7 @@ class wp_piwik { return array_merge( $strLinks, array( - sprintf('<a href="options-general.php?page=%s">%s</a>', self::$strPluginBasename, __('Settings', 'wp-piwik')) + sprintf('<a href="'.(is_plugin_active_for_network('wp-piwik/wp-piwik.php')?'settings':'options-general').'.php?page=%s">%s</a>', self::$strPluginBasename, __('Settings', 'wp-piwik')) ) ); // Don't affect other plugins details @@ -404,570 +711,807 @@ class wp_piwik { } /** - * Load required scripts to admin pages + * Load required scripts to stats page */ - function load_scripts() { + function loadStatsScripts() { // Load WP-Piwik script - wp_enqueue_script('wp-piwik', $this->get_plugin_url().'js/wp-piwik.js', array('jquery', 'admin-comments', 'postbox')); + wp_enqueue_script('wp-piwik', $this->getPluginURL().'js/wp-piwik.js', array(), self::$strVersion, true); // Load jqPlot - wp_enqueue_script('wp-piwik-jqplot',$this->get_plugin_url().'js/jqplot/wp-piwik.jqplot.js',array('jquery')); + wp_enqueue_script('wp-piwik-jqplot',$this->getPluginURL().'js/jqplot/wp-piwik.jqplot.js',array('jquery')); + } + + /** + * Load scripts required by Toolbar graphs + */ + function loadToolbarRequirements() { + // Only load if user is allowed to see stats + if (current_user_can('wp-piwik_read_stats')) { + // Load Sparklines + wp_enqueue_script('wp-piwik-sparkline',$this->getPluginURL().'js/sparkline/jquery.sparkline.min.js',array('jquery')); + // Load CSS + wp_enqueue_style('wp-piwik', $this->getPluginURL().'css/wp-piwik-spark.css'); + } + } + + /** + * Load required scripts to settings page + */ + function loadSettingsScripts() { + wp_enqueue_script('jquery'); } /** * Load required styles to admin pages */ - function add_admin_style() { + function addAdminStyle() { // Load WP-Piwik styles - wp_enqueue_style('wp-piwik', $this->get_plugin_url().'css/wp-piwik.css', array('dashboard')); + wp_enqueue_style('wp-piwik', $this->getPluginURL().'css/wp-piwik.css',array(),self::$strVersion); } /** - * Add required header tags to admin pages + * Add required header tags to stats page */ - function add_admin_header() { + function addAdminHeaderStats() { // Load jqPlot IE compatibility script - echo '<!--[if IE]><script language="javascript" type="text/javascript" src="'.$this->get_plugin_url().(self::$bolWPMU?'wp-piwik/':'').'js/jqplot/excanvas.min.js"></script><![endif]-->'; + echo '<!--[if IE]><script language="javascript" type="text/javascript" src="'.$this->getPluginURL().'js/jqplot/excanvas.min.js"></script><![endif]-->'; // Load jqPlot styles - echo '<link rel="stylesheet" href="'.$this->get_plugin_url().'js/jqplot/jquery.jqplot.min.css" type="text/css"/>'; + echo '<link rel="stylesheet" href="'.$this->getPluginURL().'js/jqplot/jquery.jqplot.min.css" type="text/css"/>'; + echo '<script type="text/javascript">var $j = jQuery.noConflict();</script>'; + } + + /** + * Add required header tags to settings page + */ + function addAdminHeaderSettings() { echo '<script type="text/javascript">var $j = jQuery.noConflict();</script>'; } /** * Get this plugin's URL */ - function get_plugin_url() { + function getPluginURL() { // Return plugins URL + /wp-piwik/ return trailingslashit(plugins_url().'/wp-piwik/'); } /** - * Get remote file + * Call REST API * - * @param String $strURL Remote file URL + * @param $strURL Remote file URL */ - function get_remote_file($strURL) { + function callREST($strURL) { + $strPiwikURL = self::$aryGlobalSettings['piwik_url']; + if (substr($strPiwikURL, -1, 1) != '/') $strPiwikURL .= '/'; + $strURL = $strPiwikURL.'?module=API'.$strURL; // Use cURL if available if (function_exists('curl_init')) { // Init cURL $c = curl_init($strURL); + // Disable SSL peer verification if asked to + curl_setopt($c, CURLOPT_SSL_VERIFYPEER, !self::$aryGlobalSettings['disable_ssl_verify']); + // Set user agent + curl_setopt($c, CURLOPT_USERAGENT, self::$aryGlobalSettings['piwik_useragent']=='php'?ini_get('user_agent'):self::$aryGlobalSettings['piwik_useragent_string']); // Configure cURL CURLOPT_RETURNTRANSFER = 1 curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); // Configure cURL CURLOPT_HEADER = 0 curl_setopt($c, CURLOPT_HEADER, 0); + // Set cURL timeout + curl_setopt($c, CURLOPT_TIMEOUT, self::$aryGlobalSettings['connection_timeout']); + if (WP_HTTP_Proxy::is_enabled() && WP_HTTP_Proxy::send_through_proxy($strURL)) { + curl_setopt($c, CURLOPT_PROXY, WP_HTTP_Proxy::host()); + curl_setopt($c, CURLOPT_PROXYPORT, WP_HTTP_Proxy::port()); + if (WP_HTTP_Proxy::use_authentication()) + curl_setopt($c, CURLOPT_PROXYUSERPWD, WP_HTTP_Proxy::username().':'.WP_HTTP_Proxy::password()); + } // Get result $strResult = curl_exec($c); // Close connection curl_close($c); // cURL not available but url fopen allowed - } elseif (ini_get('allow_url_fopen')) + } elseif (ini_get('allow_url_fopen')) { + // Set timeout + $resContext = stream_context_create(array('http'=>array('timeout' => self::$aryGlobalSettings['connection_timeout']))); // Get file using file_get_contents - $strResult = file_get_contents($strURL); + $strResult = @file_get_contents($strURL, false, $strContext); // Error: Not possible to get remote file - else $strResult = serialize(array( + } else $strResult = serialize(array( 'result' => 'error', 'message' => 'Remote access to Piwik not possible. Enable allow_url_fopen or CURL.' )); // Return result return $strResult; } + + /** + * Call PHP API + * + * @param $strParams API call params + */ + function callPHP($strParams) { + if (PIWIK_INCLUDE_PATH === FALSE) + return serialize(array('result' => 'error', 'message' => __('Could not resolve','wp-piwik').' "'.htmlentities(self::$aryGlobalSettings['piwik_path']).'": '.__('realpath() returns false','wp-piwik').'.')); + if (file_exists(PIWIK_INCLUDE_PATH . "/index.php")) + require_once PIWIK_INCLUDE_PATH . "/index.php"; + if (file_exists(PIWIK_INCLUDE_PATH . "/core/API/Request.php")) + require_once PIWIK_INCLUDE_PATH . "/core/API/Request.php"; + if (class_exists('Piwik_FrontController')) + Piwik_FrontController::getInstance()->init(); + // Add Piwik URL to params + $strParams .= '&piwikUrl='.urlencode(self::$aryGlobalSettings['piwik_url']); + // This inits the API Request with the specified parameters + if (class_exists('Piwik_API_Request')) + $objRequest = new Piwik_API_Request($strParams); + else return NULL; + // Calls the API and fetch XML data back + return $objRequest->process(); + } + + /** + * Get remote file + * + * @param String $strURL Remote file URL + */ + function getRemoteFile($strURL) { + if (self::$aryGlobalSettings['piwik_mode'] == 'php') + return $this->callPHP($strURL); + else + return $this->callREST($strURL); + } - function call_API($strMethod, $strPeriod='', $strDate='', $intLimit='',$bolExpanded=false) { - $strKey = $strMethod.'_'.$strPeriod.'_'.$strDate.'_'.$intLimit; - if (empty($this->aryCache[$strKey])) { - $strToken = self::$aryGlobalSettings['piwik_token']; - $strURL = self::$aryGlobalSettings['piwik_url']; - $intSite = self::$arySettings['site_id']; - if (self::$bolWPMU && empty($intSite)) { - $aryReturn = $this->create_wpmu_site(); - $intSite = $aryReturn['id']; - } - if (self::$bolOverall) $intSite = 'all'; - if (empty($strToken) || empty($strURL)) { - $this->aryCache[$key] = array( - 'result' => 'error', - 'message' => 'Piwik base URL or auth token not set.' - ); - return $this->aryCache[$strKey]; - } - if (substr($strURL, -1, 1) != '/') $strURL .= '/'; - $strURL .= '?module=API&method='.$strMethod; - $strURL .= '&idSite='.$intSite.'&period='.$strPeriod.'&date='.$strDate; - $strURL .= '&format=PHP&filter_limit='.$intLimit; - $strURL .= '&token_auth='.$strToken; - $strURL .= '&expanded='.$bolExpanded; - $strResult = $this->get_remote_file($strURL); - $this->aryCache[$strKey] = unserialize($strResult); + /** + * Add a new site to Piwik if a new blog was requested, + * or get its ID by URL + */ + function addPiwikSite() { + if (isset($_GET['wpmu_show_stats']) && is_plugin_active_for_network('wp-piwik/wp-piwik.php')) { + switch_to_blog((int) $_GET['wpmu_show_stats']); + self::loadSettings(); } - return $this->aryCache[$strKey]; + $strBlogURL = get_bloginfo('url'); + // Check if blog URL already known + $strURL = '&method=SitesManager.getSitesIdFromSiteUrl'; + $strURL .= '&url='.urlencode($strBlogURL); + $strURL .= '&format=PHP'; + $strURL .= '&token_auth='.self::$aryGlobalSettings['piwik_token']; + $aryResult = unserialize($this->getRemoteFile($strURL)); + if (!empty($aryResult) && isset($aryResult[0]['idsite'])) { + self::$arySettings['site_id'] = (int)$aryResult[0]['idsite']; + self::$arySettings['last_tracking_code_update'] = time(); + // Otherwise create new site + } elseif (self::isConfigured() && !empty($strURL)) { + $strName = get_bloginfo('name'); + if (empty($strName)) $strName = $strBlogURL; + self::$arySettings['name'] = $strName; + $strURL .= '&method=SitesManager.addSite'; + $strURL .= '&siteName='.urlencode($strName).'&urls='.urlencode($strBlogURL); + $strURL .= '&format=PHP'; + $strURL .= '&token_auth='.self::$aryGlobalSettings['piwik_token']; + $strResult = unserialize($this->getRemoteFile($strURL)); + if (!empty($strResult)) self::$arySettings['site_id'] = (int) $strResult; + } + // Store new data if site created + if (!empty(self::$arySettings['site_id'])) { + self::$arySettings['tracking_code'] = $this->callPiwikAPI('SitesManager.getJavascriptTag'); + self::saveSettings(); + } else self::$arySettings['tracking_code'] = ''; + if (isset($_GET['wpmu_show_stats']) && is_plugin_active_for_network('wp-piwik/wp-piwik.php')) + restore_current_blog(); + return array('js' => self::$arySettings['tracking_code'], 'id' => self::$arySettings['site_id']); } - function create_wpmu_site() { - $strURL = self::$aryGlobalSettings['piwik_url']; - $strJavaScript = ''; - if (!empty(self::$aryGlobalSettings['piwik_token']) && !empty($strURL)) { - if (empty(self::$arySettings['site_id'])) { - $strName = get_bloginfo('name'); - $strBlogURL = get_bloginfo('url'); - if (substr($strURL, -1, 1) != '/') $strURL .= '/'; - $strURL .= '?module=API&method=SitesManager.addSite'; - $strURL .= '&siteName='.urlencode('WPMU: '.$strName).'&urls='.urlencode($strBlogURL); - $strURL .= '&format=PHP'; - $strURL .= '&token_auth='.self::$aryGlobalSettings['piwik_token']; - $strResult = unserialize($this->get_remote_file($strURL)); - if (!empty($strResult)) { - self::$arySettings['site_id'] = $strResult; - self::$arySettings['last_tracking_code_update'] = time(); - $strJavaScript = html_entity_decode($this->call_API('SitesManager.getJavascriptTag')); - } - } else $strJavaScript = html_entity_decode($this->call_API('SitesManager.getJavascriptTag')); - self::$arySettings['tracking_code'] = $strJavaScript; - self::saveSettings(); - } - return array('js' => $strJavaScript, 'id' => self::$arySettings['site_id']); + /** + * Update a site + */ + function updatePiwikSite() { + $strBlogURL = get_bloginfo('url'); + // Check if blog URL already known + $strName = get_bloginfo('name'); + if (empty($strName)) $strName = $strBlogURL; + self::$arySettings['name'] = $strName; + $strURL = '&method=SitesManager.updateSite'; + $strURL .= '&idSite='.self::$arySettings['site_id']; + $strURL .= '&siteName='.urlencode($strName).'&urls='.urlencode($strBlogURL); + $strURL .= '&format=PHP'; + $strURL .= '&token_auth='.self::$aryGlobalSettings['piwik_token']; + $strResult = unserialize($this->getRemoteFile($strURL)); + // Store new data + self::$arySettings['tracking_code'] = $this->callPiwikAPI('SitesManager.getJavascriptTag'); + self::saveSettings(); } - function create_dashboard_widget($strFile, $aryConfig) { + /** + * Apply configured Tracking Code changes + */ + function applyJSCodeChanges($strCode) { + // Change code if js/index.php should be used + if (self::$aryGlobalSettings['track_mode'] == 1) { + $strCode = str_replace('piwik.js', 'js/', $strCode); + $strCode = str_replace('piwik.php', 'js/', $strCode); + } elseif (self::$aryGlobalSettings['track_mode'] == 2) { + $strCode = str_replace('piwik.js', 'piwik.php', $strCode); + $strURL = str_replace('https://', '://', self::$aryGlobalSettings['piwik_url']); + $strURL = str_replace('http://', '://', self::$aryGlobalSettings['piwik_url']); + $strProxy = str_replace('https://', '://', plugins_url('wp-piwik/')); + $strProxy = str_replace('http://', '://', plugins_url('wp-piwik/')); + $strCode = str_replace($strURL, $strProxy, $strCode); + } + if (!empty(self::$aryGlobalSettings['track_cdnurl'])||!empty(self::$aryGlobalSettings['track_cdnurlssl'])) { + $strCode = str_replace("var d=doc", "var ucdn=(('https:' == document.location.protocol) ? 'https://".(!empty(self::$aryGlobalSettings['track_cdnurlssl'])?self::$aryGlobalSettings['track_cdnurlssl']:self::$aryGlobalSettings['track_cdnurl'])."/' : 'http://".(!empty(self::$aryGlobalSettings['track_cdnurl'])?self::$aryGlobalSettings['track_cdnurl']:self::$aryGlobalSettings['track_cdnurlssl'])."/');\nvar d=doc", $strCode); + $strCode = str_replace("g.src=u+", "g.src=ucdn+", $strCode); + } + // Change code if POST is forced to be used + if (self::$aryGlobalSettings['track_post'] && self::$aryGlobalSettings['track_mode'] != 2) $strCode = str_replace("_paq.push(['trackPageView']);", "_paq.push(['setRequestMethod', 'POST']);\n_paq.push(['trackPageView']);", $strCode); + // Change code if cookies are disabled + if (self::$aryGlobalSettings['disable_cookies']) $strCode = str_replace("_paq.push(['trackPageView']);", "_paq.push(['disableCookies']);\n_paq.push(['trackPageView']);", $strCode); + // Store <noscript> code + $aryNoscript = array(); + preg_match('/<noscript>(.*)<\/noscript>/', $strCode, $aryNoscript); + if (isset($aryNoscript[0])) + self::$arySettings['noscript_code'] = html_entity_decode($aryNoscript[0]); + // Remove <noscript> code + $strCode = preg_replace('/<noscript>(.*)<\/noscript>/', '', $strCode); + // Return code without empty lines + return preg_replace('/\s+(\r\n|\r|\n)/', '$1', $strCode); + } + + /** + * Create a WordPress dashboard widget + */ + function createDashboardWidget($objPost, $aryMetabox) { + // Create description and ID $strDesc = $strID = ''; + $aryConfig = $aryMetabox['args']['aryConfig']; foreach ($aryConfig['params'] as $strParam) if (!empty($strParam)) { $strDesc .= $strParam.', '; $strID .= '_'.$strParam; } - $strFile = str_replace('.', '', $strFile); + // Remove dots from filename + $strFile = str_replace('.', '', $aryMetabox['args']['strFile']); + // Finalize configuration $aryConf = array_merge($aryConfig, array( 'id' => $strFile.$strID, 'desc' => substr($strDesc, 0, -2))); - $strRoot = dirname(__FILE__); - if (file_exists($strRoot.DIRECTORY_SEPARATOR.'dashboard/'.$strFile.'.php')) - include($strRoot.DIRECTORY_SEPARATOR.'dashboard/'.$strFile.'.php'); + // Include widget file + if (file_exists(dirname(__FILE__).DIRECTORY_SEPARATOR.'dashboard/'.$strFile.'.php')) + include(dirname(__FILE__).DIRECTORY_SEPARATOR.'dashboard/'.$strFile.'.php'); } - function display_post_unique_column($aryCols) { - $aryCols['wp-piwik_unique'] = __('Unique'); - return $aryCols; - } - - function display_post_unique_content($strCol, $intID) { - if( $strCol == 'wp-piwik_unique' ) { + /** + * Call Piwik's API + */ + function callPiwikAPI($strMethod, $strPeriod='', $strDate='', $intLimit='',$bolExpanded=false, $intId = false, $strFormat = 'PHP') { + // Create unique cache key + $strKey = $strMethod.'_'.$strPeriod.'_'.$strDate.'_'.$intLimit; + // Call API if data not cached + if (empty($this->aryCache[$strKey])) { + $strToken = self::$aryGlobalSettings['piwik_token']; + // If multisite stats are shown, maybe the super admin wants to show other blog's stats. + if (is_plugin_active_for_network('wp-piwik/wp-piwik.php') && function_exists('is_super_admin') && function_exists('wp_get_current_user') && is_super_admin() && isset($_GET['wpmu_show_stats'])) { + $aryOptions = get_blog_option((int) $_GET['wpmu_show_stats'], 'wp-piwik_settings' , array()); + if (!empty($aryOptions) && isset($aryOptions['site_id'])) + $intSite = $aryOptions['site_id']; + else $intSite = self::$arySettings['site_id']; + // Otherwise use the current site's id. + } else { + if (empty(self::$arySettings['site_id'])) + $aryNewSite = self::addPiwikSite(); + $intSite = self::$arySettings['site_id']; + } + // Create error message if WP-Piwik isn't configured + if (!self::isConfigured()) { + $this->aryCache[$strKey] = array( + 'result' => 'error', + 'message' => 'Piwik URL/path or auth token not set.' + ); + return $this->aryCache[$strKey]; + } + // Build URL + $strURL = '&method='.$strMethod; + $strURL .= '&idSite='.(int)$intSite.'&period='.$strPeriod.'&date='.$strDate; + $strURL .= '&filter_limit='.$intLimit; + $strURL .= '&token_auth='.$strToken; + $strURL .= '&expanded='.$bolExpanded; + $strURL .= '&url='.urlencode(get_bloginfo('url')); + $strURL .= '&format='.$strFormat; + // Fetch data if site exists + if (!empty($intSite) || $strMethod='SitesManager.getSitesWithAtLeastViewAccess') { + $strResult = (string) $this->getRemoteFile($strURL); + $this->aryCache[$strKey] = ($strFormat == 'PHP'?unserialize($strResult):$strResult); + // Apply tracking code changes if configured + if ($strMethod == 'SitesManager.getJavascriptTag') { + $this->aryCache[$strKey] = html_entity_decode((is_string($this->aryCache[$strKey])?$this->applyJSCodeChanges($this->aryCache[$strKey]):'<!-- WP-Piwik ERROR: Tracking code not availbale -->'."\n")); + self::$arySettings['last_tracking_code_update'] = time(); + } + // Otherwise return error message + } else $this->aryCache[$strKey] = array('result' => 'error', 'message' => 'Unknown site/blog.'); } + return $this->aryCache[$strKey]; } + + /* TODO: Add post stats + * function display_post_unique_column($aryCols) { + * $aryCols['wp-piwik_unique'] = __('Unique'); + * return $aryCols; + * } + * + * function display_post_unique_content($strCol, $intID) { + * if( $strCol == 'wp-piwik_unique' ) { + * } + * } + */ - function show_stats() { + function onloadStatsPage() { + wp_enqueue_script('common'); + wp_enqueue_script('wp-lists'); + wp_enqueue_script('postbox'); $strToken = self::$aryGlobalSettings['piwik_token']; $strPiwikURL = self::$aryGlobalSettings['piwik_url']; - $arySortOrder = get_user_option('meta-box-order_wppiwik'); - $aryClosed = get_user_option('closedpostboxes_wppiwik'); - if (empty($aryClosed)) $aryClosed = array(); $aryDashboard = array(); - $intCurrentDashboard = self::$arySettings['dashboard_revision']; - if (!$arySortOrder) { - // Set default configuration - $arySortOrder = array( - 'side' => 'overview_day_yesterday,pages_day_yesterday,keywords_day_yesterday_10,websites_day_yesterday_10,plugins_day_yesterday', - 'normal' => 'visitors_day_last30,browsers_day_yesterday,screens_day_yesterday,systems_day_yesterday' - ); - global $current_user; - get_currentuserinfo(); - update_user_option($current_user->ID, 'meta-box-order_wppiwik', $arySortOrder); - self::$arySettings['dashboard_revision'] = self::$intDashboardID; - self::saveSettings(); - } elseif ($intCurrentDashboard < self::$intDashboardID) { - if ($intCurrentDashboard < 5) { - $arySortOrder['normal'] .= ',screens_day_yesterday,systems_day_yesterday'; - $arySortOrder['side'] .= ',plugins_day_yesterday'; - } - if ($intCurrentDashboard < 6) { - $arySortOrder['side'] .= ',pages_day_yesterday'; - } - global $current_user; - get_currentuserinfo(); - update_user_option($current_user->ID, 'meta-box-order_wppiwik', $arySortOrder); - self::$arySettings['dashboard_revision'] = self::$intDashboardID; - self::saveSettings(); - } - foreach ($arySortOrder as $strCol => $strWidgets) { - $aryWidgets = explode(',', $strWidgets); - if (is_array($aryWidgets)) foreach ($aryWidgets as $strParams) { - $aryParams = explode('_', $strParams); - $aryDashboard[$strCol][$aryParams[0]] = array( + // Set default configuration + $arySortOrder = array( + 'side' => array( + 'overview' => array(__('Overview', 'wp-piwik'), 'day', 'yesterday'), + 'seo' => array(__('SEO', 'wp-piwik'), 'day', 'yesterday'), + 'pages' => array(__('Pages', 'wp-piwik'), 'day', 'yesterday'), + 'keywords' => array(__('Keywords', 'wp-piwik'), 'day', 'yesterday', 10), + 'websites' => array(__('Websites', 'wp-piwik'), 'day', 'yesterday', 10), + 'plugins' => array(__('Plugins', 'wp-piwik'), 'day', 'yesterday'), + 'search' => array(__('Site Search Keywords', 'wp-piwik'), 'day', 'yesterday', 10), + 'noresult' => array(__('Site Search without Results', 'wp-piwik'), 'day', 'yesterday', 10), + ), + 'normal' => array( + 'visitors' => array(__('Visitors', 'wp-piwik'), 'day', 'last30'), + 'browsers' => array(__('Browser', 'wp-piwik'), 'day', 'yesterday'), + 'browserdetails' => array(__('Browser Details', 'wp-piwik'), 'day', 'yesterday'), + 'screens' => array(__('Resolution', 'wp-piwik'), 'day', 'yesterday'), + 'systems' => array(__('Operating System', 'wp-piwik'), 'day', 'yesterday') + ) + ); + // Don't show SEO stats if disabled + if (!self::$aryGlobalSettings['stats_seo']) + unset($arySortOrder['side']['seo']); + + foreach ($arySortOrder as $strCol => $aryWidgets) { + if (is_array($aryWidgets)) foreach ($aryWidgets as $strFile => $aryParams) { + $aryDashboard[$strCol][$strFile] = array( 'params' => array( + 'title' => (isset($aryParams[0])?$aryParams[0]:$strFile), 'period' => (isset($aryParams[1])?$aryParams[1]:''), 'date' => (isset($aryParams[2])?$aryParams[2]:''), 'limit' => (isset($aryParams[3])?$aryParams[3]:'') - ), - 'closed' => (in_array($strParams, $aryClosed)) + ) ); - if (isset($_GET['date']) && preg_match('/^[0-9]{8}$/', $_GET['date']) && $aryParams[0] != 'visitors') - $aryDashboard[$strCol][$aryParams[0]]['params']['date'] = $_GET['date']; - elseif ($aryParams[0] != 'visitors') - $aryDashboard[$strCol][$aryParams[0]]['params']['date'] = self::$aryGlobalSettings['default_date']; + if (isset($_GET['date']) && preg_match('/^[0-9]{8}$/', $_GET['date']) && $strFile != 'visitors') + $aryDashboard[$strCol][$strFile]['params']['date'] = $_GET['date']; + elseif ($strFile != 'visitors') + $aryDashboard[$strCol][$strFile]['params']['date'] = self::$aryGlobalSettings['default_date']; } } + $intSideBoxCnt = $intContentBox = 0; + foreach ($aryDashboard['side'] as $strFile => $aryConfig) { + $intSideBoxCnt++; + if (preg_match('/(\d{4})(\d{2})(\d{2})/', $aryConfig['params']['date'], $aryResult)) + $strDate = $aryResult[1]."-".$aryResult[2]."-".$aryResult[3]; + else $strDate = $aryConfig['params']['date']; + add_meta_box( + 'wp-piwik_stats-sidebox-'.$intSideBoxCnt, + $aryConfig['params']['title'].' '.($aryConfig['params']['title']!='SEO'?__($strDate, 'wp-piwik'):''), + array(&$this, 'createDashboardWidget'), + $this->intStatsPage, + 'side', + 'core', + array('strFile' => $strFile, 'aryConfig' => $aryConfig) + ); + } + foreach ($aryDashboard['normal'] as $strFile => $aryConfig) { + if (preg_match('/(\d{4})(\d{2})(\d{2})/', $aryConfig['params']['date'], $aryResult)) + $strDate = $aryResult[1]."-".$aryResult[2]."-".$aryResult[3]; + else $strDate = $aryConfig['params']['date']; + $intContentBox++; + add_meta_box( + 'wp-piwik_stats-contentbox-'.$intContentBox, + $aryConfig['params']['title'].' '.($aryConfig['params']['title']!='SEO'?__($strDate, 'wp-piwik'):''), + array(&$this, 'createDashboardWidget'), + $this->intStatsPage, + 'normal', + 'core', + array('strFile' => $strFile, 'aryConfig' => $aryConfig) + ); + } + } + + // Open stats page as network admin + function showStatsNetwork() { + $this->bolNetwork = true; + $this->showStats(); + } + + function showStats() { + // Disabled time limit if required + if (isset(self::$aryGlobalSettings['disable_timelimit']) && self::$aryGlobalSettings['disable_timelimit']) + set_time_limit(0); + //we need the global screen column value to be able to have a sidebar in WordPress 2.8 + global $screen_layout_columns; + if (empty($screen_layout_columns)) $screen_layout_columns = 2; /***************************************************************************/ ?> -<div class="wrap"> - <div id="icon-post" class="icon32"><br /></div> +<div id="wp-piwik-stats-general" class="wrap"> + <?php screen_icon('options-general'); ?> <h2><?php _e('Piwik Statistics', 'wp-piwik'); ?></h2> <?php /************************************************************************/ - - if (self::$bolWPMU && function_exists('is_super_admin') && is_super_admin()) { - if (isset($_POST['wpmu_show_stats'])) - /*if ($_POST['wpmu_show_stats'] == 'all') self::$bolOverall = true; - else*/ switch_to_blog((int) $_POST['wpmu_show_stats']); - global $blog_id; + if (is_plugin_active_for_network('wp-piwik/wp-piwik.php') && function_exists('is_super_admin') && is_super_admin() && $this->bolNetwork) { + /* global $blog_id; global $wpdb; - $aryBlogs = $wpdb->get_results($wpdb->prepare('SELECT blog_id FROM '.$wpdb->prefix.'blogs ORDER BY blog_id')); - echo '<form method="POST" action="">'."\n"; + $aryBlogs = $wpdb->get_results($wpdb->prepare('SELECT blog_id FROM '.$wpdb->blogs.' ORDER BY blog_id')); + if (isset($_GET['wpmu_show_stats'])) { + switch_to_blog((int) $_GET['wpmu_show_stats']); + self::loadSettings(); + } + echo '<form method="GET" action="">'."\n"; + echo '<input type="hidden" name="page" value="wp-piwik_stats" />'; + echo '<input type="hidden" name="date" value="'.(isset($_GET['date']) && preg_match('/^[0-9]{8}$/', $_GET['date'])?$_GET['date']:'').'" />'; echo '<select name="wpmu_show_stats">'."\n"; + $aryOptions = array(); foreach ($aryBlogs as $aryBlog) { $objBlog = get_blog_details($aryBlog->blog_id, true); - echo '<option value="'.$objBlog->blog_id.'"'.($blog_id == $objBlog->blog_id?' selected="selected"':'').'>'.$objBlog->blogname.'</option>'."\n"; + $aryOptions[$objBlog->blogname.'#'.$objBlog->blog_id] = '<option value="'.$objBlog->blog_id.'"'.($blog_id == $objBlog->blog_id?' selected="selected"':'').'>'.$objBlog->blog_id.' - '.$objBlog->blogname.'</option>'."\n"; } - echo '</select><input type="submit" value="'.__('Change').'" />'."\n "; - if (!self::$bolOverall) echo __('Currently shown stats:').' <a href="'.get_bloginfo('url').'">'.get_bloginfo('name').'</a>'."\n"; - else _e('Current shown stats: <strong>Overall</strong>'); + // Show blogs in alphabetical order + ksort($aryOptions); + foreach ($aryOptions as $strOption) echo $strOption; + echo '</select><input type="submit" value="'.__('Change').'" />'."\n "; */ + if (isset($_GET['wpmu_show_stats'])) { + switch_to_blog((int) $_GET['wpmu_show_stats']); + self::loadSettings(); + } else { + $this->includeFile('settings/sitebrowser'); + return; + } + echo '<p>'.__('Currently shown stats:').' <a href="'.get_bloginfo('url').'">'.(int) $_GET['wpmu_show_stats'].' - '.get_bloginfo('name').'</a>.'.' <a href="?page=wp-piwik_stats">Show site overview</a>.</p>'."\n"; echo '</form>'."\n"; } - -/***************************************************************************/ ?> - <div id="dashboard-widgets-wrap"> - <div id="dashboard-widgets" class="metabox-holder"> - <div id="postbox-container" class="wp-piwik-side" style="width:290px; float:left;"> - <div id="side-sortables" class="meta-box-sortables ui-sortable wp-piwik-sortables"> -<?php /************************************************************************/ - foreach ($aryDashboard['side'] as $strFile => $aryConfig) - $this->create_dashboard_widget($strFile, $aryConfig); /***************************************************************************/ ?> + <form action="admin-post.php" method="post"> + <?php wp_nonce_field('wp-piwik_stats-general'); ?> + <?php wp_nonce_field('closedpostboxes', 'closedpostboxesnonce', false ); ?> + <?php wp_nonce_field('meta-box-order', 'meta-box-order-nonce', false ); ?> + <input type="hidden" name="action" value="save_wp-piwik_stats_general" /> + <div id="dashboard-widgets" class="metabox-holder columns-<?php echo $screen_layout_columns; ?><?php echo 2 <= $screen_layout_columns?' has-right-sidebar':''; ?>"> + <div id='postbox-container-1' class='postbox-container'> + <?php $meta_boxes = do_meta_boxes($this->intStatsPage, 'normal', null); ?> </div> - </div> - <div id="postbox-container" class="" style="width:520px; float:left; "> - <div id="wppiwik-widgets-main-content" class="has-sidebar-content"> - <div id="normal-sortables" class="meta-box-sortables ui-sortable wp-piwik-sortables"> -<?php /************************************************************************/ - foreach ($aryDashboard['normal'] as $strFile => $aryConfig) - $this->create_dashboard_widget($strFile, $aryConfig); - wp_nonce_field('meta-box-order', 'meta-box-order-nonce', false); - wp_nonce_field('closedpostboxes', 'closedpostboxesnonce', false); -/***************************************************************************/ ?> - <div class="clear"></div> - </div> + + <div id='postbox-container-2' class='postbox-container'> + <?php do_meta_boxes($this->intStatsPage, 'side', null); ?> </div> - </div> - </div> - </div> + + <div id='postbox-container-3' class='postbox-container'> + <?php do_meta_boxes($this->intStatsPage, 'column3', null); ?> + </div> + + </div> + </form> </div> +<script type="text/javascript"> + //<![CDATA[ + jQuery(document).ready( function($) { + // close postboxes that should be closed + $('.if-js-closed').removeClass('if-js-closed').addClass('closed'); + // postboxes setup + postboxes.add_postbox_toggles('<?php echo $this->intStatsPage; ?>'); + }); + //]]> +</script> <?php /************************************************************************/ - if (self::$bolWPMU && function_exists('is_super_admin') && is_super_admin()) { - restore_current_blog(); self::$bolOverall = false; + if (is_plugin_active_for_network('wp-piwik/wp-piwik.php') && function_exists('is_super_admin') && is_super_admin() && $bolNetwork) { + restore_current_blog(); } } + /* Stats page changes by POST submit + seen in Heiko Rabe's metabox demo plugin + http://tinyurl.com/5r5vnzs */ + function onStatsPageSaveChanges() { + //user permission check + if ( !current_user_can('manage_options') ) + wp_die( __('Cheatin’ uh?') ); + //cross check the given referer + check_admin_referer('wp-piwik_stats'); + //process here your on $_POST validation and / or option saving + //lets redirect the post request into get request (you may add additional params at the url, if you need to show save results + wp_redirect($_POST['_wp_http_referer']); + } + + /** + * Add tabs to settings page + * See http://wp.smashingmagazine.com/2011/10/20/create-tabs-wordpress-settings-pages/ + */ + function showSettingsTabs($bolFull = true, $strCurr = 'homepage') { + $aryTabs = ($bolFull?array( + 'homepage' => __('Home','wp-piwik'), + 'piwik' => __('Piwik Settings','wp-piwik'), + 'tracking' => __('Tracking','wp-piwik'), + 'views' => __('Statistics','wp-piwik'), + 'support' => __('Support','wp-piwik'), + 'credits' => __('Credits','wp-piwik') + ):array( + 'piwik' => __('Piwik Settings','wp-piwik'), + 'support' => __('Support','wp-piwik'), + 'credits' => __('Credits','wp-piwik') + )); + if (empty($strCurr)) $strCurr = 'homepage'; + elseif (!isset($aryTabs[$strCurr]) && $strCurr != 'sitebrowser') $strCurr = 'piwik'; + echo '<div id="icon-themes" class="icon32"><br></div>'; + echo '<h2 class="nav-tab-wrapper">'; + foreach($aryTabs as $strTab => $strName) { + $strClass = ($strTab == $strCurr?' nav-tab-active':''); + echo '<a class="nav-tab'.$strClass.'" href="?page=wp-piwik/wp-piwik.php&tab='.$strTab.'">'.$strName.'</a>'; + } + echo '</h2>'; + return $strCurr; + } + + /** + * Apply & store new settings + */ function applySettings() { - if (!self::$bolWPMU) { - self::$aryGlobalSettings['add_tracking_code'] = (isset($_POST['wp-piwik_addjs'])?$_POST['wp-piwik_addjs']:''); - self::$aryGlobalSettings['dashboard_widget'] = (isset($_POST['wp-piwik_dbwidget'])?$_POST['wp-piwik_dbwidget']:false); - self::$aryGlobalSettings['dashboard_chart'] = (isset($_POST['wp-piwik_dbchart'])?$_POST['wp-piwik_dbchart']:false); - self::$aryGlobalSettings['piwik_shortcut'] = (isset($_POST['wp-piwik_piwiklink'])?$_POST['wp-piwik_piwiklink']:false); - self::$arySettings['site_id'] = (isset($_POST['wp-piwik_siteid'])?$_POST['wp-piwik_siteid']:NULL); - self::$arySettings['track_404'] = (isset($_POST['wp-piwik_404'])?$_POST['wp-piwik_404']:false); - self::$aryGlobalSettings['default_date'] = (isset($_POST['wp-piwik_default_date'])?$_POST['wp-piwik_default_date']:'yesterday'); + $strTab = (isset($_GET['tab'])?$_GET['tab']:'homepage'); + self::$aryGlobalSettings['last_settings_update'] = time(); + switch ($strTab) { + case 'views': + self::$aryGlobalSettings['dashboard_widget'] = (isset($_POST['wp-piwik_dbwidget'])?$_POST['wp-piwik_dbwidget']:0); + self::$aryGlobalSettings['dashboard_chart'] = (isset($_POST['wp-piwik_dbchart'])?$_POST['wp-piwik_dbchart']:false); + self::$aryGlobalSettings['dashboard_seo'] = (isset($_POST['wp-piwik_dbseo'])?$_POST['wp-piwik_dbseo']:false); + self::$aryGlobalSettings['stats_seo'] = (isset($_POST['wp-piwik_statsseo'])?$_POST['wp-piwik_statsseo']:false); + self::$aryGlobalSettings['piwik_shortcut'] = (isset($_POST['wp-piwik_piwiklink'])?$_POST['wp-piwik_piwiklink']:false); + self::$aryGlobalSettings['default_date'] = (isset($_POST['wp-piwik_default_date'])?$_POST['wp-piwik_default_date']:'yesterday'); + self::$aryGlobalSettings['capability_read_stats'] = (isset($_POST['wp-piwik_displayto'])?$_POST['wp-piwik_displayto']:array()); + self::$aryGlobalSettings['disable_timelimit'] = (isset($_POST['wp-piwik_disabletimelimit'])?$_POST['wp-piwik_disabletimelimit']:false); + self::$aryGlobalSettings['toolbar'] = (isset($_POST['wp-piwik_toolbar'])?$_POST['wp-piwik_toolbar']:false); + self::$aryGlobalSettings['shortcodes'] = (isset($_POST['wp-piwik_shortcodes'])?$_POST['wp-piwik_shortcodes']:false); + break; + case 'tracking': + self::$aryGlobalSettings['add_tracking_code'] = (isset($_POST['wp-piwik_addjs'])?$_POST['wp-piwik_addjs']:false); + self::$aryGlobalSettings['track_404'] = (isset($_POST['wp-piwik_404'])?$_POST['wp-piwik_404']:false); + self::$aryGlobalSettings['track_search'] = (isset($_POST['wp-piwik_search'])?$_POST['wp-piwik_search']:false); + self::$aryGlobalSettings['track_mode'] = (isset($_POST['wp-piwik_trackingmode'])?(int)$_POST['wp-piwik_trackingmode']:0); + self::$aryGlobalSettings['track_post'] = (isset($_POST['wp-piwik_reqpost'])?$_POST['wp-piwik_reqpost']:false); + self::$aryGlobalSettings['track_proxy'] = (isset($_POST['wp-piwik_proxy'])?$_POST['wp-piwik_proxy']:false); + self::$aryGlobalSettings['track_cdnurl'] = trim(isset($_POST['wp-piwik_cdnurl'])?$_POST['wp-piwik_cdnurl']:''); + self::$aryGlobalSettings['track_cdnurlssl'] = trim(isset($_POST['wp-piwik_cdnurlssl'])?$_POST['wp-piwik_cdnurlssl']:self::$aryGlobalSettings['track_cdnurl']); + self::$aryGlobalSettings['track_noscript'] = (isset($_POST['wp-piwik_noscript'])?$_POST['wp-piwik_noscript']:false); + self::$aryGlobalSettings['capability_stealth'] = (isset($_POST['wp-piwik_filter'])?$_POST['wp-piwik_filter']:array()); + self::$aryGlobalSettings['disable_cookies'] = (isset($_POST['wp-piwik_disable_cookies'])?$_POST['wp-piwik_disable_cookies']:false); + break; + case 'piwik': + self::$aryGlobalSettings['piwik_token'] = (isset($_POST['wp-piwik_token'])?$_POST['wp-piwik_token']:''); + self::$aryGlobalSettings['piwik_url'] = self::checkURL((isset($_POST['wp-piwik_url'])?$_POST['wp-piwik_url']:'')); + self::$aryGlobalSettings['piwik_path'] = (isset($_POST['wp-piwik_path']) && !empty($_POST['wp-piwik_path'])?realpath($_POST['wp-piwik_path']):''); + self::$aryGlobalSettings['piwik_mode'] = (isset($_POST['wp-piwik_mode'])?$_POST['wp-piwik_mode']:'http'); + self::$aryGlobalSettings['piwik_useragent'] = (isset($_POST['wp-piwik_useragent'])?$_POST['wp-piwik_useragent']:'php'); + self::$aryGlobalSettings['connection_timeout'] = (isset($_POST['wp-piwik_timeout'])?(int)$_POST['wp-piwik_timeout']:5); + self::$aryGlobalSettings['piwik_useragent_string'] = (isset($_POST['wp-piwik_useragent_string'])?$_POST['wp-piwik_useragent_string']:'WP-Piwik'); + self::$aryGlobalSettings['disable_ssl_verify'] = (isset($_POST['wp-piwik_disable_ssl_verify'])?$_POST['wp-piwik_disable_ssl_verify']:false); + if (!is_plugin_active_for_network('wp-piwik/wp-piwik.php')) { + self::$aryGlobalSettings['auto_site_config'] = (isset($_POST['wp-piwik_auto_site_config'])?$_POST['wp-piwik_auto_site_config']:false); + if (!self::$aryGlobalSettings['auto_site_config']) + self::$arySettings['site_id'] = (isset($_POST['wp-piwik_siteid'])?$_POST['wp-piwik_siteid']:self::$arySettings['site_id']); + } else self::$aryGlobalSettings['auto_site_config'] = true; + break; + } + if (self::$aryGlobalSettings['auto_site_config'] && self::isConfigured()) { + if (self::$aryGlobalSettings['piwik_mode'] == 'php' && !defined('PIWIK_INCLUDE_PATH')) + self::definePiwikConstants(); + $aryReturn = $this->addPiwikSite(); + self::$arySettings['tracking_code'] = $aryReturn['js']; + self::$arySettings['site_id'] = $aryReturn['id']; } - self::$aryGlobalSettings['piwik_token'] = (isset($_POST['wp-piwik_token'])?$_POST['wp-piwik_token']:''); - self::$aryGlobalSettings['piwik_url'] = (isset($_POST['wp-piwik_url'])?$_POST['wp-piwik_url']:''); - self::$aryGlobalSettings['capability_stealth'] = (isset($_POST['wp-piwik_filter'])?$_POST['wp-piwik_filter']:array()); - self::$aryGlobalSettings['capability_read_stats'] = (isset($_POST['wp-piwik_displayto'])?$_POST['wp-piwik_displayto']:array()); - self::$aryGlobalSettings['last_settings_update'] = time(); self::saveSettings(); } - function show_settings() { - $strToken = self::$aryGlobalSettings['piwik_token']; - $strURL = self::$aryGlobalSettings['piwik_url']; - $intSite = self::$arySettings['site_id']; - if (isset($_POST['action']) && $_POST['action'] == 'save_settings') + /** + * Check & prepare URL + */ + static function checkURL($strURL) { + if (empty($strURL)) return ''; + if (substr($strURL, -1, 1) != '/' && substr($strURL, -10, 10) != '/index.php') + $strURL .= '/'; + return $strURL; + } + + /** + * Show settings page + */ + function showSettings() { + // Define globals and get request vars + global $pagenow; + $strTab = (isset($_GET['tab'])?$_GET['tab']:'homepage'); + // Show update message if stats saved + if (isset($_POST['wp-piwik_settings_submit']) && $_POST['wp-piwik_settings_submit'] == 'Y') echo '<div id="message" class="updated fade"><p>'.__('Changes saved','wp-piwik').'</p></div>'; + // Show settings page title + echo '<div class="wrap"><h2>'.__('WP-Piwik Settings', 'wp-piwik').'</h2>'; + // Show tabs + $strTab = $this->showSettingsTabs(self::isConfigured(), $strTab); + if ($strTab != 'sitebrowser') { /***************************************************************************/ ?> -<div class="wrap"> - <h2><?php _e('WP-Piwik Settings', 'wp-piwik') ?></h2> - <?php $this->donate(); ?> - <form method="post" action=""> - <div id="dashboard-widgets-wrap"> - <div id="dashboard-widgets" class="metabox-holder"> - <div class="wp-piwik-settings-container" id="postbox-container"> - <div class="postbox wp-piwik-settings" > - <h3 class='hndle'><span><?php _e('Account settings', 'wp-piwik'); ?></span></h3> - <div class="inside"> - <h4><label for="wp-piwik_url"><?php _e('Piwik URL', 'wp-piwik'); ?>:</label></h4> - <div class="input-text-wrap"> - <input type="text" name="wp-piwik_url" id="wp-piwik_url" value="<?php echo $strURL; ?>" /> - </div> - <h4><label for="wp-piwik_token"><?php _e('Auth token', 'wp-piwik'); ?>:</label></h4> - <div class="input-text-wrap"> - <input type="text" name="wp-piwik_token" id="wp-piwik_token" value="<?php echo $strToken; ?>" /> - </div> - <div class="wp-piwik_desc"> -<?php _e( - 'To enable Piwik statistics, please enter your Piwik'. - ' base URL (like http://mydomain.com/piwik) and your'. - ' personal authentification token. You can get the token'. - ' on the API page inside your Piwik interface. It looks'. - ' like "1234a5cd6789e0a12345b678cd9012ef".' - , 'wp-piwik' -); ?> - </div> - <div class="wp-piwik_desc"> -<?php _e( - '<strong>Important note:</strong> If you do not host this blog on your own, your site admin is able to get your auth token from the database. So he is able to access your statistics. You should never use an auth token with more than simple view access!', - 'wp-piwik' -); ?> - </div> -<?php /************************************************************************/ - if (!empty($strToken) && !empty($strURL)) { - $aryData = $this->call_API('SitesManager.getSitesWithAtLeastViewAccess'); - if (empty($aryData)) { - echo '<div class="wp-piwik_desc"><strong>'.__('An error occured', 'wp-piwik').': </strong>'. - __('Please check URL and auth token. You need at least view access to one site.', 'wp-piwik'). - '</div>'; - } elseif (isset($aryData['result']) && $aryData['result'] == 'error') { - echo '<div class="wp-piwik_desc"><strong><strong>'.__('An error occured', 'wp-piwik'). - ': </strong>'.$aryData['message'].'</div>'; - } else { - echo '<h4><label for="wp-piwik_siteid">'.__('Choose site', 'wp-piwik').':</label></h4>'. - '<div class="input-wrap"><select name="wp-piwik_siteid" id="wp-piwik_siteid">'; - foreach ($aryData as $arySite) - echo '<option value="'.$arySite['idsite']. - '"'.($arySite['idsite']==$intSite?' selected=""':''). - '>'.htmlentities($arySite['name'], ENT_QUOTES, 'utf-8'). - '</option>'; - echo '</select></div>'; - if (empty($intSite)) { - self::$arySettings['site_id'] = $aryData[0]['idsite']; - self::saveSettings(); - } - $intSite = self::$arySettings['site_id']; - $int404 = self::$arySettings['track_404']; - $intAddJS = self::$aryGlobalSettings['add_tracking_code']; - $intDashboardWidget = self::$aryGlobalSettings['dashboard_widget']; - $intShowLink = self::$aryGlobalSettings['piwik_shortcut']; - $strJavaScript = html_entity_decode($this->call_API('SitesManager.getJavascriptTag')); - if ($intAddJS) { - self::$arySettings['tracking_code'] = $strJavaScript; - self::saveSettings(); - } -/***************************************************************************/ ?> -<div><input type="submit" name="Submit" value="<?php _e('Save settings', 'wp-piwik') ?>" /></div> - </div> - </div> - <div class="postbox wp-piwik-settings" > - <h3 class='hndle'><span><?php _e('Tracking settings', 'wp-piwik'); ?></span></h3> - <div class="inside"> -<?php /************************************************************************/ - echo '<h4><label for="wp-piwik_jscode">JavaScript:</label></h4>'. - '<div class="input-text-wrap"><textarea id="wp-piwik_jscode" name="wp-piwik_jscode" readonly="readonly" rows="13" cols="55">'. - htmlentities($strJavaScript).'</textarea></div>'; - echo '<h4><label for="wp-piwik_addjs">'.__('Add script', 'wp-piwik').':</label></h4>'. - '<div class="input-wrap"><input type="checkbox" value="1" id="wp-piwik_addjs" name="wp-piwik_addjs" '. - ($intAddJS?' checked="checked"':'').'/></div>'; - echo '<div class="wp-piwik_desc">'. - __('If your template uses wp_footer(), WP-Piwik can automatically'. - ' add the Piwik javascript code to your blog.', 'wp-piwik'). - '</div>'; - echo '<h4><label for="wp-piwik_404">'.__('Track 404', 'wp-piwik').':</label></h4>'. - '<div class="input-wrap"><input type="checkbox" value="1" id="wp-piwik_404" name="wp-piwik_404" '. - ($int404?' checked="checked"':'').'/></div>'; - echo '<div class="wp-piwik_desc">'. - __('If you add the Piwik javascript code by wp_footer(), '. - 'WP-Piwik can automatically add a 404-category to track 404-page-visits.', 'wp-piwik'). - '</div>'; - global $wp_roles; - echo '<h4><label>'.__('Tracking filter', 'wp-piwik').':</label></h4>'; - echo '<div class="input-wrap">'; - $aryFilter = self::$aryGlobalSettings['capability_stealth']; - foreach($wp_roles->role_names as $strKey => $strName) { - echo '<input type="checkbox" '.(isset($aryFilter[$strKey]) && $aryFilter[$strKey]?'checked="checked" ':'').'value="1" name="wp-piwik_filter['.$strKey.']" /> '.$strName.' '; - } - echo '</div>'; - echo '<div class="wp-piwik_desc">'. - __('Choose users by user role you do <strong>not</strong> want to track.'. - ' Requires enabled "Add script"-functionality.','wp-piwik').'</div>'; - /***************************************************************************/ ?> -<div><input type="submit" name="Submit" value="<?php _e('Save settings', 'wp-piwik') ?>" /></div> - </div> - </div> - <div class="postbox wp-piwik-settings" > - <h3 class='hndle'><span><?php _e('Statistic view settings', 'wp-piwik'); ?></span></h3> - <div class="inside"> - <?php - echo '<h4><label for="wp-piwik_dbwidget">'.__('Dashboard data', 'wp-piwik').':</label></h4>'. - '<div class="input-wrap"><select id="wp-piwik_dbwidget" name="wp-piwik_dbwidget">'. - '<option value="0"'.(!$intDashboardWidget?' selected="selected"':'').'>'.__('No', 'wp-piwik').'</option>'. - '<option value="yesterday"'.($intDashboardWidget == 'yesterday'?' selected="selected"':'').'>'.__('Yes','wp-piwik').' ('.__('yesterday', 'wp-piwik').').</option>'. - '<option value="today"'.($intDashboardWidget == 'today'?' selected="selected"':'').'>'.__('Yes','wp-piwik').' ('.__('today', 'wp-piwik').').</option>'. - '<option value="last30"'.($intDashboardWidget == 'last30'?' selected="selected"':'').'>'.__('Yes','wp-piwik').' ('.__('last 30 days','wp-piwik').').</option>'. - '</select></div>'; - echo '<div class="wp-piwik_desc">'. - __('Display an overview widget to your WordPress dashboard.', 'wp-piwik').'</div>'; - - echo '<h4><label for="wp-piwik_dbwidget">'.__('Boad chart', 'wp-piwik').':</label></h4>'. - '<div class="input-wrap"><input type="checkbox" value="1" name="wp-piwik_dbchart" id="wp-piwik_dbchart" '. - (self::$aryGlobalSettings['dashboard_chart']?' checked="checked"':"").'/></div>'; - echo '<div class="wp-piwik_desc">'. - __('Display a visitor graph widget to your WordPress dashboard.', 'wp-piwik').'</div>'; - - echo '<h4><label for="wp-piwik_piwiklink">'.__('Shortcut', 'wp-piwik').':</label></h4>'. - '<div class="input-wrap"><input type="checkbox" value="1" name="wp-piwik_piwiklink" id="wp-piwik_piwiklink" '. - ($intShowLink?' checked="checked"':"").'/></div>'; - echo '<div class="wp-piwik_desc">'. - __('Display a shortcut to Piwik itself.', 'wp-piwik').'</div>'; - echo '<h4><label for="wp-piwik_default_date">'.__('Default date', 'wp-piwik').':</label></h4>'. - '<div class="input-wrap"><select id="wp-piwik_default_date" name="wp-piwik_default_date">'. - '<option value="yesterday"'.(self::$aryGlobalSettings['default_date'] == 'yesterday'?' selected="selected"':'').'> '.__('yesterday', 'wp-piwik').'</option>'. - '<option value="today"'.(self::$aryGlobalSettings['default_date'] == 'today'?' selected="selected"':'').'> '.__('today', 'wp-piwik').'</option>'. - '</select></div>'; - echo '<div class="wp-piwik_desc">'. - __('Default date shown on statistics page.', 'wp-piwik').'</div>'; - echo '<h4><label>'.__('Display to', 'wp-piwik').':</label></h4>'; - echo '<div class="input-wrap">'; - $intDisplayTo = self::$aryGlobalSettings['capability_read_stats']; - foreach($wp_roles->role_names as $strKey => $strName) { - $role = get_role($strKey); - echo '<input name="wp-piwik_displayto['.$strKey.']" type="checkbox" value="1"'.(isset(self::$aryGlobalSettings['capability_read_stats'][$strKey]) && self::$aryGlobalSettings['capability_read_stats'][$strKey]?' checked="checked"':'').'/> '.$strName.' '; - } - echo '</div><div class="wp-piwik_desc">'. - __('Choose user roles allowed to see the statistics page.', 'wp-piwik'). - '</div>'; - } - } -/***************************************************************************/ ?> - <div><input type="submit" name="Submit" value="<?php _e('Save settings', 'wp-piwik') ?>" /></div> - </div> + <div class="wp-piwik-donate"> + <p><strong><?php _e('Donate','wp-piwik'); ?></strong></p> + <p><?php _e('If you like WP-Piwik, you can support its development by a donation:', 'wp-piwik'); ?></p> + <div> + <script type="text/javascript"> + var flattr_url = 'http://www.braekling.de/wp-piwik-wpmu-piwik-wordpress'; + </script> + <script src="http<?php echo (self::isSSL()?'s':''); ?>://api.flattr.com/button/load.js" type="text/javascript"></script> + </div> + <div>Paypal + <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> + <input type="hidden" name="cmd" value="_s-xclick" /> + <input type="hidden" name="hosted_button_id" value="6046779" /> + <input type="image" src="https://www.paypal.com/en_GB/i/btn/btn_donateCC_LG.gif" name="submit" alt="PayPal - The safer, easier way to pay online." /> + <img alt="" border="0" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" width="1" height="1" /> + </form> + </div> + <div> + <a href="http://www.amazon.de/gp/registry/wishlist/111VUJT4HP1RA?reveal=unpurchased&filter=all&sort=priority&layout=standard&x=12&y=14"><?php _e('My Amazon.de wishlist', 'wp-piwik'); ?></a> + </div> + <div> + <?php _e('Please don\'t forget to vote the compatibility at the','wp-piwik'); ?> <a href="http://wordpress.org/extend/plugins/wp-piwik/">WordPress.org Plugin Directory</a>. </div> </div> - <input type="hidden" name="action" value="save_settings" /> - </div></div> - </form> -<pre><?php $current_user = wp_get_current_user(); ?></pre> - </div> - <?php $this->credits(); ?> -<?php /************************************************************************/ +<?php /***************************************************************************/ + } + echo '<form class="'.($strTab != 'sitebrowser'?'wp-piwik-settings':'').'" method="post" action="'.admin_url(($pagenow == 'settings.php'?'network/':'').$pagenow.'?page=wp-piwik/wp-piwik.php&tab='.$strTab).'">'; + echo '<input type="hidden" name="action" value="save_wp-piwik_settings" />'; + wp_nonce_field('wp-piwik_settings'); + // Show settings + if (($pagenow == 'options-general.php' || $pagenow == 'settings.php') && $_GET['page'] == 'wp-piwik/wp-piwik.php') { + echo '<table class="wp-piwik-form-table form-table">'; + // Get tab contents + require_once('settings/'.$strTab.'.php'); + // Show submit button + if (!in_array($strTab, array('homepage','credits','support','sitebrowser'))) + echo '<tr><td><p class="submit" style="clear: both;padding:0;margin:0"><input type="submit" name="Submit" class="button-primary" value="'.__('Save settings', 'wp-piwik').'" /><input type="hidden" name="wp-piwik_settings_submit" value="Y" /></p></td></tr>'; + echo '</table>'; + } + // Close form + echo '</form></div>'; } - function show_mu_settings() { - $strToken = self::$aryGlobalSettings['piwik_token']; - $strURL = self::$aryGlobalSettings['piwik_url']; - if (isset($_POST['action']) && $_POST['action'] == 'save_settings') - echo '<div id="message" class="updated fade"><p>'.__('Changes saved','wp-piwik').'</p></div>'; -/***************************************************************************/ ?> -<div class="wrap"> - <h2><?php _e('WPMU-Piwik Settings', 'wp-piwik') ?></h2> - <?php $this->donate(); ?> - <form method="post" action=""> - <div id="dashboard-widgets-wrap"> - <div id="dashboard-widgets" class="metabox-holder"> - <div class="wp-piwik-settings-container" id="postbox-container"> - <div class="postbox wp-piwik-settings" > - <h3 class='hndle'><span><?php _e('Account settings', 'wp-piwik'); ?></span></h3> - <div class="inside"> - <h4><label for="wp-piwik_url"><?php _e('Piwik URL', 'wp-piwik'); ?>:</label></h4> - <div class="input-text-wrap"> - <input type="text" name="wp-piwik_url" id="wp-piwik_url" value="<?php echo $strURL; ?>" /> - </div> - <h4><label for="wp-piwik_token"><?php _e('Auth token', 'wp-piwik'); ?>:</label></h4> - <div class="input-text-wrap"> - <input type="text" name="wp-piwik_token" id="wp-piwik_token" value="<?php echo $strToken; ?>" /> - </div> - <div class="wp-piwik_desc"> - <?php _e( - 'To enable Piwik statistics, please enter your Piwik'. - ' base URL (like http://mydomain.com/piwik) and your'. - ' personal authentification token. You can get the token'. - ' on the API page inside your Piwik interface. It looks'. - ' like "1234a5cd6789e0a12345b678cd9012ef".' - , 'wp-piwik' - ); ?> - </div> - <div class="wp-piwik_desc"> - <?php _e( - '<strong>Important note:</strong> You have to choose a token which provides administration access. WPMU-Piwik will create new Piwik sites for each blog if it is shown the first time and it is not added yet. All users can access their own statistics only, while site admins can access all statistics. To avoid conflicts, you should use a clean Piwik installation without other sites added. The provided themes should use wp_footer, because it adds the Piwik javascript code to each page.', 'wp-piwik'); - ?> - </div> -<?php /************************************************************************/ - if (!empty($strToken) && !empty($strURL)) { - global $wp_roles; - echo '<h4><label>'.__('Tracking filter', 'wp-piwik').':</label></h4>'; - echo '<div class="input-wrap">'; - $aryFilter = self::$aryGlobalSettings['capability_stealth']; - foreach($wp_roles->role_names as $strKey => $strName) { - echo '<input type="checkbox" '.(isset($aryFilter[$strKey]) && $aryFilter[$strKey]?'checked="checked" ':'').'value="1" name="wp-piwik_filter['.$strKey.']" /> '.$strName.' '; - }; - echo '</div>'; - echo '<div class="wp-piwik_desc">'. - __('Choose users by user role you do <strong>not</strong> want to track.', 'wp-piwik').'</div>'; - - /*echo '<h4><label>'.__('Display to', 'wp-piwik').':</label></h4>'; - echo '<div class="input-wrap">'; - $intDisplayTo = self::$aryGlobalSettings['capability_read_stats']; - foreach($wp_roles->role_names as $strKey => $strName) { - $role = get_role($strKey); - echo '<input name="wp-piwik_displayto['.$strKey.']" type="checkbox" value="1"'.(isset(self::$aryGlobalSettings['capability_read_stats'][$strKey]) && self::$aryGlobalSettings['capability_read_stats'][$strKey]?' checked="checked"':'').'/> '.$strName.' '; + /** + * Check if SSL is used + */ + private static function isSSL() { + return (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off'); + } + + /** + * Show an error message extended by a support site link + */ + private static function showErrorMessage($strMessage) { + echo '<strong class="wp-piwik-error">'.__('An error occured', 'wp-piwik').':</strong> '.$strMessage.' [<a href="'.(is_plugin_active_for_network('wp-piwik/wp-piwik.php')?'network/settings':'options-general').'.php?page=wp-piwik/wp-piwik.php&tab=support">'.__('Support','wp-piwik').'</a>]'; + } + + /** + * Read a RSS feed + */ + private static function readRSSFeed($strFeedURL, $intCount = 5) { + $aryResult = array(); + if (function_exists('simplexml_load_file') && !empty($strFeedURL)) { + $objXML = @simplexml_load_file($strFeedURL); + if (empty($strFeedURL) || !$objXML || !isset($objXML->channel[0]->item)) + return array(array('title' => 'Can\'t read RSS feed.','url' => $strFeedURL)); + foreach($objXML->channel[0]->item as $objItem) { + if( $intCount-- == 0 ) break; + $aryResult[] = array('title' => $objItem->title[0], 'url' => $objItem->link[0]); } - echo '</div><div class="wp-piwik_desc">'. - __('Choose user roles allowed to see the statistics page.', 'wp-piwik'). - '</div>';*/ } -/***************************************************************************/ ?> - <div><input type="submit" name="Submit" value="<?php _e('Save settings', 'wp-piwik') ?>" /></div> - </div> - </div> - </div> - <input type="hidden" name="action" value="save_settings" /> - </div></div> - </form> - <?php $this->credits(); ?> -</div> -<?php /************************************************************************/ + return $aryResult; } - function donate() { -/***************************************************************************/ ?> - <div class="wp-piwik-sidebox"> - <strong>Donate</strong> - <p><?php _e('If you like WP-Piwik, you can support its development by a donation:', 'wp-piwik'); ?></p> - <div> -<script type="text/javascript"> - var flattr_url = 'http://www.braekling.de/wp-piwik-wpmu-piwik-wordpress'; -</script> -<script src="http://api.flattr.com/button/load.js" type="text/javascript"></script> - </div> - <div>Paypal -<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> -<input type="hidden" name="cmd" value="_s-xclick" /> -<input type="hidden" name="hosted_button_id" value="6046779" /> -<input type="image" src="https://www.paypal.com/en_GB/i/btn/btn_donateCC_LG.gif" name="submit" alt="PayPal - The safer, easier way to pay online." /> -<img alt="" border="0" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" width="1" height="1" /> -</form> - </div> - <div> - <a href="http://www.amazon.de/gp/registry/wishlist/111VUJT4HP1RA?reveal=unpurchased&filter=all&sort=priority&layout=standard&x=12&y=14"><?php _e('My Amazon.de wishlist (German)', 'wp-piwik'); ?></a> - </div> - </div> -<?php /************************************************************************/ + /** + * Execute test script + */ + private static function loadTestscript() { + require_once('debug/testscript.php'); } - function credits() { -/***************************************************************************/ ?> - <h2 style="clear:left;"><?php _e('Credits', 'wp-piwik'); ?></h2> - <div class="inside"> - <p><strong><?php _e('Thank you very much for your donation', 'wp-piwik'); ?>:</strong> Marco L., Rolf W., Tobias U., Lars K., Donna F. <?php _e('and all people flattering this','wp-piwik'); ?>!</p> - <p><?php _e('Graphs powered by <a href="http://www.jqplot.com/">jqPlot</a>, an open source project by Chris Leonello. Give it a try! (License: GPL 2.0 and MIT)','wp-piwik'); ?></p> - <p><?php _e('Thank you very much','wp-piwik'); ?>, <a href="http://blogu.programeshqip.org/">Besnik Bleta</a>, <a href="http://www.fatcow.com/">FatCow</a>, <a href="http://www.pamukkaleturkey.com/">Rene</a>, Fab, <a href="http://ezbizniz.com/">EzBizNiz</a>, Gormer, Natalya, <a href="www.aggeliopolis.gr">AggelioPolis</a><?php _e(', and', 'wp-piwik'); ?> <a href="http://wwww.webhostinggeeks.com">Galina Miklosic</a> <?php _e('for your translation work','wp-piwik'); ?>!</p> - <p><?php _e('Thank you very much, all users who send me mails containing criticism, commendation, feature requests and bug reports! You help me to make WP-Piwik much better.','wp-piwik'); ?></p> - <p><?php _e('Thank <strong>you</strong> for using my plugin. It is the best commendation if my piece of code is really used!','wp-piwik'); ?></p> - </div> -<?php /************************************************************************/ + /** + * Reset all WP-Piwik settings + */ + private static function resetSettings($bolFull = false) { + global $wpdb; + // Backup auth data + $aryKeep = array( + 'revision' => self::$intRevisionId, + 'add_tracking_code' => false, + 'last_settings_update' => 0, + 'piwik_token' => self::$aryGlobalSettings['piwik_token'], + 'piwik_url' => self::$aryGlobalSettings['piwik_url'], + 'piwik_path' => self::$aryGlobalSettings['piwik_path'], + 'piwik_mode' => self::$aryGlobalSettings['piwik_mode'], + 'dashboard_widget' => false, + 'dashboard_chart' => false, + 'dashboard_seo' => false, + 'stats_seo' => false, + 'capability_stealth' => array(), + 'capability_read_stats' => array('administrator' => true), + 'piwik_shortcut' => false, + 'default_date' => 'yesterday', + 'auto_site_config' => true, + 'track_404' => false, + 'track_search' => false, + 'track_mode' => 0, + 'track_post' => false, + 'track_proxy' => false, + 'track_cdnurl' => '', + 'track_cdnurlssl' => '', + 'track_noscript' => false, + 'disable_timelimit' => false, + 'disable_cookies' => false, + 'toolbar' => false, + 'piwik_useragent' => 'php', + 'connection_timeout' => 5, + 'piwik_useragent_string' => 'WP-Piwik', + 'disable_ssl_verify' => false, + 'shortcodes' => false + ); + // Reset network settings + if (is_plugin_active_for_network('wp-piwik/wp-piwik.php')) { + delete_site_option('wp-piwik_global-settings'); + $aryBlogs = $wpdb->get_results('SELECT blog_id FROM '.$wpdb->blogs.' ORDER BY blog_id'); + foreach ($aryBlogs as $aryBlog) + delete_blog_option($aryBlog->blog_id, 'wp-piwik_settings'); + if (!$bolFull) update_site_option('wp-piwik_global-settings', $aryKeep); + // Reset simple settings + } else { + delete_option('wp-piwik_global-settings'); + delete_option('wp-piwik_settings'); + if (!$bolFull) update_option('wp-piwik_global-settings', $aryKeep); + } } + + /** + * Get a blog's piwik ID + */ + public static function getSiteID($intBlogID = null) { + $intResult = self::$arySettings['site_id']; + if (is_plugin_active_for_network('wp-piwik/wp-piwik.php') && !empty($intBlogID)) { + $aryResult = get_blog_option($intBlogID, 'wp-piwik_settings'); + $intResult = $aryResult['site_id']; + } + return (is_int($intResult)?$intResult:'n/a'); + } + + /** + * Is WP-Piwik configured? + */ + public static function isConfigured() { + return ( + !empty(self::$aryGlobalSettings['piwik_token']) + && ( + ( + (self::$aryGlobalSettings['piwik_mode'] == 'http') && !empty(self::$aryGlobalSettings['piwik_url']) + ) || ( + (self::$aryGlobalSettings['piwik_mode'] == 'php') && !empty(self::$aryGlobalSettings['piwik_path']) + ) + ) + ); + } + + /** + * Set Piwik PHP API constants + */ + private static function definePiwikConstants() { + define('PIWIK_INCLUDE_PATH', self::$aryGlobalSettings['piwik_path']); + define('PIWIK_USER_PATH', self::$aryGlobalSettings['piwik_path']); + define('PIWIK_ENABLE_DISPATCH', false); + define('PIWIK_ENABLE_ERROR_HANDLER', false); + define('PIWIK_ENABLE_SESSION_START', false); + } } if (class_exists('wp_piwik')) $GLOBALS['wp_piwik'] = new wp_piwik(); -/* EOF */ +/* EOF */ \ No newline at end of file