function GraphSonda($chart, $id_chart, $id_plan, $id_item, $from, $avg, $tag)
{
    $offset = getOffset();
    // setTimezone();
    $dt = getDates($from);
    $index = 0;
    $average = getAverage($avg);
    $format = $average[0];
    $divide = $average[1];
    if ($divide == 60 * 60 * 6) {
        $offset = -60 * 60 * 2;
    }
    if ($divide == 60 * 60 * 12) {
        $offset = +60 * 60 * 4;
    }
    if ($divide == 60 * 60 * 24) {
        $offset = +60 * 60 * 4;
    }
    $colorIndex = 0;
    $ldata = loadRAWData($from, $id_plan, $id_item);
    $percentile = calculatePercentile($ldata['allData']);
    $div = $ldata['div'];
    if (isset($ldata['hostList'])) {
        foreach ($ldata['hostList'] as $host) {
            $id_host = $host['id_host'];
            $hostName = $host['host'];
            $nacD = $host['nacD'];
            $nacU = $host['nacU'];
            $critical = $host['critical'];
            $warning = $host['warning'];
            $nominal = $host['nominal'];
            if ($warning > 100) {
                $dir = 1;
            } else {
                $dir = 0;
            }
            if ($nominal == -1) {
                $nominal = $nacD;
            }
            if ($nominal == -2) {
                $nominal = $nacU;
            }
            unset($theSondaAvg);
            unset($theSondaQoE);
            unset($dataAvg);
            unset($dataQoE);
            if (isset($ldata['historyList'][$id_host])) {
                foreach ($ldata['historyList'][$id_host] as $key => $row) {
                    $tk = round($row['clock'] / $divide, 0) * $divide;
                    $skip = false;
                    if (isset($_SESSION['filter']['P95']) && $row['value'] > $percentile['P95']) {
                        $skip = true;
                    }
                    if (isset($_SESSION['filter']['P5']) && $row['value'] < $percentile['P5']) {
                        $skip = true;
                    }
                    if (!$skip) {
                        if (!isset($theSondaAvg[$tk])) {
                            $theSondaAvg[$tk] = array($tk, 0, 0);
                        }
                        if (!isset($theSondaQoE[$tk])) {
                            $theSondaQoE[$tk] = array($tk, 0, 0);
                        }
                        $sum = $theSondaAvg[$tk][1];
                        $cnt = $theSondaAvg[$tk][2];
                        $x = $sum + $row['value'];
                        $y = $cnt + 1;
                        $theSondaAvg[$tk] = array($tk, $x, $y);
                        if ($row['value'] > $nominal) {
                            $row['value'] = $nominal;
                        }
                        $sum = $theSondaQoE[$tk][1];
                        $cnt = $theSondaQoE[$tk][2];
                        $x = $sum + $row['value'];
                        $y = $cnt + 1;
                        $theSondaQoE[$tk] = array($tk, $x, $y);
                    }
                }
            }
            if (isset($theSondaAvg)) {
                aasort($theSondaAvg, 0);
                $next = 0;
                $prev = 0;
                foreach ($theSondaAvg as $tvalue) {
                    $next = $tvalue[0] + $offset;
                    if ($prev > 0 && $next > 0 && $next - $prev > $divide * 2) {
                        $dataAvg[] = array(($prev + 1000) * 1000, null);
                    }
                    $dataAvg[] = array($next * 1000, round($tvalue[1] / $tvalue[2] / $div, 2));
                    $prev = $next;
                }
                aasort($theSondaQoE, 0);
                $next = 0;
                $prev = 0;
                foreach ($theSondaQoE as $tvalue) {
                    $next = $tvalue[0] + $offset;
                    if ($prev > 0 && $next > 0 && $next - $prev > $divide * 2) {
                        $dataQoE[] = array(($prev + 1000) * 1000, null);
                    }
                    $dataQoE[] = array($next * 1000, round($tvalue[1] / $tvalue[2] / $div, 2));
                    $prev = $next;
                }
            }
            if (isset($dataAvg)) {
                if (!isset($minClock)) {
                    $minClock = $dataAvg[0][0];
                    $maxClock = $dataAvg[count($dataAvg) - 1][0];
                } else {
                    if ($dataAvg[0][0] < $minClock) {
                        $minClock = $dataAvg[0][0];
                    }
                    if ($dataAvg[count($dataAvg) - 2][0] > $maxClock) {
                        $maxClock = $dataAvg[count($dataAvg) - 2][0];
                    }
                }
                if ($_GET['qoe'] == 'Average On' || $_GET['qoe'] == 'Both') {
                    $chart->series[]->name = $hostName . "-AVG";
                    $chart->series[$index]->type = 'spline';
                    $chart->series[$index]->dashStyle = 'spline';
                    $chart->series[$index]->data = $dataAvg;
                    $chart->series[$index]->color = getColor($colorIndex);
                    $chart->series[$index]->lineWidth = 1;
                    $chart->series[$index]->marker->radius = 2;
                    $index++;
                }
                if ($_GET['qoe'] == 'QoE On' || $_GET['qoe'] == 'Both') {
                    $chart->series[]->name = $hostName . '-QoE';
                    $chart->series[$index]->type = 'shortdot';
                    $chart->series[$index]->color = getColor($colorIndex);
                    $chart->series[$index]->data = $dataQoE;
                    $chart->series[$index]->lineWidth = 1;
                    $chart->series[$index]->marker->radius = 2;
                    $index++;
                }
                $colorIndex++;
            }
        }
    }
    $title = 'Sondas for "' . $ldata['item'] . '" on plan "' . $ldata['plan'] . '"';
    $subtitle = 'From ' . $ldata['from'] . ' to ' . $ldata['to'];
    $chart = chartHeader($chart, $id_chart, $title, $subtitle, $ldata['unit'], null);
    if (!isset($minClock)) {
        $minClock = 0;
        $maxClock = 0;
    }
    $chart->xAxis->type = 'datetime';
    $chart->tooltip->formatter = new HighchartJsExpr("\n            function() {\n                var s = '<b>'+ Highcharts.dateFormat('%e. %b %H:%M',this.x) +'</b>';    \n                \$.each(this.points, function(i, point) {\n                    s += '<br/><span style=\"color:'+point.series.color+'\">'+ point.series.name +': '+ point.y +' " . $ldata['unit'] . "</span><b>';\n                });\n                return s;\n            }");
    echo "\n" . '<script> function redraw() { chart1.xAxis[0].setExtremes(' . $minClock . ', ' . (round($maxClock / (3600 * 24), 0) * 3600 * 24 + $divide * 1000) . ');}  </script>';
    //var_dump($chart->chart);
    return $chart;
}
function GraphHour($chart, $id_chart, $id_plan, $id_item, $tag, $from, &$hgram, &$low, &$mid, &$max, &$dir)
{
    $offset = getOffset();
    setTimezone();
    $ldata = loadRAWData($from, $id_plan, $id_item);
    $unit = $ldata['unit'];
    $div = $ldata['div'];
    $percentile = calculatePercentile($ldata['allData']);
    $low = 0;
    $mid = 0;
    $max = 0;
    if (isset($ldata['hostList'])) {
        foreach ($ldata['hostList'] as $host) {
            $id_host = $host['id_host'];
            $nacD = $host['nacD'];
            $nacU = $host['nacU'];
            $critical = $host['critical'];
            $warning = $host['warning'];
            $nominal = $host['nominal'];
            if ($warning > 100) {
                $dir = 1;
            } else {
                $dir = 0;
            }
            if ($nominal == -1) {
                $nominal = $nacD;
            }
            if ($nominal == -2) {
                $nominal = $nacU;
            }
            if (isset($ldata['historyList'][$id_host])) {
                foreach ($ldata['historyList'][$id_host] as $key => $row) {
                    $tk = date('H', $row['clock']) * 1;
                    if (!isset($hourAvg[$tk])) {
                        $hourAvg[$tk] = array($tk, 0, 0);
                    }
                    if (!isset($hourQoE[$tk])) {
                        $hourQoE[$tk] = array($tk, 0, 0);
                    }
                    $skip = false;
                    if (isset($_SESSION['filter']['P95']) && $row['value'] > $percentile['P95']) {
                        $skip = true;
                    }
                    if (isset($_SESSION['filter']['P5']) && $row['value'] < $percentile['P5']) {
                        $skip = true;
                    }
                    if (!$skip) {
                        $filteredData[] = array(round($row['value'] / $div, 2));
                        if ($warning <= 100) {
                            if ($row['value'] >= $nominal * $warning / 100) {
                                $max++;
                            }
                            if ($row['value'] < $nominal * $warning / 100 && $row['value'] >= $nominal * $critical / 100) {
                                $mid++;
                            }
                            if ($row['value'] < $nominal * $critical / 100) {
                                $low++;
                            }
                        } else {
                            if ($row['value'] <= $nominal * $warning / 100) {
                                $max++;
                            }
                            if ($row['value'] > $nominal * $warning / 100 && $row['value'] <= $nominal * $critical / 100) {
                                $mid++;
                            }
                            if ($row['value'] > $nominal * $critical / 100) {
                                $low++;
                            }
                        }
                        $sum = $hourAvg[$tk][1];
                        $cnt = $hourAvg[$tk][2];
                        $x = $sum + $row['value'];
                        $y = $cnt + 1;
                        $hourAvg[$tk] = array($tk, $x, $y);
                        if ($row['value'] > $nacD) {
                            $row['value'] = $nacD;
                        }
                        $sum = $hourQoE[$tk][1];
                        $cnt = $hourQoE[$tk][2];
                        $x = $sum + $row['value'];
                        $y = $cnt + 1;
                        $hourQoE[$tk] = array($tk, $x, $y);
                    }
                }
            }
        }
    }
    $offset = 0;
    unset($dataQoE);
    unset($dataAvg);
    unset($data3);
    unset($data4);
    unset($data5);
    if (isset($hourQoE)) {
        aasort($hourQoE, 0);
        unset($k);
        for ($h = 0; $h < 24; $h++) {
            if (isset($hourQoE[$h])) {
                $dataQoE[] = ColorBar($h, $nominal, $warning, $critical, $hourQoE[$h][1] / $hourQoE[$h][2], $div);
                $data3[] = array('x' => $h, 'y' => round($nominal / $div, 2));
                $data4[] = array('x' => $h, 'y' => round($nominal / $div * $warning / 100, 2));
                $data5[] = array('x' => $h, 'y' => round($nominal / $div * $critical / 100, 2));
            } else {
                $dataQoE[] = null;
                $data3[] = array('x' => $h, 'y' => round($nominal / $div, 2));
                $data4[] = array('x' => $h, 'y' => round($nominal / $div * $warning / 100, 2));
                $data5[] = array('x' => $h, 'y' => round($nominal / $div * $critical / 100, 2));
            }
        }
        aasort($hourAvg, 0);
        for ($h = 0; $h < 24; $h++) {
            if (isset($hourQoE[$h])) {
                $dataAvg[] = array('x' => $h, 'y' => round($hourQoE[$h][1] / $hourQoE[$h][2] / $div, 2), 'color' => 'silver');
                $category[] = str_pad($h . ":00", 5, "0", STR_PAD_LEFT);
            } else {
                $dataAvg[] = null;
                $category[] = str_pad($h . ":00", 5, "0", STR_PAD_LEFT);
            }
        }
        for ($i = 0; $i < count($dataAvg); $i++) {
            $dataAvg[$i]['y'] = round($dataAvg[$i]['y'] - $dataQoE[$i]['y'], 2);
        }
    }
    if (!isset($filteredData)) {
        $filteredData = null;
        $nominal = 0;
        $category = null;
        $data3 = null;
        $data4 = null;
        $data5 = null;
        $warning = 0;
        $critical = 0;
        $dataAvg = null;
        $dataQoE = null;
    }
    $hgram = createHistogram($filteredData, 0, round($nominal / $div * 2, 0), round($nominal / $div / 6, 0) + 1, 0);
    $title = 'Average by Hour for "' . $ldata['item'] . '" on plan "' . $ldata['plan'] . '"';
    $subtitle = 'From ' . $ldata['from'] . ' to ' . $ldata['to'];
    $chart = chartHeader($chart, $id_chart, $title, $subtitle, $ldata['unit'], $category);
    $chart->plotOptions->series->pointPadding = -0.2;
    if ($ldata['peak'] > $ldata['offpeak']) {
        $chart->xAxis->plotBands = array(array('label' => array('text' => 'Peak Hour', 'x' => 2, 'style' => array('fontSize' => '8px', 'color' => 'red')), 'from' => $ldata['peak'] - 0.5, 'to' => 24 - 1.5, 'color' => '#FCFFC5'), array('label' => array('text' => 'Peak Hour', 'x' => 2, 'style' => array('fontSize' => '8px', 'color' => 'red')), 'from' => -0.5, 'to' => $ldata['offpeak'] + 1.5, 'color' => '#FCFFC5'));
    } else {
        $chart->xAxis->plotBands = array('label' => array('text' => 'Peak Hour', 'x' => 2, 'style' => array('fontSize' => '8px', 'color' => 'red')), 'from' => $ldata['peak'] - 0.5, 'to' => $ldata['offpeak'] + 0.5, 'color' => '#FCFFC5');
    }
    $chart->series[0]->type = 'column';
    $chart->title->style->fontSize = '14px';
    $chart->subtitle->style->fontSize = '10px';
    $chart->series[0]->data = $dataAvg;
    $chart->series[0]->stack = 0;
    $chart->series[0]->tooltip->valueSuffix = ' ' . $ldata['unit'];
    $chart->series[0]->name = 'Sample average for ' . $ldata['plan'];
    $chart->series[0]->dataLabels->enabled = true;
    $chart->series[0]->dataLabels->crop = true;
    $chart->series[0]->dataLabels->overflow = 'none';
    $chart->series[0]->dataLabels->align = 'center';
    $chart->series[0]->dataLabels->y = -8;
    $chart->series[0]->dataLabels->color = 'black';
    //'#000000';
    $chart->series[0]->dataLabels->style->fontSize = '10px';
    $chart->series[0]->dataLabels->style->fontFamily = 'Verdana, sans-serif';
    $chart->series[0]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.point.stackTotal, 2, '.');}");
    $chart->series[1]->type = 'column';
    $chart->series[1]->data = $dataQoE;
    $chart->series[1]->stack = 0;
    $chart->series[1]->tooltip->valueSuffix = ' ' . $ldata['unit'];
    $chart->series[1]->name = 'Real average for ' . $ldata['plan'];
    $chart->series[1]->dataLabels->enabled = true;
    $chart->series[1]->dataLabels->rotation = -90;
    $chart->series[1]->dataLabels->crop = false;
    $chart->series[1]->dataLabels->align = 'center';
    $chart->series[1]->dataLabels->color = '#FFFFFF';
    $chart->series[1]->dataLabels->style->fontSize = '13px';
    $chart->series[1]->dataLabels->style->fontFamily = 'Verdana, sans-serif';
    $chart->series[1]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.y, 2, '.');}");
    $chart->series[2]->type = 'spline';
    $chart->series[2]->data = $data3;
    $chart->series[2]->stack = 1;
    $chart->series[2]->tooltip->valueSuffix = ' ' . $ldata['unit'];
    $chart->series[2]->name = 'Nominal at 100%';
    $chart->series[2]->dataLabels->crop = false;
    $chart->series[2]->dataLabels->enabled = false;
    $chart->series[2]->dataLabels->rotation = -90;
    $chart->series[2]->dataLabels->align = 'right';
    $chart->series[2]->dataLabels->x = 4;
    $chart->series[2]->dataLabels->y = 10;
    $chart->series[2]->dataLabels->color = '#FFFFFF';
    $chart->series[2]->dataLabels->style->fontSize = '13px';
    $chart->series[2]->dataLabels->style->fontFamily = 'Verdana, sans-serif';
    $chart->series[2]->lineWidth = 2;
    $chart->series[2]->color = 'green';
    $chart->series[2]->marker->fillColor = 'green';
    $chart->series[2]->marker->radius = 2;
    $chart->series[2]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.y, 2, '.');}");
    $chart->series[3]->type = 'spline';
    $chart->series[3]->data = $data4;
    $chart->series[3]->stack = 2;
    $chart->series[3]->tooltip->valueSuffix = ' ' . $ldata['unit'];
    $chart->series[3]->dataLabels->crop = false;
    $chart->series[3]->name = 'Warning at ' . $warning . '% of the threashold';
    $chart->series[3]->dataLabels->enabled = false;
    $chart->series[3]->dataLabels->rotation = -90;
    $chart->series[3]->dataLabels->align = 'right';
    $chart->series[3]->dataLabels->x = 4;
    $chart->series[3]->dataLabels->y = 10;
    $chart->series[3]->dataLabels->color = '#FFFFFF';
    $chart->series[3]->dataLabels->style->fontSize = '10px';
    $chart->series[3]->dataLabels->style->fontFamily = 'Verdana, sans-serif';
    $chart->series[3]->lineWidth = 2;
    $chart->series[3]->color = '#F79E03';
    $chart->series[3]->marker->fillColor = '#F79E03';
    $chart->series[3]->marker->radius = 2;
    $chart->series[3]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.y, 2, '.');}");
    $chart->series[4]->type = 'line';
    $chart->series[4]->data = $data5;
    $chart->series[4]->stack = 3;
    $chart->series[4]->tooltip->valueSuffix = ' ' . $ldata['unit'];
    $chart->series[4]->dataLabels->crop = false;
    $chart->series[4]->name = 'Critical at ' . $critical . '% of the threashold';
    $chart->series[4]->dataLabels->enabled = false;
    $chart->series[4]->dataLabels->rotation = -90;
    $chart->series[4]->dataLabels->align = 'right';
    $chart->series[4]->dataLabels->x = 4;
    $chart->series[4]->dataLabels->y = 10;
    $chart->series[4]->dataLabels->color = '#FFFFFF';
    $chart->series[4]->dataLabels->style->fontSize = '10px';
    $chart->series[4]->dataLabels->style->fontFamily = 'Verdana, sans-serif';
    $chart->series[4]->lineWidth = 2;
    $chart->series[4]->marker->radius = 2;
    $chart->series[4]->color = 'red';
    $chart->series[4]->marker->fillColor = 'red';
    $chart->series[4]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.y, 2, '.');}");
    return $chart;
}
function GraphPlan($chart, $id_chart, $id_item, $from, $avg, $tag)
{
    //$cache = phpFastCache();
    $dt = getDates($from);
    $item = getItem($id_item);
    $index = 0;
    $thezero = '-1';
    $average = getAverage($avg);
    $format = $average[0];
    $divide = $average[1];
    $color = array('#89A54E', 'none', '#4572A7', 'none', '#AA4643', 'none', '#808080', 'none', 'darksilver', 'none', 'black', 'none', 'magenta', 'none', 'lighrblue', 'none');
    $offset = 0;
    $colorIndex = 0;
    $cacheAge = 60 * 30;
    // 30 minutes
    if ($divide == 60 * 60 * 6) {
        $offset = -60 * 60 * 2;
    }
    if ($divide == 60 * 60 * 12) {
        $offset = +60 * 60 * 4;
    }
    if ($divide == 60 * 60 * 24) {
        $offset = +60 * 60 * 4;
    }
    $planList = readPlan();
    foreach ($planList as $plan) {
        $id_plan = $plan['id_plan'];
        unset($data2);
        unset($data3);
        unset($dataAvg);
        unset($dataQoE);
        unset($planAvg);
        unset($planQoE);
        unset($percentile);
        unset($ldata);
        $ldata = loadRAWData($from, $id_plan, $id_item);
        $unit = $ldata['unit'];
        $div = $ldata['div'];
        $percentile = calculatePercentile($ldata['allData']);
        if (isset($ldata['hostList'])) {
            foreach ($ldata['hostList'] as $host) {
                $id_host = $host['id_host'];
                $nacD = $host['nacD'];
                $nacU = $host['nacU'];
                $critical = $host['critical'];
                $warning = $host['warning'];
                $nominal = $host['nominal'];
                if ($warning > 100) {
                    $dir = 1;
                } else {
                    $dir = 0;
                }
                if ($nominal == -1) {
                    $nominal = $nacD;
                }
                if ($nominal == -2) {
                    $nominal = $nacU;
                }
                if (isset($ldata['historyList'][$id_host])) {
                    foreach ($ldata['historyList'][$id_host] as $key => $row) {
                        $tk = round($row['clock'] / $divide, 0) * $divide;
                        $skip = false;
                        if (isset($_SESSION['filter']['P95']) && $row['value'] > $percentile['P95']) {
                            $skip = true;
                        }
                        if (isset($_SESSION['filter']['P5']) && $row['value'] < $percentile['P5']) {
                            $skip = true;
                        }
                        if (!$skip) {
                            if (!isset($planAvg[$tk])) {
                                $planAvg[$tk] = array($tk, 0, 0);
                            }
                            if (!isset($planQoE[$tk])) {
                                $planQoE[$tk] = array($tk, 0, 0);
                            }
                            $sum = $planAvg[$tk][1];
                            $cnt = $planAvg[$tk][2];
                            $x = $sum + $row['value'];
                            $y = $cnt + 1;
                            $planAvg[$tk] = array($tk, $x, $y);
                            if ($row['value'] > $nacD) {
                                $row['value'] = $nacD;
                            }
                            $sum = $planQoE[$tk][1];
                            $cnt = $planQoE[$tk][2];
                            $x = $sum + $row['value'];
                            $y = $cnt + 1;
                            $planQoE[$tk] = array($tk, $x, $y);
                        }
                    }
                }
            }
        }
        if (isset($planAvg)) {
            $next = 0;
            $prev = 0;
            aasort($planAvg, 0);
            aasort($planQoE, 0);
            foreach ($planAvg as $tvalue) {
                $next = $planAvg[$tvalue[0]][0] + $offset;
                if ($prev > 0 && $next > 0 && $next - $prev > $divide * 2) {
                    $dataAvg[] = array(($prev + 1000) * 1000, null);
                    $dataQoE[] = array(($prev + 1000) * 1000, null);
                }
                $dataAvg[] = array($planAvg[$tvalue[0]][0] * 1000, round($planAvg[$tvalue[0]][1] / $planAvg[$tvalue[0]][2] / $div, 2));
                $dataQoE[] = array($planQoE[$tvalue[0]][0] * 1000, round($planQoE[$tvalue[0]][1] / $planQoE[$tvalue[0]][2] / $div, 2));
                $prev = $next;
            }
        }
        if (isset($dataAvg)) {
            if (!isset($minClock)) {
                $minClock = $dataAvg[0][0];
                $maxClock = $dataAvg[count($dataAvg) - 2][0];
            } else {
                if ($dataAvg[0][0] < $minClock) {
                    $minClock = $dataAvg[0][0];
                }
                if ($dataAvg[count($dataAvg) - 2][0] > $maxClock) {
                    $maxClock = $dataAvg[count($dataAvg) - 2][0];
                }
            }
            if ($_GET['qoe'] == 'Average On' || $_GET['qoe'] == 'Both') {
                $chart->series[]->name = $ldata['plan'] . '-AVG';
                $chart->series[$index]->type = 'spline';
                $chart->series[$index]->color = getColor($colorIndex);
                $chart->series[$index]->data = $dataAvg;
                $chart->series[$index]->lineWidth = 1;
                $chart->series[$index]->marker->radius = 2;
                $index++;
            }
            if ($_GET['qoe'] == 'QoE On' || $_GET['qoe'] == 'Both') {
                $chart->series[]->name = $ldata['plan'] . '-QoE';
                $chart->series[$index]->type = 'spline';
                $chart->series[$index]->color = getColor($colorIndex);
                $chart->series[$index]->dashStyle = 'shortdot';
                $chart->series[$index]->data = $dataQoE;
                $chart->series[$index]->lineWidth = 1;
                $chart->series[$index]->marker->radius = 2;
                $index++;
            }
            $colorIndex++;
        }
    }
    $title = 'Average by Plan for "' . $item;
    $subtitle = 'From ' . $ldata['from'] . ' to ' . $ldata['to'];
    $chart = chartHeader($chart, $id_chart, $title, $subtitle, $unit, null);
    $chart->xAxis->type = 'datetime';
    if (!isset($minClock)) {
        $minclock = 0;
        $maxClock = 0;
    }
    $chart->tooltip->formatter = new HighchartJsExpr("\n            function() {\n                var s = '<b>'+ Highcharts.dateFormat('%e. %b %H:%M',this.x) + '</b>';      \n                \$.each(this.points, function(i, point) {\n                    s += '<br/><span style=\"color:'+point.series.color+'\">'+ point.series.name +': '+ point.y +' " . $unit . "</span><b>';\n                });\n                return s;\n            }");
    echo "\n" . '<script> function redraw() { chart1.xAxis[0].setExtremes(' . round($minClock / (60 * 60), 0) * 60 * 60 . ', ' . round(($maxClock + 60 * 60 * 4 * 1000) / (60 * 60), 0) * 60 * 60 . ');}  </script>';
    return $chart;
}
function Dashboard($dashboard, $plan, $tag, $move)
{
    $offset = getOffset();
    setTimezone();
    $r = '-7' - $_GET['move'];
    $s = '-1' - $_GET['move'];
    $from = date("Y/m/d", strtotime($r . ' days'));
    $to = date("Y/m/d", strtotime($s . ' days'));
    $theDate = date('Y/m/d', strtotime($from . ' -1 days'));
    while ($theDate != $to) {
        $theDate = date('Y/m/d', strtotime($theDate . ' +1 days'));
        $category[] = $theDate;
    }
    $dashList = readDashboard($dashboard);
    $peakHour = str_replace(":", "", "18");
    $offPeakHour = str_replace(":", "", "22");
    foreach ($dashList as $dash) {
        $id_item = $dash['id_item'];
        $descriptionLong = $dash['descriptionLong'];
        $planList = readPlan();
        foreach ($planList as $plan) {
            unset($weekAvgPeak);
            unset($weekAvgOffPeak);
            unset($weekQoEPeak);
            unset($weekQoEOffPeak);
            $id_plan = $plan['id_plan'];
            $ldata = loadRAWData($from, $id_plan, $id_item);
            $unit = $ldata['unit'];
            $div = $ldata['div'];
            $plan = $ldata['plan'];
            $percentile = calculatePercentile($ldata['allData']);
            if (isset($ldata['hostList'])) {
                foreach ($ldata['hostList'] as $host) {
                    $id_host = $host['id_host'];
                    $nacD = $host['nacD'];
                    $nacU = $host['nacU'];
                    $critical = $host['critical'];
                    $warning = $host['warning'];
                    $nominal = $host['nominal'];
                    if ($warning > 100) {
                        $dir = 1;
                    } else {
                        $dir = 0;
                    }
                    if ($nominal == -1) {
                        $nominal = $nacD;
                    }
                    if ($nominal == -2) {
                        $nominal = $nacU;
                    }
                    if (isset($ldata['historyList'][$id_host])) {
                        foreach ($ldata['historyList'][$id_host] as $key => $row) {
                            $tk = date('m/d', $row['clock']);
                            if (!isset($weekAvgPeak[$tk])) {
                                $weekAvgPeak[$tk] = array($tk, 0, 0);
                            }
                            if (!isset($weekAvgOffPeak[$tk])) {
                                $weekAvgOffPeak[$tk] = array($tk, 0, 0);
                            }
                            if (!isset($weekQoEPeak[$tk])) {
                                $weekQoEPeak[$tk] = array($tk, 0, 0);
                            }
                            if (!isset($weekQoEOffPeak[$tk])) {
                                $weekQoEOffPeak[$tk] = array($tk, 0, 0);
                            }
                            $skip = false;
                            if (isset($_SESSION['filter']['P95']) && $row['value'] > $percentile['P95']) {
                                $skip = true;
                            }
                            if (isset($_SESSION['filter']['P5']) && $row['value'] < $percentile['P5']) {
                                $skip = true;
                            }
                            if (!$skip) {
                                if ($row['t'] == 'P') {
                                    $sum = $weekAvgPeak[$tk][1];
                                    $cnt = $weekAvgPeak[$tk][2];
                                    $x = $sum + $row['value'];
                                    $y = $cnt + 1;
                                    $weekAvgPeak[$tk] = array($tk, $x, $y);
                                }
                                if ($row['t'] == 'O') {
                                    $sum = $weekAvgOffPeak[$tk][1];
                                    $cnt = $weekAvgOffPeak[$tk][2];
                                    $x = $sum + $row['value'];
                                    $y = $cnt + 1;
                                    $weekAvgOffPeak[$tk] = array($tk, $x, $y);
                                }
                                if ($row['value'] > $nacD) {
                                    $row['value'] = $nominal;
                                }
                                if ($row['t'] == 'P') {
                                    $sum = $weekQoEPeak[$tk][1];
                                    $cnt = $weekQoEPeak[$tk][2];
                                    $x = $sum + $row['value'];
                                    $y = $cnt + 1;
                                    $weekQoEPeak[$tk] = array($tk, $x, $y);
                                }
                                if ($row['t'] == 'O') {
                                    $sum = $weekQoEOffPeak[$tk][1];
                                    $cnt = $weekQoEOffPeak[$tk][2];
                                    $x = $sum + $row['value'];
                                    $y = $cnt + 1;
                                    $weekQoEOffPeak[$tk] = array($tk, $x, $y);
                                }
                            }
                        }
                    }
                }
            }
            unset($dataPeak);
            unset($dataOffPeak);
            unset($dataQoEPeak);
            unset($dataQoEOffPeak);
            unset($dataNominal);
            unset($dataWarning);
            unset($dataCritical);
            if (isset($weekQoEPeak)) {
                aasort($weekQoEPeak, 0);
                aasort($weekQoEOffPeak, 0);
                aasort($weekAvgPeak, 0);
                aasort($weekAvgOffPeak, 0);
                $sumQoEPeak = 0;
                $cntQoEPeak = 0;
                $sumQoEOffPeak = 0;
                $cntQoEOffPeak = 0;
                foreach (array_reverse($weekQoEPeak) as $tvalue) {
                    $key = $tvalue[0];
                    $sumQoEPeak += $weekQoEPeak[$key][1];
                    $cntQoEPeak += $weekQoEPeak[$key][2];
                    $sumQoEOffPeak += $weekQoEOffPeak[$key][1];
                    $cntQoEOffPeak += $weekQoEOffPeak[$key][2];
                    if ($weekQoEPeak[$key][2] > 0) {
                        $dataQoEPeak[$key] = array('x' => $key, 'y' => round($weekQoEPeak[$key][1] / $weekQoEPeak[$key][2] / $div, 2), 'cnt' => $weekQoEPeak[$key][2]);
                    }
                    // ColorBar($x,$nominal,$warning,$critical,$value,$div)
                    if ($weekQoEOffPeak[$key][2] > 0) {
                        $dataQoEOffPeak[$key] = array('x' => $key, 'y' => round($weekQoEOffPeak[$key][1] / $weekQoEOffPeak[$key][2] / $div, 2), 'cnt' => $weekQoEOffPeak[$key][2]);
                    }
                    if ($weekAvgPeak[$key][2] > 0) {
                        $dataAvgPeak[$key] = array('x' => $key, 'y' => round($weekAvgPeak[$key][1] / $weekAvgPeak[$key][2] / $div, 2), 'cnt' => $weekAvgPeak[$key][2]);
                    }
                    if ($weekAvgOffPeak[$key][2] > 0) {
                        $dataAvgOffPeak[$key] = array('x' => $key, 'y' => round($weekAvgOffPeak[$key][1] / $weekAvgOffPeak[$key][2] / $div, 2), 'cnt' => $weekAvgOffPeak[$key][2]);
                    }
                }
                //echo  $items['descriptionLong'] . " " .  $plans['plan']  . " " . $host['host'] ;
                //var_dump($dataQoEPeak);
                //echo "<br>";
                if (!isset($dataAvgOffPeak)) {
                    $dataAvgOffPeak = null;
                }
                if (!isset($dataQoEPeak)) {
                    $dataQoEPeak = null;
                }
                if (!isset($dataAvgPeak)) {
                    $dataAvgPeak = null;
                }
                if ($cntQoEOffPeak == 0) {
                    $cntQoEOffPeak = 1.0E+22;
                }
                if ($cntQoEPeak == 0) {
                    $cntQoEPeak = 9.999999999999999E+22;
                }
                $dataList[] = array('descriptionLong' => $descriptionLong, 'plan' => $plan, 'id_plan' => $id_plan, 'id_item' => $id_item, 'QoEPeak' => $dataQoEPeak, 'QoEPeakAvg' => round($sumQoEPeak / $cntQoEPeak / $div, 2), 'QoEOffPeak' => $dataQoEOffPeak, 'QoEOffPeakAvg' => round($sumQoEOffPeak / $cntQoEOffPeak / $div, 2), 'AvgPeak' => $dataAvgPeak, 'AvgOffPeak' => $dataAvgOffPeak, 'nominal' => round($nominal / $div, 2), 'warning' => round($warning, 2), 'critical' => round($critical, 2), 'unit' => $unit, 'cntQoEPeak' => $cntQoEPeak, 'cntQoEOffPeak' => $cntQoEOffPeak, 'category' => $category);
            }
        }
    }
    echo '<table width="100%" border="0"><tr><td><center>';
    echo '<table class="tooltip-tabla">';
    $img1 = '<a href="./index.php?route=home0&dashboard=' . $dashboard . '&move=' . ($_GET['move'] + 1) . '"><span class="glyphicon glyphicon-backward"></span></a>';
    $img2 = '<a href="./index.php?route=home0&dashboard=' . $dashboard . '&move=' . ($_GET['move'] - 1) . '"><span class="glyphicon glyphicon-forward"></a>';
    $img3 = '<a href="./index.php?route=home0&dashboard=' . $dashboard . '&move=' . ($_GET['move'] + 7) . '"><span class="glyphicon glyphicon-fast-backward"></span></a>';
    $img4 = '<a href="./index.php?route=home0&dashboard=' . $dashboard . '&move=' . ($_GET['move'] - 7) . '"><span class="glyphicon glyphicon-fast-forward"></a>';
    echo '<tbody><tr><th>' . $img1 . "&nbsp;" . $img3 . '</th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th style="text-align: right;">' . $img4 . "&nbsp;" . $img2 . '</th></tr></tbody>';
    $t = '';
    if (isset($dataList)) {
        foreach ($dataList as $data) {
            $timeSlot = 'PEAK';
            for ($ij = 1; $ij <= 2; $ij++) {
                if ($timeSlot == 'PEAK') {
                    $QoE = 'QoEPeak';
                    $Avg = 'QoEPeakAvg';
                    $Cnt = 'cntQoEPeak';
                } else {
                    $QoE = 'QoEOffPeak';
                    $Avg = 'QoEOffPeakAvg';
                    $Cnt = 'cntQoEOffPeak';
                }
                if ($t != $data['descriptionLong']) {
                    $t = $data['descriptionLong'];
                    echo '<tbody><tr><th class="success" colspan="12"><center><big>' . $t . '</big></center></th></tr></tbody>';
                    echo '<tr>';
                    echo '<td>Plan</td>';
                    echo '<td align="center">Left</td>';
                    echo '<td align="center">Nominal</td>';
                    //echo '<td align="center">Warning</td>';
                    //echo '<td align="center">Critical</td>';
                    echo '<td>Week Average&nbsp;&nbsp;&nbsp;&nbsp;</td>';
                    for ($i = 0; $i < 7; $i++) {
                        if (date("w", strtotime($data['category'][$i])) == 0) {
                            $sun = '<font color="red">';
                        } else {
                            $sun = '<font color="black">';
                        }
                        echo '<td align="right">' . $sun . substr($data['category'][$i], 5) . '</font>&nbsp;&nbsp;&nbsp;&nbsp;</td>';
                    }
                    echo '</tr>';
                }
                $nominal = $data['nominal'];
                $warning = $data['warning'];
                $critical = $data['critical'];
                $unit = $data['unit'];
                echo '<tr>';
                echo '<td>' . $data['plan'] . '&nbsp;&nbsp;&nbsp;</td>';
                echo '<td>' . $timeSlot . '&nbsp;&nbsp;&nbsp;</td>';
                echo '<td align="right">&nbsp;' . number_format($nominal, 2) . ' ' . $unit . '&nbsp;</td>';
                //echo '<td align="right">&nbsp;' . number_format($nominal*$warning/100,2) . ' ' . $unit. '&nbsp;</td>';
                //echo '<td align="right">&nbsp;' . number_format($nominal*$critical/100,2) . ' ' . $unit. '&nbsp;</td>';
                echo '<td>';
                // . '&tag=' . $_GET['tag']
                echo '<a href="index.php?route=home0&type=bar&dashboard=' . $dashboard . '&move=' . $_GET['move'] . '&tag=' . $tag . '&idplan=' . $data['id_plan'] . '&from=' . $from . '&iditem=' . $data['id_item'] . '">';
                if (!isset($data[$Avg]) || $data[$Avg] == 0) {
                    echo '<center><img align="center" src="./images/Button-Close-icon.png" title="' . number_format($data[$Avg], 2) . ' ' . $unit . "<b>Q:" . '0' . '"></center>';
                } else {
                    if ($warning <= 100) {
                        $T1 = $nominal * $warning / 100;
                        $T2 = $nominal * $critical / 100;
                        if ($data[$Avg] >= $T1) {
                            $color = "./images/Green-Ball-icon.png";
                        } elseif ($data[$Avg] >= $T2 && $data[$Avg] < $T1) {
                            $color = "./images/Yellow-Ball-icon.png";
                        } else {
                            $color = "./images/Red-Ball-icon.png";
                        }
                    } else {
                        $T1 = $nominal * $warning / 100;
                        $T2 = $nominal * $critical / 100;
                        if ($data[$Avg] < $T1) {
                            $color = "./images/Green-Ball-icon.png";
                        } elseif ($data[$Avg] >= $T1 && $data[$Avg] < $T2) {
                            $color = "./images/Yellow-Ball-icon.png";
                        } else {
                            $color = "./images/Red-Ball-icon.png";
                        }
                    }
                    echo '<center><img align="center" src="' . $color . '" data-toggle="tooltip" title="(' . number_format($data[$Avg] / $nominal * 100, 2) . '%) ' . number_format($data[$Avg], 2) . ' ' . $unit . "  Q:" . $data[$Cnt] . '"></center>';
                }
                echo '</a>';
                echo '</span></td>';
                for ($i = 0; $i < 7; $i++) {
                    $ky = substr($data['category'][$i], 5);
                    echo '<td>';
                    //echo '(' . $data[$QoE][$ky]['y'] . ')' . '<br>';
                    if (!isset($data[$QoE][$ky]['y']) || $data[$QoE][$ky]['y'] == 0 || $data[$QoE][$ky]['y'] == null) {
                        echo '<center><img align="center" src="./images/Button-Close-icon.png" title="No data"></center>';
                    } else {
                        if ($warning <= 100) {
                            $T1 = $nominal * $warning / 100;
                            $T2 = $nominal * $critical / 100;
                            if ($data[$QoE][$ky]['y'] >= $T1) {
                                $color = "./images/Flag-green-icon.png";
                            } elseif ($data[$QoE][$ky]['y'] >= $T2 && $data[$QoE][$ky]['y'] < $T1) {
                                $color = "./images/Flag-yellow-icon.png";
                            } else {
                                $color = "./images/Flag-red-icon.png";
                            }
                        } else {
                            $T1 = $nominal * $warning / 100;
                            $T2 = $nominal * $critical / 100;
                            if ($data[$QoE][$ky]['y'] < $T1) {
                                $color = "./images/Flag-green-icon.png";
                            } elseif ($data[$QoE][$ky]['y'] >= $T1 && $data[$QoE][$ky]['y'] < $T2) {
                                $color = "./images/Flag-yellow-icon.png";
                            } else {
                                $color = "./images/Flag-red-icon.png";
                            }
                        }
                        echo '<center><img align="center" src="' . $color . '" data-toggle="tooltip" title="' . $data[$QoE][$ky]['x'] . ' ' . number_format($data[$QoE][$ky]['y'], 2) . ' ' . $unit . "  Q:" . $data[$QoE][$ky]['cnt'] . '"></center>';
                    }
                    echo '</span></td>';
                }
                echo '</tr>';
                if ($timeSlot == 'PEAK') {
                    $timeSlot = 'OFFPEAK';
                } else {
                    $timeSlot = 'PEAK';
                }
            }
        }
    }
    echo '</table>';
    echo '</center></td></tr></table>';
}
function GraphBar($chart, $id_chart, $id_plan, $id_item, $tag, $from)
{
    $offset = getOffset();
    setTimezone();
    $dt = getDates($from);
    $ldata = loadRAWData($from, $id_plan, $id_item);
    $unit = $ldata['unit'];
    $div = $ldata['div'];
    $percentile = calculatePercentile($ldata['allData']);
    if (isset($ldata['hostList'])) {
        foreach ($ldata['hostList'] as $host) {
            $nacD = $host['nacD'];
            $nacU = $host['nacU'];
            $critical = $host['critical'];
            $warning = $host['warning'];
            $nominal = $host['nominal'];
            if ($nominal == -1) {
                $nominal = $nacD;
            }
            if ($nominal == -2) {
                $nominal = $nacU;
            }
            $id_host = $host['id_host'];
            if (isset($ldata['historyList'][$id_host])) {
                foreach ($ldata['historyList'][$id_host] as $key => $row) {
                    $tk = date('Y/m/d', $row['clock']);
                    if (!isset($weekAvgPeak[$tk])) {
                        $weekAvgPeak[$tk] = array($tk, 0, 0);
                    }
                    if (!isset($weekAvgOffPeak[$tk])) {
                        $weekAvgOffPeak[$tk] = array($tk, 0, 0);
                    }
                    if (!isset($weekQoEPeak[$tk])) {
                        $weekQoEPeak[$tk] = array($tk, 0, 0);
                    }
                    if (!isset($weekQoEOffPeak[$tk])) {
                        $weekQoEOffPeak[$tk] = array($tk, 0, 0);
                    }
                    $skip = false;
                    if (isset($_SESSION['filter']['P95']) && $row['value'] > $percentile['P95']) {
                        $skip = true;
                    }
                    if (isset($_SESSION['filter']['P5']) && $row['value'] < $percentile['P5']) {
                        $skip = true;
                    }
                    if (!$skip) {
                        if ($row['t'] == 'P') {
                            $sum = $weekAvgPeak[$tk][1];
                            $cnt = $weekAvgPeak[$tk][2];
                            $x = $sum + $row['value'];
                            $y = $cnt + 1;
                            $weekAvgPeak[$tk] = array($tk, $x, $y);
                        }
                        if ($row['t'] == 'O') {
                            $sum = $weekAvgOffPeak[$tk][1];
                            $cnt = $weekAvgOffPeak[$tk][2];
                            $x = $sum + $row['value'];
                            $y = $cnt + 1;
                            $weekAvgOffPeak[$tk] = array($tk, $x, $y);
                        }
                        if ($row['value'] > $nacD) {
                            $row['value'] = $nominal;
                        }
                        if ($row['t'] == 'P') {
                            $sum = $weekQoEPeak[$tk][1];
                            $cnt = $weekQoEPeak[$tk][2];
                            $x = $sum + $row['value'];
                            $y = $cnt + 1;
                            $weekQoEPeak[$tk] = array($tk, $x, $y);
                        }
                        if ($row['t'] == 'O') {
                            $sum = $weekQoEOffPeak[$tk][1];
                            $cnt = $weekQoEOffPeak[$tk][2];
                            $x = $sum + $row['value'];
                            $y = $cnt + 1;
                            $weekQoEOffPeak[$tk] = array($tk, $x, $y);
                        }
                    }
                }
            }
        }
    }
    if (isset($weekQoEPeak)) {
        aasort($weekQoEPeak, 0);
        aasort($weekQoEOffPeak, 0);
        aasort($weekAvgPeak, 0);
        aasort($weekAvgOffPeak, 0);
        $h = -100;
        foreach ($weekQoEPeak as $tvalue) {
            $key = $tvalue[0];
            if ($weekQoEPeak[$key][2] > 0) {
                $dataQoEPeak[] = ColorBar($h, $nominal, $warning, $critical, $weekQoEPeak[$key][1] / $weekQoEPeak[$key][2], $div);
            } else {
                $dataQoEPeak[] = ColorBar($h, $nominal, $warning, $critical, 0, $div);
            }
            // ColorBar($x,$nominal,$warning,$critical,$value,$div)
            if ($weekQoEOffPeak[$key][2] > 0) {
                $dataQoEOffPeak[] = ColorBar($h, $nominal, $warning, $critical, $weekQoEOffPeak[$key][1] / $weekQoEOffPeak[$key][2], $div);
            } else {
                $dataQoEOffPeak[] = ColorBar($h, $nominal, $warning, $critical, 0, $div);
            }
            if ($weekAvgPeak[$key][2] > 0) {
                $dataAvgPeak[] = array('x' => $h, 'y' => round($weekAvgPeak[$key][1] / $weekAvgPeak[$key][2] / $div, 2), 'color' => 'silver');
            } else {
                $dataAvgPeak[] = array('x' => $h, 'y' => 0, 'color' => 'silver');
            }
            if ($weekAvgOffPeak[$key][2] > 0) {
                $dataAvgOffPeak[] = array('x' => $h, 'y' => round($weekAvgOffPeak[$key][1] / $weekAvgOffPeak[$key][2] / $div, 2), 'color' => 'silver');
            } else {
                $dataAvgOffPeak[] = array('x' => $h, 'y' => 0, 'color' => 'silver');
            }
            $dataNominal[] = array('x' => $h, 'y' => round($nominal / $div, 2));
            $dataWarning[] = array('x' => $h, 'y' => round($nominal / $div * $warning / 100, 2));
            $dataCritical[] = array('x' => $h, 'y' => round($nominal / $div * $critical / 100, 2));
            $category[$h] = $key;
            $h++;
        }
        for ($i = 0; $i < count($dataAvgPeak); $i++) {
            $dataAvgPeak[$i]['y'] -= $dataQoEPeak[$i]['y'];
            $dataAvgOffPeak[$i]['y'] -= $dataQoEOffPeak[$i]['y'];
        }
    }
    if (!isset($category)) {
        $category = null;
        $dataAvgPeak = null;
        $dataQoEPeak = null;
        $dataAvgOffPeak = null;
        $dataQoEOffPeak = null;
        $dataNominal = null;
        $dataWarning = null;
        $dataCritical = null;
        $warning = 0;
        $critical = 0;
    }
    $title = 'Average by Hour for "' . $ldata['item'] . '" on plan "' . $ldata['plan'] . '"';
    $subtitle = 'From ' . $ldata['from'] . ' to ' . $ldata['to'];
    $chart = chartHeader($chart, $id_chart, $title, $subtitle, $ldata['unit'], $category);
    $fontSize = '10px';
    if (count($category) > 15) {
        $fontSize = '6px';
        $chart->plotOptions->series->pointPadding = -1 / 300;
    }
    $chart->xAxis->type = 'datetime';
    $chart->xAxis->labels->rotation = -90;
    $chart->xAxis->labels->style->color = "#000000";
    $chart->legend->enabled = false;
    /*
      $chart->option3d->enabled = true;
      $chart->option3d->alpha = 45;
      $chart->option3d->beta = 0;
      $chart->option3d->depth = 50;
      $chart->option3d->viewDistance = 25;
      $chart->plotOptions->column->depth = 25;
      $chart->option3d->beta = 0;
    */
    $chart->series[0]->type = 'column';
    $chart->series[0]->stack = 0;
    $chart->series[0]->data = $dataAvgPeak;
    $chart->series[0]->tooltip->valueSuffix = ' ' . $unit;
    $chart->series[0]->name = 'Sample Average PEAK';
    $chart->series[0]->dataLabels->enabled = true;
    $chart->series[0]->dataLabels->rotation = 0;
    $chart->series[0]->dataLabels->rotation = 0;
    $chart->series[0]->dataLabels->crop = false;
    $chart->series[0]->dataLabels->y = -10;
    $chart->series[0]->dataLabels->zIndexy = 12;
    $chart->series[0]->dataLabels->color = '#000000';
    $chart->series[0]->dataLabels->style->fontSize = $fontSize;
    $chart->series[0]->dataLabels->style->fontFamily = 'Verdana, sans-serif';
    $chart->series[0]->dataLabels->formatter = new HighchartJsExpr("function() { return  Highcharts.numberFormat(this.point.stackTotal, 2, '.');}");
    $chart->series[1]->type = 'column';
    $chart->series[1]->stack = 0;
    $chart->series[1]->data = $dataQoEPeak;
    $chart->series[1]->name = 'Sample Average PEAK';
    $chart->series[1]->dataLabels->enabled = true;
    $chart->series[1]->dataLabels->crop = false;
    $chart->series[1]->dataLabels->rotation = -90;
    $chart->series[1]->dataLabels->align = 'left';
    $chart->series[1]->tooltip->valueSuffix = ' ' . $unit;
    $chart->series[1]->dataLabels->x = 2;
    $chart->series[1]->dataLabels->color = '#FFFFFF';
    $chart->series[1]->dataLabels->style->fontSize = $fontSize;
    $chart->series[1]->dataLabels->style->fontFamily = 'Verdana, sans-serif';
    $chart->series[1]->dataLabels->formatter = new HighchartJsExpr("function() { return 'PEAK: ' + Highcharts.numberFormat(this.y, 2, '.');}");
    $chart->series[2]->type = 'column';
    $chart->series[2]->stack = 1;
    $chart->series[2]->data = $dataAvgOffPeak;
    $chart->series[2]->name = 'Real Average OFFPEAK';
    $chart->series[2]->tooltip->valueSuffix = ' ' . $unit;
    $chart->series[2]->dataLabels->crop = false;
    $chart->series[2]->dataLabels->enabled = true;
    $chart->series[2]->dataLabels->rotation = 0;
    $chart->series[2]->dataLabels->align = 'center';
    $chart->series[2]->dataLabels->y = -10;
    $chart->series[2]->dataLabels->zIndexy = 12;
    $chart->series[2]->dataLabels->color = '#000000';
    $chart->series[2]->dataLabels->style->fontSize = $fontSize;
    $chart->series[2]->dataLabels->style->fontFamily = 'Verdana, sans-serif';
    $chart->series[2]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.point.stackTotal, 2, '.');}");
    $chart->series[3]->type = 'column';
    $chart->series[3]->stack = 1;
    $chart->series[3]->data = $dataQoEOffPeak;
    $chart->series[3]->tooltip->valueSuffix = ' ' . $unit;
    $chart->series[3]->name = 'Real Average OFFPEAK';
    $chart->series[3]->dataLabels->crop = false;
    $chart->series[3]->dataLabels->enabled = true;
    $chart->series[3]->dataLabels->rotation = -90;
    $chart->series[3]->dataLabels->align = 'left';
    $chart->series[3]->dataLabels->x = 2;
    $chart->series[3]->dataLabels->color = '#FFFFFF';
    $chart->series[3]->dataLabels->style->fontSize = $fontSize;
    $chart->series[3]->dataLabels->style->fontFamily = 'Verdana, sans-serif';
    $chart->series[3]->dataLabels->formatter = new HighchartJsExpr("function() { return 'OFFPEAK: ' +Highcharts.numberFormat(this.y, 2, '.');}");
    $chart->series[4]->type = 'spline';
    $chart->series[4]->data = $dataNominal;
    $chart->series[4]->stack = 2;
    $chart->series[4]->tooltip->valueSuffix = ' ' . $unit;
    $chart->series[4]->dataLabels->crop = false;
    $chart->series[4]->name = 'Nominal PEAK';
    $chart->series[4]->dataLabels->enabled = false;
    $chart->series[4]->dataLabels->rotation = -90;
    $chart->series[4]->dataLabels->align = 'right';
    $chart->series[4]->dataLabels->x = 4;
    $chart->series[4]->dataLabels->y = 10;
    $chart->series[4]->dataLabels->color = '#FFFFFF';
    $chart->series[4]->dataLabels->style->fontSize = $fontSize;
    $chart->series[4]->dataLabels->style->fontFamily = 'Verdana, sans-serif';
    $chart->series[4]->lineWidth = 2;
    $chart->series[4]->color = 'green';
    $chart->series[4]->marker->fillColor = 'green';
    $chart->series[4]->marker->radius = 2;
    $chart->series[4]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.y, 2, '.');}");
    $chart->series[5]->type = 'spline';
    $chart->series[5]->data = $dataWarning;
    $chart->series[5]->stack = 2;
    $chart->series[5]->tooltip->valueSuffix = ' ' . $unit;
    $chart->series[5]->dataLabels->crop = false;
    $chart->series[5]->name = $warning . '% of the plan';
    $chart->series[5]->dataLabels->enabled = false;
    $chart->series[5]->dataLabels->rotation = -90;
    $chart->series[5]->dataLabels->align = 'right';
    $chart->series[5]->dataLabels->x = 4;
    $chart->series[5]->dataLabels->y = 10;
    $chart->series[5]->dataLabels->color = '#FFFFFF';
    $chart->series[5]->dataLabels->style->fontSize = $fontSize;
    $chart->series[5]->dataLabels->style->fontFamily = 'Verdana, sans-serif';
    $chart->series[5]->lineWidth = 2;
    $chart->series[5]->color = '#F79E03';
    $chart->series[5]->marker->fillColor = '#F79E03';
    $chart->series[5]->marker->radius = 2;
    $chart->series[5]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.y, 2, '.');}");
    $chart->series[6]->type = 'spline';
    $chart->series[6]->data = $dataCritical;
    $chart->series[6]->stack = 2;
    $chart->series[6]->tooltip->valueSuffix = ' ' . $unit;
    $chart->series[6]->dataLabels->crop = false;
    $chart->series[6]->name = $critical . '% of the plan';
    $chart->series[6]->dataLabels->enabled = false;
    $chart->series[6]->dataLabels->rotation = -90;
    $chart->series[6]->dataLabels->align = 'right';
    $chart->series[6]->dataLabels->x = 4;
    $chart->series[6]->dataLabels->y = 10;
    $chart->series[6]->dataLabels->color = '#FFFFFF';
    $chart->series[6]->dataLabels->style->fontSize = $fontSize;
    $chart->series[6]->dataLabels->style->fontFamily = 'Verdana, sans-serif';
    $chart->series[6]->lineWidth = 2;
    $chart->series[6]->color = 'red';
    $chart->series[6]->marker->fillColor = 'red';
    $chart->series[6]->marker->radius = 2;
    $chart->series[6]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.y, 2, '.');}");
    return $chart;
}