
function CB4_OnClick(cb)
{
	var re = /checkbox_semichecked/g;
	cb.src = cb.src.replace(re, "checkbox_unchecked");

	if(!CB4_IsChecked(cb))
	{
		CB4_SetChecked(cb);
	}
	else	
	{
		CB4_SetUnChecked(cb);
	}

	CB4_CheckAll(cb);
	CB4_CheckCBAll(cb);

	if (cb.attributes["client_onclick"] != null)
		eval(cb.attributes["client_onclick"].nodeValue);
	
	return false;
}

function CB4_IsChecked(cb)
{
//	if (cb.attributes["ischecked"].nodeValue != true && cb.attributes["ischecked"].nodeValue != false)
//		cb.attributes["ischecked"].nodeValue = cb.attributes["ischecked"].nodeValue == "true";
	return cb.attributes["ischecked"] != null && (cb.attributes["ischecked"].nodeValue == "true" || cb.attributes["ischecked"].nodeValue == true);
}

function CB4_IsSemiChecked(cb)
{
//	if (cb.semichecked != true && cb.semichecked != false)
//		cb.semichecked = cb.semichecked == "true";
	return cb.attributes["semichecked"] && (cb.attributes["semichecked"].nodeValue == "true" || cb.attributes["semichecked"].nodeValue == true);
}

function CB4_SetChecked(cb)
{
	var re = /checkbox_unchecked/g;
	cb.src = cb.src.replace(re, "checkbox_checked");
	var re = /checkbox_semichecked/g;
	cb.src = cb.src.replace(re, "checkbox_checked");
	cb.attributes["ischecked"].nodeValue = true;
	cb.attributes["semichecked"].nodeValue = false;
	eval(cb.client_onstatechanged);
}

function CB4_SetUnChecked(cb)
{
	var re = /checkbox_checked/g;
	cb.src = cb.src.replace(re, "checkbox_unchecked");
	var re = /checkbox_semichecked/g;
	cb.src = cb.src.replace(re, "checkbox_unchecked");
	cb.attributes["ischecked"].nodeValue = false;
	cb.attributes["semichecked"].nodeValue = false;
	eval(cb.client_onstatechanged);
}

function CB4_SetSemiChecked(cb)
{
	var re = /checkbox_checked/g;
	cb.src = cb.src.replace(re, "checkbox_semichecked");
	re = /checkbox_unchecked/g;
	cb.src = cb.src.replace(re, "checkbox_semichecked");
	cb.attributes["semichecked"].nodeValue = true;
	cb.attributes["ischecked"].nodeValue = true;
	eval(cb.client_onstatechanged);
}

function CB4_CloneState(cb, sourcecb)
{
	if (CB4_IsChecked(sourcecb) && CB4_IsSemiChecked(sourcecb))
		CB4_SetSemiChecked(cb);
	else
		if (CB4_IsChecked(sourcecb))
			CB4_SetChecked(cb);
		else
			CB4_SetUnChecked(cb);
}

function CB4_MouseOver(cb)
{
	var re = /checked/g;
	cb.src = cb.src.replace(re, "checked_mouseover");
}

function CB4_MouseOut(cb)
{
	var re = /checked_mouseover/g;
	cb.src = cb.src.replace(re, "checked");
}

function CB4_GetCBID(cb)
{
	var re = /_imgCB/g;
	return cb.id.replace(re, "");
}

var CB4_filled = null;

function CB4_FillTree()
{
	CB4_filled = "filled";
	
	var ctrls = document.getElementsByTagName("input");
	
	for(var i=0; i < ctrls.length; i++)
	{
		var ctrl = ctrls[i];

		if (ctrl.attributes["parent_cb"] != null && ctrl.attributes["isnewcb"].nodeValue != null)
		{
			var parent = document.getElementById(ctrl.attributes["parent_cb"].nodeValue + "_imgCB");
//			alert(parent);
//			alert(ctrl.attributes["parent_cb"].nodeValue + "_imgCB");
			if (parent.child_cbs == null)
				parent.child_cbs = new Array();
			parent.child_cbs.push(ctrl);
		}
	}
}

