﻿var Checked = '1';
var UnChecked = '0';
var Undefined = '255';
   
function TriplestateCheckBoxHandler(chkBox, hiddenFieldId)
{
	var hiddenField = document.getElementById(hiddenFieldId);

	switch (hiddenField.value)
	{
		case Undefined:hiddenField.value = Checked;break;
		case Checked:hiddenField.value = UnChecked;break;
		case UnChecked:hiddenField.value = Checked;break;
	}

	var className;

	switch (hiddenField.value)
	{
		case Undefined:className = 'CheckBoxUnDefined';break;
		case Checked:className = 'CheckBoxChecked';break;
		case UnChecked:className = 'CheckBoxUnChecked';break;
	}
	chkBox.className = className;
	
	//companion aktualisieren
	if(chkBox.id.substring(0,5)=="cati_")
	companion=document.getElementById("catic_" + chkBox.id.substring(5));
	else companion=document.getElementById("cati_" + chkBox.id.substring(6));

	if (companion!=null) companion.className=className;

	var hiddenField2=hiddenField;

	if (hiddenField2.value==UnChecked)
	{
		while(hiddenField2.ParentID!="")
		{
			var o = document.getElementById("cati_" + hiddenField2.ParentID);
			
			if (o.className=="CheckBoxChecked") o.className="CheckBoxUnDefined";
			o = document.getElementById("catic_" + hiddenField2.ParentID);
			if (o!=null) if (o.className=="CheckBoxChecked") o.className="CheckBoxUnDefined";
			
			hiddenField2 = document.getElementById("cat_" + hiddenField2.ParentID);
			hiddenField2.value = Undefined;
		}
	}


if (hiddenField2.value==Checked)
	{
		while(hiddenField2.ParentID!="")
		{
			var o = document.getElementById("cati_" + hiddenField2.ParentID);
			
			if (o.className=="CheckBoxUnChecked") o.className="CheckBoxUnDefined";
			o = document.getElementById("catic_" + hiddenField2.ParentID);
			if (o!=null) if (o.className=="CheckBoxUnChecked") o.className="CheckBoxUnDefined";
			
			hiddenField2 = document.getElementById("cat_" + hiddenField2.ParentID);
			hiddenField2.value = Undefined;
		}
	}



	if (hiddenField.ChildIDs!="")
	{
		var ids=hiddenField.ChildIDs.split(',');
		for(var i=0;i<ids.length;i++)
			RecursiveSetNodes(ids[i],hiddenField.value);
	}

var o=GetRootItem(hiddenField);
if (AreAllSubNodesSelected(o)==true)RecursiveSetNodes(o.id.substring(4),Checked);
}

//-----------------------------
function RecursiveSetNodes(id,value)
{
var o=document.getElementById("cati_" + id);
var className;
switch (value)
{
case Undefined:className = 'CheckBoxUnDefined';break;
case Checked:className = 'CheckBoxChecked';break;
case UnChecked:className = 'CheckBoxUnChecked';break;
}
o.className=className;
o=document.getElementById("catic_" + id);
if (o!=null) o.className=className;

o=document.getElementById("cat_" + id);
o.value=value;


if (o.ChildIDs!="")
{
var ids=o.ChildIDs.split(',');
for(var i=0;i<ids.length;i++)
RecursiveSetNodes(ids[i],value);
}

}




//
function GetRootItem(o){while(o.ParentID!='') o = document.getElementById("cat_" + o.ParentID);return o;}

//
function AreAllSubNodesSelected(o)
{
if (o.value==UnChecked) return false;

var ids=o.ChildIDs.split(',');
for(var i=0;i<ids.length;i++)
{
o=document.getElementById("cat_" + ids[i]);
if(o!=null)
{
var f=AreAllSubNodesSelected(o);
if (f==false) return false;
}
}
return true;
}


function CheckAllNodes(el)
{
var bCheck=(el.checked ? true : false);
var o=document.getElementsByTagName("input");
for(var i=0;i<o.length;i++)
{
if (o[i].id.length==40)
 if(o[i].id.substring(0,4)=="cat_")
{
o[i].value=(bCheck==true ? Checked : UnChecked);
var img = document.getElementById("cati_"+o[i].id.substring(4));
img.className=(bCheck==true ? "CheckBoxChecked" : "CheckBoxUnChecked");
img = document.getElementById("catic_"+o[i].id.substring(4));
if (img!=null) img.className=(bCheck==true ? "CheckBoxChecked" : "CheckBoxUnChecked");
}
}
}
