(function($) {
$.fn.jConfCheckBox = function(o) {
	o = $.extend({
        squareClass: 'square',
        activeClass: 'active',
        change: null
    }, o || {});

    return this.each(function() {
        var obj = $(this);
        var fieldname = '';

		$('input', obj).each(function() {
			var self = $(this);

			if (self.attr('type') != 'checkbox')
				return;

			var container = null;
			self.unbind('click');

			var label = $('label[for="' + this.id + '"]', obj);
			var span = null;
			var form = self[0].form;

			if (label) {
				label.attr('for', '');

				span = $('<span>').prependTo(label);
				span.addClass(o.squareClass);

				container = $('<input type="hidden">').insertAfter(label);
				container[0].name = this.name;
				container[0].value = this.value;

				if (!this.checked) {
					container[0].disabled = true;
					span.removeClass(o.activeClass);
				} else
					span.addClass(o.activeClass);

				label.bind('click', {obj: container, lab: span}, function(event) {
					event.data.obj[0].disabled = !event.data.obj[0].disabled;

					if (event.data.obj[0].disabled)
						event.data.lab.removeClass(o.activeClass);
					else
						event.data.lab.addClass(o.activeClass);

					if (o.change)
						o.change.call(this, event.data.obj[0].form, event.data.obj[0].name, event.data.obj[0].disabled ? null : event.data.obj[0].value);
				});

				self.remove();
			}
		});
    });
};
})(jQuery);
