SIX.Tool.Marker = function (parent, sImage, sToolTip, params)
{
	SIX.Tool.call(this, parent, SIX.eToolTypes.EXCLUSIVE, sImage, sToolTip, params);
	this.addCallback(SIX.eToolCallbacks.ONACTIVATE, 
					function (map) {
						map.setPointerMode(PM_POINTER);
						map.hideMarkerForm();
						map.showSavedMaps(true); 						
					});
					
	this.addCallback(SIX.eToolCallbacks.ONDEACTIVATE, 
					function (map) {
						map.hideMarkerForm();
						map.hideSavedMaps();	
					});	

	this.addCallback(SIX.eToolCallbacks.ONMAPEXTENTCHANGE, 
					function (map) {
						map.markerCollection.update();
						if (map.markerCollection.nSelectedMarker >= 0 && map.isMarkerFormVisible())	
							map.showMarkerForm(map.markerCollection.nSelectedMarker);
					});											
					
	this.addCallback(SIX.eToolCallbacks.ONMAPMOUSEDOWN, 
					function (map) {
						//Check to see if we're selecting an existing marker. 
						var nMarker = -1;					
						var dMouseLatitude = map.getMouseLatitude();
						var dMouseLongitude = map.getMouseLongitude();
						var nMarkerNearest = map.markerCollection.getNearestMarkerIndex(dMouseLongitude, dMouseLatitude);
						if (nMarkerNearest != -1)
						{
							var marker = map.markerCollection.aMarkers[nMarkerNearest];
							var dDistanceTolerance = 0.01 * (map.getDistanceBetweenCoords(map.tlx, map.tly, map.brx, map.bry));
							var dDistanceToMarker = map.getDistanceBetweenLLCoords(dMouseLongitude, dMouseLatitude, marker.x, marker.y);
							if (dDistanceToMarker >= 0 && (dDistanceToMarker < dDistanceTolerance))
							{
								marker.x = dMouseLongitude;
								marker.y = dMouseLatitude;
								nMarker = nMarkerNearest;
							}
						}
						
						if (nMarker == -1)
						{
							nMarker = map.markerCollection.aMarkers.length;
							var nMarkerNum = nMarker + 1;
							var channelCurrent = SIX.App.getCurrentChannel();
							if (channelCurrent.sMarkerSymbolId == "")
							{
								var markerSymbol = channelCurrent.getDefaultMarkerSymbol();
								channelCurrent.sMarkerSymbolId = markerSymbol.sId;
							}
								
							var marker = map.markerCollection.addMarker(new SIX.Marker("Marker " + nMarkerNum, "Marker " + nMarkerNum, channelCurrent.sMarkerSymbolId, dMouseLongitude, dMouseLatitude));
							SIX.App.addMouseAction(marker.imageUid, map.markerCollection,0,true);
						}
						map.markerCollection.update();
						map.showMarkerForm(nMarker);
					});
}
SIX.Util.extend(SIX.Tool.Marker, SIX.Tool);