<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="URLLoaderExample()" viewSourceURL="srcview/index.html">
    <mx:Script>
        <![CDATA[
            import flash.net.URLLoader;
            import flash.net.URLRequest;
            import dv.gEvent;
            
            [Bindable]
            public var calenderURL:String;
            private var atom:String = "http://www.w3.org/2005/Atom";
            private var goog:String = "http://schemas.google.com/g/2005";
            
            private var dates:Array  = new Array();
            private var events:Array = new Array();
            private var currentEvent:Number = 0;
            

            public function URLLoaderExample() :void {
                calenderURL = Application.application.parameters.calender;
                var loader:URLLoader = new URLLoader();
                configureListeners(loader);
                var request:URLRequest = new URLRequest(calenderURL);
                try {
                    loader.load(request);
                } catch (error:Error) {
                    trace("Unable to load requested document.");
                }
            }
    
            private function configureListeners(dispatcher:IEventDispatcher):void {
                dispatcher.addEventListener(Event.COMPLETE, completeHandler);
            }
            
            private function displayEvent(event:Event ):void {
                calender.selectedRanges = dates;
                var e:gEvent = getEvent ( event.target.selectedDate )
                if ( e != null ) {
                    displayCurrentEvent ( e );
                }
            }
            
            private function getEvent ( d : Date ) : gEvent {
                for ( var i:Number = 0 ; i < events.length ; i ++ ) {
                    var cd:Date = events[i].date
                    if ( 
                        ( cd.getUTCDate() == d.getUTCDate() ) &&
                        ( cd.getUTCMonth() == d.getUTCMonth() ) &&
                        ( cd.getUTCFullYear() == d.getUTCFullYear() )
                     ) {
                         currentEvent = i;
                         controllNavigation()
                        return events[i];
                    }
                }
                return null;
            }
            
        
            private function completeHandler(event:Event):void {
                var loader:URLLoader = URLLoader(event.target);
                XML.ignoreWhitespace = true;
                XML.ignoreComments = true;
                XML.ignoreProcessingInstructions = true;
                XML.prettyPrinting = true;
                var gData:XML        = XML(loader.data);
                var entry:QName      = new QName(atom, "entry");
                var id:QName         = new QName(atom, "id");
                var published:QName  = new QName(atom, "published");
                var updated:QName    = new QName(atom, "updated");
                var when:QName       = new QName(goog, "when");
                var title:QName      = new QName(atom, "title");
                var summary:QName    = new QName(atom, "summary");
                var content:QName    = new QName(atom, "content");
                var decendantList:XMLList = gData.descendants(entry);
                
                var firstDate:Date = new Date();
                var lastDate:Date  = new Date();
                
                for each (var element:XML in decendantList) {
                    var id_d:XMLList        = element.descendants(id);
                    var published_d:XMLList = element.descendants(published);
                    var updated_d:XMLList   = element.descendants(updated);
                    var title_d:XMLList     = element.descendants(title);
                    var summary_d:XMLList   = element.descendants(summary);
                    var content_d:XMLList   = element.descendants(content);
                    var when_d:XMLList      = element.descendants(when);
                    
                    var when_start:String   = when_d.attribute("startTime")
                    var sta:Array           = when_start.split("T")[0].split("-")
                    var when_end:String     = when_d.attribute("endTime")
                    var eta:Array           = when_end.split("T")[0].split("-")
                    
                    var sd:Date = new Date(sta[0],sta[1],sta[2],0,0,0,0);
                    var ed:Date = new Date(eta[0],eta[1],eta[2],0,0,0,0);
                    
                    var e:gEvent = new gEvent();
                    e.date = sd;
                    e.title = title_d;
                    e.content = content_d;
                    
                    events.push ( e );
                    dates.push  ({rangeStart:sd,rangeEnd:ed})
                    
                    if( firstDate > sd ) firstDate = sd
                    if( lastDate  < ed ) lastDate = ed
                }
                events.sortOn("date",Array.NUMERIC);
                calender.minYear = firstDate.getFullYear();
                calender.maxYear = lastDate.getFullYear();
                calender.selectedRanges = dates;
                
                displayCurrentEvent(events[0]);
            }
            
            private function previousEvent():void {
                currentEvent--;
                displayCurrentEvent ( events[currentEvent] );
           
            }
            
            private function nextEvent():void {
                currentEvent++;
                displayCurrentEvent ( events[currentEvent] );
            }

            private function controllNavigation() : void {
                if ( currentEvent > 0 ) {
                    previous_event.enabled = true;
                }else{
                    previous_event.enabled = false;
                }
                if ( currentEvent > events.length -2 ) {
                    next_event.enabled = false;
                }else{
                    next_event.enabled = true;
                }
            }

            private function displayCurrentEvent (g:gEvent) : void {
                eventName.text = g.title;
                eventName.toolTip = g.title;
                show.htmlText = g.date.getDate() +"/" + g.date.getMonth()+"/" + g.date.getFullYear() +"<br /><br />"+g.content;
                calender.displayedMonth = g.date.getUTCMonth()
                calender.displayedYear = g.date.getFullYear()
                controllNavigation()
            }

        ]]>
    </mx:Script>
    <mx:VBox bottom="10" top="10" left="10" right="10">
        <mx:HBox horizontalAlign="center" verticalAlign="middle">
            <mx:LinkButton label="&lt;" id="previous_event" textAlign="center" click="previousEvent()" enabled="false" />
            <mx:DateChooser id="calender" showToday="true" enabled="true" firstDayOfWeek="1" change="displayEvent(event)" cornerRadius="5"/>
            <mx:LinkButton label="&gt;" id="next_event" textAlign="center" click="nextEvent()" enabled="false" />
        </mx:HBox>
        <mx:Label width="245" fontWeight="bold" id="eventName" text="No event selected" toolTip="No event selected" textAlign="center" />
        <mx:TextArea width="245" height="100%" id="show" cornerRadius="5"/>
    </mx:VBox>
</mx:Application>