	//Reusable functions
	function mhCreateBoundsPoly(map,box)
	{
		var points = [];
		for (var i = 0; i < 5; i++) {
			points.push(new GPoint(box.minX, box.minY));
			points.push(new GPoint(box.maxX, box.minY));
			points.push(new GPoint(box.maxX, box.maxY));
			points.push(new GPoint(box.minX, box.maxY));
			points.push(new GPoint(box.minX, box.minY));
		}
		return new GPolyline(points);
	}


	//parses out coordinates from polygons (TODO no POINT/Line etc support here yet!)	
	function mhGetGBoundsForWKT(wkt)
	{
		var cStart=wkt.lastIndexOf("(")+1;
		var cEnd=wkt.indexOf(")");
		var coords=wkt.substring(cStart, cEnd);
				
//		alert("splitting["+coords+ "]from["+wkt);
		var points=coords.split(",");
		var minLat=9999;
		var maxLat=-9999;
		var minLon=9999;
		var maxLon=-9999;
		for(i=0;i<points.length;i++)
		{		
			var latLon=points[i].split(" ");
			var lat=parseFloat(latLon[0]);
			var lon=parseFloat(latLon[1]);
			minLon=Math.min(lon,minLon);
			minLat=Math.min(lat,minLat);
			maxLon=Math.max(lon,maxLon);
			maxLat=Math.max(lat,maxLat);
		}
		return new GBounds(minLon, minLat,maxLon,maxLat);
	}
	
	//sets position and scale level appropriately so that box is visible on the map
	function mhFocusOnBox(map, box)
	{
		var x=box.minX+((box.maxX-box.minX)/2);
		var y=box.minY+((box.maxY-box.minY)/2);
		var boxCenter=new GPoint(x,y);
//		map.recenterOrPanToLatLng(boxCenter); this is an asynch call so getBounds not updated fast enough
		map.centerAtLatLng(boxCenter);
	
		var viewbox=map.getBoundsLatLng();
		if(!viewbox.containsBounds(box))
		{
			//zoom out to show polygon
			var lastZoomLevel=9999;
			var zoomLevel=map.getZoomLevel();
			while((!viewbox.containsBounds(box))&&(zoomLevel!=lastZoomLevel))
			{
				lastZoomLevel=zoomLevel;
				map.centerAndZoom(boxCenter,zoomLevel+1);
				viewbox=map.getBoundsLatLng();
				zoomLevel=map.getZoomLevel();
			}
		}	
		else
		{
			//TODO Check sufficiently zoomed in for box to be visible -need min 30% of view width
			var bWidth=mhGetBoxWidth(box);
			var bHeight=mhGetBoxHeight(box);
			var vWidth=mhGetBoxWidth(viewbox);
			var vHeight=mhGetBoxHeight(viewbox);
			
			var lastZoomLevel=9999;
			var zoomLevel=map.getZoomLevel();
			while(
				  (	
				  	(bWidth/vWidth<0.3) &&
				  	(bHeight/vHeight<0.3)
				  )			
				&&(zoomLevel!=lastZoomLevel)
				&&(zoomLevel>1)
				)
			{
				lastZoomLevel=zoomLevel;
				map.centerAndZoom(boxCenter,zoomLevel-1);
				viewbox=map.getBoundsLatLng();
				vWidth=mhGetBoxWidth(viewbox);
				vHeight=mhGetBoxHeight(viewbox);
				zoomLevel=map.getZoomLevel();
			}
			
			
			
		}
	}
	

	function mhGetBoxWidth(bounds)
	{
		return bounds.maxX - bounds.minX;
	}
	function mhGetBoxHeight(bounds)
	{
		return bounds.maxY - bounds.minY;	
	}

	
	
