;jQuery.fn.niceCb = function(params){
    params = jQuery.extend({}, params);

    this.each(function(){
        var css_nice_cb = 'nice_cb';
        var css_nice_cb_checked = 'nice_cb_checked';
        if ( ('INPUT' == this.tagName) && ('checkbox' == jQuery(this).attr('type')) ) {

            (function(cb){
                cb.hide();

                var html_styled = '<a href="#" class="' + css_nice_cb + '"';
                var cb_id = cb.attr('id');

                if ( cb_id.length > 0 ) {
                    html_styled += ' id="nice_' + cb_id + '"';
                }

                html_styled += '></a>';

                var cb_s = jQuery(html_styled).insertBefore(cb);
                if (cb.is(':checked')) {
                    cb_s.addClass(css_nice_cb_checked);
                }
                else {
                    cb_s.removeClass(css_nice_cb_checked);
                }
                cb_s.click(function(e){
                    e.preventDefault();

                    var self = $(this);

                    if ( cb.is(':checked') ) {
                        jQuery(this).removeClass(css_nice_cb_checked);
                        cb.removeAttr('checked');

                        if (undefined !== params.onUnchecked) {
                            params.onUnchecked(cb, self);
                        }
                    }
                    else {
                        self.addClass(css_nice_cb_checked);
                        cb.attr('checked', 'checked');

                        if (undefined !== params.onChecked) {
                            params.onChecked(cb, self);
                        }
                    }
                });

                cb.change((function(cb_s_obj){
                    return function(){
                        var self = $(this);
                        if (self.is(':checked')) {
                            cb_s_obj.addClass(css_nice_cb_checked);
                        }
                        else {
                            cb_s_obj.removeClass(css_nice_cb_checked);
                        }
                    };
                })(cb_s));
            })
            (jQuery(this));
        }
    });

    return this;
}

