  var currentLevel = "zoom6";
  var clickFunction = "recenter";  // What to do when image is clicked
    // function to display a map (i.e. regional, street, facility) in a specified area of a page
    function zoomMap (whichlevel) {
       var storedLevel = top.document.getElementById('currentScale').value;
       var newLevel;
       if (storedLevel == "zoom10") {
          top.document.getElementById('zoom10').className  = "zoom";
          top.document.getElementById('zoom12').className  = "zoom";
       } else if (storedLevel == "zoom11") {
         top.document.getElementById('zoom11').className  = "zoom";
         top.document.getElementById('zoom12').className  = "zoom";
       } else if (storedLevel == "zoom12") {
         top.document.getElementById('zoom12').className  = "zoom";
       } else if (storedLevel == "zoom13") {
         top.document.getElementById('zoom13').className  = "zoom";
         top.document.getElementById('zoom12').className  = "zoom";
       } else if (storedLevel == "zoom14") {
         top.document.getElementById('zoom14').className  = "zoom";
         top.document.getElementById('zoom12').className  = "zoom";
       } else if (storedLevel == "zoom15") {
         top.document.getElementById('zoom15').className  = "zoom";
         top.document.getElementById('zoom12').className  = "zoom";
       } else if (storedLevel == "zoom16") {
         top.document.getElementById('zoom16').className  = "zoom";
         top.document.getElementById('zoom12').className  = "zoom";
       } else {
         top.document.getElementById('zoom12').className  = "zoom";
       }
       if (whichlevel.name == "zoomplus") {
          //alert(">>Stored level = " + storedLevel);
          if (storedLevel == "zoom10") {
             top.document.getElementById('currentScale').value  = "zoom10";
             newLevel = "zoom10";
             top.document.getElementById('placeholder').src = top.document.getElementById('zoom10').value;
          } else if (storedLevel == "zoom11") {
             top.document.getElementById('currentScale').value  = "zoom10";
             newLevel = "zoom10";
             top.document.getElementById('placeholder').src = top.document.getElementById('zoom10').value;
          } else if (storedLevel == "zoom12") {
             top.document.getElementById('currentScale').value  = "zoom11";
             newLevel = "zoom11";
             top.document.getElementById('placeholder').src = top.document.getElementById('zoom11').value;
          } else if (storedLevel == "zoom13") {
             top.document.getElementById('currentScale').value  = "zoom12";
             newLevel = "zoom12";
             top.document.getElementById('placeholder').src = top.document.getElementById('zoom12').value;
          } else if (storedLevel == "zoom14") {
             top.document.getElementById('currentScale').value  = "zoom13";
             newLevel = "zoom13";
             top.document.getElementById('placeholder').src = top.document.getElementById('zoom13').value;
          } else if (storedLevel == "zoom15") {
             top.document.getElementById('currentScale').value  = "zoom14";
             newLevel = "zoom14";
             top.document.getElementById('placeholder').src = top.document.getElementById('zoom14').value;
          } else if (storedLevel == "zoom16") {
             top.document.getElementById('currentScale').value  = "zoom15";
             newLevel = "zoom15";
             top.document.getElementById('placeholder').src = top.document.getElementById('zoom15').value;
          } else {
             // Already zoomed in
          }
          //document.location.reload();
          //alert(">>New level set to " + newLevel);
          //alert("Source set to " + top.document.getElementById('placeholder').src);

       } else if (whichlevel.name == "zoomminus") {
          if (storedLevel == "zoom10") {
             top.document.getElementById('currentScale').value  = "zoom11";
             newLevel = "zoom11";
             top.document.getElementById('placeholder').src = top.document.getElementById('zoom11').value;
          } else if (storedLevel == "zoom11") {
             top.document.getElementById('currentScale').value  = "zoom12";
             newLevel = "zoom12";
             top.document.getElementById('placeholder').src = top.document.getElementById('zoom12').value;
          } else if (storedLevel == "zoom12") {
             top.document.getElementById('currentScale').value  = "zoom13";
             newLevel = "zoom13";
             top.document.getElementById('placeholder').src = top.document.getElementById('zoom13').value;
          } else if (storedLevel == "zoom13") {
             top.document.getElementById('currentScale').value  = "zoom14";
             newLevel = "zoom14";
             top.document.getElementById('placeholder').src = top.document.getElementById('zoom14').value;
          } else if (storedLevel == "zoom14") {
             top.document.getElementById('currentScale').value  = "zoom15";;
             newLevel = "zoom15";
             top.document.getElementById('placeholder').src = top.document.getElementById('zoom15').value;
          } else if (storedLevel == "zoom15") {
             top.document.getElementById('currentScale').value  = "zoom16";
             newLevel = "zoom16";
             top.document.getElementById('placeholder').src = top.document.getElementById('zoom16').value;
          } else if (storedLevel == "zoom16") {
             top.document.getElementById('currentScale').value  = "zoom16";
             newLevel = "zoom16";
             top.document.getElementById('placeholder').src = top.document.getElementById('zoom16').value;
          } else {
             // Already zoomed out
          }
          //document.location.reload();
       } else {
           top.document.getElementById('placeholder').src = whichlevel.value;
           newLevel = whichlevel.name;
       }
       //alert(">>>>>>>  currentLevel is now " + newLevel);
       top.document.getElementById('currentScale').value  = newLevel;
       top.document.getElementById(newLevel).className  = "zoomselected";
    //whichlevel.class = "zoomselected";
    //alert(currentLevel);
    //alert("Setting source to " + whichlevel.value);
        return true;
    }
    
    function centerThis(latitude, longitude, zoom) {
       var URL = "mapParent.jsp?lat=" + latitude + "&long=" + longitude + "&zoom=" + zoom
       top.document.location = URL;
    }

   function performAction(latitude, longitude, zoom)
   {
      //var thisDocument = top.document.getElementById('mapIFrame').location;
      var clickFunction = document.mapForm.clickFunction.value;
      if (clickFunction == "recenter") {
         centerThis(latitude, longitude, zoom);
      } else if (clickFunction == "zoomin") {
         return(zoomMap(top.document.getElementById('zoomplus')));
      } else if (clickFunction == "zoomout") {
         return(zoomMap(top.document.getElementById('zoomminus')));
      }
   }

   // This function pans the map
   function panMap(direction, latitude, longitude, zoom)
   {
       var URL;
       switch (zoom) {
         case 1:
            offset = 3.0;   // 2.0;
            break;
         case 2:
            offset = 1.50;  // 1.0;
            break;
         case 3:
            offset = 0.75;  // 0.5;
            break;
         case 4:
            offset = 0.40;  // 0.25;
            break;
         case 5:
            offset = 0.20;  // 0.125;
            break;
         case 6:
            offset = 0.10;  // 0.0625;
            break;
         case 7:
            offset = 0.05; // 0.03;
            break;
         case 8:
            offset = 0.015;
            break;
         case 9:
            offset = 0.010;
            break;
         default:
            offset = 0.75;
       }
       alert("lat=" + latitude + ", long=" + longitude);
       switch (direction) {
         case "NW":
           latitude += offset;
           longitude -= offset;
           break;
         case "N":
           latitude += offset;
           break;
         case "NE":
           latitude += offset;
           longitude += offset;
           break;
         case "W":
           longitude -= offset;
           break;
         case "E":
           longitude += offset;
           break;
         case "SW":
           latitude -= offset;
           longitude -= offset;
           break;
         case "S":
           latitude -= offset;
           break;
         case "SE":
           latitude -= offset;
           longitude += offset;
           break;
       }
       alert("lat=" + latitude + ", long=" + longitude);
       
       URL = "mapParent.php?lat=" + latitude + "&long=" + longitude + "&zoom=" + zoom
       top.document.location = URL;
       return false;
   }

   // This function pans the map
   function panAerialPhoto(direction, xlatitude, xlongitude, xscale)
   {
       var URL;
       var latitude = top.document.getElementById('currentLat').value;
       var longitude = top.document.getElementById('currentLong').value;
       var scale = top.document.getElementById('currentScale').value
       scale = scale.substring(4,6);
       // alert(direction);
       // alert("Old lat=" + latitude + "  - long=" + longitude);
       // alert("scale=" + scale);
       switch (scale) {
         case "10":
           offset = ".004";
           break;
         case "11":
           offset = ".008";
           break;
         case "12":
           offset = ".016";
           break;
         case "13":
           offset = ".032";
           break;
         case "14":
           offset = ".064";
           break;
         case "15":
           offset = ".125";
           break;
         case "16":
           offset = ".25";
           break;
         default:
           offset = ".5";
       }
       switch (direction) {
         case "NW":
           longitude = parseFloat(longitude) - parseFloat(offset);
           latitude = parseFloat(offset) + parseFloat(latitude);
           break;
         case "N":
           latitude = parseFloat(offset) + parseFloat(latitude);
           break;
         case "NE":
           longitude = parseFloat(longitude) + parseFloat(offset);
           latitude = parseFloat(offset) + parseFloat(latitude);
           break;
         case "W":
           longitude = parseFloat(longitude) - parseFloat(offset);
           break;
         case "E":
           longitude = parseFloat(longitude) + parseFloat(offset);
           break;
         case "SW":
           longitude = parseFloat(longitude) - parseFloat(offset);
           latitude = parseFloat(latitude) - parseFloat(offset);
           break;
         case "S":
           latitude = parseFloat(latitude) - parseFloat(offset);
           break;
         case "SE":
           longitude = parseFloat(longitude) + parseFloat(offset);
           latitude = parseFloat(latitude) - parseFloat(offset);
           break;
       }
       latitude = Math.round(parseFloat(latitude)*Math.pow(10,3))/Math.pow(10,3);
       longitude = Math.round(parseFloat(longitude)*Math.pow(10,3))/Math.pow(10,3);
       if (longitude > 0) {    // In case we get a positive longitude
         longitude = 0 - longitude;
       }
       //alert("NEW lat=" + latitude + ", long=" + longitude);
       top.document.getElementById('currentLat').value = latitude;
       top.document.getElementById('currentLong').value = longitude;
       URL = "mapParent.php?latitude=" + latitude + "&longitude=" + longitude + "&scale=" + scale
       top.document.location = URL;
       //top.document.getElementById('placeholder').src = URL;
       return false;
   }
   
   function setJsValue(varValue)
   {
      alert("clickFunction has been reset to " + varValue);
     clickFunction = varValue;
   }

   function showCoords(ev)
   {
       // Check that the required objects and variables exist
       if (document.getElementById("placeholder") != null) {
   		 var ey1 = parseFloat(document.getElementById('extentY1').value);
   		 var ex2 = parseFloat(document.getElementById('extentX2').value);
   		 var ey2 = parseFloat(document.getElementById('extentY2').value);
   		 var ex1 = parseFloat(document.getElementById('extentX1').value);
   	    var mapImage = document.getElementById('placeholder');

   		 // Check that there is an extent to use
   		 if (!(ex1 == 0 && ey1 == 0 && ex2 == 0 && ey2 == 0)) {
   			// Get the mouse coordinate as it moves and calculate the map coordinates
   			//var x = ex1 + ((ev.clientX / mi.width) * (ex2 - ex1));
   			//var y = ey2 - ((ev.clientY / mi.height) * (ey2 - ey1));
   			//var x = ex1 + ((ev.clientX / mi.width) * (ex2 - ex1));
   			//var y = ey2 - ((ev.clientY / mi.height) * (ey2 - ey1));
   			var x = ex2 - ((parseFloat(ev.clientX)/parseFloat(mapImage.width)) * (ex2 - ex1));
   			var y = ey1 - ((parseFloat(ev.clientY)/parseFloat(mapImage.height)) * (ey1 - ey2));
   
   			// Update the map coordinates on the screen
   			document.getElementById('xCoord').innerHTML = parseFloat(x).toPrecision(6);
   			document.getElementById('yCoord').innerHTML = parseFloat(y).toPrecision(6);
   		}
       }
   }

