//This script was written by Marcelino Alves Martins on January of 1997.
//You are free to copy it as long as you keep this copyright notice.
//For more information refer to http://www.geocities.com/Paris/LeftBank/2178/ or mail to 
//martins@hks.com
//
//each node in the tree is an Array with 4+n positions 
//  node[0] is 0/1 when the node is closed/open
//  node[1] is 0/1 when the folder is closed/open
//  node[2] is 1 if the children of the node are documents 
//  node[3] is the name of the folder
//  node[4]...node[4+n] are the n children nodes

var closedfoldergif = 0;
var openfoldergif = 0;
var nodegif = 0;
var lastnodegif = 0;
var vertlinegif = 0;
var blankgif = 0;
var docgif = 0;
var linkgif = 0;

//Preloading images
function PreloadTreeImgs()
{
  closedfoldergif = new Image();
  closedfoldergif.src='images/closedfolder.gif';
  openfoldergif = new Image();
  openfoldergif.src='images/openfolder.gif';
  nodegif = new Image();
  nodegif.src='images/node.gif';
  lastnodegif = new Image();
  lastnodegif.src='images/lastnode.gif';
  vertlinegif = new Image();
  vertlinegif.src='images/vertline.gif';
  blankgif = new Image();
  blankgif.src='images/blank.gif';
  docgif = new Image();
  docgif.src='images/doc.gif';
  linkgif = new Image();
  linkgif.src='images/link.gif';
}//function PreloadTreeImgs

// ***************
// Building the data in the tree

