 <!--

//****************************************************************
// You are free to copy the "Folder-Tree" script as long as you
// keep this copyright notice:
//
// original script concepts adopted from
//     Author:  Marcelino Alves Martins (martins@hks.com) December '97.
//     Located: http://www.geocities.com/Paris/LeftBank/2178/
//
// Modifications and enhancements by
//     Author:  Roger Bedard (rb@compsolutions-csi.com) 98/99.
//     Located: http://www.CompSolutions-CSi.com
//
// *** SEE <WhatsNew.txt> FOR A LISTING OF MODIFICATIONS MADE ***
//****************************************************************

function Folder(level, folderDescription, hreference) //CONSTRUCTOR
{
  //CONSTANT DATA
  this.desc = folderDescription
  this.hreference = hreference
  this.id = -1
  this.navObj = 0
  this.iconImg = 0
  this.nodeImg = 0
  this.isLastNode = 0
  this.level = level
  
  //DYNAMIC DATA
  this.isOpen = true
  this.iconSrc = Var[6]+Var[7]
  this.children = new Array
  this.nChildren = 0

  //METHODS
  this.initialize = initFolder
  this.setState = setStateFolder
  this.addChild = addChild
  this.createIndex = createEntryIndex
  this.hide = hideFolder
  this.display = display
  this.renderOb = drawFolder
  this.totalHeight = totalHeight
  this.subEntries = folderSubEntries
  this.outputLink = outputFolderLink
  this.outputLink2 = outputFolderTextLink
  this.DOFimages = initDOFimages
  this.CFimages = initCFimages
}

function setStateFolder(isOpen)
{
  var subEntries
  var totalHeight
  var fIt = 0
  var i=0

  if (isOpen == this.isOpen) return

  if (Var[1] == 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 < Var[0]; fIt++)
      indexOfEntries[fIt].navObj.moveBy(0, totalHeight)
  }

  this.isOpen = isOpen
  propagateChangesInState(this)
  return
}

function propagateChangesInState(folder)
{
  var i=0

  if (folder.isOpen) {
    if (folder.nodeImg) {
      if (folder.isLastNode) folder.nodeImg.src = (Var[6]+"mlastnode.gif")
      else folder.nodeImg.src = (Var[6]+"mnode.gif")
	 }

    if ((Var[20]) && (DOFimages[folder.id])) folder.iconImg.src = (Var[6]+DOFimages[folder.id])
    else folder.iconImg.src = (Var[6]+Var[7])

    for (i=0; i<folder.nChildren; i++)
      folder.children[i].display()
  }
  else {
    if (folder.nodeImg) {
      if (folder.isLastNode) folder.nodeImg.src = (Var[6]+"plastnode.gif")
      else folder.nodeImg.src = (Var[6]+"pnode.gif")
	 }

    if ((Var[20]) && (CFimages[folder.id])) folder.iconImg.src = (Var[6]+CFimages[folder.id])
    else folder.iconImg.src = (Var[6]+Var[8])

    for (i=0; i<folder.nChildren; i++)
      folder.children[i].hide()
  }
  return
}

function hideFolder()
{
  if (Var[1] == 1) {
    if (this.navObj.style.display == "none") return
    this.navObj.style.display = "none"
  }
  else {
    if (this.navObj.visibility == "hidden") return
    this.navObj.visibility = "hidden"
  }

  this.setState(0)
  return
}

function initFolder(level, lastNode, leftSide)
{
  var i=0
  var nc = this.nChildren
  var auxEv = ""
  var a = ""
  var img1 = "mnode.gif"
  var img2 = "vertline.gif"
  var LN = 0

  this.createIndex()

  // EMPLOY (+/-) SIGN ASSOCIATION
  if ((Var[1]>0) && (Var[16]>0)) {
    if (Var[16]>1) auxEv=auxEv+"<a href='javascript:clickOnSign("+this.id+")' onMouseover='javascript:clickOnSign("+this.id+")'; return true>"
	else auxEv = "<a href='javascript:clickOnSign("+this.id+")'; return true>"
	a = "</a>"
  }

  if (level>0) {
    if (lastNode) {   // LAST BROTHER IN THE CHILDREN ARRAY
	  img1 = "mlastnode.gif"
	  img2 = "blank.gif"
	  LN = 1
    }
    this.renderOb(leftSide+auxEv+"<img name='nodeIcon"+this.id+"' src='"+Var[6]+img1+"' border=0>"+a)
    leftSide = leftSide+"<img src='"+Var[6]+img2+"' border=0>"
    this.isLastNode = LN
  }
  else
    this.renderOb("")

  if (nc > 0) {
    level = level + 1
    for (i=0 ; i < this.nChildren; i++) {
      if (i == this.nChildren-1) this.children[i].initialize(level, 1, leftSide)
      else this.children[i].initialize(level, 0, leftSide)
    }
  }
  return
}

