<div id="newMiniDashboard">
    <div class="miniDashPair">
        <button type="button" name="nodeCount" id="miniDashNodeCount" class="minidashbutton">--</button>
        <label for="nodeCount" id="miniDashNodeCountLabel">Node Count</label>
    </div>
    <div class="miniDashPair">
        <button type="button" name="avgLoad" id="miniDashAvgLoad" class="minidashbutton">--</button>
        <label for="avgLoad" id="miniDashAvgLoadLabel">Average Load</label>
    </div>
    <div class="miniDashPair">
        <button type="button" name="bandwidth" id="miniDashBandwidth" class="minidashbutton">--</button>
        <label for="bandwidth" id="miniDashBandwidthLabel">Bandwidth</label>
    </div>
    <div class="endDashPair">
    </div>
</div>

<div id="nodeCountDialog" class="miniDashModal" > 
<div id="nodeCountGraph" ></div>
</div>

<div id="bandwidthDialog" class="miniDashModal" > 
<div id="bandwidthGraph" ></div>
</div>

<div id="avgLoadDialog" class="miniDashModal" > 
<div id="avgLoadGraph" ></div>
</div>

<script>
/** If the analytics have already been set -- read them in on page load **/
if (typeof window != "undefined") {
    if (typeof window.pageAnalyticsData != "undefined") {
        updatePageAnalyticsData(window.pageAnalyticsData);
    }
}

var loadingDiv = '<div class="loading">Loading ...</div>';

$( "#nodeCountDialog" ).dialog({ title: "OpenCloud Node Count", modal: true, position: ['middle', 40], resizable: true, autoOpen: false, width: 527, height: 400});
$( "#miniDashNodeCount" ).click(function() {
    $( "#nodeCountGraph" ).html(loadingDiv);
    $( "#nodeCountDialog" ).dialog("open");
    var options = {"title": "Node Count", "vAxis": {"title": "Number of Nodes", "minValue": 0, "maxValue": 250}};
    console.log(window.pageAnalyticsUrl);
    renderChart(true,"#nodeCountDialog", "#nodeCountGraph", window.pageAnalyticsUrl, 0, 2, google.visualization.data.sum, options);
    });

$( "#bandwidthDialog" ).dialog({ title: "OpenCloud Bandwidth", modal: true, position: ['middle', 40], resizable: true, autoOpen: false, width: 527, height: 400});
$( "#miniDashBandwidth" ).click(function() {
    $("#bandwidthGraph").html(loadingDiv);
    $( "#bandwidthDialog" ).dialog("open");
    var options = {"title": "Total Bandwidth", "vAxis": {"title": "Total Bandwidth (Gbps)"}};
    renderChart(true,"#bandwidthDialog", "#bandwidthGraph", window.pageBandwidthUrl, 0, 1, agg_bandwidth, options);
    });

$( "#avgLoadDialog" ).dialog({ title: "OpenCloud Average Load", modal: true, position: ['middle', 40], resizable: true, autoOpen: false, width: 527, height: 400});
$( "#miniDashAvgLoad" ).click(function() {
    $("#avgLoadGraph").html(loadingDiv);
    $( "#avgLoadDialog" ).dialog("open");
    var options = {"title": "Average CPU Utilization", "vAxis": {"title": "CPU Utilization (%)"}};
    renderChart(true,"#avgLoadDialog", "#avgLoadGraph", window.pageAnalyticsUrl, 0, 1, google.visualization.data.sum, options);
    });

</script>

