var CheckboxGroup = Class.create();

CheckboxGroup.prototype = {
	initialize: function( el ){
		this.el = $(el);
		var checkboxes = this.el.getElementsByTagName( 'input' );
		for( cc=0; cc<checkboxes.length; cc++ )
			if( checkboxes[cc].type == 'checkbox' )
				Event.observe( checkboxes[cc], 'click', this.__state_change.bind(this, checkboxes[cc]) );
	},
	__state_change: function( el ){
		if( el.checked && el.hasClassName( 'Any' ) )
			this.__checkAll();
		else if( !el.checked && el.hasClassName( 'Any' ) )
			this.__uncheckAll();
		else if( !el.checked && !el.hasClassName( 'Any' ) )
			this.__uncheckAny();
	},
	__checkAll: function(){
		var checkboxes = this.el.getElementsByTagName( 'input' );
		for( cc=0; cc<checkboxes.length; cc++ )
			if( checkboxes[cc].type == 'checkbox' )
				checkboxes[cc].checked = true;
	},
	__uncheckAll: function(){
		var checkboxes = this.el.getElementsByTagName( 'input' );
		for( cc=0; cc<checkboxes.length; cc++ )
			if( checkboxes[cc].type == 'checkbox' )
				checkboxes[cc].checked = false;
	},
	__uncheckAny: function(){
		var checkboxes = this.el.getElementsByTagName( 'input' );
		for( cc=0; cc<checkboxes.length; cc++ )
			if( checkboxes[cc].type == 'checkbox' && checkboxes[cc].hasClassName( 'Any' ) )
				checkboxes[cc].checked = false;
	}
}

CheckboxGroup.InitPage = function(){
	var groups = $$( '.CheckboxGroup' );
	for( pq=0; pq<groups.length; pq++ )
		new CheckboxGroup( groups[pq] );
}

Event.observe( window, 'load', CheckboxGroup.InitPage );
