(function($) {
  $.rbTeaserSlider = {
    defaults: {
      autoslide:true,
      slidetime:3000,
      fadetime:1000,
      mode:'container',
      controlsPos:'bottom'
    },
    
    /**
     * Konstruktor
     */
    init: function(options) {
      return this.each(function(){
        this.options = {};
        $.extend(this.options, $.rbTeaserSlider.defaults);
        $.extend(this.options, options);
        
        if(this.options.mode == 'image') {
          var imgs = '';
          for(i=0;i<this.options.imgPaths.length;i++) {
            imgs += '<div class="img imgLeft clearing"><p style="width: '+
            this.options.imgPaths[i][1]+'px;"><img src="'+
            this.options.imgPaths[i][0]+'" width="'+
            this.options.imgPaths[i][1]+'" height="'+
            this.options.imgPaths[i][2]+'" alt="'+
            this.options.imgPaths[i][3]+'" /></p></div>';
          }
          
          $(this).html(imgs);
        }
        
        this.current  = 0;
        this.nbElements = $(this).children().size();
        
        $(this).initControls();
        
        $(this).css("position", "relative");
        
        var i = 0;
        $(this).children().each(function() {
          $(this).css("position", "absolute");
          if(i != 0) $(this).css("display", "none");
          i++;
        });
        
        if(this.options.autoslide) {
          $(this).autoSlide();
        }
      });
    },
    
    initControls: function() {
      var slider  = $(this).get(0);
      var pageNav = $(slider.options.pageNav);
      
      if(slider.options.controlsPos == 'top') {
        $(slider).before('<p class="controls"><a href="#" class="toggle pause">Stop</a></p>');
      }
      else {
        $(slider).after('<p class="controls"><a href="#" class="toggle pause">Stop</a></p>');
      }
      
      var cont    = $(slider.options.controls);
      
      cont.find(".prev").bind("click",function(){$(slider).sliderPrev(); return false; });
      cont.find(".next").bind("click",function(){$(slider).sliderNext(); return false; });
      cont.find(".toggle").bind("click",function(){$(slider).autoSlideToggle(); return false; });
      
      pageNav.children().each(
        function(i) {     
          $(this).bind("click", {i:i}, function(e){$(slider).getPage(e.data.i); return false; });
        });
    },
    
    sliderPrev: function() {
      var slider = $(this).get(0);
      
      slider.last = slider.current;
      
      if(slider.current == 0) {
        slider.current = slider.nbElements-1;
      }
      else {
        slider.current--;
      }
      
      $(slider).updateSlider();
      
      if(slider.options.autoslide) {
        $(slider).autoSlideStop();
        $(slider).autoSlide();
      }
    },
    
    sliderNext: function() {
      var slider = $(this).get(0);
      
      slider.last = slider.current;
      
      if(slider.current == slider.nbElements-1) {
        slider.current = 0;
      }
      else {
        slider.current++;
      }
      
      $(slider).updateSlider();
      
      if(slider.options.autoslide) {
        $(slider).autoSlideStop();
        $(slider).autoSlide();
      }
    },
    
    updateSlider: function() {
      var slider = $(this).get(0);
      
      $($(slider).children().get(slider.last)).fadeOut(slider.options.fadetime);
      $($(slider).children().get(slider.current)).fadeIn(slider.options.fadetime);
      $(slider).updateControls();
    },
    
    autoSlide: function() {
      var slider = $(this).get(0);
      
      slider.options.autoslide = true;
      slider.interval = setInterval(function() {$(slider).sliderNext();}, slider.options.slidetime);
      $(slider).updateControls();
    },
    
    autoSlideStop: function() {
      var slider = $(this).get(0);
      
      slider.options.autoslide = false;
      clearInterval(slider.interval);
      $(slider).updateControls();
    },
    
    autoSlideToggle: function() {
      var slider  = $(this).get(0);
      var cont    = $(slider.options.controls);

    	if(slider.options.autoslide) {
        cont.find(".toggle").html('Start');
        cont.find(".toggle").addClass("play");
        cont.find(".toggle").removeClass("pause");
        $(slider).autoSlideStop();
      }
      else {
        cont.find(".toggle").html('Stop');
        cont.find(".toggle").addClass("pause");
        cont.find(".toggle").removeClass("play");
        $(slider).autoSlide();
      }
    },
    
    updateControls: function() {
      var slider  = $(this).get(0);
      var pageNav = $(slider.options.pageNav);  
      
      $(pageNav.children()).removeClass("active");      
      $(pageNav.children().get(slider.current)).addClass("active");
      
      $(slider).updateIndex();
    },
    
    getPage: function(nr) {
      var slider = $(this).get(0);
      
      slider.last = slider.current;
      slider.current = nr;
      
      $(slider).updateSlider();
      
      if(slider.options.autoslide) {
        $(slider).autoSlideStop();
        $(slider).autoSlide();
      }
    },
    
    updateIndex: function() {
      var slider = $(this).get(0);
      var imgIndex = $(slider.options.imgIndex);
      
      imgIndex.text("Bild "+(slider.current+1)+" von "+$(slider).children().size());
    }
  }
  
  $.fn.rbTeaserSlider  = $.rbTeaserSlider.init;
  $.fn.initControls    = $.rbTeaserSlider.initControls;
  $.fn.sliderPrev      = $.rbTeaserSlider.sliderPrev;
  $.fn.sliderNext      = $.rbTeaserSlider.sliderNext;
  $.fn.updateSlider    = $.rbTeaserSlider.updateSlider;
  $.fn.autoSlide       = $.rbTeaserSlider.autoSlide;
  $.fn.autoSlideStop   = $.rbTeaserSlider.autoSlideStop;
  $.fn.autoSlideToggle = $.rbTeaserSlider.autoSlideToggle;
  $.fn.updateControls  = $.rbTeaserSlider.updateControls;
  $.fn.getPage         = $.rbTeaserSlider.getPage;
  $.fn.updateIndex     = $.rbTeaserSlider.updateIndex;
})(jQuery);

