 FlyTo = Class.create();
 FlyTo.prototype = {
   targetLocation: [],
   sourceLocation: [],
   sourceElement: null,
   sourceClone: null,
   targetElement: null,
   options: null,
   onComplete: function() {},
 
   initialize:function(sourceElement, targetElement, options) {
     this.options = $H({
       originalWidth: sourceElement.getWidth(),
       originalHeight: sourceElement.getHeight()
     }).merge(options||{});
 
     this.sourceElement = $(sourceElement);
     this.targetElement = $(targetElement);
 
     if(this.sourceElement && this.targetElement) {
       this.targetLocation = Position.cumulativeOffset(this.targetElement);
       this.sourceLocation = Position.cumulativeOffset(this.sourceElement);
       this.sourceClone = this.sourceElement.cloneNode(true);
       Position.absolutize(this.sourceElement);
       this.sourceElement.parentNode.insertBefore(this.sourceClone, this.sourceElement);
 
       new Effect.Parallel([
         new Effect.Move(this.sourceElement, {x: this.targetLocation[0] - this.sourceLocation[0], y: this.targetLocation[1] - this.sourceLocation[1], mode: 'relative', sync: true}),
         new Effect.Fade(this.sourceElement, {sync: true}),
         new Effect.Scale(this.sourceElement, 0, {scaleMode:{originalWidth: this.options.originalWidth, originalHeight: this.options.originalHeight}, sync: true})],
         {duration: 1}
       )
     }
   }
 }