text: // Copyright 2014 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  /** Information about a particular status page. */
  function StatusPageInfo(statusPageName, statusPageUrl) {
    this.date = '';
    this.inFlight = 0;
    this.jsonUrl = statusPageUrl + 'current?format=json';
    this.message = '';
    this.name = statusPageName;
    this.state = '';
    this.url = statusPageUrl;
  }
  
  /** Send and parse an asynchronous request to get a repo status JSON. */
  StatusPageInfo.prototype.requestJson = function() {
    if (this.inFlight) return;
  
    this.inFlight++;
    gNumRequestsInFlight++;
  
    var statusPageInfo = this;
    var request = new XMLHttpRequest();
    request.open('GET', this.jsonUrl, true);
    request.onreadystatechange = function() {
      if (request.readyState == 4 && request.status == 200) {
        statusPageInfo.inFlight--;
        gNumRequestsInFlight--;
  
        var statusPageJson = JSON.parse(request.responseText);
        statusPageInfo.date = statusPageJson.date;
        statusPageInfo.message = statusPageJson.message;
        statusPageInfo.state = statusPageJson.general_state;
      }
    };
    request.send(null);
  };
  
  /** Creates HTML displaying the status. */
  StatusPageInfo.prototype.createHtml = function() {
    var linkElement = document.createElement('a');
    linkElement.href = this.url;
    linkElement.innerHTML = this.name;
  
    var statusElement = document.createElement('li');
    statusElement.appendChild(linkElement);
  
    var dateElement = document.createElement('li');
    dateElement.innerHTML = this.date;
  
    var messageElement = document.createElement('li');
    messageElement.innerHTML = this.message;
  
    var boxElement = document.createElement('ul');
    boxElement.className = 'box ' + this.state;
    boxElement.appendChild(statusElement);
    boxElement.appendChild(dateElement);
    boxElement.appendChild(messageElement);
    return boxElement;
  };
  