function clearCoords()
{
    // Hide the map coordinates
    document.getElementById("xCoord").innerHTML = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
    document.getElementById("yCoord").innerHTML = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
}

// EDS Finland Code
// These function are for Internet Explorer only (version 4 or higher)

//var sAgent= navigator.userAgent;
//var agt= sAgent.toLowerCase();
//var PPC= (agt.indexOf("ppc")!=-1);

var map = null;
var x1 = -1;
var y1 = -1;
var x2 = -1;
var y2 = -1;
var curActionJs = "";
var curOperationJs = "";
var strLine = "";


function updateMap(ax1, ay1, ax2, ay2)
{
    // Set the action extent in pixels on the map form
    setActionExtent(ax1, ay1, ax2, ay2);

    // Update the map using the given action
    top.document.getElementById(curActionJs).click();
}

function setActionExtent(ax1, ay1, ax2, ay2)
{
    // Set the action extent in pixels on the map form
    top.document.getElementById("actionX1").value = ax1;
    top.document.getElementById("actionY1").value = ay1;
    top.document.getElementById("actionX2").value = ax2;
    top.document.getElementById("actionY2").value = ay2;
}

function clickMap(ev)
{
    // Only do this for a left button click
    if (ev.button != 2) {
        // Do the appropriate operation
        switch (curOperationJs) {
            case "point":
                selectPoint(ev);
                break;

            case "box":
                startRubber(ev);
                break;

            case "drag":
                startDrag(ev);
                break;

            case "dist":
                startDistance(ev);
                break;
        }
    }
}