function drawFolder(leftSide)
{

  if (Var[1] == 2) {
    if (!document.yPos) document.yPos=8
    document.write("<layer id='folder"+this.id+"' top="+document.yPos+" visibility=hidden>")
  }

  if ((this.id==0) && Var[21]) document.write("<table border=0 cellspacing=0 cellpadding=0><tr><td valign=middle nowrap><br><img src="+Var[6]+Var[10]+"><br></td></tr></table>")

  if (Var[1] == 1) document.write("<table id='folder"+this.id+"' style='position:block;' border=0 cellspacing=0 cellpadding=0><tr><td valign=middle nowrap>"+leftSide)
  else document.write("<table border=0 cellspacing=0 cellpadding=0><tr><td valign=middle nowrap>"+leftSide)
  
  this.outputLink() //CALL FOLDER ICON

  if (this.id==0) document.write("<br>")

  if ((Var[20]) && (DOFimages[this.id])) document.write("<img name='folderIcon"+this.id+"' src='"+Var[6]+DOFimages[this.id]+"' border=0></a></td><td valign=middle nowrap>")
  else document.write("<img name='folderIcon"+this.id+"' src='"+this.iconSrc+"' border=0></a></td><td valign=middle nowrap>")

  if (this.id==0) document.write("<br>")

  if ((Var[14]>0) && (this.hreference)) this.outputLink2()  //CALL TO ASSOCIATE LINK WITH FOLDER TEXT
  else document.write(Var[5]+this.desc)
  
  document.write("</td></table>")

  if (Var[1] == 2) document.write("</layer>")

  if (Var[1] == 1) {
    this.navObj = document.all["folder"+this.id]
    this.iconImg = document.all["folderIcon"+this.id]
    this.nodeImg = document.all["nodeIcon"+this.id]
  }
  else if (Var[1] == 2) {
    this.navObj = document.layers["folder"+this.id]
    this.iconImg = this.navObj.document.images["folderIcon"+this.id]
    this.nodeImg = this.navObj.document.images["nodeIcon"+this.id]
    document.yPos=document.yPos+this.navObj.clip.height
  }
  return
}

function outputFolderLink()
{
  if ((this.hreference) && (Var[17] % 2)) {
    if (Var[1]>0) {
	  if ((Var[17]==1) || (Var[17]==5)) document.write("<a href="+this.hreference+" onClick='javascript:clickOnFolder("+this.id+")' onMouseover='javascript:clickOnFolder("+this.id+")'; return true>")
	  else document.write("<a href="+this.hreference+" onClick='javascript:clickOnFolder("+this.id+")'; return true>")
	}
	else document.write("<a href="+this.hreference+">")
  }

  else {
    if ((Var[17]==2) || (Var[17]==6) || (Var[17]==1) || (Var[17]==5)) document.write("<a href='javascript:clickOnFolder("+this.id+")' onMouseover='javascript:clickOnFolder("+this.id+")'; return true>")
	else document.write("<a href='javascript:clickOnFolder("+this.id+")'; return true>")
  }
  return
}

function outputFolderTextLink()
{
  // USE OF TEXT LINKS WITH FOLDER
  if ((this.hreference) && (Var[14]>0)) {
    if (Var[1]>0) {
	  if ((Var[14]==2) || (Var[14]==4)) document.write(Var[5]+"<a href="+this.hreference+" onClick='javascript:clickOnFolder("+this.id+")' onMouseover='javascript:clickOnFolder("+this.id+")'"+this.hreference+"'; return true>"+this.desc+"</a>")
	  else document.write(Var[5]+"<a href="+this.hreference+" onClick='javascript:clickOnFolder("+this.id+")'; return true>"+this.desc+"</a>")
	}
    else document.write(Var[5]+"<a href="+this.hreference+">"+this.desc+"</a>")
  }
  return
}

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++)
    // IS A FOLDER
    if (this.children[i].children) se = (se + this.children[i].subEntries())

  return se
}


// DEFINITION OF CLASS Item (a document or link inside a Folder)
// *************************************************************

