    // ActionScript file

    import flash.display.BitmapData;

    import mx.graphics.codec.JPEGEncoder;
    import mx.rpc.http.HTTPService;
    import mx.utils.Base64Encoder;

    private var bm:BitmapData;

    private function getCam():void
    {
        if (Camera.getCamera())
        {
            // assign the user's default camera to a variable
            var camera:Camera = Camera.getCamera();

            // set the camera quality to be the highest as possible
            camera.setQuality(0, 100);

            // set the width, height, frames per second
            camera.setMode(theCam.width, theCam.height, 30);

            // attach the camera to our "theCam" VideoDisplay
            theCam.attachCamera(camera);
        }

        else
        {
            //tell the user to try another method
        }

    }

    public function takePicture():void {

        //if we are not previewing any picture, we'll take one :)
        if (!previewBox.visible) {

            //create a BitmapData variable called picture that has theCam's size
            var picture:BitmapData = new BitmapData(theCam.width, theCam.height);

            //the BitmapData draws our theCam
            picture.draw(theCam);

            //Our preview's source is a new Bitmap made of picture's BitmapData
            preview.source = new Bitmap(picture);

            //stores this BitmapData into another BitmapData (outside this function)
            bm = picture;

            //makes the previewBox visible, so we can see our picture
            previewBox.visible = true;

            //displays the flashLight
            flashLight.visible = true;

            //makes the flashLight go way
            flashLight.visible = false;

            //change our trigger label, so the user will be able to try again
            trigger.label = "Take another picture...";

            //enables the savePic button
            savePic.enabled = true;

            //changes the color of the button
            trigger.setStyle('chromeColor', '#ff0000');
        }

            //if we are previewing a picture...
        else {

            //makes the previewBox invisible
            previewBox.visible = false;

            //changes the label
            trigger.label = 'Take a picture!';

            //disables the savePic button
            savePic.enabled = false;

            //changes the color of the button
            trigger.setStyle('chromeColor', '#33abe9');

        }

    }

    public function savePicture():void {

        //change the savePic button label so the user knows as soon as possible
        //that we are saving his picture
        savePic.label = "Saving..."

        //disables the button so the user don't click it twice
        savePic.enabled = false;

        //the trigger button displays a nice message
        trigger.label = "That's a nice picture :)"

        //disables the "trigger" button, now is too late to take another picture!
        trigger.enabled = false;

        //creates a new JPEGEncoder called "je"
        //sets the quality to 100 (maximum)
        var je:JPEGEncoder = new JPEGEncoder(100);

        //creates a new ByteArray called "ba"
        //JPEGEnconder encodes our "bm" Bitmap data: our "picture"
        var ba:ByteArray = je.encode(bm);
        //this ByteArray is now an encoded JPEG

        //creates a new Base64Encoder called "be"
        var be:Base64Encoder = new Base64Encoder();

        //encodes our "ba" ByteArray (wich is our JPEG encoded picture) with base64Encoder
        be.encodeBytes(ba);

        //Now we have our "encodedData" string to send to the server
        var encodedData:String = be.flush();

        //this is the HTTPService that we will use to send our data to the server
        var handleService:HTTPService = new HTTPService();

        //now we set what URL we want... Set the URL of your server-side page/action
        //this is a typical Ruby on Rails URL. Controller: users_controller, Action: handlepicture
        handleService.url = "http://localhost:3000/users/camerasnap";

        //another example of URL:
        //appUrl.url = "http://www.example.com/handlePicture.php";

        //or, a relative path:
        //appUrl.url = "/handlePicture.php"

        //we choose POST as our method
        handleService.method = "POST";

        //here we show the busy cursor for better visual feedback
        handleService.showBusyCursor = true;

        //Finally, we send our "encodedData" as a "content" variable
        handleService.send({content: encodedData});

        // 1 - in your server-side code you can handle the POSTED variable called "content"
        // 2 - use a base64 decoder
        // 3 - write it to disc (now you have a real image saved in your server)
        // 4 - make this image the user's profile picture or anything you want

    }