<!--

//****************************************************************
// 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/
//
// *** SEE <WhatsNew.txt> FOR A LISTING OF MODIFICATIONS MADE ***
//****************************************************************

function Folder(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

  //DYNAMIC DATA
  this.isOpen = true
  this.iconSrc = dfOpen
  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.images = initImages
}

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
  propagateChangesInState(this)

}

function propagateChangesInState(folder)
{
  var i=0

  if (folder.isOpen) {
    if (folder.nodeImg) {
      if (folder.isLastNode)
        folder.nodeImg.src = srcIMAGES+"mlastnode.gif"
      else
	     folder.nodeImg.src = srcIMAGES+"mnode.gif"
	 }

    folder.iconImg.src = dfOpen

    for (i=0; i<folder.nChildren; i++)
      folder.children[i].display()
  }
  else {
    if (folder.nodeImg) {
      if (folder.isLastNode)
        folder.nodeImg.src = srcIMAGES+"plastnode.gif"
      else
	     folder.nodeImg.src = srcIMAGES+"pnode.gif"
	 }

    folder.iconImg.src = dfClosed

    for (i=0; i<folder.nChildren; i++)
      folder.children[i].hide()
  }
}

function hideFolder()
{
  if (browserVersion == 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)
}

function initFolder(level, lastNode, leftSide)
{
  var i=0
  var nc
  var auxEv = ""
  var a = ""
  var img1 = "mnode.gif"
  var img2 = "vertline.gif"
  var LN = 0

  nc = this.nChildren

  this.createIndex()

  // ASSOCIATE CLICK/MOUSEOVER METHODS WITH THE (+/-) SIGN ICONS
  if ((browserVersion>0) && (USESIGNLINKS>0)) {
    auxEv = "<a href='javascript:clickOnFolder("+this.id+")' "
    if (USESIGNLINKS>1)
	   auxEv=auxEv+" onMouseover='javascript:clickOnFolder("+this.id+")'; return true "
  	 auxEv=auxEv+">"
	 a = "</a>"
  }

  if (level>0) {
    if (lastNode) {   //the last 'brother' in the children array
	   img1 = "mlastnode.gif"
	   img2 = "blank.gif"
		LN = 1
    }
    this.renderOb(leftSide+auxEv+"<img name='nodeIcon"+this.id+"' src='"+srcIMAGES+img1+"' border=0>"+a)
    leftSide = leftSide+"<img src='"+srcIMAGES+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)
    }
  }
}

function drawFolder(leftSide)
{

  if (browserVersion == 2) {
    if (!doc.yPos)
      doc.yPos=8
    doc.write("<layer id='folder"+this.id+"' top="+doc.yPos+" visibility=hidden>")
  }

  // Logo einfügen - danke an Roger für die Hinweise !!

  if ((this.id==0) && (topSHOW > 0)) { 
    doc.write("<table border=0 cellspacing=0 cellpadding=0>") 
    doc.write("<tr><td valign=middle nowrap>") 
    if (topSHOW == 1){	
      doc.write(topFONT+topTEXT+"</FONT><BR>"+topIMAGE)
    }
    else {	
      doc.write(topIMAGE)
    }
   
    doc.write("</td></tr></table>") 
  } 

  doc.write("<table ")

  if (browserVersion == 1)
    doc.write(" id='folder"+this.id+"' style='position:block;' ")

  doc.write(" border=0 cellspacing=0 cellpadding=0>")
  doc.write("<tr><td valign=middle nowrap>")
  doc.write(leftSide)

  if (this.id==0) doc.write("<br>")
  this.outputLink() //CALL FOLDER ICON

  doc.write("<img name='folderIcon"+this.id+"' ")
  doc.write("src='"+this.iconSrc+"' border=0></a>")
  doc.write("</td><td valign=middle nowrap>")

  if (this.id==0) doc.write("<br>")

  if ((FOLDERTEXTLINKS>0) && (this.hreference))
	 this.outputLink2()  //CALL TO ASSOCIATE LINK WITH FOLDER TEXT
  else
    doc.write(SPACE+this.desc)

  doc.write("</td>")
  doc.write("</table>")

  if (browserVersion == 2)
    doc.write("</layer>")

  if (browserVersion == 1) {
    this.navObj = doc.all["folder"+this.id]
    this.iconImg = doc.all["folderIcon"+this.id]
    this.nodeImg = doc.all["nodeIcon"+this.id]
  }
  else if (browserVersion == 2) {
      this.navObj = doc.layers["folder"+this.id]
      this.iconImg = this.navObj.document.images["folderIcon"+this.id]
      this.nodeImg = this.navObj.document.images["nodeIcon"+this.id]
      doc.yPos=doc.yPos+this.navObj.clip.height
    }
}