function selectPoint(ev)
{
    // Get the point selected
    x1 = ev.clientX;
    y1 = ev.clientY;

    if (x1 >= 0 && y1 >= 0) {
        //window.alert("x,y = " + x1 + "," + y1);
        updateMap(x1, y1, -1, -1);
    }

    // Reset the pixel coordinates
    resetVars();
}

function startRubber(ev)
{
    // Show the bounding box at the click point and trap the next mouse events
    var r = document.getElementById("rubberBand").style;
    r.width = "0px";
    r.height = "0px";
    r.left = ev.clientX + "px";
    r.top  = ev.clientY + "px";
    r.visibility = "visible";

    x1 = ev.clientX;
    y1 = ev.clientY;

	if (!document.all) {
		document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);    
	}
    document.onmousedown = moveRubber;
    document.onmousemove = moveRubber;
    document.onmouseup = stopRubber;
}

function moveRubber(ev)
{
	// Get the right event object
	if (document.all) ev = event;

    // Record the mouse coordinate as it moves and update the bounding box
    var r = document.getElementById("rubberBand").style;
    var mi = document.getElementById("mapImage");

    if (ev.clientX >= 0 && ev.clientX < mi.width) {
        x2 = ev.clientX;
        r.left = Math.min(x1, x2) + "px";
        r.width = Math.max(x1, x2) - parseInt(r.left) + "px";
    }
    if (ev.clientY >= 0 && ev.clientY < mi.height) {
        y2 = ev.clientY;
        r.top = Math.min(y1, y2) + "px";
        r.height = Math.max(y1, y2) - parseInt(r.top) + "px";
    }

    return false;
}

