
var isNN = (navigator.appName.toLowerCase().indexOf("netscape") != -1);

var tocFrame = null;
//var tocFrameName = "toc";
//var contentFrameName = "content";

//var backgroundColor = "#ffffff";
//var backgroundImage = "";
//var fontSize = 1;
//var fontColor = "#000000";
//var fontFace = '"arial,verdana,times"';
//var fontStyleOpen = "<b>";
//var fontStyleClose = "</b>";

var imageString1 = "<img align='middle' src='";
var imageString2 = "' width=9 height=9 border=0>";

var imageFolderOpen = "../images/folderOpen.gif";
var imageFolderClose = "../images/folderClose.gif";
var imageLinkSpot = "../images/linkSpot.gif";
var imageCommandSpot = "../images/commandSpot.gif";
var imageSpace = "../images/spacer.gif";

var flagFolder = "F";
var flagFolderLink = "X";
var flagLink = "L";
var flagCommand = "C";

var flagIFolder = "iF";
var flagIFolderLink = "iX";
var flagILink = "iL";
var flagICommand = "iC";

var folderDepth = 0;
var nodeCount = -1;
var folderNode = new Array();
var folderCount = -1;
var folderTree = new Array();
var folderSwitch = new Array();

var imageCount = 0;

function folderNodeUnit() {
  this.type = "";
  this.name = "";
  this.description = "";
  this.url = "";
  this.command = "";
  this.folder = -1;
  this.imageOff = "";
  this.imageOn = "";
  this.imageWidth = 0;
  this.imageHeight = 0;
  this.linkTarget = "";
}

function readFolder(folder) {
  var folderLength = folder.length
  var subFolder = null;
  var thisFolder = ++folderCount;

  folderTree[thisFolder] = new Array();
  folderSwitch[thisFolder] = false;

  for (var i = 0; i < folderLength; i++) {
    folderTree[thisFolder][i] = ++nodeCount;
    folderNode[nodeCount] = new folderNodeUnit();
    folderNode[nodeCount].type = folder[i][0];
    folderNode[nodeCount].name = folder[i][1];
    folderNode[nodeCount].description = folder[i][2];

    if (folderNode[nodeCount].type == flagIFolderLink) {
      folderNode[nodeCount].imageOff = folder[i][5];
      folderNode[nodeCount].imageOn = folder[i][6];
      folderNode[nodeCount].imageWidth = folder[i][7];
      folderNode[nodeCount].imageHeight = folder[i][8];
      folderNode[nodeCount].linkTarget = folder[i][9];

      folderNode[nodeCount].url = folder[i][4];
      folderNode[nodeCount].folder = folderCount + 1;
      subFolder = eval(folder[i][3]);
      readFolder(subFolder);
    }
    else if (folderNode[nodeCount].type == flagFolderLink) {
      folderNode[nodeCount].url = folder[i][4];
      folderNode[nodeCount].linkTarget = folder[i][5];
      folderNode[nodeCount].folder = folderCount + 1;
      subFolder = eval(folder[i][3]);
      readFolder(subFolder);
    }
    else if (folderNode[nodeCount].type == flagIFolder) {
      folderNode[nodeCount].imageOff = folder[i][4];
      folderNode[nodeCount].imageOn = folder[i][5];
      folderNode[nodeCount].imageWidth = folder[i][6];
      folderNode[nodeCount].imageHeight = folder[i][7];

      folderNode[nodeCount].folder = folderCount + 1;
      subFolder = eval(folder[i][3]);
      readFolder(subFolder);
    }
    else if (folderNode[nodeCount].type == flagFolder) {
      folderNode[nodeCount].folder = folderCount + 1;
      subFolder = eval(folder[i][3]);
      readFolder(subFolder);
    }
    else if (folderNode[nodeCount].type == flagILink) {
      folderNode[nodeCount].imageOff = folder[i][4];
      folderNode[nodeCount].imageOn = folder[i][5];
      folderNode[nodeCount].imageWidth = folder[i][6];
      folderNode[nodeCount].imageHeight = folder[i][7];
      folderNode[nodeCount].linkTarget = folder[i][8];
      
      folderNode[nodeCount].url = folder[i][3];
    }
    else if (folderNode[nodeCount].type == flagLink) {
      folderNode[nodeCount].url = folder[i][3];
      folderNode[nodeCount].linkTarget = folder[i][4];
    }
    else if (folderNode[nodeCount].type == flagICommand) {
      folderNode[nodeCount].imageOff = folder[i][4];
      folderNode[nodeCount].imageOn = folder[i][5];
      folderNode[nodeCount].imageWidth = folder[i][6];
      folderNode[nodeCount].imageHeight = folder[i][7];

      folderNode[nodeCount].command = folder[i][3];
    }
    else if (folderNode[nodeCount].type == flagCommand) {
      folderNode[nodeCount].command = folder[i][3];
    }
    else
      alert("Read Folder Error");
  }
}