function CB4_CheckAll(cb)
{
	if (CB4_filled == null)
		CB4_FillTree();

	if (cb.child_cbs == null)
		return;
		
	for(var i=0; i < cb.child_cbs.length; i++)
	{
		var ctrl = cb.child_cbs[i];
		if (CB4_IsChecked(cb))
		{
			if (!CB4_IsChecked(ctrl) || CB4_IsSemiChecked(ctrl))
				CB4_SetChecked(ctrl);
		}
		else
		{
			if (CB4_IsChecked(ctrl))
				CB4_SetUnChecked(ctrl);
		}
		CB4_CheckAll(ctrl);
	}
} 

function CB4_CheckCBAll(cb)
{
	if (cb.attributes["parent_cb"] != null && cb.attributes["isnewcb"].nodeValue != "")
	{
		var parent = document.getElementById(cb.attributes["parent_cb"].nodeValue + "_imgCB");
		CB4_SetState(parent);
	}
}

function CB4_SetState(cb)
{
	var count = 0;
	var checked = 0;
	var ctrls;

	for(var i=0; i < cb.child_cbs.length; i++)
	{
		var ctrl = cb.child_cbs[i];
		count++;
		if (CB4_IsChecked(ctrl) && !CB4_IsSemiChecked(ctrl))
			checked++;
		if (CB4_IsSemiChecked(ctrl))
			checked += 0.00000001;
	}

	if (checked == 0)
		CB4_SetUnChecked(cb);
	if (checked > 0 && checked < count)
		CB4_SetSemiChecked(cb);
	if (checked > 0 && checked == count)
		CB4_SetChecked(cb);
	CB4_CheckCBAll(cb);
} 

function CB4_GetSelected()
{
	var res = new Array();

	var ctrls = document.getElementsByTagName("input");
	
	for(var i=0; i < ctrls.length; i++)
	{
		var ctrl = ctrls[i];
		if (ctrl.attributes["parent_cb"] != null && ctrl.attributes["isnewcb"] != null 
			&& ctrl.child_cbs == null && CB4_IsChecked(ctrl))
		{
			res.push(ctrl);
		}
	}
	return res;
}

function CB4_SelectImage(img)
{
	var cbAll = document.getElementById(img.attributes["cbAll"].nodeValue + "_imgCB");
	if (CB4_IsChecked(cbAll))
		CB4_OnClick(cbAll);
		
	var cb = document.getElementById(img.attributes["cb"].nodeValue + "_imgCB");
	if (!CB4_IsChecked(cb))
		CB4_OnClick(cb);
}

function CB4_FillFormWithSelected(frm, prefix, cbs)
{
	if (cbs == null)
		cbs = CB4_GetSelected();

	var i = 0;
	while (i < frm.elements.length)
		if (frm.elements.item(i).id.indexOf(prefix) == 0)
			frm.removeChild(frm.elements.item(i));
		else
			i++;
			
	for (var i=0; i < cbs.length; i++)
	{
		var ctrl = cbs[i];
		var el = document.createElement("input");
		el.id = prefix + ctrl.id;
		el.name = prefix + ctrl.id;
		el.type = "hidden";
		el.value = "1";  
		frm.appendChild(el);
	}
	
}

function CB4_SelectCBs(frmName, all)
{
	CB4_FillTree();
	
	var frm = document.getElementById(frmName);

	var ctrls = document.getElementsByTagName("input");
	
	for(var i=0; i < ctrls.length; i++)
	{
		var ctrl = ctrls[i];
		if (ctrl.attributes["parent_cb"] != null && ctrl.attributes["isnewcb"] != null 
			&& ctrl.child_cbs == null)
		{
			if (all)
			{
				CB4_OnClick(ctrl);
			}
			else
				for(var j=0; j < ctrls.length; j++)
				{
					var hf = ctrls[j];
					if (hf.attributes["cbid"] != null)
					{
						if (hf.attributes["cbid"].nodeValue == ctrl.id)
							CB4_OnClick(ctrl);
					}
				}
		}
	}
}
