Help with map, can't stop drag after mouse leaves map

Does anyone know what I am doing wrong? I am trying to make it so when the mouse leaves the stage it stops the drag, but no matter what I do it does not work, the function I am trying to do it in is onMouseLeave();

Here is my code and the corresponding code:


import fl.controls.Slider;
import fl.events.SliderEvent;
import flash.ui.Mouse;

var hasMouse:Boolean = false;

cursor.visible = false;
zoom_slider['slider'].addEventListener(SliderEvent.CHANGE, onSlide);
zoom_slider.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
zoom_slider.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
site_map.addEventListener(MouseEvent.MOUSE_DOWN, onMouseClick);
site_map.addEventListener(MouseEvent.MOUSE_UP, onMouseRelease);
site_map.addEventListener(Event.MOUSE_LEAVE, onMouseLeave);
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMovement);
stage.addEventListener(MouseEvent.MOUSE_WHEEL, MouseWheelHandler);

function onMouseEnter():void {
    if (zoom_slider['slider'].value <= 0) {
        cursor.visible = false;
        Mouse.show();
    } else {
        cursor.visible = true;
        cursor.gotoAndStop(1);
        cursor.startDrag(true);
    }
}

function onMouseLeave(event:Event):void {
    cursor.stopDrag();
    cursor.startDrag(false);
    hasMouse = false;
    cursor.gotoAndStop(1);
    cursor.stopDrag();
    cursor.visible = false;
}

function onMouseMovement(event:MouseEvent):void {
    if (!hasMouse) {
        hasMouse = true;
        onMouseEnter();
    }
    cursor.x = mouseX;
    cursor.y = mouseY;
}

function MouseWheelHandler(event:MouseEvent):void {
    zoom_slider['slider'].value = zoom_slider['slider'].value + event.delta;
    zoom_slider['slider'].dispatchEvent(new SliderEvent(SliderEvent.CHANGE, zoom_slider['slider'].value, 'SliderEventClickTarget.THUMB', 'InteractionInputType.MOUSE'));
}

function onSlide(event:SliderEvent):void {
    if (event.target.value == 0) {
        cursor.visible = false;
        Mouse.show();
    } else {
        cursor.visible = true;
        Mouse.hide();
    }

    site_map.scaleX = site_map.scaleY = (event.target.value + 5) / 5;
    site_map.x = (site_map.width - site_map.stage.stageWidth) / -2;
    site_map.y = (site_map.height - site_map.stage.stageHeight) / -2;
}

function onMouseOver(event:Event):void {
    if (zoom_slider['slider'].value > 0) {
        cursor.visible = false;
        Mouse.show();
    }
}

function onMouseOut(event:Event):void {
    if (zoom_slider['slider'].value > 0) {
        cursor.visible = true;
        Mouse.hide();
    }
}

function onMouseClick(event:MouseEvent):void {
    var boundsBoxX:Number = (site_map.stage.stageWidth - site_map.width);
    var boundsBoxY:Number = site_map.stage.stageHeight - site_map.height;
    var boundsBoxWidth:Number = (site_map.width - site_map.stage.stageWidth);
    var boundsBoxHeight:Number = (site_map.height - site_map.stage.stageHeight);
    var boundsBox:Rectangle = new Rectangle(boundsBoxX, boundsBoxY, boundsBoxWidth, boundsBoxHeight);
    //trace(site_map.width + ' ' + site_map.height + ' ' + boundsBoxWidth + ' ' + boundsBoxHeight);
    //trace(site_map.width + ' ' + site_map.stage.stageWidth + ' ' + boundsBoxWidth + ' ' + boundsBoxX);
    cursor.gotoAndStop(2);
    event.currentTarget.startDrag(false, boundsBox);
}

function onMouseRelease(event:MouseEvent):void {
    cursor.gotoAndStop(1);
    event.target.stopDrag();
}