//Default variables
EXPLODED = 0
USE_FRAMES = 0
MENU_TARGET = ''
TEXT_WRAP = 1
MENU_ICON_PATH = '../../images/tree/'



//Other variables
indexOfEntries = new Array 
nEntries = 0 
browserVersion = 0 
selectedFolder=0
lastOpenedFolder=-1

doc = document
function Querystring(qs) { // optionally pass a querystring to parse
	this.params = new Object()
	this.get=Querystring_get
	
	if (qs == null)
		qs=location.search.substring(1,location.search.length)

	if (qs.length == 0) return

// Turn <plus> back to <space>
// See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
	qs = qs.replace(/\+/g, ' ')
	var args = qs.split('&') // parse out name/value pairs separated via &
	
// split out each name=value pair
	for (var i=0;i<args.length;i++) {
		var value;
		var pair = args[i].split('=')
		var name = unescape(pair[0])

		if (pair.length == 2)
			value = unescape(pair[1])
		else
			value = name
		
		this.params[name] = value
	}
}

function Querystring_get(key, default_) {
	// This silly looking line changes UNDEFINED to NULL
	if (default_ == null) default_ = null;
	
	var value=this.params[key]
	if (value==null) value=default_;
	
	return value
}
function initDocument(catid)
{ 
	var branch = catid;

  switch(navigator.family)
  {
    case 'ie4':
      browserVersion = 1 //IE4   
      break;
    case 'nn4':
      browserVersion = 2 //NS4 
      break;
    case 'gecko':
      browserVersion = 3 //NS6
      break;
	default:
	  browserVersion = 0 //other 
	  break;
  }      


  if (!USE_FRAMES && browserVersion == 2)
	browserVersion = 0;

  foldersTree.init(0, 1, "") 

  if (browserVersion == 2) 
  {
   doc.write("<layer id=\"tree\" top="+indexOfEntries[nEntries-1].navObj.top+">&nbsp;</layer>") 
  }

 if (!EXPLODED && browserVersion > 0)
  {
	clickOnNode(0) 
	clickOnNode(0) 

  }
 } 

function 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 
  this.isLastOpenedFolder = false
 
  //dynamic data 
  this.isOpen = true 
  this.iconSrc = MENU_ICON_PATH + "pixel.gif"   
  this.iconSrcClosed = MENU_ICON_PATH + "pixel.gif"   
  this.children = new Array 
  this.nChildren = 0 
 
  //methods 
  this.init = initFolder 
  this.setState = setStateFolder 
  this.addChild = addChild 
  this.createIndex = createEntryIndex 
  this.hideBlock = hideBlock
  this.hide = hideFolder 
  this.show = show 
  this.renderOb = renderFolder 
  this.totalHeight = totalHeight 
  this.subEntries = folderSubEntries 
  this.outputLink = outputFolderLink 
  this.blockStart = blockStart
  this.blockEnd = blockEnd
} 
 
function initFolder(level, lastNode, leftSide) 
{ 
  var j=0 
  var i=0 
  var numberOfFolders 
  var numberOfDocs 
  var nc 
  var nodeIconName = ""
      
  nc = this.nChildren 
   
  this.createIndex() 
 
  var fixEv = "" 
 
  if (browserVersion > 0) 
    fixEv = "<a class='treenode' href='javascript:clickOnNode("+this.id+")'>" 
  else 
    fixEv = "<a>" 
 
  if (level>0) 
    if (lastNode)
    { 
	  nodeIconName = MENU_ICON_PATH + "minus.gif"
	  if (this.nChildren == 0)
		 nodeIconName = MENU_ICON_PATH + "last.gif"
	  this.renderOb(leftSide + "<td valign=top>" + fixEv + "<img name='nodeIcon" + this.id + "' id='nodeIcon" + this.id + "' src='" + nodeIconName + "' width=11 height=12 border=0></a></td>") 
      leftSide = leftSide + "<td valign=top><img src='" + MENU_ICON_PATH + "pixel.gif' width=11 height=12></td>"  
      this.isLastNode = 1 
    } 
    else 
    { 
	  nodeIconName = MENU_ICON_PATH + "minus.gif"
	  if (this.nChildren == 0)
		nodeIconName = MENU_ICON_PATH + "item.gif"
      this.renderOb(leftSide + "<td valign=top background=" + MENU_ICON_PATH + "pixel.gif>" + fixEv + "<img name='nodeIcon" + this.id + "' id='nodeIcon" + this.id + "' src='" + nodeIconName + "' width=11 height=12 border=0></a></td>") 
      leftSide = leftSide + "<td valign=top background='" + MENU_ICON_PATH + "line.gif'  width=11 height=11><img src='" + MENU_ICON_PATH + "line.gif' width=11 height=12></td>" 
      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].init(level, 1, leftSide) 
      else 
        this.children[i].init(level, 0, leftSide) 
      } 
  } 
} 
 
