adalog.entriesList = (function(js) {

var showButtonClass     = '-show-details';
var hideButtonClass     = '-hide-details';
var detailsContentClass = '-details-content';
var toggleDetailsClass  = '-toggle-details';

var init = function init() {
  js.docReady(function() {
    formatDetailsJSON();
    // initVisibilityButtons();
    initDetailsToggle();
  });
};

var formatDetailsJSON = function formatDetailsJSON() {
  var detailsElements = document.getElementsByClassName('-format-as-json');
  js.convertArrayLike(detailsElements).forEach(function(elt) {
    try {
      var contentsAsObj = JSON.parse(elt.textContent);
      elt.textContent   = JSON.stringify(contentsAsObj, null, 2);
    } catch(exc) {
      console.log("Failed to parse details of element that was expicitly flagged with '-format-as-json'.");
    }
  });
};

var initDetailsToggle = function initDetailsToggle() {
  var detailsToggles  = document.getElementsByClassName(toggleDetailsClass);
  var detailsRegions  = document.getElementsByClassName(detailsContentClass);

  js.convertArrayLike(detailsToggles).forEach(function(elt) {
    elt.addEventListener('click', function(evt) {
      var detailsContent = evt.currentTarget.getElementsByClassName(detailsContentClass)[0];
      js.eltDisplayToggle(detailsContent, 'block');
    })
  });

  js.convertArrayLike(detailsRegions).forEach(js.eltHide);
};

var initVisibilityButtons = function initVisibilityButtons() {
  var showButtons     = document.getElementsByClassName(showClass);
  var hideButtons     = document.getElementsByClassName(hideClass);
  var detailsRegions  = document.getElementsByClassName(detailsContentClass);
  var initiallyHidden = js.convertArrayLike(detailsRegions).concat(js.convertArrayLike(hideButtons));

  // Click events for show buttons show content, show a hide button and hide themselves.
  js.convertArrayLike(showButtons).forEach(function(elt) {
    elt.addEventListener('click', function(evt) {
      var hideSibling = js.findSiblingByClassName(evt.currentTarget, hideClass);
      var details     = js.findSiblingByClassName(evt.currentTarget, detailsContentClass);
      js.eltShowBlock(details);
      js.eltShowILBlock(hideSibling);
      js.eltHide(evt.currentTarget);
    });
  });

  // Click events for hide buttons hide content, show a show button and hide themselves.
  js.convertArrayLike(hideButtons).forEach(function(elt) {
    elt.addEventListener('click', function(evt) {
      var showSibling = js.findSiblingByClassName(evt.currentTarget, showClass);
      var details     = js.findSiblingByClassName(evt.currentTarget, detailsContentClass);
      js.eltHide(details);
      js.eltShowBlock(showSibling);
      js.eltHide(evt.currentTarget);
    });
  });

  initiallyHidden.forEach(js.eltHide);
};

return {
  'init': init
};

})(adalog.vanillaJS);