var Pseudocheckbox = new Class({

initialize: function(options){
	options = $merge({
		'ch':options.ch
	}, options)

	this.ch = options.ch;
	this.hdn = Class.empty;
	this.div = Class.empty;
	this.init();
},

init: function() {


	this.hdn = new Element('input' ,{
		'type': 'hidden',
		'name': this.ch.name,
		'value': this.ch.value
	});
	this.hdn.disabled = (!this.ch.checked);
	this.hdn.pseudocheckbox = this;
	this.hdn.enabling = this.enabling.bind(this);
	this.hdn.disabling = this.disabling.bind(this);

	this.hdn.injectBefore(this.ch);

	this.div = new Element('div', {
	    'class': (this.ch.checked ? (this.ch.disabled ? 'pseudocheckboxeschd': 'pseudocheckboxesch' ) : (this.ch.disabled ? 'pseudocheckboxesd':'pseudocheckboxes')),
		'disabled': this.ch.disabled,
		'checked': this.ch.checked
	});

	this.div.injectBefore(this.ch);

	$$('label').each(function(item){
			if(item.getProperty('for')==this.ch.id){
				//item.cloneEvents(this.ch, 'click');
				item.addEvent('click',this.div.fireEvent.pass(['click'],this.div));
			}
		}, this);

	//this.div.cloneEvents(this.ch, 'click');
	this.div.addEvent('click', this.pseudocheckboxClick.bind(this));
	if( typeof this.ch.onclick == 'function')
		this.div.addEvent('click', this.ch.onclick);
	this.ch.remove();
},

pseudocheckboxClick: function() {
	if(!this.div.disabled) {
		this.div.checked = !this.div.checked;
		this.hdn.disabled= !this.div.checked;
		this.div.toggleClass('pseudocheckboxesch');
		this.div.toggleClass('pseudocheckboxes');
	}
},

enabling: function() {
	this.div.disabled = false;
	if(this.div.checked) {
		this.div.removeClass('pseudocheckboxeschd');
		this.div.addClass('pseudocheckboxesch');
	} else {
		this.div.removeClass('pseudocheckboxesd');
		this.div.addClass('pseudocheckboxes');
	}
},

disabling: function() {
	this.div.disabled = true;
	if(this.div.checked) {
		this.div.removeClass('pseudocheckboxesch');
		this.div.addClass('pseudocheckboxeschd');
	} else {
		this.div.removeClass('pseudocheckboxes');
		this.div.addClass('pseudocheckboxesd');
	}
}

});

Pseudocheckbox.implement(new Events,new Options);