//****************************************************************
// 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
//
//       14 Jun 02 - for product menu
//

// Definition of class Folder
// *****************************************************************

function selFolder( folderDescription , hreference , folderType , itemType ) //constructor
{
  //constant data
  this.desc = "<font style=font-size:13px; font-color: #FFFFFF; background-color:#FFFFFF>" + folderDescription + "</font>";
  //this.desc = "<b>" + folderDescription + "</b>";
  this.pureDesc = "<u>"+folderDescription+"</u>";
  this.notePath = "";
  this.hreference = hreference;
  this.type = folderType;
  this.itemType = itemType;
  this.id = -1;
  this.navObj = 0;
  this.iconImg = 0;
  this.nodeImg = 0;
  this.isLastNode = 0;

  //dynamic data
  this.isOpen = true;
  //this.iconSrc = "../images/ftv2folderopen.gif";
  this.children = new Array;
  this.nChildren = 0;

  //methods
  this.initialize = selInitializeFolder;
  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 = selOutputFolderLink;
}

function setStateFolder( isOpen )
{
  var subEntries;
  var totalHeight;
  var fIt = 0;
  var i = 0;

  if ( isOpen == this.isOpen )
    return;

  if ( browserVersion == 2 ) { //NS4
    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 < selnEntries ; fIt++ )
      selIndexOfEntries[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 = "../images/ftv2mlastnode.gif";
      else
        folder.nodeImg.src = "../images/ftv2mnode.gif";
    //folder.iconImg.src = "../images/ftv2folderopen.gif";
    for( i = 0 ; i < folder.nChildren ; i++ )
      folder.children[i].display();
  }
  else {
    if ( folder.nodeImg )
      if (folder.isLastNode)
        folder.nodeImg.src = "../images/ftv2plastnode.gif";
      else
        folder.nodeImg.src = "../images/ftv2pnode.gif";
    //folder.iconImg.src = "../images/ftv2folderclosed.gif";
    for( i = 0 ; i < folder.nChildren ; i++ )
      folder.children[i].hide();
  }
} 
 
