var map,req;
var mapMode,markerName;
var cur_hash="nohash";
var baseData,markers={},dataCount=0,markerCount=0,maxMarkers=250;
var allowedModes={"bases":{"display":"turf","path":"base"},"acts":{"display":"crimes","path":"action"},"cities":{"display":"cities","path":"location"}};
function setMaxMarkers(_1){
var _2;
var _3=maxMarkerBox.getElementsByTagName("input");
for(var i=0;i<_3.length;i++){
if(_3[i].checked){
_2=parseInt(_3[i].value);
break;
}
}
if(_2==maxMarkers){
return false;
}
if(_2>500){
if(!confirm("This setting may slow or freeze some browsers - are you sure you want to continue?")){
return false;
}
}
if(_2<maxMarkers){
map.clearOverlays();
markers={};
dataCount=markerCount=0;
}
maxMarkers=_2;
if(_1){
basesLoaded();
}
return true;
};
function htmlBase(_4){
return "<h2>"+_4.name+"</h2>Controlled by: <strong>"+_4.owner.name+"</strong><br/>Influence: <strong>"+_4.influence+"/"+_4.full_influence+"</strong>";
};
function htmlCity(_5){
return "<h2>"+_5.name+"</h2><div>Capo: <strong>"+_5.capo+"</strong> ("+_5.capo_inf+" influence)</div><em>click to zoom</em>";
};
function htmlCrime(_6){
return "<h2>"+_6.enid+(_6.count>1?"("+_6.count+" incidents)":"")+"</h2>"+"<strong>"+_6.actor.name+"</strong> attacked <strong>"+_6.actee.name+"</strong> and "+(_6.won?"WON":"LOST");
};
function baseMarker(ll,_7,_8,_9){
var _a=18;
var _b=2*Math.PI/_a;
var _c,_d,_e=ll.lat(),_f=ll.lng();
var pts=[];
var _10=_8*Math.cos(Math.PI*_e/180);
for(var i=0;i<=_a;i++){
_c=_e+Math.sin(_b*i)*_10;
_d=_f+Math.cos(_b*i)*_8;
pts[pts.length]=new GLatLng(_c,_d);
}
var _11=(((_7&16711680)>>16)+((_7&65280)>>8)+(_7&255))/3>=200?"#666":"#"+_7.toString(16).leftPad(6,"0");
var mk=new GPolygon(pts,_11,map.getZoom()/20,1,"#"+_7.toString(16).leftPad(6,"0"),0.25);
mk.html=_9;
mk.borderStyle={"color":_11,"weight":map.getZoom()/20,"opacity":1};
GEvent.addListener(mk,"mouseover",function(){
baseCallout(mk,true);
});
GEvent.addListener(mk,"mouseout",function(){
baseCallout(mk,false);
});
return mk;
};
function cityMarker(ll,_12){
var mk=new GMarker(ll);
mk.html=_12;
GEvent.addListener(mk,"mouseover",function(){
baseCallout(mk,true);
});
GEvent.addListener(mk,"click",function(){
map.setCenter(ll,13);
});
return mk;
};
function baseCallout(mk,_13){
var box,_14=mapDiv.curSelectedBox;
if(!_14){
_14=document.createElement("div");
_14.setAttribute("id","ann_callout");
var box=document.createElement("div");
var cv=document.createElement("canvas");
cv.setAttribute("id","ann_canvas");
cv.setAttribute("width","15");
cv.setAttribute("height","20");
_14.appendChild(box);
_14.appendChild(cv);
mapDiv.curSelectedBox=_14;
mapDiv.appendChild(mapDiv.curSelectedBox);
if(!cv.getContext){
cv=G_vmlCanvasManager.initElement(cv);
}
var ctx=cv.getContext("2d");
ctx.fillStyle="#000";
ctx.strokeStyle="#000";
ctx.beginPath();
ctx.moveTo(0,0);
ctx.lineTo(7.5,20);
ctx.lineTo(15,0);
ctx.stroke();
ctx.fill();
}else{
box=_14.firstChild;
}
box.innerHTML=mk.html;
mapDiv.selectedMarker=mk;
if(_13){
_14.style.display="block";
if(mapMode=="bases"){
mk.setStrokeStyle({"color":"#f00","weight":1,"opacity":1});
}
}else{
_14.style.display="none";
if(mapMode=="bases"){
mk.setStrokeStyle(mk.borderStyle);
}
}
var _15=map.fromLatLngToContainerPixel(markerGetCenter(mk));
_14.style.top=(_15.y-_14.clientHeight-(mapMode=="bases"?0:30))+"px";
_14.style.left=(_15.x-0.5*_14.clientWidth)+"px";
};
function markerGetCenter(_16){
return mapMode=="bases"?_16.getBounds().getCenter():_16.getLatLng();
};
function basesLoaded(){
if(req.readyState==1){
setStatus("Fetching "+markerName+"...","load");
}else{
if(req.readyState==4){
var _17=map.getBounds();
var _18=JSON.parse(req.responseText);
if(_18.header.code==1){
for(var _19 in markers){
if(!_17.containsLatLng(markerGetCenter(markers[_19]))){
map.removeOverlay(markers[_19]);
delete markers[_19];
markerCount--;
dataCount--;
}
}
if(mapMode=="acts"){
baseData=_18.body.acts;
}else{
baseData=_18.body.locs;
}
var ll,_1a,_1b;
dataCount=markerCount;
for(var _19 in baseData){
_1a=baseData[_19];
ll=new GLatLng(_1a.lat,_1a.lon);
if(!markers[_19]&&_17.containsLatLng(ll)){
dataCount++;
if(markerCount>=maxMarkers){
continue;
}
if(mapMode=="bases"){
_1b=htmlBase(_1a);
}else{
if(mapMode=="acts"){
_1b=htmlCrime(_1a);
}else{
_1b=htmlCity(_1a);
}
}
if(mapMode=="bases"){
markers[_19]=baseMarker(ll,_1a.clr,_1a.r,_1b);
}else{
markers[_19]=cityMarker(ll,_1b);
}
map.addOverlay(markers[_19]);
markerCount++;
}
}
}
if(markerCount>=maxMarkers){
setStatus("Too many "+markerName+"("+dataCount+") in this area.  Zoom in to see all "+markerName+" in this area");
}else{
setStatus(markerCount+" "+markerName+" in this area");
}
}
}
};
function clearCallouts(){
if(mapDiv.curSelectedBox){
mapDiv.curSelectedBox.style.display="none";
}
};
function fetchBases(){
clearCallouts();
var c=map.getBounds();
var _1c=(c.getNorthEast().lat()-c.getSouthWest().lat());
var _1d;
if(_1c>0.8){
_1d="cities";
}else{
_1d="bases";
}
if(_1d!=mapMode){
for(var _1e in markers){
map.removeOverlay(markers[_1e]);
}
markers={};
markerCount=0;
}
mapMode=_1d;
markerName=allowedModes[mapMode].display;
var url="/api/map/"+allowedModes[mapMode].path+"?lat="+c.getCenter().lat()+"&lon="+c.getCenter().lng()+"&r="+_1c;
req=createXMLHttpRequest();
req.onreadystatechange=basesLoaded;
req.open("GET",url,true);
req.send();
};
function initialiseStateFromURL(){
if(window.location.hash!=cur_hash){
cur_hash=window.location.hash;
setMapCenterByHash();
}
};
function setMapCenterByHash(){
var _1f=locations["locs"][cur_hash];
if(_1f){
map.setCenter(new google.maps.LatLng(_1f.lat,_1f.lon),11);
document.title="Turf in the "+_1f.name+" area";
return;
}
_1f=locations["short"][cur_hash];
if(_1f){
map.setCenter(new google.maps.LatLng(_1f.lat,_1f.lon),11);
document.title="Turf in the "+_1f.name+" area";
return;
}
if(mapLoc.fd){
map.setCenter(new google.maps.LatLng(mapLoc.lat,mapLoc.lon),mapLoc.zoom);
return;
}
if(userLoc.fd){
map.setCenter(new google.maps.LatLng(userLoc.lat,userLoc.lon),11);
return;
}
map.setCenter(new google.maps.LatLng(34,-118.3),11);
};
function searchLocation(){
var gc=new GClientGeocoder();
gc.getLatLng(locSearch.value,centerMapOnSearchLocation);
};
function centerMapOnSearchLocation(ll){
if(ll===null){
setStatus("Error - couldn't understand what you're searching for","error");
}else{
map.setCenter(ll,13);
}
};
function setStatus(msg,_20){
loadStatus.replaceChild(document.createTextNode(msg),loadStatus.firstChild);
linkFs.style.display="none";
loadStatus.setAttribute("class",_20=="error"?"lerror":"lok");
};
function toggleLink(_21){
if(_21){
linkFs.style.display="block";
var c=map.getCenter();
linkText.setAttribute("value",DOMAIN_MAIN+"/map/?llz="+c.lat()+","+c.lng()+","+map.getZoom());
linkText.select();
}else{
linkFs.style.display="none";
}
};
function initialize(){
map=new GMap2(mapDiv);
map.addControl(new GLargeMapControl3D());
map.addControl(new GMapTypeControl());
map.enableScrollWheelZoom();
GEvent.addListener(map,"moveend",fetchBases);
GEvent.addListener(map,"movestart",clearCallouts);
setMaxMarkers(false);
initialiseStateFromURL();
setInterval(initialiseStateFromURL,1000);
};
String.prototype.leftPad=function(l,c){
return new Array(l-this.length+1).join(c||"0")+this;
};

