Enemy AI Issue

Hi guys i create a simple EnemyAI that enemy is in idle position, if i enter certain range he face me and if i get closer i start chase… if i get farway he return to initial position. Everything goes fine but i hv a problem when enemy in in start point, even after return of chase he keep over rotating in his Y Axes and only stop when im in range to face me… can anyone help me?

theres the script

using UnityEngine;
using System.Collections;
public class EnemyAI : MonoBehaviour
{
    float distance;
    float lookAtDistance = 25.0f;
    float attackRange = 15.0f;
    float damping = 6.0f;
    public int speed;
    bool isReturning;
    public AnimationClip idle;
    public AnimationClip run;
    public Transform target;
    private Vector3 initialPosition;
   
    void Start()
    {
        initialPosition = transform.position;
        isReturning = false;
    }
    void Update()
    {
        if (!isReturning)
        {
            distance = Vector3.Distance(target.position, transform.position);
           
            if (distance < lookAtDistance)
            {
                animation.CrossFade (idle.name);
                LookAt (target.position);
            }

            if(distance > lookAtDistance && distance > attackRange) //LookDistance is always bigger than the attackRange so i commented it out. //if (distance > lookAtDistance) && distance>attackRange)
            {
                isReturning = true;
                animation.CrossFade(run.name);
            }
           
            if (distance < attackRange)
            {
                animation.CrossFade(run.name);
                MovePlayerForward();
            }
        }
        else
        {
            LookAt (initialPosition);
            MovePlayerForward();
           
            distance = Vector3.Distance(initialPosition, transform.position);
            if (distance <20)
            {
                isReturning = false;
            }
        }
    }
    void LookAt(Vector3 targetPosition)
    {
        Quaternion rotation = Quaternion.LookRotation(targetPosition - transform.position);
        transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * damping);
    }
   
    void MovePlayerForward()
    {
        transform.Translate(Vector3.forward * speed * Time.deltaTime);
    }
}

Ok after i search and change a bit my script i found that the problem is in damping parameter but i dont know wt can i change in my script to stop over rotationg inself and when near player do the same… Can anyone help plz?
Appreciate.

Sry again i tweek my script again and now the nemy only over rotate himself when he is in the spawn point out of my looat range… When i enter in lookat range he stays in normal idle animation… but when im out of that distance it keeps rotating like around is center (Y axes)

New script:

using UnityEngine;
using System.Collections;

public class EnemyAI : MonoBehaviour
{
    float distance;
    float lookAtDistance = 25.0f;
    float chaseRange = 15.0f;
    float damping = 6.0f;
    float range = 1.25f;

    public int speed;

    bool isReturning;

    public AnimationClip idle;
    public AnimationClip run;
    public AnimationClip attack;

    public Transform target;

    private Vector3 initialPosition;

    public CharacterController controller;
   
    void Start()
    {
        initialPosition = transform.position;
        isReturning = false;
    }
    void Update()
    {
        if (!isReturning)
        {
            distance = Vector3.Distance(target.position, transform.position);
           
            if (distance < lookAtDistance)
            {
                animation.CrossFade (idle.name);
                LookAt (target.position);
            }

            if(distance > lookAtDistance && distance > chaseRange) //LookDistance is always bigger than the attackRange so i commented it out. //if (distance > lookAtDistance) && distance>attackRange)
            {
                isReturning = true;
                animation.CrossFade(run.name);
            }
           
            if (distance < chaseRange)
            {
                transform.LookAt(target.position);
                controller.SimpleMove(transform.forward*speed);
                animation.CrossFade(run.name);

            }

            if(distance <= range)
            {
                animation.Play(attack.name);
            }
        }
        else
        {
            LookAt (initialPosition);
            MovePlayerForward();
           
            distance = Vector3.Distance(initialPosition, transform.position);
            if (distance <20)
            {
                isReturning = false;
            }
        }
    }
    void LookAt(Vector3 targetPosition)
    {
        Quaternion rotation = Quaternion.LookRotation(targetPosition - transform.position);
        transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * damping);
    }
   
    void MovePlayerForward()
    {
        transform.Translate(Vector3.forward * speed * Time.deltaTime);
    }
}

One more thing i dont know that can help… in button of interface when normally appear the error messages i hv this in a ! white circle: Look rotation viewing vectro is zero.

I dont know wt this mean :s

Sry for so many information O