package classes.matuto.mt3d
{
	import classes.away3d.containers.ObjectContainer3D;
	import classes.away3d.core.base.Object3D;
	import classes.away3d.events.MouseEvent3D;
	import classes.away3d.materials.BitmapFileMaterial;
	import classes.away3d.materials.ColorMaterial;
	import classes.away3d.primitives.Cube;
	import classes.away3d.primitives.Plane;
	import classes.away3d.primitives.Sphere;
	import classes.away3d.primitives.data.CubeMaterialsData;
	
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	public class Item3d extends ObjectContainer3D
	{
		
		private var paramsObj		:Object;
		
		public  var cube			:Cube;
		public  var sphere			:Sphere;
		public  var plane			:Plane;
		
		private var currentObject	:Object3D;
		
		public static var SELECT	:String      = "select";
		public static var OVER		:String		 = "over";
		public static var OUT		:String 	 = "out";
		
		private var params			:Object;
		
		public function Item3d(_paramsObj:Object=null)
		{
  			paramsObj = _paramsObj;
		}
		
		//#############################################
		//PRIMITIVE
		//#############################################
		
		public function get getPrimitive():Object3D
		{
			return currentObject;
		}
		
		public function loadFoto(url:String):void
		{
			var object3d:* 		  =  currentObject;
			object3d.material 	  =  new BitmapFileMaterial(url);
		}
		
		public function addColor(color:uint):void
		{
			var object3d:* 		  =  currentObject;
			object3d.material 	  =  new ColorMaterial(color);
		}
	
		//#############################################
		//#############################################
		
		//#############################################
		//PLANE
		//#############################################
		
		public function initPlane():void
		{
			plane 		    = new Plane(paramsObj!=null?paramsObj:paramsObj);
			currentObject   = plane;
			plane.bothsides = true;
			addChild(plane);
			addEvent();
		}
		
		public function get getPlane():Plane
		{
			return plane;
		}
		
		//#############################################
		//#############################################
		
		//#############################################
		//ADD
		//#############################################
		
		public function addObject(value:Object3D):void
		{
			currentObject = cube;
			addEvent();		
		}
		
		
		
		//#############################################
		//#############################################
		
		//#############################################
		//CUBE
		//#############################################
		
		public function initCube():void
		{
			cube 		  = new Cube(paramsObj!=null?paramsObj:paramsObj);
			currentObject = cube;
			addChild(cube);
			addEvent();
		}
		
		public function get getCube():Cube
		{
			return cube;
		}
		
		public function addMaterialsCube(value:CubeMaterialsData):void
		{
			cube.cubeMaterials = value;
		}
		
		//#############################################
		//#############################################
		
		//#############################################
		//SPHERE
		//#############################################
		
		public function initSphere():void
		{
			sphere 		  = new Sphere(paramsObj!=null?paramsObj:paramsObj);
			currentObject = sphere;
			addChild(sphere);
			addEvent();
		}
		
		public function get getSphere():Sphere
		{
			return sphere;
		}
		
		//#############################################
		//#############################################
		
		
		//#############################################
		//Listener
		//#############################################
		
		public function addEvent():void
		{
			currentObject.addEventListener(MouseEvent3D.MOUSE_UP,click);
			currentObject.addEventListener(MouseEvent3D.MOUSE_OVER,over);
			currentObject.addEventListener(MouseEvent3D.MOUSE_OUT,out);
		}
	
		private function click(event:MouseEvent3D=null):void
		{
			dispatchEvent(new Event(SELECT));
			return void;
		}
		
		public function over(event:MouseEvent3D=null):void
		{
			dispatchEvent(new Event(OVER));
			return void;
		}
		
		public function out(event:MouseEvent3D=null):void
		{
			dispatchEvent(new Event(OUT));
			return void;
		}
		
		public function enableButton() :void
		{
			this.mouseEnabled  	= true;
			currentObject.addEventListener(MouseEvent3D.MOUSE_UP,click);
			currentObject.addEventListener(MouseEvent3D.MOUSE_OVER,over);
			currentObject.addEventListener(MouseEvent3D.MOUSE_OUT,out);
		}
		
		public function disableButton() :void
		{
			this.mouseEnabled  	= false;
			currentObject.removeEventListener(MouseEvent3D.MOUSE_UP,click);
			currentObject.removeEventListener(MouseEvent3D.MOUSE_OVER,over);
			currentObject.removeEventListener(MouseEvent3D.MOUSE_OUT,out);	
		}
		
		public function set enabled( bool :Boolean ) :void
		{
			this.mouseEnabled 	    = bool;
			if(bool)
			enableButton();
			else
			disableButton();
		}
		
		//#############################################
		//#############################################
	
		//#############################################
		//Override
		//#############################################
		
		public function init():void
		{
		
		}
		
		public function close():void
		{
			
		}
		
		public function dispose():void
		{
			
		}
		
		//#############################################
		//#############################################
		
		//#############################################
		//Params
		//#############################################
		
		public function set setParams(_params:Object):void
		{
			params = _params;
		}
		
		public function get getParams():Object
		{
			return params;		
		}
		
		//#############################################
		//#############################################

	
	}//end class
}