package {
    import com.polygeek.fractal.JuliaSet;
    import com.polygeek.fractal.Mandelbrot;
    
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.text.TextField;
    
    [SWF(width="500", height="1000", backgroundColor="0xEEEEEE" )]
    public class JuliaBrot extends Sprite {
        private var jSet:BitmapData;
        private var jSetBMP:Bitmap;
        private var mSet:BitmapData;
        private var coords:TextField;
        
        public function JuliaBrot() {
            super();
            
            //stage.scaleMode = StageScaleMode.NO_SCALE; 
            //stage.align = StageAlign.TOP_LEFT;

            var mandelSprite:Sprite = new Sprite();
            addChild( mandelSprite )
            
            mSet = Mandelbrot.makeMandel( 500, 500 );
            var mSetBMP:Bitmap = new Bitmap( mSet );
            mandelSprite.addChild( mSetBMP );
            
            // draw the x, i axis for reference
            var axis:Sprite = new Sprite();
            axis.graphics.lineStyle( 1, 0xFF0000, 0.3 );
            axis.graphics.moveTo( 0, 250 );
            axis.graphics.lineTo( 500, 250 );
            axis.graphics.moveTo( 333, 0 );
            axis.graphics.lineTo( 333, 500 );
            addChild( axis );
            
            var jSprite:Sprite = new Sprite();
            jSprite.y = 500;
            addChild( jSprite );
            jSet = new BitmapData( 500, 500 );
            jSetBMP = new Bitmap( jSet );
            jSprite.addChild( jSetBMP );
            
            mandelSprite.addEventListener( MouseEvent.MOUSE_MOVE, onMouseMove );
            
            // TextField for showing the a, bi coordinates
            coords = new TextField();
            coords.width = 500;
            coords.x = 100;
            coords.y = 380;
            coords.backgroundColor = 0xFFFFFF;
            coords.selectable = false;
            addChild( coords );
        }
        
        private function onMouseMove( e:MouseEvent ):void {
            var xPerc:Number = e.localX / mSet.width;
            var yPerc:Number = e.localY / mSet.height;

            var    xPos:Number = int( ( ( xPerc * 1.0 ) + ( ( 1 - xPerc ) * -2.0 ) ) * 100 ) / 100;
            var    yPos:Number = -int( ( ( yPerc * 1.25 ) + ( (1 - yPerc) * -1.25 ) ) * 100 ) / 100;
            coords.text = String( xPos + ", " + yPos);
            
            jSet = JuliaSet.makeJuliaSet( xPos, yPos, 500, 500 );
            jSetBMP.bitmapData = jSet;                    
        }
    }
}