function clickFolder(nodeIndex) {
  var theNode = folderNode[nodeIndex];
  if (theNode.type == flagFolder || theNode.type == flagFolderLink || theNode.type == flagIFolder || theNode.type == flagIFolderLink) {
    folderSwitch[theNode.folder] = !folderSwitch[theNode.folder];
    setTimeout("showFolder()",0) // if call showFolder() directly, the folder link won't be activated
  }
  else
    alert("Folder Error");
}

function clickCommand(nodeIndex) {
  var theNode = folderNode[nodeIndex];
  if (theNode.type == flagCommand || theNode.type == flagICommand)
    eval(theNode.command)
  else
    alert("Command Error");
}

function showNode(folderNo) {
  var folderLength = folderTree[folderNo].length;
  var nodeIndex = 0;
  var mouseHoverString = "";
  var mouseHoverString1 = ' onMouseOver="window.status=' + "'";
  var mouseHoverString2 = "'" + '; return true;" onMouseOut="window.status=window.defaultStatus; return true;">';
  var textString1 = fontStyleOpen + '<font face="' + fontFace + '" size="' + fontSize + '"><a href="';
  var textString2 = '</a></font>' + fontStyleClose;
  var imgString1 = '<a href="';
  var imgString2 = '</a>';
  var linkString1 = "", linkString2 = "";

  for (var i = 0; i < folderLength; i++) {
    nodeIndex = folderTree[folderNo][i];

    var theNode = folderNode[nodeIndex];
    var nodeType = theNode.type;

    if (nodeType == flagIFolder || nodeType == flagIFolderLink || nodeType == flagILink || nodeType == flagICommand) {
      var imageID = "img" + (imageCount++) + "";
      theNode.name = "<img align='absmiddle' name='"+imageID+"' src='"+theNode.imageOff+"' width='"+theNode.imageWidth+"' height='"+theNode.imageHeight+"' border='0'>";
      mouseHoverString = ' onMouseOver="document.images.'+imageID+'.src='+"'"+theNode.imageOn+"'"+'; window.status='+"'"+theNode.description+"'"+'; return true;" onMouseOut="document.images.'+imageID+'.src='+"'"+theNode.imageOff+"'"+'; window.status=window.defaultStatus; return true;">';
      linkString1 = imgString1; linkString2 = imgString2;
    }
    else {
      mouseHoverString = mouseHoverString1 + theNode.description + mouseHoverString2;
      linkString1 = textString1; linkString2 = textString2;
    }

    tocFrame.document.write("<tr align=left valign=middle><td><nobr>");

    for (var j = 0; j < folderDepth; j++)
      tocFrame.document.write(imageString1 + imageSpace + imageString2 + imageString1 + imageSpace + imageString2);

    tocFrame.document.write('<a href="');
    if (nodeType == flagFolder || nodeType == flagFolderLink || nodeType == flagIFolder || nodeType == flagIFolderLink)
      tocFrame.document.write('javascript:clickFolder(' + nodeIndex + ')"')
    else if (nodeType == flagLink || nodeType == flagILink)
      tocFrame.document.write(theNode.url + '" target="' + theNode.linkTarget + '"')
    else
      tocFrame.document.write('javascript:clickCommand(' + nodeIndex + ')"')
    tocFrame.document.write(mouseHoverString);

    tocFrame.document.write(imageString1);
    if (nodeType == flagFolderLink || nodeType == flagFolder || nodeType == flagIFolderLink || nodeType == flagIFolder) {
      if (folderSwitch[theNode.folder])
        tocFrame.document.write(imageFolderOpen)
      else
        tocFrame.document.write(imageFolderClose);
    }
    else if (nodeType == flagLink)
      tocFrame.document.write(imageLinkSpot)
    else
      tocFrame.document.write(imageCommandSpot);
    tocFrame.document.write(imageString2);

    tocFrame.document.write("</a>");
    tocFrame.document.write(imageString1 + imageSpace + imageString2);

    tocFrame.document.write(linkString1);
    if (nodeType == flagFolder || nodeType == flagIFolder)
      tocFrame.document.write('javascript:clickFolder(' + nodeIndex + ')"')
    else if (nodeType == flagFolderLink || nodeType == flagIFolderLink)
      //tocFrame.document.write(theNode.url + '" target="' + theNode.linkTarget + '"')
      tocFrame.document.write(theNode.url + '" target="' + theNode.linkTarget + '" onclick="clickFolder(' + nodeIndex + ')"')
    else if (nodeType == flagLink || nodeType == flagILink)
      tocFrame.document.write(theNode.url + '" target="' + theNode.linkTarget + '"')
    else
      tocFrame.document.write('javascript:clickCommand(' + nodeIndex + ')"')
    tocFrame.document.write(mouseHoverString);
    tocFrame.document.write(theNode.name + linkString2);
    tocFrame.document.writeln("</nobr></td></tr>");

    if (nodeType == flagFolderLink || nodeType == flagFolder || nodeType == flagIFolderLink || nodeType == flagIFolder)
      if (folderSwitch[theNode.folder]) {
        folderDepth++;
        showNode(theNode.folder);
        folderDepth--;
      }
  }
}

