var netGauge = 0;
var netGaugeXML;
var netGaugeOpts = {width: 400, height: 120, min: -10000, max: 7000, redFrom: -10000, redTo: -1000, yellowFrom:-1000, yellowTo: 0, minorTicks: 5, majorTicks:["-10","-9","-8","-7","-6","-5","-4","-3","-2","-1","0","1","2","3","4","5","6","7"]};
var netGaugeChart;

var uPacGaugeOpt1 = "";
var uPacGaugeOpt2 = "";
var uPacGauge = 0;
var uPacGaugeXML;
var uPacGaugeOpts = {width: 400, height: 120, min: 0, max: 10000, redFrom: 8000, redTo: 10000, yellowFrom:6000, yellowTo: 8000, minorTicks: 5, majorTicks:["0","1","2","3","4","5","6","7","8","9","10"]};
var uPacGaugeChart;

var pacGauge;
var pacGaugeXML;
var pacGaugeOpts = {width: 400, height: 120, min: 0, max: 7000, redFrom: 6150, redTo: 7000, yellowFrom:5300, yellowTo: 6150, minorTicks: 5, majorTicks:["0","1","2","3","4","5","6","7"]};
var pacGaugeChart;

var ppvGauge;
var ppvGaugeOpts = {width: 400, height: 120, min: 0, max: 7000, redFrom: 6150, redTo: 7000, yellowFrom:5300, yellowTo: 6150, minorTicks: 5, majorTicks:["0","1","2","3","4","5","6","7"]};
var ppvGaugeChart;

var tempGauge;
var tempGaugeOpts = {width: 400, height: 120, min: 0, max: 150, redFrom: 140, redTo: 150, yellowFrom:130, yellowTo: 140, minorTicks: 5, majorTicks:["0","50","100","150"]};
var tempGaugeChart;

var iacGauge;
var iacGaugeOpts = {width: 400, height: 120, min: 0, max: 700, redFrom: 650, redTo: 700, yellowFrom:600, yellowTo: 650, minorTicks: 5, majorTicks:["0","5", "10","15","20","25","30","35","40","45","50","55","60","65","70"]};
var iacGaugeChart;

var uPac = 0;
var pac = 0;
var statTimer = 0;
var pvTimer = 0;
var pacTimeline;
var tmpTimeline;
var iacTimeline;
var pvDayChartTimer;
var pvByMonth;
var pvByDay;
var uvByDay;
var solarDateQ = "";	// For use as ?date=yyyy-mm-dd
var solarDateA = "";	// For use as &date=yyyy-mm-dd

function pvRefresh() {
  pacTimelineRefresh();
  pvByMonthRefresh();
  pvByDayRefresh();
  uvByDayRefresh();
}

function statRefresh() {
  var now = new Date();
  var url = "pvstats2day.php?rand="+now.getTime()+solarDateA;
  $("#stats2day").load(url);
}

function pvGoogleOnLoad() {
  var which;

  if (solarDate !== "") {
    solarDateQ = "?date=" +solarDate;
    solarDateA = "&date=" +solarDate;
  }

  statRefresh();

  which = document.getElementById('netGauge');
  if (which) {
    netGauge = new google.visualization.DataTable();
    netGauge.addColumn('string', 'Label');
    netGauge.addColumn('number', 'Value');
    netGauge.addRows(3);
    netGauge.setValue(0, 0, 'net W');
    netGauge.setValue(0, 1, 0);

    netGaugeChart = new google.visualization.Gauge(which);
    netGaugeChart.draw(netGauge, netGaugeOpts);
  }

  which = document.getElementById('uPacGauge');
  if (which) {
    uPacGauge = new google.visualization.DataTable();
    uPacGauge.addColumn('string', 'Label');
    uPacGauge.addColumn('number', 'Value');
    uPacGauge.addRows(3);
    uPacGauge.setValue(0, 0, 'uPac W');
    uPacGauge.setValue(0, 1, 0);
  
    uPacGaugeChart = new google.visualization.Gauge(which);
    uPacGaugeChart.draw(uPacGauge, uPacGaugeOpts);
  }

  pacGauge = new google.visualization.DataTable();
  pacGauge.addColumn('string', 'Label');
  pacGauge.addColumn('number', 'Value');
  pacGauge.addRows(3);
  pacGauge.setValue(0, 0, 'Pac W');
  pacGauge.setValue(0, 1, 0);

  pacGaugeChart = new google.visualization.Gauge(document.getElementById('pacGauge'));
  pacGaugeChart.draw(pacGauge, pacGaugeOpts);

  ppvGauge = new google.visualization.DataTable();
  ppvGauge.addColumn('string', 'Label');
  ppvGauge.addColumn('number', 'Value');
  ppvGauge.addRows(3);
  ppvGauge.setValue(0, 0, 'Ppv W');
  ppvGauge.setValue(0, 1, 0);

  ppvGaugeChart = new google.visualization.Gauge(document.getElementById('ppvGauge'));
  ppvGaugeChart.draw(ppvGauge, ppvGaugeOpts);

  tempGauge = new google.visualization.DataTable();
  tempGauge.addColumn('string', 'Label');
  tempGauge.addColumn('number', 'Value');
  tempGauge.addRows(3);
  tempGauge.setValue(0, 0, 'F');
  tempGauge.setValue(0, 1, 0);

  tempGaugeChart = new google.visualization.Gauge(document.getElementById('tempGauge'));
  tempGaugeChart.draw(tempGauge, tempGaugeOpts);

  iacGauge = new google.visualization.DataTable();
  iacGauge.addColumn('string', 'Label');
  iacGauge.addColumn('number', 'Value');
  iacGauge.addRows(3);
  iacGauge.setValue(0, 0, 'Iac A');
  iacGauge.setValue(0, 1, 0);

  iacGaugeChart = new google.visualization.Gauge(document.getElementById('iacGauge'));
  iacGaugeChart.draw(iacGauge, iacGaugeOpts);

  pacTimeline  = new google.visualization.ImageChart(document.getElementById('pacTimeline'));
  tmpTimeline  = new google.visualization.ImageChart(document.getElementById('tmpTimeline'));
  iacTimeline  = new google.visualization.ImageChart(document.getElementById('iacTimeline'));
  pacTimelineRefresh();

  pvByMonth    = new google.visualization.ColumnChart(document.getElementById('eacByMonth'));
  pvByMonthRefresh();

  pvByDay      = new google.visualization.ColumnChart(document.getElementById('eacByDay'));
  pvByDayRefresh();

  uvByDay      = new google.visualization.ColumnChart(document.getElementById('uacByDay'));
  uvByDayRefresh();

  // If this is a historical display, we don't need to refresh it
  if (solarDate === "") {
    pvTimer      = setInterval(pvRefresh, 5*60*1000);
    statTimer    = setInterval(statRefresh, 10*1000);
    myGaugeTimer = setInterval("pacGaugeReload()", 3*1000); // 3 second update
  }
}

