// The only code that needs to be modified is the LoadTree function and the value of "Main" above.  
// See comments in Node fuction for more information.  
// Visit http://lapeer.org/ to see how the following code looks.  

// Created by: Patrick Gormley
//						Lapeer East high School
//						Lapeer Michigan 48446
//						June 1999

var doc; // global constant
var div;
var htmlMenu="";
var Main="Gestione profilo";
var folderNode=0;

var curSelNode;		// current selected node
var treeStatusStr=new String();	// contains the status of each item

var nodeImage=new Image()
var lastNodeImage=new Image()
var vLineImage=new Image()
var blankImage=new Image()
var docImage=new Image()
var linkImage=new Image()
var openFolderImage= new Image()
var closedFolderImage= new Image()
var lockFolderImage= new Image()
var lockOpenFolderImage= new Image()
var openFolderImageFile= new Image()
var closedFolderImageFile= new Image()
var openFolderImageSottPro= new Image()
var closedFolderImageSottPro= new Image()


// Object definition for Node follows
function Node (parent,level,folder,name,id,frame,link,icon)
// parent:  the parent node
// level:  Which level this node will be at (1-4 allowed)
// folder: Controls the icon displayed (0=file icon; 1=folder icon)
// name: Name to be displayed to the right of this icon
// frame:  Which frame this page will be displayed in (0=new frame; 1=right frame)
// link:  the link to the page
// icon: type of file icon to be displayed for the link (0=link icon; 1=file icon)
//   Note:  0 for a link icon is used for pages on another server, 1 for pages on your server)
{

	function ToggleFolder ()
	{
		
		//this.state=(this.state +1) % 2;		// 0=closed, 1=open. 
		if (this.state==1) this.state=0;
		else this.state=1;
		
		if (this.level==0)
			this.table[this.level]="<TR><TD valign = middle wrap>" + PrepareFolderIcon(this);	
		else {
			if((this.level==1)||(this.level==2)) this.table[this.level]=PrepareFolderIcon(this);	
			else  this.table[this.level]=PrepareDocIcon(this);
		}
	}  

	function WriteMe_OLd ()
	{
		var i=0;
		var tableBgn="<TABLE border=0 cellspacing=0 cellpadding=0>";
		var tableEnd="</table>";
		doc.write(tableBgn);
		while (this.table[i]!=0) 
		{
			doc.write(this.table[i]);
			i++;
		}
		doc.write(tableEnd);
	}
	
	function WriteMe ()
	{
		var i=0;
		var tableBgn="<TABLE border=0 cellspacing=0 cellpadding=0>";
		var tableEnd="</table>";
		htmlMenu+=tableBgn;
		while (this.table[i]!=0) 
		{
			htmlMenu+=this.table[i];
			i++;
		}
		htmlMenu+=tableEnd;
	}
	
	//Object Definition 
	
	this.level=level;	//level of this icon
	this.folder=folder;  // 0=file; 1=folder
	this.link=link;			//HREF link
	this.frame=frame;  // Which frame this file should open in.  0=new, 1=right.
	this.name=name; // name of this icon.
	this.id=id; // item unque id
	this.icon=icon;	// 0=link icon; 1=doc icon
	this.last=0;	// 0=not last icon in this level (initial value); 1=last icon in this level.
	this.table=new Array; // a table of things to write out
	this.table[0]=level;  // which level this icon is to be printed at
	if((this.level==0)||(this.level==2)) this.state=1;
	else this.state=0;  // Folder only.  0=closed; 1=open.  Initially closed
	this.list=new Array;  // Folder only.  List of icons in this folder. 
		this.list[0]=0;  // Initially empty.
	this.ToggleFolder=ToggleFolder;  // Folder Only.  Fuction which toggles a folder's open state.
	this.WriteMe=WriteMe	//Method to write out
	for (var i=1;i<=7;i++) { this.table[i]=0;}	//initialize table
	if (parent!=null)
		parent.list[parent.list.length]=this;	//si aggiunge in coda alla list del parent
//	PackPrArray(this);
	
} // End of Node definition

