<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="vertical"
    width="600"
    height="600"
    creationComplete="addEventListener(MouseEvent.MOUSE_MOVE, mouseIsMoving);"
    >
    
    <mx:Script>
        <![CDATA[
            import mx.managers.CursorManager;
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.core.UIComponent;

            private var tabSavePos:Array = new Array();
            
            
            private function mouseIsMoving(event:MouseEvent) : void
            {
                this.infosMouse.text = this.uic.mouseX + ' - ' + this.uic.mouseY;
                
                var found:Boolean = false;
                var i:int = 0;
                var nbPassage:int = 0;
                while(i<tabSavePos.length && !found)
                {
                    var savePos:Object = new Object();
                    savePos = tabSavePos[i];
                    
                    var posInfX:int = savePos['x']-savePos['d'];
                    var posSupX:int = savePos['x']+savePos['d'];
                    var posInfY:int = savePos['y']-savePos['d'];
                    var posSupY:int = savePos['y']+savePos['d'];
                    
                    var betweenX:Boolean = (this.uic.mouseX>posInfX && this.uic.mouseX<posSupX) ? true : false;
                    var betweenY:Boolean = (this.uic.mouseY>posInfY && this.uic.mouseY<posSupY) ? true : false;
                    
                    if(betweenX && betweenY)
                    {
                        this.uic.useHandCursor = true;
                        this.buttonMode = true;
                        found = true;
                    } 
                    else 
                    {
                        this.uic.useHandCursor = false;
                        i++;
                    }
                    nbPassage++;                        
                }
                this.infosMouseSupp.text = 'identifier: ' + nbPassage;
                
            }
            
            
            //dessine sur le point sur le composant graphique
            public function initDrawing(nbPoint:int) : void
            {
                this.backgroundCanvas.removeAllChildren();
                
                this.uic = new UIComponent();
                this.backgroundCanvas.addChildAt(this.uic, 0);
                
                tabSavePos = new Array();
                
                for(var i:int=0; i<nbPoint; i++)
                {
                    var xCoord:Number = Math.random()*450;
                    var yCoord:Number = Math.random()*350;
                    var diam:Number = 4;
                    
                    drawCircle(xCoord, yCoord, diam);
                    
                    var save:Object = new Object();
                    save['x'] = xCoord;
                    save['y'] = yCoord;
                    save['d'] = diam;
                    
                    tabSavePos.push(save);
                }
            }
            
            //dessine sur le point sur le composant graphique
            public function addDrawing(nbPoint:int) : void
            {        
                for(var i:int=0; i<nbPoint; i++)
                {
                    var xCoord:Number = Math.random()*450;
                    var yCoord:Number = Math.random()*350;
                    var diam:Number = 4;
                    
                    drawCircle(xCoord, yCoord, diam);
                    
                    var save:Object = new Object();
                    save['x'] = xCoord;
                    save['y'] = yCoord;
                    save['d'] = diam;
                    
                    tabSavePos.push(save);
                }
            }
            
            
            
            //dessine un point sur le composant graphique
            private function drawCircle(xCoord:Number, yCoord:Number, diam:Number) : void
            {
                this.uic.graphics.beginFill(Math.random() * 0xffffff);
                this.uic.graphics.drawCircle(xCoord, yCoord, diam);
                this.uic.graphics.endFill();
            }
            
            
        ]]>
    </mx:Script>
    
    <mx:HBox
        width="100%"
        height="20%"
        >
        <mx:TextInput
            id="nbPoints"
            text="1000"
        />
        <mx:Button
            label="Draw circles"
            click="initDrawing(parseInt(nbPoints.text));"
        />
        <mx:Button
            label="Add circles"
            click="addDrawing(parseInt(nbPoints.text));"
        />        
        <mx:Label
            id="infosMouse"
        />
        <mx:Label
            id="infosMouseSupp"
        />
    </mx:HBox>
    
    <mx:HBox
        width="100%"
        height="80%"
        >
        <mx:Canvas
            id="backgroundCanvas"
            borderColor="red"
            borderStyle="solid"
            width="100%"
            height="100%"
            >
            
            <mx:UIComponent
                id="uic"
                height="100%"
                width="100%"
            />

        </mx:Canvas>    
    </mx:HBox>
    
</mx:Application>