<?xml version="1.0" encoding="utf-8"?>
<!--

////////////////////////////////////////////////////////////////////////////////
//
//    Copyright 2014 Ardisia Labs LLC. All Rights Reserved.
//
//    This file is licensed under the Apache License, Version 2.0 (the "License");
//    you may not use this file except in compliance with the License.
//    You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
//    Unless required by applicable law or agreed to in writing, software
//    distributed under the License is distributed on an "AS IS" BASIS,
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//    See the License for the specific language governing permissions and
//    limitations under the License.
//
////////////////////////////////////////////////////////////////////////////////

-->
<s:Module xmlns:fx="http://ns.adobe.com/mxml/2009" 
          xmlns:s="library://ns.adobe.com/flex/spark" 
          xmlns:containers="containers.*"
          xmlns:data="containers.data.*"
          xmlns:dataTypes="ardisia.scheduling.dataTypes.*" 
          xmlns:datePicker="ardisia.scheduling.datePicker.*" 
          xmlns:calendar="ardisia.scheduling.calendar.*"
          xmlns:calendarClasses="components.shared.calendarClasses.*"
          xmlns:separators="ardisia.components.separators.*"
          frameRate="60"
          width="100%" height="100%"
          removedFromStage="removedFromStageHandler(event)">
    
    <!-- scripts -->
    <fx:Script>
        <![CDATA[
            import mx.collections.IList;
            
            import ardisia.scheduling.dataTypes.CalendarDefinitionData;
            import ardisia.scheduling.dataTypes.iCalendarData;
            import ardisia.scheduling.iCalendarParser.iCalendarParser;
            
            import components.shared.calendarClasses.skins.LeftArrowButtonSkin;
            import components.shared.calendarClasses.skins.RightArrowButtonSkin;
            
            //----------------------------------
            //     variables
            //----------------------------------
            
            private var iCalendarReference:FileReference;
            
            //--------------------------------------
            //  methods
            //--------------------------------------
            
            public function creationComplete():void
            {
                interactionManager.calendar = calendar;
                interactionManager.calendars = [testCalendar];
                interactionManager.dateDisplay = dateDisplayLabel;
                interactionManager.datePicker = datePicker;
                interactionManager.addNewButton = addNewButton;
                interactionManager.incrementDisplayedDatesButton = incrementDisplayedDatesButton;
                interactionManager.decrementDisplayedDatesButton = decrementDisplayedDatesButton;
            }
            
            //----------------------------------
            //     event handlers
            //----------------------------------
            
            protected function export(event:Event):void 
            {
                var icalData:iCalendarData = new iCalendarData(testCalendar, calendar.dataProvider);
                var icalFeed:String = iCalendarParser.exportICalendar(icalData);
                
                var fileReference:FileReference = new FileReference();
                fileReference.save(icalFeed, "iCal_Ardisia_test.ics");
            }
            
            protected function importFile(event:Event):void
            { 
                var fileFilter:FileFilter = new FileFilter("ics Files (*.ics)", "*.ics");
                iCalendarReference = new FileReference();
                iCalendarReference.addEventListener(Event.SELECT, onFileSelected); 
                iCalendarReference.browse([fileFilter]);
            }
            
            protected function onFileSelected(evt:Event):void 
            { 
                iCalendarReference.removeEventListener(Event.SELECT, onFileSelected); 
                
                iCalendarReference.addEventListener(Event.COMPLETE, onComplete); 
                iCalendarReference.load(); 
            } 
            
            protected function onComplete(evt:Event):void 
            { 
                iCalendarReference.removeEventListener(Event.COMPLETE, onComplete); 
                
                var feed:String = String(iCalendarReference.data);
                var newData:iCalendarData = iCalendarParser.importICalendar(feed);
                var newCalendar:CalendarDefinitionData = newData.calendarDefinition;
                var dp:IList = newData.schedulingData;
                
                newCalendar.color = 0x662C91;
                
                // update the calendar
                interactionManager.calendars = [newCalendar];
                calendar.dataProvider = newData.schedulingData;
            }
            
            protected function removedFromStageHandler(event:Event):void
            {
                
            }
            
        ]]>
    </fx:Script>
    
    <!-- declarations -->
    <fx:Declarations>
        
        <dataTypes:CalendarDefinitionData id="testCalendar"
                                          title="Test Calendar"
                                          color="#662C91"/>
        
        <calendarClasses:CalendarInteractionManager id="interactionManager"
                                                    disableGridLabelDayZoom="true"/>
        
    </fx:Declarations>
    
    <!-- states -->
    <s:states>
        <s:State name="stockholm" />
        <s:State name="london" />
        <s:State name="spark" />
    </s:states>
    
    <!-- application -->
    <containers:DemoApplicationWrapper id="demoAppWrapper" 
                                       width="100%" height="100%"
                                       westRegionTitle="iCalendarParser Description"
                                       description="The Ardisia iCalendarParser both (A) exports scheduling data to an iCalendar (*.ics) file for import by other calendar clients and (B) imports iCalendar files and converts them to Ardisia scheduling data.&#13;&#13;Useful way to share scheduling data with other calendar programs, like Google Calendar.&#13;&#13;Each file supports a single calendar definition.&#13;&#13;Supports repeating events."
                                       currentState.stockholm="stockholm" currentState.london="london" currentState.spark="spark">
        
        <containers:expandingContainerContent>
            
            <!--- expanding container #1 -->
            <data:ExpandingContainerData>
                <data:label>DatePicker</data:label>
                <data:content>
                    <datePicker:DatePicker id="datePicker" 
                                           height="200"
                                           firstDayOfWeek="1"/>
                </data:content>
            </data:ExpandingContainerData>
            
        </containers:expandingContainerContent>
        
        <containers:centerContent>
            
            <!--- example #1 -->
            <data:PrimaryContentData>
                <data:tabLabel>Example</data:tabLabel>
                <data:exampleDescription>Use the buttons below to import an iCalendar (*.ics) file and the data should display in the month calendar below. Also, after adding/removing/editing events in the calendar below, export the calendar to an iCalendar file using the buttons below.&#13;&#13;Only 1 calendar definition is supported per file. To import/export multiple calendars, create an *.ics file for each calendar.</data:exampleDescription>
                <data:toolbarContent>
                    <s:VGroup width="100%" 
                              horizontalAlign="justify">
                        <s:HGroup>
                            <s:Button label="Import *.ics File"
                                      click="importFile(event)"/>
                            <s:Button label="Export Calendar as *.ics File"
                                      click="export(event)"/>
                        </s:HGroup>
                        <separators:HSeparator width="100%"/>
                        <s:Group height="30" width="100%">
                            <s:Label id="dateDisplayLabel"
                                     verticalCenter="2"
                                     left="0"
                                     fontSize="14"
                                     fontWeight="bold"/>
                            <s:HGroup verticalCenter="0" horizontalCenter="0"
                                      verticalAlign="middle"
                                      gap="-1">
                                <s:Button id="decrementDisplayedDatesButton" 
                                          icon="@Embed(source='icons/arrow-left.png')"
                                          skinClass.london="components.shared.calendarClasses.skins.LeftArrowButtonSkin"/>
                                <s:Button id="incrementDisplayedDatesButton" 
                                          icon="@Embed(source='icons/arrow-right.png')"
                                          skinClass.london="components.shared.calendarClasses.skins.RightArrowButtonSkin"/>
                            </s:HGroup>
                            <s:Button id="addNewButton" 
                                      right="10"
                                      verticalCenter="0"
                                      label="Add New"
                                      icon="@Embed(source='icons/plus.png')"/>
                        </s:Group>
                    </s:VGroup>
                </data:toolbarContent>
                <data:primaryContent>
                    <calendar:Calendar id="calendar" 
                                       width="100%" height="100%"/>
                </data:primaryContent>
            </data:PrimaryContentData>
            
        </containers:centerContent>
        
    </containers:DemoApplicationWrapper>
    
</s:Module>