jetPack key lock.

I'm trying to make a jetpack game and so far everything is going greate. until i reached a problem while making the jetpack code. when ever the character is in the air he can only rotate but cannot move forward or backward plus my if the character gets too high he just goes into an endless bounce ignoring all keys except for the rotation keys. I'm using moveDirection.y to lift the player. this is my entire player.js script please help is you can.

var speed : float = 15.0;
var jump : float = 10.0;
var gravity : float = 20.0;
var fuel : float = 100.0;
var torque : float = 0.2;

var spawn : Transform;
var fire : Transform;
var ext : Transform;

private var nextBoost : float = 0.0;
private var exel : float = 0.0;
private var grounded : boolean = false;
private var moveDirection = Vector3.zero;

function FixedUpdate() 
{
    var controller : CharacterController = GetComponent(CharacterController);
    transform.Rotate(0, Input.GetAxis ("Horizontal") * speed/3, 0);

    var forward = transform.TransformDirection(Vector3.forward);
    var curSpeed = speed * Input.GetAxis ("Vertical");
    controller.SimpleMove(forward * curSpeed);

    if(Input.GetButton("Jump")){  
        moveDirection.y = jump;
    }
    if(Input.GetButton("Fire1")){
        if(fuel>0){
            Instantiate(fire, ext.position, ext.rotation);
            if(Time.time > nextBoost){
                nextBoost = Time.time + torque;
                exel++;
                fuel--;
            }
        }else{
            exel=0;
        }
    }else{
        if(exel>0){
            exel--;
        }
    }

    moveDirection.y += exel;

    moveDirection.y -= gravity * Time.deltaTime;
    var flags = controller.Move(moveDirection * Time.deltaTime);
    grounded = (flags & CollisionFlags.CollidedBelow) != 0;
}

function OnControllerColliderHit(hit : ControllerColliderHit)
{
    if(hit.gameObject.tag=="catcher")
    {
        transform.position = spawn.position;
    }
}

@script RequireComponent(CharacterController)

thanks. :)

Calling Move() and/or SimpleMove() more than once per frame causes weird results. I suggest that you scale forward*curSpeed by deltaTime and add it into your call to Move() instead of applying it separately.