<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
    creationComplete="initApp()"
    pageTitle="DataGrid Simple Demo" viewSourceURL="srcview/index.html">
    <mx:Script>
        <![CDATA[
            import mx.collections.IViewCursor;
            import mx.collections.ArrayCollection;
            import mx.rpc.events.ResultEvent;
            import flash.events.Event;
            import mx.controls.dataGridClasses.DataGridColumn;
            import mx.formatters.DateFormatter;
            import mx.managers.CursorManager;
            import mx.collections.*;
            import mx.utils.ObjectUtil;

            [Bindable]
            private var sessionAC:ArrayCollection;

            private function initApp():void
            {
                CursorManager.setBusyCursor();
                sessionConn.send();
            }
 

            private function resultSessionHandler(event:ResultEvent):void  
            {
                var source:ArrayCollection = sessionConn.lastResult.sessions.session as ArrayCollection;
                var cursor:IViewCursor = source.createCursor();
                var result:ArrayCollection = new ArrayCollection();
                while (!cursor.afterLast)
                {
                    var currentObj:Object = cursor.current;
                    // -- Conversion for date --
                    var sd:String = currentObj["date"];
                    // 2001-11-16 17:12:20
                    var objDate:Date = new Date(Number(sd.substr(0, 4)), Number(sd.substr(5, 2))-1, Number(sd.substr(8, 2)),
                                             Number(sd.substr(11, 2)), Number(sd.substr(14, 2)), Number(sd.substr(17, 2)), 0);
                    currentObj["date"] = objDate; 
                    // create a new field "available place"
                    currentObj["aplace"] = Math.round(Math.random()*100);
                    // --
                    result.addItem(currentObj);
                    cursor.moveNext();
                }

                // -- sort on date --
                var sortCount:Sort = new Sort();
                sortCount.fields = [new SortField("date")];
                result.sort = sortCount;
                result.refresh();               

                sessionAC = result;              
                //
                countSession.text = "Total: "+sessionAC.length;

                CursorManager.removeBusyCursor();

            }
             
            private function doReloadAction(event:Event):void  {
                sessionAC = new ArrayCollection();
                countSession.text = "Total: 0";
                CursorManager.setBusyCursor();
                // -- Call service --
                sessionConn.send();
            }
 
            // --- pour les dates ---
            public var dateFormat:mx.formatters.DateFormatter;

            private function showDate(item:Object, column:DataGridColumn):String 
            {     
                if (dateFormat == null) {
                    dateFormat = new mx.formatters.DateFormatter();
                    dateFormat.formatString = "MM/DD HH:NN";
                }   
                var field:String =  column.dataField;     
                return dateFormat.format(item[field]); 
            } 

            // ---- comparaison -----
            private function productCompareFunction(obj1:Object, obj2:Object):int {
                var result:int = 0;
                result = ObjectUtil.stringCompare(obj1.product, obj2.product, true);
                if (result == 0) {
                    result = ObjectUtil.dateCompare(obj1.date, obj2.date);    
                }
                return result;
            } 
            private function dateCompareFunction(obj1:Object, obj2:Object):int {
                var result:int = 0;
                result = ObjectUtil.dateCompare(obj1.date, obj2.date);
                if (result == 0) {
                    var level1:Number = levelTransform[obj1.level]; 
                    var level2:Number = levelTransform[obj2.level]; 
                    result = (level1 < level2 ? -1 : (level1 > level2 ? 1 : 0)); 
                }
                return result;
            } 
                                  
               private var levelTransform:Object = { beginner:0, intermediate:1, advanced:2 };             
               private function levelCompareFunction(obj1:Object, obj2:Object):int {
                var result:int = 0;
                var level1:Number = levelTransform[obj1.level]; 
                var level2:Number = levelTransform[obj2.level]; 
                result = (level1 < level2 ? -1 : (level1 > level2 ? 1 : 0));   
                if (result == 0) {
                    result = ObjectUtil.stringCompare(obj1.product, obj2.product, true);
                    if (result == 0) {
                        result = ObjectUtil.dateCompare(obj1.date, obj2.date);    
                    }
                }
                return result;
              }                       
           ]]>

    </mx:Script>                        
     <mx:HTTPService id="sessionConn" url="sessions.xml" useProxy="false" result="resultSessionHandler(event)"/>

    <mx:Panel layout="vertical" left="5" top="5" right="5" bottom="5" title="MAX 2006 Sessions"
                paddingTop="5" paddingLeft="5" paddingBottom="5" paddingRight="5">
        <mx:HBox width="100%" height="30">
            <mx:Image source="icon/max2006.png" autoLoad="true"/>
            <mx:Spacer width="100%"/>
            <mx:Label id="countSession" text="Total: 0" width="70"/>
            <mx:Button label="Refresh" toolTip="Reload" width="90" click="doReloadAction(event)"/>
            <mx:Spacer width="10" />
        </mx:HBox>
        <mx:DataGrid id="alarmDG" dataProvider="{sessionAC}" width="100%" height="100%" paddingLeft="20">
            <mx:columns>
                <mx:DataGridColumn dataField="firstname" headerText="FirstName" width="100"/>
                <mx:DataGridColumn dataField="lastname" headerText="LastName" width="100"/>                    
                <mx:DataGridColumn dataField="title" headerText="Title" showDataTips="true"/>
                <mx:DataGridColumn dataField="date" headerText="Date" labelFunction="showDate" textAlign="center" sortCompareFunction="dateCompareFunction" width="90"/>
                <mx:DataGridColumn dataField="product" headerText="Product" itemRenderer="IconProductRenderer"  sortCompareFunction="productCompareFunction" showDataTips="true" width="70"/>
                <mx:DataGridColumn dataField="level" headerText="Level" itemRenderer="renderer.IconLevelRenderer" sortCompareFunction="levelCompareFunction" showDataTips="true" width="70"/>
                <mx:DataGridColumn dataField="aplace" headerText="Avail. place" textAlign="center" itemRenderer="renderer.PlaceRenderer" width="100"/>
            </mx:columns>
        </mx:DataGrid>    
    </mx:Panel>
</mx:Application>