function stopRubber()
{
    // Release the mouse events and hide the bounding box
	if (!document.all) {
		document.releaseEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);    
	}
    document.onmousedown = null;
    document.onmousemove = null;
    document.onmouseup = null;

    var r = document.getElementById("rubberBand").style;
    r.visibility = "hidden";

    if (x1 != 0 && y1 != 0 && x2 != 0 && y2 != 0 && x1 != x2 && y1 != y2) {
        //window.alert("x1,y1,x2,y2 = " + x1 + "," + y1 + "," + x2 + "," + y2);
        updateMap(Math.min(x1, x2), Math.min(y1, y2), Math.max(x1, x2), Math.max(y1, y2));
    }

    // Reset the pixel coordinates
    resetVars();
}

function startDrag(ev)
{
    // Store the click point and trap the next mouse events
    map = document.getElementById("mapImage").style;
    
    x1 = ev.clientX;
    y1 = ev.clientY;

	if (!document.all) {
		document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);    
	}
    document.onmousedown = moveDrag;
    document.onmousemove = moveDrag;
    document.onmouseup = stopDrag;
}

function moveDrag(ev)
{
	// Get the right event object
	if (document.all) ev = event;

    // Record the mouse coordinate as it moves and move the picture with it
    if (map) {
	    var mi = document.getElementById("mapImage");

        if (ev.clientX >= 0 && ev.clientX < mi.width) {
            x2 = ev.clientX - x1;
            map.left = x2 + "px";
        }
        if (ev.clientY >= 0 && ev.clientY < mi.height) {
            y2 = ev.clientY - y1;
            map.top = y2 + "px";
        }

        return false;
    }
}

