I'm n00b at as3 and got stressed out (creating photoshop like application)

Hey guys, i am really in need of assistance right now, any help will be much appreciated. I’m new to adobe flash, especially as3, but I chose to make as3 application as my final project, for the last 3 weeks I got stuck and had no clue.

So my application is a map/directory creator application for an ekiosk client (my friend makes the client version, also based on as3), the problem is i am able to create shapes and symbols for facilities and transport, but has no clue on how to select and move them which is a very basic feature. Worse, i have no clue on how to save and load them afterward (also on my friend’s application). You can call me noob or stupid or whatever cos I am really at my lowest point o my life, but please guide me and show my a way. Thank you.

Here’s the code (only 1 .fla cos I have no clue on how to use classes):

import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.MovieClip;
import fl.controls.ComboBox;
import fl.data.DataProvider;
import flash.display.Loader;
import flash.display.LoaderInfo;
import caurina.transitions.*;
import caurina.transitions.properties.FilterShortcuts;
import caurina.transitions.properties.*;

atmTool.buttonMode=true;
cutTool.buttonMode=true;
copyTool.buttonMode=true;
emergencyTool.buttonMode=true;
elevatorTool.buttonMode=true;
ellipseTool.buttonMode=true;
escalatorTool.buttonMode=true;
infoTool.buttonMode=true;
moveTool.buttonMode=true;
nodeTool.buttonMode=true;
pasteTool.buttonMode=true;
polygonTool.buttonMode=true;
rectangleTool.buttonMode=true;
selectTool.buttonMode=true;
toiletTool.buttonMode=true;
zoomInTool.buttonMode=true;
zoomOutTool..buttonMode=true;
loadBMButt.buttonMode=true;
clearBMButt.buttonMode=true;

var x1:int = new int();
var y1:int = new int();
var x2:int = new int();
var y2:int = new int();
var    j:int = new int();
var beforeMoveX:int = new int();
var afterMoveX:int = new int();
var beforeMoveY:int = new int();
var afterMoveY:int = new int();
var shape:String = new String();
var rectangle:MovieClip = new MovieClip();
var ellipse:MovieClip = new MovieClip();
var drawBuffer:MovieClip=new MovieClip();
var polygon:Sprite = new Sprite();
var elev:MovieClip = new Elevator();
var atm:MovieClip = new ATM();
var toil:MovieClip = new Toilet();
var esca:MovieClip = new Escalator();
var emer:MovieClip = new Emergency();
var info:MovieClip = new Information();
var s:Sprite = new Sprite();
var toiletArray:Array = new Array();
var atmArray:Array = new Array()
var informationArray:Array = new Array();
var emergencyArray:Array = new Array();
var elevatorArray:Array = new Array();
var escalatorArray:Array = new Array();
var rectangleArray:Array = new Array();
var polygonArray:Array = new Array();
var ellipseArray:Array = new Array();
var tempNodeArray:Array = new Array();
var objectArray:Array = new Array(); //objectarray

var dp:DataProvider = new DataProvider();
var imageLoader:Loader=new Loader(); 
objectCB.dataProvider=dp;
addChild(objectCB);

drawBoard.addChild(drawBuffer);
drawBoard.addEventListener(MouseEvent.MOUSE_DOWN, doStartXY);
drawBoard.addEventListener(MouseEvent.MOUSE_MOVE,doRefreshXY);
drawBoard.addEventListener(MouseEvent.MOUSE_UP, doEndXY);

