KGRKJGETMRETU895U-589TY5MIGM5JGB5SDFESFREWTGR54TY
Server : Apache/2.4.62
System : FreeBSD fbsdweb2.web.rcn.net 14.1-RELEASE FreeBSD 14.1-RELEASE releng/14.1-n267679-10e31f0946d8 GENERIC amd64
User : www ( 80)
PHP Version : 8.3.8
Disable Function : NONE
Directory :  /domains/gwsolutions/js/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /domains/gwsolutions/js/pubcrawl3-noclusters.js
var gmarkers = [];
var bounds = new google.maps.LatLngBounds();
var infowindow = "";
var map;
var borderColor = "Black";
var captionColor = "White";
var titleName = "Street Name";
var isiPhone = (navigator.userAgent.toLowerCase().indexOf("iphone") > -1);
var ua = navigator.userAgent.toLowerCase();
var isAndroid = ua.indexOf("android") > -1;
var ACTUAL_PERCENTAGES = true;

var mapCenter = new google.maps.LatLng(51.519394, -0.122388);
//var mobileCenterOld = new google.maps.LatLng(51.505394, -0.122388);
var mobileCenter = new google.maps.LatLng(51.505394, -0.122388);
var lastValidCenter = mapCenter;
var initialZoom = 14;
var mobileZoom = 11;
var iPhoneZoom = 12;

function handleTile(title) {
	for (var i = 0; i < gmarkers.length; i++) {
		if (gmarkers[i].title == title) {
			
			map.setZoom(14);
			google.maps.event.trigger(gmarkers[i],'click');
			
			return;
		}
	}
	alert('No data was gathered for the "' + title + '" tile');
}

function buildCluster() {
	

	var styles = [{
					url: 'pins/pub-cluster-80.png',
					width: 80,
					height: 72,
					anchor: [0, 0],
					textColor: '#ffffff',
					textSize: 15
				  }
		  ];
	
	
	markerCluster = new MarkerClusterer(map, gmarkers, {
				averageCenter: true,
				minimumClusterSize: 2,
				gridSize : 25,
				styles: styles,
				maxZoom: 18

	});
}

function addPin(data) {

	if (isMobile())
		icon = getBeerPin();
	else
		icon = getPin(data.pin,true);

	var myLatlng = new google.maps.LatLng(data.latitude, data.longitude);
	
	bounds.extend(myLatlng);

	var marker = new google.maps.Marker({
			position : myLatlng,
			map : map,
			icon : icon,
			title : data.title
		});

	/*google.maps.event.addListener(marker,'mouseover',function() {
		hookOver(map,marker,data);
	});*/
	
	google.maps.event.addListener(marker,'click',function() {
		hookOver(map,marker,data);
	});
		
	/*google.maps.event.addListener(marker, 'click', function () {
		hookBalloon(map, marker, data);
	});
	*/
	gmarkers.push(marker);
	return marker;
}

var voiceOnly = false;

String.prototype.replaceAll = function (find,replace) {
	var str = this;
	return str.replace(new RegExp(find,'g'), replace);
}

function loadSteetView(obj)
{
	return;
	var position = new google.maps.LatLng(obj.latitude,obj.longitude);
	var heading = 34;
	if (obj.heading) heading = obj.heading;


	var panoramaOptions = {
	  position: position,
	  pov: {
		heading: heading,
		pitch: 0
	  }
	};
	
	/*var div = document.createElement('div');
	document.body.appendChild(div);
	div.id = 'Street_' + obj.title.replaceAll(' ','');
	div.className = 'steet-view';
	div.width = '400px';
	div.height = '200px';
	alert(div.id);*/
	
	
	var panorama = new  google.maps.StreetViewPanorama(document.getElementById('street-view'), panoramaOptions);
	map.setStreetView(panorama);
	$("#street-view").show();
	//return div;
}

var currentMarker = null;
var currentData = null;

function hookOver(map,marker,jData) {		
	
	

	if (infowindow != "")
		infowindow.close();
	var borderColor = "#4066AD"; 	//jData.color;
	var captionColor = "#ffffff";
	var titleName = jData.title;
	var photo = (jData.photo != '' ? jData.photo : 'cheese.jpg');
	var disableAutoPan = false;			// changed from true to false per Matt mentioning the cards don't always fit on screen
										// also removed the line below
		
	//if (jData.title == 'The Rocket' || isiPhone || isAndroid) disableAutoPan = false;
	
	// rounded corners frmoved from the TD per Matt:  -webkit-border-radius:4px; -moz-border-radius:4px; border-radius:4px;
	
	var simplePopup = '<div class="PPwrapper-NW"><div class="PPheaderframe"' +
		'style="background-color: ' + borderColor + ' !important;" ><h1 style="color: ' +
		captionColor + '">' + titleName + '</h1></div>' +
		'<div class="PPinner-wrapper-NW"><img style="padding-top: 5px;" src="http://88d7ba627ed950559363-30e28468b1509b2df5dcc8eb3b617e7c.r8.cf2.rackcdn.com/london/photos/' + photo + '\" width="100%" />' +
		'' +
		//'<input type="button" value="See Results" onclick="hookPopup()" />' +
		'<table cellspacing="0" cellpadding="0" style="padding-top: 8px; padding-bottom: 5px; width: 100%">' +
		'<tr>' +
        '                          <td align="center" height="32"' +
		'bgcolor="#4066AD" style="color: #ffffff; display: block;  border:1px solid navy;"><a href="#" onclick="javascript:hookPopup(); return false;" style="font-size:15px; font-weight:' +
		'bold;  text-decoration: none; line-height:32px; width:100%; display:inline-block"><div   style="color:' +
		'#ffffff; padding:0px 10px 0px 20px">SEE THE RESULTS</div></a></td>' +
        '                        </tr>' +
        '                      </table>' +
		'</div></div>';
		
	infowindow = new InfoBubble({
			map : map,
			content : simplePopup,
			shadowStyle : 1,
			padding : 0,
			backgroundColor : 'rgb(255,255,255)',
			borderRadius : 0,
			arrowSize : 10,
			borderWidth : 4,
			borderColor : borderColor,
			disableAutoPan : disableAutoPan,
			hideCloseButton : false,
			arrowPosition : 50,
			backgroundClassName : 'popbubble',
			arrowStyle : 0,
			
		});
	infowindow.setBubbleOffset(0,99);
	infowindow.open(map, marker);
	currentMarker = marker;
	currentData = jData;
		
}

function hookPopup() {
	hookBalloon(map,currentMarker,currentData);
}

