//**************************************************************** 
// This script is based on one created by Marcelino Alves Martins (martins@hks.com) December '97. 
// his script can be found at: http://www.geocities.com/Paris/LeftBank/2178/ 
//**************************************************************** 
 
 
// Definition of class Folder 
// ***************************************************************** 

function Folder(folderDescription, hreference) //constructor 
{ 
  //constant data 
  this.desc = folderDescription 
  this.hreference = hreference 
  this.id = -1   
  this.navObj = 0  
  this.isLastNode = 0 
 
  //dynamic data 
  this.isOpen = false 
  this.iconSrc = approot+"ftv2folderclosed.gif"   
  this.children = new Array 
  this.nChildren = 0 
 
  //methods 
  this.setState = setStateFolder 
  this.addChild = addChild 
  this.createIndex = createEntryIndex 
  this.hide = hideFolder 
  this.display = display 
  this.subEntries = folderSubEntries 
} 
 
function setStateFolder(isOpen) 
{ 
  var subEntries 
  var totalHeight 
  var fIt = 0 
  var i=0 
 
  if (isOpen == this.isOpen) 
    return 
 
  if (browserVersion == 2)  
  { 
    totalHeight = 0 
    for (i=0; i < this.nChildren; i++) 
      totalHeight = totalHeight + this.children[i].navObj.clip.height 
      subEntries = this.subEntries() 
    if (this.isOpen) 
      totalHeight = 0 - totalHeight 
    for (fIt = this.id + subEntries + 1; fIt < nEntries; fIt++) 
      indexOfEntries[fIt].navObj.moveBy(0, totalHeight) 
  }  
  this.isOpen = ((isOpen) || (this.nChildren == 0))
  propagateChangesInState(this) 
} 
 
function propagateChangesInState(folder) 
{   
  var i=0 
  if (folder.isOpen) 
  { 
    if (folder.isLastNode) 
      chgImgSrc(folder, "nodeIcon"+folder.id,approot+"ftv2mlastnode.gif")
    else 
      chgImgSrc(folder, "nodeIcon"+folder.id, approot+"ftv2mnode.gif")
    if (folder.nChildren > 0) {
      chgImgSrc(folder, "folderIcon"+folder.id, approot+"ftv2folderopen.gif")
      for (i=0; i<folder.nChildren; i++) 
        folder.children[i].display() 
    } else
      chgImgSrc(folder, "folderIcon"+folder.id, approot+"ftv2doc.gif")
  } 
  else 
  { 
    if (folder.isLastNode) 
      chgImgSrc(folder, "nodeIcon"+folder.id, approot+"ftv2plastnode.gif")
    else 
      chgImgSrc(folder, "nodeIcon"+folder.id, approot+"ftv2pnode.gif")
    if (folder.nChildren > 0) {
      chgImgSrc(folder, "folderIcon"+folder.id, approot+"ftv2folderclosed.gif")
      for (i=0; i<folder.nChildren; i++) 
        folder.children[i].hide() 
    }
  }  
} 
 
function chgImgSrc(node, imgName, imgSrc) 
{
  if (node.id == 0) return
  if (browserVersion == 1) {
    if (doc.all) 
      doc.all[imgName].src = imgSrc
  } else if (browserVersion == 2) {
    if (doc.images)
      node.navObj.document.images[imgName].src = imgSrc
  }
}

function hideFolder() 
{ 
  if (browserVersion == 1) { 
    if (this.navObj.style.display == "none") 
      return 
    this.navObj.style.display = "none" 
  } else { 
    if (this.navObj.visibility == "hiden") 
      return 
    this.navObj.visibility = "hiden" 
  } 
   
  this.setState(0) 
} 
 
function initializeFolder(node, level, lastNode, leftSide, yPos) 
{ 
var i=0 
var nc=node.nChildren 
  node.createIndex() 
 
  var auxEv = "" 

  if ((browserVersion > 0) && (nc > 0))
    auxEv = "<a href='javascript:clickOnNode("+node.id+")'>" 
  else 
    auxEv = "<a>" 

  if (nc > 0) {
    pm = "p"
    foldImg = "ftv2folderclosed.gif"
  } else {
    pm = "m"
    foldImg = "ftv2doc.gif"
  }

  if (level>0) 
    if (lastNode) //the last 'brother' in the children array 
    { 
      drawFolder(node, leftSide + auxEv + "<img name='nodeIcon" + node.id + "' src='"+approot+"ftv2"+pm+"lastnode.gif' width=16 height=22 border=0></a>", node.id, foldImg, level, yPos) 
      leftSide = leftSide + "<img src='"+approot+"ftv2blank.gif' width=16 height=22>"  
    } 
    else 
    { 
      drawFolder(node, leftSide + auxEv + "<img name='nodeIcon" + node.id + "' src='"+approot+"ftv2"+pm+"node.gif' width=16 height=22 border=0></a>", node.id, foldImg, level, yPos) 
      leftSide = leftSide + "<img src='"+approot+"ftv2vertline.gif' width=16 height=22>" 
    } 
  else 
    drawFolder(node, "", node.id, foldImg, level, yPos) 

  node.isLastNode = lastNode

  if (nc > 0) {
    level = level + 1
    for (i=0 ; i < nc; i++) {
      yPos = yPos + yIncr
      initializeFolder(node.children[i], level, (i == nc-1), leftSide, yPos)
    }
  }
} 
 
