(function ($) {
  $.fn.fadeTransition = function(options) {
    var options = $.extend({pauseTime: 5000, transitionTime: 2000, multiEls: 0}, options);
    
    Trans = function(obj) {
      var timer = null;
      var current = 0;
      
      if (options.multiEls > 0) {
          elementsmulti = $("> *", obj);

          elArray = new Array;

          oDiv = $(document.createElement('div'));

          for (i = 0; i <= elementsmulti.length; i++) {
              if ((i%options.multiEls == 0) && (i!=0) && (i != (elementsmulti.length-1))) {
                  elArray.push(oDiv);
                  oDiv = $(document.createElement('div'));
                  oDiv.append(elementsmulti[i]);
              } else if (i == (elementsmulti.length-1)) {
                  oDiv.append(elementsmulti[i]);
                  elArray.push(oDiv);
              } else {
                  oDiv.append(elementsmulti[i]);
              }

              
          }

          $(obj).empty();

          for (x in elArray) {
              $(obj).append(elArray[x]);
          }
      }

      var els = $("> *", obj).css("display", "none").css("left", "0").css("top", "0").css("position", "absolute");
      //var els = $("> *", obj).css("display", "none").css("left", "0").css("top", "0");
      $(obj).css("position", "relative");
      $(els[current]).css("display", "block");
      
      function transition() {
        var next = (current + 1) % els.length | 0;
        $(els[current]).fadeOut(options.transitionTime);
        $(els[next]).fadeIn(options.transitionTime);
        current = next;
        cue();
      };
      
      function cue() {
        if ($("> *", obj).length < 2) return false;
        if (timer) clearTimeout(timer);
        timer = setTimeout(transition, options.pauseTime);
      };
  
      cue();
    }
    
    return this.each(function() {
      var t = new Trans(this);
    });
  }
})(jQuery);