function showFolder() {
  var commentOpen = "<!" + "--";
  var commentClose = "//-" + "->";

  with (tocFrame.document) {
    open("text/html");
    writeln("<html>");
    writeln("<head>");
    writeln("<script language='javascript'>");
    writeln(commentOpen);
    writeln("function clickCommand(nodeIndex) { parent.clickCommand(nodeIndex); }")
    writeln("function clickFolder(nodeIndex) { parent.clickFolder(nodeIndex); }")
    writeln(commentClose);
    writeln("</script>");
    writeln("<style type='text/css'>");
    writeln(commentOpen);
    writeln("a {text-decoration:none}")
    writeln("a:hover {font-style: italic; text-decoration:none}")
    writeln(commentClose);
    writeln("</style>");
    writeln("</head>");
    writeln("<body" + ((backgroundColor!="")?(" bgcolor=" + backgroundColor):"") + ((backgroundImage!="")?(" background=" + backgroundImage):"") + ((fontColor!="")?(" link=" + fontColor):"") + ((fontColorActive!="")?(" alink=" + fontColorActive):"") + ((fontColor!="")?(" vlink=" + fontColor):"") + ">");
//  writeln("<table align=left cellpadding=5 cellspacing=0 border=0><tr><td>");
    writeln("<table align=left cellpadding=0 cellspacing=0 border=0>");
  }

  showNode(0);

  with (tocFrame.document) {
    writeln("</table>");
//    writeln("</td></tr></table>");
    writeln("</body>");
    writeln("</html>");
    close();
  }
}

function setFrames() {
  tocFrame = eval("window.frames." + tocFrameName);
}

function buildFolder(folderRoot) {
  setFrames();
  readFolder(folderRoot);
  showFolder();
}

function openAll() {
  for (var i = 0; i <= folderCount; i++)
    folderSwitch[i] = true;
  showFolder();
}

function closeAll() {
  for (var i = 0; i <= folderCount; i++)
    folderSwitch[i] = false;
  showFolder();
}