function generateTree()
{
var aux1, aux2, aux3, aux4

	foldersTree = folderNode("PgSim Sitemap", "sitemap.htm")
		aux1 = appendChild(foldersTree, leafNode("Home", "main.htm"))
		aux1 = appendChild(foldersTree, folderNode("PgSim", "pgsim.htm"))
			aux2 = appendChild(aux1, leafNode("PgSim: wie zijn wij en wat doen wij?", "pgsimalg.htm"))
				appendChild(aux2,generateDocEntry(1, "Van Hall Instituut", "http://www.vhall.nl", "Ga naar de Van Hall Instituut website"))
				appendChild(aux2,generateDocEntry(1, "Stichting Van Hall Instituut Business Center", "http://www.vhall.nl/bca/bchelemaal.htm", "Ga naar de Stichting Van Hall Instituut Business Center website"))
			aux2 = appendChild(aux1, leafNode("PgSim teamleden", "pgsimteam.htm"))
 				appendChild(aux2, generateDocEntry(0, "Wiebe Nijlunsing", "wiebe.htm", "Informatie over Wiebe Nijlunsing"))
 				appendChild(aux2, generateDocEntry(0, "Lex van Heereveld", "lex.htm", "Informatie over Lex van Heereveld"))
 				appendChild(aux2, generateDocEntry(0, "Hendrik Boekhoud", "hendrik.htm", "Informatie over Hendrik Boekhoud"))
 				appendChild(aux2, generateDocEntry(0, "Piet van Schaick Zillesen", "piet.htm", "Informatie over Piet van Schaick Zillesen"))
 				appendChild(aux2, generateDocEntry(0, "Xantho Klijnsma", "xantho.htm", "Informatie over Xantho Klijnsma"))
 				appendChild(aux2, generateDocEntry(0, "Paul Romkes", "paul.htm", "Informatie over Paul Romkes"))
		aux1 = appendChild(foldersTree, folderNode("Producten en diensten", "prod.htm"))
			aux2 = appendChild(aux1,  folderNode("Onderwijs en ICT", "educatsoft.htm"))
				aux3 = appendChild(aux2,  folderNode("Simulaties", "simulaties.htm"))
					aux4 = appendChild(aux3,  leafNode("Catalogus", "catalog.htm"))
						appendChild(aux4, generateDocEntry(0, "Badger Engels", "badger.htm", "Simulatie van de populatiedynamica van de das"))
						appendChild(aux4, generateDocEntry(0, "SPITT", "spitt.htm", "Simulatie van bodem(verontreinigings)onderzoek"))
						appendChild(aux4, generateDocEntry(0, "Bouwplan", "bouwplan.htm", "Akkerbouwsimulatie over milieuvriendelijke landbouw"))
						appendChild(aux4, generateDocEntry(0, "DeltaSim", "deltasim.htm", "Simulatie van milieuvriendelijke glastuinbouw"))
						appendChild(aux4, generateDocEntry(0, "Environmental modelling with STELLA", "stella.htm", "Environmental modelling with STELLA"))
						appendChild(aux4, generateDocEntry(0, "Windamp", "windamp.htm", "Simulatie van een indampinstallatie"))
						appendChild(aux4, generateDocEntry(0, "Ketengarnaal", "garnaal.htm", "Simulatie van de productieketen van de Hollandse Garnaal"))
						appendChild(aux4, generateDocEntry(0, "Lake 3.0", "lake3.htm", "Simulation of an aquatic ecosystem"))
						appendChild(aux4, generateDocEntry(0, "Meer 2.0", "meer2.htm", "Simulatie van het beheer en de ecologie van een aquatisch ecosysteem"))
						appendChild(aux4, generateDocEntry(0, "De MIZOLAND serie", "mizoland.htm", "Simulaties over bedrijfsmilieuzorg in de landbouw"))
						appendChild(aux4, generateDocEntry(0, "Mizosys Bouw", "mzsb.htm", "Simulatie over duurzaam bouwen"))
						appendChild(aux4, generateDocEntry(0, "Mizosys Camping", "camping.htm", "Simulatie van milieuzorg op de camping"))
						appendChild(aux4, generateDocEntry(0, "Mizosys Galvano", "galvano.htm", "Simulatie van milieuzorg in de galvanische industrie"))
						appendChild(aux4, generateDocEntry(0, "Mizosys School", "mizoschool.htm", "Simulatie van milieuzorg op een middelbare school"))
						appendChild(aux4, generateDocEntry(0, "N-model", "nmodel.htm", "Simulatie van de stikstofstromen op een melkveehouderijbedrijf"))
						appendChild(aux4, generateDocEntry(0, "Rumigame", "rumigame.htm", "Simulatie van een melkveehouderijbedrijf"))
						appendChild(aux4, generateDocEntry(0, "SOCRATES - dierethiek", "socrates.htm", "Simulatie van drie discussies op het gebied van de Dierethiek"))
						appendChild(aux4, generateDocEntry(0, "SOCRATES 2 - biotechnologie", "socrat2.htm", "Simulatie van een gestructureerde discussie op het gebied van moreel redeneren"))
						appendChild(aux4, generateDocEntry(0, "Tuinbouw &amp; Milieu", "tuin.htm", "Simulatie van een glastuinbouwbedrijf"))
						appendChild(aux4, generateDocEntry(0, "Vortex for Windows", "vortex.htm", "Simulation for teaching students to make Population Viability Analyses"))
						appendChild(aux4, generateDocEntry(0, "Wazusim", "wazusim.htm", "Simulatie van een afvalwaterzuiveringsinstallatie"))
						appendChild(aux4, generateDocEntry(0, "Weed ecology", "weed.htm", "Simulatie van de ontwikkeling van een populatie kleefkruid"))
						appendChild(aux4, generateDocEntry(0, "MIZOLAND dairy farm", "mizomilk.htm", "Simulation of environmental management on a dairy farm"))
						appendChild(aux4, generateDocEntry(0, "Hydrology animations", "hydro.htm", "Free simulation on hydrological situations"))
					aux4 = appendChild(aux3,  leafNode("Downloaden van demoversies", "demodown.htm"))
					aux4 = appendChild(aux3,  leafNode("Downloaden van freeware", "freeware.htm"))
					aux4 = appendChild(aux3,  leafNode("Bestellen", "bestel.htm"))
						appendChild(aux4, generateDocEntry(0, "On-line bestelformulier educatieve instellingen", "bestelformownl.htm", "On-line bestelformulier educatieve instellingen"))
						appendChild(aux4, generateDocEntry(0, "On-line bestelformulier bedrijven", "bestelformbdnl.htm", "On-line bestelformulier bedrijven"))
				aux3 = appendChild(aux2,  leafNode("Toetssystemen", "toetssystemen.htm"))
					appendChild(aux3, generateDocEntry(0, "Malmberg Leerlingendisks", "malmberg.htm", "Portfolio educatieve uitgeverij Malmberg"))
				aux3 = appendChild(aux2,  leafNode("Onderwijsondersteunende software", "onderwonder.htm"))
				aux3 = appendChild(aux2,  leafNode("E-learning en e-collaboration", "teleleer.htm"))
					appendChild(aux3, generateDocEntry(0, "Presentatie e-learning", "elearning.htm", "xx"))				
			aux2 = appendChild(aux1,  folderNode("ICT oplossingen voor bedrijven en overheden", "decisionsoft.htm"))				
				aux3 = appendChild(aux2,  leafNode("Decision support software", "decisionsoft1.htm"))
					appendChild(aux3, generateDocEntry(0, "ECOMAAT", "ecomaat.htm", "Milieuzorg instrument speciaal ontwikkeld voor ondernemers in de verblijfsrecreatiesector"))
					appendChild(aux3, generateDocEntry(0, "RISC/SUS", "susrisc.htm", "Software voor bodemverontreinigingsonderzoek"))
				aux3 = appendChild(aux2,  leafNode("Speciale producten", "specprod.htm"))
					appendChild(aux3, generateDocEntry(0, "Ecoprint", "ecoprint.htm", ""))
					appendChild(aux3, generateDocEntry(0, "Duurzaam Bouwen cd-rom", "dubo.htm", ""))
					appendChild(aux3, generateDocEntry(0, "Rundvee-rassen van de wereld cd-rom", "runderras.htm", ""))
					appendChild(aux3, generateDocEntry(0, "Teleleer cd-rom", "telecd.htm", ""))
					appendChild(aux3, generateDocEntry(0, "Website plattelandsvernieuwing", "regioplus.htm", ""))
		aux1 = appendChild(foldersTree, leafNode("Nieuws", "nieuws.htm"))
			appendChild(aux1, generateDocEntry(0, "Oud Nieuws", "oudnieuws.htm", ""))
		aux1 = appendChild(foldersTree, leafNode("Jobs", "jobs.htm"))
		aux1 = appendChild(foldersTree, leafNode("Zoek", "zoeken.htm"))
		aux1 = appendChild(foldersTree, leafNode("Sitemap", "sitemap.htm"))
		aux1 = appendChild(foldersTree, leafNode("English info", "english.htm"))
}