function Item(itemDescription, itemLink, target, linkData) //CONSTRUCTOR
{
  // CONSTANT DATA
  this.desc = itemDescription
  this.link = itemLink
  this.id = -1      //INITIALIZED IN initalize()
  this.navObj = 0   //INITIALIZED IN render()
  this.iconImg = 0  //INITIALIZED IN render()
  this.target = target
  this.data = linkData

  // METHODS
  this.initialize = initItem
  this.createIndex = createEntryIndex
  this.hide = hideItem
  this.display = display
  this.renderOb = drawItem
  this.totalHeight = totalHeight
}

function hideItem()
{
  if (Var[1] == 1) {
    if (this.navObj.style.display == "none") return
    this.navObj.style.display = "none"
  }
  else {
    if (this.navObj.visibility == "hidden") return
    this.navObj.visibility = "hidden"
  }
  return
}

function initItem(level, lastNode, leftSide)
{
  var img1 = "node.gif"
  var img2 = "vertline.gif"

  this.createIndex()

  if (level>0) {
    if (lastNode) {     //THE LAST BROTHER IN THE CHILDREN ARRAY
	   img1 = "lastnode.gif"
	   img2 = "blank.gif"
    }
    this.renderOb(leftSide+"<img src='"+Var[6]+img1+"' border=0>")
    leftSide = leftSide+"<img src='"+Var[6]+img2+"' border=0>"
  }
  else this.renderOb("")
  return
}

function drawItem(leftSide)
{
  if (Var[1] == 2) document.write("<layer id='item"+this.id+"' top="+document.yPos+" visibility=hidden><table border=0 cellspacing=0 cellpadding=0><tr><td valign=middle nowrap>"+leftSide)

  if (Var[1] == 1) document.write("<table id='item"+this.id+"' style='position:block;' border=0 cellspacing=0 cellpadding=0><tr><td valign=middle nowrap>"+leftSide)

  if ((Var[18]>0) && (this.link!="")) {
	if (Var[18]==2) {
      if ((this.target==0) || (this.target==3) || (this.target==6))
        document.write("<a href="+this.link+" onMouseover=parent.frames[Var[3]].location="+this.link+"; return true><img id='itemIcon"+this.id+"' ")
      else if ((this.target==1) || (this.target==4) || (this.target==3))
        document.write("<a href="+this.link+" onMouseover=window.open('"+this.data+"'); return true><img id='itemIcon"+this.id+"' ")
      else
        document.write("<a href="+this.link+" onMouseover=parent.top.location="+this.link+"; return true><img id='itemIcon"+this.id+"' ")
	}
    else document.write("<a href="+this.link+"><img id='itemIcon"+this.id+"' ")
  }
  else document.write("<img id='itemIcon"+this.id+"' ")

  if ((Var[20]) && (DOFimages[this.id])) document.write("src='"+Var[6]+DOFimages[this.id]+"' border=0>")
  else document.write("src='"+Var[6]+Var[9]+"' border=0>")

  if ((Var[18]>0) && (this.link!="")) document.write("</a></td><td valign=middle nowrap>")
  else document.write("</td><td valign=middle nowrap>")

  if ((Var[15]>0) && (this.link!="")) {
    if (Var[15]==2) {
      if ((this.target==0) || (this.target==3) || (this.target==6))
        document.write(Var[5]+"<a href="+this.link+" onMouseover=parent.frames[Var[3]].location="+this.link+"; return true>"+this.desc+"</a></table>")
      else if ((this.target==1) || (this.target==4) || (this.target==3))
        document.write(Var[5]+"<a href="+this.link+" onMouseover=window.open('"+this.data+"'); return true>"+this.desc+"</a></table>")
      else
        document.write(Var[5]+"<a href="+this.link+" onMouseover=parent.top.location="+this.link+"; return true>"+this.desc+"</a></table>")
	}
    else document.write(Var[5]+"<a href="+this.link+">"+this.desc+"</a></table>")
  }
  else document.write(Var[5]+this.desc+"</table>")

  if (Var[1] == 2) document.write("</layer>")

  if (Var[1] == 1) {
    this.navObj = document.all["item"+this.id]
    this.iconImg = document.all["itemIcon"+this.id]
  }
  else if (Var[1] == 2) {
      this.navObj = document.layers["item"+this.id]
      this.iconImg = this.navObj.document.images["itemIcon"+this.id]
      document.yPos=document.yPos+this.navObj.clip.height
  }
  return
}


// METHODS COMMON TO BOTH OBJECTS (pseudo-inheritance)
// ********************************************************

function display()
{
  if (Var[1] == 1) this.navObj.style.display = "block"
  else this.navObj.visibility = "show"
  return
}

function createEntryIndex()
{
  this.id = Var[0]
  indexOfEntries[Var[0]] = this
  Var[0]++
  return
}

