AS3 Android

Here it is, I have a simple brick breaker game in progress, yet I am starting to pull hairs on the rest game / start over function. My class is here, and everything thing seems to be working except for the endGame() function. Goal, not quite reached: once the endGame() funtion is fired, reset everything as if nothing had even happened (game over, reset from beginning). Once I have this function in tact I can begin to add levels, difficulty etc. As always I am open to better implementations of all functions, and any help is always appreciated as criticism only makes the “Tiger Blood” thicker.

Thanks,

package 
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.display.DisplayObject;
    import flash.geom.Point;
    import flash.utils.Timer;
    import flash.utils.Timer;
    import flash.utils.getTimer;
    import flash.events.TimerEvent;
    import com.greensock.*;
    import com.greensock.easing.*;

    public class collision extends MovieClip
    {
        private var ball:Ball = new Ball();
        private var paddle:Paddel = new Paddel();
        private var ballXSpeed:Number = 28;
        private var ballYSpeed:Number = 28;
        private var timer:Timer = new Timer(20,999999);
        private var columns:int = 6;
        private var rows:int = 2;
        private var spacer:int = 5;
        private var brickAmt:Number = 10;
        private var fallenBricks:Number = 0;
        private var len:int = numChildren;
        private var startButton:word = new word();
        private var nextButton:comp = new comp();
        private var offset:Number;

        public function collision()
        {
            addChild(startButton);
            addChild(paddle);
            paddle.x = stage.stageWidth / 2 - (paddle.width / 2);
            paddle.y = stage.stageHeight - (paddle.height/2);
            startButton.cover.buttonMode = true;
            startButton.visible = true;
            nextButton.cover.buttonMode = true;
            nextButton.visible = false;
            startButton.y = stage.stageHeight / 2;
            startButton.x = stage.stageWidth / 2;
            paddle.addEventListener(MouseEvent.MOUSE_DOWN, paddleDrag, false, 0, true);
            startButton.addEventListener(MouseEvent.CLICK, beginGame);
        }
        public function beginGame(e:MouseEvent):void
        {
            startButton.removeEventListener(MouseEvent.CLICK, beginGame);
            nextButton.removeEventListener(MouseEvent.CLICK, beginGame);
            startButton.visible = false;
            nextButton.visible = false;ball.addEventListener(Event.ENTER_FRAME, moveBall);
            ball.y = paddle.y - (ball.height * 2);
            ball.x = paddle.x + (paddle.width / 2) - (ball.width / 2);

            setBricks();
        }
        function paddleDrag(event:MouseEvent):void
        {
            trace(paddle.y);
            offset = paddle.x - event.stageX;
            stage.addEventListener(MouseEvent.MOUSE_MOVE, performDrag, false, 0, true);
            stage.addEventListener(MouseEvent.MOUSE_UP, paddleDrop, false, 0, true);
        }
        function paddleDrop(event:MouseEvent):void
        {
            stage.removeEventListener(MouseEvent.MOUSE_MOVE, performDrag);
            stage.removeEventListener(MouseEvent.MOUSE_UP, paddleDrop);
        }
        function performDrag(event:MouseEvent):void
        {
            //TweenMax.to(paddle, .2, {x:event.stageX + offset, ease:Expo.easeOut});
            if (mouseX < paddle.width / 2)
            {
                paddle.x = 0;
            }
            else if (mouseX > stage.stageWidth - paddle.width / 2)
            {
                paddle.x = stage.stageWidth - paddle.width;
            }
            else
            {
                paddle.x = event.stageX + offset;
            }
        }
        public function moveBall(e:Event):void
        {
            addChild(ball);
            ball.x +=  ballXSpeed;
            ball.y +=  ballYSpeed;
            if (ball.x <= 0 || ball.x >= stage.stageWidth - ball.width)
            {
                ballXSpeed *=  -1;
            }
            if (ball.y <= 0)
            {
                ballYSpeed *=  -1;
            }
            if (ball.y >= paddle.y)
            {
                endGame();
                trace(len);
            }
            if (ball.hitTestObject(redBrick))
            {
                endGame();
                trace(len);
            }
            if (ball.hitTestObject(paddle))
            {
                ballAngle();
            }
            createTrailBall();
        }
        public function setBricks():void
        {
            
            for (var i:int=0; i<len; i++)
            {
                var brick:Object = getChildAt(i);
                if (brick is MovieClip)
                {
                    brick = MovieClip(brick);
                    brick.addEventListener(Event.ENTER_FRAME, brickCollision);
                }
            }
        }
        public function brickCollision(e:Event):void
        {
            var broken:MovieClip = e.currentTarget as MovieClip;
            var count:Number = 0;
            if (ball.hitTestObject(broken))
            {
                ballYSpeed *=  -1;
                TweenMax.to(broken, 1, {y:stage.stageHeight + (broken.width * 2), ease:Quart.easeIn, onCompleteListener:(Event.ENTER_FRAME, countIt)});
                broken.removeEventListener(Event.ENTER_FRAME, brickCollision);
                //trace("hit");
                //broken.addEventListener(Event.ENTER_FRAME, countIt);
            }
        }
        public function countIt(e:Event):void
        {
            if (len == 1)
            {
                trace("chicken dinner");
                e.currentTarget.removeEventListener(Event.ENTER_FRAME, countIt);
                endGame();
            }
            else
            {
                trace(e.currentTarget);
                len--;
                trace(len);
                e.currentTarget.removeEventListener(Event.ENTER_FRAME, countIt);
            }
        }
        public function endGame():void
        {
            trace("end game = " + len);
            ball.removeEventListener(Event.ENTER_FRAME, moveBall);
            addChild(nextButton);
            nextButton.visible = true;
            nextButton.y = stage.stageHeight / 2;
            nextButton.x = stage.stageWidth / 2;
            nextButton.addEventListener(MouseEvent.CLICK, beginGame);
        }
        public function createTrailBall(e:Event=null):void
        {
            var trailBall:Ball=new Ball();
            trailBall.x = ball.x;
            trailBall.y = ball.y;
            trailBall.addEventListener(Event.ENTER_FRAME,animateTrailBall);
            addChildAt(trailBall,0);
            TweenMax.to(trailBall, .6, {colorTransform:{tint:0xFFFF00,tintAmount:1}});
            TweenMax.to(trailBall, .6, {blurFilter:{blurX:20, blurY:20}});
        }
        public function animateTrailBall(e:Event):void
        {
            e.target.alpha -=  0.05;
            e.target.scaleY -=  0.04;
            e.target.scaleX -=  0.04;
            if (e.target.alpha < 0)
            {
                e.target.removeEventListener(Event.ENTER_FRAME,animateTrailBall);
                removeChild((MovieClip)(e.target));
            }
        }
        public function ballAngle():void
        {
            var ballPosition:Number = ball.x - paddle.x;
            var hitPercent:Number = (ballPosition / (paddle.width - ball.width)) - .5;
            ballXSpeed = hitPercent * 10;
            ballYSpeed *=  -1;
        }
        public function brickAngle():void
        {
            ballYSpeed *=  -1;

        }
    }

}