// Auxiliary function to build the node
function folderNode(name, link)
{
var arrayAux
	arrayAux = new Array
	arrayAux[0] = 0
	arrayAux[1] = 0
	arrayAux[2] = 0
	arrayAux[3] = name
	arrayAux[4] = "<a href='"+link+"'>"+name+"</a>"
        
        return arrayAux
}

// Auxiliary function to build the node
// The entries in arrayAux[4]..array[length-1] are strings built in generate doc entry
function leafNode(name, link)
{
var arrayAux
	arrayAux = new Array
	arrayAux[0] = 0
	arrayAux[1] = 0
	arrayAux[2] = 1
	arrayAux[3] = name
	arrayAux[4] = "<a href='"+link+"'>"+name+"</a>"
        
        return arrayAux
}

//this way the generate tree function becomes simpler and less error prone
function appendChild(parent, child)
{
	parent[parent.length] = child
	return child
}

//these are the last entries in the hierarchy, the local and remote links to html documents
function generateDocEntry(icon, docDescription, link, alttext)
{
var retString =""
var imgString =""
var lnkString =""

//	if (icon==0)
//		retString = "<A href='"+link+"' target=pgsimmainFrame><img src='images/doc.gif' alt='"+alttext+"'"
//	else//KLY: onderstaande <A href='"+link+"'> was <A href='http://"+link+"' target=_blank>
//		retString = "<A href='"+link+"' target=_blank><img src='images/link.gif' alt='"+alttext+"'"
//	retString = retString + " border=0></a><td nowrap><font size=-1 face='Arial, Helvetica'>" + docDescription + "</font>"

	if (icon==0)
	{
		lnkString = "<A href='"+link+"' target=pgsimmainFrame>";
		imgString = "<img src='"+docgif.src+"' width=24 height=22 alt='"+alttext+"' border=0>";
	}
	else
	{
		lnkString = "<A href='"+link+"' target=_blank>";
		imgString = "<img src='"+linkgif.src+"' width=24 height=22 alt='"+alttext+"' border=0>";
	}
	retString = lnkString + imgString + "</a><td nowrap><font size=-1 face='Arial, Helvetica'>" + lnkString + docDescription + "</a></font>"

	return retString

}


// **********************
// display functions

