﻿		var objMap;
		var iconDir;
		var iconTrail;
		var iconPOI;
		var aryMarkers = [];
		var objBounds = null;
		var objDiv;
		var objCenter;
		var intMapZoom;
		var objOpenBubble;
		var strMaxHTML;
		var blnOpenBubble = false;
		var objBubble;
		var objStem;
		var blnMaxBubble = false;
		var strIMG = "/images/googlemaps/";
		var strDIR = "/images/googlemaps/lightbluenumbered/";
		var strPOI = "/images/googlemaps/poi/";
		var objBubbleMarker;
		var strBubbleHTML;

		var strStart = '<table border="0" cellpadding="0" cellspacing="0">';
		
		var strMaxStart = '<table width="676" border="0" cellpadding="0" cellspacing="0">';
		
		var strCloseButton = '<a href="javascript:void(0)" onclick="HideBubble();">' +
			'<img src="close.gif" width="12" height="12" alt="Close window" title="Close window"></a>';

		var strCloseMaxButton = '<a href="javascript:void(0)" onclick="MinBubble();">' +
			'<img src="close.gif" width="12" height="12" alt="Close window" title="Close window"></a>';
		
		var strMaxButton = '<a href="javascript:void(0)" onclick="MaxBubble();">' +
			'<img src="plus.gif" width="12" height="12" alt="More information" title="More information"></a>';
			
		var strMoreInfo = '<a href="javascript:void(0)" onclick="MaxBubble();">More&nbsp;information</a>';
		
		// var strCloseMax = '<a href="javascript:void(0)" onclick="HideBubble();">Return to map</a>';
		var strCloseMax = '<a href="javascript:void(0)" onclick="MinBubble();">Return to map</a>';

		objBubble = document.getElementById("bubble");
		objStem = document.getElementById("stem");
        objMap = document.getElementById("map");
		function HideBubble() {
			blnOpenBubble = false;
			objOpenBubble = null;
			blnMaxBubble = false;
			with (objBubble) {
				style.visibility = "hidden";
				style.width = "";
				style.height = "";
			}
			objStem.style.visibility = "hidden";
		}		
		