function stopDrag()
{
    // Release the mouse events
	if (!document.all) {
		document.releaseEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);    
	}
    document.onmousedown = null;
    document.onmousemove = null;
    document.onmouseup = null;

    // Pan the map using the pixels the current picture has been dragged
    if (x2 != 0 && y2 != 0) {
        //window.alert("0,0 -> x2,y2 = " + x2 + "," + y2);
        updateMap(-x2, -y2, -1, -1);
    }

    // Reset the pixel coordinates
    map = null;
    resetVars();
}

function startDistance(ev)
{
    // Put the bounding box at the click point and trap the next mouse events
    var r = document.getElementById("distanceBand").style;
	var dT = document.getElementById("distText").style;
    r.width = "0px";
    r.height = "0px";
    r.left = ev.clientX + "px";
    r.top  = ev.clientY + "px";
    r.visibility = "hidden";	// to stop single clicks moving the line
    dT.visibility = "hidden";
    
    x1 = ev.clientX;
    y1 = ev.clientY;

	if (!document.all) {
		document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);    
	}
    document.onmousedown = moveDistance;
    document.onmousemove = moveDistance;
    document.onmouseup = stopDistance;
}

function moveDistance(ev)
{
	// Get the right event object
	if (document.all) ev = event;

    // Record the mouse coordinate as it moves and update the bounding box
    var r = document.getElementById("distanceBand").style;
	var dT = document.getElementById("distText").style;
    var mi = document.getElementById("mapImage");
    r.visibility = "visible";
    dT.visibility = "visible";

    if (ev.clientX >= 0 && ev.clientX < mi.width) {
        x2 = ev.clientX;
        r.left = Math.min(x1, x2) + "px";
        r.width = Math.max(x1, x2) - parseInt(r.left) + "px";
    }
    if (ev.clientY >= 0 && ev.clientY < mi.height) {
        y2 = ev.clientY;
        r.top = Math.min(y1, y2) + "px";
        r.height = Math.max(y1, y2) - parseInt(r.top) + "px";
    }

	// Draw the line in the box
    if (x2 != 0 && y2 != 0) {
        //drawLine(x1, y1, x2, y2, 3, "Images/pixelVector0.gif");
        drawLine(0, 0, x2-x1, y2-y1, 3, "Images/pixelVector0.gif");
    }

    return false;
    
}

function stopDistance()
{
    // Release the mouse events
	if (!document.all) {
		document.releaseEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);    
	}
    document.onmousedown = null;
    document.onmousemove = null;
    document.onmouseup = null;

    // Reset the pixel coordinates
    resetVars();
}

function resetVars()
{
    // Reset the pixel coordinates
    x1 = -1;
    y1 = -1;
    x2 = -1;
    y2 = -1;
}