function hookBalloon(map, marker, jData) {

	if (infowindow != "")
		infowindow.close();
	
	var disableAutoPan = false;			// changed from true to false per Matt mentioning the cards don't always fit on screen
										// also removed the line below
	//if (jData.title == 'The Rocket' || isiPhone || isAndroid) disableAutoPan = false;
	
	var borderColor = "#4066AD"; 	//jData.color;
	captionColor = "#ffffff";
	titleName = jData.title;

	//if (jData.color == '#E9E73B' || jData.color == 'White' || jData.color == '#FFFFFF' || jData.color == '#EB9C22' || jData.color == '#95D2F3')
	//	captionColor = "#000000";

	var photo = (jData.photo != '' ? jData.photo : 'cheese.jpg');
		
	var isiPhone = navigator.userAgent.match(/iPhone/i) != "";
	loadSteetView(jData);
	var packetResults = 
				"<div class=\"tabs-2\" style=\"display:none;\">" +
					"<div class=\"PPclearfix\">" +
						"<div class=\"PPmetric\"><h2>3G DOWNLOAD</h2>" +
							"<div class=\"PPhalfL PPclearfix\">" + generateGraphic2(jData['3_3g_dl_pct'],jData['3_3g_dl'],' Mbps','3') + "</div>" + 
							"<div class=\"PPhalfR\">" + generateGraphic2(jData['ee_3g_dl_pct'],jData['ee_3g_dl'],' Mbps','EE') + "</div>" +
							"<div class=\"PPhalfL PPclearfix\">" + generateGraphic2(jData['o2_3g_dl_pct'],jData['o2_3g_dl'],' Mbps','O2') + "</div>" + 
							"<div class=\"PPhalfR\">" + generateGraphic2(jData['vodafone_3g_dl_pct'],jData['vodafone_3g_dl'],' Mbps','Vodafone') + "</div>" + 
						"</div>" +
						"<div class=\"PPdividerline PPclearfix\"></div>" +
					"</div>" +
					"<div class=\"PPclearfix\">" + 
						"<div class=\"PPmetric\"><h2>3G UPLOAD</h2>" +
							"<div class=\"PPhalfL\"><div class=\"PPclearfix \"></div>" + generateGraphic2(jData['3_3g_ul_pct'],jData['3_3g_ul'],' Mbps','3') + "</div>" + 
							"<div class=\"PPhalfR\">" + generateGraphic2(jData['ee_3g_ul_pct'],jData['ee_3g_ul'],' Mbps','EE') + "</div>" +
							"<div class=\"PPhalfL\"><div class=\"PPclearfix \"></div>" + generateGraphic2(jData['o2_3g_ul_pct'],jData['o2_3g_ul'],' Mbps','O2') + "</div>" + 
							"<div class=\"PPhalfR\">" + generateGraphic2(jData['vodafone_3g_ul_pct'],jData['vodafone_3g_ul'],' Mbps','Vodafone') + "</div>" + 
						"</div>" +
						"<div class=\"PPdividerline PPclearfix\"></div>" +
					"</div>" +
					"<div class=\"PPclearfix\">" + 
						"<div class=\"PPmetric\"><h2>3G TASK SUCCESS RATE</h2>" +
							"<div class=\"PPhalfL\"><div class=\"PPclearfix \"></div>" + generateGraphic2(jData['3_3g_tsr_pct'],jData['3_3g_tsr'],' %','3') + "</div>" + 
							"<div class=\"PPhalfR\">" + generateGraphic2(jData['ee_3g_tsr_pct'],jData['ee_3g_tsr'],' %','EE') + "</div>" +
							"<div class=\"PPhalfL\"><div class=\"PPclearfix \"></div>" + generateGraphic2(jData['o2_3g_tsr_pct'],jData['o2_3g_tsr'],' %','O2') + "</div>" + 
							"<div class=\"PPhalfR\">" + generateGraphic2(jData['vodafone_3g_tsr_pct'],jData['vodafone_3g_tsr'],' %','Vodafone') + "</div>" + 
						"</div>" +
					"</div>" +
				"</div>" +
				"<div class=\"tabs-3\" style=\"display:none;\">" +
					"<div class=\"PPclearfix\">" +
						"<div class=\"PPmetric\"><h2>4G DOWNLOAD</h2>" +
							"<div class=\"PPhalfL PPclearfix\">" + generateGraphic2(jData['3_4g_dl_pct'],jData['3_4g_dl'],' Mbps','3') + "</div>" + 
							"<div class=\"PPhalfR\">" + generateGraphic2(jData['ee_4g_dl_pct'],jData['ee_4g_dl'],' Mbps','EE') + "</div>" +
							"<div class=\"PPhalfL PPclearfix\">" + generateGraphic2(jData['o2_4g_dl_pct'],jData['o2_4g_dl'],' Mbps','O2') + "</div>" + 
							"<div class=\"PPhalfR\">" + generateGraphic2(jData['vodafone_4g_dl_pct'],jData['vodafone_4g_dl'],' Mbps','Vodafone') + "</div>" + 
						"</div>" +
						"<div class=\"PPdividerline PPclearfix\"></div>" +
					"</div>" +
					"<div class=\"PPclearfix\">" + 
						"<div class=\"PPmetric\"><h2>4G UPLOAD</h2>" +
							"<div class=\"PPhalfL\"><div class=\"PPclearfix \"></div>" + generateGraphic2(jData['3_4g_ul_pct'],jData['3_4g_ul'],' Mbps','3') + "</div>" + 
							"<div class=\"PPhalfR\">" + generateGraphic2(jData['ee_4g_ul_pct'],jData['ee_4g_ul'],' Mbps','EE') + "</div>" +
							"<div class=\"PPhalfL\"><div class=\"PPclearfix \"></div>" + generateGraphic2(jData['o2_4g_ul_pct'],jData['o2_4g_ul'],' Mbps','O2') + "</div>" + 
							"<div class=\"PPhalfR\">" + generateGraphic2(jData['vodafone_4g_ul_pct'],jData['vodafone_4g_ul'],' Mbps','Vodafone') + "</div>" + 
						"</div>" +
						"<div class=\"PPdividerline PPclearfix\"></div>" +
					"</div>" +
					"<div class=\"PPclearfix\">" + 
						"<div class=\"PPmetric\"><h2>4G TASK SUCCESS RATE</h2>" +
							"<div class=\"PPhalfL\"><div class=\"PPclearfix \"></div>" + generateGraphic2(jData['3_4g_tsr_pct'],jData['3_4g_tsr'],' %','3') + "</div>" + 
							"<div class=\"PPhalfR\">" + generateGraphic2(jData['ee_4g_tsr_pct'],jData['ee_4g_tsr'],' %','EE') + "</div>" +
							"<div class=\"PPhalfL\"><div class=\"PPclearfix \"></div>" + generateGraphic2(jData['o2_4g_tsr_pct'],jData['o2_4g_tsr'],' %','O2') + "</div>" + 
							"<div class=\"PPhalfR\">" + generateGraphic2(jData['vodafone_4g_tsr_pct'],jData['vodafone_4g_tsr'],' %','Vodafone') + "</div>" + 
						"</div>" +
					"</div>" +
				"</div>";
			
	
	var voicePacketTabs = "<br /><div class=\"PPtabs\"><ul>" +
			"<li onclick=\"javascript:switchTab(1); return false;\" class=\"selected\"><a class=\"tab-1\" href=\"#tabs-1\" >VOICE</a></li>" +
			"<li onclick=\"javascript:switchTab(2); return false;\"><a class=\"tab-2\" href=\"#tabs-2\">3G DATA</a></li>" +
			"<li onclick=\"javascript:switchTab(3); return false;\" class=\"PPlasttab\"><a class=\"tab-3\" href=\"#tabs-3\">4G DATA</a></li></ul>" +
			//"<li onclick=\"javascript:switchTab(3); return false;\" style=\"width: 90px !important; margin-right:0px !important\"><a class=\"tab-3\" href=\"#tabs-3\">4G DATA</a></li></ul>" +
		"</div>";		// end of tabs
	
	contentString = '<div class="PPwrapper-NW"><div class="PPheaderframe"' +
		'style="background-color: ' + borderColor + ' !important;" ><h1 style="color: ' +
		captionColor + '">' + titleName + '</h1>' +
		//'<img src="photos/' + photo + '\" width="100%" />' +
		'</div>' +
		'<div class="PPinner-wrapper-NW"><div class=\"PPbodyframe\">' +
		'<div class=\"PPclearfix\">' + 
		(voiceOnly ? '' : voicePacketTabs) + 
		"<div class=\"PPborder\">" +
			"<div class=\"tabs-1\">" +
				"<div class=\"PPclearfix\"><div class=\"PPmetric\"><h2>SUCCESSFUL CALL SETUP</h2>" +
				"<div class=\"PPhalfL\">" +
				"<div class=\"PPclearfix \"></div>" + generateGraphic2(jData['3_accessibility_pct'],jData['3_accessibility'],' %','3') + 
				"</div><div class=\"PPhalfR\">" +
				"" + generateGraphic2(jData['ee_accessibility_pct'],jData['ee_accessibility'],' %','EE') + 
				"</div><div class=\"PPhalfL\">" +
				"<div class=\"PPclearfix \"></div>" + generateGraphic2(jData['o2_accessibility_pct'],jData['o2_accessibility'],' %','O2') + 
				"</div><div class=\"PPhalfR\">" +
				"" + generateGraphic2(jData['vodafone_accessibility_pct'],jData['vodafone_accessibility'],' %','Vodafone') + 
				"</div>" + 
				"</div><div class=\"PPdividerline PPclearfix\"></div></div>" +
				"<div class=\"PPclearfix\"><div class=\"PPmetric\"><h2>SUCCESSFUL CALL COMPLETION</h2>" +
				"<div class=\"PPhalfL\">" +
				"<div class=\"PPclearfix \"></div>" + generateGraphic2(jData['3_retainability_pct'],jData['3_retainability'],' %','3') + 
				"</div><div class=\"PPhalfR\">" +
				"" + generateGraphic2(jData['ee_retainability_pct'],jData['ee_retainability'],' %','EE') + 
				"</div><div class=\"PPhalfL\">" +
				"<div class=\"PPclearfix \"></div>" + generateGraphic2(jData['o2_retainability_pct'],jData['o2_retainability'],' %','O2') + 
				"</div><div class=\"PPhalfR\">" +
				"" + generateGraphic2(jData['vodafone_retainability_pct'],jData['vodafone_retainability'],' %','Vodafone') + 
				"</div>" + 
				"</div><div class=\"PPdividerline PPclearfix\"></div></div>" +
				"<div class=\"PPclearfix\"><div class=\"PPmetric\"><h2>VOICE QUALITY</h2>" +
				"<div class=\"PPhalfL\">" +
				"<div class=\"PPclearfix \"></div>" + generateGraphic2(jData['3_quality_pct'],jData['3_quality'],' %','3') + 
				"</div><div class=\"PPhalfR\">" +
				"" + generateGraphic2(jData['ee_quality_pct'],jData['ee_quality'],' %','EE') + 
				"</div><div class=\"PPhalfL\">" +
				"<div class=\"PPclearfix \"></div>" + generateGraphic2(jData['o2_quality_pct'],jData['o2_quality'],' %','O2') + 
				"</div><div class=\"PPhalfR\">" +
				"" + generateGraphic2(jData['vodafone_quality_pct'],jData['vodafone_quality'],' %','Vodafone') + 
				"</div>" + 
				"</div></div>" + 
			"</div>" +
			( voiceOnly ? '' : packetResults) +
		"</div>" +			// PPborder
		"<div class=\"PPclearfix PPmhlogo\"><a target=\"_blank\" href=\"http://www.maphook.com\">" + 
		"<img alight=\"left\" src=\"http://b59605efc3e2883ecdb3-449a8475b2ad35fb7f79a5acd883cfc2.r54.cf2.rackcdn.com/images/poweredby-maphook-tiny.png\" style=\"padding-top:10px\" width=\"110\" height=\"18\" alt=\"\" border=\"0\" /></a>" +
		"<a target=\"_blank\" href=\"http://www.gwsolutions.com\"><img align=\"right\" src=\"http://b43be75d9da2bcede307-fe0d0a85cf8322c1eb93c10ee9412de9.r25.cf5.rackcdn.com/gws-logo-forbubble.png\" width=\"43\" height=\"28\" border=\"0\" /></a>" +
		"</div>" +
		"</div></div></div>";

	
	
	infowindow = new InfoBubble({
			map : map,
			content : contentString,
			shadowStyle : 1,
			padding : 0,
			backgroundColor : 'rgb(255,255,255)',
			borderRadius : 0,
			arrowSize : 10,
			borderWidth : 4,
			borderColor : borderColor,
			disableAutoPan : disableAutoPan,
			hideCloseButton : false,
			arrowPosition : 50,
			backgroundClassName : 'popbubble',
			arrowStyle : 0
		});
	infowindow.setBubbleOffset(0,99);
	infowindow.open(map, marker);
}

