+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2003-2008 Adobe Systems Incorporated
+//  All Rights Reserved.
+//
+//  NOTICE: Adobe permits you to use, modify, and distribute this file
+//  in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////
+
 package mx.filters
 {
 	
-
+import flash.display.BitmapData;	
+import flash.events.Event;
+import flash.events.EventDispatcher;
 import flash.filters.BitmapFilter;
 import flash.filters.DisplacementMapFilterMode;
-import flash.display.BitmapData;
 import flash.geom.Point;
-import mx.filters.BaseFilter;
-import mx.filters.IBitmapFilter;
-
-public class DisplacementMapFilter extends BaseFilter implements IBitmapFilter
+
+import mx.filters.IFlexBitmapFilter;
+
+/**
+ *  @review 
+ *  Dispatched when a property value has changed. 
+ */ 
+[Event(name="change", type="flash.events.Event")]
+
+/**
+ *  @review 
+ * 
+ * 	The mx.filters.DisplacementMapFilter class is based on 
+ *  flash.filters.DisplacementMapFilter but adds support for dynamically updating 
+ *  property values. 
+ *  When a property changes, it dispatches an event that tells the filter owner to
+ *  reapply the filter. Use this class instead of flash.filters.DisplacementMapFilter
+ *  if you plan to dynamically change the filter property values.  
+ * 
+ *  @see flash.filters.DisplacementMapFilter
+ */
+public class DisplacementMapFilter extends EventDispatcher implements IFlexBitmapFilter
 {
+	include "../core/Version.as";
+
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+    	
+	/**
+	 * @copy flash.filters.DisplacementMapFilter
+	 */ 	
 	public function DisplacementMapFilter(mapBitmap:BitmapData = null, 
 										  mapPoint:Point = null, componentX:uint = 0, 
 										  componentY:uint = 0, scaleX:Number = 0.0, 
 										  scaleY:Number = 0.0, mode:String = "wrap", 
 										  color:uint = 0, alpha:Number = 0.0)
 	{
+		super();
+		
 		this.mapBitmap = mapBitmap;
 		this.mapPoint = mapPoint;
 		this.componentX = componentX;

		this.color = color;
		this.alpha = alpha;
	}
	
	//----------------------------------
    //  alpha

			notifyFilterChanged();
		}
	}

	//--------------------------------------------------------------------------
	//
	//  Methods
	//
	//--------------------------------------------------------------------------
   	
   	/**
     * @private
     * Notify of a change to our filter, so that filter stack is ultimately 
     * re-applied by the framework.
     */ 
	private function notifyFilterChanged():void
	{
		dispatchEvent(new Event(Event.CHANGE));
	}

	//--------------------------------------------------------------------------
	//
	//  IFlexBitmapFilter 
	//
	//--------------------------------------------------------------------------
	
	/**
	 *  Creates a flash.filters.DisplacementMapFilter instance using the current 
	 *  property values. 
	 * 
	 *  @return flash.filters.DisplacementMapFilter instance
	 */	
	public function createBitmapFilter():BitmapFilter 
	{
		return new flash.filters.DisplacementMapFilter(mapBitmap, mapPoint, componentX, 
													   componentY, scaleX, scaleY, mode,
													   color, alpha);
	}
	
}