cutTool.addEventListener(MouseEvent.MOUSE_DOWN, clearAll);
rectangleTool.addEventListener(MouseEvent.MOUSE_DOWN, setRectangle);
ellipseTool.addEventListener(MouseEvent.MOUSE_DOWN, setEllipse);
selectTool.addEventListener(MouseEvent.MOUSE_DOWN, setSelect);
elevatorTool.addEventListener(MouseEvent.MOUSE_DOWN, setElevator);
atmTool.addEventListener(MouseEvent.MOUSE_DOWN, setATM);
moveTool.addEventListener(MouseEvent.MOUSE_DOWN, setMove);
toiletTool.addEventListener(MouseEvent.MOUSE_DOWN, setToilet);
escalatorTool.addEventListener(MouseEvent.MOUSE_DOWN, setEscalator);
emergencyTool.addEventListener(MouseEvent.MOUSE_DOWN, setEmergency);
infoTool.addEventListener(MouseEvent.MOUSE_DOWN, setInformation);
loadBMButt.addEventListener(MouseEvent.MOUSE_DOWN, loadStringImage);
clearBMButt.addEventListener(MouseEvent.MOUSE_DOWN, clearBaseMap);
zoomInTool.addEventListener(MouseEvent.MOUSE_DOWN, zoomIn);
zoomOutTool.addEventListener(MouseEvent.MOUSE_DOWN, zoomOut);
polygonTool.addEventListener(MouseEvent.MOUSE_DOWN, setPolygon);

floorText.text="UG"; //currentFloor

//startxy, refreshxy, endxy
function doStartXY(e:MouseEvent) {
    x1 = drawBoard.mouseX;
    y1 = drawBoard.mouseY;    
    trace("x awal = " + x1 + " y awal = " + y1);

}

function doRefreshXY(e:MouseEvent){
    x2=drawBoard.mouseX;
    y2=drawBoard.mouseY;
    //trace("x akhir = " + x2 + " y akhir = " + y2);
    
    if (shape == "Rectangle" && x1>0 && y1>0) {
        drawBuffer.graphics.clear();
        drawBuffer.graphics.lineStyle(2,0000000);
        drawBuffer.graphics.beginFill(0xFFFFFF);
        drawBuffer.graphics.drawRect(x1,y1,x2-x1,y2-y1);
    }    else if (shape == "Ellipse" && x1>0 && y1>0)     {
        drawBuffer.graphics.clear();
        drawBuffer.graphics.lineStyle(2,0000000);
        drawBuffer.graphics.beginFill(0xFFFFFF);
        drawBuffer.graphics.drawEllipse(x1,y1,x2-x1,y2-y1);
    }
}
function doEndXY(e:MouseEvent) {
    x2 = drawBoard.mouseX;
    y2 = drawBoard.mouseY;
    trace("x akhir = " + x2 + " y akhir = " + y2);
    prepDraw();
    drawBuffer.graphics.clear();
}
//atas startxy, refreshxy, endxy

//hapus gambar
function clearAll(e:MouseEvent) {
    rectangle.graphics.clear();
    ellipse.graphics.clear();
}
//atas hapus gambar

//all baseMap
function clearBaseMap(e:MouseEvent) {
    Tweener.addTween(drawBoard,{alpha:1, time:0, transition:"easeOutSine"});
    baseMap.removeChild(imageLoader);
}

function loadStringImage(e:MouseEvent) {
    loadImage("baseMap.jpg"); 
}

function loadImage(url:String):void {
    imageLoader.load(new URLRequest(url));
    imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
}

function imageLoaded(e:Event):void {
//dim drawboard
Tweener.addTween(drawBoard,{alpha:0.5, time:0.5, transition:"easeOutSine"});
//load Image
baseMap.addChild(imageLoader);
}
//end baseMap

//all zoom
function zoomIn(e:MouseEvent) {
    if (drawBoard.width<999 && drawBoard.height<799){
    resizeMe(drawBoard,drawBoard.width+100,drawBoard.height+75,true);
    resizeMe(baseMap,drawBoard.width,drawBoard.height,true);
    }
}
function zoomOut(e:MouseEvent) {
    if (drawBoard.width>810 && drawBoard.height>610){
    resizeMe(drawBoard,drawBoard.width-100,drawBoard.height-75,true);
    resizeMe(baseMap,drawBoard.width,drawBoard.height,true);
    }
}
function resizeMe(mc:MovieClip, maxW:Number, maxH:Number=0, constrainProportions:Boolean=true):void{
    maxH = maxH == 0 ? maxW : maxH;
    mc.width = maxW;
    mc.height = maxH;
    if (constrainProportions) {
        mc.scaleX < mc.scaleY ? mc.scaleY = mc.scaleX : mc.scaleX = mc.scaleY;
    }
}
//endZoom