function outputFolderLink()
{
  if ((this.hreference) && (USEFOLDERLINKS % 2)) {
    doc.write("<a href='"+this.hreference+"' TARGET=\""+frmNAME+"\" ")
    if (browserVersion>0) {
      doc.write("onClick='javascript:clickOnFolder("+this.id+")' ")
      if ((USEFOLDERLINKS==1) || (USEFOLDERLINKS==5))
        doc.write("onMouseover='javascript:clickOnFolder("+this.id+")'; return true ")
    }
  }

  else {
    doc.write("<a href='javascript:clickOnFolder("+this.id+")' ")
    if ((USEFOLDERLINKS==2) || (USEFOLDERLINKS==6) || (USEFOLDERLINKS==1) || (USEFOLDERLINKS==5))
      doc.write("onMouseover='javascript:clickOnFolder("+this.id+")'; return true ")
  }
  doc.write(">")
}

function outputFolderTextLink()
{
  // USE OF TEXT LINKS WITH FOLDER
  if ((this.hreference) && (FOLDERTEXTLINKS>0)) {
    doc.write(SPACE+"<a href='"+this.hreference+"' TARGET=\""+frmNAME+"\" ")
    if (browserVersion>0) {
	   doc.write("onClick='javascript:clickOnFolder("+this.id+")' ")
	   if (FOLDERTEXTLINKS==2)
	     doc.write("onMouseover=parent.frames[frmNO].location.href='"+this.hreference+"'; return true ")
	 }
	 doc.write(">"+this.desc+"</a>")
  }
}

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
}


// DEFINITION OF CLASS Item (a document or link inside a Folder)
// *************************************************************

function Item(itemDescription, itemLink) //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()

  // METHODS
  this.initialize = initItem
  this.createIndex = createEntryIndex
  this.hide = hideItem
  this.display = display
  this.renderOb = drawItem
  this.totalHeight = totalHeight
}

function hideItem()
{
  if (browserVersion == 1) {
    if (this.navObj.style.display == "none")
      return
    this.navObj.style.display = "none"
  }
  else {
    if (this.navObj.visibility == "hidden")
      return
    this.navObj.visibility = "hidden"
  }
}

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='"+srcIMAGES+img1+"' border=0>")
    leftSide = leftSide+"<img src='"+srcIMAGES+img2+"' border=0>"
  }
  else
    this.renderOb("")
}

function drawItem(leftSide)
{
  if (browserVersion == 2)
    doc.write("<layer id='item"+this.id+"' top="+doc.yPos+" visibility=hidden>")

  doc.write("<table ")

  if (browserVersion == 1)
    doc.write(" id='item"+this.id+"' style='position:block;' ")

  doc.write(" border=0 cellspacing=0 cellpadding=0>")
  doc.write("<tr><td valign=middle nowrap>")
  doc.write(leftSide)

  if ((USEDOCLINKS>0) && (this.link!="")) {
    doc.write("<a href="+this.link+" ")
	 if (USEDOCLINKS==2)
	   doc.write("onMouseover=parent.frames[frmNO].location="+this.link+" ")
	 doc.write(">")
  }

  doc.write("<img id='itemIcon"+this.id+"' ")

  if ((CUSTOMIZE) && (indexOfImages[this.id]))
    doc.write("src='"+srcIMAGES+indexOfImages[this.id]+"' border=0>")
  else
    doc.write("src='"+srcIMAGES+dfDoc+"' border=0>")

  if ((USEDOCLINKS>0) && (this.link!="")) doc.write("</a>")
  doc.write("</td><td valign=middle nowrap>")

  if ((DOCTEXTLINKS>0) && (this.link!="")) {
    doc.write(SPACE+"<a href="+this.link+" ")
	 if (DOCTEXTLINKS==2)
	   doc.write("onmouseover=parent.frames[frmNO].location="+this.link+"; return true>"+this.desc+"</a>")
    else
      doc.write(">"+this.desc+"</a>")
  }

  else
    doc.write(SPACE+this.desc)

  doc.write("</table>")

  if (browserVersion == 2)
    doc.write("</layer>")

  if (browserVersion == 1) {
    this.navObj = doc.all["item"+this.id]
    this.iconImg = doc.all["itemIcon"+this.id]
  }
  else if (browserVersion == 2) {
      this.navObj = doc.layers["item"+this.id]
      this.iconImg = this.navObj.document.images["itemIcon"+this.id]
      doc.yPos=doc.yPos+this.navObj.clip.height
  }
}