function drawLine(X1, Y1, X2, Y2, thickness, dot)
{
    // Check that the required objects and variables exist
    if (document.getElementById("mapImage") != null) {
		var ex1 = parseFloat(top.document.getElementById("extentX1").value);
		var ey1 = parseFloat(top.document.getElementById("extentY1").value);
		var ex2 = parseFloat(top.document.getElementById("extentX2").value);
		var ey2 = parseFloat(top.document.getElementById("extentY2").value);

		// Check that there is an extent to use
		if (!(ex1 == 0 && ey1 == 0 && ex2 == 0 && ey2 == 0)) {
		    var dT = document.getElementById("distText");
			var r = document.getElementById("distanceBand");
		    var mi = document.getElementById("mapImage");
			var width= Math.abs(X2-X1);
			var height= Math.abs(Y2-Y1);
			var adj = Math.floor(thickness / 2);
			var t;

			// Reset the line
			strLine= "";
			r.innerHTML= "";

			// Now draw the line
		    if (width<height) { //Draw columns
				if (Y2<Y1) {    //Ensure top down
					t=  X1;  t=  Y1;
					X1= X2;  Y1= Y2;
					X2= t;   Y2= t;
				}
				
				// Loop through pixels top to bottom
				for (iny = Y1; iny <= Y2; iny++) {
					if (X2<=X1) {   //to left
						inx= X2+Math.floor(((iny-Y1)*width)/height);
					}
					else {
						inx= X1+Math.floor(((iny-Y1)*width)/height);
					}

					// Plot a point ensuring the centre of the image is at the pixel (using adj)
					drawPoint(Math.abs(inx)-adj,Math.abs(iny)-adj,thickness,thickness,dot);
				}
			}
		    else {  //Draw rows
				if (X2<X1) {    //Ensure left to right
					t=  X1;  t=  Y1;
					X1= X2;  Y1= Y2;
					X2= t;   Y2= t;
				}
				
				// Loop through pixels left to right
				for (inx = X1; inx <= X2; inx++) {
					if (Y2<=Y1) {   //upwards
						iny= Y2+Math.floor(((inx-X1)*height)/width);
					}
					else {
						iny= Y1+Math.floor(((inx-X1)*height)/width);
					}

					// Plot a point ensuring the centre of the image is at the pixel (using adj)
					drawPoint(Math.abs(inx)-adj,Math.abs(iny)-adj,thickness,thickness,dot);
				}
			}
    
			// Put the finished line in the box
			r.innerHTML= strLine;		
			
			// Calculate the distance in metres using the map scale (number of metres per pixel)
			var scale = top.document.getElementById("pixelScale").value;
			var dist = scale * Math.pow(width * width + height * height, 0.5);
            if (dist > 100000) {
				dist = Math.round(dist / 1000);
				dT.innerHTML = dist + "km";
            }
            else {
				if (dist < 100) {
					dist = Math.round(100 * dist) / 100;
				}
				else {
					dist = Math.round(dist);
				}
				dT.innerHTML = dist + "m";
			}

			// Centre the distance text in the box but not outside the map image
			var tempLeft = parseInt(r.style.left) + ((parseInt(r.style.width) - parseInt(dT.style.width)) / 2);
			var tempTop = parseInt(r.style.top) + ((parseInt(r.style.height) - parseInt(dT.style.height)) / 2);
			dT.style.left = (tempLeft < 0) ? "0px" : Math.min(mi.width - parseInt(dT.style.width), tempLeft) + "px";
			dT.style.top = (tempTop < 0) ? "0px" : Math.min(mi.height - parseInt(dT.style.height), tempTop) + "px";
		}
    }
}

function drawPoint(x, y, w, h, dot)
{
	//Draw a spot, given upper left corner, size and img
    strLine+= "<img style='position:absolute; top:"+ y +"px; left:"+ x +"px; width:"+ w +"px; height:"+ h +"px; z-index:auto' src='"+ dot +"'/>\n";
}

function submitAerial() {
  document.aerial.submit;
  return true;
}