//recursive function over the tree structure called by redrawTree
function redrawNode(foldersNode, doc, level, lastNode, leftSide)
{
var j=0
var i=0
	doc.write("<table border=0 cellspacing=0 cellpadding=0>")
	doc.write("<tr><td valign = middle nowrap>")

	doc.write(leftSide)

	if (level>0)
		if (lastNode) //the last 'brother' in the children array
		{
			doc.write("<img src='"+lastnodegif.src+"' width=16 height=22>")
			leftSide = leftSide + "<img src='"+blankgif.src+"' width=16 height=22>" 
		}
		else
		{
			doc.write("<img src='"+nodegif.src+"' width=16 height=22>")
			leftSide = leftSide + "<img src='"+vertlinegif.src+"' width=16 height=22>"
		}

	displayIconAndLabel(foldersNode, doc)
	doc.write("</table>")

	if (foldersNode.length > 4 && foldersNode[0]) //there are sub-nodes and the folder is open
	{
		if (!foldersNode[2]) //for folders with folders
		{
			level=level+1
			for (i=5; i<foldersNode.length;i++)
				if (i==foldersNode.length-1)
					redrawNode(foldersNode[i], doc, level, 1, leftSide)
				else
					redrawNode(foldersNode[i], doc, level, 0, leftSide)
		}
		else //for folders with documents
		{
			for (i=5; i<foldersNode.length;i++)
			{
				doc.write("<table border=0 cellspacing=0 cellpadding=0 valign=center>")
				doc.write("<tr><td nowrap>")
				doc.write(leftSide)
				if (i==foldersNode.length - 1)
					doc.write("<img src='"+lastnodegif.src+"' width=16 height=22>")
				else
					doc.write("<img src='"+nodegif.src+"' width=16 height=22>")
				doc.write(foldersNode[i])
				doc.write("</table>")
			}
		}
	}
}

//builds the html code to display a folder and its label
function displayIconAndLabel(foldersNode, doc)
{
	doc.write("<A href='javascript:parent.openBranch(\"" + foldersNode[3] + "\")'><img src=")
	if (foldersNode[1])
		doc.write(openfoldergif.src+" width=24 height=22 border=noborder></a>")
	else
		doc.write(closedfoldergif.src+" width=24 height=22 border=noborder></a>")
	doc.write("<td valign=middle align=left nowrap>")
	doc.write("<font size=-1 face='Arial, Helvetica'>"+foldersNode[4]+"</font>")
}

//redraws the left frame
function redrawTree()
{
       parent.menuFrame.MM_nbGroup('down','group1','menu7','images/left_0_340_map_hi.jpg',1)

var doc = parent.pgsimmainFrame.window.document

	doc.clear()
	doc.write("<body bgcolor=white onLoad=parent.menuFrame.MM_nbGroup('down','group1','menu7','images/left_0_340_map_hi.jpg',1)>")	
	doc.write("<font face=arial size=4><b>PgSim Sitemap</b></font><BR><BR>")
	doc.write("<font face=arial size=2>Klik op een van de knooppunten om de structuur van de site te bekijken of op de koppelingen om naar de betreffende pagina te springen:</font><BR><BR>")
	parent.redrawNode(parent.foldersTree, doc, 0, 1, "")
	doc.close()
}

//**********************+
// Recursive functions

//when a parent is closed all children also are
function closeFolders(foldersNode)
{
var i=0

        if (!foldersNode[2])
	{
        	for (i=5; i< foldersNode.length; i++)
	           	closeFolders(foldersNode[i])

	}
        foldersNode[0] = 0
        foldersNode[1] = 0
}

//recursive over the tree structure
//called by openbranch
function clickOnFolderRec(foldersNode, folderName)
{
var i=0

        if (foldersNode[3] == folderName)
	{
		if (foldersNode[0])
			closeFolders(foldersNode)
		else
		{
			foldersNode[0] = 1
                	foldersNode[1] = 1
		}
	}
	else
	{
        	if (!foldersNode[2])
        		for (i=5; i< foldersNode.length; i++)
	           		clickOnFolderRec(foldersNode[i], folderName)
	}
}


// ********************
// Event handlers

//called when the user clicks on a folder
function openBranch(branchName)
{
	clickOnFolderRec(foldersTree, branchName)
	if (branchName=="Sitemap (Test)" && foldersTree[0]==0)
		parent.location="main.htm"
	timeOutId = setTimeout("redrawTree()",100)
}

//called after this html file is loaded
function initializeTree()
{
	PreloadTreeImgs()
        while (linkgif == null) {};
	generateTree()
	redrawTree()
}

var foldersTree = 0
var timeOutId = 0
generateTree() //sometimes when the user reloads the document Netscape 3.01 does not trigger the onLoad event (!!)

