<?xml version="1.0" encoding="utf-8"?>
<mx:Panel 
    xmlns:mx="http://www.adobe.com/2006/mxml"
    xmlns:ac="com.adobe.ac.*"
    xmlns:view="com.adobe.cairngorm.samples.dashboard.view.*">

    <mx:Script>
        <![CDATA[
            import com.adobe.cairngorm.control.CairngormEventDispatcher;
            import com.adobe.cairngorm.samples.dashboard.model.StockTransaction;
            import com.adobe.cairngorm.samples.dashboard.events.GetStockQuoteEvent;    
            import com.adobe.cairngorm.samples.dashboard.events.PurchaseStockEvent;
            
            import mx.controls.Alert;
            
            [Bindable]
            public var stockTransaction : StockTransaction;            
            
            private function getQuoteForSymbol() : void
            {
                var event : GetStockQuoteEvent = new GetStockQuoteEvent( symbolTextInput.text );
                CairngormEventDispatcher.getInstance().dispatchEvent( event );    
            }
            
            private function purchaseStock() : void
            {
                var event : PurchaseStockEvent = new PurchaseStockEvent( symbolTextInput.text, quantityTextInput.text as int );
                CairngormEventDispatcher.getInstance().dispatchEvent( event );
            }
            
            private function createChargedMessage() : void
            {
                Alert.show( "Thanks! Your bank account has been charged" );
            }
        ]]>
    </mx:Script>

    <ac:ObserveValue 
        id="observe" 
        source="{ stockTransaction.stockPurchase.isComplete }" 
        handler="{ createChargedMessage }" 
        value="{ true }"/>
    
    <mx:CurrencyFormatter 
        id="standardEuroFormatter"  
        currencySymbol="" precision="2"/>
    
    <view:StatusMessageFormatter 
        id="statusFormatter" 
        statusMessages="{ [ '', 'Quote retrieval error.', 'Purchase error.', 'Purchase succesfull.' ] }"/>
    
    <mx:StringValidator 
        minLength="2" 
        triggerEvent="change" 
        source="{ symbolTextInput }" property="text"
        valid="stockTransaction.stockQuote.validateSymbol( true );" 
        invalid="stockTransaction.stockQuote.validateSymbol( false );"/>

    <mx:NumberValidator 
        minValue="1" maxValue="100" domain="int" allowNegative="false" 
        triggerEvent="change" 
        source="{ quantityTextInput }" property="text"
        valid="stockTransaction.stockPurchase.validateQuantity( true );" 
        invalid="stockTransaction.stockPurchase.validateQuantity( false );"/>
    
    <mx:Form>
    
        <mx:FormItem label="Symbol">
            <mx:TextInput 
                id="symbolTextInput"/>
            <mx:Button 
                label="Get Quote" 
                enabled="{ stockTransaction.stockQuote.isValid }" 
                click="getQuoteForSymbol();"/>
        </mx:FormItem>
        
        <mx:FormItem label="Price Quote">
            <mx:Label text="{ standardEuroFormatter.format( stockTransaction.stockQuote.lastStockQuote ) }"/>
        </mx:FormItem>
        
        <mx:FormItem label="Quantity">
            <mx:TextInput 
                id="quantityTextInput"/>
            <mx:Button 
                label="Purchase" 
                enabled="{ stockTransaction.stockPurchase.isValid }" 
                click="purchaseStock();"/>
            <mx:Label text="{ observe.execute( statusFormatter.format, stockTransaction.status ) }"/>
        </mx:FormItem>
    </mx:Form>
</mx:Panel>