//----------------------------------------------------------
// Folder Image & Node Image ¾ø´Â Script
// * AUTHOR      : jdpark@hanyang.ac.kr
// * DATE        : 2005³â 11¿ù 8ÀÏ
//----------------------------------------------------------

function Folder(folderDescription, hreference) //constructor
{
	
//	alert('Folder -----' + folderDescription + '--' + hreference);
	
	
    //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 = "";
    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 Folder2(folderDescription, hreference) //constructor
{
//	alert('Folder2-----' + folderDescription + '--' + hreference);
	
    //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 = "";
    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 = outputFolderLink2;
}

function Folder3(folderDescription, hreference) //constructor
{
//	alert('Folder3-----' + folderDescription + '--' + hreference);
	
    //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 = "";
    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 = outputFolderLink3;
}


function setStateFolder(isOpen)
{
  var subEntries;
  var totalHeight;
  var fIt = 0;
  var i = 0;
  
//alert('setStateFolder isOpen!!' + isOpen );

  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 = "http://www.hanyang.ac.kr/img/icon/icon.gif"
      else
        folder.nodeImg.src = "http://www.hanyang.ac.kr/img/icon/icon.gif"  // ³ëµå°¡ ¿­¸±¶§ ÀÌ¹ÌÁö
    
	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 = "http://www.hanyang.ac.kr/img/icon/125.gif"
        	} else {
        		folder.nodeImg.src = "http://www.hanyang.ac.kr/img/icon/icon.gif"
        	}
        
      } else {
      		if ( folder.nChildren > 0 ) {
        		folder.nodeImg.src = "http://www.hanyang.ac.kr/img/icon/125.gif"
        	} else {
        		folder.nodeImg.src = "http://www.hanyang.ac.kr/img/icon/icon.gif"
        	}
      }

	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 i = 0;
    var j = 0;

    var numberOfFolders;
    var numberOfDocs;
    var nc;

    nc = this.nChildren;
    this.createIndex();
 
    var auxEv = "";
 
    if(browserVersion > 0)
        auxEv = "<a href='javascript:clickOnNode("+this.id+")'>"
    else
        auxEv = "<a>"

//	alert('initializeFolder ' + level + ' - ' + lastNode + ' - ' + leftSide);

    if(level > 0) {
        if(lastNode) { //the last 'brother' in the children array 
           this.renderOb(leftSide + auxEv + "<img name='nodeIcon" + this.id + "' src='http://www.hanyang.ac.kr/img/icon/125.gif'  border=0></a>");
           leftSide = leftSide + "&nbsp;&nbsp;";
	   this.isLastNode = 1;
        } else {
            this.renderOb(leftSide + auxEv + "<img name='nodeIcon" + this.id + "' src='http://www.hanyang.ac.kr/img/icon/icon.gif'  border=0></a>");
            leftSide = leftSide + "&nbsp;&nbsp;";
	    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 height=20><td align=left width=20>")
  doc.write("&nbsp;")

  doc.write(leftSide)
  this.outputLink()
  doc.write("&nbsp;")

  doc.write("</a>")

  doc.write("</td><td align=left width=145>")

  doc.write("<DIV CLASS=\"fldrroot\">");
  if (USETEXTLINKS)
  {
    this.outputLink()
    doc.write(this.desc + "</a>")
  }
  else
    doc.write(this.desc)

  doc.write("</DIV>");



  doc.write("</td></tr>")
  doc.write("<tr><td colspan=2><img src=http://www.hanyang.ac.kr/img/icon/line.gif></td></tr>")
  
  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=\"basefrm\" ")
    if (browserVersion > 0)
      doc.write("onClick='javascript:clickOnFolder("+this.id+")'")
    doc.write(">")
  }
  else
    doc.write("<a href='javascript:clickOnFolder("+this.id+")'>")
}

function outputFolderLink2()
{
  if (this.hreference)
  {
    doc.write("<a href='" + this.hreference + "' TARGET=\"_new\" ")
    if (browserVersion > 0)
      doc.write("onClick='javascript:clickOnFolder("+this.id+")'")
    doc.write(">")
  }
  else
    doc.write("<a href='javascript:clickOnFolder("+this.id+")'>")
}