//		function LoadGoogleMaps() {
//			objDiv = document.getElementById("googlemapsdiv");
//			if (GBrowserIsCompatible()) {
//				// show map navigation links
//				objDiv.style.height = "450px";
//				objDiv.style.border = "1px solid #000000";
//				objDiv.innerHTML = "&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;Loading map...";
//				setTimeout("GenerateMap()",20);
//			} else {
//				hideLoad();
//				objDiv.style.height = "";
//				objDiv.style.display = "block";
//				objDiv.innerHTML = 'Your browser is not compatible with Google Maps, ' +
//				'unable view the interactive Car Parks map.<br><br>' +
//				'For more information please see the <a href="http://local.google.co.uk/support/bin/answer.py?answer=16532&topic=1499" title="Google Maps help">' +
//				'Google Maps help pages.</a><br>&nbsp;<br>' +
//				'View the <a href="http://www.stroud.gov.uk/docs/faq.asp?faqid=733" title="View current charges">current charges for Pay & Display carparks.</a>';
//			}
//		}

				
		function MinBubble() {
			HideBubble();
			//ShowBubble(objBubbleMarker, strBubbleHTML, false);
		}
		
		
		function MoveBubble() {
			if ((blnOpenBubble) && (! blnMaxBubble)) {
				ShowBubble(objOpenBubble,"", true);
			}
		}
		
		function ShowBubble(objBMarker, strBHTML, blnMove) {
			if (strBHTML != undefined) {
				var objMPoint = objBMarker.getPoint();
				objBubble = document.getElementById("bubble");
				objStem = document.getElementById("stem");
				objMap = map;
				objDiv = document.getElementById("map");
				if (! blnMove) {
					objBubble.innerHTML = strBHTML;
				}
	
				var objPixel = objMap.fromLatLngToDivPixel(objMPoint);
			
				// map world relative to map container
				var dragObject = objMap.getPane(G_MAP_MAP_PANE).parentNode;
				var x = objPixel.x + parseInt(dragObject.style.left);
				var y = objPixel.y + parseInt(dragObject.style.top);
				
								
	
				// map container relative to the page
				x += objMap.getContainer().offsetLeft;
				y += objMap.getContainer().offsetTop;
	
				var vx = objBMarker.getIcon().iconAnchor.x - objBMarker.getIcon().infoWindowAnchor.x;
				var vy = objBMarker.getIcon().iconAnchor.y - objBMarker.getIcon().infoWindowAnchor.y;
				var offset = new GPoint(vx,vy)
	
				y -= offset.y;
				x -= offset.x;
	
				x = parseInt(x);
				y = parseInt(y);
	
				var h = objBubble.offsetHeight;
				var w = objBubble.offsetWidth;
	
				if (! blnMove) {
					objBubble.style.left = x + "px";
					objBubble.style.top = ((y - h) - 23) + "px";
	
					objStem.style.left = x + "px";
					objStem.style.top = (y - 24) + "px";
	
					objBubble.style.visibility = "visible";
					objStem.style.visibility = "visible";
					blnOpenBubble = true;
					objOpenBubble = objBMarker;
					
				} else {
				
					if ((y < objDiv.offsetTop) || (x < objDiv.offsetLeft) || (y > (objDiv.offsetTop + objDiv.offsetHeight)) || 
					(x > (objDiv.offsetLeft + objDiv.offsetWidth))) {
	
	/*				if ((y < objDiv.offsetTop) || (((x + w) < objDiv.offsetLeft)) || ((y - h - 24) > (objDiv.offsetTop + objDiv.offsetHeight)) || 
					(x > (objDiv.offsetLeft + objDiv.offsetWidth))) { */
	
						objBubble.style.visibility = "hidden";
						objStem.style.visibility = "hidden";
						
					} else {
					
						objBubble.style.left = x + "px";
						objBubble.style.top = ((y - h) - 23) + "px";
	
						objStem.style.left = x + "px";
						objStem.style.top = (y - 24) + "px";
	
						objBubble.style.visibility = "visible";
						objStem.style.visibility = "visible";
					}
				}
			}
		}


		
		
		function RemoveOverlays() {
			document.getElementById("infodiv").innerHTML = "";
			objMap.clearOverlays();
		}
		
		
		
		// A function to hide the loading message
		function hideLoad() {
			intMoveCount = 0;
			var loaddiv = document.getElementById("loaddiv");
			if (loaddiv === null) {
				return;
			}
			//div found
			loaddiv.style.visibility="hidden";
			return;
		}

		// A function to show the loading message
		function showLoad(divmsg) {
			var loaddiv = document.getElementById("loaddiv");
			if (loaddiv === null) {
				return;
			}
			//div found
			loaddiv.innerHTML = divmsg + '<br /><br /><img src="loader.gif" width="110" height="12" border="0">';
			loaddiv.style.visibility="visible";
			return;
		}

		if (document.namespaces) { // only exists in IE, only needed in IE
			document.namespaces.add("v", "urn:schemas-microsoft-com:vml");
		}

		function UnloadGoogleMaps() {
			objMap = null;
			iconDir = null;
			iconTrail = null;
			iconPOI = null;
			aryMarkers = null;
			objBounds = null;
			objDiv = null;
			objCenter = null;
			objOpenBubble = null;
			objBubble = null;
			objStem = null;
			GUnload();
		}

		//window.onload = LoadGoogleMaps;
		window.onunload = UnloadGoogleMaps;
		
		
		
		
		function LoadPortsMap()
            {
                map = new GMap2(document.getElementById("map"));
                map.addControl(new GLargeMapControl());
                map.addControl(new GMapTypeControl());
                map.setCenter(new GLatLng(40.818246, -1.079149), 1);
                map.getPane(G_MAP_FLOAT_SHADOW_PANE).style.visibility = "hidden";  
                
                                			GEvent.addListener(map, "move", function() {
				MoveBubble();
			});
                
                		
                GEvent.addListener(map, "click", function(marker, point){
	                if (! marker) {
		                HideBubble();
	                }
                });        
            }
       
       
       
       
       
    function findAddress(address)
    {
        /* geocoder.getLatLng(address, 
            function(point)
            {
                if (!point) 
                    alert('Location not found');
                else
                {
                    map.setCenter(point,13);
                    document.getElementById('txtFindMapAddress').value = 'enter place, country';
                }
            }); */            
            
            geocoder.reset();
            geocoder.getLocations(address, GeoCodeResult); 
    }
	
	function findAddress2(address)
    {
           geocoder.reset();
           geocoder.getLocations(address, GeoCodeResult2);                                    
    }
    
    function geoAddressSet(i)
    {
    
        var place = addresses.Placemark[i];
        var point = new GLatLng(place.Point.coordinates[1],  place.Point.coordinates[0]);
                         
        map.setCenter(point,7);    
    
        var mapList = document.getElementById("divAddressSelector");
        mapList.className = 'mapAddressSelectorHide';
    }
    
    
    function GeoCodeResult(response)
    {
    
        if (!response || response.Status.code != 200) {
            alert('No matching address was found');
            return;
        }
       
        addresses = response;
        if (response.Placemark.length > 1)
        {        
            var mapList = document.getElementById("divAddressSelector");
            var html = "<br>More than one matching address found.<br/>Please select from the list below:<br/><br/>";
            
            for(i=0;i<response.Placemark.length; i++)
            {
                var place = response.Placemark[i];
                var point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
                            
                html += "<a href='javascript:geoAddressSet(" + i + ");' class='blue9pt'>" + place.address + "</a><br>"                                
           }            
            mapList.innerHTML = html;
            mapList.className = 'mapAddressSelector';
        }
        else
        {     
			document.getElementById("divAddressSelector").innerHTML = "";
            var place = response.Placemark[0];
            var point = new GLatLng(place.Point.coordinates[1],  place.Point.coordinates[0]);                            
            map.setCenter(point,7);             
        }    
    }
    
	
	function GeoCodeResult2(response)
    {    
        if (!response || response.Status.code != 200) {
            return "";
        }
       
        addresses = response;
                        
        var place = response.Placemark[0];
        var point = new GLatLng(place.Point.coordinates[1],  place.Point.coordinates[0]);
                            
        return point;
    }
    
