//****************************************************************
// You are free to copy the "Folder-Tree" script as long as you 
// keep this copyright notice:
// Script found in: http://www.geocities.com/Paris/LeftBank/2178/
// Author: Marcelino Alves Martins (martins@hks.com) December '97.
//****************************************************************

//Log of changes:
//	17 Feb 98 - Fix initialization flashing problem with Netscape
//	
//	27 Jan 98 - Root folder starts open; support for USETEXTLINKS;
//								make the ftien4 a js file
//


// Definition of class Folder
// *****************************************************************

//constructor

function Folder(folderDescription, hreference, image){
	//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 = "../image/folderopen.gif";
	this.children = new Array;
	this.nChildren = 0;
	this.image = image;					// MIS Add

	//methods
	this.initialize = initializeFolder;
	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;
}

	function initializeFolder(level, lastNode, leftSide){
		var i=0;
		var nc = this.nChildren;

		this.createIndex();
		var auxEv = "<a href='javascript:clickOnNode("+this.id+")'>";
		if (level>0){
			//the last 'brother' in the children array
			if (lastNode){
				this.renderOb(leftSide + auxEv + "<img name='nodeIcon" + this.id + "' src='../image/mlastnode.gif' width=16 height=20 border=0></a>");
				leftSide = leftSide + "<img src='../image/blank.gif' width=16 height=20>" ;
				this.isLastNode = 1;
			}else{
				this.renderOb(leftSide + auxEv + "<img name='nodeIcon" + this.id + "' src='../image/mnode.gif' width=16 height=20 border=0></a>");
				leftSide = leftSide + "<img src='../image/vertline.gif' width=16 height=20>";
				this.isLastNode = 0;
			}
		}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 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 = "../image/mlastnode.gif";
					}else{
						folder.nodeImg.src = "../image/mnode.gif";
					}
					folder.iconImg.src = "../image/folderopen.gif";
				}
				for (i=0; i<folder.nChildren; i++){
					folder.children[i].display();
				}
			}else{
				if (folder.nodeImg){
					if (folder.isLastNode){
						folder.nodeImg.src = "../image/plastnode.gif";
					}else{
						folder.nodeImg.src = "../image/pnode.gif";
					}
		//			folder.iconImg.src = "../image/folderclosed.gif";
					folder.iconImg.src = "../image/" + folder.image + "Folder.gif";		// MIS Add
				}
				for (i=0; i<folder.nChildren; i++){
					folder.children[i].hide();
				}
			}
		}

	function addChild(childNode){
		this.children[this.nChildren] = childNode;
		this.nChildren++;
		return childNode;
	}

	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 drawFolder(leftSide){
//		if (browserVersion == 2){
//			if (!doc.yPos){
//				doc.yPos=8;
//			}
//			doc.write("<layer id='folder" + this.id + "' top=" + doc.yPos + " visibility=hiden>");
//		}
//		doc.write("<table  summary=\"tree\" ");
		doc.write("<table ");													// 8.2.0.2 (2022/06/24) HTML5廃止対応
		if (browserVersion == 1){
			doc.write(" id='folder" + this.id + "' style='position:block;' ");
		}
		doc.write(" border=0 cellspacing=0 cellpadding=0>");
		doc.write("<tr><td>");
		doc.write(leftSide);
		this.outputLink();
		doc.write("<img name='folderIcon" + this.id + "' ");
		doc.write("src='" + this.iconSrc+"' align=bottom border=0></a>");
		doc.write("</td><td valign=middle nowrap>");
		if (USETEXTLINKS){
			this.outputLink();
			doc.write(this.desc + "</a>");
		}else{
			doc.write(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){
			doc.write("<a href='" + this.hreference + "' TARGET=\"CONTENTS\" ");
//			if (browserVersion > 0){
				doc.write("onClick='javascript:clickOnFolder("+this.id+")'");
//			}
			doc.write(">");
		}else{
			doc.write("<a>");
		}
	//	doc.write("<a href='javascript:clickOnFolder("+this.id+")'>");
	}

	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)
// *************************************************************

