//+-------------------------------------------------------------------+
//| yx_folder                       Version 3                         |
//| Copyright 1999  Xin Yang        yangxin@iname.com                 |
//| Created 11/01/1999              Last Modified 11/18/1999          |
//| Web Site:                       http://yx.webprovider.com         |
//+-------------------------------------------------------------------+
//| Copyright 1999  Xin Yang        All Rights Reserved.              |
//|                                                                   |
//| yx_folder-v3.js may be used and hosted free of charge by anyone   |
//| for personal purpose so long as this copyright notice remain      |
//| intact.                                                           |
//|                                                                   |
//| Obtain permission before selling the code for this program or     |
//| hosting this software on a commercial web or redistributing this  |
//| software over the Internet or in any other medium. In all cases   |
//| copyright must remain intact.                                     |
//+-------------------------------------------------------------------+

var isNN = (navigator.appName.toLowerCase().indexOf("netscape") != -1);
var isNN3 = (isNN && navigator.appVersion.substring(0,1) == 3);

var tocFrame = null;
//var tocFrameName = "toc";
//var contentFrameName = "content";

//var backgroundColor = "#ffffff";
//var fontSize = 1;
//var fontColor = "#000000";
//var fontFace = '"arial,verdana,times"';
//var fontStyleOpen = "<b>";
//var fontStyleClose = "</b>";

var imageString1 = "";
var imageString2 = "";
var imageString3 = "";

var imageFolderOpen = "";
var imageFolderClose = "";
var imageLinkSpot = "";
var imageCommandSpot = "";
var imageSpace = "";

var commandOpen = "openAll()";
var commandClose = "closeAll()";

var flagFolder = "F";
var flagFolderLink = "X";
var flagLink = "L";
var flagCommand = "C";

var folderDepth = 0;
var nodeCount = -1;
var folderNode = new Array();
var folderCount = -1;
var folderTree = new Array();
var folderSwitch = new Array();

function folderNodeUnit() {
  this.type = "";
  this.name = "";
  this.description = "";
  this.url = "";
  this.command = "";
  this.folder = -1;
}

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 == flagFolderLink) {
      folderNode[nodeCount].url = folder[i][4];
      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 == flagLink) {
      folderNode[nodeCount].url = folder[i][3];
    }
    else if (folderNode[nodeCount].type == flagCommand) {
      folderNode[nodeCount].command = folder[i][3];
    }
    else
      alert("Read Folder Error");
  }
}

function clickFolder(nodeIndex) {
  if (folderNode[nodeIndex].type == flagFolder || folderNode[nodeIndex].type == flagFolderLink) {
    folderSwitch[folderNode[nodeIndex].folder] = !folderSwitch[folderNode[nodeIndex].folder];
    if (isNN)
      setTimeout("showFolder()",1)
    else
      showFolder();
  }
  else
    alert("Folder Error");
}

function clickCommand(nodeIndex) {
  if (folderNode[nodeIndex].type == flagCommand)
    eval(folderNode[nodeIndex].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 linkString1 = fontStyleOpen + '<font face=' + fontFace + ' size=' + fontSize + '><a href="';
  var linkString2 = '</a></font>' + fontStyleClose;

  for (var i = 0; i < folderLength; i++) {
    nodeIndex = folderTree[folderNo][i];
    mouseHoverString = mouseHoverString1 + folderNode[nodeIndex].description + mouseHoverString2;

    tocFrame.document.write("<tr align=left valign=middle><td><nobr>");

    for (var j = 0; j < folderDepth; j++)
      tocFrame.document.write(imageString1 + imageSpace + imageString3 + imageString1 + imageSpace + imageString3);

    tocFrame.document.write('<a href="');
    if (folderNode[nodeIndex].type == flagFolder || folderNode[nodeIndex].type == flagFolderLink)
      tocFrame.document.write('javascript:clickFolder(' + nodeIndex + ')"')
    else if (folderNode[nodeIndex].type == flagLink)
      tocFrame.document.write(folderNode[nodeIndex].url + '" target=' + contentFrameName)
    else {
      if (isNN3 && (folderNode[nodeIndex].command == commandOpen || folderNode[nodeIndex].command == commandClose))
        tocFrame.document.write('javascript:parent.' + folderNode[nodeIndex].command + '" target=' + contentFrameName)
      else
        tocFrame.document.write('javascript:clickCommand(' + nodeIndex + ')"');
    }
    tocFrame.document.write(mouseHoverString);

    tocFrame.document.write(imageString1);
    if (folderNode[nodeIndex].type == flagFolderLink || folderNode[nodeIndex].type == flagFolder) {
      if (folderSwitch[folderNode[nodeIndex].folder])
        tocFrame.document.write(imageFolderOpen)
      else
        tocFrame.document.write(imageFolderClose);
    }
    else if (folderNode[nodeIndex].type == flagLink)
      tocFrame.document.write(imageLinkSpot)
    else
      tocFrame.document.write(imageCommandSpot);
    tocFrame.document.write(imageString2);

    tocFrame.document.write("</a>");
    tocFrame.document.write(imageString1 + imageSpace + imageString3);

    tocFrame.document.write(linkString1);
    if (folderNode[nodeIndex].type == flagFolder)
      tocFrame.document.write('javascript:clickFolder(' + nodeIndex + ')"')
    else if (folderNode[nodeIndex].type == flagFolderLink)
      tocFrame.document.write(folderNode[nodeIndex].url + '" target=' + contentFrameName + ' onclick="clickFolder(' + nodeIndex + ')"')
    else if (folderNode[nodeIndex].type == flagLink)
      tocFrame.document.write(folderNode[nodeIndex].url + '" target=' + contentFrameName)
    else {
      if (isNN3 && (folderNode[nodeIndex].command == commandOpen || folderNode[nodeIndex].command == commandClose))
        tocFrame.document.write('javascript:parent.' + folderNode[nodeIndex].command + '" target=' + contentFrameName)
      else
        tocFrame.document.write('javascript:clickCommand(' + nodeIndex + ')"');
    }
    tocFrame.document.write(mouseHoverString);
    tocFrame.document.write(folderNode[nodeIndex].name + linkString2);
    tocFrame.document.writeln("</nobr></td></tr>");

    if (folderNode[nodeIndex].type == flagFolderLink || folderNode[nodeIndex].type == flagFolder)
      if (folderSwitch[folderNode[nodeIndex].folder]) {
        folderDepth++;
        showNode(folderNode[nodeIndex].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(commentClose);
    writeln("</style>");
    writeln("</head>");
    writeln("<body bgcolor=" + backgroundColor + " text=#000000 link=" + fontColor + " alink=#FFFF40 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 setImages() {
  if (isNN3) {
    fontSize++;

    imageString1 = '<b><font color=#ff0000 face=' + fontFace + ' size=' + fontSize + '>';
    imageString2 = '</font></b>';
    imageString3 = '</font></b>';

    imageFolderOpen = "&lt;";
    imageFolderClose = "&gt;";
    imageLinkSpot = "o";
    imageCommandSpot = "::";
    imageSpace = "";
  }
  else {
    imageString1 = "<img src='";
    imageString2 = "' width=14 height=11 border=0>";
	imageString3 = "' width=5 height=5 border=0>";

    imageFolderOpen = "yx_folderOpen.gif";
    imageFolderClose = "yx_folderClose.gif";
    imageLinkSpot = "yx_linkSpot.gif";
    imageCommandSpot = "yx_commandSpot.gif";
    imageSpace = "yx_oneLevel.gif";
  }

}

function buildFolder(folderRoot) {
  setFrames();
  setImages();
  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();
}
