//****************************************************************
// 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
// *****************************************************************

/*---  Å¬¸¯µÈ ºÐ·ùÀÇ ÇÏÀÌ¶óÀÌÆ® ±â´É Ãß°¡ -------------------*/
var bf_clicked;
var click_open = new Number(0);

var clicked_folder = "";

function mouse_click(font_id){
	if(bf_clicked != null){
		bf_clicked.color = 'black';
	}
	font_id.color = 'red';
	bf_clicked = font_id;
}

function mouse_over(font_id){
	font_id.color = "red";
}

function mouse_out(font_id){
	if(bf_clicked != font_id) {
		font_id.color = 'black';
	}
}
/*----------------------------------------------------------*/

function Folder(folderDescription, hreference, isFolder){ //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.isFolder = isFolder	//1ÀÌ¸é Æú´õ 0ÀÌ¸é ÆÄÀÏ

	//nobreak added
	this.absIconSrc = "";

	//dynamic data
	this.isOpen = true;
	this.iconSrc = ICON_SRC + "tree_close.gif";
	this.children = new Array
	this.nChildren = 0

	//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 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){//¸¶Á÷¸· Æú´õÀÌ¸é
				if(folder.nChildren > 0)//ÇÏÀ§Æú´õ°¡ ÀÖÀ¸¸é
					folder.nodeImg.src = ICON_SRC + "mlastnode.gif"
				else//ÇÏÀ§Æú´õ°¡ ¾øÀ¸¸é
					folder.nodeImg.src = ICON_SRC + "lastnode.gif"
			}else{//¸¶Áö¸· Æú´õ°¡ ¾Æ´Ï¸é
				if(folder.nChildren > 0)//ÇÏÀ§Æú´õ°¡ ÀÖÀ¸¸é
					folder.nodeImg.src = ICON_SRC + "mnode.gif"
				else//ÇÏÀ§Æú´õ°¡ ¾øÀ¸¸é
					folder.nodeImg.src = ICON_SRC + "node.gif"
			}
		}
		if(folder.absIconSrc == ""){
			if(folder.isFolder == 1)
				folder.iconImg.src = ICON_SRC + "tree_open.gif"
			else if(folder.isFolder == 0)
				folder.iconImg.src = ICON_SRC + "board.gif"
			else
				folder.iconImg.src = ICON_SRC + "board.gif"
		}else{
			folder.iconImg.src = folder.absIconSrc
		}
		for(i=0; i<folder.nChildren; i++){
			folder.children[i].display()
		}
	}else{
		if(folder.nodeImg){
			if(folder.isLastNode){
				if(folder.nChildren > 0)
					folder.nodeImg.src = ICON_SRC + "plastnode.gif"
				else
					folder.nodeImg.src = ICON_SRC + "lastnode.gif"
			}else{
				if(folder.nChildren > 0)
					folder.nodeImg.src = ICON_SRC + "pnode.gif"
				else
					folder.nodeImg.src = ICON_SRC + "node.gif"
			}
		}
		if(folder.absIconSrc == ""){
			if(folder.isFolder == 1)//Æú´õÀÌ¸é Æú´õ¸¦ 
				folder.iconImg.src = ICON_SRC + "tree_close.gif"
			else if(folder.isFolder == 0)//ÆÄÀÏÀÌ¸é ÆÄÀÏÀ»
				folder.iconImg.src = ICON_SRC + "board.gif"
			else if(folder.isFolder == 2)//¾Æ¹« ±â´ÉÀÌ ¾ø´Â°Í
				folder.iconImg.src = ICON_SRC + "nothing.gif"
		}else{
			folder.iconImg.src = folder.absIconSrc
		}
		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 == "hiden")
			return
		this.navObj.visibility = "hiden"
	}
	this.setState(0)
}

function initializeFolder(level, lastNode, leftSide){
	var j=0
	var i=0
	var numberOfFolders
	var numberOfDocs
	var nc

	nc = this.nChildren

	this.createIndex()

	var auxEv = ""


	if(nc > 0){//ÇÏÀ§Æú´õ°¡ Á¸ÀçÇÒ¶§¸¸ ¸µÅ©¸¦ ³Ö´Â´Ù
		if (browserVersion > 0){
			auxEv = "<a href='javascript:clickOnNode("+this.id+")' onfocus='blur()'>"
		}else{
			auxEv = "<a onclick='this.blur()'>"
		}
	}

	if(level>0)
    if(lastNode){ //the last 'brother' in the children array
		this.renderOb(leftSide + auxEv + "<img name='nodeIcon" + this.id + "' src='" + ICON_SRC + "mlastnode.gif' width=16 height=20 border=0></a>")
		leftSide = leftSide + "<img src='" + ICON_SRC + "blank.gif' width=16 height=20>"
		this.isLastNode = 1
	}else{
		this.renderOb(leftSide + auxEv + "<img name='nodeIcon" + this.id + "' src='" + ICON_SRC + "mnode.gif' width=16 height=20 border=0></a>")
		leftSide = leftSide + "<img src='" + ICON_SRC + "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 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 ")

	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+"' border=0 onclick='this.blur()'>")
	//doc.write("</a>")
	doc.write("</td><td valign=middle nowrap>")
	doc.write("&nbsp;")

	if(USETEXTLINKS){
		this.outputLink()
		//doc.write("<font size=2 face='Arial,±¼¸²'>" + this.desc + "</font>" + "</a>")
		//doc.write(this.desc+ "</a>")
		doc.write(this.desc)
	}else
		//doc.write("<font size=2 face='Arial,±¼¸²'>" + this.desc + "</font>")
    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=\"bm_body\" ")
		doc.write("<a style='cursor:hand' ")
		if(browserVersion > 0)
			if(this.id != 0)
				doc.write("onClick=\"javascript:clickOnFolder("+this.id+")\" ondblclick=\"javascript:clickOnNode("+this.id+")\"")
				//doc.write("onfocus='this.blur();'")
		doc.write(">")
	}else
		doc.write("<a>")
		//doc.write("<a href='javascript:clickOnFolder("+this.id+")'>")
}

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()
	//this.iconSrc = "http://images.webhard.co.kr/treeImages/doc.gif"
	this.iconSrc = ICON_SRC + "tree_close.gif"

	// methods
	this.initialize = initializeItem
	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 == "hiden")
			return
		this.navObj.visibility = "hiden"
	}
}

