var SlidingPresentation = new Class({

    Extends: Presentation,

    // Assumes slides are positioned absolutely within the presentation
    swap: function(oldSlide, newSlide) {
    
        this.swapping = true;

         var slideWidth = oldSlide.getCoordinates().width;
      
          newSlide.setStyle('left', slideWidth);
          
          // Add newSlide to the DOM
          newSlide.inject(this.presentation);
          
          var newSlideFx = newSlide.retrieve('fx', null);
          
          if(!newSlideFx) {
  
              newSlideFx = new Fx.Tween(newSlide, {duration: this.options.transitionDuration,
                                                   transition: this.options.transitionType});
              newSlide.store('fx', newSlideFx);
          }
          
          var oldSlideFx = oldSlide.retrieve('fx', null);
          
          if(!oldSlideFx) {
  
              oldSlideFx = new Fx.Tween(oldSlide, {duration: this.options.transitionDuration,
                                                   transition: this.options.transitionType});
              oldSlide.store('fx', oldSlideFx);
          }
          
          // Remove any old swap complete events from these objects
          newSlideFx.removeEvents('complete');
          oldSlideFx.removeEvents('complete');
          
          // Trigger swap complete listener for oldSlide
          oldSlideFx.addEvent('complete', this.swapCompleteListener.bind(this));

          // Start the fx
          newSlideFx.start('left', slideWidth - 5, 0);
          oldSlideFx.start('left', 0, 0 - slideWidth);
    }
});