function uPacGaugeUpdate(xmlDoc) {
  if (xmlDoc && uPacGauge) {
    uPac = 0;
    try { x=xmlDoc.getElementsByTagName("upac");uPac = x[0].firstChild.nodeValue; } catch (er) { }
    uPac = parseInt(uPac);
    uPacGauge.setValue(0, 1, uPac);
    try { uPacGaugeChart.draw(uPacGauge, uPacGaugeOpts); } catch (er) {}
//alert("here 3");

    var net = pac - uPac;
    netGauge.setValue(0, 1, net);
    netGaugeChart.draw(netGauge, netGaugeOpts);
  }
}

function pacGaugeUpdate(xmlDoc) {
  if (xmlDoc) {
//    var uPac = 0;
//    try { x=xmlDoc.getElementsByTagName("upac");uPac = x[0].firstChild.nodeValue; } catch (er) { }
//    uPac = parseInt(uPac);
//    uPacGauge.setValue(0, 1, uPac);
//    uPacGaugeChart.draw(uPacGauge, uPacGaugeOpts);

    pac = 0;
    try { x=xmlDoc.getElementsByTagName("pac");pac = x[0].firstChild.nodeValue; } catch (er) { }
    pac = parseInt(pac);
    pacGauge.setValue(0, 1, pac);
    pacGaugeChart.draw(pacGauge, pacGaugeOpts);

    if (uPacGauge) {
      var net = pac - uPac;
      netGauge.setValue(0, 1, net);
      netGaugeChart.draw(netGauge, netGaugeOpts);
    }

    var ppv = 0;
    try { x=xmlDoc.getElementsByTagName("ppv");ppv = x[0].firstChild.nodeValue; } catch (er) { }
    ppv = parseInt(ppv);
    ppvGauge.setValue(0, 1, ppv);
    ppvGaugeChart.draw(ppvGauge, ppvGaugeOpts);

    var tempF = 0;
    try { x=xmlDoc.getElementsByTagName("tempF");tempF = x[0].firstChild.nodeValue; } catch (er) { }
    tempF = parseInt(tempF);
    tempGauge.setValue(0, 1, tempF);
    tempGaugeChart.draw(tempGauge, tempGaugeOpts);

    var iac = 0;
    try { x=xmlDoc.getElementsByTagName("iac");iac = x[0].firstChild.nodeValue; } catch (er) { }
    iac = parseInt(iac*10);
    iacGauge.setValue(0, 1, iac);
    iacGaugeChart.draw(iacGauge, iacGaugeOpts);
  }
}

function uPacGaugeError() { }
function pacGaugeError() { }

function pacGaugeReload() {
  var url = "upac2day.php"+uPacGaugeOpt1;
  pacGaugeXML = $.ajax({type: "GET", url: "pv2day.php", success: pacGaugeUpdate, error: pacGaugeError, cache: false });
  uPacGaugeXML = $.ajax({type: "GET", url: url, success: uPacGaugeUpdate, error: uPacGaugeError, cache: false });
}

