// Extend Effects

Effect.SlideLeftOut = function(element) {
  element = $(element).cleanWhitespace();
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, window.opera ? 0 : 1, Object.extend({
    scaleContent: false, 
    scaleY: false, 
    scaleX: true, 
    scaleMode: 'box',
    scaleFrom: 100,
    scaleMode: {originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    beforeStartInternal: function(effect){
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if(window.opera) effect.element.setStyle({left: ''});
      effect.element.makeClipping().show();
    }, 
    afterUpdateInternal: function(effect){
      effect.element.down().setStyle(
        {right: (effect.dims[1] - effect.element.clientWidth) + 'px' }
      );
    },
    afterFinishInternal: function(effect){
      effect.element.hide().undoClipping().undoPositioned();
      effect.element.down().undoPositioned();
    }
  }, arguments[1] || { }));
};

Effect.SlideRightOut = function(element) {
  element = $(element).cleanWhitespace();
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, window.opera ? 0 : 1, Object.extend({
    scaleContent: false, 
    scaleY: false, 
    scaleX: true, 
    scaleMode: 'box',
    scaleFrom: 100,
    scaleMode: {originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    beforeStartInternal: function(effect){
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if(window.opera) effect.element.setStyle({left: ''});
      effect.element.makeClipping().show();
    }, 
    afterUpdateInternal: function(effect){
      effect.element.down().setStyle(
        {left: (effect.dims[1] - elementDimensions.width) + 'px' }
      );
    },
    afterFinishInternal: function(effect){
      effect.element.hide().undoClipping().undoPositioned();
      effect.element.down().undoPositioned();
    }
  }, arguments[1] || { }));
};

Effect.SlideLeftIn = function(element) {
  element = $(element).cleanWhitespace();
  element.hide();
  var z = false;
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({
    scaleContent: false, 
    scaleY: false, 
    scaleX: true, 
    scaleMode: 'box',
    scaleFrom: window.opera ? 0 : 1,
    scaleMode: {originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    beforeStartInternal: function(effect){
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if(window.opera) effect.element.setStyle({left: ''});
      //effect.element.makeClipping().show();
    }, 
    afterUpdateInternal: function(effect){
      effect.element.down().setStyle(
        {right: (effect.dims[1] - effect.element.clientWidth) + 'px' }
      );
      if(!z){
        effect.element.makeClipping().show();
      }
      z = true;
    },
    afterFinishInternal: function(effect){
      effect.element.show().undoClipping().undoPositioned();
      effect.element.down().undoPositioned();
    }
  }, arguments[1] || { }));
};

var DivSlide = Class.create();
DivSlide.prototype = {

  initialize: function() {
    this.n = 0;
    this.isactive = false;
    // div id dslidebox vorhanden?
    if ( !document.getElementById('dslidebox') ){ return; }
    this.contentBoxes = $$('div.dslide');
    
    // class dslide vorhanden?
    if ( !this.contentBoxes ){ return; }
    
    // alle ausblenden
    for (var i=0, len=this.contentBoxes.length; i<len; i++){
      $(this.contentBoxes[i].id).hide();
    }
    
    $(this.contentBoxes[0].id).show();
  },
  nextSlide: function(){
    if(!this.isactive){
      this.isactive = true;
      oldN = this.n;
      newN = this.n + 1;
      if( newN >= this.contentBoxes.length ){
        newN = 0;
        this.n = 0;
      } else {
        this.n++;
      }
      $(this.contentBoxes[newN].id).show();
      new Effect.SlideLeftOut(this.contentBoxes[oldN], { duration: 1.2, fps: 24, afterFinish: function(){myDivSlide.isactive = false;} });
    }
  },
  prevSlide: function(){
    if(!this.isactive){
      this.isactive = true;
      oldN = this.n;
      newN = this.n - 1;
      if( newN < 0 ){
        newN = this.contentBoxes.length-1;
        this.n = newN;
      } else {
        this.n--;
      }
      new Effect.Parallel(
      [new Effect.SlideLeftIn(this.contentBoxes[newN], { sync: true, duration: 1.2, fps: 24 }),
      new Effect.SlideRightOut(this.contentBoxes[oldN], { sync: true, duration: 1.2, fps: 24 })],
      {duration: 1.2, afterFinish: function(){myDivSlide.isactive = false;}});
    }
  }
}

function initDivSlide() { myDivSlide = new DivSlide(); }
Event.observe(document, 'dom:loaded', initDivSlide, false);