//string buat dipanggil
function setEscalator(e:MouseEvent) {
    shape = "Escalator";
}
function setATM(e:MouseEvent) {
    shape = "ATM";
}
function setEmergency(e:MouseEvent) {
    shape = "Emergency";
}
function setToilet(e:MouseEvent) {
    shape = "Toilet";
}
function setInformation(e:MouseEvent) {
    shape = "Information";
}
function setElevator(e:MouseEvent) {
    shape = "Elevator";
}
function setSelect(e:MouseEvent) {
    shape = "Select";
}
function setRectangle(e:MouseEvent) {
    shape = "Rectangle";
}
function setEllipse(e:MouseEvent) {
    shape = "Ellipse";
}
function setPolygon(e:MouseEvent) {
    shape = "Polygon";
}
//end string buat dipanggil

function prepDraw() {
    if (shape == "Rectangle") {
        doRectangle();
    } else if (shape == "Ellipse") {
        doEllipse();
    } else if (shape == "Polygon") {
        doPolygon();        
    } else if (shape == "Elevator") {
        doElevator();
    } else if (shape == "ATM") {
        doATM();
    } else if (shape == "Escalator") {
        doEscalator();
    } else if (shape == "Emergency") {
        doEmergency();
    } else if (shape == "Information") {
        doInformation();
    } else if (shape == "Toilet") {
        doToilet();
    } 
}

function setMove(e:MouseEvent) {
    canBeDrag();
}

//balikin xy ke 0
function resetXY() {
    x1=0;
    x2=0;
    y1=0;
    y2=0;
}
//end balikin xy ke 0

function doATM() {
    var numAtm:int = new int();
    if (x1!=0 && y1!=0) {
        atm = new ATM();
        atm.x=(x1-20);
        atm.y=(y1-20);
        atmArray.push(atm);
        resetXY();
    } for (var i:int=0; i<=atmArray.length - 1; i++) {        
        numAtm = i;        
    }
    dp.addItem( { label: "Atm" +i} );
    objectCB.selectedIndex = objectCB.length;
    drawBoard.addChild(atm);
}

function doElevator() {
    var numElev:int = new int();
    if (x1!=0 && y1!=0) {
        elev = new Elevator();
        elev.x=(x1-20);
        elev.y=(y1-20);
        
        elevatorArray.push(elev);
        resetXY();
    }
    for (var i:int=0; i<=elevatorArray.length - 1; i++) {
        trace("Elevator number : "+i);
        trace(elevatorArray*.x);
        numElev = i;
    }
    dp.addItem( { label: "Elevator" +i} );
    objectCB.selectedIndex = objectCB.length;
    drawBoard.addChild(elev);
}

function doEmergency() {
    var numEmer:int = new int();
    if (x1!=0 && y1!=0) {
        emer = new Emergency();
        emer.x=(x1-20);
        emer.y=(y1-20);
        emergencyArray.push(emer);
        resetXY();
    } for (var i:int=0; i<=emergencyArray.length - 1; i++) {        
        numEmer = i;        
    }
    dp.addItem( { label: "Emergency" +i} );
    objectCB.selectedIndex = objectCB.length;
    drawBoard.addChild(emer);
}

function doEscalator() {
    var numEsca:int = new int();
    if (x1!=0 && y1!=0) {
        esca = new Escalator();
        esca.x=(x1-20);
        esca.y=(y1-20);
        escalatorArray.push(esca);
        resetXY();
    } for (var i:int=0; i<=escalatorArray.length - 1; i++) {        
        numEsca = i;        
    }
    dp.addItem( { label: "Escalator" +i} );
    objectCB.selectedIndex = objectCB.length;
    drawBoard.addChild(esca);
}

function doInformation() {
    var    numInfo:int = new int();
    if (x1!=0 && y1!=0) {
        info = new Information();
        info.x=(x1-20);
        info.y=(y1-20);
        informationArray.push(info);
        resetXY();
    } for (var i:int=0; i<=informationArray.length - 1; i++) {        
        numInfo = i;        
    }
    dp.addItem( { label: "Information" +i} );
    objectCB.selectedIndex = objectCB.length;
    drawBoard.addChild(info);
}