function switchTab(idx) {
	if (idx == 1) {	
		$(".tabs-1").show(); 
		$(".tabs-2").hide(); 
		$(".tabs-3").hide(); 	
		$(".tab-1").parent().addClass("selected");
		$(".tab-2").parent().removeClass("selected");
		$(".tab-3").parent().removeClass("selected");	
		}
	if (idx == 2) {	
		$(".tabs-2").show(); 
		$(".tabs-1").hide(); 
		$(".tabs-3").hide();  
		$(".tab-1").parent().removeClass("selected");
		$(".tab-2").parent().addClass("selected");
		$(".tab-3").parent().removeClass("selected");
	}
	if (idx == 3) {	
		$(".tabs-3").show(); 
		$(".tabs-1").hide(); 
		$(".tabs-2").hide();  	
		$(".tab-1").parent().removeClass("selected");
		$(".tab-2").parent().removeClass("selected");
		$(".tab-3").parent().addClass("selected");
	}
	 
}

function generateWinner(title,field,match) {
	return "";	
	
}

function generateGraphic(percent,value,label) {
	var totalHeight = 27.00;
	var shadedHeight = totalHeight * percent;	// graphic is regular proportion
	var diffHeight = totalHeight - shadedHeight;
	/*if (value == "") {
		value = Math.round((percent * 100),2) + '%';
		shadedWidth = (totalWidth * 2 * percent) - totalWidth;	// so that the graphic goes from 50 to 100 instead of 0 to 100   (this is for actual percentages)
	}*/
	if (label == ' %' || label == '%')
		value = (Math.round(value * 1000)/10);//Math.round(value * 100);
		
	var output = '';
	
	if (value.toString().indexOf('-999') >= 0) {
		output = '<div class=\"PPdatavalue\">N/A</div><div class=\"PPgraphic\"><div style="background-image: url(spacer.png); height: ' + totalHeight + 'px; width: 20px;"></div></div>';
	}
	else {
		output = '<div class=\"PPdatavalue\">' + value + label + '</div><div class=\"PPgraphic\"><div style="background-image: url(pint_full_sm.png); height: ' + totalHeight + 'px; width: 20px;">' +
			'<div style="height: ' + diffHeight + 'px; width: 20px; overflow: hidden; background-image: url(pint_empty_sm.png)"></div></div>' +
			'</div>';
	}
	return output;
}

function generateGraphic2(percent,value,label,carrier) {
	
	if (ACTUAL_PERCENTAGES) {
		if (label == ' %' || label == '%')
			percent = value;
	}
	// OVERRIDE ADDED PER PAUL/MATT TO SHOW 0 IN PLACE OF N/A
	if (value.toString().indexOf('-999') >= 0)  {
		value = 0;
		percent = 0;
	}
	if (carrier == null) carrier = '';
	var totalHeight = 32.00;		// actual 38,  removed 6 pix to offset
	var extraHeight = 6;
	var shadedHeight = totalHeight * percent;	// graphic is regular proportion
	var diffHeight = totalHeight - shadedHeight;
	
	// add the extra height back
	diffHeight += extraHeight;
	totalHeight += extraHeight;
	
	/*if (value == "") {
		value = Math.round((percent * 100),2) + '%';
		shadedWidth = (totalWidth * 2 * percent) - totalWidth;	// so that the graphic goes from 50 to 100 instead of 0 to 100   (this is for actual percentages)
	}*/
	if (label == ' %' || label == '%')
		value = (Math.round(value * 1000)/10);//Math.round(value * 100);
	else 
		value = (Math.round(value*10))/10;
	var output = '';
	
	
	if (value.toString().indexOf('-999') >= 0) {
		output = '<div class=\"PPgraphic\"><div style="background-image: url(pint_empty.png?update=1); height: ' + totalHeight + 'px; width: 27px;"></div>' +
			'</div>' +
			'<div class="PPcarrierInline">' + carrier + '</div>' +
			'<div class="PPdatavalueInline">(n/a)</div>'
			;
	}
	else {
		output = '<div class=\"PPgraphic\"><div style="background-image: url(http://88d7ba627ed950559363-30e28468b1509b2df5dcc8eb3b617e7c.r8.cf2.rackcdn.com/london/ale_full.png?update=1); height: ' + totalHeight + 'px; width: 27px;">' +
			'<div style="height: ' + diffHeight + 'px; width: 27px; overflow: hidden; background-image: url(http://88d7ba627ed950559363-30e28468b1509b2df5dcc8eb3b617e7c.r8.cf2.rackcdn.com/london/ale_empty.png?update=1)"></div></div>' +
			'</div>' +
			'<div class="PPcarrierInline">' + carrier + '</div>' +
			'<div class="PPdatavalueInline">(' + value + label + ')</div>'
			;
	}

	
	return output;
}

function closePopup() {
	if (infowindow != "")
		infowindow.close();
		
	$("#street-view").hide();
}

function isMobile() {
	var isiPhone = navigator.userAgent.match(/iPhone/i) != null;
	var ua = navigator.userAgent.toLowerCase();
	var isAndroid = ua.indexOf("android") > -1;
	
	return isiPhone || isAndroid;
}

function getPin(src,top) {

	var path = 'pins/' + src;
	
	var y = 109;
	if (top == false)
		y = 0;
	return new google.maps.MarkerImage(path,
		new google.maps.Size(100, 99),
		new google.maps.Point(0, 0),
		new google.maps.Point(50, 99));
}

function getBeerPin() {
	
	return new google.maps.MarkerImage('http://88d7ba627ed950559363-30e28468b1509b2df5dcc8eb3b617e7c.r8.cf2.rackcdn.com/london/ale_full.png',
		new google.maps.Size(27, 38),
		new google.maps.Point(0, 0),
		new google.maps.Point(14, 38));
}

function getRegisterPin() {
	return new google.maps.MarkerImage('http://b59605efc3e2883ecdb3-449a8475b2ad35fb7f79a5acd883cfc2.r54.cf2.rackcdn.com/images/pin-register-28x33.png',
		new google.maps.Size(28, 33),
		new google.maps.Point(0, 0),
		new google.maps.Point(14, 33));
}



// bounds of the desired area
var allowedBounds = new google.maps.LatLngBounds(
     new google.maps.LatLng(51.4721,-.1829),
	 new google.maps.LatLng(51.5797,-.0443)
     
);

function getSize() {
	  var myWidth = 0, myHeight = 0;
	  if( typeof( window.innerWidth ) == 'number' ) {
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	  }
	  //window.alert( 'Width = ' + myWidth );
	  
	  if (myWidth == 0) myWidth = 620;
	  if (myHeight == 0) myHeight = 500;
	  return {height: myHeight, width: myWidth};
	  //window.alert( 'Height = ' + myHeight );
	}

function doResize() {	
	var dimensions = getSize();
	var mapHeight = dimensions.height;
	var mapWidth = dimensions.width;
	
	//alert(dimensions.height)
	
	$("#bg").width(dimensions.width);
	$("#bg").height(dimensions.height);
	$("#map_canvas").width(mapWidth + 'px');
	$("#map_canvas").height(mapHeight + 'px');
}
	
function recenter() {
	if (isMobile()) {
		//map.fitBounds(bounds);
		//map.setZoom(map.getZoom() + 1);
		fitBounds();
	}
	else {
		map.setCenter(mapCenter);
		map.setZoom(initialZoom);
	}
	if (infowindow != "")
		infowindow.close();
	
}

