         dispatchEvent(event);
     }
     
+    private function noopAnimationHandler(event:TimerEvent):void
+    {
+        finishEffect();
+    }
+
     /**
      * Handles the end event from the animation. The value here is an Array of
      * values, one for each 'property' in our propertyValuesList.

        super.play();
        
        if (!propertyValuesList || propertyValuesList.length == 0)
            return;
            
        isStyleMap = new Array(propertyValuesList.length);
        
        // These two temporary arrays will hold the values passed into the
        // Animation to be interpolated between during the animation. The order
        // of the values in these arrays must match the order of the property

    {
        dispatchEvent(event);
        finishEffect();
        if (affectsConstraints)
            reenableConstraints();
    }
    
    private var constraintsHolder:Object;
    
    private function reenableConstraint(name:String):void
    {
        var value:* = constraintsHolder[name];
        if (value !== undefined)
        {
            target.setStyle(name, value);
            delete constraintsHolder[name];
        }
    }
    
    private function reenableConstraints():void
    {
        // Only bother if constraintsHolder is non-null; otherwise
        // there must have been no constraints to worry about
        if (constraintsHolder)
        {
            reenableConstraint("left");
            reenableConstraint("right");
            reenableConstraint("top");
            reenableConstraint("bottom");
            reenableConstraint("horizontalCenter");
            reenableConstraint("verticalCenter");
            reenableConstraint("baseline");
            constraintsHolder = null;
        }
    }
    
    private function disableConstraint(name:String):void
    {
        var value:* = target.getStyle(name);
        if (value !== undefined)
        {
            if (!constraintsHolder)
                constraintsHolder = new Object();
            constraintsHolder[name] = value;
            target.setStyle(name, undefined);
        }        
    }
    private function disableConstraints():void
    {
        if (target is IStyleClient)
        {
            disableConstraint("left");
            disableConstraint("right");
            disableConstraint("top");
            disableConstraint("bottom");
            disableConstraint("verticalCenter");
            disableConstraint("horizontalCenter");
            disableConstraint("baseline");
        }
    }
    /**
     * Utility function to handle situation where values may be queried or
     * set on the target prior to completely setting up the effect's
