book = "images\/book.gif";
folderOpen = "images\/folderopen.gif";
folderClosed = "images\/folderclosed.gif";

var toc;
var width = 1200;
var height = 22;
var indent = 10;
var bgColor = "";
var tocCurrentItem = null;
var tocCurrentLocation; //reference to current menu item
var tocCurrentOffset = 0; // top pixel within the frame for the current menu item
var tocTotalHeight;

var levelValue = new Array();
levelOffset = [0, 2, 5, 8, 11, 14];
levelLength = [2, 3, 3, 3, 3, 3];
var levelTitles = new Array();

function buildList(id) {
  if (this.items.length > 0)
    return;

  if (this.listArray) {
    for (var i = 0; i < this.listArray.length; i += 3) {
      if (this.listArray[i + 2] == null) {
        this.addItem(this.listArray[i], this.listArray[i + 1]);
      } else {
        createList(this, this.listArray[i], this.listArray[i + 1], this.listArray[i + 2], false);
      }
    }
  }
}

function createList(parent, title, doc, arr, visible) {
  var aList = new List(visible, width, height, bgColor, folderClosed, folderOpen, arr);
  aList.onexpand = buildList;
  aList.postexpand = setListFocus;
  parent.addList(aList, title, doc);
  return aList;
}

function init() {
  toc = new List(true, width, height, bgColor, book, book);
  var aList;
  for (var i = 0; i < parent.arrtop.length; i += 3) {
    aList = createList(toc, parent.arrtop[i], parent.arrtop[i+1], parent.arrtop[i+2], false);
  }

  toc.build(2,2);

  for (var i = 0; i < toc.lists.length; i ++) {
    xbcl_expand(toc.lists[i].id, toc.docs[i]);
  }

  setTocFocus(toc.items[0]);
}

function redo() {
  document.location.reload();
}

function setListFocus(id) {
  if (document.lists[id]) {
    var listObj = document.lists[id].parentList;
    for (var i = 0; i < listObj.types.length; i++) {
      if (listObj.types[i] == 'list') {
        if (listObj.lists[i].id == id) {
          setTocFocus(listObj.items[i]);
          break;
        }
      }
    }
  } else {
    setTocFocus(id);
  }
}

function setTocFocus(item) {
  var str;
  var newstr;
  var styleObj;
  if (tocCurrentItem) {
    styleObj = new xbStyle(tocCurrentItem);
    styleObj.setBackgroundColor('silver');
  }

  styleObj = new xbStyle(item);
  styleObj.setBackgroundColor('aqua');

  tocCurrentItem = item;
}

function checkList(listObj, level) {
  var comparison;
  var found = false;
  for (var i = 0; i < listObj.types.length; i++) {
    if (listObj.types[i] == 'list') {
      comparison = listObj.docs[i].substr(levelOffset[level], levelLength[level]);
      if (levelValue[level] == comparison) {
        if (!listObj.lists[i].visible) {
          xbcl_expand(listObj.lists[i].id, listObj.docs[i]);
        }

        found = checkList(listObj.lists[i], level + 1);
      }
    }

    if (found || (listObj.docs[i] == tocCurrentLocation)) {
      return true;
    }
  }
}

function findTop(listObj, doc) {
  var found = false;

  for (var i = 0; !found && (i < listObj.types.length); i++) {
    if (listObj.docs[i] == doc) {
      setTocFocus(listObj.items[i]);
      found = true;
    } else {
      tocCurrentOffset += 22;
      if ((listObj.types[i] == 'list') && listObj.lists[i].visible)
        found = findTop(listObj.lists[i], doc);
    }
  }
  return found;
}

function syncToc(curDoc) {
  if (tocCurrentLocation == curDoc) {
    return;
  }

  tocCurrentLocation = curDoc;

  for (var i = 0; i < 6; i++) {
    levelValue[i] = curDoc.substr(levelOffset[i], levelLength[i]);
  }

  for (var i = toc.types.length - 1; i >= 0; i--) {
    if (toc.types[i] == 'list') {
      if (levelValue[0] >= toc.docs[i].substr(0,2)) {
        if (!toc.lists[i].visible) {
          xbcl_expand(toc.lists[i].id, toc.docs[i]);
        }
        checkList(toc.lists[i], 0);
      }
    }
  }

  tocCurrentOffset = 0;
  findTop(toc, curDoc);
  var height = 200;
  if (window.innerHeight)
    height = window.innerHeight;
  else if (document.body.clientHeight)
    height = document.body.clientHeight;

//  alert('tocCurrentOffset: ' + tocCurrentOffset + ', height: ' + height);
  if (tocCurrentOffset < height - 22) {
    // Do nothing
  } else if (tocCurrentOffset >= tocTotalHeight - height - 22) {
    window.scrollTo(0, tocTotalHeight - height);
  } else {
    window.scrollTo(0, tocCurrentOffset - (height/2));
  }
}

var foundObj;

