Working of Drag and drop using mouse events in as3/flex

[COLOR=#000000][FONT=Arial]After going through many tutorials i came up with the below drag and drop mxml program(using script tag), but the placement is not accurate. Looking for alternate method for placing dropping card at right place within canvas.

[/FONT][/COLOR]<?xml version=“1.0” encoding=“utf-8”?>
<mx:Application xmlns:mx=“http://www.adobe.com/2006/mxml” layout=“absolute” creationComplete=“carcan();”>
<mx:Script>
<=!=[=C=D=A=T=A=[

        import mx.containers.Canvas;
        import mx.controls.Image;

private var images:Array;
private var images1:Array;
private const IMAGE_COUNT:uint = 5;
private var img:Image;
private var img1:Image;

private var points:flash.geom.Point;
private var offset_x:int;
private var offset_y:int;
private var canal:Canvas;
private var doDrag:Boolean;

        [Embed(source='cards/2C.png')]
        private var Image0:Class;
        [Embed(source='cards/2D.png')]
        private var Image1:Class;

[Embed(source=‘cards/2H.png’)]
private var Image2:Class;
[Embed(source=‘cards/2S.png’)]
private var Image3:Class;
[Embed(source=‘cards/3C.png’)]
private var Image4:Class;
public function carcan():void
{
canal = new Canvas();
canal.setStyle(“backgroundColor”,“blue”);
canal.x=100;
canal.y=50;
canal.width=500;
canal.height=400;
this.addChild(canal);
init();
}

         public function init():void
         {
          images = new Array(IMAGE_COUNT);
             for (var i:int = 0; i &lt; IMAGE_COUNT; i++)
                {
                     img= new Image();
                     img1= new Image();
                        images* = this["Image" + i];
                        trace(images*);

                img.x=(i*30)+50;
                img.source=images*;
                img.id="Image"+i;
                canal.addChild(img);

                 img.addEventListener(MouseEvent.MOUSE_DOWN, md);
                img.addEventListener(MouseEvent.MOUSE_MOVE, mm);
                canal.addEventListener(MouseEvent.MOUSE_OUT,smu);
                img.addEventListener(MouseEvent.MOUSE_UP, mu);
                                        }

         }
         public function smu(event:MouseEvent):void
         {
            img.alpha=1;
            img.stopDrag();
            doDrag=false;
            setCards(); 
         }


         public function mo(event:MouseEvent):void
         {
            if(doDrag==true)
            {
            img.addEventListener(MouseEvent.MOUSE_DOWN, md);
            img.addEventListener(MouseEvent.MOUSE_UP, mu);
            img.stopDrag();
            img.alpha=1;
            img.removeEventListener(MouseEvent.MOUSE_MOVE, mm);
            }
            else
            {
            img.addEventListener(MouseEvent.MOUSE_MOVE, mm);
            }
         }                 

         public function md(event:MouseEvent):void
        {
        img = new Image();
            doDrag=true;

canal.setChildIndex(Image(event.target),images.length-1);
img.addEventListener(MouseEvent.MOUSE_MOVE, mm);

        }

public function mm(event:MouseEvent):void
{
if(doDrag==true)
{
points = new Point();
images = new Array(IMAGE_COUNT);
img = new Image();
img = Image(event.target);
points.x=event.target.x;
points.y=event.target.y;
points = localToGlobal(points);
img.x=points.x;
img.y=points.y;
img.alpha=0.7;
img.addEventListener(MouseEvent.MOUSE_UP, mu);
var boundar:flash.geom.Rectangle = new Rectangle(this.x, this.y, 250, 100);

             }
        }

public function mu(event:MouseEvent):void
{
img.alpha=1;
canal.stopDrag();
doDrag=false;
canal.stopDrag();
doDrag=false;
var current:Image = event.currentTarget as Image;
var num1:int = current.x;
if(num1 < 50){
canal.setChildIndex(current, images.length-5);
current.y=0;
setCards();
}
if(num1 > 50 && num1 < 80)
{
canal.setChildIndex(current, images.length-4);
current.y=0;
setCards();
}
if(num1 > 80 && num1 < 110){

    canal.setChildIndex(current, images.length-3);
    current.y=0;
        setCards(); 
        }
    if(num1 &gt; 110 && num1 &lt; 140){
        canal.setChildIndex(current, images.length-2);

current.y=0;
setCards();
}

if(num1 > 140 && num1 < 170){
canal.setChildIndex(current, images.length-2);
current.y=0;
setCards();
}

    if(num1 &gt; 170){

canal.setChildIndex(current, images.length-1);
current.y=0;
setCards();
}
}
private function setCards():void{
var b:int = 0;
var a:int;
var cardsArray:Array = canal.getChildren();
for(a = 0;a < cardsArray.length; a++)
{
canal.getChildAt(a).x = 50+b;
b=b+30;
canal.getChildAt(a).y=0;
}
}
]=]=>
</mx:Script>
</mx:Application>

[COLOR=#000000][FONT=Arial]PS: I am trying to replace the drag and drop events with mouse events and get the same functionality using mouse events.[/FONT][/COLOR]