Instantiating random prefabs

Hello, We are trying to make a random pickup appear in a random place. i think i have the sort of right lines but it keeps giving us an error message so it's definatly not right lol. This is what we have so far.

var prefabOnLevel : boolean = false;
var nextSpawnTime : float = 2.0;
var timeBetweenSpawns : float = 30.0;

function Awake()
{
    var SpawnWhat : GameObject[] = GameObject.FindGameObjectsWithTag ("PickUp");
    var SpawnThis : GameObject = SpawnWhat[Random.Range(0,SpawnWhat.length)];
    var PickUpSpawn : GameObject[] = GameObject.FindGameObjectsWithTag ("PickUpSpawn");
    var SpawnHere : Transform = PickUpSpawn[Random.Range(0, PickUpSpawn.length)].transform;
}

function Update ()
{
    if (!GameObject.FindWithTag ("PickUp"))
    {
        prefabOnLevel = false;
    }

    if (nextSpawnTime < Time.time)
    {
        nextSpawnTime = Time.time + timeBetweenSpawns;

        if (prefabOnLevel == false)
        {
            Instantiate (SpawnThis, SpawnHere.position, SpawnHere.rotation);
            Debug.Log ("should be a pick up in level");
        }
    }
}

This particular format gives us the error of Unknown variable on the Instantiate line.

function Update ()
{
    if (!GameObject.FindWithTag ("PickUp"))
    {
        prefabOnLevel = false;
    }

    if (nextSpawnTime < Time.time)
    {
        nextSpawnTime = Time.time + timeBetweenSpawns;

        if (prefabOnLevel == false)
        {
            var SpawnWhat : GameObject[] = GameObject.FindGameObjectsWithTag ("PickUp");
            var SpawnThis : GameObject = SpawnWhat[Random.Range(0,SpawnWhat.length)];
            var PickUpSpawn : GameObject[] = GameObject.FindGameObjectsWithTag ("PickUpSpawn");
            var SpawnHere : Transform = PickUpSpawn[Random.Range(0, PickUpSpawn.length)].transform;
            Instantiate (SpawnThis, SpawnHere.position, SpawnHere.rotation);
            Debug.Log ("should be a pick up in level");
        }
    }
}

this format gives us the error of "Array index is out of range" at runtime, in the line var SpawnThis. What are we doing wrong?

In the first, your variables are local to Awake, you'd need to put them outside.

In the second, Random.Range is inclusive, so if the length were, say, 5, it might return 5, which would be out of bounds. Try Random.Range(0,PickUpSpawn.length-1)