-
Notifications
You must be signed in to change notification settings - Fork 7
/
s3.gis.min.js
111 lines (111 loc) · 47.1 KB
/
s3.gis.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
var map;S3.gis.layers_all=[];S3.gis.format_geojson=new OpenLayers.Format.GeoJSON;S3.gis.dirs=[];S3.gis.ajax_loader=S3.Ap.concat("/static/img/ajax-loader.gif");S3.gis.marker_url=S3.Ap.concat("/static/img/markers/");OpenLayers.ImgPath=S3.Ap.concat("/static/img/gis/openlayers/");OpenLayers.IMAGE_RELOAD_ATTEMPTS=3;OpenLayers.Util.onImageLoadErrorColor="transparent";OpenLayers.ProxyHost=S3.Ap.concat("/gis/proxy?url=");S3.gis.proj4326=new OpenLayers.Projection("EPSG:4326");S3.gis.proj4236=new OpenLayers.Projection("EPSG:4236");
S3.gis.projection_current=new OpenLayers.Projection("EPSG:"+S3.gis.projection);S3.gis.options={displayProjection:S3.gis.proj4326,projection:S3.gis.projection_current,theme:null,units:S3.gis.units,maxResolution:S3.gis.maxResolution,maxExtent:new OpenLayers.Bounds(S3.gis.maxExtent[0],S3.gis.maxExtent[1],S3.gis.maxExtent[2],S3.gis.maxExtent[3]),numZoomLevels:S3.gis.numZoomLevels};S3.gis.cluster_distance=20;S3.gis.cluster_threshold=2;S3.gis.layers_loading=0;S3.gis.plugins=[];
function registerPlugin(a){S3.gis.plugins.push(a)}S3.gis.show_map=function(){S3.gis.lat&&S3.gis.lon?(S3.gis.center=new OpenLayers.LonLat(S3.gis.lon,S3.gis.lat),S3.gis.center.transform(S3.gis.proj4326,S3.gis.projection_current)):S3.gis.bottom_left&&S3.gis.top_right&&s3_gis_setCenter(S3.gis.bottom_left,S3.gis.top_right);addMap();addMapUI();S3.gis.bounds&&map.zoomToExtent(S3.gis.bounds);Ext.QuickTips.init()};
function s3_gis_setCenter(a,b){a=new OpenLayers.LonLat(a[0],a[1]);a.transform(S3.gis.proj4326,S3.gis.projection_current);var c=a.lon,d=a.lat,b=new OpenLayers.LonLat(b[0],b[1]);b.transform(S3.gis.proj4326,S3.gis.projection_current);S3.gis.bounds=OpenLayers.Bounds.fromArray([c,d,b.lon,b.lat]);S3.gis.center=S3.gis.bounds.getCenterLonLat()}function addMap(){map=new OpenLayers.Map("center",S3.gis.options);addLayers();addControls()}
function addMapUI(){S3.gis.mapPanel=new GeoExt.MapPanel({height:S3.gis.map_height,width:S3.gis.map_width,id:"mappanel",xtype:"gx_mappanel",map:map,center:S3.gis.center,zoom:S3.gis.zoom,plugins:[]});S3.gis.portal={};S3.gis.portal.map=S3.gis.mapPanel;if(S3.i18n.gis_legend||S3.gis.layers_wms)for(var a=0;a<map.layers.length;a++)if(map.layers[a].legendURL&&(S3.gis.mapPanel.layers.data.items[a].data.legendURL=map.layers[a].legendURL),map.layers[a].queryable)S3.gis.mapPanel.layers.data.items[a].data.queryable=
1;addLayerTree();var b=[S3.gis.layerTree];S3.gis.wms_browser_url&&(addWMSBrowser(),S3.gis.wmsBrowser&&b.push(S3.gis.wmsBrowser));S3.gis.printFormPanel&&b.push(S3.gis.printFormPanel);S3.i18n.gis_legend&&(S3.gis.legendPanel=new GeoExt.LegendPanel({id:"legendpanel",title:S3.i18n.gis_legend,defaults:{labelCls:"mylabel",style:"padding:4px"},bodyStyle:"padding:4px",autoScroll:!0,collapsible:!0,collapseMode:"mini",lines:!1}),b.push(S3.gis.legendPanel));for(a=0;a<S3.gis.plugins.length;++a)S3.gis.plugins[a].setup(map),
S3.gis.plugins[a].addToMapWindow(b);S3.gis.mapWestPanel=new Ext.Panel({id:"tools",header:!1,border:!1,split:!0,items:b});S3.gis.window?addMapWindow():addMapPanel()}function addWestPanel(){void 0==S3.gis.west_collapsed&&(S3.gis.west_collapsed=!1);S3.gis.mapWestPanelContainer=new Ext.Panel({region:"west",header:!1,border:!0,width:250,autoScroll:!0,collapsible:!0,collapseMode:"mini",collapsed:S3.gis.west_collapsed,items:[S3.gis.mapWestPanel]})}
function addMapPanelContainer(){S3.gis.toolbar&&addToolbar();S3.gis.mapPanelContainer=new Ext.Panel({layout:"card",region:"center",id:"mappnlcntr",defaults:{border:!1},items:[S3.gis.mapPanel],activeItem:0,tbar:S3.gis.toolbar,scope:this});S3.gis.Google&&S3.gis.Google.Earth&&(S3.gis.googleEarthPanel=new gxp.GoogleEarthPanel({mapPanel:S3.gis.mapPanel}),S3.gis.mapPanelContainer.items.items.push(S3.gis.googleEarthPanel))}
function addMapPanel(){addWestPanel();addMapPanelContainer();S3.gis.mapWin=new Ext.Panel({id:"gis-map-panel",renderTo:"map_panel",autoScroll:!0,titleCollapse:!0,height:S3.gis.map_height,width:S3.gis.map_width,layout:"border",items:[S3.gis.mapWestPanelContainer,S3.gis.mapPanelContainer]})}
function addMapWindow(){addWestPanel();addMapPanelContainer();var a=new Ext.Window({id:"gis-map-window",collapsible:!1,constrain:!0,closable:!S3.gis.windowNotClosable,closeAction:"hide",autoScroll:!0,maximizable:S3.gis.maximizable,titleCollapse:!1,height:S3.gis.map_height,width:S3.gis.map_width,layout:"border",items:[S3.gis.mapWestPanelContainer,S3.gis.mapPanelContainer]});a.on("beforehide",function(a){a.maximized&&a.restore()});S3.gis.windowHide||(a.show(),a.maximize());S3.gis.mapWin=a}
function addLayerTree(){for(var a=[{text:S3.i18n.gis_base_layers,nodeType:"gx_baselayercontainer",layerStore:S3.gis.mapPanel.layers,loader:{filter:function(a){a=a.getLayer();return!0===a.displayInLayerSwitcher&&!0===a.isBaseLayer&&(void 0===a.dir||""==a.dir)}},leaf:!1,expanded:!0},{text:S3.i18n.gis_overlays,nodeType:"gx_overlaylayercontainer",layerStore:S3.gis.mapPanel.layers,loader:{filter:function(a){a=a.getLayer();return!0===a.displayInLayerSwitcher&&!1===a.isBaseLayer&&(void 0===a.dir||""==a.dir)}},
leaf:!1,expanded:!0}],b=S3.gis.dirs,c=0;c<b.length;c++){var d={text:b[c],nodeType:"gx_layercontainer",layerStore:S3.gis.mapPanel.layers,loader:{filter:function(a){return function(b){if("undefined"!==b.data.layer.dir)return b.data.layer.dir===a}}(b[c])},leaf:!1,expanded:!0};a.push(d)}a=new Ext.tree.AsyncTreeNode({expanded:!0,children:a});b=S3.i18n.gis_uploadlayer||S3.i18n.gis_properties?new Ext.Toolbar:null;S3.gis.layerTree=new Ext.tree.TreePanel({id:"treepanel",title:S3.i18n.gis_layers,loader:new Ext.tree.TreeLoader({applyLoader:!1}),
root:a,rootVisible:!1,split:!0,autoScroll:!0,collapsible:!0,collapseMode:"mini",lines:!1,tbar:b,enableDD:!0});S3.i18n.gis_uploadlayer&&addRemoveLayersControl();S3.i18n.gis_properties&&addLayerPropertiesButton()}
function addWMSBrowser(){var a=new Ext.tree.AsyncTreeNode({expanded:!0,loader:new GeoExt.tree.WMSCapabilitiesLoader({url:OpenLayers.ProxyHost+S3.gis.wms_browser_url,layerOptions:{buffer:1,singleTile:!1,ratio:1,wrapDateLine:!0},layerParams:{TRANSPARENT:"TRUE"},createNode:function(a){a.checked=a.leaf?!1:void 0;return GeoExt.tree.WMSCapabilitiesLoader.prototype.createNode.apply(this,[a])}})});S3.gis.wmsBrowser=new Ext.tree.TreePanel({id:"wmsbrowser",title:S3.gis.wms_browser_name,root:a,rootVisible:!1,
split:!0,autoScroll:!0,collapsible:!0,collapseMode:"mini",lines:!1,listeners:{checkchange:function(a,c){!0===c?S3.gis.mapPanel.map.addLayer(a.attributes.layer):S3.gis.mapPanel.map.removeLayer(a.attributes.layer)}}})}
function addToolbar(){var a=new Ext.Toolbar({id:"gis_toolbar",height:34}),b=new GeoExt.Action({control:new OpenLayers.Control.ZoomToMaxExtent,map:map,iconCls:"zoomfull",tooltip:S3.i18n.gis_zoomfull}),c=new GeoExt.Action({control:new OpenLayers.Control.ZoomBox({out:!0}),map:map,iconCls:"zoomout",tooltip:S3.i18n.gis_zoomout,toggleGroup:"controls"}),d=new GeoExt.Action({control:new OpenLayers.Control.ZoomBox,map:map,iconCls:"zoomin",tooltip:S3.i18n.gis_zoomin,toggleGroup:"controls"});if("active"==S3.gis.draw_feature)var e=
!1,f=!0,g=!1;else"active"==S3.gis.draw_polygon?(f=e=!1,g=!0):(e=!0,g=f=!1);S3.gis.panButton=new GeoExt.Action({control:new OpenLayers.Control.Navigation,map:map,iconCls:"pan-off",tooltip:S3.i18n.gis_pan,toggleGroup:"controls",allowDepress:!0,pressed:e});a.add(b);navigator.geolocation&&addGeolocateControl(a);void 0===S3.gis.loc_select&&(a.add(c),a.add(d),a.add(S3.gis.panButton),a.addSeparator());void 0===S3.gis.loc_select&&addNavigationControl(a);void 0===S3.gis.loc_select&&S3.auth&&addSaveButton(a);
a.addSeparator();addMeasureControls(a);S3.gis.mgrs_url&&addPdfControl(a);if(S3.gis.draw_feature||S3.gis.draw_polygon)a.addSeparator(),S3.gis.draw_feature&&addPointControl(a,f),S3.gis.draw_polygon&&addPolygonControl(a,g,!0);S3.i18n.gis_get_feature_info&&addWMSGetFeatureInfoControl(a);S3.gis.osm_oauth&&addPotlatchButton(a);S3.gis.Google&&S3.gis.Google.StreetviewButton&&addGoogleStreetviewControl(a);try{S3.gis.Google.Earth&&google&addGoogleEarthControl(a)}catch(h){}S3.i18n.gis_search&&(b=Math.min(350,
S3.gis.map_width-680),b=new GeoExt.ux.GeoNamesSearchCombo({map:map,width:b,listWidth:b,minChars:2,emptyText:S3.i18n.gis_search}),a.addSeparator(),a.add(b));b=new Ext.BoxComponent({autoEl:{tag:"img",src:S3.gis.ajax_loader},cls:"hide",id:"layer_throbber"});a.add(b);S3.gis.toolbar=a}
function addLayers(){var a;if(S3.gis.layers_osm)for(a=S3.gis.layers_osm.length;0<a;a--)addOSMLayer(S3.gis.layers_osm[a-1]);try{google&addGoogleLayers()}catch(b){}S3.gis.Bing&&addBingLayers();if(S3.gis.layers_tms)for(a=S3.gis.layers_tms.length;0<a;a--)addTMSLayer(S3.gis.layers_tms[a-1]);if(S3.gis.layers_wms)for(a=S3.gis.layers_wms.length;0<a;a--)addWMSLayer(S3.gis.layers_wms[a-1]);if(S3.gis.layers_xyz)for(a=S3.gis.layers_xyz.length;0<a;a--)addXYZLayer(S3.gis.layers_xyz[a-1]);S3.gis.EmptyLayer&&(a=
new OpenLayers.Layer(S3.gis.EmptyLayer.name,{isBaseLayer:!0,displayInLayerSwitcher:!0,s3_layer_id:S3.gis.EmptyLayer.id,s3_layer_type:"empty"}),map.addLayer(a),S3.gis.EmptyLayer.base&&map.setBaseLayer(a));try{addJSLayers()}catch(c){}if(S3.gis.layers_theme)for(a=S3.gis.layers_theme.length;0<a;a--)addGeoJSONLayer(S3.gis.layers_theme[a-1]);if(S3.gis.layers_geojson)for(a=S3.gis.layers_geojson.length;0<a;a--)addGeoJSONLayer(S3.gis.layers_geojson[a-1]);if(S3.gis.layers_gpx)for(a=S3.gis.layers_gpx.length;0<
a;a--)addGPXLayer(S3.gis.layers_gpx[a-1]);if(S3.gis.layers_arcrest)for(a=S3.gis.layers_arcrest.length;0<a;a--)addArcRESTLayer(S3.gis.layers_arcrest[a-1]);S3.gis.CoordinateGrid&&addCoordinateGrid();if(S3.gis.layers_georss)for(a=S3.gis.layers_georss.length;0<a;a--)addGeoJSONLayer(S3.gis.layers_georss[a-1]);if(S3.gis.layers_kml){S3.gis.format_kml=new OpenLayers.Format.KML({extractStyles:!0,extractAttributes:!0,maxDepth:2});for(a=S3.gis.layers_kml.length;0<a;a--)addKMLLayer(S3.gis.layers_kml[a-1])}S3.gis.OWM&&
addOWMLayers();if(S3.gis.layers_wfs)for(a=S3.gis.layers_wfs.length;0<a;a--)addWFSLayer(S3.gis.layers_wfs[a-1]);if(S3.gis.layers_feature_queries)for(a=S3.gis.layers_feature_queries.length;0<a;a--)addGeoJSONLayer(S3.gis.layers_feature_queries[a-1]);if(S3.gis.layers_feature_resources)for(a=S3.gis.layers_feature_resources.length;0<a;a--)addGeoJSONLayer(S3.gis.layers_feature_resources[a-1]);if(S3.gis.layers_features)for(a=S3.gis.layers_features.length;0<a;a--)addGeoJSONLayer(S3.gis.layers_features[a-1]);
(S3.gis.features||S3.gis.draw_feature||S3.gis.draw_polygon||navigator.geolocation)&&addDraftLayer();if(S3.gis.features)for(a=0;a<S3.gis.features.length;a++){var d=new OpenLayers.Geometry.Point(S3.gis.features[a].lon,S3.gis.features[a].lat);d.transform(S3.gis.proj4326,S3.gis.projection_current);S3.gis.draftLayer.addFeatures(new OpenLayers.Feature.Vector(d))}}
function addArcRESTLayer(a){var b=a.name,c=[a.url],d=void 0!=a.layers?a.layers:0;if(void 0!=a.dir){var e=a.dir;-1==$.inArray(e,S3.gis.dirs)&&S3.gis.dirs.push(e)}else e="";var f=void 0!=a.visibility?a.visibility:!0,b=new OpenLayers.Layer.ArcGIS93Rest(b,c,{layers:"show:"+d,isBaseLayer:void 0!=a.base?a.base:!1,transparent:void 0!=a.transparent?a.transparent:!0,dir:e,s3_layer_id:a.id,s3_layer_type:"arcrest"});b.setVisibility(f);map.addLayer(b);a._base&&map.setBaseLayer(b)}
function addBingLayers(){var a=S3.gis.Bing,b=a.ApiKey,c;a.Aerial&&(c=new OpenLayers.Layer.Bing({key:b,type:"Aerial",name:a.Aerial.name,s3_layer_id:a.Aerial.id,s3_layer_type:"bing"}),map.addLayer(c),"aerial"==a.Base&&map.setBaseLayer(c));a.Road&&(c=new OpenLayers.Layer.Bing({key:b,type:"Road",name:a.Road.name,s3_layer_id:a.Road.id,s3_layer_type:"bing"}),map.addLayer(c),"road"==a.Base&&map.setBaseLayer(c));a.Hybrid&&(c=new OpenLayers.Layer.Bing({key:b,type:"AerialWithLabels",name:a.Hybrid.name,s3_layer_id:a.Hybrid.id,
s3_layer_type:"bing"}),map.addLayer(c),"hybrid"==a.Base&&map.setBaseLayer(c))}function addCoordinateGrid(){map.addLayer(new OpenLayers.Layer.cdauth.CoordinateGrid(null,{name:S3.gis.CoordinateGrid.name,shortName:"grid",visibility:S3.gis.CoordinateGrid.visibility,s3_layer_id:S3.gis.CoordinateGrid.id,s3_layer_type:"coordinate"}))}
function addDraftLayer(){var a=S3.gis.marker_url+S3.gis.marker_default,b=S3.gis.marker_default_height,c=S3.gis.marker_default_width,d=OpenLayers.Util.extend({},OpenLayers.Feature.Vector.style["default"]);d.graphicOpacity=1;d.graphicWidth=c;d.graphicHeight=b;d.graphicXOffset=-(c/2);d.graphicYOffset=-b;d.externalGraphic=a;S3.gis.draftLayer=new OpenLayers.Layer.Vector(S3.i18n.gis_draft_layer,{style:d,displayInLayerSwitcher:!1});S3.gis.draftLayer.setVisibility(!0);map.addLayer(S3.gis.draftLayer)}
OpenLayers.Strategy.AttributeCluster=OpenLayers.Class(OpenLayers.Strategy.Cluster,{attribute:null,shouldCluster:function(a,b){var c=OpenLayers.Strategy.Cluster.prototype;return a.cluster[0].attributes[this.attribute]===b.attributes[this.attribute]&&c.shouldCluster.apply(this,arguments)},CLASS_NAME:"OpenLayers.Strategy.AttributeCluster"});
function addGeoJSONLayer(a){var b=a.name,c=a.url;if(void 0!=a.marker_image)var d=S3.gis.marker_url+a.marker_image,e=a.marker_height,f=a.marker_width;else d="";var g=void 0!=a.refresh?a.refresh:900;if(void 0!=a.dir){var h=a.dir;-1==$.inArray(h,S3.gis.dirs)&&S3.gis.dirs.push(h)}else h="";var k=void 0!=a.visibility?a.visibility:!0,j=void 0!=a.opacity?a.opacity:1,m=void 0!=a.cluster_distance?a.cluster_distance:S3.gis.cluster_distance,p=void 0!=a.cluster_threshold?a.cluster_threshold:S3.gis.cluster_threshold,
n=void 0!=a.projection?a.projection:4326,n=4326==n?S3.gis.proj4326:new OpenLayers.Projection("EPSG:"+n),o=void 0!=a.type?a.type:"feature",l=void 0!=a.style?a.style:[],j=new OpenLayers.Style({label:"${label}",labelAlign:"cm",pointRadius:"${radius}",fillColor:"${fill}",fillOpacity:"${fillOpacity}",strokeColor:"${stroke}",strokeWidth:2,strokeOpacity:j,graphicWidth:"${graphicWidth}",graphicHeight:"${graphicHeight}",graphicXOffset:"${graphicXOffset}",graphicYOffset:"${graphicYOffset}",graphicOpacity:j,
graphicName:"${graphicName}",externalGraphic:"${externalGraphic}"},{context:{graphicWidth:function(a){return a.cluster?"":a.attributes.marker_width?a.attributes.marker_width:f},graphicHeight:function(a){return a.cluster?"":a.attributes.marker_height?a.attributes.marker_height:e},graphicXOffset:function(a){return a.cluster?"":a.attributes.marker_width?-(a.attributes.marker_width/2):-(f/2)},graphicYOffset:function(a){return a.cluster?"":a.attributes.marker_height?-a.attributes.marker_height:-e},graphicName:function(a){return a.cluster?
"circle":a.attributes.shape?a.attributes.shape:"circle"},externalGraphic:function(a){return a.cluster?"":a.attributes.marker_url?a.attributes.marker_url:d},radius:function(a){return a.cluster?Math.min(a.attributes.count/2,8)+10:a.attributes.size?a.attributes.size:10},fill:function(a){if(a.cluster)var b=a.cluster[0].attributes.colour?a.cluster[0].attributes.colour:"#8087ff";else if(a.attributes.colour)b=a.attributes.colour;else if(l.length){var c=a.attributes.value;$.each(l,function(a,d){if(c>=d.low&&
c<d.high)return b=d.fill,!1});b=void 0!=b?"#"+b:"#000000"}else b="#f5902e";return b},fillOpacity:function(a){if(a.cluster){if(a.cluster[0].attributes.opacity)var b=a.cluster[0].attributes.opacity}else a.attributes.opacity&&(b=a.attributes.opacity);return b},stroke:function(a){if(a.cluster)var b=a.cluster[0].attributes.colour?a.cluster[0].attributes.colour:"#2b2f76";else if(a.attributes.colour)b=a.attributes.colour;else if(l.length){var c=a.attributes.value;$.each(l,function(a,d){if(c>=d.low&&c<d.high)return b=
d.fill,!1});b=void 0!=b?"#"+b:"#000000"}else b="#f5902e";return b},label:function(a){var b="";a.cluster&&1<a.attributes.count&&(b=a.attributes.count);return b}}});if(l.length){var r=[],s;$.each(l,function(a,b){s="#"+b.fill;var c=new OpenLayers.Rule({filter:new OpenLayers.Filter.Comparison({type:OpenLayers.Filter.Comparison.BETWEEN,property:"value",lowerBoundary:b.low,upperBoundary:b.high}),symbolizer:{fillColor:s,strokeColor:s,graphicName:"circle",pointRadius:10},title:b.low+"-"+b.high});r.push(c)});
j.addRules(r)}j=new OpenLayers.StyleMap({"default":j,select:{fillColor:"#ffdc33",strokeColor:"#ff9933"}});a=new OpenLayers.Layer.Vector(b,{dir:h,projection:n,strategies:[new OpenLayers.Strategy.BBOX({ratio:1.5}),new OpenLayers.Strategy.Refresh({force:!0,interval:1E3*g}),new OpenLayers.Strategy.AttributeCluster({attribute:"colour",distance:m,threshold:p})],legendURL:d,s3_layer_id:a.id,s3_layer_type:o,s3_style:l,styleMap:j,protocol:new OpenLayers.Protocol.HTTP({url:c,format:S3.gis.format_geojson})});
a.setVisibility(k);a.events.on({featureselected:onGeojsonFeatureSelect,featureunselected:onFeatureUnselect,loadstart:showThrobber,loadend:hideThrobber,loadcancel:hideThrobber});map.addLayer(a);S3.gis.layers_all.push(a)}
function addGoogleLayers(){var a=S3.gis.Google,b;if(a.MapMaker||a.MapMakerHybrid){if(a.Satellite&&(b=new OpenLayers.Layer.Google(a.Satellite.name,{type:G_SATELLITE_MAP,sphericalMercator:!0,s3_layer_id:a.Satellite.id,s3_layer_type:"google"}),map.addLayer(b),"satellite"==a.Base&&map.setBaseLayer(b)),a.Maps&&(b=new OpenLayers.Layer.Google(a.Maps.name,{type:G_NORMAL_MAP,sphericalMercator:!0,s3_layer_id:a.Maps.id,s3_layer_type:"google"}),map.addLayer(b),"maps"==a.Base&&map.setBaseLayer(b)),a.Hybrid&&(b=
new OpenLayers.Layer.Google(a.Hybrid.name,{type:G_HYBRID_MAP,sphericalMercator:!0,s3_layer_id:a.Hybrid.id,s3_layer_type:"google"}),map.addLayer(b),"maps"==a.Base&&map.setBaseLayer(b)),a.Terrain&&(b=new OpenLayers.Layer.Google(a.Terrain.name,{type:G_PHYSICAL_MAP,sphericalMercator:!0,s3_layer_id:a.Terrain.id,s3_layer_type:"google"}),map.addLayer(b),"terrain"==a.Base&&map.setBaseLayer(b)),a.MapMaker&&(b=new OpenLayers.Layer.Google(a.MapMaker.name,{type:G_MAPMAKER_NORMAL_MAP,sphericalMercator:!0,s3_layer_id:b.id,
s3_layer_type:"google"}),map.addLayer(b),"mapmaker"==a.Base&&map.setBaseLayer(b)),a.MapMakerHybrid)b=new OpenLayers.Layer.Google(a.MapMakerHybrid.name,{type:G_MAPMAKER_HYBRID_MAP,sphericalMercator:!0,s3_layer_id:b.id,s3_layer_type:"google"}),map.addLayer(b),"mapmakerhybrid"==a.Base&&map.setBaseLayer(b)}else if(a.Satellite&&(b=new OpenLayers.Layer.Google(a.Satellite.name,{type:"satellite",numZoomLevels:22,s3_layer_id:a.Satellite.id,s3_layer_type:"google"}),map.addLayer(b),"satellite"==a.Base&&map.setBaseLayer(b)),
a.Maps&&(b=new OpenLayers.Layer.Google(a.Maps.name,{numZoomLevels:20,s3_layer_id:a.Maps.id,s3_layer_type:"google"}),map.addLayer(b),"maps"==a.Base&&map.setBaseLayer(b)),a.Hybrid&&(b=new OpenLayers.Layer.Google(a.Hybrid.name,{type:"hybrid",numZoomLevels:20,s3_layer_id:a.Hybrid.id,s3_layer_type:"google"}),map.addLayer(b),"hybrid"==a.Base&&map.setBaseLayer(b)),a.Terrain)b=new OpenLayers.Layer.Google(a.Terrain.name,{type:"terrain",s3_layer_id:a.Terrain.id,s3_layer_type:"google"}),map.addLayer(b),"terrain"==
a.Base&&map.setBaseLayer(b)}
function addGPXLayer(a){var b=a.name,c=a.url,d=S3.gis.marker_url+a.marker_image,e=a.marker_height,f=a.marker_width,g=void 0!=a.waypoints?a.waypoints:!0,h=void 0!=a.tracks?a.tracks:!0,k=void 0!=a.routes?a.routes:!0,j=void 0!=a.visibility?a.visibility:!0;if(void 0!=a.dir){var m=a.dir;-1==$.inArray(m,S3.gis.dirs)&&S3.gis.dirs.push(m)}else m="";var p=void 0!=a.opacity?a.opacity:1,n=void 0!=a.cluster_distance?a.cluster_distance:S3.gis.cluster_distance,o=void 0!=a.cluster_threshold?a.cluster_threshold:
S3.gis.cluster_threshold,l=OpenLayers.Util.extend({},OpenLayers.Feature.Vector.style["default"]);g?(l.graphicOpacity=p,l.graphicWidth=f,l.graphicHeight=e,l.graphicXOffset=-(f/2),l.graphicYOffset=-e,l.externalGraphic=d):l.externalGraphic="";l.strokeColor="blue";l.strokeWidth=6;l.strokeOpacity=p;a=new OpenLayers.Layer.Vector(b,{dir:m,projection:S3.gis.proj4326,strategies:[new OpenLayers.Strategy.Fixed,new OpenLayers.Strategy.Cluster({distance:n,threshold:o})],s3_layer_id:a.id,s3_layer_type:"gpx",legendURL:d,
style:l,protocol:new OpenLayers.Protocol.HTTP({url:c,format:new OpenLayers.Format.GPX({extractAttributes:!0,extractWaypoints:g,extractTracks:h,extractRoutes:k})})});a.setVisibility(j);a.events.on({featureselected:onGpxFeatureSelect,featureunselected:onFeatureUnselect,loadstart:showThrobber,loadend:hideThrobber,loadcancel:hideThrobber});map.addLayer(a);S3.gis.layers_all.push(a)}
function addKMLLayer(a){var b=a.name,c=a.url,d=S3.gis.marker_url+a.marker_image,e=void 0!=a.title?a.title:"name",f=void 0!=a.body?a.body:"description",g=void 0!=a.refresh?a.refresh:900,h=void 0!=a.visibility?a.visibility:!0;if(void 0!=a.dir){var k=a.dir;-1==$.inArray(k,S3.gis.dirs)&&S3.gis.dirs.push(k)}else k="";var j=void 0!=a.opacity?a.opacity:1,m=void 0!=a.cluster_distance?a.cluster_distance:S3.gis.cluster_distance,p=void 0!=a.cluster_threshold?a.cluster_threshold:S3.gis.cluster_threshold;S3.gis.image=
new Image;S3.gis.image.onload=s3_gis_scaleImage;S3.gis.image.src=d;j=new OpenLayers.Style({label:"${label}",labelAlign:"cm",pointRadius:"${radius}",fillColor:"${fill}",fillOpacity:j,strokeColor:"${stroke}",strokeWidth:2,strokeOpacity:j,graphicWidth:"${graphicWidth}",graphicHeight:"${graphicHeight}",graphicXOffset:"${graphicXOffset}",graphicYOffset:"${graphicYOffset}",graphicOpacity:j,graphicName:"circle",externalGraphic:"${externalGraphic}"},{context:{graphicWidth:function(a){return a.cluster?"":
S3.gis.image.width},graphicHeight:function(a){return a.cluster?"":S3.gis.image.height},graphicXOffset:function(a){return a.cluster?"":-(S3.gis.image.width/2)},graphicYOffset:function(a){return a.cluster?"":-S3.gis.image.height},externalGraphic:function(a){return a.cluster?"":d},radius:function(a){return a.cluster?Math.min(a.attributes.count/2,8)+10:10},fill:function(a){return a.cluster?"#8087ff":"#f5902e"},stroke:function(a){return a.cluster?"#2b2f76":"#f5902e"},label:function(a){var b="";a.cluster&&
1<a.attributes.count&&(b=a.attributes.count);return b}}});j=new OpenLayers.StyleMap({"default":j,select:{fillColor:"#ffdc33",strokeColor:"#ff9933"}});a=new OpenLayers.Layer.Vector(b,{dir:k,projection:S3.gis.proj4326,strategies:[new OpenLayers.Strategy.Fixed,new OpenLayers.Strategy.Cluster({distance:m,threshold:p}),new OpenLayers.Strategy.Refresh({force:!0,interval:1E3*g})],s3_layer_id:a.id,s3_layer_type:"kml",legendURL:d,styleMap:j,protocol:new OpenLayers.Protocol.HTTP({url:c,format:S3.gis.format_kml})});
a.title=e;a.body=f;a.setVisibility(h);a.events.on({featureselected:onKmlFeatureSelect,featureunselected:onFeatureUnselect,loadstart:showThrobber,loadend:hideThrobber,loadcancel:hideThrobber});map.addLayer(a);S3.gis.layers_all.push(a)}var s3_gis_scaleImage=function(){var a=S3.gis.image.height/S3.gis.image.width,b=Math.min(S3.gis.image.width,S3.gis.max_w),a=b*a;a>S3.gis.max_h&&(a=S3.gis.max_h,b*=b/a);S3.gis.image.height=a;S3.gis.image.width=b};
function addOSMLayer(a){var b=a.name,c=[a.url1];void 0!=a.url2&&c.push(a.url2);void 0!=a.url3&&c.push(a.url3);var d=void 0!=a.visibility?a.visibility:!0;if(void 0!=a.dir){var e=a.dir;-1==$.inArray(e,S3.gis.dirs)&&S3.gis.dirs.push(e)}else e="";b=new OpenLayers.Layer.TMS(b,c,{dir:e,type:"png",getURL:osm_getTileURL,displayOutsideMaxExtent:!0,numZoomLevels:void 0!=a.zoomLevels?a.zoomLevels:19,isBaseLayer:void 0!=a.base?a.base:!0,s3_layer_id:a.id,s3_layer_type:"openstreetmap"});void 0!=a.attribution&&
(b.attribution=a.attribution);b.setVisibility(d);map.addLayer(b);a._base&&map.setBaseLayer(b)}function osm_getTileURL(a){var b=this.map.getResolution(),c=Math.round((a.left-this.maxExtent.left)/(b*this.tileSize.w)),a=Math.round((this.maxExtent.top-a.top)/(b*this.tileSize.h)),b=this.map.getZoom(),d=Math.pow(2,b);if(0>a||a>=d)return OpenLayers.Util.getImagesLocation()+"404.png";c=b+"/"+(c%d+d)%d+"/"+a+"."+this.type;a=this.url;a instanceof Array&&(a=this.selectUrl(c,a));return a+c}
function addOWMLayers(){var a=S3.gis.OWM,b;a.station&&(b=new OpenLayers.Layer.Vector.OWMStations(a.station.name,{dir:a.station.dir,s3_layer_id:a.station.id,s3_layer_type:"openweathermap"}),b.setVisibility(a.city.visibility),b.events.on({featureselected:b.onSelect,featureunselected:b.onUnselect,loadstart:showThrobber,loadend:hideThrobber,loadcancel:hideThrobber}),map.addLayer(b),S3.gis.layers_all.push(b));a.city&&(b=new OpenLayers.Layer.Vector.OWMWeather(a.city.name,{dir:a.station.dir,s3_layer_id:a.city.id,
s3_layer_type:"openweathermap"}),b.setVisibility(a.city.visibility),b.events.on({featureselected:b.onSelect,featureunselected:b.onUnselect,loadstart:showThrobber,loadend:hideThrobber,loadcancel:hideThrobber}),map.addLayer(b),S3.gis.layers_all.push(b))}
function addTMSLayer(a){var b=a.name,c=[a.url];void 0!=a.url2&&c.push(a.url2);void 0!=a.url3&&c.push(a.url3);var d=a.layername,e=void 0!=a.zoomLevels?a.zoomLevels:19;if(void 0!=a.dir){var f=a.dir;-1==$.inArray(f,S3.gis.dirs)&&S3.gis.dirs.push(f)}else f="";b=new OpenLayers.Layer.TMS(b,c,{dir:f,s3_layer_id:a.id,s3_layer_type:"tms",layername:d,type:void 0!=a.format?a.format:"png",numZoomLevels:e});void 0!=a.attribution&&(b.attribution=a.attribution);map.addLayer(b);a._base&&map.setBaseLayer(b)}
function addWFSLayer(a){var b=a.name,c=a.url;void 0!=a.username&&void 0!=a.password&&(c=c.replace("://","://"+a.username+":"+a.password+"@"));var d=a.title,e=a.featureType,f=a.featureNS,g=a.schema,h=void 0!=a.version?a.version:"1.1.0",k=void 0!=a.geometryName?a.geometryName:"the_geom",j=void 0!=a.styleField?a.styleField:"",m=void 0!=a.styleValues?a.styleValues:{},p=void 0!=a.visibility?a.visibility:!0;if(void 0!=a.dir){var n=a.dir;-1==$.inArray(n,S3.gis.dirs)&&S3.gis.dirs.push(n)}else n="";var o=
void 0!=a.opacity?a.opacity:1,l=void 0!=a.cluster_distance?a.cluster_distance:S3.gis.cluster_distance,r=void 0!=a.cluster_threshold?a.cluster_threshold:S3.gis.cluster_threshold,c=new OpenLayers.Protocol.WFS({version:h,srsName:void 0!=a.projection?"EPSG:"+a.projection:"EPSG:4326",url:c,featureType:e,featureNS:f,geometryName:k,schema:g}),e={context:{radius:function(a){var b=12;a.cluster&&(b=Math.min(a.attributes.count/2,8)+12);return b},fill:function(a){var b="#f5902e";a.cluster&&(b="#8087ff");return b},
stroke:function(a){var b="#f5902e";a.cluster&&(b="#2b2f76");return b},label:function(a){var b="";a.cluster&&1<a.attributes.count&&(b=a.attributes.count);return b}}};j&&m&&(e.context.fill=function(a){var b;$.each(m,function(c,d){c==a.attributes[j]&&(b=d)});b||(b="#f5902e");a.cluster&&(b="#8087ff");return b},e.context.stroke=function(a){var b;$.each(m,function(c,d){c==a.attributes[j]&&(b=d)});b||(b="#f5902e");a.cluster&&(b="#2b2f76");return b});o=new OpenLayers.Style({label:"${label}",labelAlign:"cm",
pointRadius:"${radius}",fillColor:"${fill}",fillOpacity:o/2,strokeColor:"${stroke}",strokeWidth:2,strokeOpacity:o},e);o=new OpenLayers.StyleMap({"default":o,select:{fillColor:"#ffdc33",strokeColor:"#ff9933"}});projection=!projection||"4326"==projection?S3.gis.proj4326:new OpenLayers.Projection("EPSG:"+projection);a=new OpenLayers.Layer.Vector(b,{maxFeatures:1E3,strategies:[new OpenLayers.Strategy.BBOX({ratio:1.5}),new OpenLayers.Strategy.Cluster({distance:l,threshold:r})],dir:n,s3_layer_id:a.id,s3_layer_type:"wfs",
projection:projection,protocol:c,styleMap:o});a.title=d;a.setVisibility(p);a.events.on({featureselected:onWfsFeatureSelect,featureunselected:onFeatureUnselect,loadstart:showThrobber,loadend:hideThrobber,loadcancel:hideThrobber});map.addLayer(a);S3.gis.layers_all.push(a)}
function addWMSLayer(a){var b=a.name,c=a.url;void 0!=a.username&&void 0!=a.password&&(c=c.replace("://","://"+a.username+":"+a.password+"@"));var d=a.layers,e=void 0!=a.visibility?a.visibility:!0;if(void 0!=a.dir){var f=a.dir;-1==$.inArray(f,S3.gis.dirs)&&S3.gis.dirs.push(f)}else f="";var g=void 0!=a.base?a.base:!1,h=void 0!=a.format?a.format:"image/png",k=void 0!=a.version?a.version:"1.1.1",j=void 0!=a.map?a.map:"",m=void 0!=a.style?a.style:"",p=void 0!=a.bgcolor?"0x"+a.bgcolor:"",n=void 0!=a.buffer?
a.buffer:0,o=void 0!=a.tiled?a.tiled:!1,l=void 0!=a.opacity?a.opacity:1;if(void 0!=a.legendURL)var r=a.legendURL;b=new OpenLayers.Layer.WMS(b,c,{layers:d},{dir:f,wrapDateLine:!0,isBaseLayer:g,transparent:void 0!=a.transparent?a.transparent:!0,s3_layer_id:a.id,s3_layer_type:"wms",queryable:void 0!=a.queryable?a.queryable:1,visibility:e});j&&(b.params.MAP=j);h&&(b.params.FORMAT=h);k&&(b.params.VERSION=k);m&&(b.params.STYLES=m);p&&(b.params.BGCOLOR=p);o&&(b.params.TILED=!0,b.params.TILESORIGIN=[map.maxExtent.left,
map.maxExtent.bottom]);g||(b.opacity=l,b.buffer=n?n:0);r&&(b.legendURL=r);map.addLayer(b);a._base&&map.setBaseLayer(b)}
function addXYZLayer(a){var b=a.name,c=[a.url];void 0!=a.url2&&c.push(a.url2);void 0!=a.url3&&c.push(a.url3);var d=a.layername,e=void 0!=a.zoomLevels?a.zoomLevels:19;if(void 0!=a.dir){var f=a.dir;-1==$.inArray(f,S3.gis.dirs)&&S3.gis.dirs.push(f)}else f="";b=new OpenLayers.Layer.XYZ(b,c,{dir:f,s3_layer_id:a.id,s3_layer_type:"xyz",layername:d,type:void 0!=a.format?a.format:"png",numZoomLevels:e});void 0!=a.attribution&&(b.attribution=a.attribution);map.addLayer(b);a._base&&map.setBaseLayer(b)}
function showThrobber(){$("#layer_throbber").show().removeClass("hide");S3.gis.layers_loading++}function hideThrobber(){S3.gis.layers_loading--;0>=S3.gis.layers_loading&&$("#layer_throbber").hide().addClass("hide")}function s3_gis_loadDetails(a,b,c){$.ajax({url:a,success:function(a){$("#"+b).html(a);c.updateSize()},error:function(a,e,f){msg="UNAUTHORIZED"==f?S3.i18n.gis_requires_login:a.responseText;$("#"+b+"_contentDiv").html(msg);c.updateSize()},dataType:"html"})}
function onGeojsonFeatureSelect(a){s3_gis_tooltipUnselect(a);var a=a.feature,b=S3.uid(),c=a.geometry.getBounds().getCenterLonLat(),d=!1;if(a.cluster){for(var e,f,g=S3.i18n.gis_cluster_multiple+":<ul>",h=0;h<a.cluster.length;h++)e=void 0!=a.cluster[h].attributes.popup?a.cluster[h].attributes.popup.split("<br />",1)[0]:a.cluster[h].attributes.name,void 0!=a.cluster[h].attributes.url?(f=a.cluster[h].attributes.url,g+="<li><a href='javascript:s3_gis_loadClusterPopup(\""+f+'", "'+b+"\")'>"+e+"</a></li>"):
g+="<li>"+e+"</li>";g=g+"</ul>"+("<div align='center'><a href='javascript:s3_gis_zoomToSelectedFeature("+c.lon+","+c.lat+", 3)'>Zoom in</a></div>")}else if(void 0!=a.attributes.url)g=S3.i18n.gis_loading+"...<img src='"+S3.gis.ajax_loader+"' border=0 />";else{e=void 0==a.attributes.name?"":"<h3>"+a.attributes.name+"</h3>";f=void 0==a.attributes.description?"":"<p>"+a.attributes.description+"</p>";g=void 0==a.attributes.link?"":'<a href="'+a.attributes.link+'" target="_blank">'+a.attributes.link+"</a>";
if(void 0==a.attributes.data)h="";else if(0===a.attributes.data.indexOf("http://"))var d=!0,k=S3.uid(),h='<div id="'+k+'">'+S3.i18n.gis_loading+"...<img src='"+S3.gis.ajax_loader+"' border=0 /></div>";else h="<p>"+a.attributes.data+"</p>";var j=void 0==a.attributes.image?"":0===a.attributes.image.indexOf("http://")?'<img src="'+a.attributes.image+'" height=300 width=300>':"",g=e+f+g+h+j}c=new OpenLayers.Popup.FramedCloud(b,c,new OpenLayers.Size(200,200),g,null,!0,onPopupClose);void 0!=a.attributes.url?
s3_gis_loadDetails(a.attributes.url,b+"_contentDiv",c):d&&s3_gis_loadDetails(a.attributes.data,k,c);a.popup=c;map.addPopup(c)}function onGpxFeatureSelect(a){s3_gis_tooltipUnselect(a)}
function onKmlFeatureSelect(a){s3_gis_tooltipUnselect(a);var a=a.feature,b=S3.uid(),c=a.geometry.getBounds().getCenterLonLat();if(a.cluster){for(var d,e=S3.i18n.gis_cluster_multiple+":<ul>",f=0;f<a.cluster.length;f++)d=a.cluster[f].attributes.name,e+="<li>"+d+"</li>";e=e+"</ul>"+("<div align='center'><a href='javascript:s3_gis_zoomToSelectedFeature("+c.lon+","+c.lat+", 3)'>Zoom in</a></div>")}else{var g=a.attributes;if(void 0!=a.style.balloonStyle)e=a.style.balloonStyle.replace(/{([^{}]*)}/g,function(a,
b){var c=g[b];return"string"===typeof c||"number"===typeof c?c:a});else{f=a.layer.title;d=typeof g[f];for(var e="object"==d?g[f].value:g[f],h=a.layer.body.split(" "),k="",f=0;f<h.length;f++){d=typeof g[h[f]];var j="";"object"==d?(d=g[h[f]].displayName,""==d&&(d=h[f]),j="<b>"+d+"</b>: "+g[h[f]].value+"<br />"):void 0!=g[h[f]]&&(j=g[h[f]]+"<br />");k+=j}e="<h3>"+e+"</h3>"+k}-1!=e.search("<script")&&(e="Content contained Javascript! Escaped content below.<br />"+e.replace(/</g,"<"))}b=new OpenLayers.Popup.FramedCloud(b,
c,new OpenLayers.Size(200,200),e,null,!0,onPopupClose);a.popup=b;map.addPopup(b)}
function onWfsFeatureSelect(a){s3_gis_tooltipUnselect(a);var a=a.feature,b=S3.uid(),c=a.geometry.getBounds().getCenterLonLat(),d=a.layer.title;if(a.cluster){for(var e,f=S3.i18n.gis_cluster_multiple+":<ul>",g=Math.min(a.cluster.length,9),h=0;h<g;h++)e=a.cluster[h].attributes[d],f+="<li>"+e+"</li>";f=f+"</ul>"+("<div align='center'><a href='javascript:s3_gis_zoomToSelectedFeature("+c.lon+","+c.lat+", 3)'>Zoom in</a></div>")}else{e=a.attributes;var d=e[d],k="";$.each(e,function(a,b){k+="<b>"+a+":</b> "+
b+"<br />"});f="<h3>"+d+"</h3>"+k}b=new OpenLayers.Popup.FramedCloud(b,c,new OpenLayers.Size(200,200),f,null,!0,onPopupClose);a.popup=b;map.addPopup(b)}
function addControls(){map.addControl(new OpenLayers.Control.ScaleLine);"mgrs"==S3.gis.mouse_position?map.addControl(new OpenLayers.Control.MGRSMousePosition):S3.gis.mouse_position&&map.addControl(new OpenLayers.Control.MousePosition);map.addControl(new OpenLayers.Control.Permalink);map.addControl(new OpenLayers.Control.OverviewMap({mapOptions:S3.gis.options}));addPopupControls()}
function addPopupControls(){S3.gis.popupControl=new OpenLayers.Control.SelectFeature(S3.gis.layers_all,{toggle:!0});S3.gis.highlightControl=new OpenLayers.Control.SelectFeature(S3.gis.layers_all,{hover:!0,highlightOnly:!0,eventListeners:{featurehighlighted:s3_gis_tooltipSelect,featureunhighlighted:s3_gis_tooltipUnselect}});map.addControl(S3.gis.highlightControl);map.addControl(S3.gis.popupControl);S3.gis.highlightControl.activate();S3.gis.popupControl.activate()}
function onFeatureUnselect(a){a=a.feature;a.popup&&(map.removePopup(a.popup),a.popup.destroy(),delete a.popup)}function onPopupClose(){for(;map.popups.length;)map.removePopup(map.popups[0])}
function s3_gis_tooltipSelect(a){a=a.feature;if(!a.cluster&&null==a.popup){null!=S3.gis.tooltipPopup&&(map.removePopup(S3.gis.tooltipPopup),S3.gis.tooltipPopup.destroy(),null!=S3.gis.lastFeature&&delete S3.gis.lastFeature.popup,S3.gis.tooltipPopup=null);S3.gis.lastFeature=a;var b=a.geometry.getBounds().getCenterLonLat(),c=a.attributes,d;if(void 0!=c.popup)d=c.popup;else if(void 0!=c.name)d=c.name;else{var e=a.layer.title;void 0!=e&&(d="object"==typeof c[e]?c[e].value:c[e])}d&&(S3.gis.tooltipPopup=
new OpenLayers.Popup("activetooltip",b,new OpenLayers.Size(80,12),d,!1));null!=S3.gis.tooltipPopup&&(S3.gis.tooltipPopup.contentDiv.style.backgroundColor="ffffcb",S3.gis.tooltipPopup.contentDiv.style.overflow="hidden",S3.gis.tooltipPopup.contentDiv.style.padding="3px",S3.gis.tooltipPopup.contentDiv.style.margin="10px",S3.gis.tooltipPopup.closeOnMove=!0,S3.gis.tooltipPopup.autoSize=!0,S3.gis.tooltipPopup.opacity=0.7,a.popup=S3.gis.tooltipPopup,map.addPopup(S3.gis.tooltipPopup))}}
function s3_gis_tooltipUnselect(a){a=a.feature;null!=a&&null!=a.popup&&(map.removePopup(a.popup),a.popup.destroy(),delete a.popup,S3.gis.tooltipPopup=null,S3.gis.lastFeature=null)}function s3_gis_loadClusterPopup(a,b){var c=S3.i18n.gis_loading+"...<img src='"+S3.gis.ajax_loader+"' border=0 />";$("#"+b+"_contentDiv").html(c);$.get(a,function(a){$("#"+b+"_contentDiv").html(a);map.popups[0].updateSize()},"html")}
function s3_gis_zoomToSelectedFeature(a,b,c){a=new OpenLayers.LonLat(a,b);c=map.getZoom()+c;map.setCenter(a,c);for(c=0;c<map.popups.length;c++)map.removePopup(map.popups[c])}
function addGeolocateControl(a){var b=S3.gis.draftLayer,c={fillColor:"#000",fillOpacity:0.1,strokeWidth:0},d=new OpenLayers.Control.Geolocate({geolocationOptions:{enableHighAccuracy:!1,maximumAge:0,timeout:7E3}});map.addControl(d);d.events.register("locationupdated",this,function(a){b.removeAllFeatures();var d=new OpenLayers.Feature.Vector(OpenLayers.Geometry.Polygon.createRegularPolygon(new OpenLayers.Geometry.Point(a.point.x,a.point.y),a.position.coords.accuracy/2,40,0),{},c);b.addFeatures([new OpenLayers.Feature.Vector(a.point,
{},{graphicName:"cross",strokeColor:"#f00",strokeWidth:2,fillOpacity:0,pointRadius:10}),d]);map.zoomToExtent(b.getDataExtent());s3_gis_pulsate(d)});d.events.register("locationfailed",this,function(){OpenLayers.Console.log("Location detection failed")});S3.gis.geolocateControl=d;d=new Ext.Toolbar.Button({iconCls:"geolocation",tooltip:S3.i18n.gis_geoLocate,handler:function(){S3.gis.draftLayer.removeAllFeatures();S3.gis.geolocateControl.activate()}});a.addButton(d)}
function s3_gis_pulsate(a){var b=a.geometry.getCentroid(),c=a.geometry.getBounds(),d=Math.abs((c.right-c.left)/2),e=0,f="up";window.resizeInterval=window.setInterval(function(){16<e&&clearInterval(window.resizeInterval);var c=0.03*d/d;switch(e){case 4:case 12:f="down";break;case 8:f="up"}"up"!==f&&(c=-Math.abs(c));a.geometry.resize(1+c,b);S3.gis.draftLayer.drawFeature(a);e++},50,b,d)}
function addGoogleEarthControl(a){var b=new Ext.Toolbar.Button({iconCls:"googleearth",tooltip:S3.gis.Google.Earth,enableToggle:!0,toggleHandler:function(a,b){!0===b?(S3.gis.mapPanelContainer.getLayout().setActiveItem(1),S3.gis.mapWin.items.items[0].collapse(),S3.gis.googleEarthPanel.on("pluginready",function(){addGoogleEarthKmlLayers()})):(S3.gis.mapPanelContainer.getLayout().setActiveItem(0),S3.gis.mapWin.items.items[0].expand())}});a.addSeparator();a.addButton(b)}
function addGoogleEarthKmlLayers(){if(S3.gis.layers_features)for(var a=0;a<S3.gis.layers_features.length;a++){var b=S3.gis.layers_features[a];if(void 0!=b.visibility?b.visibility:1)b=S3.public_url+b.url.replace("geojson","kml"),google.earth.fetchKml(S3.gis.googleEarthPanel.earth,b,googleEarthKmlLoaded)}}function googleEarthKmlLoaded(a){a&&S3.gis.googleEarthPanel.earth.getFeatures().appendChild(a)}
function addGoogleStreetviewControl(a){var b=OpenLayers.Class(OpenLayers.Control,{defaults:{pixelTolerance:1,stopSingle:!0},initialize:function(a){this.handlerOptions=OpenLayers.Util.extend({},this.defaults);OpenLayers.Control.prototype.initialize.apply(this,arguments);this.handler=new OpenLayers.Handler.Click(this,{click:this.trigger},this.handlerOptions)},trigger:function(a){openStreetviewPopup(map.getLonLatFromViewPortPx(a.xy))}});S3.gis.StreetviewClicker=new b({autoactivate:!1});map.addControl(S3.gis.StreetviewClicker);
b=new Ext.Toolbar.Button({iconCls:"streetview",tooltip:S3.gis.Google.StreetviewButton,toggleGroup:"controls",allowDepress:!0,enableToggle:!0,toggleHandler:function(a,b){!0===b?S3.gis.StreetviewClicker.activate():S3.gis.StreetviewClicker.deactivate()}});a.addSeparator();a.addButton(b)}
function openStreetviewPopup(a){a||(a=map.getCenter());S3.gis.sv_popup&&S3.gis.sv_popup.anc&&S3.gis.sv_popup.close();S3.gis.sv_popup=new GeoExt.Popup({title:S3.gis.Google.StreetviewTitle,location:a,width:300,height:300,collapsible:!0,map:S3.gis.mapPanel,items:[new gxp.GoogleStreetViewPanel]});S3.gis.sv_popup.show()}
function addMeasureControls(a){var b=new OpenLayers.Style;b.addRules([new OpenLayers.Rule({symbolizer:{Point:{pointRadius:5,graphicName:"circle",fillColor:"white",fillOpacity:1,strokeWidth:1,strokeOpacity:1,strokeColor:"#f5902e"},Line:{strokeWidth:3,strokeOpacity:1,strokeColor:"#f5902e",strokeDashstyle:"dash"},Polygon:{strokeWidth:2,strokeOpacity:1,strokeColor:"#f5902e",fillColor:"white",fillOpacity:0.5}}})]);var b=new OpenLayers.StyleMap({"default":b}),c=new OpenLayers.Control.Measure(OpenLayers.Handler.Path,
{geodesic:!0,persist:!0,handlerOptions:{layerOptions:{styleMap:b}}});c.events.on({measure:function(a){alert(S3.i18n.gis_length_message+" "+a.measure.toFixed(2)+" "+a.units)}});c=new GeoExt.Action({control:c,map:map,iconCls:"measure-off",tooltip:S3.i18n.gis_length_tooltip,toggleGroup:"controls",allowDepress:!0,enableToggle:!0});a.add(c);void 0===S3.gis.loc_select&&(b=new OpenLayers.Control.Measure(OpenLayers.Handler.Polygon,{geodesic:!0,persist:!0,handlerOptions:{layerOptions:{styleMap:b}}}),b.events.on({measure:function(a){alert(S3.i18n.gis_area_message+
" "+a.measure.toFixed(2)+" "+a.units+"2")}}),b=new GeoExt.Action({control:b,map:map,iconCls:"measure-area",tooltip:S3.i18n.gis_area_tooltip,toggleGroup:"controls",allowDepress:!0,enableToggle:!0}),a.add(b))}
function addNavigationControl(a){var b=new OpenLayers.Control.NavigationHistory;map.addControl(b);b.activate();var c=new Ext.Toolbar.Button({iconCls:"back",tooltip:S3.i18n.gis_navPrevious,handler:b.previous.trigger}),b=new Ext.Toolbar.Button({iconCls:"next",tooltip:S3.i18n.gis_navNext,handler:b.next.trigger});a.addButton(c);a.addButton(b)}
function addPointControl(a,b){OpenLayers.Handler.PointS3=OpenLayers.Class(OpenLayers.Handler.Point,{dblclick:function(){return!0},CLASS_NAME:"OpenLayers.Handler.PointS3"});S3.gis.pointButton=new GeoExt.Action({control:new OpenLayers.Control.DrawFeature(S3.gis.draftLayer,OpenLayers.Handler.PointS3,{featureAdded:function(a){S3.gis.lastDraftFeature?S3.gis.lastDraftFeature.destroy():1<S3.gis.draftLayer.features.length&&S3.gis.draftLayer.features[0].destroy();var b=a.geometry.getBounds().getCenterLonLat();
b.transform(S3.gis.projection_current,S3.gis.proj4326);$("#gis_location_lon").val(b.lon);$("#gis_location_lat").val(b.lat);S3.gis.lastDraftFeature=a}}),handler:function(){S3.gis.pointButton.items[0].pressed?$(".olMapViewport").addClass("crosshair"):$(".olMapViewport").removeClass("crosshair")},map:map,iconCls:"drawpoint-off",tooltip:S3.i18n.gis_draw_feature,toggleGroup:"controls",allowDepress:!0,enableToggle:!0,pressed:b});a.add(S3.gis.pointButton)}
function addPolygonControl(a,b,c){S3.gis.polygonButton=new GeoExt.Action({control:new OpenLayers.Control.DrawFeature(S3.gis.draftLayer,c?OpenLayers.Handler.Polygon:OpenLayers.Handler.RegularPolygon,{handlerOptions:c?{sides:4,snapAngle:90}:{},featureAdded:function(a){S3.gis.lastDraftFeature&&S3.gis.lastDraftFeature.destroy();var b=a.geometry.transform(S3.gis.projection_current,S3.gis.proj4326).toString();$("#gis_search_polygon_input").val(b).trigger("change");$("#gis_location_wkt").val(b);S3.gis.lastDraftFeature=
a}}),handler:function(){S3.gis.polygonButton.items[0].pressed?$(".olMapViewport").addClass("crosshair"):$(".olMapViewport").removeClass("crosshair")},map:map,iconCls:"drawpolygon-off",tooltip:S3.i18n.gis_draw_polygon,toggleGroup:"controls",allowDepress:!0,pressed:b,enableToggle:!0,activateOnEnable:!0,deactivateOnDisable:!0});a.add(S3.gis.polygonButton)}
function addPotlatchButton(a){var b=new Ext.Toolbar.Button({iconCls:"potlatch",tooltip:S3.i18n.gis_potlatch,handler:function(){var a=map.getZoom();if(14>a)alert(S3.gis.osm_oauth);else{var b=map.getCenter();b.transform(map.getProjectionObject(),S3.gis.proj4326);a=S3.Ap.concat("/gis/potlatch2/potlatch2.html")+"?lat="+b.lat+"&lon="+b.lon+"&zoom="+a;window.open(a)}}});a.addSeparator();a.addButton(b)}
function addSaveButton(a){var b=new Ext.Toolbar.Button({iconCls:"save",tooltip:S3.i18n.gis_save,handler:function(){var a=getState(),b=Ext.util.JSON.encode(a.layers),e=Ext.util.JSON.encode(a.plugins),f=S3.gis.config_id?S3.Ap.concat("/gis/config/"+S3.gis.config_id+".url/update"):S3.Ap.concat("/gis/config.url/create");Ext.Ajax.request({url:f,method:"POST",success:function(a){if(a=Ext.decode(a.responseText).message.split("=",2)[1])S3.gis.config_id=a,a=S3.Ap.concat("/gis/config/",a,"/layer_entity"),$("#gis_menu_config").attr("href",
a)},params:{lat:a.lat,lon:a.lon,zoom:a.zoom,layers:b,plugins:e}})}});a.addSeparator();a.addButton(b)}
function getState(){var a={},b=map.getCenter();b.transform(map.getProjectionObject(),S3.gis.proj4326);a.lon=b.lon;a.lat=b.lat;a.zoom=map.getZoom();var c=[],d,e=map.baseLayer.s3_layer_id;Ext.iterate(map.layers,function(a){var b=a.s3_layer_id;d={id:b};a.visibility&&(d.visible=a.visibility);b==e&&(d.base=!0);a.s3_style&&(d.style=a.s3_style);c.push(d)});a.layers=c;var f=[];Ext.iterate(S3.gis.plugins,function(a){a.getState&&f.push(a.getState())});a.plugins=f;return a}
function addPdfControl(a){selectPdfControl=new OpenLayers.Control;OpenLayers.Util.extend(selectPdfControl,{draw:function(){this.box=new OpenLayers.Handler.Box(this,{done:this.getPdf});this.box.activate()},response:function(a){this.w.destroy();var a=(new OpenLayers.Format.GML).read(a.responseText),b=a.length+" pdfs. <br /><ul>";if(a.length)for(var e=0;e<a.length;e++)var f=a[e],b=b+("<li><a href='"+a[e].attributes.url+"'>"+(f.attributes.utm_zone+f.attributes.grid_zone+f.attributes.grid_square+f.attributes.easting+
f.attributes.northing)+"</a></li>");this.w=new Ext.Window({html:b+"</ul>",width:300,title:"Results",height:200});this.w.show()},getPdf:function(a){var b=map.getLonLatFromPixel(new OpenLayers.Pixel(a.left,a.bottom)).transform(S3.gis.projection_current,S3.gis.proj4326),a=map.getLonLatFromPixel(new OpenLayers.Pixel(a.right,a.top)).transform(S3.gis.projection_current,S3.gis.proj4326);bbox=(new OpenLayers.Bounds(b.lon,b.lat,a.lon,a.lat)).toBBOX();OpenLayers.Request.GET({url:S3.gis.mgrs_url+"&bbox="+bbox,
callback:OpenLayers.Function.bind(this.response,this)});this.w=new Ext.Window({html:"Searching "+S3.gis.mgrs_name+", please wait.",width:200,title:"Please Wait."});this.w.show()}});var b="Select "+S3.gis.mgrs_name,b=new GeoExt.Action({text:b,control:selectPdfControl,map:map,toggleGroup:"controls",allowDepress:!1,tooltip:b});a.addSeparator();a.add(b)}
function addWMSGetFeatureInfoControl(){S3.gis.wmsGetFeatureInfo=new gxp.plugins.WMSGetFeatureInfo({actionTarget:"gis_toolbar",outputTarget:"map",outputConfig:{width:400,height:200},toggleGroup:"controls",format:"grid",infoActionTip:S3.i18n.gis_get_feature_info,popupTitle:S3.i18n.gis_feature_info});S3.gis.wmsGetFeatureInfo.target=S3.gis;S3.gis.wmsGetFeatureInfo.addActions()}
function addRemoveLayersControl(){S3.gis.addLayersControl=new gxp.plugins.AddLayers({actionTarget:"treepanel.tbar",addActionTip:"Add layers",addActionMenuText:"Add layers",addServerText:"Add a New Server",doneText:"Done",upload:{url:null},uploadText:S3.i18n.gis_uploadlayer,relativeUploadOnly:!1});var a=new GeoExt.data.LayerStore;S3.gis.addLayersControl.target=S3.gis.layerTree;S3.gis.layerTree.proxy=OpenLayers.ProxyHost;S3.gis.layerTree.layerSources={};S3.gis.layerTree.layerSources.local=new gxp.plugins.LayerSource({title:"local",
store:a});S3.gis.addLayersControl.addActions()[0].enable();S3.gis.removeLayerControl=new gxp.plugins.RemoveLayer({actionTarget:"treepanel.tbar",removeActionTip:"Remove layer"});S3.gis.removeLayerControl.target=S3.gis.layerTree;S3.gis.layerTree.mapPanel=S3.gis.mapPanel;S3.gis.removeLayerControl.addActions()}
function addLayerPropertiesButton(){var a=new Ext.Toolbar.Button({iconCls:"gxp-icon-layerproperties",tooltip:S3.i18n.gis_properties,handler:function(){var a=S3.gis.layerTree.root.findChildBy(function(a){return a.isSelected()?a.leaf?!0:!1:!1},null,!0);if(a){var c=a.layer.s3_layer_type,d=S3.Ap.concat("/gis/layer_"+c+".plain?layer_"+c+".layer_id="+a.layer.s3_layer_id+"&update=1");Ext.Ajax.request({url:d,method:"GET",success:function(d){S3.gis.propertiesWindow&&S3.gis.propertiesWindow.close();"feature"==
c?(d=new Ext.TabPanel({activeTab:0,items:[{title:"Layer Properties",html:d.responseText},{title:"Filter",id:"s3_gis_layer_filter_tab",html:""}]}),d.items.items[1].on("activate",function(){var c;Ext.iterate(S3.gis.layers_features,function(d){d.id==a.layer.s3_layer_id&&(c=d.url.replace(/.geojson.+/,"/search.plain"))});Ext.get("s3_gis_layer_filter_tab").load({url:c,discardUrl:!1,callback:function(){S3.addTooltips();S3.search.select_letter_label()},text:"Loading...",timeout:30,scripts:!1})})):d=new Ext.Panel({title:"Layer Properties",
html:d.responseText});S3.gis.propertiesWindow=new Ext.Window({width:400,layout:"fit",items:[d]});S3.gis.propertiesWindow.show();$("#plain form").submit(function(){var a=$('#plain input[name="id"]').val(),a=S3.Ap.concat("/gis/layer_"+c+"/"+a+".plain/update"),b=$("#plain input"),d=[];Ext.iterate(b,function(a,b){b.id&&b.id.indexOf("gis_layer_")!=-1&&d.push(b.id)});b=[];for(i=0;i<d.length;i++)(q=$("#"+d[i]).serialize())&&b.push(q);(q=$('#plain input[name="id"]').serialize())&&b.push(q);(q=$('#plain input[name="_formkey"]').serialize())&&
b.push(q);(q=$('#plain input[name="_formname"]').serialize())&&b.push(q);if(b.length>0){b=b.join("&");$.ajax({type:"POST",url:a,data:b,success:function(a){$("#plain").html(a)}})}return false});S3.addTooltips();S3.autocomplete("role","admin","group","gis_layer_"+c+"_role_required")}})}}});S3.gis.layerTree.getTopToolbar().add(a)};