 package laml.display {
+	import flash.display.Bitmap;
+	import flash.display.BitmapData;
 	import flash.display.DisplayObject;
 	import flash.display.SimpleButton;
 	import flash.events.MouseEvent;
 	
-	
+	[Event(name='click', type='MouseEvent')]
+	[Event(name='mouseDown', type='MouseEvent')]
+	[Event(name='mouseMove', type='MouseEvent')]
+	[Event(name='mouseOut', type='MouseEvent')]
+	[Event(name='mouseOver', type='MouseEvent')]
+	[Event(name='mouseUp', type='MouseEvent')]
 	public class Button extends Component {
-		private var _buttonView:SimpleButton;
-		
-		public function Button() {
-		}
+		protected const UP_STATE:String = "UpState";
+		protected const OVER_STATE:String = "OverState";
+		protected const DOWN_STATE:String = "DownState";
+		protected const HIT_TEST_STATE:String = "HitTestState";
+
+		protected var _buttonView:SimpleButton;
 		
 		override protected function initialize():void { 
 			super.initialize();

			return model.upState;
		}
		
		protected function validateUpState(newValue:*, oldValue:*):void {
			buttonView.upState = newValue;
		}
		
		public function set overState(overState:DisplayObject):void {
			model.overState = overState;
		}

				view.removeChild(_buttonView);
			}
			_buttonView = view.addChild(simpleButton) as SimpleButton;
			_buttonView.useHandCursor = true;
		}
		
		public function get buttonView():SimpleButton {
			return _buttonView;
		}
		
		protected function decorateButtonViewEventListeners(button:SimpleButton):void {
			button.addEventListener(MouseEvent.CLICK, clickHandler);
			button.addEventListener(MouseEvent.MOUSE_DOWN, mouseEventHandler);
			button.addEventListener(MouseEvent.MOUSE_MOVE, mouseEventHandler);
			button.addEventListener(MouseEvent.MOUSE_OUT, mouseEventHandler);
			button.addEventListener(MouseEvent.MOUSE_OVER, mouseEventHandler);
			button.addEventListener(MouseEvent.MOUSE_UP, mouseEventHandler);
		}
		
		protected function clickHandler(mouseEvent:MouseEvent):void {
			mouseEventHandler(mouseEvent);
		}

		protected function mouseEventHandler(mouseEvent:MouseEvent):void {
			var event:MouseEvent = new MouseEvent(mouseEvent.type);
			dispatchEvent(event);
		}
	}
}