function outputFolderLink3()
{
  if (this.hreference)
  {
    doc.write("<a href='" + this.hreference + "' TARGET=\"_top\" ")
    if (browserVersion > 0)
      doc.write("onClick='javascript:clickOnFolder("+this.id+")'")
    doc.write(">")
  }
  else
    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, itemImg) // 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()

  // iconSrc¿¡ ÁöÁ¤µÇ´Â ÀÌ¹ÌÁö ÆÄÀÏÀ» °¢ ¾ÆÀÌÅÛ¿¡ ¸Â°Ô ÁöÁ¤ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù (¸ñÇ¥)
  this.iconSrc = itemImg;

  // 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=http://www.hanyang.ac.kr/img/main/kor/dot.gif vlign=top>&nbsp;")
      leftSide = leftSide + "&nbsp;"
	}
    else
    {
      this.renderOb(leftSide + " <img src=http://www.hanyang.ac.kr/img/main/kor/dot.gif vlign=top>&nbsp;")
      leftSide = leftSide + "&nbsp;"
	}
  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 height=18><td valign=top width=23>")
  doc.write(leftSide)


  if(this.link != "")
      doc.write("<a href=" + this.link + ">")


  if(this.link != "")
      doc.write("</a>")

  doc.write("</td><td width=120>")

  doc.write("<DIV CLASS=\"fldritem\">");
  if (USETEXTLINKS) {
  if(this.link != "")
        doc.write("<a href=" + this.link + "onMouseOver=javascript:window.status='';return true;" + ">" + this.desc + "</a>")
  else
    doc.write(this.desc)

  }
  else {
    doc.write(this.desc)
  }
  doc.write("</DIV>");

  doc.write("</table>")

 
  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)

//    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
  window.focus(0)
}

function clickOnNode3(folderId)
{
  var clickedFolder = 0
  var state = 0
 
  clickedFolder = indexOfEntries[folderId]
  state = clickedFolder.isOpen
 
//alert('clickOnNode3 state!!' + state );

  clickedFolder.setState(!state) //open<->close
 
  window.focus(0)
}

function initializeDocument()
{
//	alert('initializeDocument start!!');
	
    if(doc.all)
        browserVersion = 1; //IE4
    else if(doc.layers)
        browserVersion = 2; //NS4
    else
        browserVersion = 0; //other
 
    foldersTree.initialize(0, 1, "");
    foldersTree.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)
    
//	alert('initializeDocument end!!');

  }
}
function initializeDocument3()
{
//	alert('initializeDocument3 !!');
 
    foldersTree.initialize(0, 1, "");
//    foldersTree.display();
  
    if(browserVersion > 0) {
        doc.write("<layer top="+indexOfEntries[nEntries-1].navObj.top+">&nbsp;</layer>");

    // close the whole tree
//    clickOnNode3(0)

    // open the root folder
//  clickOnNode3(0)

  }
}


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

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


function gFldr2(description, hreference)
{
    folder2 = new Folder2(description, hreference);
    return folder2;
}

function gFldr3(description, hreference)
{
    folder3 = new Folder3(description, hreference);
    return folder3;
}

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

  fullLink = ""

  if (target==0)
  {
    if(linkData != "")
        fullLink = "'"+linkData+"' target=\"basefrm\""
    else
        fullLink = "";
  }
  else
  {
    if (target==1) {
       if(linkData != "")
           fullLink = "'"+linkData+"' target=\"_top\""
       else
           fullLink = "";
    }
    else if(target==3){
       if(linkData != "")
           fullLink = "'"+linkData+"' target=\"_new\""
       else
           fullLink = "";
    }
    else { // target == 2
       if(linkData != "")
           fullLink = "'http://"+linkData+"' target=\"basefrm\""
       else
           fullLink = "";
    }

  }
 
  linkItem = new Item(description, fullLink, itemImg)
  return linkItem
}

function insFldr(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;

