text: !function ($) {
    "use strict";
  
    $.fn['bootstrapSwitch'] = function (method) {
      var methods = {
        init: function () {
          return this.each(function () {
              var $element = $(this)
                , $div
                , $switchLeft
                , $switchRight
                , $label
                , myClasses = ""
                , classes = $element.attr('class')
                , color
                , moving
                , onLabel = "ON"
                , offLabel = "OFF"
                , icon = false;
  
              $.each(['switch-mini', 'switch-small', 'switch-large'], function (i, el) {
                if (classes.indexOf(el) >= 0)
                  myClasses = el;
              });
  
              $element.addClass('has-switch');
  
              if ($element.data('on') !== undefined)
                color = "switch-" + $element.data('on');
  
              if ($element.data('on-label') !== undefined)
                onLabel = $element.data('on-label');
  
              if ($element.data('off-label') !== undefined)
                offLabel = $element.data('off-label');
  
              if ($element.data('icon') !== undefined)
                icon = $element.data('icon');
  
              $switchLeft = $('<span>')
                .addClass("switch-left")
                .addClass(myClasses)
                .addClass(color)
                .html(onLabel);
  
              color = '';
              if ($element.data('off') !== undefined)
                color = "switch-" + $element.data('off');
  
              $switchRight = $('<span>')
                .addClass("switch-right")
                .addClass(myClasses)
                .addClass(color)
                .html(offLabel);
  
              $label = $('<label>')
                .html("&nbsp;")
                .addClass(myClasses)
                .attr('for', $element.find('input').attr('id'));
  
              if (icon) {
                $label.html('<i class="icon icon-' + icon + '"></i>');
              }
  
              $div = $element.find(':checkbox').wrap($('<div>')).parent().data('animated', false);
  
              if ($element.data('animated') !== false)
                $div.addClass('switch-animate').data('animated', true);
  
              $div
                .append($switchLeft)
                .append($label)
                .append($switchRight);
  
              $element.find('>div').addClass(
                $element.find('input').is(':checked') ? 'switch-on' : 'switch-off'
              );
  
              if ($element.find('input').is(':disabled'))
                $(this).addClass('deactivate');
  
              var changeStatus = function ($this) {
                $this.siblings('label').trigger('mousedown').trigger('mouseup').trigger('click');
              };
  
              $element.on('keydown', function (e) {
                if (e.keyCode === 32) {
                  e.stopImmediatePropagation();
                  e.preventDefault();
                  changeStatus($(e.target).find('span:first'));
                }
              });
  
              $switchLeft.on('click', function (e) {
                changeStatus($(this));
              });
  
              $switchRight.on('click', function (e) {
                changeStatus($(this));
              });
  
              $element.find('input').on('change', function (e) {
                var $this = $(this)
                  , $element = $this.parent()
                  , thisState = $this.is(':checked')
                  , state = $element.is('.switch-off');
  
                e.preventDefault();
  
                $element.css('left', '');
  
                if (state === thisState) {
  
                  if (thisState)
                    $element.removeClass('switch-off').addClass('switch-on');
                  else $element.removeClass('switch-on').addClass('switch-off');
  
                  if ($element.data('animated') !== false)
                    $element.addClass("switch-animate");
  
                  $element.parent().trigger('switch-change', {'el': $this, 'value': thisState})
                }
              });
  
              $element.find('label').on('mousedown touchstart', function (e) {
                var $this = $(this);
                moving = false;
  
                e.preventDefault();
                e.stopImmediatePropagation();
  
                $this.closest('div').removeClass('switch-animate');
  
                if ($this.closest('.has-switch').is('.deactivate'))
                  $this.unbind('click');
                else {
                  $this.on('mousemove touchmove', function (e) {
                    var $element = $(this).closest('.switch')
                      , relativeX = (e.pageX || e.originalEvent.targetTouches[0].pageX) - $element.offset().left
                      , percent = (relativeX / $element.width()) * 100
                      , left = 25
                      , right = 75;
  
                    moving = true;
  
                    if (percent < left)
                      percent = left;
                    else if (percent > right)
                      percent = right;
  
                    $element.find('>div').css('left', (percent - right) + "%")
                  });
  
                  $this.on('click touchend', function (e) {
                    var $this = $(this)
                      , $target = $(e.target)
                      , $myCheckBox = $target.siblings('input');
  
                    e.stopImmediatePropagation();
                    e.preventDefault();
  
                    $this.unbind('mouseleave');
  
                    if (moving)
                      $myCheckBox.prop('checked', !(parseInt($this.parent().css('left')) < -25));
                    else $myCheckBox.prop("checked", !$myCheckBox.is(":checked"));
  
                    moving = false;
                    $myCheckBox.trigger('change');
                  });
  
                  $this.on('mouseleave', function (e) {
                    var $this = $(this)
                      , $myCheckBox = $this.siblings('input');
  
                    e.preventDefault();
                    e.stopImmediatePropagation();
  
                    $this.unbind('mouseleave');
                    $this.trigger('mouseup');
  
                    $myCheckBox.prop('checked', !(parseInt($this.parent().css('left')) < -25)).trigger('change');
                  });
  
                  $this.on('mouseup', function (e) {
                    e.stopImmediatePropagation();
                    e.preventDefault();
  
                    $(this).unbind('mousemove');
                  });
                }
              });
            }
          );
        },
        toggleActivation: function () {
          $(this).toggleClass('deactivate');
        },
        isActive: function () {
          return !$(this).hasClass('deactivate');
        },
        setActive: function (active) {
          if (active)
            $(this).removeClass('deactivate');
          else $(this).addClass('deactivate');
        },
        toggleState: function (skipOnChange) {
          var $input = $(this).find('input:checkbox');
          $input.prop('checked', !$input.is(':checked')).trigger('change', skipOnChange);
        },
        setState: function (value, skipOnChange) {
          $(this).find('input:checkbox').prop('checked', value).trigger('change', skipOnChange);
        },
        status: function () {
          return $(this).find('input:checkbox').is(':checked');
        },
        destroy: function () {
          var $div = $(this).find('div')
            , $checkbox;
  
          $div.find(':not(input:checkbox)').remove();
  
          $checkbox = $div.children();
          $checkbox.unwrap().unwrap();
  
          $checkbox.unbind('change');
  
          return $checkbox;
        }
      };
  
      if (methods[method])
        return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
      else if (typeof method === 'object' || !method)
        return methods.init.apply(this, arguments);
      else
        $.error('Method ' + method + ' does not exist!');
    };
  }(jQuery);
  
  $(function () {
    $('.switch')['bootstrapSwitch']();
  });
  