// TOTAL HEIGHT OF SUBENTRIES OPEN
function totalHeight() //USED WITH [Var[1]] == 2
{
  var h = this.navObj.clip.height
  var i = 0

  // IS A FOLDER AND _IS_ OPEN
  if (this.isOpen)
    for (i=0 ; i < this.nChildren; i++)
      h = h + this.children[i].totalHeight()

  return h
}


// EVENTS
// *********************************************************

// USE OF CLICK METHOD ON SIGN LINKS
function clickOnSign(folderId)
{
  var clicked = indexOfEntries[folderId]
  var topBranch = this.indexOfEntries[this.Var[23]]
  var prevBranch = this.indexOfEntries[this.Var[22]]
  var i

  
  // COLLAPSE THE BRANCH WHEN ACCESSING A NEW BRANCH
  if (this.Var[2]!=0) {	
    if (this.Var[22]!=folderId) {
	  if ((this.Var[22]!=0) && (prevBranch.isOpen) && (clicked.level<=prevBranch.level)) clickOnNode(this.Var[22])
	  if (clicked.level==1) {
        if ((this.Var[23]!=folderId) && (this.Var[23]!=0) && (topBranch.isOpen)) {
		  for (i=0; i<topBranch.nChildren; i++)
		    if (topBranch.isOpen) clickOnNode(this.Var[23])
		}
		this.Var[23]=folderId
	  }
	  this.Var[22] = folderId
	}
  }
  clickOnNode(folderId)
  return
}


// USE OF CLICK METHOD ON FOLDER LINK
function clickOnFolder(folderId)
{
  var clicked = indexOfEntries[folderId]
  var topBranch = this.indexOfEntries[this.Var[23]]
  var prevBranch = this.indexOfEntries[this.Var[22]]
  var i

  if ((this.Var[17]>0) && (this.Var[17]<5)) {
  
	// COLLAPSE THE BRANCH WHEN ACCESSING A NEW BRANCH
	if (this.Var[2]!=0) {	
	  if (this.Var[22]!=folderId) {
	    if ((this.Var[22]!=0) && (prevBranch.isOpen) && (clicked.level<=prevBranch.level)) clickOnNode(this.Var[22])
	    if (clicked.level==1) {
          if ((this.Var[23]!=folderId) && (this.Var[23]!=0) && (topBranch.isOpen)) {
		    for (i=0; i<topBranch.nChildren; i++)
		      if (topBranch.isOpen) clickOnNode(this.Var[23])
		  }
		  this.Var[23]=folderId
	    }
	    this.Var[22] = folderId
	  }
	}
    clickOnNode(folderId)
  }

  else if (this.Var[17]>4)
    if (!clicked.isOpen) clickOnNode(folderId)

  return

}

function clickOnNode(folderId)
{
  var clickedFolder = 0
  var state = 0

  clickedFolder = indexOfEntries[folderId]
  state = clickedFolder.isOpen

  clickedFolder.setState(!state) //open<->close
  return
}

function refresh()
{
  if (!indexOfEntries[0].isOpen) clickOnNode(0)
  return
}

function initDoc()
{
  var i = 0

  if (document.all) Var[1] = 1   // IE4.x
  else if (document.layers) Var[1] = 2   // NS4.x
  else Var[1] = 0   // other

  foldersTree.CFimages()
  foldersTree.DOFimages()
  foldersTree.initialize(0, 1, "")
  foldersTree.display()

  if (Var[1] > 0) {
    if (Var[1]==2) document.write("<layer top="+indexOfEntries[Var[0]-1].navObj.top+" visibility=hidden></layer>")

    clickOnFolder(0)   // CLOSE THE ENTIRE TREE
	
	if (Var[19]==1) clickOnNode(0)   // OPEN THE ROUTE FOLDER ==> LEVEL 1

	if ((Var[19] == 0) && (Var[2]==0))   // OPEN ENTIRE TREE-FOLDER
	  for (i=0; i<Var[0]; i++)
	    if (this.indexOfEntries[i].children) clickOnFolder(i)
  }
  return
}


// AUXILIARY FUNCTIONS FOR FOLDER-TREE BACKWARD COMPATIBILITY
// **********************************************************