// Constructor
function Item(itemDescription, itemLink, image){
	// 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.iconSrc = "../image/doc.gif";
	this.iconSrc = "../image/" + image + "File.gif"	;	// MIS Add
	
	// methods
	this.initialize = initializeItem;
	this.createIndex = createEntryIndex;
	this.hide = hideItem;
	this.display = display;
	this.renderOb = drawItem;
//	this.totalHeight = totalHeight;
}

	function initializeItem(level, lastNode, leftSide){
		this.createIndex();
		
		if (level>0){
			//the last 'brother' in the children array
			if (lastNode){
				this.renderOb(leftSide + "<img src='../image/lastnode.gif' width=16 height=20>");
				leftSide = leftSide + "<img src='../image/blank.gif' width=16 height=20>" ;
			}else{
				this.renderOb(leftSide + "<img src='../image/node.gif' width=16 height=20>");
				leftSide = leftSide + "<img src='../image/vertline.gif' width=16 height=20>";
			}
		}else{
			this.renderOb("");
		}
	}

	function hideItem(){
//		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";
//		}
	}

	function drawItem(leftSide){
//		if (browserVersion == 2){
//			doc.write("<layer id='item" + this.id + "' top=" + doc.yPos + " visibility=hiden>");
//		}
//		doc.write("<table summary=\"tree\" ");
		doc.write("<table ");													// 8.2.0.2 (2022/06/24) HTML5廃止対応
//		if (browserVersion == 1){
			doc.write(" id='item" + this.id + "' style='position:block;' ");
//		}
		doc.write(" border=0 cellspacing=0 cellpadding=0>");
		doc.write("<tr><td>");
		doc.write(leftSide);
		doc.write("<a href=" + this.link + ">");
		doc.write("<img id='itemIcon"+this.id+"' ");
		doc.write("src='"+this.iconSrc+"' border=0>");
		doc.write("</a>");
		doc.write("</td><td valign=\"middle\" nowrap=\"nowrap\">");
		if (USETEXTLINKS){
			doc.write("<a href=" + this.link + ">" + this.desc + "</a>");
		}else{
			doc.write(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
//used with browserVersion == 2
//function totalHeight(){
//	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
// *********************************************************

function clickOnFolder(folderId){
	var clicked = indexOfEntries[folderId];
	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;
	
	//open<->close 
	clickedFolder.setState(!state) ;
}

	function initializeDocument(){
		if (doc.all){
			browserVersion = 1 ;	//IE4	
		}else{
			if (doc.layers){
				browserVersion = 2 ;	//NS4
			}else{
				browserVersion = 0 ;	//other
			}
		}
		
//		foldersTree.initialize(0, 1, "");
//		foldersTree.display();
		aux0.initialize(0, 1, "");
		aux0.display();
		
//		if (browserVersion > 0){
			doc.write("<layer top="+indexOfEntries[nEntries-1].navObj.top+">&nbsp;</layer>");
			
			// close the whole tree
			clickOnNode(0);
			// open the root folder
			clickOnNode(0);
//		}
	}

// Auxiliary Functions for Folder-Treee backward compatibility
// *********************************************************

function gFld(description, hreference, image){
	folder = new Folder(description, hreference, image);
	return folder;
}

function gLnk(target, description, linkData, image){

//	fullLink = "";
//	
//	if (target==0){
//		fullLink = "'"+linkData+"' target=\"CONTENTS\"";
//	}else{
//		if (target==1){
//			 fullLink = "'http://"+linkData+"' target=_blank";
//		}else{
//			 fullLink = "'http://"+linkData+"' target=\"CONTENTS\"";
//		}
//	}

	fullLink = "'"+linkData+"' target=\""+target+"\"" 	;	// MIS Add
	linkItem = new Item(description, fullLink, image);
	return linkItem;
}

function insFld(parentFolder, childFolder) {
	return parentFolder.addChild(childFolder);
}
 
function insDoc(parentFolder, document){
	parentFolder.addChild(document);
} 

// Global variables
// ****************

USETEXTLINKS = 1;
indexOfEntries = new Array;
nEntries = 0;
doc = document;
browserVersion = 0;
selectedFolder=0;
