<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" viewSourceURL="srcview/index.html">

    <mx:Script>
        <![CDATA[
            import it.mxml.utilities.taxes.ITTaxCalculator;
            import it.mxml.utilities.taxes.ENTaxCalcultator;
            import it.mxml.utilities.taxes.DefaulTaxCalculator;
            import it.mxml.utilities.taxes.ITaxCalculator;
            import mx.collections.ArrayCollection;
            import flash.system.Capabilities;
            import flash.utils.getDefinitionByName
            
            // Composition bug fix
            private var defaultTaxCalculator:DefaulTaxCalculator;
            private var enTaxCalculator:ENTaxCalcultator;
            private var itTaxCalculator:ITTaxCalculator;
            
            [Bindable]
            private var availableItems:ArrayCollection = new ArrayCollection([{name: "Flash CS4", price: 400}, {name: "Device Central CS4", price: 400},
                                                                     {name: "Dreamweaver CS4", price: 600}, {name: "Photoshop CS4", price: 200},
                                                                     {name: "Premiere CS4", price: 500}, {name: "Illustrator CS4", price: 800}]);    
                                                                     
            
            private var selectedItems:Array;
                                                                 
            override protected function childrenCreated():void{
                
                super.childrenCreated();
                
                selectedItems = [];
                
            }
            
            
            private function doAdd():void{
                
                var item:Object = items.selectedItem;
                
                tracer.text += "Adding to the basket " + item.name + " $ " + item.price + "\n";
                tracer.verticalScrollPosition = tracer.maxVerticalScrollPosition + 4;
                
                selectedItems.push(item);
                
            }
            
            private function doCalculate():void{
                
                var lang:String = Capabilities.language.toUpperCase();
                var amount:Number = 0;
                
                for each (var item:Object in selectedItems){
                    
                    amount += item.price;
                    
                }
                
                var calculator:ITaxCalculator;                
                var ClassDefinition:Class;
                
                try{
                    
                    ClassDefinition = getDefinitionByName("it.mxml.utilities.taxes." + lang + "TaxCalculator") as Class;
                    
                }catch(e:Error){
                        
                    ClassDefinition = getDefinitionByName("it.mxml.utilities.taxes.DefaulTaxCalculator") as Class;
                    
                }
                
                calculator = new ClassDefinition();
                calculator.amount = amount;
                
                tracer.text += "==================================\n";
                tracer.text += "Amount: " + amount + "\n";
                tracer.text += "Taxes: " + calculator.taxes + "\n";
                tracer.text += "==================================\n";
                
                tracer.verticalScrollPosition = tracer.maxVerticalScrollPosition + 4;
                
            }
            
        ]]>
    </mx:Script>


    <mx:List id="items" x="10" y="10" dataProvider="{availableItems}" labelField="name" width="162"/>
    <mx:Button x="10" y="174" label=":: add item ::" width="162" click="doAdd()"/>
    <mx:Button x="10" y="204" label=":: calculate taxes ::" width="162" click="doCalculate()"/>
    <mx:TextArea id="tracer" x="180" y="12" width="250" height="214"/>
</mx:Application>