google.load("visualization", "1", { packages: ["gauge", "linechart"] });
function initGlobalUsage() {

    //chart Chart Global Energy Gauge Total Watts

    var chart_GlobalEnergyGaugeTotalWatts = document.getElementById('chart_GlobalEnergyGaugeTotalWatts');
    var chart_GlobalEnergyGaugeUnitsLast60Minutes = document.getElementById('chart_GlobalEnergyGaugeUnitsLast60Minutes');
    var chart_GlobalEnergyForTodayByHour = document.getElementById('chart_GlobalEnergyForTodayByHour');

    if (chart_GlobalEnergyForTodayByHour == null || chart_GlobalEnergyGaugeTotalWatts == null || chart_GlobalEnergyGaugeUnitsLast60Minutes == null)
        return;
    
    var chartdrawChartGlobalEnergyGaugeTotalWatts = new google.visualization.Gauge(chart_GlobalEnergyGaugeTotalWatts);
    var datadrawChartGlobalEnergyGaugeTotalWatts = new google.visualization.DataTable();
    with (datadrawChartGlobalEnergyGaugeTotalWatts) {
        addColumn('string', 'Label');
        addColumn('number', 'Value');
        addRows(1);
        setValue(0, 0, 'Watts');
    }

    //drawChartGlobalEnergyGaugeUnitsLast60Minutes
    var chartdrawChartGlobalEnergyGaugeLast60Minutes = new google.visualization.Gauge(chart_GlobalEnergyGaugeUnitsLast60Minutes);
    var datadrawChartGlobalEnergyGaugeLast60Minutes = new google.visualization.DataTable();
    with (datadrawChartGlobalEnergyGaugeLast60Minutes) {
        addColumn('string', 'Label');
        addColumn('number', 'Value');
        addRows(1);
        setValue(0, 0, 'KW/h');
    }

    //drawChartGlobalEnergyForTodayByHour
    var chartdrawChartGlobalEnergyForTodayByHour = new google.visualization.LineChart(chart_GlobalEnergyForTodayByHour);
    var datadrawChartGlobalEnergyForTodayByHour = new google.visualization.DataTable();
    var drawChartGlobalEnergyForTodayByHourOptions = { width: 300, height: 240, legend: 'bottom', title: 'Power Used Today', 'smoothLine': true, 'titleX': 'Time', 'titleY': 'Kilowatts' }
    with (datadrawChartGlobalEnergyForTodayByHour) {
        addColumn('string', 'Time');
        addColumn('number', 'Power Used (Kilo Watts)');
        addRows(25);
        setValue(0, 0, 'KW/h');
        setValue(0, 1, 0);
    }

    //run first time with zero values to force draw.

    chartdrawChartGlobalEnergyForTodayByHour.draw(datadrawChartGlobalEnergyForTodayByHour, drawChartGlobalEnergyForTodayByHourOptions);
    datadrawChartGlobalEnergyGaugeTotalWatts.setValue(0, 1, 0);
    datadrawChartGlobalEnergyGaugeLast60Minutes.setValue(0, 1, 0);
    chartdrawChartGlobalEnergyGaugeTotalWatts.draw(datadrawChartGlobalEnergyGaugeTotalWatts, { greenFrom: 0, greenTo: 250, width: 300, height: 150, redFrom: 750, redTo: 1000, yellowFrom: 750, yellowTo: 1000, minorTicks: 10, min: 0, max: 1000 });
    chartdrawChartGlobalEnergyGaugeLast60Minutes.draw(datadrawChartGlobalEnergyGaugeLast60Minutes, { greenFrom: 0, greenTo: 250, width: 300, height: 150, redFrom: 750, redTo: 1000, yellowFrom: 750, yellowTo: 1000, minorTicks: 10, min: 0, max: 1000 });

    var functionList = ['getUnitsUsedInLast60', 'getWattsByScreenName', 'getTotalWattsForTodayByHour'];
    
//    var xml = talkPost_open(functionList);

    var oOptions = {
        method: 'post',
        parameters: 'functions=' + functionList.toString(),
        onSuccess: function(oXHR, oJSON) {
            var xml = oXHR.responseXML;
            if (xml == null)
                return null;

            var xmlWattsForTodayByHour = xml.getElementsByTagName("getTotalWattsForTodayByHour")
            var hourxml = xmlWattsForTodayByHour[0].getElementsByTagName("h");
            for (var i = 0; i <= 23; i++) {
                datadrawChartGlobalEnergyForTodayByHour.setValue(i, 0, (i < 10 ? '0' : '') + +i.toString() + ':00');
                datadrawChartGlobalEnergyForTodayByHour.setValue(i, 1, parseInt(hourxml[i].getAttribute("p") / 1000));
            }
            chartdrawChartGlobalEnergyForTodayByHour.draw(datadrawChartGlobalEnergyForTodayByHour, drawChartGlobalEnergyForTodayByHourOptions);


            /*units gauge*/
            var usage = xml.getElementsByTagName("getUnitsUsedInLast60");
            if (usage.length == 1) { //anything else and it must be dodge.
                var minPower = parseInt(usage[0].getAttribute("mp"));
                var maxPower = parseInt(usage[0].getAttribute("xp"));
                var units = parseFloat(usage[0].getAttribute("p"));
                var valGreenTo = minPower + (minPower * 0.4);
                var valRedFrom = maxPower - (maxPower * 0.2);
                var valYellowFrom = maxPower - (maxPower * 0.3);
                var valYellowTo = maxPower - (maxPower * 0.2);

                var globalChartGUageoptionsUnitsLast60Minutes = { greenFrom: minPower, greenTo: valGreenTo, width: 300, height: 150, redFrom: valRedFrom, redTo: maxPower, yellowFrom: valYellowFrom, yellowTo: valYellowTo, minorTicks: 10, min: minPower, max: maxPower };
                datadrawChartGlobalEnergyGaugeLast60Minutes.setValue(0, 1, units);
                chartdrawChartGlobalEnergyGaugeLast60Minutes.draw(datadrawChartGlobalEnergyGaugeLast60Minutes, globalChartGUageoptionsUnitsLast60Minutes);
            }


            var wattsxml = xml.getElementsByTagName("getWattsByScreenName");
            var userUsage = wattsxml[0].getElementsByTagName("u");

            var users = new Array();
            var minPower = 0;
            var maxPower = 1000;

            if (wattsxml.length == 1) {
                minPower = parseInt(wattsxml[0].getAttribute("mp"));
                maxPower = parseInt(wattsxml[0].getAttribute("xp"));
            };

            var totalWattsUsed = 0;
            var usersList = '';

            var arr = new Array();

            for (var i = 0; i <= userUsage.length - 1; i++) {
                totalWattsUsed += parseFloat(userUsage[i].getAttribute("p"));
                arr[i] = '<span title="' + userUsage[i].getAttribute("p") + ' Watts">' + userUsage[i].getAttribute("sn") + "</span>";
            }
            document.getElementById("showUsersOnLine").innerHTML = "Users Online (" + (userUsage.length).toString() + ") :&nbsp;" + arr.join(", ");
            var valGreenTo = (maxPower - minPower) * 0.25 + minPower;
            var valRedFrom = maxPower - (maxPower * 0.12);
            var valYellowFrom = maxPower - (maxPower * 0.25);
            var valYellowTo = maxPower - (maxPower * 0.12);


            var GlobalEnergyGaugeTotalWattsOptions = { greenFrom: minPower, greenTo: valGreenTo, width: 300, height: 150, redFrom: valRedFrom, redTo: maxPower, yellowFrom: valYellowFrom, yellowTo: valYellowTo, minorTicks: 10, min: minPower, max: maxPower };
            datadrawChartGlobalEnergyGaugeTotalWatts.setValue(0, 1, parseInt(totalWattsUsed));
            chartdrawChartGlobalEnergyGaugeTotalWatts.draw(datadrawChartGlobalEnergyGaugeTotalWatts, GlobalEnergyGaugeTotalWattsOptions);

        },
        onFailure: function(oXHR, oJSON) {
            //do nothing....

        }
    }

    if (_debug)
        return

    var oReq = new Ajax.Request(bu.GlobalPower, oOptions);
    setInterval(function() {
        var oReq = new Ajax.Request(bu.GlobalPower, oOptions);
    }
    , 2500);
}
