<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns:controls="com.cynergysystems.*"
    layout="absolute"  viewSourceURL="srcview/index.html">
    
    <mx:Script>
        <![CDATA[
            import com.cynergysystems.FaultUtil;
            import mx.rpc.events.FaultEvent;
            import mx.utils.Base64Encoder;
            import com.cynergysystems.JPEGEncoder;
            import mx.controls.Alert;
            import mx.core.UIComponent;
            
            //AS3 corelib
            //http://code.google.com/p/as3corelib/
            
            private function onColorChange() : void
            {
                paintCanvas.color = colorPicker.selectedColor;
            }
            
            private function save() : void
            {
                saveButton.enabled = false;
                var bd : BitmapData = getUIComponentBitmapData( paintCanvas );
                
                var encoder : JPEGEncoder = new JPEGEncoder(75);
                var data : ByteArray = encoder.encode( bd );
                
                switch (method.selectedIndex)
                {
                    //RemoteObject
                    case 0:
                        ro.ROsave( data );
                        break;
                        
                    //WebService
                    case 1:
                        ws.WSsave( base64Encode( data ) );
                        break;
                        
                    //HTTPService
                    case 2:
                        var params : Object = { data : base64Encode( data ) };
                        hs.send( params );
                        break;
                }
            }
            
            private function onResult( message : String ) : void
            {
                Alert.show(message);
                saveButton.enabled = true;
            }
            
            private function onFault( event : FaultEvent ) : void
            {
                Alert.show("Server Fault");
                trace( FaultUtil.toString( event.fault ) );
                saveButton.enabled = true;
            }

            private function getUIComponentBitmapData( target : UIComponent ) : BitmapData
            { 
                var bd : BitmapData = new BitmapData( target.width, target.height );
                var m : Matrix = new Matrix();
                bd.draw( target, m );
                return bd;  
            }
            
            private function base64Encode( data : ByteArray ) : String
            {
                var encoder : Base64Encoder = new Base64Encoder();
                encoder.encodeBytes( data );
                return encoder.flush();
            }
            
        ]]>
    </mx:Script>
    
    <mx:RemoteObject
        id="ro"
        showBusyCursor="true"
        destination="ColdFusion" 
        source="BinaryData.cf.ImageSave">
        <mx:method name="ROsave" result="onResult('Data Saved via mx:RemoteObject')" fault="onFault(event)" />
    </mx:RemoteObject>
    
    <mx:WebService 
        id="ws"
        showBusyCursor="true"
        wsdl="/BinaryData/cf/ImageSave.cfc?wsdl">
        <mx:operation name="WSsave" result="onResult('Data Saved via mx:WebService')" fault="onFault(event)" />
    </mx:WebService>
        
    <mx:HTTPService 
        id="hs"
        showBusyCursor="true"
        useProxy="false"
        method="POST"
        resultFormat="text"
        url="/BinaryData/cf/HTTPImageSave.cfm" result="onResult('Data Saved via mx:HTTPService')" fault="onFault(event)" />
    
    
    <mx:Panel title="Paint!"
        clipContent="true"  
        x="10" y="10" width="350" height="350" >
            
            <controls:PaintCanvas width="100%" height="100%" id="paintCanvas" thickness="10" />
            
            <mx:ControlBar>
                <mx:ColorPicker selectedColor="#000000" change="onColorChange()" id="colorPicker" />
                <mx:Button label="Clear" click="paintCanvas.clear()" />
                
                <mx:Spacer width="100%" />
                    
                <mx:ComboBox id="method" dataProvider="[ 'RemoteObject', 'WebService', 'HTTPService'  ]" />
                <mx:Button label="Save" click="save()" id="saveButton" />    
                    
            </mx:ControlBar>
            
        </mx:Panel>
    
</mx:Application>