var treeArray = new Object();
function nothing(){
}

function treeInit(treeId, settings){
	//Check to see if we can use the DOM
	if(!document.getElementById) return;
	if(!document.getElementsByTagName) return;
	if(!document.createElement) return;
	
	//Get all the UL's in the Navigation
	var navigation = document.getElementById(treeId);
	var navSub = navigation.getElementsByTagName('ul');
	
	//Go through all of the sub items
	var navItems = navigation.getElementsByTagName('li');
	if(navItems){
		for(j=0; j<navItems.length; j++){
			var listItem = navItems[j];
			var isParent = false;
			if(navItems[j].getElementsByTagName('ul').length > 0){
			  isParent = true;
			}
			if((!isParent || settings.parentClickable) && settings.clickCallBack){
				// surround text with clickable span
				var span2 = document.createElement("a");
				span2.href = "javascript:void(0);";
				span2.id = "spanId_" + listItem.id;
				span2.onclick = settings.clickCallBack;
				span2.appendChild(listItem.firstChild);
				listItem.insertBefore(span2, listItem.firstChild);
			}else if(isParent && !settings.parentClickable){
				// This is a parent, we want this to act the same as the expand
				// button, but not be selectable towards the search list
				var span2 = document.createElement("a");
				span2.className = "expandableParentLink";
				//if using a span:
					//temp styles to be moved to allured.css for span.expandableParentLink
					//span2.style.cursor = "pointer";
					//span2.style.color = "";
				//if using an anchor tag:
				span2.href = "javascript:void(0);";
				span2.onclick = function() {
					toggleNav(treeId, this);
				}
				//needed code for both span or an a tag
				span2.id = "spanId_" + listItem.id;
				span2.appendChild(listItem.firstChild);
				listItem.insertBefore(span2, listItem.firstChild);
				//old code:
					//var span2 = document.createElement("span");
					//span2.id = "spanId_" + listItem.id;
					//span2.appendChild(listItem.firstChild);
					//listItem.insertBefore(span2, listItem.firstChild);
			}
		}
	}
	
	//Go through all the Sub Nav's - give them a hidden class, inject in the toggle graphic
	for (i=0; i<navSub.length; i++){
		
		//Create the Image to inject in
		var toggleImage = document.createElement('img');
		//toggleImage.setAttribute('src', settings.expandIcon);
		toggleImage.setAttribute('src', '../css/magSites/designImages/expand_icon.gif');
		toggleImage.style.cursor = "pointer";
		toggleImage.onclick = function() {
			toggleNav(treeId, this);
		}
		
		//Get the Parent of the UL, and insert the Image before the first child
		navSub[i].parentNode.insertBefore(toggleImage, navSub[i].parentNode.firstChild);	
		
		//Hide the Sub Navigation using a CSS Class and assign a class to the parent for styling
		navSub[i].style.display="none";
		navSub[i].parentNode.className = "expandable";

	}
	
	// Add this to global treeArray
	treeArray[treeId] = new Object();
	treeArray[treeId].settings = settings;
	treeArray[treeId].selectedOpts = new Array();
	
	if(settings.preSelect){
		for(k=0; k<settings.preSelect.length; k++){
			selectTreeOption(treeId, "spanId_" + settings.preSelect[k]);
		}
	}
}

/* returns the size of the tree array */
function addTreeOpt(treeId, id){
	treeArray[treeId].selectedOpts.push(id);
	return treeArray[treeId].selectedOpts.length;
}

function removeTreeOpt(treeId, index){
	treeArray[treeId].selectedOpts.splice(index, 1);
}

function selectTreeOption(treeId, nodeId){
	var selectLimit = -1;
	if(treeArray[treeId].settings.selectionLimit){
		selectLimit = treeArray[treeId].settings.selectionLimit;
	}
	if(selectLimit >= 1 && treeArray[treeId].selectedOpts.length >= selectLimit){
	    if(selectLimit > 1){
	      alert("Only a total of " + selectLimit + " selections can be made.");	
	    }else{
	      alert("Selections are limited to one. \nPlease remove your previous selection if you wish to change it.");
	    }
		return;
	}

	//update tree
	var index = addTreeOpt(treeId, nodeId) - 1;
	
	var value = document.getElementById(nodeId).parentNode.id;
	//determine label
	var pathArray = getTreePath(treeId, nodeId);
	
	var path = "";
	for(i=pathArray.length - 1; i >= 0; i--){
		path += document.getElementById("spanId_" + pathArray[i]).innerHTML;
		if(i - 1 >= 0){
			path += treeArray[treeId].settings.delim;
		}
	}
	
	//update interface
	var div = document.getElementById(treeArray[treeId].settings.selectionDivPrefix + treeId);
	div.innerHTML = div.innerHTML + "<div id='"+treeId+index
	              + "' class='ddSelectedOption'><p class='removeLink'><a href='javascript:void(0);' onClick='removeTreeOption(\""
	              + treeId + "\", \"" + index + "\")' class='ddSelectedOptionClose'>Remove</a></p><p class='category'>"
	              + path + "</p><input type='hidden' id='" + treeArray[treeId].settings.fieldPrefix + treeId + "' name='" + treeArray[treeId].settings.fieldPrefix + treeId + "' value='"
	              + value + "' /></div>";
	
}

function removeTreeOption(treeId, index){
	var opt = document.getElementById(treeId + index);
	var parent = opt.parentNode;
	parent.removeChild(opt);
	
	removeTreeOpt(treeId, index);
}

function toggleNav(treeId, whichOne){
	if (whichOne.getAttribute('id') == "expandAll") {
		var navigation = document.getElementById(treeId);
		var navigationULs = navigation.getElementsByTagName('ul');
		var allImages = navigation.getElementsByTagName('img');
		for (i = 0; i < navigationULs.length; i++) {
				navigationULs[i].style.display = "block";
				allImages[i].setAttribute('src', '../css/magSites/designImages/collapse_icon.gif')
		
		}
	}
	else if (whichOne.getAttribute('id') == "collapseAll"){
		var navigation = document.getElementById(treeId);
		var navigationULs = navigation.getElementsByTagName('ul');
		var allImages = navigation.getElementsByTagName('img');
			for (i = 0; i < navigationULs.length; i++) {
				navigationULs[i].style.display = "none";
				allImages[i].setAttribute('src', '../css/magSites/designImages/expand_icon.gif')
			}
	}
	else {
		var theParent = whichOne.parentNode;
		var theParentULs = theParent.getElementsByTagName('ul');
		var theParentImage = theParent.getElementsByTagName('img');
		
		//Grab just the first UL and the first toggle image so that sub-sub UL navs/image don't expand too
		if (theParentULs[0].style.display == "none") {
			theParentULs[0].style.display = "block";
			theParentImage[0].setAttribute('src', '../css/magSites/designImages/collapse_icon.gif');
		}
		else {
			theParentULs[0].style.display = "none";
			theParentImage[0].setAttribute('src', '../css/magSites/designImages/expand_icon.gif');
		}
	}
}

function getTreePath(treeId, nodeId){
	var item = document.getElementById(nodeId);
	var pathArray = new Array();
	var parent = item.parentNode;
	while(parent.id + "" != treeId.toString()){
		if(parent.tagName.toString() == 'LI'){
			pathArray.push(parent.id);
		}
		parent = parent.parentNode;
	}
	return pathArray;
};