	// Version: 1.07 22/05/08#
	//dwww: ABQIAAAA6f_8TcfJDKoFOmVnMGXTYhT1i5sibzayzkAtLP9Qtm5ktJknXBQfZ4IXXDXxH54s5KkjJHP0TcwiGg
	//edwww: ABQIAAAA6f_8TcfJDKoFOmVnMGXTYhS2yuepiIS5uPik8rCPAIzN9fT1ohR4Np4BTH2o7mnRjeI98CE07PScog
	
	var sitepath = "http://www.cancerresearchuk.org/10k/";
	var errMsgFull = "<p>Sorry, no results were found matching your search, please try again</p>";
    var errMsgInvalid = "<p>Sorry, no results were found matching your search, please try again</p>";
	var localSearch = new GlocalSearch();
	var myXML, myVenues , myGeoUpdateAll;
	var map;
	var gmarkers = [];
	var toDirHtml = [];
	var fromDirHtml = [];
	var venuePostcodes = [];
	var nearbyHtml = [];
	var defHtml = [];
	var venueHtml = [];
	var iCurrentMarker = 0;
	var venueMarkerManager;
	var regionMarkerManager;
	
	function init10kVenueMap(geoLat,geoLng,simpleVenueName,venueName,address,venuePostcode,venueThumb) {
		
		map = new GMap2(document.getElementById("map_canvas"));
		var center = new GLatLng(geoLat,geoLng);
		map.setCenter(center, 13);
		
		var blueIcon = new GIcon(G_DEFAULT_ICON);
        blueIcon.image = sitepath + "images/pf/10k_mapmarkericon.png";
        blueIcon.iconSize = new GSize(35, 35);
        blueIcon.shadow = sitepath + "images/pf/10k_mapmarkericon_shadow.png";
        blueIcon.shadowSize = new GSize(53.0, 35.0);
        blueIcon.imageMap = [0,0, 34,0, 34,34, 0,34];
       
        	
		markerOptions = { icon:blueIcon };

		map.addMapType(G_PHYSICAL_MAP);
		map.setMapType(G_NORMAL_MAP);
		map.addControl(new GSmallMapControl()); 
		map.addControl(new GMapTypeControl()); 
		
		var myVenueUrl ="/10k/choose-your-event/" + simpleVenueName + "/";
		var pt = new GLatLng(geoLat,geoLng);
		var myMarker = new GMarker(pt,markerOptions);
		
		toDirHtml[iCurrentMarker] = "Directions: <b>To here</b> - ";
		toDirHtml[iCurrentMarker] += "<a href=\"javascript:directionsFromHere(" + iCurrentMarker + ")\">From here</a>";
		toDirHtml[iCurrentMarker] += "<br/><a href=\"javascript:searchNearby(" + iCurrentMarker + ")\">Search Nearby</a>";
		toDirHtml[iCurrentMarker] += "<br/><br/>Start address:<form action=\"javascript:getDirections()\">";
		toDirHtml[iCurrentMarker] += "<input type=\"text\" SIZE=40 MAXLENGTH=40 name=\"saddr\" id=\"saddr\" value=\"\" />";
		toDirHtml[iCurrentMarker] += "<br><INPUT value=\"Get Directions\" TYPE=\"SUBMIT\">";
		toDirHtml[iCurrentMarker] += "<input type=\"hidden\" id=\"daddr\" value=\"" + venuePostcode + "\"/>";
		toDirHtml[iCurrentMarker] += "&nbsp;<a href=\"javascript:venueInfoWindow("+iCurrentMarker+")\"><< Back</a>";
		
		fromDirHtml[iCurrentMarker] = "Directions: <a href=\"javascript:directionsToHere(" + iCurrentMarker + ")\">To here</a> - ";
		fromDirHtml[iCurrentMarker] += "<b>From here</b>";
		fromDirHtml[iCurrentMarker] += "<br/><a href=\"javascript:searchNearby(" + iCurrentMarker + ")\">Search Nearby</a>";
		fromDirHtml[iCurrentMarker] += "<br/><br/>End address:<form action=\"javascript:getDirections()\">";
		fromDirHtml[iCurrentMarker] += "<input type=\"text\" SIZE=40 MAXLENGTH=40 name=\"daddr\" id=\"daddr\" value=\"\" />";
		fromDirHtml[iCurrentMarker] += "<br><INPUT value=\"Get Directions\" TYPE=\"SUBMIT\">";
		fromDirHtml[iCurrentMarker] += "<input type=\"hidden\" id=\"saddr\" value=\"" + venuePostcode + "\"/>";
		fromDirHtml[iCurrentMarker] += "&nbsp;<a href=\"javascript:venueInfoWindow("+iCurrentMarker+")\"><< Back</a>";
		
		nearbyHtml[iCurrentMarker] = "Directions: <a href=\"javascript:directionsToHere("+iCurrentMarker+")\">To here</a> - ";
		nearbyHtml[iCurrentMarker] += "<a href=\"javascript:directionsFromHere("+iCurrentMarker+")\">From here</a>";
		nearbyHtml[iCurrentMarker] += "<br/><br/>Search nearby: <br/>";
		nearbyHtml[iCurrentMarker] += "<b><form action=\"javascript:execSearchNearby()\">";
		nearbyHtml[iCurrentMarker] += "<input type=\"text\" SIZE=40 MAXLENGTH=40 name=\"nearby\" id=\"nearby\" value=\"\" />";
		nearbyHtml[iCurrentMarker] += "<br><INPUT value=\"Search\" TYPE=\"SUBMIT\">";
		nearbyHtml[iCurrentMarker] += "<input type=\"hidden\" id=\"nearbypostcode\" value=\"" + venuePostcode + "\"/>";
		nearbyHtml[iCurrentMarker] += "&nbsp;<a href=\"javascript:venueInfoWindow("+iCurrentMarker+")\"><< Back</a>";
		
		var venueHtml = "<table border=\"0\" cellpadding=\"3\"><tr><td><b>" + venueName + "</b><br/>";
		venueHtml += address;
		// venueHtml += "<img src=\"\/10k\/images\/uk10klogo.jpg\" height=\"62px\" width=\"82px\" >";
		venueHtml += "</td><td><img src=\"" + venueThumb + "\"></td></tr></table>";
		
		defHtml[iCurrentMarker] = venueHtml;
		
		venueHtml += "<br>Directions: <a href=\"javascript:directionsToHere("+iCurrentMarker+")\">To here</a> - ";
		venueHtml += "<a href=\"javascript:directionsFromHere("+iCurrentMarker+")\">From here</a><br/>";
		venueHtml += "<a href=\"javascript:searchNearby(" + iCurrentMarker + ")\">Search Nearby</a>";
		
		venueHtml[iCurrentMarker] = venueHtml;
		
		myMarker.value = venueHtml;
		gmarkers[iCurrentMarker] = myMarker;
		
		GEvent.addListener(myMarker,"click", function() {
			map.openInfoWindowHtml(pt,venueHtml);
      	});
		
		
		venueMarkerManager = new GMarkerManager(map, { trackMarkers: true } );
		venueMarkerManager.addMarker(myMarker,5,15);
		venueMarkerManager.refresh();
		
		//map.addOverlay(myMarker);
		
	}

	function init10kRegionMap(xmlUrl) {

		iCurrentMarker = 0; 

		map = new GMap2(document.getElementById("map_canvas"));
		
		if (document.getElementById("pagename").value == "South East England") {
			var center = new GLatLng(51.2894, 0.16479);
			map.setCenter(center, 7);
		}else if (document.getElementById("pagename").value == "Wales") {
			var center = new GLatLng(52.46270,-3.88916);
			map.setCenter(center, 7);
		}else if (document.getElementById("pagename").value == "South West England") {
			var center = new GLatLng(51.02757,-3.37280);
			map.setCenter(center, 7);
		}else if (document.getElementById("pagename").value == "The Midlands") {
			var center = new GLatLng(52.51622,-1.21948);
			map.setCenter(center, 7);
		}else if (document.getElementById("pagename").value == "North England") {
			var center = new GLatLng(54.59116,-2.15332);
			map.setCenter(center, 7);
		}else if (document.getElementById("pagename").value == "Scotland") {
			var center = new GLatLng(56.96893,-4.41650);
			map.setCenter(center, 6);
		}else if (document.getElementById("pagename").value == "Northern Ireland") {
			var center = new GLatLng(54.64205,-6.86645);
			map.setCenter(center, 7);
		}else if (document.getElementById("pagename").value == "East Anglia") {
			var center = new GLatLng(52.54295,0.54931);
			map.setCenter(center, 7);
		}
		
		map.addMapType(G_PHYSICAL_MAP);
		map.setMapType(G_PHYSICAL_MAP);
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		//map.enableScrollWheelZoom();
		
		regionMarkerManager = new GMarkerManager(map, { trackMarkers: true } );
		
		add10kMarkers(xmlUrl);
		
		regionMarkerManager.refresh();
		
		/*GEvent.addListener(map, "moveend", function() {
          var center = map.getCenter();
          document.getElementById("message").innerHTML = "Center: " + center.toString() + " Zooom: " + map.getZoom();
        });
		
		GEvent.addListener(map, "zoomend", function() {
          var center = map.getCenter();
          document.getElementById("message").innerHTML = "Center: " + center.toString() + " Zooom: " + map.getZoom();
        });*/
		
	}

	function getHTTPObject() {
	
		var xmlhttp;
		
	 	if (window.XMLHttpRequest) {
			xmlhttp = new XMLHttpRequest();	
		} else if (window.ActiveXObject) {
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} 
	
	  	return xmlhttp;
	
	}

	var http = getHTTPObject();
	
	function geoRefresh(venuesXml, updateAll) {

		myGeoUpdateAll = updateAll;
		http.open('GET',venuesXml,false);
		http.setRequestHeader('content-type','text/xml');
		http.onreadystatechange = geoRefreshPart2;
		http.send(null);
		
	}
	
	function geoRefreshPart2() {
		
		if (http.readyState == 4) {
			
			document.getElementById('geostart').visible = false;

			myXML = http.responseXML;
			myVenues = myXML.getElementsByTagName("venue");
			
			document.getElementById("geooutput").innerHTML = "<br/>";
				
			for(var counter=1;counter<myVenues.length;counter++) {
			
				var myVenueId = getXmlValue("venueid",counter);
				var myVersion =  getXmlValue("version",counter);
				var myPostcode =  getXmlValue("postcode",counter);
				var myGeoLat = getXmlValue("geolat",counter);
				var myGeoLng = getXmlValue("geolat",counter);
				var myGeoVersion = getXmlValue("geoversion",counter);
				var myVenueUrl = getXmlValue("url",counter);
				
				if (myGeoLat == '' || myGeoLng == '' || myGeoVersion != myVersion) {
					getGeoUpdate(myVenueId,myPostcode,myVenueUrl);	
				}
				
			}
			
			
		}
	}
	
	function add10kMarkers(xmlUrl) {
		
		http.open('GET',xmlUrl,true);
		http.setRequestHeader('content-type','text/xml');
		http.onreadystatechange = add10kMarkers2;
		http.send(null);
		
	}
	
	
	function createMarker(pt,xmlIndex) {
		
		var blueIcon = new GIcon(G_DEFAULT_ICON);
				var blueIcon = new GIcon(G_DEFAULT_ICON);
        blueIcon.image = sitepath + "images/pf/10k_mapmarkericon.png";
        blueIcon.iconSize = new GSize(35, 35);
        
        blueIcon.shadow = sitepath + "images/pf/10k_mapmarkericon_shadow.png";
        blueIcon.shadowSize = new GSize(53.0, 35.0);
        blueIcon.imageMap = [0,0, 34,0, 34,34, 0,34];
        //blueIcon.iconAnchor = new GPoint(17.0, 17.0);

        
		
		markerOptions = { icon:blueIcon };
		
		var ln = "";
		var myAdr = ""
		
		ln = getXmlValue("adr1",xmlIndex);
		
		if (ln != "") { myAdr += ln + "<br/>"; }
		
		ln = getXmlValue("adr2",xmlIndex);
		if (ln != "") { myAdr += ln + "<br/>"; }
		
		ln = getXmlValue("adr3",xmlIndex);
		if (ln != "") { myAdr += ln + "<br/>"; }
		
		ln = getXmlValue("city",xmlIndex);
		if (ln != "") { myAdr += ln + "<br/>"; }
		
		ln = getXmlValue("postcode",xmlIndex);
		if (ln != "") { myAdr += ln + "<br/><br/>"; }
		
		ln = getXmlValue("sdate",xmlIndex);
		if (ln != "") { myAdr += ln + "<br/>"; }
		
		ln = getXmlValue("stime",xmlIndex);
		if (ln != "") { myAdr += ln + "<br/>"; }
		
		var myVenueUrl = getXmlValue("url",xmlIndex);

		var myMarker = new GMarker(pt,markerOptions);
		var venuePostcode = getXmlValue("postcode",xmlIndex);
		
		toDirHtml[iCurrentMarker] = "Directions: <b>To here</b> - ";
		toDirHtml[iCurrentMarker] += "<a href=\"javascript:directionsFromHere(" + iCurrentMarker + ")\">From here</a>";
//		toDirHtml[iCurrentMarker] += "<br/><a href=\"javascript:searchNearby(" + iCurrentMarker + ")\">Search Nearby</a>";
		toDirHtml[iCurrentMarker] += "<br/><br/>Start address:<form action=\"javascript:getDirections()\">";
		toDirHtml[iCurrentMarker] += "<input type=\"text\" SIZE=40 MAXLENGTH=40 name=\"saddr\" id=\"saddr\" value=\"\" />";
		toDirHtml[iCurrentMarker] += "<br><INPUT value=\"Get Directions\" TYPE=\"SUBMIT\">";
		toDirHtml[iCurrentMarker] += "<input type=\"hidden\" id=\"daddr\" value=\"" + venuePostcode + "\"/>";
		toDirHtml[iCurrentMarker] += "&nbsp;<a href=\"javascript:venueInfoWindow("+iCurrentMarker+")\"><< Back</a>";
		
		fromDirHtml[iCurrentMarker] = "Directions: <a href=\"javascript:directionsToHere(" + iCurrentMarker + ")\">To here</a> - ";
		fromDirHtml[iCurrentMarker] += "<b>From here</b>";
//		fromDirHtml[iCurrentMarker] += "<br/><a href=\"javascript:searchNearby(" + iCurrentMarker + ")\">Search Nearby</a>";
		fromDirHtml[iCurrentMarker] += "<br/><br/>End address:<form action=\"javascript:getDirections()\">";
		fromDirHtml[iCurrentMarker] += "<input type=\"text\" SIZE=40 MAXLENGTH=40 name=\"daddr\" id=\"daddr\" value=\"\" />";
		fromDirHtml[iCurrentMarker] += "<br><INPUT value=\"Get Directions\" TYPE=\"SUBMIT\">";
		fromDirHtml[iCurrentMarker] += "<input type=\"hidden\" id=\"saddr\" value=\"" + venuePostcode + "\"/>";
		fromDirHtml[iCurrentMarker] += "&nbsp;<a href=\"javascript:venueInfoWindow("+iCurrentMarker+")\"><< Back</a>";
		
		nearbyHtml[iCurrentMarker] = "Directions: <a href=\"javascript:directionsToHere("+iCurrentMarker+")\">To here</a> - ";
		nearbyHtml[iCurrentMarker] += "<a href=\"javascript:directionsFromHere("+iCurrentMarker+")\">From here</a>";
//		nearbyHtml[iCurrentMarker] += "<br/><br/>Search nearby: <br/>";
//		nearbyHtml[iCurrentMarker] += "<b><form action=\"javascript:execSearchNearby()\">";
//		nearbyHtml[iCurrentMarker] += "<input type=\"text\" SIZE=40 MAXLENGTH=40 name=\"nearby\" id=\"nearby\" value=\"\" />";
//		nearbyHtml[iCurrentMarker] += "<br><INPUT value=\"Search\" TYPE=\"SUBMIT\">";
//		nearbyHtml[iCurrentMarker] += "<input type=\"hidden\" id=\"nearbypostcode\" value=\"" + venuePostcode + "\"/>";
//		nearbyHtml[iCurrentMarker] += "&nbsp;<a href=\"javascript:venueInfoWindow("+iCurrentMarker+")\"><< Back</a>";
		
		var venueUrl = myVenueUrl.substring(0,myVenueUrl.indexOf("?view=geoupdate"));
		var venueHtml = ""
		
		if ( getXmlValue("multivenuename",xmlIndex) != '' ) {
			venueHtml = "<b><A href=\"/10k/choose-your-event/?view=multivenue&multivenuename=";
			venueHtml += getXmlValue("multivenuename",xmlIndex)  + "\">" + getXmlValue("venueid",xmlIndex) + "</a></b><br/>";
		}else{
			venueHtml = "<b><A href=\"" + venueUrl + "\">" + getXmlValue("venueid",xmlIndex) + "</a></b><br/>";
		}
		
	
		venueHtml += "<table border=\"0\"><tr><td>"+myAdr+"</td>";
	 	venueHtml += "<td width=\"100px\" valign=\"top\" align=\"right\"><img src=\""+getXmlValue("thumbnailpath",xmlIndex)+"\" height=\"62\" width=\"82\"></td></tr></table>";
		
		
		if ( getXmlValue("multivenuename",xmlIndex) != '' ) {
			venueHtml += "<b><A href=\"/10k/choose-your-event/?view=multivenue&multivenuename=";
			venueHtml += getXmlValue("multivenuename",xmlIndex)  + "\">Click here for event details</a></b><br/>";
		}else{
				venueHtml += "<br/><a href=\""+ venueUrl+ "\">Click here for event details</a><br/>";
		}
		
	
		defHtml[iCurrentMarker] = venueHtml;
		
		venueHtml += "<br>Directions: <a href=\"javascript:directionsToHere("+iCurrentMarker+")\">To here</a> - ";
		venueHtml += "<a href=\"javascript:directionsFromHere("+iCurrentMarker+")\">From here</a><br/>";
//		venueHtml += "<a href=\"javascript:searchNearby(" + iCurrentMarker + ")\">Search Nearby</a>";
		
		venueHtml[iCurrentMarker] = venueHtml;
		
		myMarker.value = venueHtml;
		gmarkers[iCurrentMarker] = myMarker;
		
		GEvent.addListener(myMarker,"click", function() {
			map.openInfoWindowHtml(pt,venueHtml);
      	});
		
		
		iCurrentMarker++;
		return myMarker;
		
	}
	
	function venueInfoWindow(i) {
		gmarkers[i].openInfoWindowHtml(gmarkers[i].value);	
	}
	
	function directionsToHere(i) {
		gmarkers[i].openInfoWindowHtml(defHtml[i] + "<br/>" + toDirHtml[i]);
	}
	
	function directionsFromHere(i) {
		gmarkers[i].openInfoWindowHtml(defHtml[i] + "<br/>" + fromDirHtml[i]);
	}

	function getDirections(i) {
		var saddr = document.getElementById("saddr").value;
        var daddr = document.getElementById("daddr").value;
		var url = "http://maps.google.com/maps?saddr=" + saddr + "&daddr=" + daddr;
		openWindow(url);
	}
	
	function searchNearby(i) {
		gmarkers[i].openInfoWindowHtml(defHtml[i] + "<br/>" + nearbyHtml[i]);
	}
	
	function execSearchNearby() {
		var nearby = document.getElementById("nearby").value;
		var nearbypostcode = document.getElementById("nearbypostcode").value;
		var url = "http://www.google.com/maps?near=" + nearbypostcode + "&geocode=&q=" + nearby; //+ "&f=l&ie=UTF8&t=p&z=14";
		openWindow(url);
	}
	
	function openWindow(url) {
		window.open(url,'','scrollbars=yes,menubar=yes,height=600,width=800,resizable=yes,toolbar=yes,location=yes,status=yes');
	}

	function add10kMarkers2() {
		
		if (http.readyState == 4 || http.readyState == 200 ) {
			
			//alert(http.responseXML);
			myXML = http.responseXML;
			myVenues = myXML.getElementsByTagName("venue");
				
			for(var counter=0;counter<myVenues.length;counter++) {
			
				var myGeoLat = getXmlValue("geolat",counter);
				var myGeoLng = getXmlValue("geolng",counter);
		
				if (myGeoLat != null && myGeoLng != null) {
					var marker = createMarker(new GLatLng(myGeoLat,myGeoLng),counter);
					regionMarkerManager.addMarker(marker,5,15);
					//map.addOverlay(marker);
				}
				
			}
			
		}
		
	}
	
	function getGeoUpdate(venueId,postcode,venueUrl) {
		
		var instLocalSearch = new GlocalSearch();
	
		instLocalSearch.setSearchCompleteCallback(null, function() {
				
			if (instLocalSearch.results[0]) {		
				var resultLat = instLocalSearch.results[0].lat;
				var resultLng = instLocalSearch.results[0].lng;
				sendGeoUpdate(resultLat,resultLng,venueId,venueUrl);
			}else{
				return false;
			}
	
		});	
			
		instLocalSearch.execute(postcode + ", UK");
		
	}
	
	function sendGeoUpdate(geoLat,geoLng,venueId,venueUrl) {
		
		var http = getHTTPObject(); 
		http.open('POST',venueUrl,true);
		http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		http.send("geolat=" + geoLat + "&geolng=" + geoLng);
		
		document.getElementById("geooutput").innerHTML += "Update issued for " + venueId + "<br/>";
		
	}


	function getXmlValue(fieldName,indx) {

		try {
	
			var myVal = myVenues[indx].getElementsByTagName(fieldName)[0].firstChild.nodeValue;
				
			if (myVal != "") {
				return myVal;
			}else{
				return "";
			}
	
		} catch(e) {
			return "";
		}
	
	}

	function hasNumbers(t) {
		return /\d/.test(t);
	}

	function getPointFromPostcode(postcode) {
		
		var instLocalSearch = new GlocalSearch();
	
		instLocalSearch.setSearchCompleteCallback(null, function() {
				
			if (instLocalSearch.results[0]) {		
				var resultLat = instLocalSearch.results[0].lat;
				var resultLng = instLocalSearch.results[0].lng;
				var point = new GLatLng(resultLat,resultLng);
				sendPoint(point);
			}else{
				document.getElementById("errmsg").innerHTML = errMsgInvalid;
				return false;
			}
	
		});	
			
		instLocalSearch.execute(postcode + ", UK");
	
	}
	
	function sendPoint(point) {
	
		if (point != null) {
			document.getElementById("ptX").value = point.x; //Longitude: Points on the X axis
			document.getElementById("ptY").value = point.y; //Latitude: Points on the Y axis
			if (point.x == 0 && point.y == 0) { 
				document.getElementById("errmsg").innerHTML = errMsgInvalid;
				return false;
			}else{
				document.venueFind.action = '/10k/choose-your-event/?view=Search results';
				document.venueFind.submit();
			}
		}else{
			document.getElementById("errmsg").innerHTML = errMsgInvalid;
            return false;
		}
		
	}
	
	function goPostcode() {
            	
		if (document.getElementById("postcode").value == null) {
            document.getElementById("errmsg").innerHTML = errMsgFull;
            return false;
        }else if (document.getElementById("postcode").value == "") {
            document.getElementById("errmsg").innerHTML = errMsgFull;
            return false;
        }else if (hasNumbers(document.getElementById("postcode").value) == false) {
            document.getElementById("errmsg").innerHTML = errMsgFull;
            return false;
        }else{
            	
            var trimmedPostCode = document.getElementById("postcode").value.replace(/^\s+|\s+$/g, '');
            	  	
            if (trimmedPostCode == "") {
            	document.getElementById("errmsg").innerHTML = errMsgFull;
            	return false;
            }else{
            	getPointFromPostcode(document.getElementById("postcode").value);
            }
            		
        }
            	
                return false;
     }
	 

	 /* This is the end of Google Maps Js File */