function initializeItem(level, lastNode, leftSide){
	this.createIndex()

	if (level>0)
		if (lastNode){ //the last 'brother' in the children array
			this.renderOb(leftSide + "<img src='" + ICON_SRC + "lastnode.gif' width=16 height=20>")
			leftSide = leftSide + "<img src='" + ICON_SRC + "blank.gif' width=16 height=20>"
		}else{
			this.renderOb(leftSide + "<img src='" + ICON_SRC + "node.gif' width=16 height=20>")
			leftSide = leftSide + "<img src='" + ICON_SRC + "vertline.gif' width=16 height=20>"
		}
	else{
		this.renderOb("")
	}
}

function drawItem(leftSide){
	if(browserVersion == 2){
		doc.write("<layer id='item" + this.id + "' top=" + doc.yPos + " visibility=hiden>")
	}
	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>")
	doc.write(leftSide)
	//doc.write("<a href=" + this.link + ">")
	doc.write("<img id='itemIcon"+this.id+"' ")
	doc.write("src='"+this.iconSrc+"' border=0 onclick='this.blur()'>")
	//doc.write("</a>")
	doc.write("</td><td valign=middle nowrap>")
	doc.write("&nbsp;")

	if(USETEXTLINKS)
		//doc.write("<a href=" + this.link + ">" + "<font size=2 face='Arial,±¼¸²'>" + this.desc + "</font>" + "</a>")
		doc.write("<a href=" + this.link + ">" + this.desc + "</a>")
	else
		//doc.write("<font size=2 face='Arial,±¼¸²'>" + this.desc + "</font>")
		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
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]

	//Æú´õ¸¦ Å¬¸¯ÇßÀ»¶§µµ ÇÏÀ§Æú´õ¸¦ º¸¿©ÁÙ·Á¸é ¾Æ·¡ ÁÖ¼®À» ¾ø¾Ø´Ù
	if(!clicked.isOpen)
		clickOnNode(folderId)
	//else
		//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 initializeDocument(idx){
	if (doc.all)
		browserVersion = 1 //IE4
	else
	if (doc.layers)
		browserVersion = 2 //NS4
	else
		browserVersion = 0 //other

	//aux0.initialize(0, 1, "")
	//aux0.display()
	//aux0.initialize(0, 1, "")
	//aux0.display()
	eval("aux"+rootCode).initialize(0, 1, "")
	eval("aux"+rootCode).display()
	
	if(browserVersion > 0){
		doc.write("<layer top="+indexOfEntries[nEntries-1].navObj.top+">&nbsp;</layer>")

		//clickOnNode(0)	//ÃÖ»óÀ§ Æú´õ ¿¬´Ù
		//clickOnNode(0)	//Ã³À½¿¡ »óÀ§ Æú´õ¸¸ º¸¿©ÁØ´Ù.
		clickOnNode(idx)	//ÃÖ»óÀ§ Æú´õ ¿¬´Ù
		clickOnNode(idx)	//Ã³À½¿¡ »óÀ§ Æú´õ¸¸ º¸¿©ÁØ´Ù.
	}
}

function open_all(){
	for(i=0 ; i<indexOfEntries.length ; i++){
		if(!indexOfEntries[i].isOpen){
			clickOnNode(i);
		}
	}
}

function close_all(){
	clickOnNode(0);
	clickOnNode(0);
}

// Auxiliary Functions for Folder-Treee backward compatibility
// *********************************************************
//ÇÏÀ§ Æú´õ
function gFld(description, hreference, isFolder){
	folder = new Folder(description, hreference, isFolder)
	return folder
}

//ÃÖ»óÀ§ Æú´õ
function gFld2(description, hreference, iconsrc){
	folder = new Folder(description, hreference, '1')
	folder.absIconSrc = iconsrc
	return folder
}

function gLnk(description, linkData){
	fullLink = "'"+linkData+"' target=\"main\""
	linkItem = new Item(description, fullLink)
	return linkItem
}

function gLnk2(description, linkData, iconsrc){
	fullLink = "'"+linkData+"' target=\"main\""
	linkItem = new Item(description, fullLink)
	linkItem.iconSrc = iconsrc
	return linkItem
}

//ÇÏÀ§Æú´õ Ãß°¡
function insFld(parentFolder, childFolder){
	return parentFolder.addChild(childFolder)
}

function insDoc(parentFolder, document){
	parentFolder.addChild(document)
}

function set_root_code(code){
	rootCode = code;
}

// Global variables
// ****************

USETEXTLINKS = 1
indexOfEntries = new Array
nEntries = 0
doc = document
browserVersion = 0
selectedFolder=0
rootCode = 0;