text: /*
   * Gijgo Checkbox v1.9.13
   * http://gijgo.com/checkbox
   *
   * Copyright 2014, 2019 gijgo.com
   * Released under the MIT license
   */
  /* global window alert jQuery */
  /** 
   */
  gj.checkbox = {
      plugins: {}
  };
  
  gj.checkbox.config = {
      base: {
          /** The name of the UI library that is going to be in use. Currently we support only Material Design and Bootstrap. 
           */
          uiLibrary: 'materialdesign',
          
          /** The name of the icons library that is going to be in use. Currently we support Material Icons, Font Awesome and Glyphicons.
           */
          iconsLibrary: 'materialicons',
  
          style: {
              wrapperCssClass: 'gj-checkbox-md',
              spanCssClass: undefined
          }
          
      },
  
      bootstrap: {
          style: {
              wrapperCssClass: 'gj-checkbox-bootstrap'
          },
          iconsLibrary: 'glyphicons'
      },
  
      bootstrap4: {
          style: {
              wrapperCssClass: 'gj-checkbox-bootstrap gj-checkbox-bootstrap-4'
          },
          iconsLibrary: 'materialicons'
      },
  
      materialicons: {
          style: {
              iconsCssClass: 'gj-checkbox-material-icons',
              spanCssClass: 'gj-icon'
          }
      },
  
      glyphicons: {
          style: {
              iconsCssClass: 'gj-checkbox-glyphicons',
              spanCssClass: ''
          }
      },
  
      fontawesome: {
          style: {
              iconsCssClass: 'gj-checkbox-fontawesome',
              spanCssClass: 'fa'
          }
      }
  };
  
  gj.checkbox.methods = {
      init: function (jsConfig) {
          var $chkb = this;
  
          gj.widget.prototype.init.call(this, jsConfig, 'checkbox');
          $chkb.attr('data-checkbox', 'true');
  
          gj.checkbox.methods.initialize($chkb);
  
          return $chkb;
      },
  
      initialize: function ($chkb) {
          var data = $chkb.data(), $wrapper, $span;
  
          if (data.style.wrapperCssClass) {
              $wrapper = $('<label class="' + data.style.wrapperCssClass + ' ' + data.style.iconsCssClass + '"></label>');
              if ($chkb.attr('id')) {
                  $wrapper.attr('for', $chkb.attr('id'));
              }
              $chkb.wrap($wrapper);
              $span = $('<span />');
              if (data.style.spanCssClass) {
                  $span.addClass(data.style.spanCssClass);
              }
              $chkb.parent().append($span);
          }
      },
  
      state: function ($chkb, value) {
          if (value) {
              if ('checked' === value) {
                  $chkb.prop('indeterminate', false);
                  $chkb.prop('checked', true);
              } else if ('unchecked' === value) {
                  $chkb.prop('indeterminate', false);
                  $chkb.prop('checked', false);
              } else if ('indeterminate' === value) {
                  $chkb.prop('checked', true);
                  $chkb.prop('indeterminate', true);
              }
              gj.checkbox.events.change($chkb, value);
              return $chkb;
          } else {
              if ($chkb.prop('indeterminate')) {
                  value = 'indeterminate';
              } else if ($chkb.prop('checked')) {
                  value = 'checked';
              } else {
                  value = 'unchecked';
              }
              return value;
          }
      },
  
      toggle: function ($chkb) {
          if ($chkb.state() == 'checked') {
              $chkb.state('unchecked');
          } else {
              $chkb.state('checked');
          }
          return $chkb;
      },
  
      destroy: function ($chkb) {
          if ($chkb.attr('data-checkbox') === 'true') {
              $chkb.removeData();
              $chkb.removeAttr('data-guid');
              $chkb.removeAttr('data-checkbox');
              $chkb.off();
              $chkb.next('span').remove();
              $chkb.unwrap();
          }
          return $chkb;
      }
  };
  
  gj.checkbox.events = {
      /**
       * Triggered when the state of the checkbox is changed
       *
       */
      change: function ($chkb, state) {
          return $chkb.triggerHandler('change', [state]);
      }
  };
  
  
  gj.checkbox.widget = function ($element, jsConfig) {
      var self = this,
          methods = gj.checkbox.methods;
  
      /** Toogle the state of the checkbox.
       */
      self.toggle = function () {
          return methods.toggle(this);
      };
  
      /** Return state or set state if you pass parameter.
       */
      self.state = function (value) {
          return methods.state(this, value);
      };
  
      /** Remove checkbox functionality from the element.
       */
      self.destroy = function () {
          return methods.destroy(this);
      };
  
      $.extend($element, self);
      if ('true' !== $element.attr('data-checkbox')) {
          methods.init.call($element, jsConfig);
      }
  
      return $element;
  };
  
  gj.checkbox.widget.prototype = new gj.widget();
  gj.checkbox.widget.constructor = gj.checkbox.widget;
  
  (function ($) {
      $.fn.checkbox = function (method) {
          var $widget;
          if (this && this.length) {
              if (typeof method === 'object' || !method) {
                  return new gj.checkbox.widget(this, method);
              } else {
                  $widget = new gj.checkbox.widget(this, null);
                  if ($widget[method]) {
                      return $widget[method].apply(this, Array.prototype.slice.call(arguments, 1));
                  } else {
                      throw 'Method ' + method + ' does not exist.';
                  }
              }
          }
      };
  })(jQuery);
  