/**
 * jQuery checkbox replacements
 *
 * Author: Johannes Wüller
 * Created On: 04.05.2010
 *
 * Usage:
 *    $("input[type=checkbox]").checkbox();
 */
(function() {

   // main function
   jQuery.fn.checkbox = function(options) {
      options = jQuery.extend({
         // default options
         classBase: "cb-checkbox"
      }, options || {});

      var updateFunctions = [];
      jQuery(this).each(function() {
         var me = jQuery(this).addClass(options.classBase);
         var overlay = jQuery("<div></div>").addClass(options.classBase+"-overlay");
         var updateStatus = function() {
            if (me[0].checked) {
               // check
               overlay.addClass(options.classBase+"-overlay-checked");
            } else {
               // uncheck
               overlay.removeClass(options.classBase+"-overlay-checked");
            }
         };
         updateFunctions.push(updateStatus);
         var changeStatus = function() {
            if (!me[0].checked) {
               // check
               me.attr("checked", "checked").change();
            } else {
               // uncheck
               me.removeAttr("checked").change();
            }
            updateStatus();
         };
         overlay.click(changeStatus);
         updateStatus(); // make sure to bring it to the current state
         me.change(function() {
            for (var i = 0; i < updateFunctions.length; i++) {
               updateFunctions[i].call(this);
            }
         }).after(overlay);
      });
   };

}());