var moosmartform = new Class({
	options: {
		checkedClass: 'checked',
		uncheckedClass: 'unchecked',
		selectedClass: 'selected',
		unselectedClass: 'unselected'
	},
	initialize: function(options){
		this.labels = $$('label');
		this.inputs = $$('input');
		this.setOptions(options);
		this.initializeCheckboxes();
		this.initializeRadioInputs();
	},
	initializeCheckboxes: function(){
		this.inputs.filterByAttribute('type','=', 'checkbox').each(function(input, count){
			label = this.labels.filterByAttribute('for', '=', input.getProperty('name')).getLast();
			label = $pick(label, this.labels.filterByAttribute('for', '=', input.getProperty('id')).getLast());
			input.setStyle('display', 'none');
			
			label.addEvent('click', this.updateCheckboxes.bind(this).pass([label, input]));
			
			if(input.checked){
				label.toggleClass(this.options.checkedClass);
			}else{
				label.toggleClass(this.options.uncheckedClass);
			}
		}, this);
	},
	updateCheckboxes: function(label, input){
		if(window.ie){
			if(input.checked) input.checked = false;
			else input.checked = true;
		}
		label.toggleClass(this.options.uncheckedClass);
		label.toggleClass(this.options.checkedClass);
	},
	initializeRadioInputs: function(){
		this.inputs.filterByAttribute('type', '=', 'radio').each(function(input, count){
			label = this.labels.filterByAttribute('for', '=', input.getProperty('id')).getLast();
			input.setStyle('display', 'none');
			
			label.addEvent('click', this.updateRadioInputs.bind(this).pass([label,input]));
			
			if(input.checked){
				label.toggleClass(this.options.selectedClass);
			}else{
				label.toggleClass(this.options.unselectedClass);
			}
		}, this);
	},
	updateRadioInputs: function(label, input){
		this.inputs.filterByAttribute('name', '=', input.getProperty('name')).each(function(inp, count){
			label = this.labels.filterByAttribute('for', '=', inp.getProperty('id')).getLast();
			if(inp.getProperty('id') == input.getProperty('id')){
				if(window.ie){
					inp.setProperty('checked','true');
				}
				label.addClass(this.options.selectedClass);
				label.removeClass(this.options.unselectedClass);
			}else{
				if(window.ie){
					inp.setProperty('checked','false');
				}
				label.removeClass(this.options.selectedClass);
				label.addClass(this.options.unselectedClass);
			}
		}, this);		
	}
});
moosmartform.implement(new Options);

window.addEvent('domready', function(){
	var mymoosmart = new moosmartform();
});