//////////////////////////////////////////////////////////////////////////////////////////
//	  Name:	expandingList.js
//	Author:	Nick Langridge
//	  Date:	November 2002
//
//	Description: Expanding list object
//////////////////////////////////////////////////////////////////////////////////////////


//constructor
function ExpandingList(listName, imagePlus, imageMinus) {
	this.listName = listName
	this.imagePlus = imagePlus
	this.imageMinus = imageMinus
	this.expanded = new Array()
}

ExpandingList.prototype.expandAll = function() {
	//loop through all items and toggle if contractd
	var i = 1;
	while(document.getElementById(this.listName + i + "_handle")) {
		if (!this.expanded["node" + i]) this.toggle(i)
		i++
	}
}

ExpandingList.prototype.contractAll = function() {
	//loop through all items and toggle if expanded
	var i = 1;
	while(document.getElementById(this.listName + i + "_handle")) {
		if (this.expanded["node" + i]) this.toggle(i)
		i++
	}
}

ExpandingList.prototype.toggle = function(num) {
	//toggle expanded/contracted state of a single node

	//get HTML elements for list item
	var eleVisible = document.getElementById(this.listName + num + "_visible")
	var eleHidden  = document.getElementById(this.listName + num + "_hidden")
	var eleHandle  = document.getElementById(this.listName + num + "_handle")
	
	//swap image, and set expanded flag
	if (this.expanded["node" + num]) {
		//contract item
		eleHandle.src = this.imagePlus
		this.expanded["node" + num] = false //clear expanded flag
	}
	else {
		//expand item
		eleHandle.src = this.imageMinus
		this.expanded["node" + num] = true //set expanded flag for this node
	}
	//swap inner HTML of hidden/visible items
	var temp = eleVisible.innerHTML
	eleVisible.innerHTML = eleHidden.innerHTML
	eleHidden.innerHTML = temp
}	

ExpandingList.prototype.setNodeState = function(num, blnExpanded) {
	//set the state of single node
	if(document.getElementById(this.listName + num + "_handle")) {
		if (blnExpanded) {
			if (!this.expanded["node" + num]) this.toggle(num)
		} 
		else {
			if (this.expanded["node" + num]) this.toggle(num)
		}
	}
}

ExpandingList.prototype.copyState = function(sourceList) {
	//copy the state of an existing list
	var i = 1;
	while(document.getElementById(this.listName + i + "_handle")) {
		this.setNodeState(i, sourceList.expanded["node" + i])
		i++
	}
}