Need help with a grid snap function

This is my first action script project and I’m having trouble with some positioning of movie clips that I can’t work out.
I’ll post in the parts of the code that I think are relevant in hopes that someone may be able to see what I am missing.
The problem is that according to my traces my gridSnap function should be working. The trace shows mc.y to have the correct value while the movie is running yet the mc’s in question are appearing in the wrong spot (they appear at GRIDSIZE*gridNumber) in the movie. The problem only manifests itself in case one and case three, both of which should have the same code but I was only testing different approaches in case one.

On with the code:

public function gridSnap(mc:MovieClip):void
        {
            var mcMod:Number = mc.y % GRIDSIZE;
            var gridNumber:uint = Math.round(mc.y / GRIDSIZE);
            switch (mc.height/GRIDSIZE)
            {
                case 1 :
                    if (mcMod != GRIDSIZE / 2)
                    {
                        if (mcMod < GRIDSIZE / 2)
                        {
                            mc.y = (GRIDSIZE*gridNumber) + (GRIDSIZE/2);
                            trace("< " + mcMod,gridNumber,GRIDSIZE*gridNumber,mc.y);
                        }
                        else if (mcMod > GRIDSIZE/2)
                        {
                            mc.y = (GRIDSIZE*gridNumber) - (GRIDSIZE/2);
                            trace("> " + mcMod,gridNumber,GRIDSIZE*gridNumber,mc.y);
                        }

                    }
                case 3 :
                    if (mcMod != GRIDSIZE / 2)
                    {
                        if (mc.y / GRIDSIZE < gridNumber)
                        {
                            mc.y = (GRIDSIZE*gridNumber) - GRIDSIZE/2;
                        }
                        else
                        {
                            mc.y = (GRIDSIZE*gridNumber) + GRIDSIZE/2;
                        }
                    }
                case 2 :
                    if (mcMod != 0)
                    {
                        mc.y = GRIDSIZE * gridNumber;
                    }
                case 4 :
                    if (mcMod != 0)
                    {
                        mc.y = GRIDSIZE * gridNumber;
                    }
            }
            if (mc.y - (mc.height/2) < (GRIDSIZE*2))
            {
                mc.y = GRIDSIZE * 2 + mc.height / 2;
            }
            else if (mc.y + (mc.height/2) > stage.stageHeight - (GRIDSIZE*2))
            {
                mc.y = stage.stageHeight - (GRIDSIZE*2) - (mc.height/2);
            }
        }
        public function pickUpMaterial():void
        {
            if (materialArray.length > 0)
            {
                if (! beaverOne.hasMaterial)
                {
                    for (var i:int = materialArray.length-1; i>=0; i--)
                    {
                        if (beaverOne.mc.hitTestObject(materialArray*))
                        {
                            beaverOne.mc.addChild(materialArray*);
                            beaverOne.hasMaterial = true;
                            beaverOne.currentMaterial = materialArray*;
                            materialArray*.x = 0;
                            materialArray*.y = 0;
                            materialArray.splice(i,1);
                        }
                    }
                }
                else
                {
                    addChild(beaverOne.currentMaterial);
                    beaverOne.currentMaterial.x = beaverOne.mc.x;
                    beaverOne.currentMaterial.y = beaverOne.mc.y;
                    materialArray.push(beaverOne.currentMaterial);
                    gridSnap(materialArray[materialArray.length-1]);
                    beaverOne.currentMaterial = null;
                    beaverOne.hasMaterial = false;
                }
            }
        }

Anyways, as I said this is my first project so I’m sure that it’s not pretty but it’s driving me nuts that the mc’s y values trace correctly but appear on the sceen wrong.

As a second question, I used a switch() thing and was wondering if it’s possible to have more than one condition per case. In the case of this particular switch I can combine 1 and 3 together and 2 and 4 together but I haven’t figured out how to write that out.

Thanks kindly.