<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="absolute"
    xmlns:v="views.*"
    backgroundColor="#000000"
    backgroundAlpha="0"
    creationComplete="initApp()" viewSourceURL="srcview/index.html">
    
    <mx:Style>
        global {
            color: #63769E;
        }
        .windowStyles {
            color: #ffffff;    
        }
        ComboBox {
            fontWeight: normal;
            selection-color: #63769E;
            roll-over-color: #B5D2FA;
        }
        Button {
            fontWeight: normal;
        }
    </mx:Style>
    
    <mx:Script>
        <![CDATA[
            import mx.messaging.messages.AsyncMessage;
            import valueObjects.Order;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.AsyncToken;
            import mx.controls.Alert;
            import valueObjects.Category;
            import events.PhotoEvent;
            import valueObjects.Photo;
            import mx.rpc.events.ResultEvent;
            import mx.collections.ArrayCollection;
            import events.OrderEvent;
            
            [Bindable]
            public var categoryData:ArrayCollection;
            [Bindable]
            private var photoData:ArrayCollection=new ArrayCollection();
            [Bindable]
            private var purchasedPhotos:ArrayCollection=new ArrayCollection();
            private var currentCategory:Category;

            private function categoryResultHandler(event:ResultEvent):void 
            {
                categoryData = event.result as ArrayCollection;
            }
            private function initApp():void
            {
                photoRO.getAllPhotos();
                categoryRO.getAllCategories()
            }
            private function photoSelectedHandler(event:PhotoEvent):void
            {
                purchasedPhotos.addItem(event.selectedPhoto);
            }
            private function photoResultHandler(event:ResultEvent):void 
            {
                photoData=event.result as ArrayCollection;
            }
            private function checkoutHandler(event:OrderEvent):void 
            {
                var token:AsyncToken=orderRO.addNewOrder(event.order);
                token.order=event.order;
            }
            private function orderResultHandler(event:ResultEvent):void 
            {
                var order:Order = event.token.order as Order;
                order.orderNumber = event.result as int;
                
                var message:AsyncMessage = new AsyncMessage();
                message.headers.action="orderSubmitted";
                message.body = order;
                producer.send(message);
                
                fStopContent.selectedChild=home;
                purchasedPhotos.removeAll();
                checkout.resetForm();
                Alert.show("Your order has been placed as order #" + event.result);
            }
            private function photoUploadHandler(event:PhotoEvent):void 
            {
                var token:AsyncToken=photoRO.doCreate(event.selectedPhoto);
                token.photo=event.selectedPhoto;
            }
            private function photoFaultHandler(event:FaultEvent):void
            {
                Alert.show(event.fault.faultString, "Remote Object Fault");
            }
            private function photoCreateHandler(event:ResultEvent):void
            {    
                photoData.addItem(event.token.photo);
                gallery.displayDetails(event.token.photo);
                fStopContent.selectedChild=gallery;
            }
        ]]>
    </mx:Script>
    
    <mx:Producer id="producer"
         destination="photoDestination"/>
    
    <mx:RemoteObject id="categoryRO"
        destination="categoryService"
        result="categoryResultHandler(event)"/>

    <mx:RemoteObject id="photoRO"
        destination="photoService"
        fault="photoFaultHandler(event)">
        <mx:method name="getAllPhotos" result="photoResultHandler(event)"/>
        <mx:method name="doCreate" result="photoCreateHandler(event)"/>
    </mx:RemoteObject>
    
    <mx:RemoteObject id="orderRO"
        destination="orderService"
        result="orderResultHandler(event)"/>
    
    <mx:LinkBar 
        dataProvider="{fStopContent}" 
        color="#ffffff"
        x="101" y="5"
        rollOverColor="#B5D2FA" />
    
    <mx:Image 
        y="30" 
        x="101"
        source="assets/fstop/header.jpg" />
        
    <v:ShoppingCart 
        x="626" y="118"  
        purchasedPhotos="{purchasedPhotos}"
        checkout="fStopContent.selectedChild=checkout"/>
        
    <mx:ViewStack id="fStopContent" 
        x="101" y="118"
        paddingBottom="0" 
        paddingLeft="0" 
        paddingRight="0" 
        paddingTop="0" 
        resizeToContent="true"
        creationPolicy="all">
        <v:Home id="home" 
            label="Home" />
        <v:Contribute id="contribute" 
            label="Contribute" 
            categoryData="{categoryData}"
            photoUploaded="photoUploadHandler(event)"/>
        <v:Gallery id="gallery" 
            label="Gallery" 
            photoData="{photoData}"
            photoSelected="photoSelectedHandler(event)"
            categoryData="{categoryData}"/>    
        <v:CheckOut id="checkout"
            label="Check Out"
            cartItems="{purchasedPhotos}"
            checkout="checkoutHandler(event)"/>    
    </mx:ViewStack>
        
</mx:Application>