Vertical Wall Collision Help

Hey guys and gals of the forums!
I’m new to ActionScript 3.0 and I’m having trouble with collision, specifically with vertical walls. Whenever I move my character into a vertical wall (I’m making a flash game by the way), it would always teleport the character to the top of the platform from where the vertical slope comes down from. Is there a way to make my character hit the wall vertically and stopping without having me to constrain the character within a certain boundary of the stage?

Here’s my code so far:

import flash.events.Event;
import flash.events.KeyboardEvent;

var leftKeyDown:Boolean = false;
var rightKeyDown:Boolean = false;
var upKeyDown:Boolean = false;
var downKeyDown:Boolean = false;
var xSpeed:Number = 0;
var ySpeed:Number = 0;
var mainSpeed:Number = 0.5;
var frictionPower:Number = 0.8;
var gravityPower:Number = 1;
var terminalVelocity:Number = 20;

stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeysDown);
stage.addEventListener(KeyboardEvent.KEY_UP, checkKeysUp);
stage.addEventListener(Event.ENTER_FRAME, hitTest);
stage.addEventListener(Event.ENTER_FRAME, Main);

function Main(event:Event)
{
    moveCharacter();
    dynamicMovement();
}

function checkKeysDown(event:KeyboardEvent)
{
    if (event.keyCode == 37)
    {
        leftKeyDown = true;
    }
    if (event.keyCode == 38)
    {
        upKeyDown = true;
    }
    if (event.keyCode == 39)
    {
        rightKeyDown = true;
    }
    if (event.keyCode == 40)
    {
        downKeyDown = true;
    }
}

function checkKeysUp(event:KeyboardEvent)
{
    if (event.keyCode == 37)
    {
        leftKeyDown = false;
    }
    if (event.keyCode == 38)
    {
        upKeyDown = false;
    }
    if (event.keyCode == 39)
    {
        rightKeyDown = false;
    }
    if (event.keyCode == 40)
    {
        downKeyDown = false;
    }
}

function moveCharacter()
{
    if (leftKeyDown)
    {
        xSpeed -=  mainSpeed;
    }
    if (rightKeyDown)
    {
        xSpeed +=  mainSpeed;
    }
    if (upKeyDown)
    {
        ySpeed -=  7;
    }
}

function dynamicMovement()
{
    mcMain.x +=  xSpeed;
    xSpeed *=  frictionPower;

    if (xSpeed > 3)
    {
        xSpeed = 3;
    }

    mcMain.y +=  ySpeed;
    ySpeed +=  gravityPower;

    if (ySpeed > terminalVelocity)
    {
        ySpeed = terminalVelocity;
    }
}

wallCollision.visible = false;

function hitTest(event:Event)
{
    while (wallCollision.hitTestPoint(mcMain.x,mcMain.y,true))
    {
        mcMain.y--;
    }
    if (! wallCollision.hitTestPoint(mcMain.x,mcMain.y + 1,true))
    {
        upKeyDown = false;
    }
    if (wallCollision.hitTestPoint(mcMain.x,mcMain.y + 1,true))
    {
        ySpeed = 0;
    }
}