         var map   = null;
         var mapURL = null;
         var iCallID = 0;
		 var east = 0;
		 var north = 0;
		 var currentZoomLevel = 12;
		 var mapWidth = 600;
		 var mapHeight = 600;
		 var mapTop = 0;
		 var mapLeft = 0;

         var shapeLayer;
         var lineLayer;
         var polyPoints = new Array();
         var down=0;
         var X=0,Y=0;
         var origin;
         var pageGuid;
         var geomRef;

		var browserType;

		if (document.layers) {browserType = "nn4"}
		if (document.all) {browserType = "ie"}
		if (window.navigator.userAgent.toLowerCase().match("gecko"))
		{
			browserType= "gecko"
		}
		

        function setDivStyle()
        {

//		e=document.getElementById("fullPageDiv");
//		e.style.width = '100%';
//		e.style.height = '500%';
//		e.style.top = '0px';
//		e.style.left = '0px';
//		e.style.backgroundColor = '#ffffff';
//		e.style.position = 'absolute';
		
		
		e=document.getElementById("mapContainer");
		e.style.width = mapWidth + 200 + 'px';
		e.style.height = mapHeight + 'px';
		e.style.top = mapTop + 'px';
		e.style.left = mapLeft + 'px';
		e.style.backgroundColor = '#efefef';
		e.style.cursor = 'crosshair';

		e=document.getElementById("dccMap");
		e.style.width = mapWidth + 'px';
		e.style.height = mapHeight + 'px';
		e.style.top = mapTop + 'px';
		e.style.left = mapLeft + 'px';
		e.style.position = 'absolute';
		e.style.cursor = 'crosshair';

		e=document.getElementById("myMap");
		e.style.width = mapWidth + 'px';
		e.style.height = mapHeight + 'px';
		e.style.top = mapTop + 'px';
		e.style.left = mapLeft + 'px';
		e.style.position = 'absolute';
		e.style.cursor = 'crosshair';
		
		e=document.getElementById("controlDiv");
		e.style.width = '196px';
		e.style.height = mapHeight + 'px';
		e.style.top = mapTop + 'px';
		e.style.left = mapWidth + 'px';
		e.style.position = 'absolute';
		e.style.borderLeftStyle = 'double';
		e.style.textAlign = 'left';
		
		var divContent = "<p>To find your site you can use the map's drag and zoom controls and/or use the search box to get to the right area.</p>"
		divContent += "<p>Detailed background maps will load when you have zoomed in to a certain level (the screen will turn grey and there may be a delay before they appear).</p>"
		divContent += "<p style='text-align:center'>"
		divContent += "<input id='txtWhere' type='text' name='txtWhere' />";
		divContent += "<input id='find' type='button' value='Find Location' name='find' onclick='FindLoc();' />";
		divContent += "</p>"
		divContent += "To draw the outline of the site right click on the start point (using the mouse icon's index finger) and move the mouse to the next point. "
		divContent += "Click again to define the next point and continue until you reach the last point. Then left click to close the polygon. "
		divContent += "<p>";
		divContent += "If you make a mistake simply start again by right clicking on the map (your previous polygon will disappear).";
		divContent += "</p>";
		divContent += "<p>";
		divContent += "Clicking on the 'Return Coordinates' button will include the geometry in the form you are submitting.";
		divContent += "</p>";
		divContent += "<p style='text-align:center'>"
		divContent += "<input id='returnCoords' type='button' value='Return Coordinates' name='returnCoords' onclick='updateOpeningWindow();' />";
		divContent += "</p>"
		divContent += "<p style='text-align:center'>"
		divContent += "<br />"
		divContent += "<br />"
		divContent += "Tested in IE7 and Firefox 2.x";
		divContent += "</p>"
		e.innerHTML = divContent;
        }

		function init()
		{
			newGuid();
		}

		function newGuid()
		{
		   {
				var pl = new SOAPClientParameters();
				SOAPClient.invoke("http://www.ambervalley.gov.uk/webservices/MappingFunctions/MappingFunctions.asmx", "NewGuid", pl, true, NewGuid_callback);
		   }
		}

		function NewGuid_callback(result)
		{
			pageGuid = result;
		}

		function SubmitPolgon()
		{
		   var i;
		   for (i=0; i<polyPoints.length; i++)
		   {
				var pl = new SOAPClientParameters();
				pl.add("questionGuid", pageGuid ); // add parameter to web service method
				pl.add("latitude", polyPoints[i].Latitude); // add parameter to web service method
				pl.add("longitude", polyPoints[i].Longitude); // add parameter to web service method
				SOAPClient.invoke("http://www.ambervalley.gov.uk/webservices/MappingFunctions/MappingFunctions.asmx", "VESavePolygonGeometry", pl, true, VESavePolygonGeometry_callback);
		   }
		}

		function VESavePolygonGeometry_callback(result)
		{
			//alert(result);
		}

		function getCoords(latitude, longitude)
		{
			var pl = new SOAPClientParameters();
			pl.add("latitude", latitude ); // add parameter to web service method
			pl.add("longitude", longitude );
			SOAPClient.invoke("http://www.ambervalley.gov.uk/WebServices/MappingFunctions/MappingFunctions.asmx", "convertLLtoEN", pl, true, CoordConverter_callback);
		}

		function CoordConverter_callback(result)
		{
				//alert(result);
				east = result[0];
				north = result[1];
				refreshOSMap();
		}

		function importGeoRSS(minLatLon, maxLatLon)
		{
				var geoRSSURL;
				geoRSSURL = "http://www.ambervalley.gov.uk/utilities/georss/geofeed.aspx"
				geoRSSURL += "?dsName=" + "landcharges";
				geoRSSURL += "&geomRef=" + geomRef;
				geoRSSURL += "&maxLat=" + map.PixelToLatLong(new VEPixel(0,0)).Latitude ;
				geoRSSURL += "&minLon=" + map.PixelToLatLong(new VEPixel(0,0)).Longitude ;
				geoRSSURL += "&minLat=" + map.PixelToLatLong(new VEPixel(mapWidth,mapHeight)).Latitude ;
				geoRSSURL += "&maxLon=" + map.PixelToLatLong(new VEPixel(mapWidth,mapWidth)).Longitude ;
				//document.getElementById("test2").value = geoRSSURL;
				//var minLon = minLatLon.Longitude;
				//alert(geoRSSURL);
				shapeLayer = new VEShapeLayer();
				var veLayerSpec = new VEShapeSourceSpecification(VEDataType.GeoRSS, geoRSSURL, shapeLayer);
				//map.ImportShapeLayerData(veLayerSpec, onFeedLoad, false);
				map.ImportShapeLayerData(veLayerSpec, onFeedLoad, true);
				map.EnableShapeDisplayThreshold(true);


		}

         function raiseP(x,y)
		 { total=1;
		   for (j=0; j<y; j++)
		    { total*=x; }
		   return total; //result of x raised to y power
		}

         function GetMap()
         {
            map = new VEMap('myMap');
            map.LoadMap(new VELatLong(53.02, -1.4));
            map.AttachEvent("onendpan", panEndEvent);
            map.AttachEvent("onendzoom", zoomEndEvent);
            map.SetZoomLevel(currentZoomLevel);

            lineLayer = new VEShapeLayer();
            map.AddShapeLayer(lineLayer);

            map.AttachEvent("onmouseup",MouseUpHandler);
            map.AttachEvent("onmousedown",MouseDownHandler);
            map.AttachEvent("onmousemove",MouseMoveHandler);
            map.AttachEvent("onmouseover",MouseOverHandler);
         }


		function panEndEvent(e)
		{
			if(map.GetZoomLevel() >= 16)
			{
				try
				{
					getEastNorth();
					show('dccMap');
					document.getElementById('myMap').style.filter='alpha(style=0, opacity=50)';
					document.getElementById('myMap').style.opacity=0.5;
					//document.getElementById('myMap').style.-moz-opacity=0.2;

					//document.all.dccMap.style.backgroundImage = "url('b.jpg')";

				}
				catch (err)
				{
				}
			}
			else
			{
				hide('dccMap');
				document.getElementById('myMap').style.filter='alpha(style=0, opacity=100)';
				document.getElementById('myMap').style.opacity=1.0;

			}

			if(map.GetZoomLevel() >= 13)
			{
				//importGeoRSS();
			}
			else
			{
				map.DeleteAllShapeLayers();
			}

		}

		function zoomEndEvent(e)
		{
			if(map.GetZoomLevel() >= 16)
			{
				try
				{
					getEastNorth();
					show('dccMap');
					document.getElementById('myMap').style.filter='alpha(style=0, opacity=50)';
					document.getElementById('myMap').style.opacity=0.5;

					//document.all.dccMap.style.backgroundImage = "url('b.jpg')";
				}
				catch (err)
				{
				}
			}
			else
			{
				hide('dccMap');
				document.getElementById('myMap').style.filter='alpha(style=0, opacity=100)';
				document.getElementById('myMap').style.opacity=1.0;
			}

			//if(map.GetZoomLevel() >= 13)
			if(map.GetZoomLevel() >= 8)
			{
				//importGeoRSS();
			}
			else
			{
				map.DeleteAllShapeLayers();
			}

		}


		function getEastNorth()
		{
			getCoords(map.GetCenter().Latitude, map.GetCenter().Longitude);
		}

		function refreshOSMap()
		{
			//LLtoNE(map.GetCenter().Latitude, map.GetCenter().Longitude);

			//alert(map.GetCenter().Latitude + "-" + map.GetCenter().Longitude);


			mapURL = "http://derbyshiremaps.derbyshire.gov.uk/planaccess/getmapimage.asp?theme=maps";
			mapURL += "&mapwidth=" + mapWidth
			mapURL += "&mapheight=" + mapHeight
			mapURL += "&easting=" + east;
			mapURL += "&northing=" + north
			mapURL += "&zoom=" + (156543.04 * Math.cos(map.GetCenter().Latitude * (Math.PI / 180)) / raiseP(2, map.GetZoomLevel())) * mapWidth;


			//document.all.dccMap.style.backgroundImage = "url('" + mapURL + "')";
			document.getElementById("dccMap").style.backgroundImage = "url('" + mapURL + "')";
			//alert(mapURL);

			//myImage = new Image()
			//myImage.src = mapURL;

		}


         function AddMyLayer(type)
         {
            var l = new VEShapeLayer();
            var veLayerSpec = new VEShapeSourceSpecification(type, txtSource.value, l);
            map.ImportShapeLayerData(veLayerSpec, onFeedLoad, false);
         }

         function onFeedLoad(feed)
         {
            //alert('RSS or Collection loaded. There are ' + feed.GetShapeCount() + ' items in this list.');
         }

         function hide(objectName) {
		   if (browserType == "gecko" )
		      document.poppedLayer =  eval('document.getElementById("dccMap")');
		   else if (browserType == "ie")
		      document.poppedLayer = eval('document.getElementById("dccMap")');
		   else
		      document.poppedLayer = eval('document.layers["dccMap"]');
		   document.poppedLayer.style.display = "none";
		 }

		 function show(objectName) {
		   if (browserType == "gecko" )
		      document.poppedLayer = eval('document.getElementById("dccMap")');
		   else if (browserType == "ie")
		      document.poppedLayer = eval('document.getElementById("dccMap")');
		   else
		      document.poppedLayer = eval('document.layers["dccMap"]');
		   document.poppedLayer.style.display = "block";
		 }


		          //used to load geoRSS data from alternative source
		         function loadLayer()
		         {
		            //load shapelayer
            		shapeLayer = new VEShapeLayer();
            		var veLayerSpec = new VEShapeSourceSpecification(VEDataType.GeoRSS, document.getElementById("RSSSource").value, shapeLayer);
            		map.ImportShapeLayerData(veLayerSpec);
            		map.EnableShapeDisplayThreshold(false);

					//shapeLayer.DeleteAllShapes();
		            //var veLayerSpec = new VEShapeSourceSpecification(VEDataType.GeoRSS, http://www.ambervalley.gov.uk/utilities/georss/feed.aspx", shapeLayer);
		            //map.ImportShapeLayerData(veLayerSpec);
		         }

		         function drawPolygon()
		         {
		             //remove the polygon that is on the map
		             lineLayer.DeleteAllShapes();

		             //draw polyline if there is only two points in the array
		             var polygon;
		             if(polyPoints.length<3)
		             {
		                 polygon = new VEShape(VEShapeType.Polyline, polyPoints);
		             }
		             else
		             {
		                 //create a new polygon
		                 polygon = new VEShape(VEShapeType.Polygon, polyPoints);
		             }

		             polygon.HideIcon();

		             //draw the new polygon on the map
		              lineLayer.AddShape(polygon);
		         }

		         function polygonSearch()
		         {
		             document.getElementById("Results").value = "Found locations\r\n\r\n";

		             var counter=0;

		             //loop through shapes on the shape layer and see if they are within the polygon
		             for(var i=0; i < shapeLayer.GetShapeCount(); i++)
		             {
		                 var shape = shapeLayer.GetShapeByIndex(i);
		                 var latlong = shape.GetPoints()[0];
		                 var lat = latlong.Latitude;
		                 var lon = latlong.Longitude;

		                 if(pointInPolygon(polyPoints,lat,lon))
		                 {
		                     //shape is in the polygon, output useful infromation
		                     //document.getElementById("Results").value += shape.GetTitle()+"\r\n";
		                     counter++
		                 }
		             }

		             document.getElementById("Results").value += "\r\nTotal number of locations found: "+ counter;
		         }


		         function pointInPolygon(points,lat,lon)
		          {
		               var i;
		               var j=points.length-1;
		               var inPoly=false;

		               for (i=0; i<points.length; i++)
		               {
		                 if (points[i].Longitude<lon && points[j].Longitude>=lon ||  points[j].Longitude<lon && points[i].Longitude>=lon)
		                 {
		                       if (points[i].Latitude+(lon-points[i].Longitude)/(points[j].Longitude-points[i].Longitude)*(points[j].Latitude-points[i].Latitude)<lat)
		                       {
		                         inPoly=!inPoly;
		                       }
		                 }
		                 j=i;
		               }

		             return inPoly;
		         }

		           function MouseUpHandler(e)
		         {
		             if (e.leftMouseButton && down==1)
		             {
		                down=0;
		                polyPoints.push(origin);
		                //polygonSearch();
		                 X=0;
		                 Y=0;
		                }
		         }

		         function MouseDownHandler(e)
		         {
		             if (e.rightMouseButton)
		             {
		                X = e.mapX;
		                Y = e.mapY;

		                var point = map.PixelToLatLong(new VEPixel(X,Y));

		                if(down==0)
		                {
		                    //intialize the map and variables.
		                    lineLayer.DeleteAllShapes();
		                    polyPoints = new Array(0);

		                    origin = point;
		                    polyPoints.push(origin);
		                    down=1;
		                   }

		                   //add the new point to the array
		                   polyPoints.push(point);

		                return true;
		                }
		         }

		         function MouseMoveHandler(e)
		         {
		             if (down==1)
		             {
		                var x = e.mapX;
		                var y = e.mapY;

		                var dx = Math.abs(X)-Math.abs(x);
		                var dy = Math.abs(Y)-Math.abs(y);

		                //do not want to redraw polygon unless we move a significant amount
		                if(Math.abs(dx) > 5 || Math.abs(dy) > 5)
		                {
		                        var latlong = map.PixelToLatLong(new VEPixel(x, y));
		                     polyPoints.pop();
		                        polyPoints.push(latlong);

		                        drawPolygon();
		                    }
		                }
		         }

		         function MouseOverHandler(e)
		         {
		             if(down==1)
		             {
		                 //disable popups when drawing polygon to make drawing the polygon easier
		                 return true;
		             }
		         }

		         function test()
		         {
                 }

                function PageLoad()
                {
                    //alert(geomRef);
                    //if(geomRef != null)
                    //{
                        CreateFullPageDiv();
                        setDivStyle();
			init();
                        GetMap();
                        //importGeoRSS();
                    //}
                }

		function GetTiles()
		{
			var bounds = [new VELatLongRectangle(new VELatLong(51.1389429251764, -2.69304611797975),new VELatLong(55.9127470401949, 1.21978018599065))];


			var tileSourceSpec = new VETileSourceSpecification("lidar", "http://www.ambervalley.gov.uk/utilities/maps/Layers/bg/%4.png");
			tileSourceSpec.NumServers = 1;
			//tileSourceSpec.Bounds = bounds;
			tileSourceSpec.MinZoomLevel = 5;
			tileSourceSpec.MaxZoomLevel = 18;
			//tileSourceSpec.Opacity = opacity;
			tileSourceSpec.ZIndex = 100;

			map.AddTileLayer(tileSourceSpec, true);
		}

		function DeleteTileLayer()
		{
			map.DeleteTileLayer("lidar");
		}

		function updateOpeningWindow()
		{
		   var i;
		   var latLons = "";
		   //alert('Polygon to be submitted');

		   for (i=0; i<polyPoints.length; i++)
		   {
	            latLons += ", " + polyPoints[i].Latitude + ", " + polyPoints[i].Longitude
		   }

		    latLons = latLons.substring(2, latLons.length);
			hideDiv();
			updateSource(latLons);
		}


      function FindLoc()
      {
         try
         {
            map.Find(null, document.getElementById("txtWhere").value);
         }
         catch(e)
         {
            alert(e.message);
         }
     }
     
	function hideDiv() {
	  if (browserType == "gecko" )
	     document.poppedLayer = eval('document.getElementById("fullPageDiv")');
	  else if (browserType == "ie")
	     document.poppedLayer = eval('document.getElementById("fullPageDiv")');
	  else
	     document.poppedLayer = eval('document.layers["fullPageDiv"]');
	  
	  document.poppedLayer.style.visibility = "hidden";
	  //document.poppedLayer.style.zIndex="0";
	  document.poppedLayer.style.display = "none";
	  
	  if (browserType == "gecko" )
	     document.poppedLayer = eval('document.getElementById("test")');
	  else if (browserType == "ie")
	     document.poppedLayer = eval('document.getElementById("test")');
	  else
	     document.poppedLayer = eval('document.layers["test"]');
	  
	  //document.poppedLayer.style.top = document.body.scrollHeight - 800 + "px";
	  document.poppedLayer.style.zIndex=100;
	  document.poppedLayer.style.display = "none";
	}
	
	function showDiv() {	  
	  
	  if (browserType == "gecko" )
	     document.poppedLayer = eval('document.getElementById("fullPageDiv")');
	  else if (browserType == "ie")
	     document.poppedLayer = eval('document.getElementById("fullPageDiv")');
	  else
	     document.poppedLayer = eval('document.layers["fullPageDiv"]');
	  
	  setDivStyle();
	  document.poppedLayer.style.top = document.body.scrollHeight - 800 + "px";
	  document.poppedLayer.style.zIndex=1000;
	  document.poppedLayer.style.visibility = "visible";
	  document.poppedLayer.style.display = "block";
	  
	  if (browserType == "gecko" )
	     document.poppedLayer = eval('document.getElementById("test")');
	  else if (browserType == "ie")
	     document.poppedLayer = eval('document.getElementById("test")');
	  else
	     document.poppedLayer = eval('document.layers["test"]');
	  
	  //document.poppedLayer.style.top = document.body.scrollHeight - 800 + "px";
	  document.poppedLayer.style.zIndex=990;
	  document.poppedLayer.style.visibility = "visible";
	  document.poppedLayer.style.display = "block";
	}
	

	function updateSource(theValue) {
	  if (browserType == "gecko" )
	  {
	     //alert('gecko');
	     document.poppedLayer = eval('document.getElementById("MainControl_WebForm_ZoneMain_WebFormDefinitionPlaceholderControl1_PresentationModeControlsContainer_WebForm_Coords_Geometry")');
	  }
	  else if (browserType == "ie")
	  {
	     //alert('ie');
	     document.poppedLayer = eval('document.getElementById("MainControl_WebForm_ZoneMain_WebFormDefinitionPlaceholderControl1_PresentationModeControlsContainer_WebForm_Coords_Geometry")');
	  }
	  else
	  {
	     //alert('other');
	     document.poppedLayer = eval('document.layers["MainControl:WebForm_ZoneMain:WebFormDefinitionPlaceholderControl1:PresentationModeControlsContainer:WebForm:Coords:Geometry"]');
	  }
	  document.poppedLayer.value = theValue;
	}

	function GetControlPos() 
	{
	  if (browserType == "gecko" )
	     document.poppedLayer =
		 eval('document.getElementById("MainControl_WebForm_ZoneMain_WebFormDefinitionPlaceholderControl1_PresentationModeControlsContainer_WebForm_Coords_Geometry")');
	  else if (browserType == "ie")
	     document.poppedLayer =
		eval('document.getElementById("MainControl_WebForm_ZoneMain_WebFormDefinitionPlaceholderControl1_PresentationModeControlsContainer_WebForm_Coords_Geometry")');
	  else
	     document.poppedLayer = eval('document.layers["MainControl:WebForm_ZoneMain:WebFormDefinitionPlaceholderControl1:PresentationModeControlsContainer:WebForm:Coords:Geometry"]');

		var curleft = curtop = 0;
		var obj = document.poppedLayer;
		if (obj.offsetParent)
		{
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
			}
		while (obj = obj.offsetParent);

		return [curleft,curtop];
		}
	}
	
	function CreateFullPageDiv()
	{
		var newdiv = document.createElement('div');
	   	newdiv.setAttribute('id', "test");
	   
	       	newdiv.style.width = '100%';
	      	newdiv.style.height = '500%';
	   
	       	newdiv.style.position = "absolute";
	       
	       	newdiv.style.left = 0;
	        newdiv.style.top = 0;
	        newdiv.style.backgroundColor = '#999999';
		  if (browserType == "gecko" )
		  {
			newdiv.style.opacity = 0.4;	
		  }
		  else if (browserType == "ie")
		  {
		      	newdiv.style.filter = 'alpha(opacity=40)';
		  }

	       	newdiv.style.display = "none";

		document.body.appendChild(newdiv);


	}