function PrepareFolderIcon_old (theNode)
{
	var openFolder="<IMG src="+openFolderImage.src + " width=24 height=22 border=noborder>";
	var closedFolder="<IMG src="+closedFolderImage.src + " width=24 height=22 border=noborder>";
	var endAHREF="</A>", temp=0;

	if (theNode.state==0)
//		{temp="<A href='javascript:top.OpenBranch(\""+theNode.id + "\")\'>"+closedFolder+endAHREF;}
		{temp="<A href='javascript:this.OpenBranch(\""+theNode.id + "\")\'>"+closedFolder+endAHREF;}
	else
//		{temp="<A href='javascript:top.OpenBranch(\""+theNode.id + "\")\'>"+openFolder+endAHREF;}
		{temp="<A href='javascript:this.OpenBranch(\""+theNode.id + "\")\'>"+openFolder+endAHREF;}
	return(temp);
}

function PrepareFolderIcon (theNode)
{
	//alert(theNode.name+':livello '+theNode.level);
    switch (theNode.level){  
	       case 2  : var openFolder="<IMG src="+openFolderImageSottPro.src + " width=24 height=22 border=noborder>";
				     var closedFolder="<IMG src="+closedFolderImageSottPro.src + " width=24 height=22 border=noborder>";	 	
	                 break;
					 
           case 1  : var openFolder="<IMG src="+openFolderImage.src + " width=24 height=22 border=noborder>";
			         if(theNode.link=='alert')
    	               var closedFolder="<IMG src="+lockFolderImage.src + " width=24 height=22 border=noborder>";	 
	                 else 
	                   var closedFolder="<IMG src="+closedFolderImage.src + " width=24 height=22 border=noborder>";	
			         break;
					 
	       default : if(theNode.link=='alert') {
  					   var openFolder="<IMG src="+lockOpenFolderImage.src + " width=24 height=22 border=noborder>";
					   var closedFolder="<IMG src="+lockFolderImage.src + " width=24 height=22 border=noborder>";	
					 } else {
					   var closedFolder="<IMG src="+closedFolderImage.src + " width=24 height=22 border=noborder>";	
					   var openFolder="<IMG src="+openFolderImage.src + " width=24 height=22 border=noborder>";
			         }
					 break;
	}
	/*
	if(theNode.level==2)
      var openFolder="<IMG src="+openFolderImageSottPro.src + " width=24 height=22 border=noborder>";
	else if(theNode.level==1)
	  var openFolder="<IMG src="+openFolderImage.src + " width=24 height=22 border=noborder>";
	else 
	  var openFolder="<IMG src="+openFolderImage.src + " width=24 height=22 border=noborder>";
	
	if(theNode.level==2)
	   var closedFolder="<IMG src="+closedFolderImageSottPro.src + " width=24 height=22 border=noborder>";	 
	else if(theNode.level==1) {
	   if(theNode.link=='alert')
    	 var closedFolder="<IMG src="+lockFolderImage.src + " width=24 height=22 border=noborder>";	 
	   else 
	     var closedFolder="<IMG src="+closedFolderImage.src + " width=24 height=22 border=noborder>";	 
	}
	else
	   var closedFolder="<IMG src="+closedFolderImage.src + " width=24 height=22 border=noborder>";
	*/
	var endAHREF="</A>", temp=0;
    var startAHREF="<A href=\"#\"";
	var pippo="pippo";
	
	if((theNode.level==2)){//(theNode.level==2)||
	//alert(theNode.name+' '+theNode.link);
    	if (theNode.state==0)
	//		{temp="<A href='javascript:top.OpenBranch(\""+theNode.id + "\")\'>"+closedFolder+endAHREF;}
			{temp="<A href='javascript:this.OpenBranch2(\""+theNode.id + "\",\""+ theNode.link +"\")\'>"+closedFolder+endAHREF;}
		else
	//		{temp="<A href='javascript:top.OpenBranch(\""+theNode.id + "\")\'>"+openFolder+endAHREF;}
			{temp="<A href='javascript:this.OpenBranch2(\""+theNode.id + "\",\""+ theNode.link +"\")\'>"+openFolder+endAHREF;}
		}
	else{
	//alert('deb3');	
		if (theNode.state==0)
	//		{temp="<A href='javascript:top.OpenBranch(\""+theNode.id + "\")\'>"+closedFolder+endAHREF;}
			{temp="<A href='javascript:this.OpenBranch(\""+theNode.id + "\")\'>"+closedFolder+endAHREF;}
		else
	//		{temp="<A href='javascript:top.OpenBranch(\""+theNode.id + "\")\'>"+openFolder+endAHREF;}
			{temp="<A href='javascript:this.OpenBranch(\""+theNode.id + "\")\'>"+openFolder+endAHREF;}
		
	}
	return(temp);
}