function isList(doc) {
  var yes = false;
  var done = false;
  var lev1Obj, lev2Obj, lev3Obj, lev4Obj, lev5Obj, lev6Obj;

  foundObj = null;

  for (var i = 0; !done && (i < toc.types.length); i++) {
    if (toc.docs[i] == doc) {
      done = true;
      if (toc.types[i] == 'list') {
        yes = true;
        foundObj = toc.lists[i];
      }
    } else if (toc.types[i] == 'list') {
      lev1Obj = toc.lists[i];
      for (var j = 0; !done && (j < lev1Obj.types.length); j++) {
        if (lev1Obj.docs[j] == doc) {
          done = true;
          if (lev1Obj.types[j] == 'list') {
            yes = true;
            foundObj = lev1Obj.lists[j];
          }
        } else if (lev1Obj.types[j] == 'list') {
          lev2Obj = lev1Obj.lists[j];
          for (var k = 0; !done && (k < lev2Obj.types.length); k++) {
            if (lev2Obj.docs[k] == doc) {
              done = true;
              if (lev2Obj.types[k] == 'list') {
                yes = true;
                foundObj = lev2Obj.lists[k];
              }
            } else if (lev2Obj.types[k] == 'list') {
              lev3Obj = lev2Obj.lists[k];
              for (var l = 0; !done && (l < lev3Obj.types.length); l++) {
               if (lev3Obj.docs[l] == doc) {
                  done = true;
                  if (lev3Obj.types[l] == 'list') {
                    yes = true;
                    foundObj = lev3Obj.lists[l];
                  }
                } else if (lev3Obj.types[l] == 'list') {
                  lev4Obj = lev3Obj.lists[l];
                  for (var m = 0; !done && (m < lev4Obj.types.length); m++) {
                    if (lev4Obj.docs[m] == doc) {
                      done = true;
                      if (lev4Obj.types[m] == 'list') {
                        yes = true;
                        foundObj = lev4Obj.lists[m];
                      }
                    } else if (lev4Obj.types[m] == 'list') {
                      lev5Obj = lev4Obj.lists[m];
                      for (var n = 0; !done && (n < lev5Obj.types.length); n++) {
                        if (lev5Obj.docs[n] == doc) {
                          done = true;
                          if (lev5Obj.types[n] == 'list') {
                            yes = true;
                            listObj = lev5Obj.lists[n];
                          }
                        } else if (lev5Obj.types[n] == 'list') {
                          lev6Obj = lev5Obj.lists[n];
                          for (var o = 0; !done && (o < lev6Obj.types.length); o++) {
                            if (lev6Obj.docs[o] == doc) {
                              done = true;
                              if (lev6Obj.types[o] == 'list') {
                                yes = true;
                                listObj = lev6Obj.lists[o];
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  return yes;
}

// list is an array of document names
// list[0] is the document at the top of the list.
// For example, if we want the list of documents in Title 1, list[0] would
// contain the filename for Title 1 (e.g. - 03000000000000000.htm)
// and when this function is completed list[1] ... list[n] would contain every
// filename starting with 03....htm
function getDocList(list) {
  var listObj;
  var n;
  var sub1, sub2, sub3, sub4, sub5, sub6;
  if (isList(list[0])) {
    n = 1;
    if (foundObj) {
      for (var i = 0; i < foundObj.types.length; i++) {
        list[n++] = foundObj.docs[i];
        if (foundObj.types[i] == 'list') {
          if (!foundObj.lists[i].visible)
            xbcl_expand(foundObj.lists[i].id, foundObj.docs[i]);

          sub1 = foundObj.lists[i];
          for (var j = 0; j < sub1.types.length; j++) {
            list[n++] = sub1.docs[j];
            if (sub1.types[j] == 'list') {
              if (!sub1.lists[j].visible)
                xbcl_expand(sub1.lists[j].id, sub1.docs[j]);

              sub2 = sub1.lists[j];
              for (var k = 0; k < sub2.types.length; k++) {
                list[n++] = sub2.docs[k];
                if (sub2.types[k] == 'list') {
                  if (!sub2.lists[k].visible)
                    xbcl_expand(sub2.lists[k].id, sub2.docs[k]);

                  sub3 = sub2.lists[k];
                  for (var l = 0; l < sub3.types.length; l++) {
                    list[n++] = sub3.docs[l];
                    if (sub3.types[l] == 'list') {
                      if (!sub3.lists[l].visible)
                        xbcl_expand(sub3.lists[l].id, sub3.docs[l]);

                      sub4 = sub3.lists[l];
                      for (var m = 0; m < sub4.types.length; m++) {
                        list[n++] = sub4.docs[m];
                        if (sub4.types[m] == 'list') {
                          if (!sub4.lists[m].visible)
                            xbcl_expand(sub4.lists[m].id, sub4.docs[m]);

                          sub5 = sub4.lists[m];
                          for (var n = 0; n < sub5.types.length; n++) {
                            list[n++] = sub5.docs[n];
                            if (sub5.types[n] == 'list') {
                              if (!sub5.lists[n].visible)
                                xbcl_expand(sub5.lists[n].id, sub5.docs[n]);

                              sub6 = sub5.lists[n];
                              for (var o = 0; o < sub6.types.length; o++) {
                                list[n++] = sub6.docs[o];
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    } else {
      alert('listObj is null');
    }
  }
}

