var mapRequest,mapDel,mapCheck;var mapMode;var cur_hash="nohash";var dataCount=0,maxMarkers=250;var allowedModes={bases:{display:"turf",path:"base"},acts:{display:"crimes",path:"action"},cities:{display:"cities",path:"location"}};var savedPos={center:null,zoom:null};mapMode="bases";function initPage(event){setMaxMarkers();var mapOptions={zoom:mapLoc.zoom,center:new google.maps.LatLng(mapLoc.lat,mapLoc.lon),mapTypeId:google.maps.MapTypeId.ROADMAP};mapDel=new mapManager();mapDel.initMap(document.getElementById("map"),mapOptions);mapDel.registerDataFetcher(fetchData);mapDel.registerMarkerType("base",baseMarker);mapDel.registerMarkerType("city",cityMarker);mapCheck=setInterval(checkMapLoaded,100);initialiseStateFromURL();setInterval(initialiseStateFromURL,1000)}function checkMapLoaded(){if(mapDel.mapLoaded){mapDel.fetchData();clearInterval(mapCheck)}}function fetchData(region){var newMode;if(region.span.latDelta>0.8){newMode="cities"}else{newMode="bases"}if(newMode!=mapMode){mapDel.clearAllMarkers()}mapMode=newMode;var url="/api/map/"+allowedModes[mapMode].path+"?lat="+region.center.lat.toFixed(4)+"&lon="+region.center.lng.toFixed(4)+"&slt="+region.span.latDelta.toFixed(4)+"&sln="+region.span.lngDelta.toFixed(4);mapRequest=new ajaxRequest(dataLoaded);mapRequest.open("GET",url,true);mapRequest.send();setStatus("Fetching turf...")}function dataLoaded(req,json){if(json.header.code!=1){setStatus("Got Error: "+json.header.msg,"error");return}setStatus("Downloaded data... processing");mapDel.removeMarkersOutsideBounds();dataCount=0;if(mapMode=="bases"){var base;for(var enid in json.body.locs){dataCount++;if(mapDel.markerCount>=maxMarkers){continue}base=json.body.locs[enid];base.markerType="base";mapDel.addMarker(base,true)}}else{if(mapMode=="cities"){var city;for(var enid in json.body.locs){dataCount++;if(mapDel.markerCount>=maxMarkers){continue}city=json.body.locs[enid];city.markerType="city";mapDel.addMarker(city,true)}}}var markerName=allowedModes[mapMode].display;if(mapDel.markerCount>=maxMarkers){setStatus("Too many "+markerName+" in this area ("+dataCount+").  Zoom in to see all "+markerName+" in this area")}else{setStatus(mapDel.markerCount+" "+markerName+" in this area")}}function baseMarker(data){var fColor="#"+data.clr.toString(16).leftPad(6,"0");var bColor=(((data.clr&16711680)>>16)+((data.clr&65280)>>8)+(data.clr&255))/3>=200?"#666":"#"+data.clr.toString(16).leftPad(6,"0");fOpacity=data.irad<75?1:0.25;var mkOptions={strokeColor:bColor,strokeOpacity:1,strokeWeight:1,fillColor:fColor,fillOpacity:fOpacity,map:mapDel.map,center:new google.maps.LatLng(data.lat,data.lon),radius:Math.max(50,data.irad)};var mk=new google.maps.Circle(mkOptions);mk.calloutText="<h2>"+data.name+"</h2>Controlled by: <strong>"+data.player.name+"</strong><br/>Influence: <strong>"+data.inf+"</strong>";return mk}function cityMarker(data){var ll=new google.maps.LatLng(data.lat,data.lon);var mkData={map:mapDel.map,icon:"/img/map/city_icon.png",position:ll};var mk=new google.maps.Marker(mkData);google.maps.event.addListener(mk,"click",cityMarkerClicked);mk.calloutText="<h2>"+data.name+"</h2><div>Capo: <strong>"+data.capo+"</strong> ("+data.capo_inf+" influence)</div><em>click to see turf</em>";mk.calloutOffset={x:0,y:-20};return mk}function cityMarkerClicked(event){savedPos.center=mapDel.map.getCenter();savedPos.zoom=mapDel.map.getZoom();var ll=new google.maps.LatLng(this.position.lat(),this.position.lng());mapDel.map.setCenter(ll);mapDel.map.setZoom(12);var backBtn=document.getElementById("back_to_city");backBtn.style.display="inline"}function goBackToCity(event){mapDel.map.setCenter(savedPos.center);mapDel.map.setZoom(savedPos.zoom);event.currentTarget.style.display="none"}function setMaxMarkers(){var value;var inputs=maxMarkerBox.getElementsByTagName("input");for(var i=0;i<inputs.length;i++){if(inputs[i].checked){value=parseInt(inputs[i].value);break}}if(value==maxMarkers){return false}if(value>500){if(!confirm("This setting may slow or freeze some browsers – are you sure you want to continue?")){return false}}if(value>=maxMarkers){mapDel.fetchData()}else{mapDel.refreshData()}maxMarkers=value;return true}function initialiseStateFromURL(){if(window.location.hash!=cur_hash){cur_hash=window.location.hash;setMapCenterByHash()}}function setMapCenterByHash(){var cur_loc=locations.locs[cur_hash];if(cur_loc){mapDel.map.setCenter(new google.maps.LatLng(cur_loc.lat,cur_loc.lon),11);document.title="Turf in the "+cur_loc.name+" area";return}cur_loc=locations["short"][cur_hash];if(cur_loc){mapDel.map.setCenter(new google.maps.LatLng(cur_loc.lat,cur_loc.lon),11);document.title="Turf in the "+cur_loc.name+" area";return}if(mapLoc.fd){mapDel.map.setCenter(new google.maps.LatLng(mapLoc.lat,mapLoc.lon),mapLoc.zoom);return}if(userLoc.fd){mapDel.map.setCenter(new google.maps.LatLng(userLoc.lat,userLoc.lon),11);return}mapDel.map.setCenter(new google.maps.LatLng(40.713956,-73.991547),12)}function setStatus(msg,type){loadStatus.replaceChild(document.createTextNode(msg),loadStatus.firstChild);linkFs.style.display="none";loadStatus.setAttribute("class",type=="error"?"lerror":"lok")}function toggleLink(showing){if(showing){linkFs.style.display="block";var c=mapDel.map.getCenter();linkText.setAttribute("value",DOMAIN_MAIN+"/map/?llz="+c.lat()+","+c.lng()+","+mapDel.map.getZoom());linkText.select()}else{linkFs.style.display="none"}};
