<?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 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;
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.width = 200;
_legend.height = 300;
_legend.x = mapContainer.width - _legend.width;
_legend.y = 30;
_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);
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]){
if(!event.target.selected){
_yahooMap.markerManager.markers[j].visible = false;
}
else{
_yahooMap.markerManager.markers[j].visible = true;
}
}
}
}
}
}
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);
for each(var child:XML in myXML..catID){
if(child.parent().@search=="rentals"){
}
catFilter = child.text();
_itemSearch.searchLocal(child.parent().@search, mainLocationGeocode.zoomLevel,mainLocationGeocode.latlon,10,1,25,catFilter);
}
}
private function localCustomSearch(event:LegendEvent):void{
_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);
}
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="cbkAccHotel" selected="true" label="Hotels" styleName="accItem" click="itemClicked(event,[96929265])"/>
</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>