// 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++
}

// TOTAL HEIGHT OF SUBENTRIES OPEN
function totalHeight() //USED WITH [browserVersion] == 2
{
  var h = this.navObj.clip.height
  var i = 0

  if (this.isOpen) //IS A FOLDER AND _IS_ OPEN
    for (i=0 ; i < this.nChildren; i++)
      h = h + this.children[i].totalHeight()

  return h
}


// EVENTS
// *********************************************************

function clickOnFolder(folderId)
{
  var clicked = indexOfEntries[folderId]

  // USE OF CLICK METHOD ON FOLDER LINK
  if ((USEFOLDERLINKS>0) && (USEFOLDERLINKS<5))
    clickOnNode(folderId)

  else if (USEFOLDERLINKS>4)
    if (!clicked.isOpen)
	    clickOnNode(folderId)

  return

  if (clicked.isSelected)
    return
}

function clickOnNode(folderId)
{
  var clickedFolder = 0
  var state = 0

  clickedFolder = indexOfEntries[folderId]
  state = clickedFolder.isOpen

  clickedFolder.setState(!state) //open<->close
}

function initDoc()
{
  var i = 0

  if (doc.all)
    browserVersion = 1 //IE4
  else if (doc.layers)
    browserVersion = 2 //NS4
  else
    browserVersion = 0 //other

  foldersTree.images()
  foldersTree.initialize(0, 1, "")
  foldersTree.display()

  if (browserVersion > 0) {
    if (browserVersion==2)
      doc.write("<layer top="+indexOfEntries[nEntries-1].navObj.top+" visibility=hidden></layer>")

    clickOnFolder(0)      // CLOSE THE ENTIRE TREE
	 if (STATEOFTREE==1)
      clickOnNode(0)      // OPEN THE ROUTE FOLDER ==> LEVEL 1

	if (STATEOFTREE == 0)  // OPEN ENTIRE TREE-FOLDER
	  for (i=0; i<nEntries; i++)
	    if (this.indexOfEntries[i].children)
          clickOnFolder(i)
  }
}


// AUXILIARY FUNCTIONS FOR FOLDER-TREE BACKWARD COMPATIBILITY
// **********************************************************

function getFolder(description, hreference)
{
  folder = new Folder(description, hreference)
  return folder
}

function getLink(target, description, linkData)
{
  fullLink = ""

  if (linkData != "") {
    if (target==0)
      fullLink = "'"+linkData+"' target=\""+frmNAME+"\""
    else if (target==1)
	   fullLink = "'http://"+linkData+"' target=_blank"
	 else if (target==2)
	   fullLink = "'ftp://"+linkData+"' target=_blank"
	 else if (target==3)
	   fullLink = "'http://"+linkData+"' target=\""+frmNAME+"\""
	 else
	   fullLink = "'ftp://"+linkData+"' target=\""+frmNAME+"\""
  }

  linkItem = new Item(description, fullLink)
  return linkItem
}

function insertFolder(parentFolder, childFolder)
{
  return parentFolder.addChild(childFolder)
}

function insertDoc(parentFolder, document)
{
  parentFolder.addChild(document)
}


// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function initImages()
{
  if (CUSTOMIZE) {
	//Folder Willkommen
	indexOfImages[1]   = "hands.gif"
	indexOfImages[2]   = "info_i.gif"
	indexOfImages[3]   = "info_i.gif"
	indexOfImages[4]   = "bierkrug.gif"
	indexOfImages[5]   = "coffee.gif"
		
	// folder Aktuelles
	indexOfImages[7]   = "calendar.gif"
	indexOfImages[8]   = "news.gif"
	indexOfImages[9]   = "news.gif"


  }
  return indexOfImages
}
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


// Global variables
// ****************