function initialize() {
	
	isiPhone = (navigator.userAgent.toLowerCase().indexOf("iphone") > -1);
	ua = navigator.userAgent.toLowerCase();
	isAndroid = ua.indexOf("android") > -1;
	
	
	if (isMobile()) {
		mapCenter = mobileCenter;
		
	}
	else
		doResize();
	
	
	
	var chilled = [{"featureType":"road","elementType":"geometry","stylers":[{"visibility":"simplified"}]},{"featureType":"road.arterial","stylers":[{"hue":149},{"saturation":-78},{"lightness":0}]},{"featureType":"road.highway","stylers":[{"hue":-31},{"saturation":-40},{"lightness":2.8}]},{"featureType":"poi","elementType":"label","stylers":[{"visibility":"off"}]},{"featureType":"landscape","stylers":[{"hue":163},{"saturation":-26},{"lightness":-1.1}]},{"featureType":"transit","stylers":[{"visibility":"off"}]},{"featureType":"water","stylers":[{"hue":3},{"saturation":-24.24},{"lightness":-38.57}]}];
	var cleanCut = [{"featureType":"road","elementType":"geometry","stylers":[{"lightness":100},{"visibility":"simplified"}]},{"featureType":"water","elementType":"geometry","stylers":[{"visibility":"on"},{"color":"#C6E2FF"}]},{"featureType":"poi","elementType":"geometry.fill","stylers":[{"color":"#C5E3BF"}]},{"featureType":"road","elementType":"geometry.fill","stylers":[{"color":"#D1D1B8"}]}];
	var mine = [{"featureType":"road.highway.controlled_access","elementType":"geometry","stylers":[{"visibility":"on"}]},{"featureType":"poi.government"},{"featureType":"landscape.man_made","stylers":[{"hue":"#22ff00"},{"lightness":17}]},{"featureType":"administrative.country","stylers":[{"visibility":"off"}]},{"featureType":"administrative.province","stylers":[{"visibility":"off"}]},{"featureType":"administrative.locality","stylers":[{"visibility":"off"}]},{"featureType":"administrative.neighborhood","stylers":[{"visibility":"off"}]},{},{"featureType":"landscape.natural","stylers":[{"hue":"#1aff00"},{"saturation":-40}]},{"featureType":"poi","stylers":[{"visibility":"off"}]},{"featureType":"road.highway","stylers":[{"hue":"#ff0000"},{"saturation":-85},{"gamma":1.27}]},{"featureType":"road.arterial","stylers":[{"hue":"#ff0000"},{"saturation":38}]},{"featureType":"road.local","stylers":[{"hue":"#ff0000"},{"saturation":-74},{"lightness":-16}]},{}];
	
	var disablePoi = [
	   {
		 featureType: "poi",
		 stylers: [
		  { visibility: "off" }
		 ]   
		}
	];
	
	var oldTimey = [{"featureType":"administrative","stylers":[{"visibility":"off"}]},{"featureType":"poi","stylers":[{"visibility":"off"}]},{"featureType":"road","stylers":[{"visibility":"simplified"}]},{"featureType":"water","stylers":[{"visibility":"simplified"}]},{"featureType":"transit","stylers":[{"visibility":"simplified"}]},{"featureType":"landscape","stylers":[{"visibility":"simplified"}]},{"featureType":"road.highway","stylers":[{"visibility":"off"}]},{"featureType":"road.local","stylers":[{"visibility":"on"}]},{"featureType":"road.highway","elementType":"geometry","stylers":[{"visibility":"on"}]},{"featureType":"water","stylers":[{"color":"#84afa3"},{"lightness":52}]},{"stylers":[{"saturation":-77}]},{"featureType":"road"}];
	var mutedBrown = [{"elementType":"geometry","stylers":[{"hue":"#ff4400"},{"saturation":-68},{"lightness":-4},{"gamma":0.72}]},{"featureType":"poi","stylers":[{"visibility":"off"}]},{"featureType":"road","elementType":"labels.icon"},{"featureType":"landscape.man_made","elementType":"geometry","stylers":[{"hue":"#0077ff"},{"gamma":3.1}]},{"featureType":"water","stylers":[{"hue":"#00ccff"},{"gamma":0.44},{"saturation":-33}]},{"featureType":"poi.park","stylers":[{"hue":"#44ff00"},{"saturation":-23}]},{"featureType":"water","elementType":"labels.text.fill","stylers":[{"hue":"#007fff"},{"gamma":0.77},{"saturation":65},{"lightness":99}]},{"featureType":"water","elementType":"labels.text.stroke","stylers":[{"gamma":0.11},{"weight":5.6},{"saturation":99},{"hue":"#0091ff"},{"lightness":-86}]},{"featureType":"transit.line","elementType":"geometry","stylers":[{"lightness":-48},{"hue":"#ff5e00"},{"gamma":1.2},{"saturation":-23}]},{"featureType":"transit","elementType":"labels.text.stroke","stylers":[{"saturation":-64},{"hue":"#ff9100"},{"lightness":16},{"gamma":0.47},{"weight":2.7}]}];
	
	var myOptions = {
		zoom : initialZoom,
		center : mapCenter,
		mapTypeId : google.maps.MapTypeId.ROADMAP,
		mapTypeControl : false,
		panControl: false,
		zoomControl: false,
		scaleControl: false,
		streetViewControl: false,
		styles: mutedBrown
	}

	if (isAndroid || isiPhone) {
		myOptions = {
			zoom : initialZoom,
			center : mapCenter,
			mapTypeId : google.maps.MapTypeId.ROADMAP,
			mapTypeControl : false,
			panControl: false,
			zoomControl: false,
			scaleControl: false,
			streetViewControl: false,
			styles: mutedBrown
		}
	}

	map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

	google.maps.event.addListener(map, "click", function (e) {
		closePopup();
	});

	
	google.maps.event.addListener(map, 'center_changed', function() {
		if (allowedBounds.contains(map.getCenter())) {
			//alert('allowed');
			// still within valid bounds, so save the last valid position
			lastValidCenter = map.getCenter();
			return; 
		}
		//alert('not allowed: ' + map.getCenter());
		// not valid anymore => return to last valid position
		map.setCenter(lastValidCenter);
	});
	
	
	for (var i = 0, length = jsonData.length; i < length; i++) {
		addPin(jsonData[i]);
	}
	
	//if (!isMobile())
		//buildCluster();
	if (isMobile()) {
		//map.fitBounds(bounds);
		//map.setZoom(map.getZoom() + 1);
		fitBounds();
	}
}

function fitBounds() {
	if (isiPhone) {
		map.setCenter(mobileCenter);
		map.setZoom(iPhoneZoom);
	}
	else
	{
		map.fitBounds(bounds);
		map.setZoom(mobileZoom);
	}
}

window.onresize = function (event) {
	doResize();
}		

$(document).ready(function () {
    $(window).bind('resize', doResize());
    $(window).trigger('resize');


});


$(document).ready(function () {
	initialize();
});


