// Plugin for creating a simple body-class-switching control. Assumes that you now have submit buttons in a form that
// have name='groupOfClasses' value='newClass' and the server-side code sets <body class="...newClass...">
// and removes all other classes in groupOfClasses, and uses a cookie to remember the desired class.
// In PHP it would be:
//    $group = 'groupOfClasses';
//    $bodyclass = $_GET[$group];
//    if ($bodyclass){
//       echo "<body class=\"$bodyclass\">";
//       setcookie ($group, $bodyclass, time()+365*24*60*60, '/');
//    }elseif ($_COOKIE[$group]){
//      echo "<body class=\"${_COOKIE[$group]}\">";
//    }else{
//      echo "<body class=\"defaultClass\">";
//    }
// With appropriate input-scrubbing, of course!
// And HTML of
// <form>
//   <input type="submit" name="groupOfClasses" value="newClass1" />
//   <input type="submit" name="groupOfClasses" value="newClass2" />
// </form>

// The plugin is called with $('input:submit.whateverSelector').bodySwitcher()
// and hides the original submit buttons and creates radio buttons that when clicked
// remove the old body classes from that group and add the new one:
// <form>
//   <input type="submit" name="groupOfClasses" value="newClass1" style="display:none"/>
//   <input type="submit" name="groupOfClasses" value="newClass2" style="display:none"/>
//   <label for="bodyswitcher1">
//     <input type="radio" name="groupOfClasses" value="newClass1" id="bodyswitcher1" 
//      onclick="$('body').removeClass('newClass1').removeClass('newClass2').addClass('newClass1');document.cookie='groupOfClasses=newClass1';"/>
//     newClass1
//   </label>
//   <label for="bodyswitcher2">
//     <input type="radio" name="groupOfClasses" value="newClass2" id="bodyswitcher2"
//      onclick="$('body').removeClass('newClass1').removeClass('newClass2').addClass('newClass2');document.cookie='groupOfClasses=newClass2';"/>
//     newClass2
//   </label>
// </form>

  (function($){
    // private variables
    var uid=0;
    var date = new Date();
    date.setTime (date.getTime() +365*24*60*60*1000);
    var cookieExpires = "; path=/; expires="+date.toGMTString();

    $.fn.bodySwitcher = function(){
      var $body = $('body');
      return this.each(function(){
        $('<label/>').insertAfter(this).attr('for', 'bodyswitcher'+(++uid)).text(this.value).prepend(
          $('<input type="radio" name="'+this.name+'"'+($body.hasClass(this.value) ? ' checked="checked"' : '')+'/>'). // stupid IE won't take attr ('name') or attr('checked')
            attr({
              className: this.className,
              value: this.value,
              id: 'bodyswitcher'+(uid) // stupid IE doesn't support implicit labels!
            }).
            click(function(){
              $('input:radio[name='+this.name+']').each (function(){$body.removeClass(this.value)});
              $body.addClass(this.value);
              document.cookie = this.name+"="+this.value+cookieExpires;
            })
        )
        $(this).hide(); // remove the original
      });
    };
  })(jQuery);

