Why am I not moving forward?

So I have a character with a character controller on it, animation is working which is great, however I’m not moving forward, why? =[

Thanks in advance.

private var equip : int;

var apple : Rigidbody;
var poisonBerry : Rigidbody;

static var Roses : int;
private var RosesGathered : boolean;
private var GrannyDead : boolean;



function Update () {

	if (Input.GetKeyDown("w"))
	{

		var controller : CharacterController = GetComponent(CharacterController);
		
		if (controller.isGrounded)
			{ 
			moveDirection = Vector3(Input.GetAxis("Horizontal"), 0,
									Input.GetAxis("Vertical"));
			moveDirection = transform.TransformDirection(moveDirection);
			moveDirection *= walkSpeed;
			}
			
			controller.Move(moveDirection * Time.deltaTime);	

		
		
	
		animation.Play("walk");
	
	}
	
	
	
	if (Input.GetKeyDown("g"))
	{
		var BaitSpawn : GameObject = gameObject.FindWithTag("baitSpawn");
		var BaitThrow = Instantiate(apple,BaitSpawn.transform.position, BaitSpawn.transform.rotation);
		
		
		animation.Play("throw");
		BaitThrow.rigidbody.AddRelativeForce(Vector3.forward * 750);
		
	
	}


	if (Roses > 9){
	
	RosesGathered = true;
		
	}
	
}

function OnControllerColliderHit (hit : ControllerColliderHit){
	
	if(hit.gameObject.tag == "GranniesExit"){
	
	Application.LoadLevel(0);
		
	}

	if(hit.gameObject.tag == "GranniesDoor"){
		
		if (RosesGathered == true){
		
	Application.LoadLevel(1);
			
			GrannyDead = true;

			
		//else{show message - granny would really like some roses}
			
		}
			
	}


	if(hit.gameObject.tag == "Rose"){
	
	Destroy(hit.gameObject);
	//audio.clip = pickUp;
	//audio.volume = 1.0;
	//audio.Play();
	Roses += 1;

	}
	
	
	if(hit.gameObject.tag == "Forest1"){
		
		if(GrannyDead == true){
		
		Destroy(hit.gameObject);
			
		}
		
	}
	
}

Everything seems right, unless isGrounded never returns true. Test it, at this to Update function.

print(controller.isGrounded);