var dtFormat = new google.visualization.DateFormat({ pattern: "dd MMM 'a't HH:MM" });
var numFormat = new google.visualization.NumberFormat({ decimalSymbol: '.' });
var ppcolors = Array('green', 'blue', '#333333', 'red');
var oOptions = { width: 600, height: 300, legend: 'bottom', title: 'Usage', colors: ppcolors, titleY: 'Units', smoothLine: true };
var daysView = 1;

var ppdata = new google.visualization.DataTable(
 {
     cols: [
            { id: 'time', label: 'Time of Usage', type: 'date' },
            { id: 'units', label: 'Units Used', type: 'number' },
            { id: 'avgunits', label: 'Average Units Used', type: 'number' },
            { id: 'yourunits', label: 'Your Usage', type: 'number' },
            { id: 'youravg', label: 'Your Average', type: 'number' }
           ],
     rows: []
     //p: { foo: 'hello', bar: 'world!' }
 }
 );

function loadGraphProfile() {
    pchart = new google.visualization.LineChart(document.getElementById('ppchart_div'));
    google.visualization.events.addListener(pchart, 'onmouseover', function(a) {
        var power = ppdata.getValue(a.row, a.column);
        
        document.getElementById("tdUnitsPoint").innerHTML = power.toFixed(2) + 'KW/h';
        document.getElementById("tdCo2Point").innerHTML = (power * CO2FACTOR).toFixed(4) + ' tonnes';
        document.getElementById("tdCostPoint").innerHTML = '--';
    });
    window.setTimeout(loadProfileChart, 100);
}

function loadProfileChart(days) {

    daysView = days == undefined ? 1 : days; ;
    
    var pu = new publicUsage(g_publicKey);
    var arr = pu.usage(24 * daysView, 1);

    //var arrAvg = pu.usage(24 * days, 24);

    ppdata.removeRows(0, ppdata.getNumberOfRows());
    ppdata.addRows(arr.length);

    var dtFrom = new Date();
    var dtTo = new Date(0);
    var totUnits = 0;

    for (var i = 0; i <= arr.length - 1; i++) {
        ppdata.setValue(i, 0, arr[i].logtime);
        ppdata.setValue(i, 1, arr[i].power);
        
        totUnits += arr[i].power;
        dtFrom = dtFrom > arr[i].logtime ? arr[i].logtime : dtFrom;
        dtTo = dtTo < arr[i].logtime ? arr[i].logtime : dtTo;
    }

    dtFormat.format(ppdata, 0);
    numFormat.format(ppdata, 1); // Apply formatter to second column
    pchart.draw(ppdata, oOptions);
    if (document.getElementById("chkShowAverage").checked)
        chkShowAverage(document.getElementById("chkShowAverage"));

    document.getElementById("tdFrom").innerHTML = '- -';
    document.getElementById("tdTo").innerHTML = '- -';
    if (ppdata.getNumberOfRows() > 0) {
        document.getElementById("tdFrom").innerHTML = dtFrom.toString("dddd dd MMM yy HH:MM");
        document.getElementById("tdTo").innerHTML = dtTo.toString("dddd dd MMM yy HH:MM");
    
        document.getElementById("tdUnitsTotal").innerHTML = totUnits.toFixed(2) + 'KW/h';
        document.getElementById("tdUnitsAverage").innerHTML = (totUnits / ppdata.getNumberOfRows()).toFixed(2) + 'KW/h';

        document.getElementById("tdCo2Total").innerHTML = (totUnits * CO2FACTOR).toFixed(4) + ' tonnes';
        document.getElementById("tdCo2Average").innerHTML = ((totUnits / ppdata.getNumberOfRows()) * CO2FACTOR).toFixed(4) + ' tonnes';

        document.getElementById("tdCostTotal").innerHTML = '--';
        document.getElementById("tdCostAverage").innerHTML = '--';
    }
    if (document.getElementById("chkShowUserUsage") != null && document.getElementById("chkShowUserUsage").checked)
        chkShowUserUsage(document.getElementById("chkShowUserUsage"));
}

function chkShowAverage(chk) {
    var rows = ppdata.getNumberOfRows();

    if (chk.checked) {
        var tot = 0.00;
        var totYou = 0.00;
        var youUsage;
        for (var i = 0; i <= rows - 1; i++) {
            tot += ppdata.getValue(i, 1);
            youUsage = ppdata.getValue(i, 3);
            totYou += youUsage
            ppdata.setValue(i, 2, tot / (i + 1));
            if (youUsage != null)
                ppdata.setValue(i, 4, totYou / (i + 1));
        }
    }
    else {
        for (var i = 0; i <= rows - 1; i++) {
            ppdata.setValue(i, 2, null);
            ppdata.setValue(i, 4, null);
        }
    }
    pchart.draw(ppdata, oOptions);
}

function chkShowUserUsage(chk) {
    var rows = ppdata.getNumberOfRows();

    if (chk.checked) {
        var pu = new publicUsage(g_youPublicKey);
        var arr = pu.usage(24 * daysView, 1);
        var len = Math.min(rows, arr.length);
        for (var i = 0; i <= len - 1; i++) {
            ppdata.setValue(i, 3, arr[i].power);
        }
    }
    else {
        for (var i = 0; i <= rows - 1; i++) {
            ppdata.setValue(i, 3, null);
        }
    }
    pchart.draw(ppdata, oOptions);
}