function pvByMonthRefresh() {
    query = new google.visualization.Query("pvstatsbymonth.php"+solarDateQ);
    query.setTimeout(60);
    query.send(function(response) {pvByMonthResponse(response)});
};

function pvByMonthResponse(response) {
    if (response.isError()) {
        //alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
        return;
    }

    var data = response.getDataTable();
    var timeZoneOffset = parseInt(data.getTableProperty('timeZoneOffset'));
    var options = {width:700, height:240, is3D: true, title: 'Solar power generated by month',
vAxis: {title: 'kWh'},
hAxis: {title: 'Month'}
};
    pvByMonth.draw(data, options);
};

function pvByDayRefresh() {
    query = new google.visualization.Query("pvstatsbyday.php"+solarDateQ);
    query.setTimeout(60);
    query.send(function(response) {pvByDayResponse(response)});
};

function uvByDayRefresh() {
    query = new google.visualization.Query("upvstatsbyday.php"+solarDateQ);
    query.setTimeout(60);
    query.send(function(response) {uvByDayResponse(response)});
};

function pvByDayResponse(response) {
    if (response.isError()) {
        //alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
        return;
    }
    which = document.getElementById('loadingByDay');
    if (which) { which.style.display = 'none'; }

    var data = response.getDataTable();
    var timeZoneOffset = parseInt(data.getTableProperty('timeZoneOffset'));
    var options = {width:700, height:240, is3D: true, title: 'Solar power generated by day',
vAxis: {title: 'kWh'},
hAxis: {title: 'Day of Month'}
};
    pvByDay.draw(data, options);
};

//colors:['blue','red','green'],
//colors:['#0000cc','#cc0000','#00cc00'],
function uvByDayResponse(response) {
    if (response.isError()) {
        //alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
        return;
    }
    var data = response.getDataTable();
    var timeZoneOffset = parseInt(data.getTableProperty('timeZoneOffset'));
    var options = {width:700, height:240, is3D: true, title: 'Power generation and usage by day - Negative surpless sold to PSNH',
colors:['#3366cc','#dc3912','#80c65a'],
vAxis: {title: 'kWh'},
hAxis: {title: 'Day of Month'},
};
    uvByDay.draw(data, options);
};

function pacTimelineRefresh() {
    query = new google.visualization.Query("pvstats.php?daychart"+solarDateA+uPacGaugeOpt2);
    query.setTimeout(60);
    query.send(function(response) {pacTimelineResponse(response)});

    query = new google.visualization.Query("tmpstats.php"+solarDateQ);
    query.setTimeout(60);
    query.send(function(response) {tmpTimelineResponse(response)});

    query = new google.visualization.Query("iacstats.php"+solarDateQ);
    query.setTimeout(60);
    query.send(function(response) {iacTimelineResponse(response)});
};

function pacTimelineResponse(response) {
    if (response.isError()) {
        //alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
        return;
    }

    var data = response.getDataTable();
    var timeZoneOffset = parseInt(data.getTableProperty('timeZoneOffset'));
    var options = {displayAnnotations: false, displayExactValues: true, allValuesSuffix: 'W', title: 'Pac By Hour (W)'};
    pacTimeline.draw(data, options);

    var xdate   = new Date (); // Get today's date and time
    var month   = xdate.getMonth() + 1; if (month < 10) month= "0" + month;
    var day     = xdate.getDate();      if (day     < 10) day     = "0" + day;
    var hours   = xdate.getHours();     if (hours   < 10) hours   = "0" + hours;
    var minutes = xdate.getMinutes();   if (minutes < 10) minutes = "0" + minutes;
    var seconds = xdate.getSeconds();   if (seconds < 10) seconds = "0" + seconds;
    var now     = xdate.getFullYear() + "/" + month + "/" + day + " " + hours + ":" + minutes + ":" + seconds;

    document.getElementById('resolutionId').innerHTML = data.getTableProperty('resolutionString') + ", Updated: " +now;
};

function tmpTimelineResponse(response) {
    if (response.isError()) {
        //alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
        return;
    }

    var data = response.getDataTable();
    var timeZoneOffset = parseInt(data.getTableProperty('timeZoneOffset'));
    var options = {displayAnnotations: false, displayExactValues: true, allValuesSuffix: 'W', title: 'Heatsink Temp By Hour (F)'};
    tmpTimeline.draw(data, options);
};

function iacTimelineResponse(response) {
    if (response.isError()) {
        //alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
        return;
    }

    var data = response.getDataTable();
    var timeZoneOffset = parseInt(data.getTableProperty('timeZoneOffset'));
    var options = {displayAnnotations: false, displayExactValues: true, allValuesSuffix: 'W', title: 'Iac By Hour (A)'};
    iacTimeline.draw(data, options);
};

function pvOnLoad() {
  //$("#stats2day").load("pvstats2day.php"+solarDateQ);
}

$(document).ready( function() { pvOnLoad(); } );
