var minus = new Image(11, 11);
minus.src = "graphics/minus.gif";

/**
 *  If dirActiveID cookie exists, retrieve and assign to var dirActiveID.
 */
var dirActiveIDs = new Array();
var cookies = document.cookie.split(";");
var cookiePieces;

for (var i = 0; i < cookies.length; i++) {
  cookiePieces = cookies[i].split("=");
  if (cookiePieces[0].trim() == "dirActiveID" && cookiePieces[1]) {
    dirActiveIDs = decodeURIComponent(cookiePieces[1]).split("-");
  }
}

/**
 *  Toggles the display of element.id; changes the associated plus or minus
 *  icon.
 *
 *  @param  string id
 *  @type   void
 */
function toggle(id)
{
  var element = document.getElementById(id);
  var whichImg = document.getElementById("img_" + id);

  if(element.style.display == "none") {
    element.style.display = "block";
    whichImg.setAttribute("src", "graphics/minus.gif");
    whichImg.setAttribute("alt", "Shrink list");
    whichImg.setAttribute("title", "Shrink list");

    dirActiveIDs.push(id);
  }
  else {
    element.style.display = "none";
    whichImg.setAttribute("src", "graphics/plus.gif");
    whichImg.setAttribute("alt", "Expand list");
    whichImg.setAttribute("title", "Expand list");

    for (var i = 0; i < dirActiveIDs.length; i++) {
      if (dirActiveIDs[i] == id) {
        dirActiveIDs[i] = 0; // mark element for deletion
      }
    }
  }
  dirActiveIDs.sort();  // put marked element up front

  for (var i = 0; i < dirActiveIDs.length; i++) { // delete marked element
    if (!dirActiveIDs[i]) {
      dirActiveIDs.shift();
    }
  }

  if (dirActiveIDs.length) {
    document.cookie = "dirActiveID=" + encodeURIComponent(dirActiveIDs.join("-"));
  }
  else {
    document.cookie = "dirActiveID=";
  }

  colAdjust();
}

function expandAll()
{
  var uls = document.getElementsByTagName("ul");
  var divs = document.getElementsByTagName("div");
  var imgs = document.getElementsByTagName("img");

  var isThere = false;

  for (var i = 0; i < divs.length; i++) {
    if (divs[i].className == "toc") {
      divs[i].style.display = "block";

      for (var j = 0; (j < dirActiveIDs.length) && !isThere; j++) {
        if (dirActiveIDs[j] == divs[i].id) {
          isThere = true;
        }
      }
      if (!isThere) {
        dirActiveIDs.push(divs[i].id);
      }
    }
  }

  isThere = false;

  for (var i = 0; i < uls.length; i++) {
    if (uls[i].className == "toc") {
      uls[i].style.display = "block";

      for (var j = 0; (j < dirActiveIDs.length) && !isThere; j++) {
        if (dirActiveIDs[j] == uls[i].id) {
          isThere = true;
        }
      }
      if (!isThere) {
        dirActiveIDs.push(uls[i].id);
      }
    }
  }

  for (i = 0; i < imgs.length; i++) {
    if (imgs[i].getAttribute("src").indexOf("graphics/plus.gif") !=
        -1) {
      imgs[i].setAttribute("src", "graphics/minus.gif");
      imgs[i].setAttribute("alt", "Shrink list");
      imgs[i].setAttribute("title", "Shrink list");
    }
  }

  document.cookie = "dirActiveID=" + encodeURIComponent(dirActiveIDs.join("-"));

  colAdjust();

  return false;
}

function shrinkAll()
{
  var uls = document.getElementsByTagName("ul");
  var divs = document.getElementsByTagName("div");
  var imgs = document.getElementsByTagName("img");

  for (var i = 0; i < uls.length; i++) {
    if (uls[i].className == "toc") {
      uls[i].style.display = "none";

      for (var j = 0; j < dirActiveIDs.length; j++) {
        if (dirActiveIDs[j] == uls[i].id) {
          dirActiveIDs[j] = 0;  // mark element for deletion
        }
      }
    }
  }

  for (var i = 0; i < divs.length; i++) {
    if (divs[i].className == "toc") {
      divs[i].style.display = "none";

      for (var j = 0; j < dirActiveIDs.length; j++) {
        if (dirActiveIDs[j] == divs[i].id) {
          dirActiveIDs[j] = 0;  // mark element for deletion
        }
      }
    }
  }

  for (i = 0; i < imgs.length; i++) {
    if (imgs[i].getAttribute("src").indexOf("graphics/minus.gif") !=
        -1) {
      imgs[i].setAttribute("src", "graphics/plus.gif");
      imgs[i].setAttribute("alt", "Expand list");
      imgs[i].setAttribute("title", "Expand list");
    }
  }
  dirActiveIDs.sort();  // put marked elements up front

  for (var i = 0; i < dirActiveIDs.length; i++) { // delete marked elements
    if (dirActiveIDs[i] == 0) {
      dirActiveIDs.shift();
      i--;
    }
  }

  if (dirActiveIDs.length) {
    document.cookie = "dirActiveID=" + encodeURIComponent(dirActiveIDs.join("-"));
  }
  else {
    document.cookie = "dirActiveID=";
  }

  colAdjust();

  return false;
}