Making FPS Reticule Change

I am trying to make i so when My reticule(characters Z) goes over an object tagged enemy it changes the reticule to red.

Heres my code so far

var target:Transform;
var range = 10.0;
var reticule:GUITexture;
var colorOn:Color;
var colorOff:Color;

function Awake()
{
    if(!target)
    {
        target = GameObject.FindWithTag("Enemy").transform;
    }
}

function Update() 
{
    if(target && CanAttackTarget())
    {
        reticule.color = colorOn;
    }

    else// if(target && !CanAttackTarget())
    {
        reticule.color = colorOff;
        //var defaultLookRotation = Quaternion.LookRotation(defaultLook.position - transform.position, Vector3.up);
        //transform.rotation = Quaternion.Slerp(transform.rotation, defaultLookRotation, Time.deltaTime * damp);
        print("NO");
    }
}

function CanAttackTarget()
{
    //Check if target is in range
    if(Vector3.Distance(transform.position, target.position) > range)
    {
        print("Not in Range");
        return false;
    }

    var hit : RaycastHit;
    //Check if theres interferance between the two
    if(Physics.Linecast(transform.position, target.position, hit))
    {
        if(hit.collider.gameObject.tag != "Enemy")
        {
            print("Interferance from : " + hit.collider.gameObject.name);
            return false;
        }

        else
        {
            print("enemy detected");
            return true;
        }
    }

    return true;
}

the only problem is when even when Im not looking at it its red, but when Im not in the specified range it turns white. I wan it to turn white when Im not looking at it and red when I am (from the distance specified as range)

First of all, a raycast is from position to position... it has nothing to do with "looking at" something. It is simply a line drawn from one point to another. So when you raycast in your code, you are simply asking if a line can be drawn from you to the target, not if your camera can "see" it. What you want is Camera.main.ScreenPointToRay.

If you check the documentation, you'll find that this will allow you to project your ray through the camera's viewpoint towards a target.

var ray : Ray = camera.ScreenPointToRay (Vector3(mousePosition.x,mousePosition.y,0));
var hit : RaycastHit;
if(Physics.Raycast(ray, hit)){
    // do your tag check here
}

That should determine if there is interference between your mouse position and the target. You may have to invert the mousePosition.y (with something like [Screen.height-mousePosition.y] to get the correct mouse position for the ScreenPointToRay... I forget).

Another thing you might want to look at is renderer.isVisible. That might be useful as well...

P.S.: If you put your distance in the Raycast, you no longer need your first "if" statement. Granted, you'll be Raycasting every frame, so you might want to keep it for optimization, but it isn't necessary:

if (Physics.Raycast (ray, hit, range)){
   // do your tag check here
}