function PrepareDocIcon(theNode)
{
	var linkIcon="<IMG src= " + openFolderImageFile.src+ " width=24 height=22  border=0>";
	var docIcon="<IMG src= " + docImage.src + " alt='Opens in right frame' border=0>";
	var bTargetFrame="target=_blank>";
	var rTargetFrame="target=\"_self\">";//"target=_self>";
	var startAHREF="<A href=";
//	var jsHREF="onclick=\"top.OpenBranch('"+theNode.id+"')\" ";
	var jsHREF=" onclick=\"OpenBranch('"+theNode.id+"')\" ";
	var endAHREF="</A>";	
	var temp=0;
	
	temp=temp = startAHREF + "'"+ theNode.link +'&statusStr='+writeTreeStatus('',0) +"'"+ jsHREF;
	
	if (theNode.frame==0)
		temp = temp + bTargetFrame;
	else
		temp = temp + rTargetFrame;
		
	if (theNode.icon==1)
		temp = temp +docIcon + endAHREF;
	else
		temp = temp +linkIcon + endAHREF;
	
	return (temp);
}



function PackPrArray(theNode)
{
	var nodeCell="<TD valign = middle wrap><IMG src= " + nodeImage.src + " width=16 height=22>";
	var lnodeCell="<TD valign = middle wrap><IMG src= " + lastNodeImage.src + " width=16 height=22>";
	var verLineCell="<TD valign = middle wrap><IMG src= "+ vLineImage.src + " width=16 height=22>";
	var blankCell="<TD valign = middle wrap><IMG src="+ blankImage.src + " width=16 height=22>";
	var temp,temp1;
	var fontInfoBgn="<TD valign=middle align=left wrap><FONT size=-1 face='Arial, Helvetica'>"
	var fontInfoSelBgn="<TD valign=middle align=left wrap bgcolor=\"#ccffff\"><FONT size=-1 face='Arial, Helvetica'>"
	var fontInfoEnd="</FONT>"
	var tableBgn="";

	with (theNode)
 {
		if (folder==1)
			temp=PrepareFolderIcon(theNode);
		else
			temp=PrepareDocIcon(theNode);
	
		if (last==1)
	 	{		temp1=lnodeCell;
		}
	 	else
	 	{		temp1=nodeCell;
		}
				
		if ((state==1)&&(folder==0)) 
			fontInfoBgn=fontInfoSelBgn;
	 			
		switch (level)
		{
		
		case 0: 
			table[0]="<TR><TD valign = middle wrap>" +  PrepareFolderIcon(theNode);
			table[1]=fontInfoBgn+name+fontInfoEnd;
	 	break;
	 	
		case 1: 
			table[0]="<TR>"+temp1;
			table[1]=temp;	
			table[2]=fontInfoBgn+name+fontInfoEnd;
	 	break;
	 		
	 	case 2: 
	 		table[0]="<TR>"+verLineCell;
	 		table[1]=temp1;
	 		table[2]=temp
			table[3]=fontInfoBgn+name+fontInfoEnd;
	 		break;
	 			
		//l'uso di blankCell va bene solo per il caso specifico in cui c'č un solo elemento a questo livello;
		//una gestione pių generica richiede l'uso di variabili di stato per individuare l'ultimo nodo di ogni livello
	 	case 3:
	 		table[0]="<TR>"+verLineCell;
	 		table[1]=blankCell;	//verLineCell;  
	 		table[2]=temp1;
	 		table[3]=temp;
			table[4]=fontInfoBgn+name+fontInfoEnd;
	 	break;
	 		
	 	case 4:
	 		table[0]="<TR>"+verLineCell;
	 		table[1]=verLineCell;
	 		table[2]=verLineCell;
	 		table[3]=temp1;
	 		table[4]=temp;	
			table[5]=fontInfoBgn+name+fontInfoEnd;
	 	break;
	 	
	 	case 5:
	 		table[0]="<TR>"+verLineCell;
	 		table[1]=verLineCell;
	 		table[2]=verLineCell;
	 		table[3]=verLineCell;
	 		table[4]=temp1;
	 		table[5]=temp;	
			table[6]=fontInfoBgn+name+fontInfoEnd;
	 	break;

	 		}	//close switch
	}	//close with
}	//close function