var jsonData = 
[{"id":0,"title":"The Kings Head","latitude":51.508671,"longitude":-0.141339,"color":"#02AC58","pin":"kings.png","photo":"kings_head2.jpg","3_accessibility":1.000,"3_accessibility_pct":1.00,"ee_accessibility":1.000,"ee_accessibility_pct":1.00,"o2_accessibility":1.000,"o2_accessibility_pct":1.00,"vodafone_accessibility":0.964,"vodafone_accessibility_pct":0.78,"3_retainability":1.000,"3_retainability_pct":1.00,"ee_retainability":1.000,"ee_retainability_pct":1.00,"o2_retainability":1.000,"o2_retainability_pct":1.00,"vodafone_retainability":1.000,"vodafone_retainability_pct":1.00,"3_quality":1.000,"3_quality_pct":1.00,"ee_quality":1.000,"ee_quality_pct":1.00,"o2_quality":0.998,"o2_quality_pct":0.98,"vodafone_quality":1.000,"vodafone_quality_pct":1.00,"3_3g_dl":3.6,"3_3g_dl_pct":0.61,"3_3g_ul":1.2,"3_3g_ul_pct":0.58,"3_3g_tsr":0.986,"3_3g_tsr_pct":0.95,"o2_3g_dl":1.9,"o2_3g_dl_pct":0.33,"o2_3g_ul":1.6,"o2_3g_ul_pct":0.76,"o2_3g_tsr":1.000,"o2_3g_tsr_pct":1.00,"ee_3g_dl":3.7,"ee_3g_dl_pct":0.63,"ee_3g_ul":2.1,"ee_3g_ul_pct":1.00,"ee_3g_tsr":1.000,"ee_3g_tsr_pct":1.00,"vodafone_3g_dl":5.8,"vodafone_3g_dl_pct":1.00,"vodafone_3g_ul":2.0,"vodafone_3g_ul_pct":0.95,"vodafone_3g_tsr":1.000,"vodafone_3g_tsr_pct":1.00,"3_4g_dl":8.7,"3_4g_dl_pct":1.00,"3_4g_ul":0.4,"3_4g_ul_pct":0.06,"3_4g_tsr":1.000,"3_4g_tsr_pct":1.00,"o2_4g_dl":5.8,"o2_4g_dl_pct":0.67,"o2_4g_ul":7.1,"o2_4g_ul_pct":0.87,"o2_4g_tsr":0.647,"o2_4g_tsr_pct":0.24,"ee_4g_dl":7.4,"ee_4g_dl_pct":0.85,"ee_4g_ul":1.7,"ee_4g_ul_pct":0.21,"ee_4g_tsr":0.958,"ee_4g_tsr_pct":0.84,"vodafone_4g_dl":4.3,"vodafone_4g_dl_pct":0.49,"vodafone_4g_ul":8.1,"vodafone_4g_ul_pct":1.00,"vodafone_4g_tsr":1.000,"vodafone_4g_tsr_pct":1.00},
{"id":1,"title":"The Spread Eagle ","latitude":51.514363,"longitude":-0.147448,"color":"#EB9C22","pin":"spread.png","photo":"spread_eagle2.jpg","3_accessibility":1.000,"3_accessibility_pct":1.00,"ee_accessibility":1.000,"ee_accessibility_pct":1.00,"o2_accessibility":1.000,"o2_accessibility_pct":1.00,"vodafone_accessibility":1.000,"vodafone_accessibility_pct":1.00,"3_retainability":1.000,"3_retainability_pct":1.00,"ee_retainability":1.000,"ee_retainability_pct":1.00,"o2_retainability":1.000,"o2_retainability_pct":1.00,"vodafone_retainability":1.000,"vodafone_retainability_pct":1.00,"3_quality":1.000,"3_quality_pct":1.00,"ee_quality":1.000,"ee_quality_pct":1.00,"o2_quality":1.000,"o2_quality_pct":1.00,"vodafone_quality":1.000,"vodafone_quality_pct":1.00,"3_3g_dl":2.7,"3_3g_dl_pct":0.65,"3_3g_ul":0.7,"3_3g_ul_pct":0.39,"3_3g_tsr":1.000,"3_3g_tsr_pct":1.00,"o2_3g_dl":1.7,"o2_3g_dl_pct":0.39,"o2_3g_ul":0.3,"o2_3g_ul_pct":0.19,"o2_3g_tsr":0.839,"o2_3g_tsr_pct":0.52,"ee_3g_dl":2.6,"ee_3g_dl_pct":0.62,"ee_3g_ul":0.3,"ee_3g_ul_pct":0.16,"ee_3g_tsr":0.971,"ee_3g_tsr_pct":0.89,"vodafone_3g_dl":4.2,"vodafone_3g_dl_pct":1.00,"vodafone_3g_ul":1.8,"vodafone_3g_ul_pct":1.00,"vodafone_3g_tsr":1.000,"vodafone_3g_tsr_pct":1.00,"3_4g_dl":6.3,"3_4g_dl_pct":1.00,"3_4g_ul":1.6,"3_4g_ul_pct":0.53,"3_4g_tsr":1.000,"3_4g_tsr_pct":1.00,"o2_4g_dl":-999.0,"o2_4g_dl_pct":-158.57,"o2_4g_ul":-999.0,"o2_4g_ul_pct":-340.54,"o2_4g_tsr":-999.0,"o2_4g_tsr_pct":0.00,"ee_4g_dl":3.5,"ee_4g_dl_pct":0.56,"ee_4g_ul":0.0,"ee_4g_ul_pct":0.01,"ee_4g_tsr":0.786,"ee_4g_tsr_pct":0.42,"vodafone_4g_dl":4.0,"vodafone_4g_dl_pct":0.64,"vodafone_4g_ul":2.9,"vodafone_4g_ul_pct":1.00,"vodafone_4g_tsr":1.000,"vodafone_4g_tsr_pct":1.00},
{"id":2,"title":"The Clarence","latitude":51.507812,"longitude":-0.141461,"color":"#E9E73B","pin":"clarence.png","photo":"clarence2.jpg","3_accessibility":0.917,"3_accessibility_pct":0.56,"ee_accessibility":1.000,"ee_accessibility_pct":1.00,"o2_accessibility":1.000,"o2_accessibility_pct":1.00,"vodafone_accessibility":0.727,"vodafone_accessibility_pct":0.15,"3_retainability":1.000,"3_retainability_pct":1.00,"ee_retainability":1.000,"ee_retainability_pct":1.00,"o2_retainability":0.933,"o2_retainability_pct":0.63,"vodafone_retainability":1.000,"vodafone_retainability_pct":1.00,"3_quality":1.000,"3_quality_pct":1.00,"ee_quality":1.000,"ee_quality_pct":1.00,"o2_quality":0.998,"o2_quality_pct":0.98,"vodafone_quality":0.867,"vodafone_quality_pct":0.40,"3_3g_dl":0.7,"3_3g_dl_pct":0.21,"3_3g_ul":0.2,"3_3g_ul_pct":0.09,"3_3g_tsr":0.923,"3_3g_tsr_pct":0.74,"o2_3g_dl":2.9,"o2_3g_dl_pct":0.87,"o2_3g_ul":0.9,"o2_3g_ul_pct":0.48,"o2_3g_tsr":1.000,"o2_3g_tsr_pct":1.00,"ee_3g_dl":3.3,"ee_3g_dl_pct":1.00,"ee_3g_ul":1.9,"ee_3g_ul_pct":1.00,"ee_3g_tsr":1.000,"ee_3g_tsr_pct":1.00,"vodafone_3g_dl":0.6,"vodafone_3g_dl_pct":0.17,"vodafone_3g_ul":0.0,"vodafone_3g_ul_pct":0.02,"vodafone_3g_tsr":0.700,"vodafone_3g_tsr_pct":0.30,"3_4g_dl":-999.0,"3_4g_dl_pct":-156.84,"3_4g_ul":-999.0,"3_4g_ul_pct":-275.78,"3_4g_tsr":-999.000,"3_4g_tsr_pct":0.00,"o2_4g_dl":6.4,"o2_4g_dl_pct":1.00,"o2_4g_ul":3.6,"o2_4g_ul_pct":1.00,"o2_4g_tsr":1.000,"o2_4g_tsr_pct":1.00,"ee_4g_dl":-999.0,"ee_4g_dl_pct":-156.84,"ee_4g_ul":-999.0,"ee_4g_ul_pct":-275.78,"ee_4g_tsr":-999.000,"ee_4g_tsr_pct":0.00,"vodafone_4g_dl":4.6,"vodafone_4g_dl_pct":0.73,"vodafone_4g_ul":3.6,"vodafone_4g_ul_pct":1.00,"vodafone_4g_tsr":1.000,"vodafone_4g_tsr_pct":1.00},
{"id":3,"title":"The Comedy","latitude":51.510033,"longitude":-0.132157,"color":"#FFFFFF","pin":"comedy.png","photo":"comedy2.jpg","3_accessibility":1.000,"3_accessibility_pct":1.00,"ee_accessibility":1.000,"ee_accessibility_pct":1.00,"o2_accessibility":1.000,"o2_accessibility_pct":1.00,"vodafone_accessibility":1.000,"vodafone_accessibility_pct":1.00,"3_retainability":1.000,"3_retainability_pct":1.00,"ee_retainability":1.000,"ee_retainability_pct":1.00,"o2_retainability":1.000,"o2_retainability_pct":1.00,"vodafone_retainability":1.000,"vodafone_retainability_pct":1.00,"3_quality":1.000,"3_quality_pct":1.00,"ee_quality":1.000,"ee_quality_pct":1.00,"o2_quality":1.000,"o2_quality_pct":1.00,"vodafone_quality":0.999,"vodafone_quality_pct":1.00,"3_3g_dl":2.6,"3_3g_dl_pct":1.00,"3_3g_ul":1.6,"3_3g_ul_pct":1.00,"3_3g_tsr":0.947,"3_3g_tsr_pct":1.00,"o2_3g_dl":3.7,"o2_3g_dl_pct":1.00,"o2_3g_ul":1.4,"o2_3g_ul_pct":1.00,"o2_3g_tsr":0.950,"o2_3g_tsr_pct":1.00,"ee_3g_dl":6.1,"ee_3g_dl_pct":1.00,"ee_3g_ul":1.1,"ee_3g_ul_pct":1.00,"ee_3g_tsr":1.000,"ee_3g_tsr_pct":1.00,"vodafone_3g_dl":2.9,"vodafone_3g_dl_pct":1.00,"vodafone_3g_ul":1.4,"vodafone_3g_ul_pct":1.00,"vodafone_3g_tsr":1.000,"vodafone_3g_tsr_pct":1.00,"3_4g_dl":1.6,"3_4g_dl_pct":1.00,"3_4g_ul":0.2,"3_4g_ul_pct":1.00,"3_4g_tsr":1.000,"3_4g_tsr_pct":1.00,"o2_4g_dl":5.9,"o2_4g_dl_pct":1.00,"o2_4g_ul":0.4,"o2_4g_ul_pct":1.00,"o2_4g_tsr":1.000,"o2_4g_tsr_pct":1.00,"ee_4g_dl":9.8,"ee_4g_dl_pct":1.00,"ee_4g_ul":2.0,"ee_4g_ul_pct":1.00,"ee_4g_tsr":1.000,"ee_4g_tsr_pct":1.00,"vodafone_4g_dl":4.7,"vodafone_4g_dl_pct":1.00,"vodafone_4g_ul":1.5,"vodafone_4g_ul_pct":1.00,"vodafone_4g_tsr":1.000,"vodafone_4g_tsr_pct":1.00},
{"id":4,"title":"The Moon Under Water","latitude":51.51028,"longitude":-0.12926,"color":"#95D2F3","pin":"moon.png","photo":"moon2.jpg","3_accessibility":1.000,"3_accessibility_pct":1.00,"ee_accessibility":1.000,"ee_accessibility_pct":1.00,"o2_accessibility":1.000,"o2_accessibility_pct":1.00,"vodafone_accessibility":1.000,"vodafone_accessibility_pct":1.00,"3_retainability":1.000,"3_retainability_pct":1.00,"ee_retainability":1.000,"ee_retainability_pct":1.00,"o2_retainability":1.000,"o2_retainability_pct":1.00,"vodafone_retainability":1.000,"vodafone_retainability_pct":1.00,"3_quality":1.000,"3_quality_pct":1.00,"ee_quality":1.000,"ee_quality_pct":1.00,"o2_quality":0.987,"o2_quality_pct":0.91,"vodafone_quality":0.998,"vodafone_quality_pct":0.99,"3_3g_dl":0.8,"3_3g_dl_pct":0.15,"3_3g_ul":0.8,"3_3g_ul_pct":0.55,"3_3g_tsr":1.000,"3_3g_tsr_pct":1.00,"o2_3g_dl":2.8,"o2_3g_dl_pct":0.52,"o2_3g_ul":1.2,"o2_3g_ul_pct":0.85,"o2_3g_tsr":1.000,"o2_3g_tsr_pct":1.00,"ee_3g_dl":5.3,"ee_3g_dl_pct":1.00,"ee_3g_ul":1.4,"ee_3g_ul_pct":1.00,"ee_3g_tsr":1.000,"ee_3g_tsr_pct":1.00,"vodafone_3g_dl":3.8,"vodafone_3g_dl_pct":0.72,"vodafone_3g_ul":1.1,"vodafone_3g_ul_pct":0.80,"vodafone_3g_tsr":1.000,"vodafone_3g_tsr_pct":1.00,"3_4g_dl":0.7,"3_4g_dl_pct":0.07,"3_4g_ul":0.1,"3_4g_ul_pct":0.01,"3_4g_tsr":0.324,"3_4g_tsr_pct":0.07,"o2_4g_dl":4.0,"o2_4g_dl_pct":0.40,"o2_4g_ul":2.4,"o2_4g_ul_pct":0.25,"o2_4g_tsr":0.903,"o2_4g_tsr_pct":0.68,"ee_4g_dl":10.0,"ee_4g_dl_pct":1.00,"ee_4g_ul":9.6,"ee_4g_ul_pct":1.00,"ee_4g_tsr":1.000,"ee_4g_tsr_pct":1.00,"vodafone_4g_dl":9.4,"vodafone_4g_dl_pct":0.94,"vodafone_4g_ul":4.7,"vodafone_4g_ul_pct":0.50,"vodafone_4g_tsr":1.000,"vodafone_4g_tsr_pct":1.00},
{"id":5,"title":"Victoria and Albert","latitude":51.522428,"longitude":-0.163512,"color":"#DD1F2A","pin":"victoria.png","photo":"victoria_albert2.jpg","3_accessibility":0.938,"3_accessibility_pct":0.65,"ee_accessibility":1.000,"ee_accessibility_pct":1.00,"o2_accessibility":1.000,"o2_accessibility_pct":1.00,"vodafone_accessibility":1.000,"vodafone_accessibility_pct":1.00,"3_retainability":1.000,"3_retainability_pct":1.00,"ee_retainability":1.000,"ee_retainability_pct":1.00,"o2_retainability":1.000,"o2_retainability_pct":1.00,"vodafone_retainability":1.000,"vodafone_retainability_pct":1.00,"3_quality":1.000,"3_quality_pct":1.00,"ee_quality":1.000,"ee_quality_pct":1.00,"o2_quality":0.958,"o2_quality_pct":0.74,"vodafone_quality":0.988,"vodafone_quality_pct":0.92,"3_3g_dl":0.5,"3_3g_dl_pct":0.14,"3_3g_ul":1.4,"3_3g_ul_pct":1.00,"3_3g_tsr":1.000,"3_3g_tsr_pct":1.00,"o2_3g_dl":3.4,"o2_3g_dl_pct":1.00,"o2_3g_ul":0.9,"o2_3g_ul_pct":0.65,"o2_3g_tsr":1.000,"o2_3g_tsr_pct":1.00,"ee_3g_dl":1.0,"ee_3g_dl_pct":0.28,"ee_3g_ul":1.0,"ee_3g_ul_pct":0.73,"ee_3g_tsr":0.967,"ee_3g_tsr_pct":0.88,"vodafone_3g_dl":1.6,"vodafone_3g_dl_pct":0.46,"vodafone_3g_ul":0.4,"vodafone_3g_ul_pct":0.29,"vodafone_3g_tsr":1.000,"vodafone_3g_tsr_pct":1.00,"3_4g_dl":5.5,"3_4g_dl_pct":0.83,"3_4g_ul":0.4,"3_4g_ul_pct":0.04,"3_4g_tsr":0.118,"3_4g_tsr_pct":0.03,"o2_4g_dl":-999.0,"o2_4g_dl_pct":-152.07,"o2_4g_ul":-999.0,"o2_4g_ul_pct":-117.02,"o2_4g_tsr":-999.000,"o2_4g_tsr_pct":0.00,"ee_4g_dl":6.6,"ee_4g_dl_pct":1.00,"ee_4g_ul":8.5,"ee_4g_ul_pct":1.00,"ee_4g_tsr":1.000,"ee_4g_tsr_pct":1.00,"vodafone_4g_dl":4.2,"vodafone_4g_dl_pct":0.64,"vodafone_4g_ul":2.9,"vodafone_4g_ul_pct":0.34,"vodafone_4g_tsr":1.000,"vodafone_4g_tsr_pct":1.00},
{"id":6,"title":"The Rocket","latitude":51.528193,"longitude":-0.1289,"color":"#FFFFFF","pin":"rocket.png","photo":"rocket2.jpg","3_accessibility":1.000,"3_accessibility_pct":1.00,"ee_accessibility":1.000,"ee_accessibility_pct":1.00,"o2_accessibility":1.000,"o2_accessibility_pct":1.00,"vodafone_accessibility":1.000,"vodafone_accessibility_pct":1.00,"3_retainability":1.000,"3_retainability_pct":1.00,"ee_retainability":1.000,"ee_retainability_pct":1.00,"o2_retainability":1.000,"o2_retainability_pct":1.00,"vodafone_retainability":1.000,"vodafone_retainability_pct":1.00,"3_quality":1.000,"3_quality_pct":1.00,"ee_quality":0.998,"ee_quality_pct":0.99,"o2_quality":0.994,"o2_quality_pct":0.96,"vodafone_quality":0.999,"vodafone_quality_pct":0.99,"3_3g_dl":4.2,"3_3g_dl_pct":1.00,"3_3g_ul":0.4,"3_3g_ul_pct":0.37,"3_3g_tsr":1.000,"3_3g_tsr_pct":1.00,"o2_3g_dl":1.0,"o2_3g_dl_pct":0.25,"o2_3g_ul":0.9,"o2_3g_ul_pct":0.95,"o2_3g_tsr":0.968,"o2_3g_tsr_pct":0.88,"ee_3g_dl":1.1,"ee_3g_dl_pct":0.27,"ee_3g_ul":1.0,"ee_3g_ul_pct":1.00,"ee_3g_tsr":0.968,"ee_3g_tsr_pct":0.88,"vodafone_3g_dl":3.7,"vodafone_3g_dl_pct":0.89,"vodafone_3g_ul":0.6,"vodafone_3g_ul_pct":0.59,"vodafone_3g_tsr":1.000,"vodafone_3g_tsr_pct":1.00,"3_4g_dl":1.5,"3_4g_dl_pct":0.17,"3_4g_ul":5.7,"3_4g_ul_pct":0.60,"3_4g_tsr":1.000,"3_4g_tsr_pct":1.00,"o2_4g_dl":5.3,"o2_4g_dl_pct":0.61,"o2_4g_ul":6.7,"o2_4g_ul_pct":0.71,"o2_4g_tsr":1.000,"o2_4g_tsr_pct":1.00,"ee_4g_dl":6.8,"ee_4g_dl_pct":0.78,"ee_4g_ul":9.4,"ee_4g_ul_pct":1.00,"ee_4g_tsr":1.000,"ee_4g_tsr_pct":1.00,"vodafone_4g_dl":8.7,"vodafone_4g_dl_pct":1.00,"vodafone_4g_ul":5.9,"vodafone_4g_ul_pct":0.63,"vodafone_4g_tsr":1.000,"vodafone_4g_tsr_pct":1.00},
{"id":7,"title":"The Silver Cross","latitude":51.506582,"longitude":-0.127115,"color":"#4066AD","pin":"silver.png","photo":"silver_cross2.jpg","3_accessibility":0.960,"3_accessibility_pct":0.76,"ee_accessibility":0.875,"ee_accessibility_pct":0.42,"o2_accessibility":1.000,"o2_accessibility_pct":1.00,"vodafone_accessibility":0.741,"vodafone_accessibility_pct":0.16,"3_retainability":0.958,"3_retainability_pct":0.75,"ee_retainability":1.000,"ee_retainability_pct":1.00,"o2_retainability":1.000,"o2_retainability_pct":1.00,"vodafone_retainability":1.000,"vodafone_retainability_pct":1.00,"3_quality":0.991,"3_quality_pct":0.94,"ee_quality":0.989,"ee_quality_pct":0.93,"o2_quality":1.000,"o2_quality_pct":1.00,"vodafone_quality":0.932,"vodafone_quality_pct":0.62,"3_3g_dl":1.7,"3_3g_dl_pct":0.49,"3_3g_ul":0.2,"3_3g_ul_pct":0.24,"3_3g_tsr":0.971,"3_3g_tsr_pct":0.89,"o2_3g_dl":3.4,"o2_3g_dl_pct":1.00,"o2_3g_ul":0.9,"o2_3g_ul_pct":1.00,"o2_3g_tsr":1.000,"o2_3g_tsr_pct":1.00,"ee_3g_dl":-999.0,"ee_3g_dl_pct":-296.04,"ee_3g_ul":0.6,"ee_3g_ul_pct":0.70,"ee_3g_tsr":0.275,"ee_3g_tsr_pct":0.05,"vodafone_3g_dl":0.1,"vodafone_3g_dl_pct":0.03,"vodafone_3g_ul":-999.0,"vodafone_3g_ul_pct":-1116.81,"vodafone_3g_tsr":0.061,"vodafone_3g_tsr_pct":0.02,"3_4g_dl":-999.0,"3_4g_dl_pct":-209.33,"3_4g_ul":-999.0,"3_4g_ul_pct":-1461.68,"3_4g_tsr":-999.000,"3_4g_tsr_pct":0.00,"o2_4g_dl":-999.0,"o2_4g_dl_pct":-209.33,"o2_4g_ul":-999.0,"o2_4g_ul_pct":-1461.68,"o2_4g_tsr":-999.000,"o2_4g_tsr_pct":0.00,"ee_4g_dl":4.8,"ee_4g_dl_pct":1.00,"ee_4g_ul":0.7,"ee_4g_ul_pct":1.00,"ee_4g_tsr":0.793,"ee_4g_tsr_pct":0.44,"vodafone_4g_dl":-999.0,"vodafone_4g_dl_pct":-209.33,"vodafone_4g_ul":-999.0,"vodafone_4g_ul_pct":-1461.68,"vodafone_4g_tsr":-999.000,"vodafone_4g_tsr_pct":0.00},
{"id":8,"title":"Rose and Crown","latitude":51.504111,"longitude":-0.148883,"color":"#E9E73B","pin":"rose.png","photo":"rose_crown2.jpg","3_accessibility":1.000,"3_accessibility_pct":1.00,"ee_accessibility":1.000,"ee_accessibility_pct":1.00,"o2_accessibility":1.000,"o2_accessibility_pct":1.00,"vodafone_accessibility":1.000,"vodafone_accessibility_pct":1.00,"3_retainability":1.000,"3_retainability_pct":1.00,"ee_retainability":1.000,"ee_retainability_pct":1.00,"o2_retainability":1.000,"o2_retainability_pct":1.00,"vodafone_retainability":1.000,"vodafone_retainability_pct":1.00,"3_quality":1.000,"3_quality_pct":1.00,"ee_quality":0.999,"ee_quality_pct":0.99,"o2_quality":0.998,"o2_quality_pct":0.98,"vodafone_quality":1.000,"vodafone_quality_pct":1.00,"3_3g_dl":6.1,"3_3g_dl_pct":0.72,"3_3g_ul":2.2,"3_3g_ul_pct":1.00,"3_3g_tsr":1.000,"3_3g_tsr_pct":1.00,"o2_3g_dl":1.6,"o2_3g_dl_pct":0.19,"o2_3g_ul":1.0,"o2_3g_ul_pct":0.48,"o2_3g_tsr":0.972,"o2_3g_tsr_pct":0.89,"ee_3g_dl":8.4,"ee_3g_dl_pct":1.00,"ee_3g_ul":1.9,"ee_3g_ul_pct":0.89,"ee_3g_tsr":1.000,"ee_3g_tsr_pct":1.00,"vodafone_3g_dl":5.8,"vodafone_3g_dl_pct":0.69,"vodafone_3g_ul":1.2,"vodafone_3g_ul_pct":0.55,"vodafone_3g_tsr":1.000,"vodafone_3g_tsr_pct":1.00,"3_4g_dl":5.3,"3_4g_dl_pct":0.55,"3_4g_ul":0.2,"3_4g_ul_pct":0.02,"3_4g_tsr":1.000,"3_4g_tsr_pct":1.00,"o2_4g_dl":3.4,"o2_4g_dl_pct":0.35,"o2_4g_ul":5.8,"o2_4g_ul_pct":0.55,"o2_4g_tsr":1.000,"o2_4g_tsr_pct":1.00,"ee_4g_dl":9.7,"ee_4g_dl_pct":1.00,"ee_4g_ul":10.5,"ee_4g_ul_pct":1.00,"ee_4g_tsr":1.000,"ee_4g_tsr_pct":1.00,"vodafone_4g_dl":9.7,"vodafone_4g_dl_pct":1.00,"vodafone_4g_ul":7.9,"vodafone_4g_ul_pct":0.75,"vodafone_4g_tsr":1.000,"vodafone_4g_tsr_pct":1.00},
{"id":9,"title":"Marquess of Anglesey","latitude":51.512827,"longitude":-0.121256,"color":"#FFFFFF","pin":"marquess.png","photo":"marquess2.jpg","3_accessibility":0.846,"3_accessibility_pct":0.34,"ee_accessibility":1.000,"ee_accessibility_pct":1.00,"o2_accessibility":1.000,"o2_accessibility_pct":1.00,"vodafone_accessibility":1.000,"vodafone_accessibility_pct":1.00,"3_retainability":1.000,"3_retainability_pct":1.00,"ee_retainability":1.000,"ee_retainability_pct":1.00,"o2_retainability":1.000,"o2_retainability_pct":1.00,"vodafone_retainability":1.000,"vodafone_retainability_pct":1.00,"3_quality":1.000,"3_quality_pct":1.00,"ee_quality":1.000,"ee_quality_pct":1.00,"o2_quality":1.000,"o2_quality_pct":1.00,"vodafone_quality":0.999,"vodafone_quality_pct":0.99,"3_3g_dl":0.7,"3_3g_dl_pct":0.20,"3_3g_ul":1.6,"3_3g_ul_pct":1.00,"3_3g_tsr":1.000,"3_3g_tsr_pct":1.00,"o2_3g_dl":2.8,"o2_3g_dl_pct":0.84,"o2_3g_ul":1.4,"o2_3g_ul_pct":0.90,"o2_3g_tsr":0.976,"o2_3g_tsr_pct":0.91,"ee_3g_dl":3.4,"ee_3g_dl_pct":1.00,"ee_3g_ul":1.1,"ee_3g_ul_pct":0.70,"ee_3g_tsr":1.000,"ee_3g_tsr_pct":1.00,"vodafone_3g_dl":1.7,"vodafone_3g_dl_pct":0.51,"vodafone_3g_ul":0.6,"vodafone_3g_ul_pct":0.40,"vodafone_3g_tsr":1.000,"vodafone_3g_tsr_pct":1.00,"3_4g_dl":2.0,"3_4g_dl_pct":0.27,"3_4g_ul":4.6,"3_4g_ul_pct":0.75,"3_4g_tsr":1.000,"3_4g_tsr_pct":1.00,"o2_4g_dl":4.9,"o2_4g_dl_pct":0.68,"o2_4g_ul":2.5,"o2_4g_ul_pct":0.41,"o2_4g_tsr":1.000,"o2_4g_tsr_pct":1.00,"ee_4g_dl":7.3,"ee_4g_dl_pct":1.00,"ee_4g_ul":4.3,"ee_4g_ul_pct":0.70,"ee_4g_tsr":1.000,"ee_4g_tsr_pct":1.00,"vodafone_4g_dl":4.1,"vodafone_4g_dl_pct":0.57,"vodafone_4g_ul":6.1,"vodafone_4g_ul_pct":1.00,"vodafone_4g_tsr":1.000,"vodafone_4g_tsr_pct":1.00},
{"id":10,"title":"The Wellington","latitude":51.511337,"longitude":-0.119474,"color":"#EB9C22","pin":"wellington.png","photo":"wellington2.jpg","3_accessibility":0.941,"3_accessibility_pct":0.66,"ee_accessibility":1.000,"ee_accessibility_pct":1.00,"o2_accessibility":1.000,"o2_accessibility_pct":1.00,"vodafone_accessibility":1.000,"vodafone_accessibility_pct":1.00,"3_retainability":1.000,"3_retainability_pct":1.00,"ee_retainability":1.000,"ee_retainability_pct":1.00,"o2_retainability":1.000,"o2_retainability_pct":1.00,"vodafone_retainability":0.941,"vodafone_retainability_pct":0.66,"3_quality":0.999,"3_quality_pct":0.99,"ee_quality":1.000,"ee_quality_pct":1.00,"o2_quality":0.999,"o2_quality_pct":0.99,"vodafone_quality":0.998,"vodafone_quality_pct":0.99,"3_3g_dl":0.6,"3_3g_dl_pct":0.16,"3_3g_ul":1.5,"3_3g_ul_pct":0.94,"3_3g_tsr":0.968,"3_3g_tsr_pct":0.88,"o2_3g_dl":3.1,"o2_3g_dl_pct":0.88,"o2_3g_ul":1.6,"o2_3g_ul_pct":1.00,"o2_3g_tsr":1.000,"o2_3g_tsr_pct":1.00,"ee_3g_dl":1.8,"ee_3g_dl_pct":0.50,"ee_3g_ul":1.4,"ee_3g_ul_pct":0.88,"ee_3g_tsr":1.000,"ee_3g_tsr_pct":1.00,"vodafone_3g_dl":3.6,"vodafone_3g_dl_pct":1.00,"vodafone_3g_ul":0.9,"vodafone_3g_ul_pct":0.56,"vodafone_3g_tsr":1.000,"vodafone_3g_tsr_pct":1.00,"3_4g_dl":1.6,"3_4g_dl_pct":0.15,"3_4g_ul":3.7,"3_4g_ul_pct":0.44,"3_4g_tsr":1.000,"3_4g_tsr_pct":1.00,"o2_4g_dl":4.8,"o2_4g_dl_pct":0.46,"o2_4g_ul":4.1,"o2_4g_ul_pct":0.49,"o2_4g_tsr":1.000,"o2_4g_tsr_pct":1.00,"ee_4g_dl":10.5,"ee_4g_dl_pct":1.00,"ee_4g_ul":8.4,"ee_4g_ul_pct":1.00,"ee_4g_tsr":1.000,"ee_4g_tsr_pct":1.00,"vodafone_4g_dl":3.9,"vodafone_4g_dl_pct":0.37,"vodafone_4g_ul":6.7,"vodafone_4g_ul_pct":0.81,"vodafone_4g_tsr":1.000,"vodafone_4g_tsr_pct":1.00},
{"id":11,"title":"The Sherlock Holmes","latitude":51.50734,"longitude":-0.125333,"color":"#DD1F2A","pin":"sherlock.png","photo":"sherlock2.jpg","3_accessibility":0.267,"3_accessibility_pct":0.01,"ee_accessibility":1.000,"ee_accessibility_pct":1.00,"o2_accessibility":1.000,"o2_accessibility_pct":1.00,"vodafone_accessibility":0.929,"vodafone_accessibility_pct":0.61,"3_retainability":1.000,"3_retainability_pct":1.00,"ee_retainability":1.000,"ee_retainability_pct":1.00,"o2_retainability":1.000,"o2_retainability_pct":1.00,"vodafone_retainability":1.000,"vodafone_retainability_pct":1.00,"3_quality":0.959,"3_quality_pct":0.75,"ee_quality":1.000,"ee_quality_pct":1.00,"o2_quality":0.949,"o2_quality_pct":0.70,"vodafone_quality":0.942,"vodafone_quality_pct":0.66,"3_3g_dl":0.0,"3_3g_dl_pct":0.01,"3_3g_ul":-999.0,"3_3g_ul_pct":-755.45,"3_3g_tsr":0.070,"3_3g_tsr_pct":0.02,"o2_3g_dl":0.3,"o2_3g_dl_pct":0.11,"o2_3g_ul":0.2,"o2_3g_ul_pct":0.13,"o2_3g_tsr":0.500,"o2_3g_tsr_pct":0.14,"ee_3g_dl":2.8,"ee_3g_dl_pct":1.00,"ee_3g_ul":1.3,"ee_3g_ul_pct":1.00,"ee_3g_tsr":0.946,"ee_3g_tsr_pct":0.81,"vodafone_3g_dl":0.3,"vodafone_3g_dl_pct":0.11,"vodafone_3g_ul":0.0,"vodafone_3g_ul_pct":0.01,"vodafone_3g_tsr":0.533,"vodafone_3g_tsr_pct":0.15,"3_4g_dl":-999.0,"3_4g_dl_pct":-1878.56,"3_4g_ul":-999.0,"3_4g_ul_pct":-25482.41,"3_4g_tsr":-999.000,"3_4g_tsr_pct":0.00,"o2_4g_dl":-999.0,"o2_4g_dl_pct":-1878.56,"o2_4g_ul":-999.0,"o2_4g_ul_pct":-25482.41,"o2_4g_tsr":-999.000,"o2_4g_tsr_pct":0.00,"ee_4g_dl":0.5,"ee_4g_dl_pct":1.00,"ee_4g_ul":0.0,"ee_4g_ul_pct":1.00,"ee_4g_tsr":0.600,"ee_4g_tsr_pct":0.20,"vodafone_4g_dl":-999.0,"vodafone_4g_dl_pct":-1878.56,"vodafone_4g_ul":-999.0,"vodafone_4g_ul_pct":-25482.41,"vodafone_4g_tsr":-999.000,"vodafone_4g_tsr_pct":0.00},
{"id":12,"title":"Ye Olde Cheshire Cheese","latitude":51.514288,"longitude":-0.107202,"color":"#4066AD","pin":"cheese.png","photo":"cheese2.jpg","3_accessibility":0.929,"3_accessibility_pct":0.61,"ee_accessibility":1.000,"ee_accessibility_pct":1.00,"o2_accessibility":1.000,"o2_accessibility_pct":1.00,"vodafone_accessibility":1.000,"vodafone_accessibility_pct":1.00,"3_retainability":1.000,"3_retainability_pct":1.00,"ee_retainability":1.000,"ee_retainability_pct":1.00,"o2_retainability":1.000,"o2_retainability_pct":1.00,"vodafone_retainability":1.000,"vodafone_retainability_pct":1.00,"3_quality":1.000,"3_quality_pct":1.00,"ee_quality":1.000,"ee_quality_pct":1.00,"o2_quality":1.000,"o2_quality_pct":1.00,"vodafone_quality":1.000,"vodafone_quality_pct":1.00,"3_3g_dl":1.2,"3_3g_dl_pct":0.14,"3_3g_ul":2.0,"3_3g_ul_pct":1.00,"3_3g_tsr":1.000,"3_3g_tsr_pct":1.00,"o2_3g_dl":3.1,"o2_3g_dl_pct":0.37,"o2_3g_ul":1.6,"o2_3g_ul_pct":0.78,"o2_3g_tsr":0.423,"o2_3g_tsr_pct":0.10,"ee_3g_dl":8.4,"ee_3g_dl_pct":1.00,"ee_3g_ul":2.0,"ee_3g_ul_pct":0.95,"ee_3g_tsr":0.976,"ee_3g_tsr_pct":0.91,"vodafone_3g_dl":2.6,"vodafone_3g_dl_pct":0.30,"vodafone_3g_ul":1.6,"vodafone_3g_ul_pct":0.79,"vodafone_3g_tsr":0.974,"vodafone_3g_tsr_pct":0.90,"3_4g_dl":0.4,"3_4g_dl_pct":0.04,"3_4g_ul":4.7,"3_4g_ul_pct":0.46,"3_4g_tsr":1.000,"3_4g_tsr_pct":1.00,"o2_4g_dl":2.8,"o2_4g_dl_pct":0.26,"o2_4g_ul":0.2,"o2_4g_ul_pct":0.02,"o2_4g_tsr":0.929,"o2_4g_tsr_pct":0.75,"ee_4g_dl":10.7,"ee_4g_dl_pct":1.00,"ee_4g_ul":10.2,"ee_4g_ul_pct":1.00,"ee_4g_tsr":1.000,"ee_4g_tsr_pct":1.00,"vodafone_4g_dl":-999.0,"vodafone_4g_dl_pct":-93.38,"vodafone_4g_ul":-999.0,"vodafone_4g_ul_pct":-98.11,"vodafone_4g_tsr":-999.000,"vodafone_4g_tsr_pct":0.00},
{"id":13,"title":"The Fen","latitude":51.511559,"longitude":-0.079193,"color":"#D42684","pin":"fenchurch.png","photo":"fenchurch2.jpg","3_accessibility":1.000,"3_accessibility_pct":1.00,"ee_accessibility":1.000,"ee_accessibility_pct":1.00,"o2_accessibility":1.000,"o2_accessibility_pct":1.00,"vodafone_accessibility":0.909,"vodafone_accessibility_pct":0.53,"3_retainability":1.000,"3_retainability_pct":1.00,"ee_retainability":1.000,"ee_retainability_pct":1.00,"o2_retainability":1.000,"o2_retainability_pct":1.00,"vodafone_retainability":1.000,"vodafone_retainability_pct":1.00,"3_quality":1.000,"3_quality_pct":1.00,"ee_quality":1.000,"ee_quality_pct":1.00,"o2_quality":1.000,"o2_quality_pct":1.00,"vodafone_quality":0.938,"vodafone_quality_pct":0.65,"3_3g_dl":0.1,"3_3g_dl_pct":0.04,"3_3g_ul":0.3,"3_3g_ul_pct":0.21,"3_3g_tsr":1.000,"3_3g_tsr_pct":1.00,"o2_3g_dl":3.7,"o2_3g_dl_pct":1.00,"o2_3g_ul":0.9,"o2_3g_ul_pct":0.71,"o2_3g_tsr":0.979,"o2_3g_tsr_pct":0.92,"ee_3g_dl":0.6,"ee_3g_dl_pct":0.16,"ee_3g_ul":1.1,"ee_3g_ul_pct":0.88,"ee_3g_tsr":0.939,"ee_3g_tsr_pct":0.78,"vodafone_3g_dl":2.4,"vodafone_3g_dl_pct":0.64,"vodafone_3g_ul":1.3,"vodafone_3g_ul_pct":1.00,"vodafone_3g_tsr":1.000,"vodafone_3g_tsr_pct":1.00,"3_4g_dl":4.2,"3_4g_dl_pct":0.87,"3_4g_ul":2.0,"3_4g_ul_pct":0.19,"3_4g_tsr":1.000,"3_4g_tsr_pct":1.00,"o2_4g_dl":4.6,"o2_4g_dl_pct":0.94,"o2_4g_ul":4.6,"o2_4g_ul_pct":0.43,"o2_4g_tsr":1.000,"o2_4g_tsr_pct":1.00,"ee_4g_dl":4.9,"ee_4g_dl_pct":1.00,"ee_4g_ul":10.6,"ee_4g_ul_pct":1.00,"ee_4g_tsr":1.000,"ee_4g_tsr_pct":1.00,"vodafone_4g_dl":3.7,"vodafone_4g_dl_pct":0.76,"vodafone_4g_ul":4.6,"vodafone_4g_ul_pct":0.43,"vodafone_4g_tsr":1.000,"vodafone_4g_tsr_pct":1.00}];

Anon7 - 2021