Index: src/viewerfiles/ajaxmappane.templ
===================================================================
--- src/viewerfiles/ajaxmappane.templ	(revision 3543)
+++ src/viewerfiles/ajaxmappane.templ	(working copy)
@@ -460,6 +460,7 @@
 {
     if(handler == null)
         return;
+    SetDigitizeCursor("Point");
     StartDigitizing(new PointDigitizer(OnShapeDigitized, ScreenToMapUnits), handler);
 }
 
@@ -467,6 +468,7 @@
 {
     if(handler == null)
         return;
+    SetDigitizeCursor("Line");
     StartDigitizing(new LineDigitizer(OnShapeDigitized, ScreenToMapUnits, cancelTgt, shape, "shapeFeedback", "#000000", mapPosX, mapDevW, mapDevH), handler);
 }
 
@@ -474,6 +476,7 @@
 {
     if(handler == null)
         return;
+    SetDigitizeCursor("Circle");
     StartDigitizing(new CircleDigitizer(OnShapeDigitized, ScreenToMapUnits, cancelTgt, shape, "shapeFeedback", "#000000", mapPosX, mapDevW, mapDevH), handler);
 }
 
@@ -481,6 +484,7 @@
 {
     if(handler == null)
         return;
+    SetDigitizeCursor("Rectangle");
     StartDigitizing(new RectangleDigitizer(OnShapeDigitized, ScreenToMapUnits, cancelTgt, shape, "shapeFeedback", "#000000", mapPosX, mapDevW, mapDevH), handler);
 }
 
@@ -488,6 +492,7 @@
 {
     if(handler == null)
         return;
+    SetDigitizeCursor("LineString");
     StartDigitizing(new LineStringDigitizer(OnShapeDigitized, ScreenToMapUnits, cancelTgt, shape, "shapeFeedback", "#000000", mapPosX, mapDevW, mapDevH, ShowSelectionTip, selTtipText, false), handler);
 }
 
@@ -495,6 +500,7 @@
 {
     if(handler == null)
         return;
+    SetDigitizeCursor("Polygon");
     StartDigitizing(new LineStringDigitizer(OnShapeDigitized, ScreenToMapUnits, cancelTgt, shape, "shapeFeedback", "#000000", mapPosX, mapDevW, mapDevH, ShowSelectionTip, selTtipText, true), handler);
 }
 
@@ -658,6 +664,67 @@
         UpdateTilesAfterPan(prevtilex, prevtiley, panX1, panY1, panX2, panY2);
 }
 
+//Update the map cursor based on a map action
+function UpdateMapActionCursor(action)
+{
+  var strCursor = "";
+  switch(action)
+  {
+    case 1: /*pan*/             strCursor = "pan";          break;
+    case 7: /*Zoom plus*/       strCursor = "zoomin";       break;
+    case 8: /*Zoom minus*/      strCursor = "zoomout";      break;
+    case 9: /*Zoom window*/     strCursor = "zoomrect";     break;
+    case 16: /*Select Radius*/  strCursor = "selectRadius"; break;
+    case 17: /*Select Polygon*/ strCursor = "selectPolygon";break;
+  }
+  SetMapCursor(strCursor)
+}
+
+//Update the map cursor to reflect the current tool
+function SetCurrentToolCursor()
+{
+  var strCursor = "";
+  switch(tool)
+  {
+    case 1: /*Zoom plus*/      strCursor = "zoomin";       break;
+    case 2: /*Zoom minus*/     strCursor = "zoomout";      break;
+    case 3: /*Zoom window*/    strCursor = "zoomrect";     break;
+    case 4: /*pan*/            strCursor = "pan";          break;
+    case 5: /*Select Radius*/  strCursor = "selectRadius"; break;
+    case 6: /*Select Polygon*/ strCursor = "selectPolygon";break;
+  }
+  SetMapCursor(strCursor)
+}
+
+//Update the map cursor for digitization
+function SetDigitizeCursor(digitizeTool)
+{
+  var strCursor = "";
+  switch(digitizeTool)
+  {
+    case "Point":      strCursor = "digitizePoint"; break;
+    case "Line":       strCursor = "digitizeLine"; break;
+    case "Circle":     strCursor = "digitizeCircle"; break;
+    case "Rectangle":  strCursor = "digitizeRectangle"; break;
+    case "LineString": strCursor = "digitizeLineString"; break;
+    case "Polygon":    strCursor = "digitizePolygon"; break;
+  }
+  SetMapCursor(strCursor)
+}
+
+function SetMapCursor(strCursor)
+{
+  if(strCursor == "")
+  {
+    strCursor = "auto";
+  }
+  else
+  {
+    strCursor = "url('../stdicons/" + strCursor + ".cur'), pointer";
+  }
+  document.getElementById("tbMap").style.cursor = strCursor;
+}
+
 function ExecuteMapAction(action)
 {
     if(!mapInit)
@@ -666,6 +733,7 @@
     switch(action)
     {
         case 1:
+            UpdateMapActionCursor(action);
             tool = 4;
             break;
         case 2:
@@ -681,12 +749,15 @@
             PanLeft();
             break;
         case 7:
+            UpdateMapActionCursor(action);
             tool = 1;
             break;
         case 8:
+            UpdateMapActionCursor(action);
             tool = 2;
             break;
         case 9:
+            UpdateMapActionCursor(action);
             tool = 3;
             break;
         case 10:
@@ -705,12 +776,15 @@
             InitialMapView();
             break;
         case 15:
+            UpdateMapActionCursor(action);
             tool = 0;
             break;
         case 16:
+            UpdateMapActionCursor(action);
             tool = 5;
             break;
         case 17:
+            UpdateMapActionCursor(action);
             tool = 6;
             break;
         case 19:
@@ -3499,6 +3573,7 @@
 {
     if(digitizing)
     {
+        SetCurrentToolCursor();
         digitizer.Cancel();
         digitizing = false;
         digihandler = null;
@@ -3509,6 +3584,7 @@
 {
     if(digitizing)
     {
+        SetCurrentToolCursor();
         digitizing = false;
         if(digihandler != null)
         {
Index: src/viewerfiles/mainframe.templ
===================================================================
--- src/viewerfiles/mainframe.templ	(revision 3543)
+++ src/viewerfiles/mainframe.templ	(working copy)
@@ -441,6 +441,7 @@
     try
     {
         measureWinRef.MeasureEnded();
+        GetMapFrame().SetCurrentToolCursor();
     }
     catch(e) {}
 }
@@ -450,6 +451,7 @@
     inMeasure = true;
     try
     {
+        GetMapFrame().SetMapCursor("measure");
         measureWinRef.MeasureResumed();
     }
     catch(e) {}
@@ -463,6 +465,7 @@
 function StopMeasure()
 {
     inMeasure = false;
+    GetMapFrame().SetCurrentToolCursor();
 }
 
 function ClearMeasure()
@@ -633,6 +636,7 @@
     }
     inMeasure = true;
     pointBegin = null;
+    GetMapFrame().SetMapCursor("measure");
     measureWinRef = OpenUrl("%s?PARTIAL=0&TOTAL=0", index);
 }
 

