What is going on with this pickUp Script?

Ok I can't figure this out, My Pickup script for my "Shotgun shells" is kinda working, I think?? But it seems to ONLY add to my shotgun if I already have shells, if I'm OUT of shells then it does not add?? What the heck??

Here is my Pickup script:

enum PickupType { Health = 0, Rocket = 1, Ammo = 20, Shells = 2, Grenades = 20, AlienArtifact01, }
var pickupType = PickupType.Health;
var amount = 20;
var sound : AudioClip;

private var used = false;

function ApplyPickup (player : FPSPlayer) {
    if (pickupType == PickupType.Health) {
        if (player.hitPoints >= player.maximumHitPoints)
            return false;

        player.hitPoints += amount;
        player.hitPoints = Mathf.Min(player.hitPoints, player.maximumHitPoints);
    } 

    else if (pickupType == PickupType.Rocket) {
        var launcher : RocketLauncher = player.GetComponentInChildren(RocketLauncher);
        if (launcher)
            launcher.ammoCount += amount;
    }

    else if (pickupType == PickupType.Ammo) {
            var ammo : MachineGun = player.GetComponentInChildren(MachineGun);
            if (ammo)
            ammo.bulletsPerClip += amount;
    }

    else if (pickupType == PickupType.Shells) {
            var Shells : Shotgun = player.GetComponentInChildren(Shotgun);
            if (Shells)
            Shells.bulletsPerClip += amount;
    }

    else if (pickupType == PickupType.Grenades) {
            var Grenades : MissileLauncher = player.GetComponentInChildren(MissileLauncher);
            if (Grenades)
            Grenades.grenadesLeft += amount;
    }

                return true;

}

function OnTriggerEnter (col : Collider) {
    var player : FPSPlayer = col.GetComponent(FPSPlayer);

    //* Make sure we are running into a player
    //* prevent picking up the trigger twice, because destruction
    //  might be delayed until the animation has finnished
    if (used || player == null)
        return;

    if (!ApplyPickup (player))
        return;
    used = true;

    // Play sound
    if (sound)
        AudioSource.PlayClipAtPoint(sound, transform.position);

    // If there is an animation attached.
    // Play it.
    if (animation && animation.clip) {
        animation.Play();
        Destroy(gameObject, animation.clip.length);
    } else {
        Destroy(gameObject);
    }
}

// Auto setup the pickup
function Reset () {
    if (collider == null)   
        gameObject.AddComponent(BoxCollider);
    collider.isTrigger = true;
}

And here is my Shotgun Script:

var range = 70.0;
var fireRate = 4.00;
var force = 300.0;
var damage = 10.0;
var bulletsPerClip = 2;
var clips = 10;
var reloadTime = 1.0;
private var hitParticles : ParticleEmitter;
var muzzleFlash : Renderer;

private var bulletsLeft : int = 0;
private var nextFireTime = 0.0;
private var m_LastFrameShot = -1;

function Start () {
    hitParticles = GetComponentInChildren(ParticleEmitter);

    // We don't want to emit particles all the time, only when we hit something.
    if (hitParticles)
        hitParticles.emit = false;
    bulletsLeft = bulletsPerClip;
}

function LateUpdate() {
    if (muzzleFlash) {
        // We shot this frame, enable the muzzle flash
        if (m_LastFrameShot == Time.frameCount) {
            muzzleFlash.transform.localRotation = Quaternion.AngleAxis(Random.value * 360, Vector3.forward);
            muzzleFlash.enabled = true;

            if (audio) {
                if (!audio.isPlaying)
                    audio.Play();
                audio.loop = true;
            }
        } else {
        // We didn't, disable the muzzle flash
            muzzleFlash.enabled = false;
            enabled = false;

            // Play sound
            if (audio)
            {
                audio.loop = false;
            }
        }
    }
}

function Fire () {
    if (bulletsLeft == 0)
        return;

    // If there is more than one bullet between the last and this frame
    // Reset the nextFireTime
    if (Time.time - fireRate > nextFireTime)
        nextFireTime = Time.time - Time.deltaTime;

    // Keep firing until we used up the fire time
    while( nextFireTime < Time.time && bulletsLeft != 0) {
        FireOneShot();
        nextFireTime += fireRate;
    }
}

function FireOneShot () {
    var direction = transform.TransformDirection(Vector3.forward);
    var hit : RaycastHit;

    // Did we hit anything?
    if (Physics.Raycast (transform.position, direction, hit, range)) {
        // Apply a force to the rigidbody we hit
        if (hit.rigidbody)
            hit.rigidbody.AddForceAtPosition(force * direction, hit.point);

        // Place the particle system for spawing out of place where we hit the surface!
        // And spawn a couple of particles
        if (hitParticles) {
            hitParticles.transform.position = hit.point;
            hitParticles.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
            hitParticles.Emit();
        }

        // Send a damage message to the hit object          
        hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
    }

    bulletsLeft--;

    // Register that we shot this frame,
    // so that the LateUpdate function enabled the muzzleflash renderer for one frame
    m_LastFrameShot = Time.frameCount;
    enabled = true;

    // Reload gun in reload Time        
    if (bulletsLeft == 0)
        Reload();           
}

function Reload () {

    // Wait for reload time first - then add more bullets!
    yield WaitForSeconds(reloadTime);

    // We have a clip left reload
    if (clips > 0) {
        clips--;
        bulletsLeft = bulletsPerClip;
    }
}

function GetBulletsLeft () {
    return bulletsLeft;
}

Arn't you adding it to the wrong variable? Your adding it to the BulletsPerClip instead of BulletsLeft.

if (Shells)
Shells.bulletsPerClip += amount; //This line

I think you should change that to bulletsLeft, however you should make that var public beforehand.