function getElementsByClass(root, className, tag) {
  if (tag == null) {
    tag = '*';
  }
  var elements = root.getElementsByTagName(tag);
  var pattern = new RegExp("(^|\\s)" + className + "(\\s|$)");

  var found = new Array();
  for (var i = 0; i < elements.length; i++) {
    if (pattern.test(elements[i].className)) {
      found[found.length] = elements[i];
    }
  }
  return found;
}

function toggle_additionInfoBox(additionalInfoBoxId) {
  var additionalInfoBox = document.getElementById(additionalInfoBoxId);

  // Expect 1
  var contents = getElementsByClass(
    additionalInfoBox,
    'additionalinfoboxcontent'
  );
  var contents = contents.concat(
    getElementsByClass(
      additionalInfoBox,
      'additionalinfoboxcontent_nopad'
    )
  );

  var expandButtons = getElementsByClass(
    additionalInfoBox,
    'expand-btn'
  );
  var contractButtons = getElementsByClass(
    additionalInfoBox,
    'contract-btn'
  );

  var toggleLabels = getElementsByClass(
    additionalInfoBox,
    'toggle-label'
  );

  if (expandButtons.length == 0) {
    for (var i = 0; i < contents.length; i++) {
      Effect.BlindUp(contents[i].id);
    }
    for (var i = 0; i < contractButtons.length; i++) {
      contractButtons[i].className = "expand-btn";
    }
    for (var i = 0; i < toggleLabels.length; i++) {
      toggleLabels[i].innerHTML = "Open";
    }
  }
  else {
    for (var i = 0; i < contents.length; i++) {
      Effect.BlindDown(contents[i].id);
    }
    for (var i = 0; i < expandButtons.length; i++) {
      expandButtons[i].className = "contract-btn";
    }
    for (var i = 0; i < toggleLabels.length; i++) {
      toggleLabels[i].innerHTML = "Close";
    }
  }
}