// USE OF FOLDER TEXT LINKS
FOLDERTEXTLINKS = 0 // 0 == NULL
                    // 1 == (CLICK) && (NO MOUSEOVER)
		  		        // 2 == (CLICK) && (MOUSEOVER)

// USE OF DOCUMENT TEXT LINKS
DOCTEXTLINKS = 1    // 0 == NULL
                    // 1 == (CLICK) && (NO MOUSEOVER)
				// 2 == (CLICK) && (MOUSEOVER)

// USE OF SIGN ICON LINKS:  no URL linkage
USESIGNLINKS = 1    // 0 == NULL
                    // 1 == (CLICK OPEN/CLOSE) && (NO MOUSEOVER)
				// 2 == (CLICK+MOUSEOVER OPEN/CLOSE)

// USE OF FOLDER LINKS
USEFOLDERLINKS = 4  // 0 == NULL
                    // 1 == (CLICK+MOUSEOVER OPEN/CLOSE) && (CLICK URL)
				// 2 == (CLICK+MOUSEOVER OPEN/CLOSE) && (NO URL)
				// 3 == (CLICK OPEN/CLOSE) && (NO MOUSEOVER) && (CLICK URL)
                    // 4 == (CLICK OPEN/CLOSE) && (NO MOUSEOVER) && (NO URL)
				// 5 == (CLICK+MOUSEOVER OPEN) && (NO CLOSE) && (CLICK URL)
				// 6 == (CLICK+MOUSEOVER OPEN) && (NO CLOSE) && (NO URL)
				// 7 == (CLICK OPEN) && CLICK URL
				// 8 == (CLICK OPEN) && NO URL

// USE OF DOCUMENT ICON LINKS:  URL linkage
USEDOCLINKS = 1     // 0 == NULL
                    // 1 == (CLICK) && (NO MOUSEOVER)
				// 2 == (CLICK) && (MOUSEOVER)

// INITIALIZE STATE OF TREE-FOLDER STRUCTURE
STATEOFTREE = 1     // 0 == OPEN ENTIRE TREE-FOLDER
                    // 1 == ROUTE FOLDER ==> LEVEL 1
				// 2 == NO ROUTE ======> LEVEL 0

indexOfEntries = new Array
nEntries = 0
doc = document
browserVersion = 0
selectedFolder = 0

frmNO = 2               	// THE VALUE ASSIGNED CORRESPONDS TO THE TARGET FRAME
frmNAME = "main"     		// NAME OF ASSIGNED TARGET FRAME
srcIMAGES = "images/"   	// LOCATION OF FOLDER-TREE IMAGES
CUSTOMIZE = 1           	// 1=CUSTOMIZE DOCUMENT INSERT ICONS, 0=DEFAULT
SPACE = "&nbsp;"        	// THE COMMAND FOR A SPACE BETWEEN ICONS AND LABELS



// SHOW TOP ENTRY AND/OR IMMAGE BEFORE THE FOLDER
// dont forget to change the topFONT

topSHOW  = 1								// 0 = Show nothing on top
									// 1 = Show Text and Image
									// 2 = Show Image only
									// 0 = default

topIMAGE = "<img src=images/kuh_klein.gif WIDTH=155 HEIGHT=185>"	// Image to show on Top
topTEXT  = "<B>Buckeltourer<BR>Motorradseiten</B>"			// Text of the TOP-Entry

indexOfImages = new Array // ARRAY OF CUSTOMIZED ICONS

// LIST OF DEFAULT ICONS
dfOpen   = srcIMAGES+"fopen.gif"
dfClosed = srcIMAGES+"fclosed.gif"
dfDoc    = "doc2.gif"

// VARIABLES FOR FONT COLOR and SIZE OF LABELS

// FONT TOP ENTRY
topFONT = "<font face=\"Comic Sans MS\" size=4 color=008000>"

// FONT ROUTE ENTRY
routeFONT = "<font face=Arial size=3 color=008000>"

// FONT FOR FOLDERS
fldFONT = "<font face=Arial size=2 color=008000>"

// FONT FOR DOCUMENTS
docFONT = "<font face=Arial size=2 color=000088>"

// FONT FOR EXTERNAL LINKS
lnkFONT = "<font face=Arial size=2 color=000000>"

// FONT FOR SPECIAL ACTIONS
actFONT = "<font face=Arial size=2 color=880000>"


//-->