function WriteOutNode(theNode)
{
	var k=theNode.list.length;
	theNode.WriteMe();
	if ((theNode.state==1) && (k>1))
		for (var i=1;i<k;i++)
			WriteOutNode(theNode.list[i]);
}

function RefreshScreen_old()
{
	doc.open();
	doc.write("<body bgcolor='white'>");
	WriteOutNode(folderNode);
	// doc.write("<table align=\"center\" border=\"0\" ><tr><td><input type=\"Button\" value=\"aggiorna\" onclick=\"window.location.href=('left.html')\"</td></tr></table>");
	doc.close();
}

function RefreshScreen()
{
    htmlMenu="";
	WriteOutNode(folderNode);
	//alert(htmlMenu);
	div.innerHTML=htmlMenu;
	//htmlMenu="";
	
}


function IdentifyLastChild(theNode)
{
	var k=theNode.list.length;
	
	if ((theNode.folder=1) && (k>1))
		{	
		theNode.list[k-1].last=1;	
		for (var i=1;i<k;i++)
			if (theNode.list[i].folder==1)
				IdentifyLastChild(theNode.list[i]);
		}
}


function PreparePrinting(theNode)
{
	var k=theNode.list.length;
	PackPrArray(theNode);
	if ((theNode.folder==1) && (k>1))
		for (var i=1;i<k;i++)
			PreparePrinting(theNode.list[i]);
}

function initializeTree()
{
//	doc=top.treeFrame.window.document;	// initialize global
	doc=window.document;	// initialize global
	div=doc.getElementById('tree');
	//alert(div.innerHTML);
	nodeImage.src="image/node.gif";
	lastNodeImage.src="image/lastnode.gif";
	vLineImage.src="image/vertline.gif";
	blankImage.src="image/blank.gif";
	docImage.src="image/doc.gif";
	linkImage.src="image/link.gif";
	
	openFolderImage.src="image/openfolder.gif";
	closedFolderImage.src="image/closedfolder.gif";
	lockFolderImage.src="image/lockfolder.gif";
    lockOpenFolderImage.src="image/lockopenfolder.gif";

	openFolderImageFile.src="image/openfolderF.gif";
	closedFolderImageFile.src="image/closedfolderF.gif";

	openFolderImageSottPro.src="image/openfolderS.gif";
	closedFolderImageSottPro.src="image/closedfolderS.gif";

//	top.treeFrame.LoadTree();
	LoadTree();
	readTreeStatus();
	IdentifyLastChild(folderNode);
	PreparePrinting(folderNode);
//	FindFolder(folderNode,Main).ToggleFolder();	//Opening Main folder 
	FindFolder(folderNode,Main).state=1;
	RefreshScreen();
}

function FindFolder(theNode,branchName)
{
	var node;
	var k=theNode.list.length;
	if (theNode.name==branchName) {
		node=theNode;
	} else
	//	if ((theNode.state==1) && (k>1)) {
		if (k>1) {
			for (var i=1;i<k;i++) {
				node=FindFolder(theNode.list[i],branchName);
				if(node!=null) return node;
			}
		}
	return node;
}

function FindFolderById(theNode,id)
{
	var node;
	var k=theNode.list.length;
	if (theNode.id==id) {
		node=theNode;
	} else
	//	if ((theNode.state==1) && (k>1)) {
		if (k>1) {
			for (var i=1;i<k;i++) {
				node=FindFolderById(theNode.list[i],id);
				if(node!=null) return node;
			}
		}
	return node;
}


