function unselectAllDisabled(nodeID)
{
	var CB = document.getElementsByTagName('input');
	if (CB != null){
		if (CB[0] == null)
		{
			if (CB.type == 'checkbox'){
				if	(CB.disabled && CB.id == nodeID){
					CB.checked = false;
					CB.disabled = false;
				}
			}
		}else{
			for (i=0;i<CB.length;i = i+1)
			{
				if (CB[i].type == 'checkbox')
				{
					if (CB[i].disabled && CB[i].id == nodeID)
					{
						CB[i].checked = false;
						CB[i].disabled = false;
					}
				}
			}
		}
	}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function getDownDelimitedTreeSelection(nodeID)
{
		var answer = ',____,';
		var CB = document.getElementsByTagName('input');
		if (CB != null){
		if (CB[0] == null)
		{
			if (CB.type == 'checkbox'){
				CB.checked = false;
				CB.disabled = false;
			}
		}else{
			for (i=0;i<CB.length;i = i+1)
			{
				if (CB[i].type == 'checkbox'){
					if (!CB[i].disabled && CB[i].checked && CB[i].id == nodeID)
					{
						answer = answer + CB[i].value+ ',';
					}
				}
			}
		}
	}
	return answer;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function getDelimitedTreeSelection(nodeID)
{
		var answer = ',____,';
		var CB = document.getElementsByTagName('input');
		if (CB != null){
		if (CB[0] == null)
		{
			if (CB.type == 'checkbox'){
				CB.checked = false;
				CB.disabled = false;
			}
		}else{
			for (i=0;i<CB.length;i = i+1)
			{
				if (CB[i].type == 'checkbox'){
					if (!CB[i].disabled && CB[i].checked && CB[i].id == nodeID)
					{
						var parts = CB[i].value.split('_');
						var j = 0;
						while (j<parts.length-1)
						{
							answer = answer + buildSubStringForTreeNode(parts,j) + ',';
							j = j+1;
						}				
					}
				}
			}
		}
	}
	return answer;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function buildSubStringForTreeNode(parts,ind)
{
		var index = ind +1;
		var k =1;
		var ans = parts[0];
		for (k=1;k<index;k = k+1)
		{
			ans = ans + 	'_' + parts[k];
		}
		return ans;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function javaError()
{
var a = 'a';
	eaefaf;
	var c='c';
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TreeViewSelectPathDown(nodeID,nodeValue,thisChecked,Disable)
{
	unselectAllDisabled(nodeID);
	var SelectedNodes = getDownDelimitedTreeSelection(nodeID);
	
	var CB = document.getElementsByTagName('input');
		if (CB != null){
			if (CB[0] == null){
				if (CB.type == 'checkbox'){
					if ( CB.Value.indexOf(nodeValue+'_') ==0 )
					{
						CB.checked = true;
						CB.disabled = true;
					}else{
						CB.checked = false;
						CB.disabled = false;
					}
				}
			}else{
				for (i=0;i<CB.length;i = i+1)	{
					if (CB[i].type == 'checkbox' && CB[i].id == nodeID){
							if ( isNodeSubOfSelection(CB[i],SelectedNodes)){
								CB[i].checked = true;
								CB[i].disabled = true;				
							}
					}
				}
			}
	}
	UpdateDisabledForTreeView(nodeID);
	updateDivForTree(nodeID);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function isNodeSubOfSelection(CB,SelectedNodes)
{
	var arr = SelectedNodes.split(',');
	for (qq = 0 ;qq< arr.length;qq++){
		if((CB.value.indexOf(arr[qq] + '_') == 0) && (arr[qq] != '') && (CB.value != arr[qq])){return true;}
	}
	return false;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TreeViewSelectPathUp(nodeID,nodeValue,thisChecked,Disable)
{
	var SelectedNodes = getDelimitedTreeSelection(nodeID);
	unselectAllDisabled(nodeID);
	
	var CB = document.getElementsByTagName('input');
		if (CB != null){
			if (CB[0] == null){
				if (CB.type == 'checkbox'){
					if ( SelectedNodes.indexOf(',' + CB.value + ',') > 0 )
					{
						CB.checked = true;
						CB.disabled = true;
					}else{
						CB.checked = false;
						CB.disabled = false;
					}
				}
			}else{
				for (i=0;i<CB.length;i = i+1)	{
					if (CB[i].type == 'checkbox' && CB[i].id == nodeID){
							if ( SelectedNodes.indexOf(',' + CB[i].value + ',') > 0 ){
								CB[i].checked = true;
								CB[i].disabled = true;				
							}
					}
				}
			}
	}
	UpdateDisabledForTreeView(nodeID);
	updateDivForTree(nodeID);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function selectTreeViewNode(nodeID,nodeArr,nodeVal,Disable)
{
	if (nodeArr[0] == null)
	{
		if (nodeArr.value == nodeVal)
			{
				nodeArr.checked = true;
				if (Disable) {nodeArr.disabled = true;}
			}
		}else{
		for (i=0;i<nodeArr.length;i = i+1)
		{
			var n = nodeArr[i];
			if (n.value == nodeVal)
			{
				n.checked = true;
				if (Disable) {n.disabled = true;}
				break;
			}
		}
	}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function UpdateDisabledForTreeView(nodeID) //Appends the hidden with the disabled ids
{
	var answer = '';
	var H = document.getElementById(nodeID.replace('_selected','_disabled'));
	var CBs = document.getElementsByTagName('input');
	for (z=0;z<CBs.length;z = z+1)
	{
		if (CBs[z].type ==  'checkbox' && CBs[z].id == nodeID){
			if (CBs[z].disabled){
				if (answer.length > 0) { answer = answer + ',';}
				answer = answer + CBs[z].value;
			}
		}
	}
	H.value = answer;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function updateDivForTree(nodeID) //update the side div with the names of selected nodes
{
	var DivForTree = document.getElementById('CatDivForTree');
	if (DivForTree == null) {return true;}
	while(DivForTree.firstChild) 
		{
			DivForTree.removeChild(DivForTree.firstChild);
		}
		

	var answer = '';
	var H = document.getElementById(nodeID.replace('_selected','_disabled'));
	var CBs = document.getElementsByTagName('input');
	for (z=0;z<CBs.length;z = z+1)
	{
		if (CBs[z].type ==  'checkbox' && CBs[z].id == nodeID){
			if (CBs[z].checked){
				//if (answer.length > 0) { answer = answer + '<br>';}
				DivForTree.appendChild(document.createTextNode(getAttribute(CBs[z],'info')));
				
				//DivForTree.appendChild(document.createElement('<br/>'));   - old one with brs
				DivForTree.appendChild(document.createElement('<a>'));
				DivForTree.lastChild.innerText = ', ';
				//answer = answer + CBs[z].info;
			}
		}
	}
//	DivForTree.appendChild(document.createTextNode(answer));
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function getAttribute(Node,AttribName)
{
	for (i=0; i<Node.attributes.length;i++)
	{
		if (Node.attributes[i].name.toLowerCase() == AttribName.toLowerCase())
		{
			return Node.attributes[i].value;
		}
	}
	return '';
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function openCBbyImage(image)
{
	var myP = image.parentNode;
	while (myP.tagName != 'SPAN'){
		myP = myP.parentNode;
	}
			var table = myP.childNodes[0];
			var tr = table.rows[0];
			var td = tr.cells[tr.cells.length-1];
			var iopen = td.childNodes[1];
			iopen.checked = true;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function closeCBbyImage(image)
{
	var myP = image.parentNode;
	while (myP.tagName != 'SPAN'){
		myP = myP.parentNode;
	}
			var table = myP.childNodes[0];
			var tr = table.rows[0];
			var td = tr.cells[tr.cells.length-1];
			var iopen = td.childNodes[1];
			iopen.checked = false;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function MyTreeViewOpenNode(image,spanID,childIDS,grandchildIDS)
{
	image.src = image.src.replace('closed','open');
				openCBbyImage(image);
				
				var spans1 = childIDS.split(',');
				var openIndex = 0;
				while (openIndex < spans1.length)
				{
						OpenTreeViewNodeRecursion(spanID,spans1[openIndex]);
						openIndex ++;
				}
	//image.scrollIntoView();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function OpenTreeViewNodeRecursion(spanID,NodeID)
{
			var sp = document.getElementById(spanID.replace('xxx',NodeID));
			if (sp != null){
								//sp.style.visibility = 'visible';
								sp.style.display = 'block';
								sp.style.position = '';
								var table = sp.childNodes[0];
								var tr = table.rows[0];
								var td = tr.cells[tr.cells.length-1];
								if (td != null){
								    //td.style.visibility = 'visible';
								    td.style.display = 'block';
								    }
								var iopen = td.childNodes[1];
								if (iopen != null)	{
										if (iopen.checked){
											var kids = getAttribute(sp,'childIDS');
											var spans2 = kids.split(',');
											for (i=0;i<spans2.length;i++)
											{	
												OpenTreeViewNodeRecursion(spanID,spans2[i]);
											}
										}
								}
			}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function MyTreeViewCloseNode(image,spanID,childIDS,grandchildIDS)
{
			image.src = image.src.replace('open','closed');
			closeCBbyImage(image);
						
			var spans = childIDS.split(',');
			for (i=0;i<spans.length;i++)
			{
					var sp = document.getElementById(spanID.replace('xxx',spans[i]));
					if (sp != null) {
							//sp.style.visibility = 'hidden';
							sp.style.display = 'none';
							sp.style.position = 'absolute';
							var table = sp.childNodes[0];
							var tbody = table.childNodes[0];
							var tr = table.rows[0];
							var td = tr.cells[tr.cells.length-1];
							if (td != null){
							    //td.style.visibility = 'hidden';
							    td.style.display = 'none';
							    }
							var iopen = td.childNodes[1];
					}
			}		
			HideGranchildren(spanID,grandchildIDS);
			//image.scrollIntoView();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function OpenGranchildren(spanID,grandchildIDS)
{
			//OpenGrandchilren Nodes
				var spans = grandchildIDS.split(',');
				for (i=0;i<spans.length;i++)
				{
						var sp = document.getElementById(spanID.replace('xxx',spans[i]));
						if (sp != null) {
								var table = sp.childNodes[0];
								var tr = table.rows[0];
								var td = tr.cells[tr.cells.length-1];
								if (isParentNodeOpen(spanID,spans[i]))
								{
												if (td != null) {
												    //td.style.visibility = 'visible';
												    td.style.display = 'block';
												    }
												//sp.style.visibility = 'visible';
												sp.style.display = 'block';
												sp.style.position = '';								
								}
						}
				}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function HideGranchildren(spanID,grandchildIDS)
{
			//OpenGrandchilren Nodes
				var spans = grandchildIDS.split(',');
				for (i=0;i<spans.length;i++)
				{
						var sp = document.getElementById(spanID.replace('xxx',spans[i]));
						if (sp != null) {
								var table = sp.childNodes[0];
								var tr = table.rows[0];
								var td = tr.cells[tr.cells.length-1];
								if (td != null) {
								    //td.style.visibility = 'hidden';
								    td.style.display = 'none';
								    }
								//sp.style.visibility = 'hidden';
								sp.style.display = 'none';
								sp.style.position = 'absolute';								
						}
				}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function isParentNodeOpen(spanID,nodeID)
{
	var sp = document.getElementById(spanID.replace('xxx',nodeID));
						if (sp != null) {
								var pID = getAttribute(sp,'parentNodeId');
								sp = document.getElementById(spanID.replace('xxx',pID));
								if (sp != null) {
										var table = sp.childNodes[0];
										var tr = table.rows[0];
										var td = tr.cells[tr.cells.length-1];
										var iopen = td.childNodes[1];
										if (iopen != null) {return iopen.checked;}
								}
						}
	return true;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function MyTreeViewChangeNode(image,spanID,childIDS,grandchildIDS)
{
	if (image.src.indexOf('closed') > 0)
	{
				//OPEN the node
				MyTreeViewOpenNode(image,spanID,childIDS,grandchildIDS);
	}else{
	
				//CLOSE the node
				MyTreeViewCloseNode(image,spanID,childIDS,grandchildIDS);
	}
}

