function hcb_group_create(leader, container) {
	var l = $j(leader);
	var c = $j(container);
	
	var inholder = $j("<span class='hcb_group_holder' containerid='" + container + "'></span>");
	l.replaceWith(inholder).appendTo(inholder).hide();
	
	$j("<span class='hcb_group_full'></span>").bind("click", function(){ hcb_mark_none(inholder, c); }).appendTo(inholder);
	$j("<span class='hcb_group_half'></span>").bind("click", function(){ hcb_mark_all(inholder, c); }).appendTo(inholder);
	$j("<span class='hcb_group_none'></span>").bind("click", function(){ hcb_mark_all(inholder, c); }).appendTo(inholder);
	
	hcb_recalc_leader_state(inholder, c);

	c.find(".hcb_group_member").each(function(){
		var s = $j(this);
		var elholder = $j("<span class='hcb_member_holder' leaderid='" + leader + "' containerid='" + container + "'></span>");
		s.replaceWith(elholder).appendTo(elholder).hide();
		
		var member_full = $j("<span class='hcb_member_full'></span>").bind("click", function(){ hcb_unset(elholder, true); }).appendTo(elholder);
		var member_none = $j("<span class='hcb_member_none'></span>").bind("click", function(){ hcb_set(elholder, true); }).appendTo(elholder);

		s.bind("change", function() {
			if (s.attr("checked")) hcb_set(elholder, true);
			else hcb_unset(elholder, true);
		});

		if (s.attr("checked")) member_none.hide();
		else member_full.hide();
	});

	l.bind("change", function() {
		if (l.attr("checked")) hcb_mark_all(inholder, c);
		else hcb_mark_none(inholder, c);
	});
}
function hcb_recalc_leader_state(inholder, container) {
	var full = true;
	var none = true;
	
	container.find(".hcb_group_member").each(function(){
		if ($j(this).attr("checked")) none = false;
		else full = false;
	});
	
	var style_full = "none";
	var style_none = "none";
	var style_half = "none";
	
	if (full) style_full = "inline";
	else if (none) style_none = "inline";
	else style_half = "inline";
	
	inholder.find(".hcb_group_full").css({display: style_full});
	inholder.find(".hcb_group_half").css({display: style_half});
	inholder.find(".hcb_group_none").css({display: style_none});
}
function hcb_set(elholder, rec) {
	elholder.find("input").attr("checked", true);
	elholder.find(".hcb_member_full").show();
	elholder.find(".hcb_member_none").hide();
	if (rec) hcb_recalc_leader_state($j(elholder.attr("leaderid")).parent(), $j(elholder.attr("containerid")));
}
function hcb_unset(elholder, rec) {
	elholder.find("input").attr("checked", false);
	elholder.find(".hcb_member_full").hide();
	elholder.find(".hcb_member_none").show();
	if (rec) hcb_recalc_leader_state($j(elholder.attr("leaderid")).parent(), $j(elholder.attr("containerid")));
}
function hcb_mark_all(inholder, container) {
	container.find(".hcb_member_holder").each(function(){ hcb_set($j(this), false); });
	hcb_recalc_leader_state(inholder, container);
	inholder.find(".hcb_group_full").show();
	inholder.find(".hcb_group_half").hide();
	inholder.find(".hcb_group_none").hide();

}
function hcb_mark_none(inholder, container) {
	container.find(".hcb_member_holder").each(function(){ hcb_unset($j(this), false); });
	hcb_recalc_leader_state(inholder, container);
	inholder.find(".hcb_group_full").hide();
	inholder.find(".hcb_group_half").hide();
	inholder.find(".hcb_group_none").show();
}