function drawFolder(node, leftSide, nid, foldImg, level, yPos)
{ 
  if (browserVersion == 2) { 
    if (yPos < 100) {
      yPos = 100
    }
    doc.write("<layer id='folder" + nid + "' top=" + yPos + " visibility=hiden>") 
  } 
   
  doc.write("<table align=center width=80% border=0 cellspacing=0 cellpadding=0 ") 
  if (browserVersion == 1) 
    doc.write(" id='folder" + nid + "' style='position:block;' ") 
  doc.write("><tr><td>") 
  if (leftSide == "") 
    doc.write("<a href='#' onClick='javascript:clickOnFolder(\""+nid+"\",\""+node.hreference+"\");return false;'>")
  else 
    doc.write(leftSide);
  doc.write("<img name='folderIcon" + nid + "' src='"+approot+foldImg+"' border=0></a>",
            "</td><td width=100% valign=middle nowrap>",
            "<a href='"+node.hreference+"' onClick='javascript:clickOnFolder(\""+nid+"\",\""+node.hreference+"\");return false;'>",
            node.desc + "</a></td></table>") 
  if (browserVersion == 2) { 
    doc.write("</layer>") 
  } 

  if (browserVersion == 1) { 
    node.navObj = doc.all["folder"+nid] 
    if (level > 1)
      node.navObj.style.display = "none"
  } else if (browserVersion == 2) { 
    node.navObj = doc.layers["folder"+nid] 
    if (yIncr == 0) 
      yIncr = doc.layers["folder"+nid].clip.height
    if (level > 1) 
      node.navObj.visibility = "hiden" 
  } 
} 
 
function addChild(childNode) 
{ 
  this.children[this.nChildren] = childNode 
  this.nChildren++ 
  return childNode 
} 
 
function folderSubEntries() 
{ 
  var i = 0 
  var se = this.nChildren 

  for (i=0; i < this.nChildren; i++){ 
    if (this.children[i].children) //is a folder 
      se = se + this.children[i].subEntries() 
  } 
 
  return se 
} 
 
 
// Methods common to both objects (pseudo-inheritance) 
// ******************************************************** 
 
function display() 
{ 
  if (browserVersion == 1) 
    this.navObj.style.display = "block" 
  else 
    this.navObj.visibility = "show" 
} 
 
function createEntryIndex() 
{ 
  this.id = nEntries 
  indexOfEntries[nEntries] = this 
  nEntries++
} 
 
// Events 
// ********************************************************* 
 
function clickOnFolder(folderId,nodehref)
{ 
  var clicked = indexOfEntries[folderId]
  if (!clicked.isOpen) 
    clickOnNode(folderId) 
  window.location = nodehref;
} 
 
function clickOnNode(folderId) 
{ 
  var clickedFolder = 0 
  var state = 0 
 
  clickedFolder = indexOfEntries[folderId] 
  state = clickedFolder.isOpen 
  clickedFolder.setState(!state) //open<->close  
} 
 
function initializeDocument() 
{ 
  if (doc.all) 
    browserVersion = 1 //IE4   
  else 
    if (doc.layers) 
      browserVersion = 2 //NS4 
    else 
      browserVersion = 0 //other 

  initializeFolder(foldersTree, 0, 1, "", yPos) 
  foldersTree.display()

  if (browserVersion > 0) 
  { 
    doc.write("<layer top="+indexOfEntries[nEntries-1].navObj.top+">&nbsp;</layer>") 
  } 
  if (browserVersion == 2) clickOnNode(0);
} 
 
// Auxiliary Functions for Folder-Treee backward compatibility 
// ********************************************************* 
 
function gFld(description, hreference) 
{ 
  folder = new Folder(description, hreference) 
  return folder 
} 
 
function insFld(parentFolder, childFolder) 
{ 
  return parentFolder.addChild(childFolder) 
} 
 
// Global variables 
// **************** 
 
USETEXTLINKS = 1
indexOfEntries = new Array 
nEntries = 0 
doc = document 
browserVersion = 0 
selectedFolder=0
approot=""
yPos=100
yIncr=0

