<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                xmlns:wv="wv.extenders.panel.*"
                xmlns:code="http://code.google.com/p/flexlib/"
                layout="absolute" 
                creationComplete="init()" 
 viewSourceURL="srcview/index.html">
<mx:Style source="../assets/styles.css"/>
    <mx:Metadata>
        [Event(name="itemClicked",type="events.LegendEvent")]
        [Event(name="dccIconClicked")]
        [Event(name="customSearch", type="events.LegendEvent")]
    </mx:Metadata>
    <mx:Script>
        <![CDATA[
            import com.yahoo.maps.api.markers.Marker;
            import com.yahoo.maps.api.core.location.LatLon;
            import mx.containers.Panel;
            import com.yahoo.maps.api.controls.PanControl;
            import com.yahoo.maps.webservices.local.LocalSearch;
            import com.yahoo.maps.webservices.local.LocalSearchItem;
            import com.yahoo.maps.webservices.local.LocalSearchResults;
            import com.yahoo.maps.webservices.local.events.LocalSearchEvent;
            import com.yahoo.maps.api.core.location.Address;
            import com.yahoo.maps.api.YahooMap;
            import com.yahoo.maps.api.YahooMapEvent;
            import com.yahoo.maps.webservices.geocoder.events.GeocoderEvent;
            import com.yahoo.maps.webservices.geocoder.GeocoderResult;
            import com.yahoo.maps.api.core.location.Address;
            import com.yahoo.maps.api.markers.SearchMarker;
            import custom.*;
            import events.*;
            
            private static const APP_ID:String = "YOUR_APP_ID_STRING_HERE";
            
            private var _yahooMap:YahooMap;
            //private var _legend:Panel;
            private var mainLocationGeocode:GeocoderResult;
            private var _dccAddress:Address;
            private var _itemSearch:LocalSearch;
            private var marker:CustomSearchMarker;
            private var dccMarker:DCCMarker;
            private var loader:URLLoader;
            private var catFilter:String;
    //Temp arrays
            private var discountArray:Array;
            private var categoryArray:Array = [["hotels","96929265"]];
            
            private function init():void{
                _yahooMap = new YahooMap();
                _yahooMap.addEventListener(YahooMapEvent.MAP_INITIALIZE, handleMapInit);
                _yahooMap.init(APP_ID, mapContainer.width,mapContainer.height);
                _yahooMap.addZoomWidget();
                _yahooMap.addPanControl();
                _yahooMap.addTypeWidget();
                _yahooMap.addScaleBar();
                mapContainer.addChild(_yahooMap);
                
                //_legend = new MapLegend();
                _legend.width = 200;
                _legend.height = 300;
                _legend.x = mapContainer.width - _legend.width;
                _legend.y = 30;
                //mapContainer.addChild(_legend);
                _legend.addEventListener("itemClicked", itemClicked);
                _legend.addEventListener("customSearch", localCustomSearch);
                _legend.addEventListener("dccIconClicked", dccIconShow);

                _dccAddress = new Address("2803 Fruitville Rd. Sarasota, FL  34237");
                _dccAddress.addEventListener(GeocoderEvent.GEOCODER_SUCCESS, handleDCCGeocodeSuccess);
                
                
            }
            private function onClick(event:Event, catString:Array):void{
                var e:LegendEvent = new LegendEvent("itemClicked",catString, event.target.id, event.target.selected);
                dispatchEvent(e);
            }
            private function onSubmit(event:Event):void{
                var pattern:RegExp = /\s/gi;
                var searchString:String = customSearchText.text.replace(pattern, "+");
                var e:LegendEvent = new LegendEvent("customSearch",[],searchString, event.target.selected);
                //dispatchEvent(e);
                localCustomSearch(e);
            }
            private function itemClicked(event:Event, _catFilter:Array):void{
                if(_catFilter.length > 0){
                        for(var i:uint=0; i< _catFilter.length; i++){
                            var itemArray:Array = new Array();
                            for(var j:uint=1; j< _yahooMap.markerManager.markers.length; j++){
                                if(_yahooMap.markerManager.markers[j].groupID == _catFilter[i]){
                                    //itemArray.push(_yahooMap.markerManager.markers[j]);
                                    if(!event.target.selected){
                                        _yahooMap.markerManager.markers[j].visible = false;
                                    }
                                    else{
                                        _yahooMap.markerManager.markers[j].visible = true;
                                    }
                                }
                            }
                        //    for(var k:uint=0; k< itemArray.length; k++){
                        //        _yahooMap.markerManager.markers.(itemArray[k]);
                        //    }
                    }
                }    
            }
            private function handleDCCGeocodeSuccess(event:GeocoderEvent):void{
                mainLocationGeocode = _dccAddress.geocoderResultSet.firstResult;
                _yahooMap.zoomLevel = 5;
                _yahooMap.centerLatLon = mainLocationGeocode.latlon;
                
                dccMarker = new DCCMarker();
                dccMarker.latlon = mainLocationGeocode.latlon;
                _yahooMap.markerManager.addMarker(dccMarker);
                var catURL:URLRequest = new URLRequest("categories.xml");
                loader = new URLLoader(catURL);
                loader.addEventListener(Event.COMPLETE, initLocalSearch);
            }
            private function initLocalSearch(event:Event):void{    
                var myXML:XML = new XML(event.target.data);
                var list:XMLList = myXML.*;                
                _itemSearch = new LocalSearch();
                _itemSearch.addEventListener(LocalSearchEvent.SEARCH_SUCCESS, handleLocalSearch);
                //Walk XML
                //trace(myXML.children()[0].children()[1].children().text());
                for each(var child:XML in myXML..catID){
                     if(child.parent().@search=="rentals"){
                     // gecode addresses in XML
                     //    _itemSearch.searchLocal(list.children()[i], mainLocationGeocode.zoomLevel,mainLocationGeocode.latlon,10,1,25,list.children()[i]);
                     }
                     //trace(child.parent().@search +" "+ child.text());
                     //var searchQuery:String = child.parent().@search;
                     catFilter = child.text();                     
                     _itemSearch.searchLocal(child.parent().@search, mainLocationGeocode.zoomLevel,mainLocationGeocode.latlon,10,1,25,catFilter);
                 }                
            }
            private function localCustomSearch(event:LegendEvent):void{
                //var customSearch:LocalSearch = new LocalSearch();
                //customSearch.addEventListener(LocalSearchEvent.SEARCH_SUCCESS, handleLocalSearch);
                _itemSearch.searchLocal(event.id, mainLocationGeocode.zoomLevel,mainLocationGeocode.latlon,10,1,25);
            }
            private function handleMapInit(event:YahooMapEvent):void{
                _dccAddress.geocode();
            }
            private function dccIconShow(event:LegendEventDCC):void{
                dccMarker.showMarker(event.state);
            }
            private function handleLocalSearch(event:LocalSearchEvent):void {
            var dccLatLon:LatLon = mainLocationGeocode.latlon;
            var searchResults:LocalSearchResults = event.data as LocalSearchResults;
            var results:Array = searchResults.results;
            var len:int = results.length;
            var markerColor:uint;
            var pattern:RegExp = /catfilt=\d{8}/;
            if(pattern.test(searchResults.resultURL)){
            var resultCat:String = pattern.exec(searchResults.resultURL);
            resultCat = resultCat.replace( /catfilt=/,"");
            catFilter = resultCat;
            }
            for(var i:int=0; i<len; i++) {
                var item:LocalSearchItem = results[i];
                switch(searchResults.term){
                    case "hotels":
                    markerColor = 0x0099FF;
                    break;
                    case "restaurants":
                    markerColor = 0x238741;
                    break;
                    case "shopping":
                    case "medical":
                    case "museums":
                    case "beaches":
                    case "theatres":
                    markerColor = 0xA53655;
                    break;
                    default:
                    markerColor = 0xFFCC66;
                    break;
                }
                
                marker = new CustomSearchMarker(markerColor, dccLatLon, item, searchResults.term, catFilter);
                marker.latlon = results[i].latlon;
                _yahooMap.markerManager.addMarker(marker);
                if(markerColor == 0xFFCC66){
                    
                    if(i == 0){    
                    _yahooMap.panToLatLon(marker.latlon);
                    }
                    // simulate marker click to show the big marker(s)
                    marker.onClick(new Event("click"));
                }
            }
        }

        
        ]]>
    </mx:Script>
    
    
        <mx:UIComponent id="mapContainer" width="100%" top="0" bottom="0"/>
        <mx:Canvas>
        <wv:SuperPanel id="_legend"
            width="200" height="300"
            title="Legend"
            backgroundAlpha=".9" 
            borderAlpha=".9" 
            verticalGap="0" showControls="true">
            <mx:VBox id="Accom" styleName="AccHeaderBox" width="100%" paddingBottom="10" paddingTop="5" verticalGap="0">
                <mx:Label text="Accomodations" styleName="Header" paddingBottom="10"/>
                <!--<mx:CheckBox id="cbkAccDisc" selected="true" label="Dattoli Discounts" styleName="accItem"/>-->
                <mx:CheckBox id="cbkAccHotel" selected="true" label="Hotels" styleName="accItem" click="itemClicked(event,[96929265])"/>
            <!--    <mx:CheckBox id="cbkAccRental" selected="true" label="Rental Homes/Condos" styleName="accItem"/> -->
            </mx:VBox>
            <mx:VBox styleName="RestHeaderBox" width="100%" paddingBottom="10" paddingTop="5" verticalGap="0">
                <mx:Label text="Restaurants" styleName="Header" paddingBottom="10"/>
                <mx:CheckBox id="cbkEatAmer" selected="true" label="American" styleName="EatItem" click="itemClicked(event,[96926237])"/>
                <mx:CheckBox id="cbkEatAsian" selected="true" label="Asian" styleName="EatItem" click="itemClicked(event,[96926210,96926164])"/>
                <mx:CheckBox id="cbkEatEurope" selected="true" label="Europeon" styleName="EatItem" click="itemClicked(event,[96926195,96926194,96926190,96926233])"/>
            </mx:VBox>
            <mx:VBox styleName="POIHeaderBox" width="100%" paddingBottom="10" paddingTop="5" verticalGap="0">
                <mx:Label text="Other Points of Interest" styleName="Header" paddingBottom="10"/>
                <mx:CheckBox id="cbkPOI1" selected="true" label="Shopping" styleName="POIItem" click="itemClicked(event,[96935006])"/>
                <mx:CheckBox id="cbkPOI2" selected="true" label="Medical Providers" styleName="POIItem" click="itemClicked(event,[96927377])"/>
                <mx:CheckBox id="cbkPOI3" selected="true" label="Beaches" styleName="POIItem" click="itemClicked(event,[96937252])"/>
                <mx:CheckBox id="cbkPOI4" selected="true" label="Museums/Art Galleries" styleName="POIItem" click="itemClicked(event,[96925830])"/>
                <mx:CheckBox id="cbkPOI5" selected="true" label="Theatres" styleName="POIItem" click="itemClicked(event,[96925828])"/>
            </mx:VBox>
            <mx:ControlBar id="customSearch">
                <code:PromptingTextInput prompt="Search by name..." width="66%" alpha=".5" id="customSearchText"/>
                <mx:Button label="Search" click="onSubmit(event)"/>
            </mx:ControlBar>
        </wv:SuperPanel>
    </mx:Canvas>
</mx:Application>