var Pseudocheckbox = new Class({

initialize: function(options){
	options = $merge({
		'ch':options.ch,
		'cssChecked':   		'pseudocheckboxesch',
		'css':					'pseudocheckboxes',
		'cssDisabled':  		'pseudocheckboxesd',		
		'cssDisabledChecked':   'pseudocheckboxeschd'		
	}, options)
	this.options = options;
	this.ch = options.ch;
	this.hdn = Class.empty;
	this.div = Class.empty;
	this.ch_onclick = Class.empty;
	this.init();
},

init: function() {

	if(this.ch.name!=this.ch.id) alert('El:'+this.ch+' have not equal property id and name');
	
	this.hdn = new Element('input' ,{
		'type': 'hidden',
		'name': this.ch.name,
		'id': this.ch.name,
		'value': (this.ch.checked ? 'true' : 'false')
	});
	this.hdn.pseudocheckbox = this;
	this.hdn.enable = this.enable.bind(this);
	this.hdn.disable = this.disable.bind(this);
	this.hdn.check = this.check.bind(this);

	this.hdn.injectBefore(this.ch);

	this.div = new Element('div', {
	    'class': (this.ch.checked ? (this.ch.disabled ? this.options.cssDisabledChecked: this.options.cssChecked ) : (this.ch.disabled ? this.options.cssDisabled:this.options.css)),
		'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.addEvent('click',this.div.fireEvent.pass(['click'],this.div)); 
			}
		}, this);

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

pseudocheckboxClick: function() {
	if(!this.div.disabled) {
		this.div.checked = !this.div.checked;
		this.hdn.value=this.div.checked ? 'true' : 'false';
		this.div.toggleClass(this.options.cssChecked);
		this.div.toggleClass(this.options.css); 
		this.ch_onclick();
	}
},

check : function(check) {
	if (!this.div.disabled) {
		this.div.checked = check;
		this.hdn.value = check ? 'true' : 'false';
		if (check) {
			this.div.removeClass(this.options.css);
			this.div.addClass(this.options.cssChecked);
		} else {
			this.div.removeClass(this.options.cssChecked);
			this.div.addClass(this.options.css);
		}
	}
},

enable: function() {
	this.div.disabled = false;
	if(this.div.checked) {
		this.div.removeClass(this.options.cssDisabledChecked);
		this.div.addClass(this.options.cssChecked);
	} else {
		this.div.removeClass(this.options.cssDisabled);
		this.div.addClass(this.options.css);		
	}
},

disable: function() {
	this.div.disabled = true;
	if(this.div.checked) {
		this.div.removeClass(this.options.cssChecked);
		this.div.addClass(this.options.cssDisabledChecked);
	} else {
		this.div.removeClass(this.options.css);
		this.div.addClass(this.options.cssDisabled);		
	}
}

});

Pseudocheckbox.implement(new Events,new Options);