var ImagesPath = '../images/';
var TextStyle = ' style="font-weight: plain; font-style: normal; font-size: 9px; font-family: Verdana; text-decoration: none;" ';

//--------------------------------------------------------------------
// Definition of class Folder 
//--------------------------------------------------------------------
function Folder(folderDescription, hreference, linktarget, ficon) //constructor 
{ 
  //constant data 
  this.desc = folderDescription;
  this.hreference = hreference;
  this.linktarget = linktarget;
  this.fldicon = ficon;
  this.id = -1;
  this.navObj = 0;
  this.iconImg = 0;
  this.nodeImg = 0;
  this.isLastNode = 0;
 
  //dynamic data 
  this.isOpen = true;
  this.iconSrc = ficon;
  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) folder.nodeImg.src = ImagesPath + "jtm_mlastnode.gif";
      else folder.nodeImg.src = ImagesPath + "jtm_mnode.gif";
    for (i=0; i<folder.nChildren; i++) folder.children[i].display();
  } 
  else 
  { 
    if (folder.nodeImg) 
      if (folder.isLastNode) 
        folder.nodeImg.src = ImagesPath + "jtm_plastnode.gif";
      else 
	  folder.nodeImg.src = ImagesPath + "jtm_pnode.gif";
    folder.iconImg.src = "";
    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 (browserVersion > 0) 
    auxEv = '<a href="javascript:clickOnNode('+this.id+')">';
  else 
    auxEv = '<a>';
 
  if (level>0) 
    if (lastNode) //the last 'brother' in the children array 
    { 
      this.renderOb(leftSide + auxEv + '<img name="nodeIcon' + this.id + '" src="'+ImagesPath+'jtm_mlastnode.gif" width="16" height="14" border="0"></a>');
      leftSide += '<img src="'+ImagesPath+'jtm_blank.gif" width="16" height="14" border="0">';  
      this.isLastNode = 1;
    } 
    else 
    { 
      this.renderOb(leftSide + auxEv + '<img name="nodeIcon' + this.id + '" src="'+ImagesPath+'jtm_mnode.gif" width="16" height="14" border="0"></a>');
      leftSide += '<img src="'+ImagesPath+'jtm_vertline.gif" width="16" height="14" border="0">'; 
      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="" BORDER="0" WIDTH="0" HEIGHT="0"></a>');
  
  
  doc.write('<IMG SRC="'+ImagesPath+'jtm_spacer.gif" WIDTH="2" HEIGHT="14" BORDER="0">');
  doc.write('</td><td valign=middle nowrap>');
  if (USETEXTLINKS) 
  { 
    this.outputLink();
    doc.write(TextStyle + '>' + 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="' + this.linktarget + '" ');

    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 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.itemlink = itemLink;
  this.id = -1; //initialized in initalize() 
  this.navObj = 0; //initialized in render() 
  this.iconImg = 0; //initialized in render() 
  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="'+ ImagesPath +'jtm_lastnode.gif" width="16" height="14" border="0">');
      leftSide += '<img src="'+ ImagesPath +'jtm_blank.gif" width="16" height="14" border="0">';
    } 
    else 
    { 
      this.renderOb(leftSide + '<img src="'+ ImagesPath +'jtm_node.gif" width="16" height="14" border="0">');
      leftSide += '<img src="'+ ImagesPath +'jtm_vertline.gif" width="16" height="14" border="0">';
    }
  }
  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.itemlink + '>');
  doc.write('<IMG SRC="'+ImagesPath+'jtm_spacer.gif" WIDTH="2" HEIGHT="2" BORDER="0">');
  doc.write('</a>');
  doc.write('</td><td valign="middle" nowrap>');
  if (USETEXTLINKS) 
	doc.write('<a href=' + this.itemlink + TextStyle +'>' + 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 
//--------------------------------------------------------------------
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 += 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  
} 
//--------------------------------------------------------------------
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();
  
  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) 
{ 
  var hreference = 0;
  var linktarget = 0;
  folder = new Folder(description, hreference, linktarget, "");
  return folder;
} 
 
//--------------------------------------------------------------------
//Opzioni:
// 0: apre la pagina sulla dir corrente e sul frame linktarget
// 1: apre la pagina con l'URL completo e sul frame linktarget
//--------------------------------------------------------------------
function gLnk(description, linkData, linktarget) 
{ 
  var itemIMG = ImagesPath + "jtm_doc1.gif";
  fullLink = '"'+linkData+'" target="'+linktarget+'"';
  linkItem = new Item(description, fullLink, itemIMG);
  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;

//--------------------------------------------------------------------
// END OF SCRIPT
//--------------------------------------------------------------------