function getFolder(level, target, description, hreference)
{
  var fullLink = ""

  if ((hreference != "") && (target != (-1))) {
    if (target==0)      fullLink = "'"+hreference+"' target=\""+Var[4]+"\""
    else if (target==1) fullLink = "'"+hreference+"' target=_blank"
	else if (target==2) fullLink = "'"+hreference+"' target=_top"
	
	else if (target==3) fullLink = "'http://"+hreference+"' target=\""+Var[4]+"\""
	else if (target==4) fullLink = "'http://"+hreference+"' target=_blank"
    else if (target==5) fullLink = "'http://"+hreference+"' target=_top"
	
	else if (target==6) fullLink = "'ftp://"+hreference+"' target=\""+Var[4]+"\""
	else if (target==7) fullLink = "'ftp://"+hreference+"' target=_blank"
	else                fullLink = "'ftp://"+hreference+"' target=_top"
  }
  
  folder = new Folder(level, description, fullLink)
  return folder
}

function getLink(target, description, linkData)
{
  var fullLink = ""

  if (linkData != "") {
    if (target==0)      fullLink = "'"+linkData+"' target=\""+Var[4]+"\""
    else if (target==1) fullLink = "'"+linkData+"' target=_blank"
	else if (target==2) fullLink = "'"+linkData+"' target=_top"
	
	else if (target==3) fullLink = "'http://"+linkData+"' target=\""+Var[4]+"\""
	else if (target==4) fullLink = "'http://"+linkData+"' target=_blank"
    else if (target==5) fullLink = "'http://"+linkData+"' target=_top"
	
	else if (target==6) fullLink = "'ftp://"+linkData+"' target=\""+Var[4]+"\""
	else if (target==7) fullLink = "'ftp://"+linkData+"' target=_blank"
	else                fullLink = "'ftp://"+linkData+"' target=_top"
  }

  linkItem = new Item(description, fullLink, target, linkData)
  return linkItem
}

function insertFolder(parentFolder, childFolder)
{
  return parentFolder.addChild(childFolder)
}

function insertDoc(parentFolder, document)
{
  return parentFolder.addChild(document)
}


// GLOBAL VARIABLES
// ****************

indexOfEntries = new Array

DOFimages = new Array // ARRAY OF CUSTOMIZED DOC AND OPEN FOLDER IMAGES
CFimages  = new Array // ARRAY OF CUSTOMIZED CLOSED FOLDER IMAGES
Var       = new Array // ARRAY OF VARIABLES USED THROUGHOUT RUN
  Var[0]=0            // nEntries
  Var[1]=0            // browser version
  Var[22]=0           // previous node accessed
  Var[23]=0           // current node accessed



// *********************************************
// THE SECTION BELOW THIS HEADING IS THE SECTION
// REQUIRING USER MODIFICATIONS ... THERE IS NO
// NEED FOR USER MODIFICATIONS ABOVE THIS POINT
//
// REFER TO "Documentation.htm" FOR INSTRUCTIONS
// ON MODIFICATION SPECS
// *********************************************



// CUSTOMIZATION OF DOCUMENT IMAGES AND OPEN FOLDER IMAGES
function initDOFimages()
{
  if (Var[20]) {
	 DOFimages[0]  = "booko.gif"
	 DOFimages[1]  = "home.gif"
  }
  return DOFimages
}


// CUSTOMIZATION OF CLOSED FOLDER IMAGES
function initCFimages()
{
  if (Var[20]) {
	 CFimages[0] = "bookc.gif"
  }
  return CFimages
}


// REFER TO "Documentation.htm" FOR INSTRUCTIONS ON SETTING THESE
// VARIABLES ... THERE ARE A VARIETY OF SETTINGS AVAILABLE, OF
// WHICH EACH SETTING HAS A KEY PART IN THE PERFORMANCE AND BEHAVIOR
// OF THE FOLDER-TREE SCRIPT

  Var[2]  = 1              // use branch collapsing option
  Var[3]  = 2              // target frame number
  Var[4]  = "huvud"      // name of target frame
  Var[5]  = "&nbsp;"       // space insert command
  Var[6]  = "images/"      // path of Folder-Tree images
  Var[7]  = "afopen.gif"    // default open folder image
  Var[8]  = "afclosed.gif"  // default closed folder image
  Var[9]  = "doc.gif"     // default document image
  Var[10] = "socclogo.gif"  // company Logo
  
  Var[11] = "<font face=Arial size=3 color=black>" // route folder's font size/color
  Var[12] = "<font face=Arial size=2 color=black>" // other folders' font size/color
  Var[13] = "<font face=Arial size=2 color=black>" // document's font size/color
  
  Var[14] = 1              // use folder text links
  Var[15] = 1              // use document text links
  Var[16] = 1              // use the +/- sign links
  Var[17] = 3              // use folder image links
  Var[18] = 1              // use document image links
  Var[19] = 1              // initial state of tree
  Var[20] = 1              // option to use customize images
  Var[21] = 0              // option to use company logo

//-->