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;
GEvent.addListener(marker,"click",function(){
mapApp.openInfoWindow(marker.id);});
return marker;}
GenericMapJson.prototype.afterLoad=function(isUpdate){}
GenericMapJson.prototype.openInfoWindow=function(id){
var marker=this.markers[id];
var contents=marker.json.html;
mapApp.map.openInfoWindow(marker.point,contents);}