// Copyright (c) 2012 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.

var nacl = nacl || {};

(function() {
  /**
   * Takes the |moduleListData| input argument which represents data about
   * the currently available modules and populates the html jstemplate
   * with that data. It expects an object structure like the above.
   * @param {Object} moduleListData Information about available modules
   */
  function renderTemplate(moduleListData) {
    // Process the template.
    var input = new JsEvalContext(moduleListData);
    var output = $('naclInfoTemplate');
    jstProcess(input, output);
  };

  /**
   * Asks the C++ NaClUIDOMHandler to get details about the NaCl and return
   * the data in returnNaClInfo() (below).
   */
  function requestNaClInfo() {
    chrome.send('requestNaClInfo');
  };

  /**
   * Called by the WebUI to re-populate the page with data representing the
   * current state of NaCl.
   * @param {Object} moduleListData Information about available modules
   */
  nacl.returnNaClInfo = function(moduleListData) {
    $('loading-message').hidden = 'hidden';
    $('body-container').hidden = '';
    renderTemplate(moduleListData);
  };

  // Get data and have it displayed upon loading.
  document.addEventListener('DOMContentLoaded', requestNaClInfo);
})();