function hideFolder() 
{ 
  if ( browserVersion == 1 ) { //IE4
    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 selInitializeFolder( level , lastNode , leftSide , notePath , type )
{
  var j = 0;
  var i = 0;
  var numberOfFolders;
  var numberOfDocs;
  var nc;

  nc = this.nChildren;
  this.createIndex();
  if ( level != 0 )
    this.notePath = notePath + this.pureDesc + " &nbsp; ";
  else
    this.notePath = notePath;
  this.type = type + this.type;

  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='../images/ftv2mlastnode.gif' width='16' height='22' border='0'></a>" );
      leftSide = leftSide + "<img src='../images/ftv2blank.gif' width='16' height='22'>";
      this.isLastNode = 1;
    }
    else {
      this.renderOb( leftSide + auxEv + "<img name='nodeIcon" + this.id + "' src='../images/ftv2mnode.gif' width='16' height='22' border='0'></a>" );
      leftSide = leftSide + "<img src='../images/ftv2vertline.gif' width=16 height=22>" 
      this.isLastNode = 0;
    }
  else
    this.renderOb( "" );
  if ( nc > 0 ) {
    level++;
    for( i = 0 ; i < this.nChildren ; i++ ) {
      if ( i == this.nChildren - 1 ) 
        this.children[i].initialize( level , 1 , leftSide , this.notePath , this.type );
      else
        this.children[i].initialize( level , 0 , leftSide , this.notePath , this.type );
    }
  }
}

function drawFolder( leftSide )
{
  if ( browserVersion == 2 ) { //NS4
    if ( !doc.yPos )
      doc.yPos = 8;
    doc.write( "<layer id='folder" + this.id + "' top='" + doc.yPos + "' visibility='hiden'>" );
  }

  doc.write( "<table " );
  if ( browserVersion == 1 ) //IE4
    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'></a>" );
  doc.write( "</a>" );
  doc.write( "</td><td class='detail' 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 ) { //NS4
    doc.write( "</layer>" );
  } 
 
  if ( browserVersion == 1 ) { //IE4
    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 ) { //NS4
    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 selOutputFolderLink()
{
  if ( this.itemType == "M" && this.type != "S" )
    this.hreference = "";
  if ( this.hreference ) {
    if ( this.itemType == "K" )
      doc.write( "<a href='../productmenu/KitProdMenu.jsp?jobKind=&"+this.hreference+"' TARGET='main' " );
    else if ( this.type == "S" )
      doc.write( "<a href='../productmenu/SingleProdMenu.jsp?jobKind=&"+this.hreference+"' TARGET='main' " );
    else if ( this.type == "" )
      doc.write( "<a href='"+this.hreference+"' class='link' " );
    if ( browserVersion > 0 )
      doc.write( "onClick='javascript:clickOnFolder("+this.id+");'" );
    doc.write( ">" );
  }
  else
    doc.write( "<a>" );
}

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 selItem( itemDescription , itemLink ) // Constructor
{
  // constant data
  this.desc = "<font style=font-size:13px; font-color: #FFFFFF;>" + itemDescription + "</font>";
  this.pureDesc = itemDescription;
  this.notePath = "";
  this.link = itemLink;
  this.type = "";
  this.id = -1; //initialized in initalize()
  this.navObj = 0; //initialized in render()
  this.iconImg = 0; //initialized in render()
  //this.iconSrc = "../images/ftv2doc.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 ) { //IE4
    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 , notePath , type )
{
  this.createIndex();
  this.notePath = notePath;
  this.type = type;
  if ( level > 0 )
    if ( lastNode ) { //the last 'brother' in the children array 
      this.renderOb( leftSide + "<img src='../images/ftv2lastnode.gif' width='16' height='22'>" );
      leftSide = leftSide + "<img src='../images/ftv2blank.gif' width='16' height='22'>";
    } 
    else {
      this.renderOb( leftSide + "<img src='../images/ftv2node.gif' width='16' height='22'>" );
      leftSide = leftSide + "<img src='../images/ftv2vertline.gif' width='16' height='22'>";
    }
  else
    this.renderOb( "" );
}

function drawItem( leftSide )
{
  if ( browserVersion == 2 ) //NS4
    doc.write( "<layer id='item" + this.id + "' top='" + doc.yPos + "' visibility='hiden'>" );
     
  doc.write( "<table " );
  if ( browserVersion == 1 ) //IE4
    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( "</a>" );
  doc.write( "</td><td valign='middle' nowrap >" );
  if ( USETEXTLINKS )
    doc.write( "<a href=" + this.link + ">" + this.desc + "</a>" );
  else
    doc.write( this.desc );
  doc.write( "</table>" );

  if ( browserVersion == 2 ) //NS4
    doc.write( "</layer>" );
  if ( browserVersion == 1 ) { //IE4
    this.navObj = doc.all["item"+this.id];
    //this.iconImg = doc.all["itemIcon"+this.id];
  }
  else if ( browserVersion == 2 ) { //NS4
    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 ) //IE4
    this.navObj.style.display = "block";
  else
    this.navObj.visibility = "show";
}

function createEntryIndex()
{
  this.id = selnEntries;
  selIndexOfEntries[selnEntries] = this;
  selnEntries++;
}

// 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 = selIndexOfEntries[folderId];

  if ( !clicked.isOpen )
    clickOnNode( folderId );
  return;

  if ( clicked.isSelected )
    return;
}

function clickOnNode( folderId )
{
  var clickedFolder = 0;
  var state = 0;

  clickedFolder = selIndexOfEntries[folderId];
  state = clickedFolder.isOpen;

  clickedFolder.setState(!state); //open<->close
}

function selInitializeDocument()
{
  if ( doc.all )
    browserVersion = 1; //IE4
  else if ( doc.layers )
    browserVersion = 2; //NS4
  else
    browserVersion = 0; //other

  selFoldersTree.initialize( 0 , 1 , "" , "" , "" );
  selFoldersTree.display();

  if ( browserVersion > 0 ) {
    doc.write( "<layer top="+selIndexOfEntries[selnEntries-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 selgFld( description , hreference , type , itemType )
{
  folder = new selFolder( description , hreference , type , itemType );
  return folder;
}

function selgLnk( target , description , linkData )
{
  fullLink = "";

  if ( target == 0 ) {
    fullLink = "'"+linkData+"' target=main";
  }
  else {
    if ( target == 1 ) 
      fullLink = "'http://"+linkData+"' target=_top";
    else
      fullLink = "'http://"+linkData+"' target=main";
  }

  linkItem = new selItem( description , fullLink );
  return linkItem;
}

function selInsFld( parentFolder , childFolder )
{
  return parentFolder.addChild( childFolder );
}

function selInsDoc( parentFolder , document )
{
  parentFolder.addChild( document );
}

// Global variables
// ****************

USETEXTLINKS = 1;
selIndexOfEntries = new Array;
selnEntries = 0;
doc = document;
browserVersion = 0;
selectedFolder = 0;
