When character stops moving - stop "Walk" animation

I have some major issues with making a script that will trigger my character “walk” animation when moving, and switch to idle as soon as he stops. I’m using point & click kind of movement script, so it’s not about buttons being pressed.

My movement script

using UnityEngine;
using System.Collections;

public class movement : MonoBehaviour {
	
	public RaycastHit hit;
	public Ray ray;
	public Vector3 direction;
	public float moveSpeed = 0.1f;
	public int rotateSpeed =50;
	public Transform PlayerTransform;
	public float curSpeed;
	
	
	
	// Use this for initialization
	void Start () 
	{
		    PlayerTransform = transform;
   		    direction = PlayerTransform.position;
	}
	
	// Update is called once per frame
	void Update () 

	{	
	if(Input.GetMouseButton(0))
					
		{
			ray = Camera.main.ScreenPointToRay(Input.mousePosition);
			if(Physics.Raycast (ray, out hit, 100))
			{			
				    Debug.DrawLine (ray.origin, hit.point, Color.red, 2);
					Debug.Log ("Raycasted");
					direction = hit.point;
					
					Vector3 targetPoint = hit.point;
        			Quaternion targetRotation = Quaternion.LookRotation(targetPoint - PlayerTransform.position);
        			transform.rotation = Quaternion.Slerp(PlayerTransform.rotation, targetRotation, rotateSpeed * Time.deltaTime);
					transform.rotation = Quaternion.Euler(0, transform.rotation.eulerAngles.y, 0);
					

			}
			
			
		}

		PlayerTransform.position = Vector3.MoveTowards(PlayerTransform.position, direction, moveSpeed * Time.deltaTime);
					Debug.DrawLine(PlayerTransform.position, hit.point, Color.blue, 2);
	
		}
	}

Add a new variable:

boolean isMoving=false;

Inside the if(Physics.Raycast (ray, out hit, 100)), add

isMoving=true;

And then, right below PlayerTransform.position = Vector3.MoveTowards(PlayerTransform.position, direction, moveSpeed * Time.deltaTime);
:

if(transform.position==targetPoint)
isMoving=false;

if(isMoving){ //if the character is moving
animation.CrossFade("walk");
}
else{
animation.CrossFade("idle");
}

Finally, you should initialise the targetposition and targetrotation variables publicly, outside of the Update function.
And if you want to be absolutely safe, you could also initialise a new variable

float minDistance=0.01;

and replace

if(transform.position==targetPoint)

with

if(Vector3.Distance(transform.position,targetPoint)< minDistance )

An even more accurate solution would be to attach a kinematic rigidbody to your character and determine the animation played via its velocity:

if(rigidbody.velocity>0.01)
animation.crossFade("walk");
else
animation.crossFade("idle");