making turns in infinte runner

1)i have a player which is followed by camera,
with left and right arrow i make turns,
and with A and D,horizontal movement is done.
but as soon as my player turns,
A and D works as vertical movement.
how to get it work.

2)and also,how to make my camera to rotate behind my player,
coz when i make my cam child of player,
it goes below terrain when my player slides 

the script:



#pragma strict
	var controller : CharacterController ;
	private var moveDirection : Vector3 = Vector3.zero;
	private var gravity : float = 1;
	private var vSpeed :int;
	private var jumpspeed=25;
	var living=Vector3.forward;
	var jump: AudioClip;
	var sliding: AudioClip;
	private var movement: Vector3=Vector3.zero;
	private var moveSpeed = 5;
	var die: AudioClip;
	var over: AudioClip;
	private var slideflag=false;
	private var jumpflag=false;

	
	
function Start () 
{
controller= GetComponent(CharacterController);
animation["run"].speed=1.2;
}

function FixedUpdate () {
    
    if(living!=Vector3.right)
 	{
 	 	movement=Vector3(Input.GetAxis("Horizontal")*4,0,0);
 	  	moveDirection =(living)*4.5 + movement;
        moveDirection *= moveSpeed;
	  	if(controller.isGrounded)
	  	{
	
	 	 	vSpeed=0;
	 	 	jumpflag=false;
	 		if(slideflag==false)
	 		 {
	 			animation.Play("run");
	 			if (Input.GetKeyDown(KeyCode.Space)) 
	 			{
	 				jumpflag=true;
		 			animation.Play("jump_pose");
		 			audio.PlayOneShot(jump);
   					vSpeed=jumpspeed;
 		 		}
 	 		}
	}
	dieplayer();
 	if (Input.GetKeyDown(KeyCode.S)) 
  	slide();
  	
  	if(Input.GetKeyDown(KeyCode.RightArrow))
  	{
  	 transform.LookAt(transform.position + Vector3.right);  

 
 //       transform.Rotate(0,90,0);  
    }
    if(Input.GetKeyDown(KeyCode.LeftArrow))
    {
        transform.Rotate(transform.position + Vector3.left);  
    }

	vSpeed -= gravity ;
  	moveDirection.y=vSpeed;
    controller.Move(moveDirection*Time.deltaTime );
	 }
	}
	
	function slide()
	{
		if(jumpflag==false)
		{
  			if (Input.GetKeyDown(KeyCode.S)) 
  			{
  			slideflag=true;
  			animation.Play("jump_pose");
			transform.rotation = Quaternion.Euler(-90,000,0);
 			transform.Translate(0,-2,0);
  			audio.PlayOneShot(sliding);
			yield WaitForSeconds(1);
			transform.rotation = Quaternion.Euler(0,000,0);
 			animation.Play("run");
 			slideflag=false;
 			}
		}
	}
	function dieplayer()
	{
		if(living==Vector3.zero)
		{
			living=Vector3.right;
			audio.Stop();
			animation.Stop("run");
			audio.PlayOneShot(die);
			yield WaitForSeconds(.5f);
			audio.PlayOneShot(over);
	}
	}