var http = getHTTPObject();

function updateStats() {
//  alert('attempting update');
  http.open("GET", "/statistics.xml", true);
  http.onreadystatechange = handleReply;
  http.send(null);
}   

function handleReply() {
  if (http.readyState == 4) {
    if (http.responseText != "") {
      loadStats(http.responseXML.documentElement);
    } else {
      //request failed
      clearStats();
    }
    //Set the timer for 5s time
    window.setTimeout("updateStats()", 5000);
  }
}

function loadStats(stats) {
  var system = stats.getElementsByTagName("system")[0];
  document.getElementById('systemuptime').innerHTML = system.getElementsByTagName("uptime")[0].childNodes[0].nodeValue;
  document.getElementById('systemstate').innerHTML = system.getElementsByTagName("state")[0].childNodes[0].nodeValue;
  document.getElementById('systemfeedstotal').innerHTML = system.getElementsByTagName("totalfeeds")[0].childNodes[0].nodeValue;
  document.getElementById('systemfeedsrunning').innerHTML = system.getElementsByTagName("runningfeeds")[0].childNodes[0].nodeValue;

  var live = stats.getElementsByTagName("live")[0];
  document.getElementById('livefeedstotal').innerHTML = live.getElementsByTagName("total")[0].childNodes[0].nodeValue;
  document.getElementById('liveimages').innerHTML = live.getElementsByTagName("images")[0].childNodes[0].nodeValue;
  document.getElementById('livebandwidth').innerHTML = live.getElementsByTagName("bandwidth")[0].childNodes[0].nodeValue;

  var livesessions = live.getElementsByTagName("session")
  document.getElementById('livefeedsrunning').innerHTML = livesessions.length;

  var livetable = document.getElementById('livelist');
  var index;
  for (index = 0; index < livesessions.length; index++) {
    var livesession = livesessions[index];

    if (index + 1 < livetable.rows.length) {
      var liverow = livetable.rows[index + 1];
    } else {
      //Add the row to the table
      var liverow = livetable.insertRow(index + 1);
      liverow.insertCell(0).className="statRow";
      liverow.insertCell(1).className="statRow";
      liverow.insertCell(2).className="statRow";
    }

    liverow.cells[0].innerHTML=livesession.getElementsByTagName("address")[0].childNodes[0].nodeValue + " ";
    liverow.cells[1].innerHTML=livesession.getElementsByTagName("feeds")[0].childNodes[0].nodeValue + " ";
    liverow.cells[2].innerHTML=livesession.getElementsByTagName("duration")[0].childNodes[0].nodeValue;
  }

  //Remove all the extra rows
  for (index++; index < livetable.rows.length;) {
    livetable.deleteRow(index);
  }

  var playback = stats.getElementsByTagName("playback")[0];
  document.getElementById('playbacktotal').innerHTML = playback.getElementsByTagName("total")[0].childNodes[0].nodeValue;

  var playbacksessions = playback.getElementsByTagName("session")
  document.getElementById('playbackrunning').innerHTML = playbacksessions.length;

  var playbacktable = document.getElementById('playbacklist');
  for (index = 0; index < playbacksessions.length; index++) {
    var playbacksession = playbacksessions[index];

    if (index + 1 < playbacktable.rows.length) {
      var playbackrow = playbacktable.rows[index + 1];
    } else {
      //Add the row to the table
      var playbackrow = playbacktable.insertRow(index + 1);
      playbackrow.insertCell(0).className="statRow";
      playbackrow.insertCell(1).className="statRow";
      playbackrow.insertCell(2).className="statRow";
      playbackrow.insertCell(3).className="statRow";
    }

    //Check if it is worth showing the idle time
    var IdleTime = playbacksession.getElementsByTagName("idle")[0].childNodes[0].nodeValue;
    //Feel free to rewrite this a better way
    var ShowIdle = (!(IdleTime == "0 seconds" || IdleTime == "1 second" || IdleTime == "2 seconds" || IdleTime == "3 seconds" || IdleTime == "4 seconds" || IdleTime == "5 seconds" || IdleTime == "6 seconds" || IdleTime == "7 seconds" || IdleTime == "8 seconds" || IdleTime == "9 seconds" || IdleTime == "10 seconds"));

    playbackrow.cells[0].innerHTML=playbacksession.getElementsByTagName("address")[0].childNodes[0].nodeValue + " ";
    playbackrow.cells[1].innerHTML=playbacksession.getElementsByTagName("feeds")[0].childNodes[0].nodeValue + " ";
    playbackrow.cells[2].innerHTML=playbacksession.getElementsByTagName("date")[0].childNodes[0].nodeValue + (ShowIdle ? "<br><div style=\"float: right;\">Idle for:</span>" : "");
    playbackrow.cells[3].innerHTML=playbacksession.getElementsByTagName("duration")[0].childNodes[0].nodeValue + (ShowIdle ? "<br>" +
                                   playbacksession.getElementsByTagName("idle")[0].childNodes[0].nodeValue : "");
  }

  //Remove all the extra rows
  for (index++; index < playbacktable.rows.length;) {
    playbacktable.deleteRow(index);
  }
}

function clearStats() {
  document.getElementById('systemuptime').innerHTML = "";
  document.getElementById('systemstate').innerHTML = "Unavailable"
  document.getElementById('systemfeedstotal').innerHTML = "0";
  document.getElementById('systemfeedsrunning').innerHTML = "0";

  document.getElementById('livebandwidth').innerHTML = "0 Bytes/s";

  document.getElementById('livefeedsrunning').innerHTML = "0";

  var livetable = document.getElementById('livelist');
  var index;
  //Remove all the rows
  for (index = 1; index < livetable.rows.length;) {
    livetable.deleteRow(index);
  }

  document.getElementById('playbackrunning').innerHTML = "0";

  var playbacktable = document.getElementById('playbacklist');
  //Remove all the extra rows
  for (index = 1; index < playbacktable.rows.length;) {
    playbacktable.deleteRow(index);
  }
}

function onLoad() {
  updateStats();
}
