﻿var CheckBoxes=new Class({
	Implements:[Options],

	options:{
		checkboxClass:"checkbox"
	},

	initialize:function (labelsSelector,options) {
		this.setOptions(options);

		this.labels=$$(labelsSelector);
		this._setup();
	},
	_setup:function () {
		// TODO clean up code...
		// cache function
		var changeState=function (checked) {
			var input=this.retrieve("input");
			if (!$defined(checked)) {
				this.toggleClass("checked");
			}
			else {
				if (checked) this.addClass("checked");
				else this.removeClass("checked");
			}
			input.checked=this.hasClass("checked");
			if(input.click());
			    input.click();
		};

		this.labels
			.each(function (label,i) {
			
				if (label.retrieve("checkboxSetup")) return; label.store("checkboxSetup",true);
				label.store("changeState",changeState.bind(label));
				label.addEvent("click",function (e) {
					e.stop();
					label.retrieve("changeState")();
					
				});
				label
					.addClass(this.options.checkboxClass)
					.setProperty("for","#");
				
				var input=label.getElement("input") || $(label.getProperty("for"));
				label.store("input",input);
				input.store("label",label);
				if (label.retrieve("input").checked) label.addClass("checked");
				
			},this);
	}
});
CheckBoxes.setState=function (inputs,checked) {
	$$(inputs).setProperty("checked",checked).each(function (input) {
		var label=input.retrieve("label");
		if (label) label.retrieve("changeState")(checked);
	});
};


