package {
    
    /*    *************************
    Author:     Dan Florio
    Website:     polygeek.com
    Email:        dan@polygeek.com
    Date:        2008-03-18
    
    Note: There's not much in the way of organization here. I just knocked this together while
    watching 2010 on the evening that AC Clark died. I needed a good excuse to pick up TweenLite anyway.
    
    Get TweenLite Here:
    http://blog.greensock.com/tweenliteas3
    
    *****************************    */
    
    import com.gs.TweenLite;
    
    import flash.display.*;
    import flash.events.MouseEvent;
    import flash.events.TimerEvent;
    import flash.filters.BitmapFilterQuality;
    import flash.filters.BlurFilter;
    import flash.media.SoundChannel;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.utils.Timer;
    
    import mx.core.SoundAsset;
    
    [SWF(width="400", height="400", backgroundColor="0x000000" )]
    public class FullStars extends Sprite {
        [Embed(source="assets/MyGodItsFullOfStars.mp3")]
        public var fullStars:Class;
        private var centerX:int = 200;
        private var centerY:int = 200;
        private var msg:TextField;
        private var holder:Sprite;
        
        
        public function FullStars() {
            super();
            holder = new Sprite();
            holder.graphics.beginFill( 0x000000, 1.0 );
            holder.graphics.drawRect( 0, 0, 400, 400 );
            holder.buttonMode = true;
            addChild( holder );
            msg = new TextField();
            msg.autoSize = "center";
            msg.text = "Click here for A.C. Clark tribute";
            var tfm:TextFormat = new TextFormat( "_sans", 22, 0xFFFFFF );
            msg.setTextFormat( tfm );
            msg.x = ( 400 - msg.width ) / 2;
            msg.y = 180;
            msg.selectable = false;
            holder.addChild( msg );
            
            holder.addEventListener(MouseEvent.CLICK, onClick );
            
        }
        
        private function onClick( e:MouseEvent ):void {
            this.removeChild( holder );
            //this.stage.displayState = StageDisplayState.FULL_SCREEN;
            var tic:Timer = new Timer( 50, 100 );
            tic.addEventListener( TimerEvent.TIMER, onTic );
            tic.start();
            var fullStars:SoundAsset = new fullStars() as SoundAsset;
            var sndChannel:SoundChannel = fullStars.play();    
        }
        
        
        private function onTic( e:TimerEvent ):void {
            // event runs 100 times so there will be 100 stars
            makeStar();
        }
        
        private function makeStar():void {
            
            var s:Sprite = new Sprite();
            s.graphics.beginFill( 0xFFFFFF, 1.0 );
            var angle:Number = rndRangeNum( 0, 2 * Math.PI );
            var radius:Number = rndRangeNum( 1, 10 );
            
            // randomly pick to create the star on either the top/bottom/left/right
            if( rndRangeInt( 0, 1 ) == 1 ) { // this is basically like a coin flip
                if( rndRangeInt( 0, 1 ) == 1 ) {
                    s.graphics.drawCircle( rndRangeNum( 0, 400 ), 0, radius ); // top
                } else {
                    s.graphics.drawCircle( rndRangeNum( 0, 400 ), 400, radius ); // bottom
                }
            } else {
                if( rndRangeInt( 0, 1 ) == 1 ) {
                    s.graphics.drawCircle( 0, rndRangeNum( 0, 400 ), radius ); // left    
                } else {
                    s.graphics.drawCircle( 400, rndRangeNum( 0, 400 ), radius ); // right
                }
            }
            
            var blurAmount:int = rndRangeNum( 3, 10 );
            var filtersArray:Array = new Array();
            var blur:BlurFilter = new BlurFilter( blurAmount, blurAmount, BitmapFilterQuality.HIGH );
            filtersArray.push( blur );
            s.filters = filtersArray;
            addChild( s );
            
            var rndTime:int = rndRangeInt( 0.3, 1.5 );
            var alphaTo:Number = rndRangeNum( 0, .4 );
            TweenLite.to( s, rndTime, { alpha:alphaTo, x:centerX, y:centerY, scaleX:0, scaleY:0, onComplete:onDeathStar } );
        }
        
        // callback function for when a tween is completed so that another star can be created
        private function onDeathStar():void {
            makeStar();
        }
        
        public function rndRangeNum( low:Number, high:Number ):Number {
            var dif:Number = high - low;
            var rnd:Number = ( Math.random() * dif ) + low;
            return rnd;
        }
        
        public function rndRangeInt( low:int, high:int ):int {
            var dif:int = high - low + 1;
            var rnd:int = Math.floor( Math.random() * dif ) + low;
            return rnd;
        }
    }
}