function doToilet() {
    var numToil:int = new int();
    if (x1!=0 && y1!=0) {
        toil = new Toilet();
        toil.x=(x1-20);
        toil.y=(y1-20);
        toiletArray.push(toil);        
        resetXY();
    } for (var i:int=0; i<=toiletArray.length - 1; i++) {        
        numToil = i;        
    }
    dp.addItem( { label: "Toilet" +i} );
    objectCB.selectedIndex = objectCB.length;
    drawBoard.addChild(toil);
}

function doPolygon() {
    var prevX:int = new int();
    var prevY:int = new int();
    var X;
    var Y;
    x1=drawBoard.x;
    y1=drawBoard.y;
                    
    if(tempNodeArray.length==0)
                {
                    var polyObject:MovieClip = new MovieClip();
                    polyObject.graphics.lineStyle(1,0xFFFFFF,100);
                    
                    //save previous
                    prevX=drawBoard.x;
                    prevY=drawBoard.y;
                }
                
                //insert a new node
                tempNodeArray.push(x1,y1);
    
                    for(j=0;j<tempNodeArray.length;j++)    {
                    x1=tempNodeArray[j][0];
                    y1=tempNodeArray[j][1];
                    
                    if(j==0) {
                        polygon.graphics.lineStyle(2,0000000);
                        polygon.graphics.moveTo(x1,y1);
                    }
                    else {
                        polygon.graphics.lineTo(x1,y1);
                    }
                    
                    //polygonArray[polygonArray.length-1].tambahTitik(XP,YP);
                }
                polygon.graphics.endFill();    
                trace("XP: "+x1 +" ,YP: "+y1);
                drawBoard.addChild(polygon);
    }

function doRectangle() {
    var numRect:int = new int();
    if (x1!=0 && y1!=0) {
        rectangle.graphics.lineStyle(2,0000000);
        rectangle.graphics.beginFill(0xFFFFFF);
        rectangle.graphics.drawRect(x1,y1,x2-x1,y2-y1);
        rectangle.graphics.endFill();
        rectangleArray.push(rectangle);
        resetXY();
    }
    for (var i:int=0; i<=rectangleArray.length - 1; i++) {        
        numRect = i;        
    }
    trace("Rectangle number : "+(i-1));
    trace("lokasi"+rectangleArray[(i-1)].x1);
    dp.addItem( { label: "Rectangle" +i} );
    objectCB.selectedIndex = objectCB.length;
    drawBoard.addChild(rectangle);
    trace(rectangle);
}

function doEllipse() {
    var numEll:int = new int();
    if (x1!=0) {
        ellipse.graphics.lineStyle(2, 0x000000);// Give the ellipse a black, 5 pixels thick line
        ellipse.graphics.beginFill(0xFFFFFF);
        ellipse.graphics.drawEllipse(x1,y1,x2-x1,y2-y1);// Draw the ellipse, assigning it a x position, y position, width and height.
        ellipse.graphics.endFill();
        ellipseArray.push(ellipse);
        resetXY();
    } for (var i:int=0; i<=ellipseArray.length - 1; i++) {        
        numEll = i;        
    }
    trace("Ellipse number : "+(i-1));
    trace(ellipseArray[(i-1)].x1);
    dp.addItem( { label: "Ellipse" +i} );
    objectCB.selectedIndex = objectCB.length;
    drawBoard.addChild(ellipse);
    trace(ellipse);
}



function canBeDrag() : void {
            this.addEventListener(MouseEvent.MOUSE_DOWN , dragMe);
            this.addEventListener(MouseEvent.MOUSE_UP, releaseMe);
}
        
function cantBeDrag() : void{
            this.removeEventListener(MouseEvent.MOUSE_DOWN , dragMe);
            this.removeEventListener(MouseEvent.MOUSE_UP , releaseMe);
}

function dragMe() {
    s = new Sprite();
    s.addChild(rectangle);
    s.startDrag();
}

function releaseMe(event : MouseEvent): void{
            s.stopDrag();
            rectangle.x = drawBoard.mouseX - rectangle.width/2;
            rectangle.y = drawBoard.mouseY - rectangle.height/2;
            drawBoard.addChild(rectangle);
}

here’s the whole application

http://www.mediafire.com/file/112xksoeo7bzdaj/mapeditor.zip