function renderFolder(leftSide) 
{ 
  var idParam = "id='folder" + this.id + "'"

  if (browserVersion == 2 && !doc.yPos)
      doc.yPos=20 

  this.blockStart("folder")

  doc.write("<img src='../../images/common/px.gif' height='2'><tr>") 
  doc.write(leftSide) 
  doc.write ("<td valign=top>")
  doc.write("<img src=" + MENU_ICON_PATH + "pixel.gif height=2 width=2>")

  if (TEXT_WRAP)
	doc.write("</td><td valign=middle width=100%>") 
  else
	doc.write("</td><td valign=middle nowrap width=100%>") 

  this.outputLink() 
  doc.write(this.desc + "</a>") 

  doc.write("</td>")  

  this.blockEnd()
 
  if (browserVersion == 1)
  { 
    this.navObj = doc.all["folder"+this.id] 
    this.nodeImg = doc.all["nodeIcon"+this.id] 
  }
  else if (browserVersion == 2)
  { 
    this.navObj = doc.layers["folder"+this.id] 
    this.nodeImg = this.navObj.document.images["nodeIcon"+this.id] 
    doc.yPos=doc.yPos+this.navObj.clip.height 
  }
  else if (browserVersion == 3)
  { 
    this.navObj = doc.getElementById("folder"+this.id)
    this.nodeImg = doc.getElementById("nodeIcon"+this.id)
  } 
} 
 
function setStateFolder(isOpen) 
{ 
  var subEntries 
  var totalHeight 
  var fIt = 0 
  var i=0 
  var currentOpen
 
  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;
	
  if (!this.isOpen && this.isLastOpenedfolder)
  {
		lastOpenedFolder = -1;
		this.isLastOpenedfolder = false;
  }
  propagateChangesInState(this) 
} 
 
function propagateChangesInState(folder) 
{   
  var i=0 
  if (folder.isOpen) 
  { 
	if (folder.nodeImg && folder.nChildren > 0) 
	  if (folder.isLastNode) 
		folder.nodeImg.src = MENU_ICON_PATH + "minus.gif" 
	  else 
		folder.nodeImg.src = MENU_ICON_PATH + "minus.gif" 
	for (i=0; i<folder.nChildren; i++) 
	  folder.children[i].show() 
  } 
  else 
  { 
	if (folder.nodeImg && folder.nChildren > 0) 
	  if (folder.isLastNode) 
		folder.nodeImg.src = MENU_ICON_PATH + "plus.gif" 
	  else 
		folder.nodeImg.src = MENU_ICON_PATH + "plus.gif" 
	for (i=0; i<folder.nChildren; i++) 
	  folder.children[i].hide() 
  }  
} 
 
function hideFolder() 
{ 
  this.hideBlock()
  this.setState(0) 
} 
 
