//Edited October 20, 2009 - AM
// Added Transparent Gif's for GIcons IE Print Fix

var toll=toll || {};
(function(){
	var _UP_ICON='/js/search-images/red_dot.png';
	var _DOWN_ICON='/js/search-images/red_dot_hover.png';
	var _UP_ICON_PRINT='/js/search-images/red_dot.gif';
	var _UP_ICON_CLUSTER='/js/search-images/mult_dot.png';
	var _DOWN_ICON_CLUSTER='/js/search-images/mult_dot_hover.png';
	var _UP_ICON_CLUSTER_PRINT='/js/search-images/mult_dot.gif';

	
	//
	var _ICON_SHADOW='/js/search-images/shadow_mult_dot.png';
	//var _ICON_SHADOW='js/search-images/googleMapIcons-pilot/shadow50-ret1-37x30.png';
	var _INFO_WINDOW_OFFSET = new GSize(-10, -20);//new GSize(0, -21);
	

	

	
	
	var _ICON = new GIcon(G_DEFAULT_ICON);
	_ICON.iconSize = new GSize(25, 32);
	_ICON.shadowSize = new GSize(0,0);
	_ICON.iconAnchor = new GPoint(20, 32);
	_ICON.shadow=_ICON_SHADOW;
	_ICON.shadowSize = new GSize(37, 32);
	//_ICON.printImage = _UP_ICON_PRINT;
	//_ICON.shadowSize = new GSize(37, 32);
	
	/*
	var _ICON = new GIcon(G_DEFAULT_ICON);
	_ICON.iconSize = new GSize(20, 27);
	_ICON.shadowSize = new GSize(0, 0);
	_ICON.iconAnchor = new GPoint(10, 27);
	_ICON.shadow=_ICON_SHADOW;
	_ICON.shadowSize = new GSize(37, 27);
	*/
	
	
	
	var _selectedMarkerWrapper={}; // Selected GMarker
	var _markerWrappers = new Array();
	var _markerWrapperMap={};
	
	var _map={};//GMap2
	
	var _MarkerWrapper=function(marker,data,upIcon,downIcon){
		this.select=function(sel/*boolean*/){
			if(sel){
				marker.setImage(downIcon);
			}else{
				marker.setImage(upIcon);
			}
		}
		this.getMarker=function()/*GMarker*/{
			return marker;			
		}
		this.getData=function()/*[{id;,}]*/{	
			return data;
		}
	}
	var _removeMarkers=function(){
			if(_markerWrappers == null || _markerWrappers.length == 0)return;
			_map.clearOverlays();
			_selectedMarkerWrapper=null;
			_markerWrappers = [];
			_markerWrapperMap={};
	}
	
	var _init=function(map/*GMap2*/){
		if(_map == map || map==null || !map.setCenter)return;
		_map=map;
		GEvent.addListener(map, "infowindowclose", function() {
			if(_selectedMarkerWrapper != null){
				_selectedMarkerWrapper.select(false);
			}
		});
		GEvent.addListener(_map, "infowindowopen", function() {
		});
		_removeMarkers();
	}
	
	
	toll.MapMarkerFactory={
		removeMarkers:function(){
			_removeMarkers();
		},
		createMarker:function(map/*GMap2*/, point/*GLatLng*/, data/*[{id:,}]*/,
							infoWindowContentFactory/*function(data/*[{id:}]*/ ){
		
			_init(map);
		
		
			var isCluster=data.length>1;
			var upIcon = isCluster ? _UP_ICON_CLUSTER : _UP_ICON;
			var downIcon = isCluster ? _DOWN_ICON_CLUSTER : _DOWN_ICON;
			var printIcon = isCluster ?  _UP_ICON_CLUSTER_PRINT : _UP_ICON_PRINT;
			
			
			//Private data for each marker:
			//var icon = new GIcon(G_DEFAULT_ICON);
		
			_ICON.image=upIcon;
			_ICON.printImage = printIcon;
			
			var marker = new GMarker(point,{icon:_ICON, draggable: false});
			//Make marker wrapper data accessible outside of this closure
			//var markerWrapper={marker:marker,upIcon:upIcon,downIcon:downIcon,isCluster:isCluster};
			var markerWrapper=new _MarkerWrapper(marker,data,upIcon,downIcon);
			
			GEvent.addListener(marker,"mouseover",function(){
				//Rollover: Image swap
				marker.setImage(downIcon);
			});
			
			GEvent.addListener(marker, "click", function() {
				map.openInfoWindow(point, infoWindowContentFactory(data), {pixelOffset:_INFO_WINDOW_OFFSET});
				marker.setImage(downIcon);
				
				
				if(_selectedMarkerWrapper!=null && _selectedMarkerWrapper.select!=null){
					_selectedMarkerWrapper.select(false);
				}
				_selectedMarkerWrapper=markerWrapper;
			});
			
			GEvent.addListener(marker, "mouseout", function() {
				if(markerWrapper!=_selectedMarkerWrapper){
					//marker.setImage('images/gmarker-icon.png');
					marker.setImage(upIcon);
				}
			});
			
			
			_markerWrapperMap[data[0]['id']] = markerWrapper;//MarkerWrapper
			_markerWrappers.push(markerWrapper);
			return marker;
		}
	}
})();

