jQuery.fn.fontSizer = function(settings) {
  settings = jQuery.extend({
    fontStates: 3, // normal, bigger1, bigger2
    decreaseButtonId: "#decrFontBut",
    increaseButtonId: "#incrFontBut",
    fontSizeClass: "biggerFontSize",
    setButtonActive: function (button, state) {
      button.fadeTo("slow", state?1:0.5);
    },
    cookieExpire: 365 * 24 * 60 * 60 * 1000 // 1 Jear [ms]
  }, settings);
  return this.each(function(){
    var container = jQuery(this);
    var decrBut = jQuery(settings.decreaseButtonId);
    var incrBut = jQuery(settings.increaseButtonId);
    var fontState = 0;
    var doDecrease = function () {
      container.removeClass(settings.fontSizeClass + fontState--);
      document.cookie="fontSizerState=" + fontState + "; path=/; expires=" + (new Date(new Date().getTime() + settings.cookieExpire).toGMTString());
      checkButtons();
      if (fontState == 0) return;
      container.addClass(settings.fontSizeClass + fontState);
    };
    var doIncrease = function () {
      container.removeClass(settings.fontSizeClass + fontState++);
      document.cookie="fontSizerState=" + fontState + "; path=/; expires=" + (new Date(new Date().getTime() + settings.cookieExpire).toGMTString());
      checkButtons();
      if (fontState == settings.fontStates) return;
      container.addClass(settings.fontSizeClass + fontState);
    };
    var fontSizeButDis = false;
    var checkButtons = function () {
      if (fontState <= 0) {
        fontState = 0;
        decrBut.each(function(i){
          var 
          butt = jQuery(this);
          settings.setButtonActive(butt, false);
          butt.unbind("click", doDecrease);
        });
        fontSizeButDis = true;
      } else if (fontState >= settings.fontStates-1) {
        fontState = settings.fontStates-1;
        incrBut.each(function(i){
          butt = jQuery(this);
          settings.setButtonActive(butt, false);
          butt.unbind("click", doIncrease);
        });
        fontSizeButDis = true;
      } else if (fontSizeButDis) {
        decrBut.each(function(i){
          butt = jQuery(this);
          settings.setButtonActive(butt, true);
          butt.bind("click", doDecrease);
        });
        incrBut.each(function(i){
          butt = jQuery(this);
          settings.setButtonActive(butt, true);
          butt.bind("click", doIncrease);
        });
        fontSizeButDis = false;
      }
    };
    // init buttons
      decrBut.each(function(i){
        butt = jQuery(this);
        butt.attr("href", "javascript:;");
        butt.bind("click", doDecrease);
      });
      incrBut.each(function(i){
        butt = jQuery(this);
        butt.attr("href", "javascript:;");
        butt.bind("click", doIncrease);
      });
    // Cookie-Wert auslesen (ist die Vergrösserung im Cookie gespeichert?)
      var cookieFontSize = 0;
      if (document.cookie) {
        cookieArr = document.cookie.split(";");
        for(var i=0; i<cookieArr.length; i++)
          if(jQuery.trim(cookieArr[i]).indexOf("fontSizerState=") === 0)
      		  cookieFontSize = jQuery.trim(unescape(cookieArr[i].split("=")[1]));
      }
    if (!isNaN(cookieFontSize) && cookieFontSize > 0 && incrBut.length > 0) {
      fontState = cookieFontSize - 1;
      doIncrease();
    } else checkButtons();
  });
};