var CrossFadingPresentation = new Class({

    Extends: Presentation,

    // Assumes slides are positioned absolutely within the presentation
    swap: function(oldSlide, newSlide) {
    
        this.swapping = true;
    
        // Position newSlide under oldslide
        newSlide.setStyle('z-index', 0);
        oldSlide.setStyle('z-index', 1);
        
        // 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});
                                                 
            newSlideFx.addEvent('complete', this.swapCompleteListener.bind(this));
            
            newSlide.store('fx', newSlideFx);
        }
        
        // Create fx object if not exists
        var oldSlideFx = oldSlide.retrieve('fx', null);
        
        if(!oldSlideFx) {
        
            oldSlideFx = new Fx.Tween(oldSlide, {duration: this.options.transitionDuration,
                                                 transition: this.options.transitionType});

            oldSlideFx.addEvent('complete', this.swapCompleteListener.bind(this));
            
            oldSlide.store('fx', oldSlideFx);
        }
        
        // Start the fx
        newSlideFx.set('opacity', 1);
        oldSlideFx.start('opacity', 1, 0);
    }
});