function OpenBranch(branchId)
{
	var timeOutID,node;
    
    //alert('deb1');
	node=FindFolderById(folderNode,branchId);
	if(node.link=='alert')
	   alert('Attenzione!\r\nCompleta l\'inserimento della scheda anagrafica visualizzata a destra.\r\n Clicca su INVIA per confermare l\'inserimento.\r\n Clicca su ANNULLA per cancellare l\'operazione.');
	else {
	//alert('deb2');
	if(node!= null) {
		if(node.folder==0) {	//it's a doc, not a folder
			 if(curSelNode!= null) curSelNode.ToggleFolder();
			 curSelNode=node;	//memorizzo il nodo correntemente selezionato
			// alert('curse='+curSelNode.name);
		}
		node.ToggleFolder();
		PreparePrinting(folderNode);
		timeOutID=setTimeout("RefreshScreen()",5);	//avoids grey screen flicker
	}
	}
}

function OpenBranch2(branchId,link)
{
	var timeOutID,node;
   
  	node=FindFolderById(folderNode,branchId);
	if(node!= null) {
		if(node.folder==0) {	//it's a doc, not a folder
			 if(curSelNode!= null) curSelNode.ToggleFolder();
			 curSelNode=node;	//memorizzo il nodo correntemente selezionato
			// alert('curse='+curSelNode.name);
		}
		//node.ToggleFolder();
		PreparePrinting(folderNode);
		timeOutID=setTimeout("RefreshScreen()",5);	//avoids grey screen flicker
	}
	temp =  link +'&statusStr='+writeTreeStatus('',0);
	window.location.href=temp;
}

// ricostruisce lo stato del menų a partire dell'array treeStatus
function readTreeStatus() {

	var treeStatusArr = new Array();
	var status,name;
    if(treeStatusStr=='') treeStatusStr='0y1';
	//alert(treeStatusStr);
	treeStatusStr=treeStatusStr.replace("y","=");
	//alert('treeStatusStr= '+treeStatusStr);
	treeStatusArr=treeStatusStr.split('x');
	startNode=folderNode;
	for(i=0; i<treeStatusArr.length; i++) {
		id=new String(treeStatusArr[i]);
		status=id.substr((id.length-1),1);
		id=id.substr(0,(id.length-2));
		node=FindFolderById(startNode,id);
		// alert('name='+node.name+' id='+node.id+' state='+node.state);
		if(node!= null) {		
			if(node.folder==1) node.state=status;
			else if(node.id==curSelNode.id) node.state=1;
		}
	}

}

// genera la stringa treeStatus con lo stato corrente del menų
function writeTreeStatus_old() {

	var treeStatusArr = new Array();
	var status,name;

	treeStatusArr=treeStatusStr.split(':');
	startNode=folderNode;
	for(i=0; i<treeStatusArr.length; i++) {
		id=new String(treeStatusArr[i]);
		id=id.substr(0,(id.length-2));
		node=FindFolderById(startNode,id);
		treeStatusArr[i]=id+'='+node.state;
		//alert('name='+node.name+' id='+node.id+' state='+node.state);
	}
	treeStatusStr=String(treeStatusArr.join(':'));
	return treeStatusStr;
}

function writeTreeStatus(startNode,counter) {

	var i,k,c;
	if(startNode == '') startNode=folderNode;
	if(counter==0) { treeStatusStr=''; }
	else treeStatusStr+='x';
	c=counter+1;
	treeStatusStr+=startNode.id+'y'+startNode.state;
	k=startNode.list.length;
	if(k>1) {
		for(i=1; i<k; i++) {
			writeTreeStatus(startNode.list[i],c);
		}
	}	
	// alert('counter='+counter+' status '+treeStatusStr);
	return treeStatusStr;
}


function addItem(objName,parent,level,folder,name,id,frame,link,icon) {
	var str;
	str = objName+'= new Node('+parent+','+level+','+folder+','+name+','+id+','+frame+','+link+','+icon+')';
	eval(str);
}

function setTreeStatus(str) {
	// alert('str='+str);
	treeStatusStr=str;
}

function setCurSelItem(id) {
	var node;
	node=FindFolderById(folderNode,id);
	if(node!=null)  curSelNode=node;
}