/**
 * Flash Video for Professionals: MVC Player 
 * http://www.flashconnections.com
 * @author James O'Reilly
 */
package com.flashconnections.ui.component.mediaPlayer
{
	import flash.display.MovieClip;
	import flash.media.Video;
	
	import com.flashconnections.pattern.mvc.Controller;
	import com.flashconnections.pattern.mvc.Model;
	import com.flashconnections.pattern.mvc.View;
	import com.flashconnections.ui.component.mediaPlayer.ifc.Iactionscript_video_com_flashconnections_ui_component_mediaPlayer_MediaPlayerView;
	import com.flashconnections.ui.component.mediaPlayer.MediaPlayerController;
	import com.flashconnections.ui.component.mediaPlayer.MediaPlayerModel;
	import com.flashconnections.ui.component.mediaPlayer.MediaPlayerButton;
	import com.flashconnections.util.Proxy;
	import flash.events.MouseEvent;
	import flash.display.Sprite;
	
	public class actionscript_video_com_flashconnections_ui_component_mediaPlayer_MediaPlayerView extends View implements Iactionscript_video_com_flashconnections_ui_component_mediaPlayer_MediaPlayerView 
	{
		private var _videoInstance:Video;
		
		public var playButton:MediaPlayerButton;
		public var pauseButton:MediaPlayerButton;
		public var stopButton:MediaPlayerButton;
		public var nextButton:MediaPlayerButton;
		public var prevButton:MediaPlayerButton;
		
		public function actionscript_video_com_flashconnections_ui_component_mediaPlayer_MediaPlayerView(model:Model, controller:Controller, container:MovieClip) {
			super(model, controller, container);
			playButton  = new MediaPlayerButton("Restart");
			pauseButton = new MediaPlayerButton("Pause");
			stopButton  = new MediaPlayerButton("Stop");
			nextButton  = new MediaPlayerButton("Next");
			prevButton  = new MediaPlayerButton("Previous");
		}
		public override function init():void {
			// Video Container
			var my_videocontainer:MovieClip = new MovieClip();
			getContainer().addChild(my_videocontainer);
			my_videocontainer.x = 10;
			my_videocontainer.y = 10;
			// Video Component
			var my_video:Video = new Video(320,240);
			my_videocontainer.addChild(my_video);
			setContent(my_videocontainer);
			setVideoInstance(my_video);
			getVideoInstance().attachNetStream(MediaPlayerModel(getModel()).getStream());
			// Tool Box of video controls
			var tools:Sprite = new Sprite();
			tools.addChild(playButton);
			playButton.y = 80;
			tools.addChild(pauseButton)
			pauseButton.y = playButton.y + playButton.height + 10;
			tools.addChild(stopButton);
			stopButton.y = pauseButton.y + pauseButton.height + 10;
			tools.addChild(nextButton);
			nextButton.y = stopButton.y + stopButton.height + 10;
			tools.addChild(prevButton);
			prevButton.y = nextButton.y + nextButton.height + 10;
			getContainer().addChild(tools);
			tools.x = my_videocontainer.x + my_videocontainer.width + 60;
		}
		public override function initCoordinates(x:Number, y:Number, w:Number, h:Number):void {
			getContent().x = x;
			getContent().y = y;
			getContent().width = w;
			getContent().height = h;
		}
		public function setVideoInstance(val:Video):void {
			_videoInstance = val;
		}
		public function getVideoInstance():Video {
			return _videoInstance;
		}
		public override function layout():void {
			var cont:MovieClip = getContainer();
			var cntrl:MediaPlayerController = MediaPlayerController(getController());
			playButton.addEventListener(MouseEvent.CLICK, cntrl.play);
			pauseButton.addEventListener(MouseEvent.CLICK, cntrl.pause);
			stopButton.addEventListener(MouseEvent.CLICK, cntrl.stop);
			nextButton.addEventListener(MouseEvent.CLICK, cntrl.playNext);
			prevButton.addEventListener(MouseEvent.CLICK, cntrl.playPrevious);
		}
		public function onMetaData(val:Object):void {
			trace("actionscript_video_com_flashconnections_ui_component_mediaPlayer_MediaPlayerView.onMetaData" + " " + val.code);
		}
		public function onStatus(val:Object):void {
			trace("actionscript_video_com_flashconnections_ui_component_mediaPlayer_MediaPlayerView.onStatus" + " " + val.code);
		}
		public function onPlay():void {
			pauseButton.Label = "Pause";
			pauseButton.enabled = true;
			pauseButton.alpha = 1;
			trace("actionscript_video_com_flashconnections_ui_component_mediaPlayer_MediaPlayerView.onPlay");
		}
		public function onPlayMedia(path:String):void {
			trace("actionscript_video_com_flashconnections_ui_component_mediaPlayer_MediaPlayerView.onPlayMedia" + " " + path);
		}
		public function onPause():void {
			pauseButton.Label = (pauseButton.Label=="Pause")? "Resume":"Pause";
			pauseButton.enabled = true;
			pauseButton.alpha = 1;
			trace("actionscript_video_com_flashconnections_ui_component_mediaPlayer_MediaPlayerView.onPause");
		}
		public function onStop():void {
			pauseButton.Label = "Pause";
			pauseButton.enabled = false;
			pauseButton.alpha = .35;
			trace("actionscript_video_com_flashconnections_ui_component_mediaPlayer_MediaPlayerView.onStop");
		}
		public function onSetMediaPosition(val:Number):void {
			trace("actionscript_video_com_flashconnections_ui_component_mediaPlayer_MediaPlayerView.onSetMediaPosition" + " " + val);
		}
		public function onSetVolume(val:Number):void {
			trace("actionscript_video_com_flashconnections_ui_component_mediaPlayer_MediaPlayerView.onSetVolume" + " " + val);
		}
		public function registerUIElement(name:String, val:MovieClip):void {}
		public override function toString():String {
			return "com.flashconnections.ui.component.mediaPlayer.actionscript_video_com_flashconnections_ui_component_mediaPlayer_MediaPlayerView";
		}
	}}