
function GenericMapJson(){}
GenericMapJson.prototype=new GenericMap();GenericMapJson.prototype.processJson=function(jsonDoc,isUpdate,noCache,resetBeforeLoad){if(!isUpdate){mapApp.init();}
if((isDefined(resetBeforeLoad)&&resetBeforeLoad))mapApp.removeMapOverlays();mapApp.jsonDoc=jsonDoc;var gBounds=jsonDoc.bounds;var gZoomLevel=mapApp.map.getBoundsZoomLevel(gBounds);if(jsonDoc.isPruned){mapApp.updateStatusDiv("PRUNED");}
else{mapApp.updateStatusDiv("");}
if(!isUpdate){gZoomLevel=mapApp.adjustZoom(gZoomLevel,jsonDoc,gBounds);if(logEnabled)GLog.write('setting center '+jsonDoc.center+" and zoom "+gZoomLevel);mapApp.map.setCenter(jsonDoc.center,gZoomLevel);}else{gZoomLevel=mapApp.map.getZoom();}
var locations=jsonDoc.locations;if(locations.length==0&&!isUpdate){mapApp.updateStatusDiv("NORESULTS");}
if(jsonDoc.isNoExactMatch){mapApp.updateStatusDiv("NOEXACTMATCH");}
if(logEnabled)GLog.write('setting center '+jsonDoc.center+" and zoom "+gZoomLevel);var newLocations=0;for(var i=0;i<locations.length;i++){var id=locations[i].id;if(!isDefined(mapApp.markers[id])){var marker=mapApp.createMarkerFromJson(locations[i]);mapApp.map.addOverlay(marker);mapApp.markers[id]=marker;newLocations++;}}
mapApp.afterLoad(isUpdate,jsonDoc);if(isDefined(mapApp.finalAfterLoad)){mapApp.finalAfterLoad(isUpdate,jsonDoc);}
if(isDefined(mapApp.noOverlap)){mapApp.removeOverlap();}
if(logEnabled)GLog.write('finished new locations '+newLocations+" new / "+locations.length);if(isDefined(mapApp.updateHelper)){mapApp.updateHelper.addScreen(gBounds,gZoomLevel,jsonDoc.isPruned);}
if(isDefined(mapApp.grid)){mapApp.grid.update();}
if(locations.length==0&&!isUpdate){if(!isUpdate){if(isDefined(mapApp.updateHelper)){mapApp.updateHelper.addScreen(new GLatLngBounds(new GLatLng(-10,-10),new GLatLng(10,10)),3,false);}}}
if(jsonDoc.isMorePointsFromThread&&!isUpdate){setTimeout(function(){mapApp.loadData(true,true,false);},10000);}}
GenericMapJson.prototype.loadData=function(isUpdate,noCache,resetBeforeLoad){var mapApp=this;mapApp.updateStatusDiv("LOADING");var url=this.makeQueryUrl(isUpdate)+((isDefined(noCache)&&noCache)?"&_ts="+new Date().getTime():"")+"&_output=json";if(logEnabled)GLog.write('requesting '+url);var request=GXmlHttp.create();request.open("GET",url,true);request.onreadystatechange=function(){if(request.readyState==4){if(logEnabled)GLog.write('got json');try{var jsonDoc=eval("( "+request.responseText+" )");mapApp.processJson(jsonDoc,isUpdate,noCache,resetBeforeLoad);}catch(e){if(logEnabled)GLog.write('error processing json '+e);return;}}}
request.send(null);}
GenericMapJson.prototype.adjustZoom=function(gZoomLevel,jsonDoc){logEnabled=true;if(logEnabled)GLog.write('computed zoom is '+gZoomLevel);if(jsonDoc.locations.length<3){gZoomLevel=gZoomLevel-1;}else{if(jsonDoc.isRadialSearch){if(gZoomLevel<15){gZoomLevel=gZoomLevel+1;}}}
if(logEnabled)GLog.write('adjusted zoom is '+gZoomLevel);return gZoomLevel;}
GenericMapJson.prototype.createMarkerFromJson=function(json){var mapApp=this;var point=json.point;var iconClass=json.iconClass;var id=json.id;var image=json.iconImage;var icon=new GIcon(this.getIconClassFromName(json.iconClass),image);var hoverText=json.hoverText;var marker=new GxMarker(point,icon,hoverText,this.map);marker.json=json;marker.id=id;marker.icon=icon;marker.point=point;if(logEnabled)GLog.write("creating marker"+json)
GEvent.addListener(marker,"click",function(){mapApp.openInfoWindow(marker.id);});return marker;}
GenericMapJson.prototype.afterLoad=function(isUpdate){}
GenericMapJson.prototype.openInfoWindow=function(id){if(logEnabled)GLog.write("tryig to open "+id)
var marker=this.markers[id];var contents=marker.json.html;mapApp.map.openInfoWindow(marker.point,contents);}