function outputFolderLink() 
{ 
  if (this.hreference) 
  { 
	 if (this.hreference != "../0")
	  {
		doc.write("<a class='treenode' href='" + this.hreference + "' target=" + MENU_TARGET) 
		doc.write(" onClick='javascript:clickOnFolder("+this.id+")'") 
		doc.write(">") 
	  }
	  else
	  {
		doc.write("<a class='treenode' href='javascript:clickOnNode("+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)
      se = se + this.children[i].subEntries() 
  } 
 
  return se 
} 
 
function Item(nodid, itemDescription, itemLink)
{ 
  this.nod = nodid
  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 = MENU_ICON_PATH + "pixel.gif" 
 
  this.init = initItem 
  this.createIndex = createEntryIndex 
  this.hide = hideBlock
  this.show = show 
  this.renderOb = renderItem 
  this.totalHeight = totalHeight 
  this.blockStart = blockStart
  this.blockEnd = blockEnd
} 
 
function initItem(level, lastNode, leftSide) 
{  
  this.createIndex() 
 
  if (level>0) 
    if (lastNode)
    { 
      this.renderOb(leftSide + "<td valign=top><img src='" + MENU_ICON_PATH + "last.gif' width=11 height=11></td>") 
      leftSide = leftSide + "<td valign=top><img src='" + MENU_ICON_PATH + "pixel.gif' width=11 height=11>"  
    } 
    else 
    { 
      this.renderOb(leftSide + "<td valign=top background=" + MENU_ICON_PATH + "line.gif><img src='" + MENU_ICON_PATH + "item.gif' width=11 height=11></td>") 
      leftSide = leftSide + "<td valign=top background='" + MENU_ICON_PATH + "line.gif' width=11 height=11><img src='" + MENU_ICON_PATH + "line.gif' width=11 height=11></td>" 
    } 
  else 
    this.renderOb("")   
} 
 
function renderItem(leftSide) 
{ 
  this.blockStart("item")

  doc.write("<tr>") 
  doc.write(leftSide) 
  doc.write("<td valign=top>") 
  doc.write("<img src=" + MENU_ICON_PATH + "pixel.gif height=2 width=3>")

  if (TEXT_WRAP)
    doc.write("</td><td valign=middle width=100%>") 
  else
    doc.write("</td><td valign=middle nowrap width=100%>") 
  

	var qs = new Querystring()
	var qsnod = qs.get("container")

//	if (this.nod == qsnod)
//		doc.write("<a class='treenode' href=" + this.link + "><b>" + this.desc + "</b></a>") 
//	else
		doc.write("<a class='treenode' href=" + this.link + ">" + this.desc + "</a>") 

  doc.write("</td>") 

  this.blockEnd()
 
  if (browserVersion == 1) { 
    this.navObj = doc.all["item"+this.id] 
  } else if (browserVersion == 2) { 
    this.navObj = doc.layers["item"+this.id] 
    doc.yPos=doc.yPos+this.navObj.clip.height 
  } else if (browserVersion == 3) { 
    this.navObj = doc.getElementById("item"+this.id)
  } 
} 
 
function hideBlock() 
{ 
  if (browserVersion == 1 || browserVersion == 3) { 
    if (this.navObj.style.display == "none") 
      return 
    this.navObj.style.display = "none" 
  } else { 
    if (this.navObj.visibility == "hidden") 
      return 
    this.navObj.visibility = "hidden" 
  }     
} 
 
function show() 
{ 
  if (browserVersion == 1 || browserVersion == 3) 
    this.navObj.style.display = "block" 
  else 
    this.navObj.visibility = "show" 
} 

function blockStart(idprefix) {
  var idParam = "id='" + idprefix + this.id + "'"

  if (browserVersion == 2) 
  { 
    doc.write("<layer "+ idParam + " top=" + doc.yPos + " visibility=show>") 
  }  
  
  if (browserVersion == 3) //N6 has bug on display property with tables
    doc.write("<div " + idParam + " style='display:block; position:block;'>")
     
  doc.write("<table border=0 cellspacing=0 cellpadding=0 width=100% ") 

  if (browserVersion == 1) 
    doc.write(idParam + " style='display:block; position:block; '>") 
  else
    doc.write(">") 
}

function blockEnd() {
  doc.write("</table>") 
   
  if (browserVersion == 2) 
    doc.write("</layer>") 
  if (browserVersion == 3) 
    doc.write("</div>") 
}
 
function createEntryIndex() 
{ 
  this.id = nEntries 
  indexOfEntries[nEntries] = this 
  nEntries++ 
} 
 
function totalHeight() //used with browserVersion == 2 
{ 
  var h = this.navObj.clip.height 
  var i = 0 
   
  if (this.isOpen) 
    for (i=0 ; i < this.nChildren; i++)  
      h = h + this.children[i].totalHeight() 
 
  return h 
} 


function clickOnFolder(folderId) 
{ 
	lastOpenedFolder = folderId
	
	var clicked = indexOfEntries[folderId] 

	if (!clicked.isOpen)
		clickOnNode(folderId) 

	if (lastOpenedFolder != -1)
		clickOnNode(lastOpenedFolder)

	if (clicked.nChildren==0)
	{
		lastOpenedFolder = folderId
		clicked.isLastOpenedfolder = true
	}
	if( document.layers)
		document.layers["test"].top = document.layers[document.layers.length-3].top + 20
} 

function clickOnNode(folderId) 
{ 
	var clickedFolder = indexOfEntries[folderId]  
	clickedFolder.setState(!clickedFolder.isOpen)
	if(folderId != 0 && document.layers)
		document.layers["test"].top = document.layers[document.layers.length-3].top + 20
}

// This functions are called from the contentscript, rendered in TreeBuilder.aspx
function gFld(description, hreference) 
{ 
  return new Folder(description, "../"+hreference) 
} 
 nodelink=3;
function gLnk(node, description, linkData) 
{  
	linkData = new String(linkData);
	return new Item(node, description, "'"+linkData+"' target=" + MENU_TARGET )  
} 
 
function insFld(parentFolder, childFolder) 
{ 
  return parentFolder.addChild(childFolder) 
} 
 
function insDoc(parentFolder, document) 
{ 
  return parentFolder.addChild(document) 
}
